diff options
-rw-r--r-- | drivers/ide/ide.c | 39 |
1 files changed, 22 insertions, 17 deletions
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c index c9a05721360e..8823df1b8716 100644 --- a/drivers/ide/ide.c +++ b/drivers/ide/ide.c | |||
@@ -498,7 +498,7 @@ out: | |||
498 | 498 | ||
499 | int set_pio_mode(ide_drive_t *drive, int arg) | 499 | int set_pio_mode(ide_drive_t *drive, int arg) |
500 | { | 500 | { |
501 | struct request rq; | 501 | struct request *rq; |
502 | ide_hwif_t *hwif = drive->hwif; | 502 | ide_hwif_t *hwif = drive->hwif; |
503 | const struct ide_port_ops *port_ops = hwif->port_ops; | 503 | const struct ide_port_ops *port_ops = hwif->port_ops; |
504 | 504 | ||
@@ -512,12 +512,15 @@ int set_pio_mode(ide_drive_t *drive, int arg) | |||
512 | if (drive->special.b.set_tune) | 512 | if (drive->special.b.set_tune) |
513 | return -EBUSY; | 513 | return -EBUSY; |
514 | 514 | ||
515 | ide_init_drive_cmd(&rq); | 515 | rq = blk_get_request(drive->queue, READ, __GFP_WAIT); |
516 | rq.cmd_type = REQ_TYPE_ATA_TASKFILE; | 516 | rq->cmd_type = REQ_TYPE_ATA_TASKFILE; |
517 | 517 | ||
518 | drive->tune_req = (u8) arg; | 518 | drive->tune_req = (u8) arg; |
519 | drive->special.b.set_tune = 1; | 519 | drive->special.b.set_tune = 1; |
520 | (void) ide_do_drive_cmd(drive, &rq, ide_wait); | 520 | |
521 | blk_execute_rq(drive->queue, NULL, rq, 0); | ||
522 | blk_put_request(rq); | ||
523 | |||
521 | return 0; | 524 | return 0; |
522 | } | 525 | } |
523 | 526 | ||
@@ -555,7 +558,7 @@ static int generic_ide_suspend(struct device *dev, pm_message_t mesg) | |||
555 | { | 558 | { |
556 | ide_drive_t *drive = dev->driver_data; | 559 | ide_drive_t *drive = dev->driver_data; |
557 | ide_hwif_t *hwif = HWIF(drive); | 560 | ide_hwif_t *hwif = HWIF(drive); |
558 | struct request rq; | 561 | struct request *rq; |
559 | struct request_pm_state rqpm; | 562 | struct request_pm_state rqpm; |
560 | ide_task_t args; | 563 | ide_task_t args; |
561 | int ret; | 564 | int ret; |
@@ -564,18 +567,19 @@ static int generic_ide_suspend(struct device *dev, pm_message_t mesg) | |||
564 | if (!(drive->dn % 2)) | 567 | if (!(drive->dn % 2)) |
565 | ide_acpi_get_timing(hwif); | 568 | ide_acpi_get_timing(hwif); |
566 | 569 | ||
567 | blk_rq_init(NULL, &rq); | ||
568 | memset(&rqpm, 0, sizeof(rqpm)); | 570 | memset(&rqpm, 0, sizeof(rqpm)); |
569 | memset(&args, 0, sizeof(args)); | 571 | memset(&args, 0, sizeof(args)); |
570 | rq.cmd_type = REQ_TYPE_PM_SUSPEND; | 572 | rq = blk_get_request(drive->queue, READ, __GFP_WAIT); |
571 | rq.special = &args; | 573 | rq->cmd_type = REQ_TYPE_PM_SUSPEND; |
572 | rq.data = &rqpm; | 574 | rq->special = &args; |
575 | rq->data = &rqpm; | ||
573 | rqpm.pm_step = ide_pm_state_start_suspend; | 576 | rqpm.pm_step = ide_pm_state_start_suspend; |
574 | if (mesg.event == PM_EVENT_PRETHAW) | 577 | if (mesg.event == PM_EVENT_PRETHAW) |
575 | mesg.event = PM_EVENT_FREEZE; | 578 | mesg.event = PM_EVENT_FREEZE; |
576 | rqpm.pm_state = mesg.event; | 579 | rqpm.pm_state = mesg.event; |
577 | 580 | ||
578 | ret = ide_do_drive_cmd(drive, &rq, ide_wait); | 581 | ret = blk_execute_rq(drive->queue, NULL, rq, 0); |
582 | blk_put_request(rq); | ||
579 | /* only call ACPI _PS3 after both drivers are suspended */ | 583 | /* only call ACPI _PS3 after both drivers are suspended */ |
580 | if (!ret && (((drive->dn % 2) && hwif->drives[0].present | 584 | if (!ret && (((drive->dn % 2) && hwif->drives[0].present |
581 | && hwif->drives[1].present) | 585 | && hwif->drives[1].present) |
@@ -589,7 +593,7 @@ static int generic_ide_resume(struct device *dev) | |||
589 | { | 593 | { |
590 | ide_drive_t *drive = dev->driver_data; | 594 | ide_drive_t *drive = dev->driver_data; |
591 | ide_hwif_t *hwif = HWIF(drive); | 595 | ide_hwif_t *hwif = HWIF(drive); |
592 | struct request rq; | 596 | struct request *rq; |
593 | struct request_pm_state rqpm; | 597 | struct request_pm_state rqpm; |
594 | ide_task_t args; | 598 | ide_task_t args; |
595 | int err; | 599 | int err; |
@@ -602,17 +606,18 @@ static int generic_ide_resume(struct device *dev) | |||
602 | 606 | ||
603 | ide_acpi_exec_tfs(drive); | 607 | ide_acpi_exec_tfs(drive); |
604 | 608 | ||
605 | blk_rq_init(NULL, &rq); | ||
606 | memset(&rqpm, 0, sizeof(rqpm)); | 609 | memset(&rqpm, 0, sizeof(rqpm)); |
607 | memset(&args, 0, sizeof(args)); | 610 | memset(&args, 0, sizeof(args)); |
608 | rq.cmd_type = REQ_TYPE_PM_RESUME; | 611 | rq = blk_get_request(drive->queue, READ, __GFP_WAIT); |
609 | rq.cmd_flags |= REQ_PREEMPT; | 612 | rq->cmd_type = REQ_TYPE_PM_RESUME; |
610 | rq.special = &args; | 613 | rq->cmd_flags |= REQ_PREEMPT; |
611 | rq.data = &rqpm; | 614 | rq->special = &args; |
615 | rq->data = &rqpm; | ||
612 | rqpm.pm_step = ide_pm_state_start_resume; | 616 | rqpm.pm_step = ide_pm_state_start_resume; |
613 | rqpm.pm_state = PM_EVENT_ON; | 617 | rqpm.pm_state = PM_EVENT_ON; |
614 | 618 | ||
615 | err = ide_do_drive_cmd(drive, &rq, ide_head_wait); | 619 | err = blk_execute_rq(drive->queue, NULL, rq, 1); |
620 | blk_put_request(rq); | ||
616 | 621 | ||
617 | if (err == 0 && dev->driver) { | 622 | if (err == 0 && dev->driver) { |
618 | ide_driver_t *drv = to_ide_driver(dev->driver); | 623 | ide_driver_t *drv = to_ide_driver(dev->driver); |