aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390
diff options
context:
space:
mode:
authorSwen Schillig <swen@vnet.ibm.com>2011-08-15 08:40:31 -0400
committerJames Bottomley <JBottomley@Parallels.com>2011-08-27 10:37:02 -0400
commitdfe5bb506172307e43287b8962348fb85801c0f4 (patch)
treee0d37e3d37068b39b886a3895f1cfacc7fb8c04f /drivers/s390
parentcc405acee244310cc87ddc5e3f4bc61342ec8161 (diff)
[SCSI] qdio: base support for hardware data router with zfcp
FICON Express8S supports hardware data router, which requires an adapted qdio request format. This part 1/2 provides the qdio base required for exploitation in zfcp. Signed-off-by: Swen Schillig <swen@vnet.ibm.com> Signed-off-by: Steffen Maier <maier@linux.vnet.ibm.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/s390')
-rw-r--r--drivers/s390/cio/qdio_main.c11
-rw-r--r--drivers/s390/cio/qdio_setup.c1
2 files changed, 9 insertions, 3 deletions
diff --git a/drivers/s390/cio/qdio_main.c b/drivers/s390/cio/qdio_main.c
index 288c9140290e..d2c1f1becd4f 100644
--- a/drivers/s390/cio/qdio_main.c
+++ b/drivers/s390/cio/qdio_main.c
@@ -156,7 +156,8 @@ again:
156 DBF_ERROR("%3d%3d%2d", count, tmp_count, nr); 156 DBF_ERROR("%3d%3d%2d", count, tmp_count, nr);
157 q->handler(q->irq_ptr->cdev, 157 q->handler(q->irq_ptr->cdev,
158 QDIO_ERROR_ACTIVATE_CHECK_CONDITION, 158 QDIO_ERROR_ACTIVATE_CHECK_CONDITION,
159 0, -1, -1, q->irq_ptr->int_parm); 159 q->nr, q->first_to_kick, count,
160 q->irq_ptr->int_parm);
160 return 0; 161 return 0;
161 } 162 }
162 return count - tmp_count; 163 return count - tmp_count;
@@ -202,7 +203,8 @@ again:
202 DBF_ERROR("%3d%3d%2d", count, tmp_count, nr); 203 DBF_ERROR("%3d%3d%2d", count, tmp_count, nr);
203 q->handler(q->irq_ptr->cdev, 204 q->handler(q->irq_ptr->cdev,
204 QDIO_ERROR_ACTIVATE_CHECK_CONDITION, 205 QDIO_ERROR_ACTIVATE_CHECK_CONDITION,
205 0, -1, -1, q->irq_ptr->int_parm); 206 q->nr, q->first_to_kick, count,
207 q->irq_ptr->int_parm);
206 return 0; 208 return 0;
207 } 209 }
208 WARN_ON(tmp_count); 210 WARN_ON(tmp_count);
@@ -942,6 +944,7 @@ static void qdio_handle_activate_check(struct ccw_device *cdev,
942{ 944{
943 struct qdio_irq *irq_ptr = cdev->private->qdio_data; 945 struct qdio_irq *irq_ptr = cdev->private->qdio_data;
944 struct qdio_q *q; 946 struct qdio_q *q;
947 int count;
945 948
946 DBF_ERROR("%4x ACT CHECK", irq_ptr->schid.sch_no); 949 DBF_ERROR("%4x ACT CHECK", irq_ptr->schid.sch_no);
947 DBF_ERROR("intp :%lx", intparm); 950 DBF_ERROR("intp :%lx", intparm);
@@ -955,8 +958,10 @@ static void qdio_handle_activate_check(struct ccw_device *cdev,
955 dump_stack(); 958 dump_stack();
956 goto no_handler; 959 goto no_handler;
957 } 960 }
961
962 count = sub_buf(q->first_to_check, q->first_to_kick);
958 q->handler(q->irq_ptr->cdev, QDIO_ERROR_ACTIVATE_CHECK_CONDITION, 963 q->handler(q->irq_ptr->cdev, QDIO_ERROR_ACTIVATE_CHECK_CONDITION,
959 0, -1, -1, irq_ptr->int_parm); 964 q->nr, q->first_to_kick, count, irq_ptr->int_parm);
960no_handler: 965no_handler:
961 qdio_set_state(irq_ptr, QDIO_IRQ_STATE_STOPPED); 966 qdio_set_state(irq_ptr, QDIO_IRQ_STATE_STOPPED);
962} 967}
diff --git a/drivers/s390/cio/qdio_setup.c b/drivers/s390/cio/qdio_setup.c
index 89107d0938c4..a82b2d39c9f0 100644
--- a/drivers/s390/cio/qdio_setup.c
+++ b/drivers/s390/cio/qdio_setup.c
@@ -345,6 +345,7 @@ static void setup_qdr(struct qdio_irq *irq_ptr,
345 int i; 345 int i;
346 346
347 irq_ptr->qdr->qfmt = qdio_init->q_format; 347 irq_ptr->qdr->qfmt = qdio_init->q_format;
348 irq_ptr->qdr->ac = qdio_init->qdr_ac;
348 irq_ptr->qdr->iqdcnt = qdio_init->no_input_qs; 349 irq_ptr->qdr->iqdcnt = qdio_init->no_input_qs;
349 irq_ptr->qdr->oqdcnt = qdio_init->no_output_qs; 350 irq_ptr->qdr->oqdcnt = qdio_init->no_output_qs;
350 irq_ptr->qdr->iqdsz = sizeof(struct qdesfmt0) / 4; /* size in words */ 351 irq_ptr->qdr->iqdsz = sizeof(struct qdesfmt0) / 4; /* size in words */