mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
[S390] qdio enhanced SIGA (iqdio) support.
Add support for z10 HiperSockets multiwrite SBALs on output queues. This is used on LPAR with EDDP enabled devices. Signed-off-by: Klaus-Dieter Wacker <[email protected]> Signed-off-by: Martin Schwidefsky <[email protected]>
This commit is contained in:
parent
b1e766137f
commit
7a0f475513
3 changed files with 29 additions and 6 deletions
|
|
@ -203,6 +203,9 @@ struct qdio_output_q {
|
|||
/* PCIs are enabled for the queue */
|
||||
int pci_out_enabled;
|
||||
|
||||
/* IQDIO: output multiple buffers (enhanced SIGA) */
|
||||
int use_enh_siga;
|
||||
|
||||
/* timer to check for more outbound work */
|
||||
struct timer_list timer;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -316,6 +316,9 @@ static inline int qdio_do_siga_output(struct qdio_q *q, unsigned int *busy_bit)
|
|||
unsigned int fc = 0;
|
||||
unsigned long schid;
|
||||
|
||||
if (q->u.out.use_enh_siga) {
|
||||
fc = 3;
|
||||
}
|
||||
if (!is_qebsm(q))
|
||||
schid = *((u32 *)&q->irq_ptr->schid);
|
||||
else {
|
||||
|
|
@ -1449,6 +1452,8 @@ int qdio_establish(struct qdio_initialize *init_data)
|
|||
}
|
||||
|
||||
qdio_setup_ssqd_info(irq_ptr);
|
||||
sprintf(dbf_text, "qDmmwc%2x", irq_ptr->ssqd_desc.mmwc);
|
||||
QDIO_DBF_TEXT2(0, setup, dbf_text);
|
||||
sprintf(dbf_text, "qib ac%2x", irq_ptr->qib.ac);
|
||||
QDIO_DBF_TEXT2(0, setup, dbf_text);
|
||||
|
||||
|
|
@ -1621,12 +1626,21 @@ static void handle_outbound(struct qdio_q *q, unsigned int callflags,
|
|||
if (multicast_outbound(q))
|
||||
qdio_kick_outbound_q(q);
|
||||
else
|
||||
/*
|
||||
* One siga-w per buffer required for unicast
|
||||
* HiperSockets.
|
||||
*/
|
||||
while (count--)
|
||||
if ((q->irq_ptr->ssqd_desc.mmwc > 1) &&
|
||||
(count > 1) &&
|
||||
(count <= q->irq_ptr->ssqd_desc.mmwc)) {
|
||||
/* exploit enhanced SIGA */
|
||||
q->u.out.use_enh_siga = 1;
|
||||
qdio_kick_outbound_q(q);
|
||||
} else {
|
||||
/*
|
||||
* One siga-w per buffer required for unicast
|
||||
* HiperSockets.
|
||||
*/
|
||||
q->u.out.use_enh_siga = 0;
|
||||
while (count--)
|
||||
qdio_kick_outbound_q(q);
|
||||
}
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue