upgrade to linux 2.6.10-1.12_FC2
[linux-2.6.git] / drivers / s390 / cio / qdio.c
index c9dc6ec..3f30dd2 100644 (file)
@@ -56,7 +56,7 @@
 #include "ioasm.h"
 #include "chsc.h"
 
-#define VERSION_QDIO_C "$Revision: 1.86 $"
+#define VERSION_QDIO_C "$Revision: 1.93 $"
 
 /****************** MODULE PARAMETER VARIABLES ********************/
 MODULE_AUTHOR("Utz Bacher <utz.bacher@de.ibm.com>");
@@ -605,8 +605,8 @@ qdio_kick_outbound_q(struct qdio_q *q)
                        sprintf(dbf_text,"%4x%2x%2x",q->irq,q->q_no,
                                atomic_read(&q->busy_siga_counter));
                        QDIO_DBF_TEXT3(0,trace,dbf_text);
-                       q->timing.busy_start=0;
 #endif /* CONFIG_QDIO_DEBUG */
+                       q->timing.busy_start=0;
                        break;
                case (2|QDIO_SIGA_ERROR_B_BIT_SET):
                        /* cc=2 and busy bit: */
@@ -808,7 +808,7 @@ check_next:
 #endif /* QDIO_USE_PROCESSING_STATE */
                /* 
                 * not needed, as the inbound queue will be synced on the next
-                * siga-r
+                * siga-r, resp. tiqdio_is_inbound_q_done will do the siga-s
                 */
                /*SYNC_MEMORY;*/
                f++;
@@ -899,7 +899,7 @@ qdio_has_inbound_q_moved(struct qdio_q *q)
 
 /* means, no more buffers to be filled */
 inline static int
-iqdio_is_inbound_q_done(struct qdio_q *q)
+tiqdio_is_inbound_q_done(struct qdio_q *q)
 {
        int no_used;
 #ifdef CONFIG_QDIO_DEBUG
@@ -1139,7 +1139,7 @@ __tiqdio_inbound_processing(struct qdio_q *q, int spare_ind_was_set)
                goto out;
 
        qdio_kick_inbound_handler(q);
-       if (iqdio_is_inbound_q_done(q))
+       if (tiqdio_is_inbound_q_done(q))
                if (!qdio_stop_polling(q)) {
                        /* 
                         * we set the flags to get into the stuff next time,
@@ -2088,7 +2088,10 @@ tiqdio_set_subchannel_ind(struct qdio_irq *irq_ptr, int reset_to_zero)
                u32 kc:4;
                u32 reserved4:21;
                u32 isc:3;
-               u32 reserved5[2];
+               u32 word_with_d_bit;
+               /* set to 0x10000000 to enable
+                * time delay disablement facility */
+               u32 reserved5;
                u32 subsystem_id;
                u32 reserved6[1004];
                struct chsc_header response;
@@ -2126,6 +2129,12 @@ tiqdio_set_subchannel_ind(struct qdio_irq *irq_ptr, int reset_to_zero)
        scssc_area->kc = QDIO_STORAGE_KEY;
        scssc_area->isc = TIQDIO_THININT_ISC;
        scssc_area->subsystem_id = (1<<16) + irq_ptr->irq;
+       /* enables the time delay disablement facility. Don't care
+        * whether it is really there (i.e. we haven't checked for
+        * it) */
+       scssc_area->word_with_d_bit = 0x10000000;
+
+
 
        result = chsc(scssc_area);
        if (result) {
@@ -2626,6 +2635,7 @@ qdio_allocate(struct qdio_initialize *init_data)
 
        init_MUTEX(&irq_ptr->setting_up_sema);
 
+       /* QDR must be in DMA area since CCW data address is only 32 bit */
        irq_ptr->qdr=kmalloc(sizeof(struct qdr), GFP_KERNEL | GFP_DMA);
        if (!(irq_ptr->qdr)) {
                kfree(irq_ptr);