+static int resp_requests(struct scsi_cmnd * scp,
+ struct sdebug_dev_info * devip)
+{
+ unsigned char * sbuff;
+ unsigned char *cmd = (unsigned char *)scp->cmnd;
+ unsigned char arr[SDEBUG_SENSE_LEN];
+ int len = 18;
+
+ memset(arr, 0, SDEBUG_SENSE_LEN);
+ if (devip->reset == 1)
+ mk_sense_buffer(devip, 0, NO_ADDED_SENSE, 0);
+ sbuff = devip->sense_buff;
+ if ((cmd[1] & 1) && (! scsi_debug_dsense)) {
+ /* DESC bit set and sense_buff in fixed format */
+ arr[0] = 0x72;
+ arr[1] = sbuff[2]; /* sense key */
+ arr[2] = sbuff[12]; /* asc */
+ arr[3] = sbuff[13]; /* ascq */
+ len = 8;
+ } else
+ memcpy(arr, sbuff, SDEBUG_SENSE_LEN);
+ mk_sense_buffer(devip, 0, NO_ADDED_SENSE, 0);
+ return fill_from_dev_buffer(scp, arr, len);
+}
+
+#define SDEBUG_READCAP_ARR_SZ 8
+static int resp_readcap(struct scsi_cmnd * scp,
+ struct sdebug_dev_info * devip)
+{
+ unsigned char arr[SDEBUG_READCAP_ARR_SZ];
+ unsigned long capac;
+ int errsts;
+
+ if ((errsts = check_reset(scp, devip)))
+ return errsts;
+ memset(arr, 0, SDEBUG_READCAP_ARR_SZ);
+ capac = (unsigned long)sdebug_capacity - 1;
+ arr[0] = (capac >> 24);
+ arr[1] = (capac >> 16) & 0xff;
+ arr[2] = (capac >> 8) & 0xff;
+ arr[3] = capac & 0xff;
+ arr[6] = (SECT_SIZE_PER(target) >> 8) & 0xff;
+ arr[7] = SECT_SIZE_PER(target) & 0xff;
+ return fill_from_dev_buffer(scp, arr, SDEBUG_READCAP_ARR_SZ);
+}
+
+/* <<Following mode page info copied from ST318451LW>> */