--- src/sys/bus/cam/scsi/scsi_all.h 2007/11/22 16:34:25 1.9 +++ src/sys/bus/cam/scsi/scsi_all.h 2007/11/24 03:48:31 1.10 @@ -530,6 +530,7 @@ struct scsi_start_stop_unit #define READ_16 0x88 #define WRITE_16 0x8a #define SERVICE_ACTION_IN 0x9e +#define REPORT_LUNS 0xa0 #define MOVE_MEDIUM 0xa5 #define READ_12 0xa8 #define WRITE_12 0xaa @@ -718,6 +719,29 @@ struct scsi_read_capacity_data_long uint8_t length[4]; }; +struct scsi_report_luns +{ + u_int8_t opcode; + u_int8_t byte2; + u_int8_t unused[3]; + u_int8_t addr[4]; + u_int8_t control; +}; + +struct scsi_report_luns_data { + u_int8_t length[4]; /* length of LUN inventory, in bytes */ + u_int8_t reserved[4]; /* unused */ + /* + * LUN inventory- we only support the type zero form for now. + */ + struct { + u_int8_t lundata[8]; + } luns[1]; +}; +#define RPL_LUNDATA_ATYP_MASK 0xc0 /* MBZ for type 0 lun */ +#define RPL_LUNDATA_T0LUN 1 /* @ lundata[1] */ + + struct scsi_sense_data { u_int8_t error_code; @@ -796,6 +820,8 @@ struct scsi_mode_blk_desc #define SCSI_DEFAULT_DENSITY 0x00 /* use 'default' density */ #define SCSI_SAME_DENSITY 0x7f /* use 'same' density- >= SCSI-2 only */ + + /* * Status Byte */ @@ -1002,10 +1028,15 @@ void scsi_log_select(struct ccb_scsiio u_int32_t param_len, u_int8_t sense_len, u_int32_t timeout); +void scsi_prevent(struct ccb_scsiio *csio, u_int32_t retries, + void (*cbfcnp)(struct cam_periph *, union ccb *), + u_int8_t tag_action, u_int8_t action, + u_int8_t sense_len, u_int32_t timeout); + void scsi_read_capacity(struct ccb_scsiio *csio, u_int32_t retries, void (*cbfcnp)(struct cam_periph *, union ccb *), u_int8_t tag_action, - struct scsi_read_capacity_data *rcap_buf, + struct scsi_read_capacity_data *, u_int8_t sense_len, u_int32_t timeout); void scsi_read_capacity_16(struct ccb_scsiio *csio, uint32_t retries, void (*cbfcnp)(struct cam_periph *, @@ -1015,10 +1046,12 @@ void scsi_read_capacity_16(struct ccb_s *rcap_buf, uint8_t sense_len, uint32_t timeout); -void scsi_prevent(struct ccb_scsiio *csio, u_int32_t retries, - void (*cbfcnp)(struct cam_periph *, union ccb *), - u_int8_t tag_action, u_int8_t action, - u_int8_t sense_len, u_int32_t timeout); +void scsi_report_luns(struct ccb_scsiio *csio, u_int32_t retries, + void (*cbfcnp)(struct cam_periph *, + union ccb *), u_int8_t tag_action, + struct scsi_report_luns_data *, + u_int32_t alloc_len, u_int8_t sense_len, + u_int32_t timeout); void scsi_synchronize_cache(struct ccb_scsiio *csio, u_int32_t retries,