u8 mbccnt;
        u16 qdioac2;
        u64 sch_token;
-       u64:64;
+       u8 mro;
+       u8 mri;
+       u8:8;
+       u8 sbalic;
+       u16:16;
+       u8:8;
+       u8 mmwc;
 } __attribute__ ((packed));
 
 /* params are: ccw_device, qdio_error, queue_number,
 
        /* 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;
 };
 
        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 {
        }
 
        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);
 
                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;
        }