linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] ide: turn selectproc() method into dev_select() method
@ 2009-03-19 15:31 Sergei Shtylyov
  2009-03-19 15:45 ` Sergei Shtylyov
  2009-03-19 21:57 ` Benjamin Herrenschmidt
  0 siblings, 2 replies; 5+ messages in thread
From: Sergei Shtylyov @ 2009-03-19 15:31 UTC (permalink / raw)
  To: bzolnier; +Cc: linux-ide, benh

Turn selectproc() method into dev_select() method by teaching it to write to the
device register and moving it from 'struct ide_port_ops' to 'struct ide_tp_ops'.

Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>

---
This patch is atop of the latest pata-2.6 series...

Ben, could you please verify my changes to the PowerMac IDE driver?

 drivers/ide/ht6560b.c    |   20 ++++++++++++++--
 drivers/ide/ide-io-std.c |   12 +++++++++
 drivers/ide/ide-iops.c   |   12 ---------
 drivers/ide/ns87415.c    |   22 +++++++++++++----
 drivers/ide/pmac.c       |   58 +++++++++++++++++++++++++++++++----------------
 drivers/ide/qd65xx.c     |   21 ++++++++++++++---
 drivers/ide/trm290.c     |   21 ++++++++++++-----
 drivers/ide/tx4939ide.c  |    2 -
 include/linux/ide.h      |    5 +---
 9 files changed, 124 insertions(+), 49 deletions(-)

Index: linux-2.6/drivers/ide/ht6560b.c
===================================================================
--- linux-2.6.orig/drivers/ide/ht6560b.c
+++ linux-2.6/drivers/ide/ht6560b.c
@@ -103,7 +103,7 @@
 /*
  * This routine is invoked from ide.c to prepare for access to a given drive.
  */
-static void ht6560b_selectproc (ide_drive_t *drive)
+static void ht6560b_dev_select(ide_drive_t *drive)
 {
 	ide_hwif_t *hwif = drive->hwif;
 	unsigned long flags;
@@ -143,6 +143,8 @@ static void ht6560b_selectproc (ide_driv
 #endif
 	}
 	local_irq_restore(flags);
+
+	outb(drive->select | ATA_DEVICE_OBS, hwif->io_ports.device_addr);
 }
 
 /*
@@ -305,15 +307,29 @@ static int probe_ht6560b;
 module_param_named(probe, probe_ht6560b, bool, 0);
 MODULE_PARM_DESC(probe, "probe for HT6560B chipset");
 
+static const struct ide_tp_ops ht6560b_tp_ops = {
+	.exec_command		= ide_exec_command,
+	.read_status		= ide_read_status,
+	.read_altstatus		= ide_read_altstatus,
+	.write_devctl		= ide_write_devctl,
+
+	.dev_select		= ht6560b_dev_select,
+	.tf_load		= ide_tf_load,
+	.tf_read		= ide_tf_read,
+
+	.input_data		= ide_input_data,
+	.output_data		= ide_output_data,
+};
+
 static const struct ide_port_ops ht6560b_port_ops = {
 	.init_dev		= ht6560b_init_dev,
 	.set_pio_mode		= ht6560b_set_pio_mode,
-	.selectproc		= ht6560b_selectproc,
 };
 
 static const struct ide_port_info ht6560b_port_info __initdata = {
 	.name			= DRV_NAME,
 	.chipset		= ide_ht6560b,
+	.tp_ops 		= &ht6560b_tp_ops,
 	.port_ops		= &ht6560b_port_ops,
 	.host_flags		= IDE_HFLAG_SERIALIZE | /* is this needed? */
 				  IDE_HFLAG_NO_DMA |
Index: linux-2.6/drivers/ide/ide-io-std.c
===================================================================
--- linux-2.6.orig/drivers/ide/ide-io-std.c
+++ linux-2.6/drivers/ide/ide-io-std.c
@@ -73,6 +73,18 @@ void ide_write_devctl(ide_hwif_t *hwif, 
 }
 EXPORT_SYMBOL_GPL(ide_write_devctl);
 
+void ide_dev_select(ide_drive_t *drive)
+{
+	ide_hwif_t *hwif = drive->hwif;
+	u8 select = drive->select | ATA_DEVICE_OBS;
+
+	if (hwif->host_flags & IDE_HFLAG_MMIO)
+		writeb(select, (void __iomem *)hwif->io_ports.device_addr);
+	else
+		outb(select, hwif->io_ports.device_addr);
+}
+EXPORT_SYMBOL_GPL(ide_dev_select);
+
 void ide_tf_load(ide_drive_t *drive, struct ide_cmd *cmd)
 {
 	ide_hwif_t *hwif = drive->hwif;
Index: linux-2.6/drivers/ide/ide-iops.c
===================================================================
--- linux-2.6.orig/drivers/ide/ide-iops.c
+++ linux-2.6/drivers/ide/ide-iops.c
@@ -29,17 +29,7 @@
 
 void SELECT_DRIVE(ide_drive_t *drive)
 {
-	ide_hwif_t *hwif = drive->hwif;
-	const struct ide_port_ops *port_ops = hwif->port_ops;
-	struct ide_cmd cmd;
-
-	if (port_ops && port_ops->selectproc)
-		port_ops->selectproc(drive);
-
-	memset(&cmd, 0, sizeof(cmd));
-	cmd.tf_flags = IDE_TFLAG_OUT_DEVICE;
-
-	drive->hwif->tp_ops->tf_load(drive, &cmd);
+	drive->hwif->tp_ops->dev_select(drive);
 }
 
 void SELECT_MASK(ide_drive_t *drive, int mask)
Index: linux-2.6/drivers/ide/ns87415.c
===================================================================
--- linux-2.6.orig/drivers/ide/ns87415.c
+++ linux-2.6/drivers/ide/ns87415.c
@@ -182,10 +182,12 @@ static void ns87415_prepare_drive (ide_d
 	local_irq_restore(flags);
 }
 
-static void ns87415_selectproc (ide_drive_t *drive)
+static void ns87415_dev_select(ide_drive_t *drive)
 {
 	ns87415_prepare_drive(drive,
 			      !!(drive->dev_flags & IDE_DFLAG_USING_DMA));
+
+	outb(drive->select | ATA_DEVICE_OBS, drive->hwif->io_ports.device_addr);
 }
 
 static void ns87415_dma_start(ide_drive_t *drive)
@@ -229,7 +231,7 @@ static void __devinit init_hwif_ns87415 
 	 * Also, leave IRQ masked during drive probing, to prevent infinite
 	 * interrupts from a potentially floating INTA..
 	 *
-	 * IRQs get unmasked in selectproc when drive is first used.
+	 * IRQs get unmasked in dev_select() when drive is first used.
 	 */
 	(void) pci_read_config_dword(dev, 0x40, &ctrl);
 	(void) pci_read_config_byte(dev, 0x09, &progif);
@@ -281,8 +283,18 @@ static void __devinit init_hwif_ns87415 
 	outb(0x60, hwif->dma_base + ATA_DMA_STATUS);
 }
 
-static const struct ide_port_ops ns87415_port_ops = {
-	.selectproc		= ns87415_selectproc,
+static const struct ide_tp_ops ht6560b_tp_ops = {
+	.exec_command		= ide_exec_command,
+	.read_status		= ide_read_status,
+	.read_altstatus		= ide_read_altstatus,
+	.write_devctl		= ide_write_devctl,
+
+	.dev_select		= ns87415_dev_select,
+	.tf_load		= ide_tf_load,
+	.tf_read		= ide_tf_read,
+
+	.input_data		= ide_input_data,
+	.output_data		= ide_output_data,
 };
 
 static const struct ide_dma_ops ns87415_dma_ops = {
@@ -299,7 +311,7 @@ static const struct ide_dma_ops ns87415_
 static const struct ide_port_info ns87415_chipset __devinitdata = {
 	.name		= DRV_NAME,
 	.init_hwif	= init_hwif_ns87415,
-	.port_ops	= &ns87415_port_ops,
+	.tp_ops 	= &ns87415_tp_ops,
 	.dma_ops	= &ns87415_dma_ops,
 	.host_flags	= IDE_HFLAG_TRUST_BIOS_FOR_DMA |
 			  IDE_HFLAG_NO_ATAPI_DMA,
Index: linux-2.6/drivers/ide/pmac.c
===================================================================
--- linux-2.6.orig/drivers/ide/pmac.c
+++ linux-2.6/drivers/ide/pmac.c
@@ -404,8 +404,6 @@ kauai_lookup_timing(struct kauai_timing*
 #define IDE_WAKEUP_DELAY	(1*HZ)
 
 static int pmac_ide_init_dma(ide_hwif_t *, const struct ide_port_info *);
-static void pmac_ide_selectproc(ide_drive_t *drive);
-static void pmac_ide_kauai_selectproc(ide_drive_t *drive);
 
 #define PMAC_IDE_REG(x) \
 	((void __iomem *)((drive)->hwif->io_ports.data_addr + (x)))
@@ -415,8 +413,7 @@ static void pmac_ide_kauai_selectproc(id
  * timing register when selecting that unit. This version is for
  * ASICs with a single timing register
  */
-static void
-pmac_ide_selectproc(ide_drive_t *drive)
+static void pmac_ide_apply_timings(ide_drive_t *drive)
 {
 	ide_hwif_t *hwif = drive->hwif;
 	pmac_ide_hwif_t *pmif =
@@ -434,8 +431,7 @@ pmac_ide_selectproc(ide_drive_t *drive)
  * timing register when selecting that unit. This version is for
  * ASICs with a dual timing register (Kauai)
  */
-static void
-pmac_ide_kauai_selectproc(ide_drive_t *drive)
+static void pmac_ide_kauai_apply_timings(ide_drive_t *drive)
 {
 	ide_hwif_t *hwif = drive->hwif;
 	pmac_ide_hwif_t *pmif =
@@ -464,9 +460,25 @@ pmac_ide_do_update_timings(ide_drive_t *
 	if (pmif->kind == controller_sh_ata6 ||
 	    pmif->kind == controller_un_ata6 ||
 	    pmif->kind == controller_k2_ata6)
-		pmac_ide_kauai_selectproc(drive);
+		pmac_ide_kauai_apply_timings(drive);
 	else
-		pmac_ide_selectproc(drive);
+		pmac_ide_apply_timings(drive);
+}
+
+static void pmac_dev_select(ide_drive_t *drive)
+{
+	pmac_ide_apply_timings(drive);
+
+	writeb(drive->select | ATA_DEVICE_OBS,
+	       (void __iomem *)drive->hwif->io_ports.device_addr);
+}
+
+static void pmac_kauai_dev_select(ide_drive_t *drive)
+{
+	pmac_ide_kauai_apply_timings(drive);
+
+	writeb(drive->select | ATA_DEVICE_OBS,
+	       (void __iomem *)drive->hwif->io_ports.device_addr);
 }
 
 static void pmac_exec_command(ide_hwif_t *hwif, u8 cmd)
@@ -947,6 +959,7 @@ static const struct ide_tp_ops pmac_tp_o
 	.read_altstatus		= ide_read_altstatus,
 	.write_devctl		= pmac_write_devctl,
 
+	.dev_select		= pmac_dev_select,
 	.tf_load		= ide_tf_load,
 	.tf_read		= ide_tf_read,
 
@@ -954,19 +967,24 @@ static const struct ide_tp_ops pmac_tp_o
 	.output_data		= ide_output_data,
 };
 
-static const struct ide_port_ops pmac_ide_ata6_port_ops = {
-	.init_dev		= pmac_ide_init_dev,
-	.set_pio_mode		= pmac_ide_set_pio_mode,
-	.set_dma_mode		= pmac_ide_set_dma_mode,
-	.selectproc		= pmac_ide_kauai_selectproc,
-	.cable_detect		= pmac_ide_cable_detect,
+static const struct ide_tp_ops pmac_ata6_tp_ops = {
+	.exec_command		= pmac_exec_command,
+	.read_status		= ide_read_status,
+	.read_altstatus		= ide_read_altstatus,
+	.write_devctl		= pmac_write_devctl,
+
+	.dev_select		= pmac_kauai_dev_select,
+	.tf_load		= ide_tf_load,
+	.tf_read		= ide_tf_read,
+
+	.input_data		= ide_input_data,
+	.output_data		= ide_output_data,
 };
 
 static const struct ide_port_ops pmac_ide_ata4_port_ops = {
 	.init_dev		= pmac_ide_init_dev,
 	.set_pio_mode		= pmac_ide_set_pio_mode,
 	.set_dma_mode		= pmac_ide_set_dma_mode,
-	.selectproc		= pmac_ide_selectproc,
 	.cable_detect		= pmac_ide_cable_detect,
 };
 
@@ -974,7 +992,6 @@ static const struct ide_port_ops pmac_id
 	.init_dev		= pmac_ide_init_dev,
 	.set_pio_mode		= pmac_ide_set_pio_mode,
 	.set_dma_mode		= pmac_ide_set_dma_mode,
-	.selectproc		= pmac_ide_selectproc,
 };
 
 static const struct ide_dma_ops pmac_dma_ops;
@@ -1011,15 +1028,18 @@ static int __devinit pmac_ide_setup_devi
 	pmif->broken_dma = pmif->broken_dma_warn = 0;
 	if (of_device_is_compatible(np, "shasta-ata")) {
 		pmif->kind = controller_sh_ata6;
-		d.port_ops = &pmac_ide_ata6_port_ops;
+		d.tp_ops = &pmac_ata6_tp_ops;
+		d.port_ops = &pmac_ide_ata4_port_ops;
 		d.udma_mask = ATA_UDMA6;
 	} else if (of_device_is_compatible(np, "kauai-ata")) {
 		pmif->kind = controller_un_ata6;
-		d.port_ops = &pmac_ide_ata6_port_ops;
+		d.tp_ops = &pmac_ata6_tp_ops;
+		d.port_ops = &pmac_ide_ata4_port_ops;
 		d.udma_mask = ATA_UDMA5;
 	} else if (of_device_is_compatible(np, "K2-UATA")) {
 		pmif->kind = controller_k2_ata6;
-		d.port_ops = &pmac_ide_ata6_port_ops;
+		d.tp_ops = &pmac_ata6_tp_ops;
+		d.port_ops = &pmac_ide_ata4_port_ops;
 		d.udma_mask = ATA_UDMA5;
 	} else if (of_device_is_compatible(np, "keylargo-ata")) {
 		if (strcmp(np->name, "ata-4") == 0) {
Index: linux-2.6/drivers/ide/qd65xx.c
===================================================================
--- linux-2.6.orig/drivers/ide/qd65xx.c
+++ linux-2.6/drivers/ide/qd65xx.c
@@ -90,13 +90,15 @@ static int timings[4]={-1,-1,-1,-1}; /* 
  * This routine is invoked to prepare for access to a given drive.
  */
 
-static void qd65xx_select(ide_drive_t *drive)
+static void qd65xx_dev_select(ide_drive_t *drive)
 {
 	u8 index = ((	(QD_TIMREG(drive)) & 0x80 ) >> 7) |
 			(QD_TIMREG(drive) & 0x02);
 
 	if (timings[index] != QD_TIMING(drive))
 		outb(timings[index] = QD_TIMING(drive), QD_TIMREG(drive));
+
+	outb(drive->select | ATA_DEVICE_OBS, drive->hwif->io_ports.device_addr);
 }
 
 /*
@@ -309,20 +311,33 @@ static void __init qd6580_init_dev(ide_d
 	drive->drive_data = (drive->dn & 1) ? t2 : t1;
 }
 
+static const struct ide_tp_ops qd65xx_tp_ops = {
+	.exec_command		= ide_exec_command,
+	.read_status		= ide_read_status,
+	.read_altstatus		= ide_read_altstatus,
+	.write_devctl		= ide_write_devctl,
+
+	.dev_select		= qd65xx_dev_select,
+	.tf_load		= ide_tf_load,
+	.tf_read		= ide_tf_read,
+
+	.input_data		= ide_input_data,
+	.output_data		= ide_output_data,
+};
+
 static const struct ide_port_ops qd6500_port_ops = {
 	.init_dev		= qd6500_init_dev,
 	.set_pio_mode		= qd6500_set_pio_mode,
-	.selectproc		= qd65xx_select,
 };
 
 static const struct ide_port_ops qd6580_port_ops = {
 	.init_dev		= qd6580_init_dev,
 	.set_pio_mode		= qd6580_set_pio_mode,
-	.selectproc		= qd65xx_select,
 };
 
 static const struct ide_port_info qd65xx_port_info __initdata = {
 	.name			= DRV_NAME,
+	.tp_ops 		= &qd65xx_tp_ops,
 	.chipset		= ide_qd65xx,
 	.host_flags		= IDE_HFLAG_IO_32BIT |
 				  IDE_HFLAG_NO_DMA,
Index: linux-2.6/drivers/ide/trm290.c
===================================================================
--- linux-2.6.orig/drivers/ide/trm290.c
+++ linux-2.6/drivers/ide/trm290.c
@@ -171,10 +171,11 @@ static void trm290_prepare_drive (ide_dr
 	local_irq_restore(flags);
 }
 
-static void trm290_selectproc (ide_drive_t *drive)
+static void trm290_dev_select(ide_drive_t *drive)
 {
 	trm290_prepare_drive(drive, !!(drive->dev_flags & IDE_DFLAG_USING_DMA));
-}
+
+	outb(drive->select | ATA_DEVICE_OBS, drive->hwif->io_ports.device_addr);}
 
 static int trm290_dma_check(ide_drive_t *drive, struct ide_cmd *cmd)
 {
@@ -298,8 +299,18 @@ static void __devinit init_hwif_trm290(i
 #endif
 }
 
-static const struct ide_port_ops trm290_port_ops = {
-	.selectproc		= trm290_selectproc,
+static const struct ide_tp_ops trm290_tp_ops = {
+	.exec_command		= ide_exec_command,
+	.read_status		= ide_read_status,
+	.read_altstatus		= ide_read_altstatus,
+	.write_devctl		= ide_write_devctl,
+
+	.dev_select		= trm290_dev_select,
+	.tf_load		= ide_tf_load,
+	.tf_read		= ide_tf_read,
+
+	.input_data		= ide_input_data,
+	.output_data		= ide_output_data,
 };
 
 static struct ide_dma_ops trm290_dma_ops = {
@@ -315,7 +326,7 @@ static struct ide_dma_ops trm290_dma_ops
 static const struct ide_port_info trm290_chipset __devinitdata = {
 	.name		= DRV_NAME,
 	.init_hwif	= init_hwif_trm290,
-	.port_ops	= &trm290_port_ops,
+	.tp_ops 	= &trm290_tp_ops,
 	.dma_ops	= &trm290_dma_ops,
 	.host_flags	= IDE_HFLAG_TRM290 |
 			  IDE_HFLAG_NO_ATAPI_DMA |
Index: linux-2.6/drivers/ide/tx4939ide.c
===================================================================
--- linux-2.6.orig/drivers/ide/tx4939ide.c
+++ linux-2.6/drivers/ide/tx4939ide.c
@@ -429,7 +429,7 @@ static void tx4939ide_tf_load_fixup(ide_
 	 * Fix ATA100 CORE System Control Register. (The write to the
 	 * Device/Head register may write wrong data to the System
 	 * Control Register)
-	 * While Sys_Ctl is written here, selectproc is not needed.
+	 * While Sys_Ctl is written here, dev_select() is not needed.
 	 */
 	tx4939ide_writew(sysctl, base, TX4939IDE_Sys_Ctl);
 }
Index: linux-2.6/include/linux/ide.h
===================================================================
--- linux-2.6.orig/include/linux/ide.h
+++ linux-2.6/include/linux/ide.h
@@ -603,7 +603,7 @@ struct ide_drive_s {
 
 	unsigned int	bios_cyl;	/* BIOS/fdisk/LILO number of cyls */
 	unsigned int	cyl;		/* "real" number of cyls */
-	unsigned int	drive_data;	/* used by set_pio_mode/selectproc */
+	unsigned int	drive_data;	/* used by set_pio_mode/dev_select() */
 	unsigned int	failures;	/* current failure count */
 	unsigned int	max_failures;	/* maximum allowed failure count */
 	u64		probed_capacity;/* initial reported media capacity (ide-cd only currently) */
@@ -661,6 +661,7 @@ struct ide_tp_ops {
 	u8	(*read_altstatus)(struct hwif_s *);
 	void	(*write_devctl)(struct hwif_s *, u8);
 
+	void	(*dev_select)(ide_drive_t *);
 	void	(*tf_load)(ide_drive_t *, struct ide_cmd *);
 	void	(*tf_read)(ide_drive_t *, struct ide_cmd *);
 
@@ -678,7 +679,6 @@ extern const struct ide_tp_ops default_t
  * @init_dev:		host specific initialization of a device
  * @set_pio_mode:	routine to program host for PIO mode
  * @set_dma_mode:	routine to program host for DMA mode
- * @selectproc:		tweaks hardware to select drive
  * @reset_poll:		chipset polling based on hba specifics
  * @pre_reset:		chipset specific changes to default for device-hba resets
  * @resetproc:		routine to reset controller after a disk reset
@@ -695,7 +695,6 @@ struct ide_port_ops {
 	void	(*init_dev)(ide_drive_t *);
 	void	(*set_pio_mode)(ide_drive_t *, const u8);
 	void	(*set_dma_mode)(ide_drive_t *, const u8);
-	void	(*selectproc)(ide_drive_t *);
 	int	(*reset_poll)(ide_drive_t *);
 	void	(*pre_reset)(ide_drive_t *);
 	void	(*resetproc)(ide_drive_t *);


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/2] ide: turn selectproc() method into dev_select() method
  2009-03-19 15:31 [PATCH 1/2] ide: turn selectproc() method into dev_select() method Sergei Shtylyov
@ 2009-03-19 15:45 ` Sergei Shtylyov
  2009-03-20 19:02   ` Bartlomiej Zolnierkiewicz
  2009-03-19 21:57 ` Benjamin Herrenschmidt
  1 sibling, 1 reply; 5+ messages in thread
From: Sergei Shtylyov @ 2009-03-19 15:45 UTC (permalink / raw)
  To: Sergei Shtylyov; +Cc: bzolnier, linux-ide, benh

Hello, I wrote:

> Turn selectproc() method into dev_select() method by teaching it to write to the
> device register and moving it from 'struct ide_port_ops' to 'struct ide_tp_ops'.

> Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>

[...]

> Index: linux-2.6/drivers/ide/trm290.c
> ===================================================================
> --- linux-2.6.orig/drivers/ide/trm290.c
> +++ linux-2.6/drivers/ide/trm290.c
> @@ -171,10 +171,11 @@ static void trm290_prepare_drive (ide_dr
>  	local_irq_restore(flags);
>  }
>  
> -static void trm290_selectproc (ide_drive_t *drive)
> +static void trm290_dev_select(ide_drive_t *drive)
>  {
>  	trm290_prepare_drive(drive, !!(drive->dev_flags & IDE_DFLAG_USING_DMA));
> -}
> +
> +	outb(drive->select | ATA_DEVICE_OBS, drive->hwif->io_ports.device_addr);}

    Oops, I keep forgetting about running checkpatch.pl first. :-<
    Bart, do I need to repost, or you can fix it while applying?

MBR, Sergei

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/2] ide: turn selectproc() method into dev_select() method
  2009-03-19 15:31 [PATCH 1/2] ide: turn selectproc() method into dev_select() method Sergei Shtylyov
  2009-03-19 15:45 ` Sergei Shtylyov
@ 2009-03-19 21:57 ` Benjamin Herrenschmidt
  1 sibling, 0 replies; 5+ messages in thread
From: Benjamin Herrenschmidt @ 2009-03-19 21:57 UTC (permalink / raw)
  To: Sergei Shtylyov; +Cc: bzolnier, linux-ide

On Thu, 2009-03-19 at 19:31 +0400, Sergei Shtylyov wrote:
> Turn selectproc() method into dev_select() method by teaching it to write to the
> device register and moving it from 'struct ide_port_ops' to 'struct ide_tp_ops'.
> 
> Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
> 
> ---
> This patch is atop of the latest pata-2.6 series...
> 
> Ben, could you please verify my changes to the PowerMac IDE driver?

First look seems to be ok.

Ben.

>  drivers/ide/ht6560b.c    |   20 ++++++++++++++--
>  drivers/ide/ide-io-std.c |   12 +++++++++
>  drivers/ide/ide-iops.c   |   12 ---------
>  drivers/ide/ns87415.c    |   22 +++++++++++++----
>  drivers/ide/pmac.c       |   58 +++++++++++++++++++++++++++++++----------------
>  drivers/ide/qd65xx.c     |   21 ++++++++++++++---
>  drivers/ide/trm290.c     |   21 ++++++++++++-----
>  drivers/ide/tx4939ide.c  |    2 -
>  include/linux/ide.h      |    5 +---
>  9 files changed, 124 insertions(+), 49 deletions(-)
> 
> Index: linux-2.6/drivers/ide/ht6560b.c
> ===================================================================
> --- linux-2.6.orig/drivers/ide/ht6560b.c
> +++ linux-2.6/drivers/ide/ht6560b.c
> @@ -103,7 +103,7 @@
>  /*
>   * This routine is invoked from ide.c to prepare for access to a given drive.
>   */
> -static void ht6560b_selectproc (ide_drive_t *drive)
> +static void ht6560b_dev_select(ide_drive_t *drive)
>  {
>  	ide_hwif_t *hwif = drive->hwif;
>  	unsigned long flags;
> @@ -143,6 +143,8 @@ static void ht6560b_selectproc (ide_driv
>  #endif
>  	}
>  	local_irq_restore(flags);
> +
> +	outb(drive->select | ATA_DEVICE_OBS, hwif->io_ports.device_addr);
>  }
>  
>  /*
> @@ -305,15 +307,29 @@ static int probe_ht6560b;
>  module_param_named(probe, probe_ht6560b, bool, 0);
>  MODULE_PARM_DESC(probe, "probe for HT6560B chipset");
>  
> +static const struct ide_tp_ops ht6560b_tp_ops = {
> +	.exec_command		= ide_exec_command,
> +	.read_status		= ide_read_status,
> +	.read_altstatus		= ide_read_altstatus,
> +	.write_devctl		= ide_write_devctl,
> +
> +	.dev_select		= ht6560b_dev_select,
> +	.tf_load		= ide_tf_load,
> +	.tf_read		= ide_tf_read,
> +
> +	.input_data		= ide_input_data,
> +	.output_data		= ide_output_data,
> +};
> +
>  static const struct ide_port_ops ht6560b_port_ops = {
>  	.init_dev		= ht6560b_init_dev,
>  	.set_pio_mode		= ht6560b_set_pio_mode,
> -	.selectproc		= ht6560b_selectproc,
>  };
>  
>  static const struct ide_port_info ht6560b_port_info __initdata = {
>  	.name			= DRV_NAME,
>  	.chipset		= ide_ht6560b,
> +	.tp_ops 		= &ht6560b_tp_ops,
>  	.port_ops		= &ht6560b_port_ops,
>  	.host_flags		= IDE_HFLAG_SERIALIZE | /* is this needed? */
>  				  IDE_HFLAG_NO_DMA |
> Index: linux-2.6/drivers/ide/ide-io-std.c
> ===================================================================
> --- linux-2.6.orig/drivers/ide/ide-io-std.c
> +++ linux-2.6/drivers/ide/ide-io-std.c
> @@ -73,6 +73,18 @@ void ide_write_devctl(ide_hwif_t *hwif, 
>  }
>  EXPORT_SYMBOL_GPL(ide_write_devctl);
>  
> +void ide_dev_select(ide_drive_t *drive)
> +{
> +	ide_hwif_t *hwif = drive->hwif;
> +	u8 select = drive->select | ATA_DEVICE_OBS;
> +
> +	if (hwif->host_flags & IDE_HFLAG_MMIO)
> +		writeb(select, (void __iomem *)hwif->io_ports.device_addr);
> +	else
> +		outb(select, hwif->io_ports.device_addr);
> +}
> +EXPORT_SYMBOL_GPL(ide_dev_select);
> +
>  void ide_tf_load(ide_drive_t *drive, struct ide_cmd *cmd)
>  {
>  	ide_hwif_t *hwif = drive->hwif;
> Index: linux-2.6/drivers/ide/ide-iops.c
> ===================================================================
> --- linux-2.6.orig/drivers/ide/ide-iops.c
> +++ linux-2.6/drivers/ide/ide-iops.c
> @@ -29,17 +29,7 @@
>  
>  void SELECT_DRIVE(ide_drive_t *drive)
>  {
> -	ide_hwif_t *hwif = drive->hwif;
> -	const struct ide_port_ops *port_ops = hwif->port_ops;
> -	struct ide_cmd cmd;
> -
> -	if (port_ops && port_ops->selectproc)
> -		port_ops->selectproc(drive);
> -
> -	memset(&cmd, 0, sizeof(cmd));
> -	cmd.tf_flags = IDE_TFLAG_OUT_DEVICE;
> -
> -	drive->hwif->tp_ops->tf_load(drive, &cmd);
> +	drive->hwif->tp_ops->dev_select(drive);
>  }
>  
>  void SELECT_MASK(ide_drive_t *drive, int mask)
> Index: linux-2.6/drivers/ide/ns87415.c
> ===================================================================
> --- linux-2.6.orig/drivers/ide/ns87415.c
> +++ linux-2.6/drivers/ide/ns87415.c
> @@ -182,10 +182,12 @@ static void ns87415_prepare_drive (ide_d
>  	local_irq_restore(flags);
>  }
>  
> -static void ns87415_selectproc (ide_drive_t *drive)
> +static void ns87415_dev_select(ide_drive_t *drive)
>  {
>  	ns87415_prepare_drive(drive,
>  			      !!(drive->dev_flags & IDE_DFLAG_USING_DMA));
> +
> +	outb(drive->select | ATA_DEVICE_OBS, drive->hwif->io_ports.device_addr);
>  }
>  
>  static void ns87415_dma_start(ide_drive_t *drive)
> @@ -229,7 +231,7 @@ static void __devinit init_hwif_ns87415 
>  	 * Also, leave IRQ masked during drive probing, to prevent infinite
>  	 * interrupts from a potentially floating INTA..
>  	 *
> -	 * IRQs get unmasked in selectproc when drive is first used.
> +	 * IRQs get unmasked in dev_select() when drive is first used.
>  	 */
>  	(void) pci_read_config_dword(dev, 0x40, &ctrl);
>  	(void) pci_read_config_byte(dev, 0x09, &progif);
> @@ -281,8 +283,18 @@ static void __devinit init_hwif_ns87415 
>  	outb(0x60, hwif->dma_base + ATA_DMA_STATUS);
>  }
>  
> -static const struct ide_port_ops ns87415_port_ops = {
> -	.selectproc		= ns87415_selectproc,
> +static const struct ide_tp_ops ht6560b_tp_ops = {
> +	.exec_command		= ide_exec_command,
> +	.read_status		= ide_read_status,
> +	.read_altstatus		= ide_read_altstatus,
> +	.write_devctl		= ide_write_devctl,
> +
> +	.dev_select		= ns87415_dev_select,
> +	.tf_load		= ide_tf_load,
> +	.tf_read		= ide_tf_read,
> +
> +	.input_data		= ide_input_data,
> +	.output_data		= ide_output_data,
>  };
>  
>  static const struct ide_dma_ops ns87415_dma_ops = {
> @@ -299,7 +311,7 @@ static const struct ide_dma_ops ns87415_
>  static const struct ide_port_info ns87415_chipset __devinitdata = {
>  	.name		= DRV_NAME,
>  	.init_hwif	= init_hwif_ns87415,
> -	.port_ops	= &ns87415_port_ops,
> +	.tp_ops 	= &ns87415_tp_ops,
>  	.dma_ops	= &ns87415_dma_ops,
>  	.host_flags	= IDE_HFLAG_TRUST_BIOS_FOR_DMA |
>  			  IDE_HFLAG_NO_ATAPI_DMA,
> Index: linux-2.6/drivers/ide/pmac.c
> ===================================================================
> --- linux-2.6.orig/drivers/ide/pmac.c
> +++ linux-2.6/drivers/ide/pmac.c
> @@ -404,8 +404,6 @@ kauai_lookup_timing(struct kauai_timing*
>  #define IDE_WAKEUP_DELAY	(1*HZ)
>  
>  static int pmac_ide_init_dma(ide_hwif_t *, const struct ide_port_info *);
> -static void pmac_ide_selectproc(ide_drive_t *drive);
> -static void pmac_ide_kauai_selectproc(ide_drive_t *drive);
>  
>  #define PMAC_IDE_REG(x) \
>  	((void __iomem *)((drive)->hwif->io_ports.data_addr + (x)))
> @@ -415,8 +413,7 @@ static void pmac_ide_kauai_selectproc(id
>   * timing register when selecting that unit. This version is for
>   * ASICs with a single timing register
>   */
> -static void
> -pmac_ide_selectproc(ide_drive_t *drive)
> +static void pmac_ide_apply_timings(ide_drive_t *drive)
>  {
>  	ide_hwif_t *hwif = drive->hwif;
>  	pmac_ide_hwif_t *pmif =
> @@ -434,8 +431,7 @@ pmac_ide_selectproc(ide_drive_t *drive)
>   * timing register when selecting that unit. This version is for
>   * ASICs with a dual timing register (Kauai)
>   */
> -static void
> -pmac_ide_kauai_selectproc(ide_drive_t *drive)
> +static void pmac_ide_kauai_apply_timings(ide_drive_t *drive)
>  {
>  	ide_hwif_t *hwif = drive->hwif;
>  	pmac_ide_hwif_t *pmif =
> @@ -464,9 +460,25 @@ pmac_ide_do_update_timings(ide_drive_t *
>  	if (pmif->kind == controller_sh_ata6 ||
>  	    pmif->kind == controller_un_ata6 ||
>  	    pmif->kind == controller_k2_ata6)
> -		pmac_ide_kauai_selectproc(drive);
> +		pmac_ide_kauai_apply_timings(drive);
>  	else
> -		pmac_ide_selectproc(drive);
> +		pmac_ide_apply_timings(drive);
> +}
> +
> +static void pmac_dev_select(ide_drive_t *drive)
> +{
> +	pmac_ide_apply_timings(drive);
> +
> +	writeb(drive->select | ATA_DEVICE_OBS,
> +	       (void __iomem *)drive->hwif->io_ports.device_addr);
> +}
> +
> +static void pmac_kauai_dev_select(ide_drive_t *drive)
> +{
> +	pmac_ide_kauai_apply_timings(drive);
> +
> +	writeb(drive->select | ATA_DEVICE_OBS,
> +	       (void __iomem *)drive->hwif->io_ports.device_addr);
>  }
>  
>  static void pmac_exec_command(ide_hwif_t *hwif, u8 cmd)
> @@ -947,6 +959,7 @@ static const struct ide_tp_ops pmac_tp_o
>  	.read_altstatus		= ide_read_altstatus,
>  	.write_devctl		= pmac_write_devctl,
>  
> +	.dev_select		= pmac_dev_select,
>  	.tf_load		= ide_tf_load,
>  	.tf_read		= ide_tf_read,
>  
> @@ -954,19 +967,24 @@ static const struct ide_tp_ops pmac_tp_o
>  	.output_data		= ide_output_data,
>  };
>  
> -static const struct ide_port_ops pmac_ide_ata6_port_ops = {
> -	.init_dev		= pmac_ide_init_dev,
> -	.set_pio_mode		= pmac_ide_set_pio_mode,
> -	.set_dma_mode		= pmac_ide_set_dma_mode,
> -	.selectproc		= pmac_ide_kauai_selectproc,
> -	.cable_detect		= pmac_ide_cable_detect,
> +static const struct ide_tp_ops pmac_ata6_tp_ops = {
> +	.exec_command		= pmac_exec_command,
> +	.read_status		= ide_read_status,
> +	.read_altstatus		= ide_read_altstatus,
> +	.write_devctl		= pmac_write_devctl,
> +
> +	.dev_select		= pmac_kauai_dev_select,
> +	.tf_load		= ide_tf_load,
> +	.tf_read		= ide_tf_read,
> +
> +	.input_data		= ide_input_data,
> +	.output_data		= ide_output_data,
>  };
>  
>  static const struct ide_port_ops pmac_ide_ata4_port_ops = {
>  	.init_dev		= pmac_ide_init_dev,
>  	.set_pio_mode		= pmac_ide_set_pio_mode,
>  	.set_dma_mode		= pmac_ide_set_dma_mode,
> -	.selectproc		= pmac_ide_selectproc,
>  	.cable_detect		= pmac_ide_cable_detect,
>  };
>  
> @@ -974,7 +992,6 @@ static const struct ide_port_ops pmac_id
>  	.init_dev		= pmac_ide_init_dev,
>  	.set_pio_mode		= pmac_ide_set_pio_mode,
>  	.set_dma_mode		= pmac_ide_set_dma_mode,
> -	.selectproc		= pmac_ide_selectproc,
>  };
>  
>  static const struct ide_dma_ops pmac_dma_ops;
> @@ -1011,15 +1028,18 @@ static int __devinit pmac_ide_setup_devi
>  	pmif->broken_dma = pmif->broken_dma_warn = 0;
>  	if (of_device_is_compatible(np, "shasta-ata")) {
>  		pmif->kind = controller_sh_ata6;
> -		d.port_ops = &pmac_ide_ata6_port_ops;
> +		d.tp_ops = &pmac_ata6_tp_ops;
> +		d.port_ops = &pmac_ide_ata4_port_ops;
>  		d.udma_mask = ATA_UDMA6;
>  	} else if (of_device_is_compatible(np, "kauai-ata")) {
>  		pmif->kind = controller_un_ata6;
> -		d.port_ops = &pmac_ide_ata6_port_ops;
> +		d.tp_ops = &pmac_ata6_tp_ops;
> +		d.port_ops = &pmac_ide_ata4_port_ops;
>  		d.udma_mask = ATA_UDMA5;
>  	} else if (of_device_is_compatible(np, "K2-UATA")) {
>  		pmif->kind = controller_k2_ata6;
> -		d.port_ops = &pmac_ide_ata6_port_ops;
> +		d.tp_ops = &pmac_ata6_tp_ops;
> +		d.port_ops = &pmac_ide_ata4_port_ops;
>  		d.udma_mask = ATA_UDMA5;
>  	} else if (of_device_is_compatible(np, "keylargo-ata")) {
>  		if (strcmp(np->name, "ata-4") == 0) {
> Index: linux-2.6/drivers/ide/qd65xx.c
> ===================================================================
> --- linux-2.6.orig/drivers/ide/qd65xx.c
> +++ linux-2.6/drivers/ide/qd65xx.c
> @@ -90,13 +90,15 @@ static int timings[4]={-1,-1,-1,-1}; /* 
>   * This routine is invoked to prepare for access to a given drive.
>   */
>  
> -static void qd65xx_select(ide_drive_t *drive)
> +static void qd65xx_dev_select(ide_drive_t *drive)
>  {
>  	u8 index = ((	(QD_TIMREG(drive)) & 0x80 ) >> 7) |
>  			(QD_TIMREG(drive) & 0x02);
>  
>  	if (timings[index] != QD_TIMING(drive))
>  		outb(timings[index] = QD_TIMING(drive), QD_TIMREG(drive));
> +
> +	outb(drive->select | ATA_DEVICE_OBS, drive->hwif->io_ports.device_addr);
>  }
>  
>  /*
> @@ -309,20 +311,33 @@ static void __init qd6580_init_dev(ide_d
>  	drive->drive_data = (drive->dn & 1) ? t2 : t1;
>  }
>  
> +static const struct ide_tp_ops qd65xx_tp_ops = {
> +	.exec_command		= ide_exec_command,
> +	.read_status		= ide_read_status,
> +	.read_altstatus		= ide_read_altstatus,
> +	.write_devctl		= ide_write_devctl,
> +
> +	.dev_select		= qd65xx_dev_select,
> +	.tf_load		= ide_tf_load,
> +	.tf_read		= ide_tf_read,
> +
> +	.input_data		= ide_input_data,
> +	.output_data		= ide_output_data,
> +};
> +
>  static const struct ide_port_ops qd6500_port_ops = {
>  	.init_dev		= qd6500_init_dev,
>  	.set_pio_mode		= qd6500_set_pio_mode,
> -	.selectproc		= qd65xx_select,
>  };
>  
>  static const struct ide_port_ops qd6580_port_ops = {
>  	.init_dev		= qd6580_init_dev,
>  	.set_pio_mode		= qd6580_set_pio_mode,
> -	.selectproc		= qd65xx_select,
>  };
>  
>  static const struct ide_port_info qd65xx_port_info __initdata = {
>  	.name			= DRV_NAME,
> +	.tp_ops 		= &qd65xx_tp_ops,
>  	.chipset		= ide_qd65xx,
>  	.host_flags		= IDE_HFLAG_IO_32BIT |
>  				  IDE_HFLAG_NO_DMA,
> Index: linux-2.6/drivers/ide/trm290.c
> ===================================================================
> --- linux-2.6.orig/drivers/ide/trm290.c
> +++ linux-2.6/drivers/ide/trm290.c
> @@ -171,10 +171,11 @@ static void trm290_prepare_drive (ide_dr
>  	local_irq_restore(flags);
>  }
>  
> -static void trm290_selectproc (ide_drive_t *drive)
> +static void trm290_dev_select(ide_drive_t *drive)
>  {
>  	trm290_prepare_drive(drive, !!(drive->dev_flags & IDE_DFLAG_USING_DMA));
> -}
> +
> +	outb(drive->select | ATA_DEVICE_OBS, drive->hwif->io_ports.device_addr);}
>  
>  static int trm290_dma_check(ide_drive_t *drive, struct ide_cmd *cmd)
>  {
> @@ -298,8 +299,18 @@ static void __devinit init_hwif_trm290(i
>  #endif
>  }
>  
> -static const struct ide_port_ops trm290_port_ops = {
> -	.selectproc		= trm290_selectproc,
> +static const struct ide_tp_ops trm290_tp_ops = {
> +	.exec_command		= ide_exec_command,
> +	.read_status		= ide_read_status,
> +	.read_altstatus		= ide_read_altstatus,
> +	.write_devctl		= ide_write_devctl,
> +
> +	.dev_select		= trm290_dev_select,
> +	.tf_load		= ide_tf_load,
> +	.tf_read		= ide_tf_read,
> +
> +	.input_data		= ide_input_data,
> +	.output_data		= ide_output_data,
>  };
>  
>  static struct ide_dma_ops trm290_dma_ops = {
> @@ -315,7 +326,7 @@ static struct ide_dma_ops trm290_dma_ops
>  static const struct ide_port_info trm290_chipset __devinitdata = {
>  	.name		= DRV_NAME,
>  	.init_hwif	= init_hwif_trm290,
> -	.port_ops	= &trm290_port_ops,
> +	.tp_ops 	= &trm290_tp_ops,
>  	.dma_ops	= &trm290_dma_ops,
>  	.host_flags	= IDE_HFLAG_TRM290 |
>  			  IDE_HFLAG_NO_ATAPI_DMA |
> Index: linux-2.6/drivers/ide/tx4939ide.c
> ===================================================================
> --- linux-2.6.orig/drivers/ide/tx4939ide.c
> +++ linux-2.6/drivers/ide/tx4939ide.c
> @@ -429,7 +429,7 @@ static void tx4939ide_tf_load_fixup(ide_
>  	 * Fix ATA100 CORE System Control Register. (The write to the
>  	 * Device/Head register may write wrong data to the System
>  	 * Control Register)
> -	 * While Sys_Ctl is written here, selectproc is not needed.
> +	 * While Sys_Ctl is written here, dev_select() is not needed.
>  	 */
>  	tx4939ide_writew(sysctl, base, TX4939IDE_Sys_Ctl);
>  }
> Index: linux-2.6/include/linux/ide.h
> ===================================================================
> --- linux-2.6.orig/include/linux/ide.h
> +++ linux-2.6/include/linux/ide.h
> @@ -603,7 +603,7 @@ struct ide_drive_s {
>  
>  	unsigned int	bios_cyl;	/* BIOS/fdisk/LILO number of cyls */
>  	unsigned int	cyl;		/* "real" number of cyls */
> -	unsigned int	drive_data;	/* used by set_pio_mode/selectproc */
> +	unsigned int	drive_data;	/* used by set_pio_mode/dev_select() */
>  	unsigned int	failures;	/* current failure count */
>  	unsigned int	max_failures;	/* maximum allowed failure count */
>  	u64		probed_capacity;/* initial reported media capacity (ide-cd only currently) */
> @@ -661,6 +661,7 @@ struct ide_tp_ops {
>  	u8	(*read_altstatus)(struct hwif_s *);
>  	void	(*write_devctl)(struct hwif_s *, u8);
>  
> +	void	(*dev_select)(ide_drive_t *);
>  	void	(*tf_load)(ide_drive_t *, struct ide_cmd *);
>  	void	(*tf_read)(ide_drive_t *, struct ide_cmd *);
>  
> @@ -678,7 +679,6 @@ extern const struct ide_tp_ops default_t
>   * @init_dev:		host specific initialization of a device
>   * @set_pio_mode:	routine to program host for PIO mode
>   * @set_dma_mode:	routine to program host for DMA mode
> - * @selectproc:		tweaks hardware to select drive
>   * @reset_poll:		chipset polling based on hba specifics
>   * @pre_reset:		chipset specific changes to default for device-hba resets
>   * @resetproc:		routine to reset controller after a disk reset
> @@ -695,7 +695,6 @@ struct ide_port_ops {
>  	void	(*init_dev)(ide_drive_t *);
>  	void	(*set_pio_mode)(ide_drive_t *, const u8);
>  	void	(*set_dma_mode)(ide_drive_t *, const u8);
> -	void	(*selectproc)(ide_drive_t *);
>  	int	(*reset_poll)(ide_drive_t *);
>  	void	(*pre_reset)(ide_drive_t *);
>  	void	(*resetproc)(ide_drive_t *);


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/2] ide: turn selectproc() method into dev_select() method
  2009-03-19 15:45 ` Sergei Shtylyov
@ 2009-03-20 19:02   ` Bartlomiej Zolnierkiewicz
  2009-03-23 10:47     ` Sergei Shtylyov
  0 siblings, 1 reply; 5+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2009-03-20 19:02 UTC (permalink / raw)
  To: Sergei Shtylyov; +Cc: linux-ide, benh

On Thursday 19 March 2009, Sergei Shtylyov wrote:
> Hello, I wrote:
> 
> > Turn selectproc() method into dev_select() method by teaching it to write to the
> > device register and moving it from 'struct ide_port_ops' to 'struct ide_tp_ops'.
> 
> > Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
> 
> [...]
> 
> > Index: linux-2.6/drivers/ide/trm290.c
> > ===================================================================
> > --- linux-2.6.orig/drivers/ide/trm290.c
> > +++ linux-2.6/drivers/ide/trm290.c
> > @@ -171,10 +171,11 @@ static void trm290_prepare_drive (ide_dr
> >  	local_irq_restore(flags);
> >  }
> >  
> > -static void trm290_selectproc (ide_drive_t *drive)
> > +static void trm290_dev_select(ide_drive_t *drive)
> >  {
> >  	trm290_prepare_drive(drive, !!(drive->dev_flags & IDE_DFLAG_USING_DMA));
> > -}
> > +
> > +	outb(drive->select | ATA_DEVICE_OBS, drive->hwif->io_ports.device_addr);}
> 
>     Oops, I keep forgetting about running checkpatch.pl first. :-<
>     Bart, do I need to repost, or you can fix it while applying?

fixed while applying

ditto for:

drivers/ide/ns87415.c:314: error: ‘ns87415_tp_ops’ undeclared here (not in a function)
make[1]: *** [drivers/ide/ns87415.o] Error 1
make: *** [drivers/ide/ns87415.o] Error 2

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/2] ide: turn selectproc() method into dev_select() method
  2009-03-20 19:02   ` Bartlomiej Zolnierkiewicz
@ 2009-03-23 10:47     ` Sergei Shtylyov
  0 siblings, 0 replies; 5+ messages in thread
From: Sergei Shtylyov @ 2009-03-23 10:47 UTC (permalink / raw)
  To: Bartlomiej Zolnierkiewicz; +Cc: linux-ide, benh

Bartlomiej Zolnierkiewicz wrote:

>>Hello, I wrote:

>>>Turn selectproc() method into dev_select() method by teaching it to write to the
>>>device register and moving it from 'struct ide_port_ops' to 'struct ide_tp_ops'.

>>>Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>

>>[...]

>>>Index: linux-2.6/drivers/ide/trm290.c
>>>===================================================================
>>>--- linux-2.6.orig/drivers/ide/trm290.c
>>>+++ linux-2.6/drivers/ide/trm290.c
>>>@@ -171,10 +171,11 @@ static void trm290_prepare_drive (ide_dr
>>> 	local_irq_restore(flags);
>>> }
>>> 
>>>-static void trm290_selectproc (ide_drive_t *drive)
>>>+static void trm290_dev_select(ide_drive_t *drive)
>>> {
>>> 	trm290_prepare_drive(drive, !!(drive->dev_flags & IDE_DFLAG_USING_DMA));
>>>-}
>>>+
>>>+	outb(drive->select | ATA_DEVICE_OBS, drive->hwif->io_ports.device_addr);}

>>    Oops, I keep forgetting about running checkpatch.pl first. :-<
>>    Bart, do I need to repost, or you can fix it while applying?

> fixed while applying

> ditto for:

> drivers/ide/ns87415.c:314: error: ‘ns87415_tp_ops’ undeclared here (not in a function)
> make[1]: *** [drivers/ide/ns87415.o] Error 1
> make: *** [drivers/ide/ns87415.o] Error 2

    Since the patch has turned to ve fatally defective in yet another way, 
I'll have to recast/resend it anyway...

MBR, Sergei

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2009-03-23 10:46 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-03-19 15:31 [PATCH 1/2] ide: turn selectproc() method into dev_select() method Sergei Shtylyov
2009-03-19 15:45 ` Sergei Shtylyov
2009-03-20 19:02   ` Bartlomiej Zolnierkiewicz
2009-03-23 10:47     ` Sergei Shtylyov
2009-03-19 21:57 ` Benjamin Herrenschmidt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).