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: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
@@ -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)
|
|||||||
/* 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);
|
||||||
|
Reference in New Issue
Block a user