|
@@ -1995,6 +1995,36 @@ dasd_3990_erp_compound(struct dasd_ccw_req * erp, char *sense)
|
|
|
|
|
|
} /* end dasd_3990_erp_compound */
|
|
} /* end dasd_3990_erp_compound */
|
|
|
|
|
|
|
|
+/*
|
|
|
|
+ *DASD_3990_ERP_HANDLE_SIM
|
|
|
|
+ *
|
|
|
|
+ *DESCRIPTION
|
|
|
|
+ * inspects the SIM SENSE data and starts an appropriate action
|
|
|
|
+ *
|
|
|
|
+ * PARAMETER
|
|
|
|
+ * sense sense data of the actual error
|
|
|
|
+ *
|
|
|
|
+ * RETURN VALUES
|
|
|
|
+ * none
|
|
|
|
+ */
|
|
|
|
+void
|
|
|
|
+dasd_3990_erp_handle_sim(struct dasd_device *device, char *sense)
|
|
|
|
+{
|
|
|
|
+ /* print message according to log or message to operator mode */
|
|
|
|
+ if ((sense[24] & DASD_SIM_MSG_TO_OP) || (sense[1] & 0x10)) {
|
|
|
|
+
|
|
|
|
+ /* print SIM SRC from RefCode */
|
|
|
|
+ DEV_MESSAGE(KERN_ERR, device, "SIM - SRC: "
|
|
|
|
+ "%02x%02x%02x%02x", sense[22],
|
|
|
|
+ sense[23], sense[11], sense[12]);
|
|
|
|
+ } else if (sense[24] & DASD_SIM_LOG) {
|
|
|
|
+ /* print SIM SRC Refcode */
|
|
|
|
+ DEV_MESSAGE(KERN_WARNING, device, "SIM - SRC: "
|
|
|
|
+ "%02x%02x%02x%02x", sense[22],
|
|
|
|
+ sense[23], sense[11], sense[12]);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* DASD_3990_ERP_INSPECT_32
|
|
* DASD_3990_ERP_INSPECT_32
|
|
*
|
|
*
|
|
@@ -2018,6 +2048,10 @@ dasd_3990_erp_inspect_32(struct dasd_ccw_req * erp, char *sense)
|
|
|
|
|
|
erp->function = dasd_3990_erp_inspect_32;
|
|
erp->function = dasd_3990_erp_inspect_32;
|
|
|
|
|
|
|
|
+ /* check for SIM sense data */
|
|
|
|
+ if ((sense[6] & DASD_SIM_SENSE) == DASD_SIM_SENSE)
|
|
|
|
+ dasd_3990_erp_handle_sim(device, sense);
|
|
|
|
+
|
|
if (sense[25] & DASD_SENSE_BIT_0) {
|
|
if (sense[25] & DASD_SENSE_BIT_0) {
|
|
|
|
|
|
/* compound program action codes (byte25 bit 0 == '1') */
|
|
/* compound program action codes (byte25 bit 0 == '1') */
|