mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-18 22:33:39 +00:00
Changed the scsi mode command to use 10 bytes scsi commands instead
of the 6 byte ones. This helps with using a IDE cdrom behind a USB interface. PR: kern/43885
This commit is contained in:
parent
505b28166c
commit
c463814756
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=105363
|
@ -2632,7 +2632,7 @@ cdreadsubchannel(struct cam_periph *periph, u_int32_t mode,
|
|||
static int
|
||||
cdgetmode(struct cam_periph *periph, struct cd_mode_data *data, u_int32_t page)
|
||||
{
|
||||
struct scsi_mode_sense_6 *scsi_cmd;
|
||||
struct scsi_mode_sense_10 *scsi_cmd;
|
||||
struct ccb_scsiio *csio;
|
||||
union ccb *ccb;
|
||||
int error;
|
||||
|
@ -2650,15 +2650,16 @@ cdgetmode(struct cam_periph *periph, struct cd_mode_data *data, u_int32_t page)
|
|||
/* data_ptr */ (u_int8_t *)data,
|
||||
/* dxfer_len */ sizeof(*data),
|
||||
/* sense_len */ SSD_FULL_SIZE,
|
||||
sizeof(struct scsi_mode_sense_6),
|
||||
sizeof(struct scsi_mode_sense_10),
|
||||
/* timeout */ 50000);
|
||||
|
||||
scsi_cmd = (struct scsi_mode_sense_6 *)&csio->cdb_io.cdb_bytes;
|
||||
scsi_cmd = (struct scsi_mode_sense_10 *)&csio->cdb_io.cdb_bytes;
|
||||
bzero (scsi_cmd, sizeof(*scsi_cmd));
|
||||
|
||||
scsi_cmd->page = page;
|
||||
scsi_cmd->length = sizeof(*data) & 0xff;
|
||||
scsi_cmd->opcode = MODE_SENSE;
|
||||
scsi_cmd->length[0] = (sizeof(*data)) >> 8;
|
||||
scsi_cmd->length[1] = (sizeof(*data)) & 0xff;
|
||||
scsi_cmd->opcode = MODE_SENSE_10;
|
||||
|
||||
error = cdrunccb(ccb, cderror, /*cam_flags*/CAM_RETRY_SELTO,
|
||||
/*sense_flags*/SF_RETRY_UA);
|
||||
|
@ -2671,7 +2672,7 @@ cdgetmode(struct cam_periph *periph, struct cd_mode_data *data, u_int32_t page)
|
|||
static int
|
||||
cdsetmode(struct cam_periph *periph, struct cd_mode_data *data)
|
||||
{
|
||||
struct scsi_mode_select_6 *scsi_cmd;
|
||||
struct scsi_mode_select_10 *scsi_cmd;
|
||||
struct ccb_scsiio *csio;
|
||||
union ccb *ccb;
|
||||
int error;
|
||||
|
@ -2690,15 +2691,16 @@ cdsetmode(struct cam_periph *periph, struct cd_mode_data *data)
|
|||
/* data_ptr */ (u_int8_t *)data,
|
||||
/* dxfer_len */ sizeof(*data),
|
||||
/* sense_len */ SSD_FULL_SIZE,
|
||||
sizeof(struct scsi_mode_select_6),
|
||||
sizeof(struct scsi_mode_select_10),
|
||||
/* timeout */ 50000);
|
||||
|
||||
scsi_cmd = (struct scsi_mode_select_6 *)&csio->cdb_io.cdb_bytes;
|
||||
scsi_cmd = (struct scsi_mode_select_10 *)&csio->cdb_io.cdb_bytes;
|
||||
|
||||
bzero(scsi_cmd, sizeof(*scsi_cmd));
|
||||
scsi_cmd->opcode = MODE_SELECT;
|
||||
scsi_cmd->byte2 |= SMS_PF;
|
||||
scsi_cmd->length = sizeof(*data) & 0xff;
|
||||
scsi_cmd->length[0] = (sizeof(*data)) >> 8;
|
||||
scsi_cmd->length[1] = (sizeof(*data)) & 0xff;
|
||||
data->header.data_length = 0;
|
||||
/*
|
||||
* SONY drives do not allow a mode select with a medium_type
|
||||
|
|
Loading…
Reference in a new issue