Commit a3760467 authored by Paolo Bonzini's avatar Paolo Bonzini
Browse files

scsi: introduce scsi_build_sense



Move more knowledge of sense data format out of hw/scsi/scsi-bus.c
for reusability.

Reviewed-by: default avatarPhilippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent e5b5728c
Loading
Loading
Loading
Loading
+1 −7
Original line number Diff line number Diff line
@@ -818,13 +818,7 @@ void scsi_req_build_sense(SCSIRequest *req, SCSISense sense)
{
    trace_scsi_req_build_sense(req->dev->id, req->lun, req->tag,
                               sense.key, sense.asc, sense.ascq);
    memset(req->sense, 0, 18);
    req->sense[0] = 0x70;
    req->sense[2] = sense.key;
    req->sense[7] = 10;
    req->sense[12] = sense.asc;
    req->sense[13] = sense.ascq;
    req->sense_len = 18;
    req->sense_len = scsi_build_sense(req->sense, sense);
}

static void scsi_req_enqueue_internal(SCSIRequest *req)
+2 −0
Original line number Diff line number Diff line
@@ -30,6 +30,8 @@ typedef struct SCSISense {
    uint8_t ascq;
} SCSISense;

int scsi_build_sense(uint8_t *buf, SCSISense sense);

/*
 * Predefined sense codes
 */
+11 −0
Original line number Diff line number Diff line
@@ -96,6 +96,17 @@ int scsi_cdb_length(uint8_t *buf)
    return cdb_len;
}

int scsi_build_sense(uint8_t *buf, SCSISense sense)
{
    memset(buf, 0, 18);
    buf[0] = 0x70;
    buf[2] = sense.key;
    buf[7] = 10;
    buf[12] = sense.asc;
    buf[13] = sense.ascq;
    return 18;
}

/*
 * Predefined sense codes
 */