Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c4e66c36 authored by Bartlomiej Zolnierkiewicz's avatar Bartlomiej Zolnierkiewicz
Browse files

ide: move ide_do_park_unpark() to ide-park.c

parent 1bc6daae
Loading
Loading
Loading
Loading
+0 −24
Original line number Diff line number Diff line
@@ -527,30 +527,6 @@ static ide_startstop_t ide_do_devset(ide_drive_t *drive, struct request *rq)
	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)
{
	u8 cmd = rq->cmd[0];
+25 −0
Original line number Diff line number Diff line
#include <linux/kernel.h>
#include <linux/ide.h>
#include <linux/hdreg.h>
#include <linux/jiffies.h>
#include <linux/blkdev.h>

@@ -60,6 +61,30 @@ static void issue_park_cmd(ide_drive_t *drive, unsigned long timeout)
	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,
		      char *buf)
{
+2 −0
Original line number Diff line number Diff line
@@ -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);

ide_startstop_t ide_do_park_unpark(ide_drive_t *, struct request *);

extern ide_startstop_t ide_do_reset (ide_drive_t *);

extern int ide_devset_execute(ide_drive_t *drive,