]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/s390/block/dasd_diag.c
Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx
[mv-sheeva.git] / drivers / s390 / block / dasd_diag.c
index 2b3bc3ec0541e2886d75a0058d347b29bb5fa61a..266b34b55403c638a946d918fb0f45f84b203f6d 100644 (file)
@@ -228,25 +228,22 @@ dasd_diag_term_IO(struct dasd_ccw_req * cqr)
 }
 
 /* Handle external interruption. */
-static void
-dasd_ext_handler(__u16 code)
+static void dasd_ext_handler(unsigned int ext_int_code,
+                            unsigned int param32, unsigned long param64)
 {
        struct dasd_ccw_req *cqr, *next;
        struct dasd_device *device;
        unsigned long long expires;
        unsigned long flags;
-       u8 int_code, status;
        addr_t ip;
        int rc;
 
-       int_code = *((u8 *) DASD_DIAG_LC_INT_CODE);
-       status = *((u8 *) DASD_DIAG_LC_INT_STATUS);
-       switch (int_code) {
+       switch (ext_int_code >> 24) {
        case DASD_DIAG_CODE_31BIT:
-               ip = (addr_t) *((u32 *) DASD_DIAG_LC_INT_PARM_31BIT);
+               ip = (addr_t) param32;
                break;
        case DASD_DIAG_CODE_64BIT:
-               ip = (addr_t) *((u64 *) DASD_DIAG_LC_INT_PARM_64BIT);
+               ip = (addr_t) param64;
                break;
        default:
                return;
@@ -281,7 +278,7 @@ dasd_ext_handler(__u16 code)
        cqr->stopclk = get_clock();
 
        expires = 0;
-       if (status == 0) {
+       if ((ext_int_code & 0xff0000) == 0) {
                cqr->status = DASD_CQR_SUCCESS;
                /* Start first request on queue if possible -> fast_io. */
                if (!list_empty(&device->ccw_queue)) {
@@ -296,8 +293,8 @@ dasd_ext_handler(__u16 code)
        } else {
                cqr->status = DASD_CQR_QUEUED;
                DBF_DEV_EVENT(DBF_DEBUG, device, "interrupt status for "
-                           "request %p was %d (%d retries left)", cqr, status,
-                           cqr->retries);
+                             "request %p was %d (%d retries left)", cqr,
+                             (ext_int_code >> 16) & 0xff, cqr->retries);
                dasd_diag_erp(device);
        }