ide-cd: factor out request sense fixup from cdrom_pc_intr()

This is a preparation for cdrom_pc_intr() and cdrom_newpc_intr() merge.
Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
上级 03f537d5
...@@ -1047,6 +1047,20 @@ static ide_startstop_t cdrom_start_read (ide_drive_t *drive, unsigned int block) ...@@ -1047,6 +1047,20 @@ static ide_startstop_t cdrom_start_read (ide_drive_t *drive, unsigned int block)
* Execute all other packet commands. * Execute all other packet commands.
*/ */
static void ide_cd_request_sense_fixup(struct request *rq)
{
/*
* Some of the trailing request sense fields are optional,
* and some drives don't send them. Sigh.
*/
if (rq->cmd[0] == GPCMD_REQUEST_SENSE &&
rq->data_len > 0 && rq->data_len <= 5)
while (rq->data_len > 0) {
*(u8 *)rq->data++ = 0;
--rq->data_len;
}
}
/* Interrupt routine for packet command completion. */ /* Interrupt routine for packet command completion. */
static ide_startstop_t cdrom_pc_intr (ide_drive_t *drive) static ide_startstop_t cdrom_pc_intr (ide_drive_t *drive)
{ {
...@@ -1069,16 +1083,7 @@ static ide_startstop_t cdrom_pc_intr (ide_drive_t *drive) ...@@ -1069,16 +1083,7 @@ static ide_startstop_t cdrom_pc_intr (ide_drive_t *drive)
/* If DRQ is clear, the command has completed. /* If DRQ is clear, the command has completed.
Complain if we still have data left to transfer. */ Complain if we still have data left to transfer. */
if ((stat & DRQ_STAT) == 0) { if ((stat & DRQ_STAT) == 0) {
/* Some of the trailing request sense fields are optional, and ide_cd_request_sense_fixup(rq);
some drives don't send them. Sigh. */
if (rq->cmd[0] == GPCMD_REQUEST_SENSE &&
rq->data_len > 0 &&
rq->data_len <= 5) {
while (rq->data_len > 0) {
*(unsigned char *)rq->data++ = 0;
--rq->data_len;
}
}
if (rq->data_len == 0) if (rq->data_len == 0)
cdrom_end_request(drive, 1); cdrom_end_request(drive, 1);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册