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

Commit 1f6d8a0f authored by Bartlomiej Zolnierkiewicz's avatar Bartlomiej Zolnierkiewicz
Browse files

ide: add ->read_altstatus method



* Remove ide_read_altstatus() inline helper.

* Add ->read_altstatus method for reading ATA Alternate Status
  register and use it instead of ->INB.

There should be no functional changes caused by this patch.

Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent b73c7ee2
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -119,6 +119,14 @@ static u8 ide_read_status(ide_hwif_t *hwif)
		return inb(hwif->io_ports.status_addr);
}

static u8 ide_read_altstatus(ide_hwif_t *hwif)
{
	if (hwif->host_flags & IDE_HFLAG_MMIO)
		return readb((void __iomem *)hwif->io_ports.ctl_addr);
	else
		return inb(hwif->io_ports.ctl_addr);
}

static u8 ide_read_sff_dma_status(ide_hwif_t *hwif)
{
	if (hwif->host_flags & IDE_HFLAG_MMIO)
@@ -349,6 +357,7 @@ void default_hwif_transport(ide_hwif_t *hwif)
{
	hwif->exec_command	  = ide_exec_command;
	hwif->read_status	  = ide_read_status;
	hwif->read_altstatus	  = ide_read_altstatus;
	hwif->read_sff_dma_status = ide_read_sff_dma_status;

	hwif->tf_load	  = ide_tf_load;
@@ -511,7 +520,7 @@ int drive_is_ready (ide_drive_t *drive)
	 * about possible isa-pnp and pci-pnp issues yet.
	 */
	if (hwif->io_ports.ctl_addr)
		stat = ide_read_altstatus(drive);
		stat = hwif->read_altstatus(hwif);
	else
		/* Note: this may clear a pending IRQ!! */
		stat = hwif->read_status(hwif);
@@ -724,7 +733,7 @@ int ide_driveid_update(ide_drive_t *drive)
		}

		msleep(50);	/* give drive a breather */
		stat = ide_read_altstatus(drive);
		stat = hwif->read_altstatus(hwif);
	} while (stat & BUSY_STAT);

	msleep(50);	/* wait for IRQ and DRQ_STAT */
+2 −2
Original line number Diff line number Diff line
@@ -275,7 +275,7 @@ static int actual_try_to_identify (ide_drive_t *drive, u8 cmd)
	msleep(50);

	if (io_ports->ctl_addr) {
		a = ide_read_altstatus(drive);
		a = hwif->read_altstatus(hwif);
		s = hwif->read_status(hwif);
		if ((a ^ s) & ~INDEX_STAT)
			/* ancient Seagate drives, broken interfaces */
@@ -306,7 +306,7 @@ static int actual_try_to_identify (ide_drive_t *drive, u8 cmd)
		}
		/* give drive a breather */
		msleep(50);
		s = use_altstatus ? ide_read_altstatus(drive)
		s = use_altstatus ? hwif->read_altstatus(hwif)
				  : hwif->read_status(hwif);
	} while (s & BUSY_STAT);

+6 −0
Original line number Diff line number Diff line
@@ -139,6 +139,11 @@ static u8 scc_read_status(ide_hwif_t *hwif)
	return (u8)in_be32((void *)hwif->io_ports.status_addr);
}

static u8 scc_read_altstatus(ide_hwif_t *hwif)
{
	return (u8)in_be32((void *)hwif->io_ports.ctl_addr);
}

static u8 scc_read_sff_dma_status(ide_hwif_t *hwif)
{
	return (u8)in_be32((void *)(hwif->dma_base + 4));
@@ -794,6 +799,7 @@ static void __devinit init_mmio_iops_scc(ide_hwif_t *hwif)

	hwif->exec_command	  = scc_exec_command;
	hwif->read_status	  = scc_read_status;
	hwif->read_altstatus	  = scc_read_altstatus;
	hwif->read_sff_dma_status = scc_read_sff_dma_status;

	hwif->tf_load = scc_tf_load;
+1 −7
Original line number Diff line number Diff line
@@ -491,6 +491,7 @@ typedef struct hwif_s {

	void	(*exec_command)(struct hwif_s *, u8);
	u8	(*read_status)(struct hwif_s *);
	u8	(*read_altstatus)(struct hwif_s *);
	u8	(*read_sff_dma_status)(struct hwif_s *);

	void (*tf_load)(ide_drive_t *, struct ide_task_s *);
@@ -1363,13 +1364,6 @@ static inline void ide_set_irq(ide_drive_t *drive, int on)
		       hwif->io_ports.ctl_addr);
}

static inline u8 ide_read_altstatus(ide_drive_t *drive)
{
	ide_hwif_t *hwif = drive->hwif;

	return hwif->INB(hwif->io_ports.ctl_addr);
}

static inline u8 ide_read_error(ide_drive_t *drive)
{
	ide_hwif_t *hwif = drive->hwif;