aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2007-10-19 18:32:32 -0400
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2007-10-19 18:32:32 -0400
commit86f3a492bb09eee5745b93af35f2212179c251fd (patch)
tree45d0f4725943fe0d0f16d44db3e643ce1f4d4553
parent8f173b5bf460a85791c131e774dc992f8cd578c1 (diff)
icside: use ec->dma directly
* hwif->hwif_data contains pointer to struct expansion_card so use ec->dma directly instead of caching it in hwif->hw.dma. * Remove no longer needed hw_regs_t.dma and NO_DMA define. Cc: Russell King <rmk@arm.linux.org.uk> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
-rw-r--r--drivers/ide/arm/icside.c20
-rw-r--r--drivers/ide/h8300/ide-h8300.c1
-rw-r--r--drivers/ide/ide-pnp.c1
-rw-r--r--drivers/ide/ide.c1
-rw-r--r--drivers/ide/legacy/ide_platform.c1
-rw-r--r--drivers/ide/legacy/q40ide.c3
-rw-r--r--include/linux/ide.h5
7 files changed, 11 insertions, 21 deletions
diff --git a/drivers/ide/arm/icside.c b/drivers/ide/arm/icside.c
index fda3f870d7cd..22fc46d63448 100644
--- a/drivers/ide/arm/icside.c
+++ b/drivers/ide/arm/icside.c
@@ -316,27 +316,29 @@ static int icside_dma_end(ide_drive_t *drive)
316 316
317 drive->waiting_for_dma = 0; 317 drive->waiting_for_dma = 0;
318 318
319 disable_dma(hwif->hw.dma); 319 disable_dma(state->dev->dma);
320 320
321 /* Teardown mappings after DMA has completed. */ 321 /* Teardown mappings after DMA has completed. */
322 dma_unmap_sg(state->dev, hwif->sg_table, hwif->sg_nents, 322 dma_unmap_sg(state->dev, hwif->sg_table, hwif->sg_nents,
323 hwif->sg_dma_direction); 323 hwif->sg_dma_direction);
324 324
325 return get_dma_residue(hwif->hw.dma) != 0; 325 return get_dma_residue(state->dev->dma) != 0;
326} 326}
327 327
328static void icside_dma_start(ide_drive_t *drive) 328static void icside_dma_start(ide_drive_t *drive)
329{ 329{
330 ide_hwif_t *hwif = HWIF(drive); 330 ide_hwif_t *hwif = HWIF(drive);
331 struct icside_state *state = hwif->hwif_data;
331 332
332 /* We can not enable DMA on both channels simultaneously. */ 333 /* We can not enable DMA on both channels simultaneously. */
333 BUG_ON(dma_channel_active(hwif->hw.dma)); 334 BUG_ON(dma_channel_active(state->dev->dma));
334 enable_dma(hwif->hw.dma); 335 enable_dma(state->dev->dma);
335} 336}
336 337
337static int icside_dma_setup(ide_drive_t *drive) 338static int icside_dma_setup(ide_drive_t *drive)
338{ 339{
339 ide_hwif_t *hwif = HWIF(drive); 340 ide_hwif_t *hwif = HWIF(drive);
341 struct icside_state *state = hwif->hwif_data;
340 struct request *rq = hwif->hwgroup->rq; 342 struct request *rq = hwif->hwgroup->rq;
341 unsigned int dma_mode; 343 unsigned int dma_mode;
342 344
@@ -348,7 +350,7 @@ static int icside_dma_setup(ide_drive_t *drive)
348 /* 350 /*
349 * We can not enable DMA on both channels. 351 * We can not enable DMA on both channels.
350 */ 352 */
351 BUG_ON(dma_channel_active(hwif->hw.dma)); 353 BUG_ON(dma_channel_active(state->dev->dma));
352 354
353 icside_build_sglist(drive, rq); 355 icside_build_sglist(drive, rq);
354 356
@@ -365,14 +367,14 @@ static int icside_dma_setup(ide_drive_t *drive)
365 /* 367 /*
366 * Select the correct timing for this drive. 368 * Select the correct timing for this drive.
367 */ 369 */
368 set_dma_speed(hwif->hw.dma, drive->drive_data); 370 set_dma_speed(state->dev->dma, drive->drive_data);
369 371
370 /* 372 /*
371 * Tell the DMA engine about the SG table and 373 * Tell the DMA engine about the SG table and
372 * data direction. 374 * data direction.
373 */ 375 */
374 set_dma_sg(hwif->hw.dma, hwif->sg_table, hwif->sg_nents); 376 set_dma_sg(state->dev->dma, hwif->sg_table, hwif->sg_nents);
375 set_dma_mode(hwif->hw.dma, dma_mode); 377 set_dma_mode(state->dev->dma, dma_mode);
376 378
377 drive->waiting_for_dma = 1; 379 drive->waiting_for_dma = 1;
378 380
@@ -572,7 +574,6 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec)
572 hwif->serialized = 1; 574 hwif->serialized = 1;
573 hwif->config_data = (unsigned long)ioc_base; 575 hwif->config_data = (unsigned long)ioc_base;
574 hwif->select_data = sel; 576 hwif->select_data = sel;
575 hwif->hw.dma = ec->dma;
576 577
577 mate->maskproc = icside_maskproc; 578 mate->maskproc = icside_maskproc;
578 mate->channel = 1; 579 mate->channel = 1;
@@ -581,7 +582,6 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec)
581 mate->serialized = 1; 582 mate->serialized = 1;
582 mate->config_data = (unsigned long)ioc_base; 583 mate->config_data = (unsigned long)ioc_base;
583 mate->select_data = sel | 1; 584 mate->select_data = sel | 1;
584 mate->hw.dma = ec->dma;
585 585
586 if (ec->dma != NO_DMA && !request_dma(ec->dma, hwif->name)) { 586 if (ec->dma != NO_DMA && !request_dma(ec->dma, hwif->name)) {
587 icside_dma_init(hwif); 587 icside_dma_init(hwif);
diff --git a/drivers/ide/h8300/ide-h8300.c b/drivers/ide/h8300/ide-h8300.c
index 37b9174a7edc..4a49b5c59acb 100644
--- a/drivers/ide/h8300/ide-h8300.c
+++ b/drivers/ide/h8300/ide-h8300.c
@@ -68,7 +68,6 @@ static inline void hw_setup(hw_regs_t *hw)
68 hw->io_ports[i] = CONFIG_H8300_IDE_BASE + H8300_IDE_GAP*i; 68 hw->io_ports[i] = CONFIG_H8300_IDE_BASE + H8300_IDE_GAP*i;
69 hw->io_ports[IDE_CONTROL_OFFSET] = CONFIG_H8300_IDE_ALT; 69 hw->io_ports[IDE_CONTROL_OFFSET] = CONFIG_H8300_IDE_ALT;
70 hw->irq = EXT_IRQ0 + CONFIG_H8300_IDE_IRQ; 70 hw->irq = EXT_IRQ0 + CONFIG_H8300_IDE_IRQ;
71 hw->dma = NO_DMA;
72 hw->chipset = ide_generic; 71 hw->chipset = ide_generic;
73} 72}
74 73
diff --git a/drivers/ide/ide-pnp.c b/drivers/ide/ide-pnp.c
index 2afaa87022e3..e245521af7b5 100644
--- a/drivers/ide/ide-pnp.c
+++ b/drivers/ide/ide-pnp.c
@@ -40,7 +40,6 @@ static int idepnp_probe(struct pnp_dev * dev, const struct pnp_device_id *dev_id
40 ide_std_init_ports(&hw, pnp_port_start(dev, 0), 40 ide_std_init_ports(&hw, pnp_port_start(dev, 0),
41 pnp_port_start(dev, 1)); 41 pnp_port_start(dev, 1));
42 hw.irq = pnp_irq(dev, 0); 42 hw.irq = pnp_irq(dev, 0);
43 hw.dma = NO_DMA;
44 43
45 index = ide_register_hw(&hw, NULL, 1, &hwif); 44 index = ide_register_hw(&hw, NULL, 1, &hwif);
46 45
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c
index 9284f64bc2ee..4a668d51965d 100644
--- a/drivers/ide/ide.c
+++ b/drivers/ide/ide.c
@@ -678,7 +678,6 @@ void ide_setup_ports ( hw_regs_t *hw,
678 } 678 }
679 } 679 }
680 hw->irq = irq; 680 hw->irq = irq;
681 hw->dma = NO_DMA;
682 hw->ack_intr = ack_intr; 681 hw->ack_intr = ack_intr;
683/* 682/*
684 * hw->iops = iops; 683 * hw->iops = iops;
diff --git a/drivers/ide/legacy/ide_platform.c b/drivers/ide/legacy/ide_platform.c
index d1e76fa7869e..1bc9a57b6198 100644
--- a/drivers/ide/legacy/ide_platform.c
+++ b/drivers/ide/legacy/ide_platform.c
@@ -51,7 +51,6 @@ static ide_hwif_t *__devinit plat_ide_locate_hwif(void __iomem *base,
51 memcpy(hwif->io_ports, hwif->hw.io_ports, sizeof(hwif->hw.io_ports)); 51 memcpy(hwif->io_ports, hwif->hw.io_ports, sizeof(hwif->hw.io_ports));
52 hwif->hw.irq = hwif->irq = irq; 52 hwif->hw.irq = hwif->irq = irq;
53 53
54 hwif->hw.dma = NO_DMA;
55 hwif->chipset = hwif->hw.chipset = ide_generic; 54 hwif->chipset = hwif->hw.chipset = ide_generic;
56 55
57 if (mmio) { 56 if (mmio) {
diff --git a/drivers/ide/legacy/q40ide.c b/drivers/ide/legacy/q40ide.c
index a530d6de194a..44cdb745a6ff 100644
--- a/drivers/ide/legacy/q40ide.c
+++ b/drivers/ide/legacy/q40ide.c
@@ -89,9 +89,8 @@ void q40_ide_setup_ports ( hw_regs_t *hw,
89 else 89 else
90 hw->io_ports[i] = Q40_ISA_IO_B(base + offsets[i]); 90 hw->io_ports[i] = Q40_ISA_IO_B(base + offsets[i]);
91 } 91 }
92 92
93 hw->irq = irq; 93 hw->irq = irq;
94 hw->dma = NO_DMA;
95 hw->ack_intr = ack_intr; 94 hw->ack_intr = ack_intr;
96/* 95/*
97 * hw->iops = iops; 96 * hw->iops = iops;
diff --git a/include/linux/ide.h b/include/linux/ide.h
index 39b76aaaa129..9686cb47eee1 100644
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -192,10 +192,6 @@ typedef unsigned char byte; /* used everywhere */
192struct hwif_s; 192struct hwif_s;
193typedef int (ide_ack_intr_t)(struct hwif_s *); 193typedef int (ide_ack_intr_t)(struct hwif_s *);
194 194
195#ifndef NO_DMA
196#define NO_DMA 255
197#endif
198
199/* 195/*
200 * hwif_chipset_t is used to keep track of the specific hardware 196 * hwif_chipset_t is used to keep track of the specific hardware
201 * chipset used by each IDE interface, if known. 197 * chipset used by each IDE interface, if known.
@@ -217,7 +213,6 @@ typedef u8 hwif_chipset_t;
217typedef struct hw_regs_s { 213typedef struct hw_regs_s {
218 unsigned long io_ports[IDE_NR_PORTS]; /* task file registers */ 214 unsigned long io_ports[IDE_NR_PORTS]; /* task file registers */
219 int irq; /* our irq number */ 215 int irq; /* our irq number */
220 int dma; /* our dma entry */
221 ide_ack_intr_t *ack_intr; /* acknowledge interrupt */ 216 ide_ack_intr_t *ack_intr; /* acknowledge interrupt */
222 hwif_chipset_t chipset; 217 hwif_chipset_t chipset;
223 struct device *dev; 218 struct device *dev;