mirror of https://gitee.com/openkylin/linux.git
ide: move ide_do_park_unpark() to ide-park.c
Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
parent
1bc6daae4a
commit
c4e66c36cc
|
@ -527,30 +527,6 @@ static ide_startstop_t ide_do_devset(ide_drive_t *drive, struct request *rq)
|
||||||
return ide_stopped;
|
return ide_stopped;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ide_startstop_t ide_do_park_unpark(ide_drive_t *drive, struct request *rq)
|
|
||||||
{
|
|
||||||
ide_task_t task;
|
|
||||||
struct ide_taskfile *tf = &task.tf;
|
|
||||||
|
|
||||||
memset(&task, 0, sizeof(task));
|
|
||||||
if (rq->cmd[0] == REQ_PARK_HEADS) {
|
|
||||||
drive->sleep = *(unsigned long *)rq->special;
|
|
||||||
drive->dev_flags |= IDE_DFLAG_SLEEPING;
|
|
||||||
tf->command = ATA_CMD_IDLEIMMEDIATE;
|
|
||||||
tf->feature = 0x44;
|
|
||||||
tf->lbal = 0x4c;
|
|
||||||
tf->lbam = 0x4e;
|
|
||||||
tf->lbah = 0x55;
|
|
||||||
task.tf_flags |= IDE_TFLAG_CUSTOM_HANDLER;
|
|
||||||
} else /* cmd == REQ_UNPARK_HEADS */
|
|
||||||
tf->command = ATA_CMD_CHK_POWER;
|
|
||||||
|
|
||||||
task.tf_flags |= IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
|
|
||||||
task.rq = rq;
|
|
||||||
drive->hwif->data_phase = task.data_phase = TASKFILE_NO_DATA;
|
|
||||||
return do_rw_taskfile(drive, &task);
|
|
||||||
}
|
|
||||||
|
|
||||||
static ide_startstop_t ide_special_rq(ide_drive_t *drive, struct request *rq)
|
static ide_startstop_t ide_special_rq(ide_drive_t *drive, struct request *rq)
|
||||||
{
|
{
|
||||||
u8 cmd = rq->cmd[0];
|
u8 cmd = rq->cmd[0];
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/ide.h>
|
#include <linux/ide.h>
|
||||||
|
#include <linux/hdreg.h>
|
||||||
#include <linux/jiffies.h>
|
#include <linux/jiffies.h>
|
||||||
#include <linux/blkdev.h>
|
#include <linux/blkdev.h>
|
||||||
|
|
||||||
|
@ -60,6 +61,30 @@ static void issue_park_cmd(ide_drive_t *drive, unsigned long timeout)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ide_startstop_t ide_do_park_unpark(ide_drive_t *drive, struct request *rq)
|
||||||
|
{
|
||||||
|
ide_task_t task;
|
||||||
|
struct ide_taskfile *tf = &task.tf;
|
||||||
|
|
||||||
|
memset(&task, 0, sizeof(task));
|
||||||
|
if (rq->cmd[0] == REQ_PARK_HEADS) {
|
||||||
|
drive->sleep = *(unsigned long *)rq->special;
|
||||||
|
drive->dev_flags |= IDE_DFLAG_SLEEPING;
|
||||||
|
tf->command = ATA_CMD_IDLEIMMEDIATE;
|
||||||
|
tf->feature = 0x44;
|
||||||
|
tf->lbal = 0x4c;
|
||||||
|
tf->lbam = 0x4e;
|
||||||
|
tf->lbah = 0x55;
|
||||||
|
task.tf_flags |= IDE_TFLAG_CUSTOM_HANDLER;
|
||||||
|
} else /* cmd == REQ_UNPARK_HEADS */
|
||||||
|
tf->command = ATA_CMD_CHK_POWER;
|
||||||
|
|
||||||
|
task.tf_flags |= IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
|
||||||
|
task.rq = rq;
|
||||||
|
drive->hwif->data_phase = task.data_phase = TASKFILE_NO_DATA;
|
||||||
|
return do_rw_taskfile(drive, &task);
|
||||||
|
}
|
||||||
|
|
||||||
ssize_t ide_park_show(struct device *dev, struct device_attribute *attr,
|
ssize_t ide_park_show(struct device *dev, struct device_attribute *attr,
|
||||||
char *buf)
|
char *buf)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1169,6 +1169,8 @@ int ide_busy_sleep(ide_hwif_t *, unsigned long, int);
|
||||||
|
|
||||||
int ide_wait_stat(ide_startstop_t *, ide_drive_t *, u8, u8, unsigned long);
|
int ide_wait_stat(ide_startstop_t *, ide_drive_t *, u8, u8, unsigned long);
|
||||||
|
|
||||||
|
ide_startstop_t ide_do_park_unpark(ide_drive_t *, struct request *);
|
||||||
|
|
||||||
extern ide_startstop_t ide_do_reset (ide_drive_t *);
|
extern ide_startstop_t ide_do_reset (ide_drive_t *);
|
||||||
|
|
||||||
extern int ide_devset_execute(ide_drive_t *drive,
|
extern int ide_devset_execute(ide_drive_t *drive,
|
||||||
|
|
Loading…
Reference in New Issue