diff options
author | Jeff Garzik <jgarzik@pobox.com> | 2005-10-28 12:29:23 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2005-10-28 12:29:23 -0400 |
commit | 7a9f8f93d2dad38f30fbc79d8a1e6517373aa4b6 (patch) | |
tree | 9116e5bde860d00685c5b6eee7be5ba9899aabb9 /drivers/scsi/libata-core.c | |
parent | 972c26bdd6b58e7534473c4f7928584578cf43f4 (diff) | |
parent | 5fadd053d9bb4345ec6f405d24db4e7eb49cf81e (diff) |
Merge branch 'master'
Diffstat (limited to 'drivers/scsi/libata-core.c')
-rw-r--r-- | drivers/scsi/libata-core.c | 282 |
1 files changed, 223 insertions, 59 deletions
diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c index c5e663fefdf7..64f30bf59315 100644 --- a/drivers/scsi/libata-core.c +++ b/drivers/scsi/libata-core.c | |||
@@ -67,9 +67,9 @@ static void ata_dev_reread_id(struct ata_port *ap, struct ata_device *dev); | |||
67 | static void ata_dev_init_params(struct ata_port *ap, struct ata_device *dev); | 67 | static void ata_dev_init_params(struct ata_port *ap, struct ata_device *dev); |
68 | static void ata_set_mode(struct ata_port *ap); | 68 | static void ata_set_mode(struct ata_port *ap); |
69 | static void ata_dev_set_xfermode(struct ata_port *ap, struct ata_device *dev); | 69 | static void ata_dev_set_xfermode(struct ata_port *ap, struct ata_device *dev); |
70 | static unsigned int ata_get_mode_mask(struct ata_port *ap, int shift); | 70 | static unsigned int ata_get_mode_mask(const struct ata_port *ap, int shift); |
71 | static int fgb(u32 bitmap); | 71 | static int fgb(u32 bitmap); |
72 | static int ata_choose_xfer_mode(struct ata_port *ap, | 72 | static int ata_choose_xfer_mode(const struct ata_port *ap, |
73 | u8 *xfer_mode_out, | 73 | u8 *xfer_mode_out, |
74 | unsigned int *xfer_shift_out); | 74 | unsigned int *xfer_shift_out); |
75 | static void __ata_qc_complete(struct ata_queued_cmd *qc); | 75 | static void __ata_qc_complete(struct ata_queued_cmd *qc); |
@@ -87,7 +87,7 @@ MODULE_LICENSE("GPL"); | |||
87 | MODULE_VERSION(DRV_VERSION); | 87 | MODULE_VERSION(DRV_VERSION); |
88 | 88 | ||
89 | /** | 89 | /** |
90 | * ata_tf_load - send taskfile registers to host controller | 90 | * ata_tf_load_pio - send taskfile registers to host controller |
91 | * @ap: Port to which output is sent | 91 | * @ap: Port to which output is sent |
92 | * @tf: ATA taskfile register set | 92 | * @tf: ATA taskfile register set |
93 | * | 93 | * |
@@ -97,7 +97,7 @@ MODULE_VERSION(DRV_VERSION); | |||
97 | * Inherited from caller. | 97 | * Inherited from caller. |
98 | */ | 98 | */ |
99 | 99 | ||
100 | static void ata_tf_load_pio(struct ata_port *ap, struct ata_taskfile *tf) | 100 | static void ata_tf_load_pio(struct ata_port *ap, const struct ata_taskfile *tf) |
101 | { | 101 | { |
102 | struct ata_ioports *ioaddr = &ap->ioaddr; | 102 | struct ata_ioports *ioaddr = &ap->ioaddr; |
103 | unsigned int is_addr = tf->flags & ATA_TFLAG_ISADDR; | 103 | unsigned int is_addr = tf->flags & ATA_TFLAG_ISADDR; |
@@ -155,7 +155,7 @@ static void ata_tf_load_pio(struct ata_port *ap, struct ata_taskfile *tf) | |||
155 | * Inherited from caller. | 155 | * Inherited from caller. |
156 | */ | 156 | */ |
157 | 157 | ||
158 | static void ata_tf_load_mmio(struct ata_port *ap, struct ata_taskfile *tf) | 158 | static void ata_tf_load_mmio(struct ata_port *ap, const struct ata_taskfile *tf) |
159 | { | 159 | { |
160 | struct ata_ioports *ioaddr = &ap->ioaddr; | 160 | struct ata_ioports *ioaddr = &ap->ioaddr; |
161 | unsigned int is_addr = tf->flags & ATA_TFLAG_ISADDR; | 161 | unsigned int is_addr = tf->flags & ATA_TFLAG_ISADDR; |
@@ -224,7 +224,7 @@ static void ata_tf_load_mmio(struct ata_port *ap, struct ata_taskfile *tf) | |||
224 | * LOCKING: | 224 | * LOCKING: |
225 | * Inherited from caller. | 225 | * Inherited from caller. |
226 | */ | 226 | */ |
227 | void ata_tf_load(struct ata_port *ap, struct ata_taskfile *tf) | 227 | void ata_tf_load(struct ata_port *ap, const struct ata_taskfile *tf) |
228 | { | 228 | { |
229 | if (ap->flags & ATA_FLAG_MMIO) | 229 | if (ap->flags & ATA_FLAG_MMIO) |
230 | ata_tf_load_mmio(ap, tf); | 230 | ata_tf_load_mmio(ap, tf); |
@@ -244,7 +244,7 @@ void ata_tf_load(struct ata_port *ap, struct ata_taskfile *tf) | |||
244 | * spin_lock_irqsave(host_set lock) | 244 | * spin_lock_irqsave(host_set lock) |
245 | */ | 245 | */ |
246 | 246 | ||
247 | static void ata_exec_command_pio(struct ata_port *ap, struct ata_taskfile *tf) | 247 | static void ata_exec_command_pio(struct ata_port *ap, const struct ata_taskfile *tf) |
248 | { | 248 | { |
249 | DPRINTK("ata%u: cmd 0x%X\n", ap->id, tf->command); | 249 | DPRINTK("ata%u: cmd 0x%X\n", ap->id, tf->command); |
250 | 250 | ||
@@ -265,7 +265,7 @@ static void ata_exec_command_pio(struct ata_port *ap, struct ata_taskfile *tf) | |||
265 | * spin_lock_irqsave(host_set lock) | 265 | * spin_lock_irqsave(host_set lock) |
266 | */ | 266 | */ |
267 | 267 | ||
268 | static void ata_exec_command_mmio(struct ata_port *ap, struct ata_taskfile *tf) | 268 | static void ata_exec_command_mmio(struct ata_port *ap, const struct ata_taskfile *tf) |
269 | { | 269 | { |
270 | DPRINTK("ata%u: cmd 0x%X\n", ap->id, tf->command); | 270 | DPRINTK("ata%u: cmd 0x%X\n", ap->id, tf->command); |
271 | 271 | ||
@@ -285,7 +285,7 @@ static void ata_exec_command_mmio(struct ata_port *ap, struct ata_taskfile *tf) | |||
285 | * LOCKING: | 285 | * LOCKING: |
286 | * spin_lock_irqsave(host_set lock) | 286 | * spin_lock_irqsave(host_set lock) |
287 | */ | 287 | */ |
288 | void ata_exec_command(struct ata_port *ap, struct ata_taskfile *tf) | 288 | void ata_exec_command(struct ata_port *ap, const struct ata_taskfile *tf) |
289 | { | 289 | { |
290 | if (ap->flags & ATA_FLAG_MMIO) | 290 | if (ap->flags & ATA_FLAG_MMIO) |
291 | ata_exec_command_mmio(ap, tf); | 291 | ata_exec_command_mmio(ap, tf); |
@@ -305,7 +305,7 @@ void ata_exec_command(struct ata_port *ap, struct ata_taskfile *tf) | |||
305 | * Obtains host_set lock. | 305 | * Obtains host_set lock. |
306 | */ | 306 | */ |
307 | 307 | ||
308 | static inline void ata_exec(struct ata_port *ap, struct ata_taskfile *tf) | 308 | static inline void ata_exec(struct ata_port *ap, const struct ata_taskfile *tf) |
309 | { | 309 | { |
310 | unsigned long flags; | 310 | unsigned long flags; |
311 | 311 | ||
@@ -328,7 +328,7 @@ static inline void ata_exec(struct ata_port *ap, struct ata_taskfile *tf) | |||
328 | * Obtains host_set lock. | 328 | * Obtains host_set lock. |
329 | */ | 329 | */ |
330 | 330 | ||
331 | static void ata_tf_to_host(struct ata_port *ap, struct ata_taskfile *tf) | 331 | static void ata_tf_to_host(struct ata_port *ap, const struct ata_taskfile *tf) |
332 | { | 332 | { |
333 | ap->ops->tf_load(ap, tf); | 333 | ap->ops->tf_load(ap, tf); |
334 | 334 | ||
@@ -348,7 +348,7 @@ static void ata_tf_to_host(struct ata_port *ap, struct ata_taskfile *tf) | |||
348 | * spin_lock_irqsave(host_set lock) | 348 | * spin_lock_irqsave(host_set lock) |
349 | */ | 349 | */ |
350 | 350 | ||
351 | void ata_tf_to_host_nolock(struct ata_port *ap, struct ata_taskfile *tf) | 351 | void ata_tf_to_host_nolock(struct ata_port *ap, const struct ata_taskfile *tf) |
352 | { | 352 | { |
353 | ap->ops->tf_load(ap, tf); | 353 | ap->ops->tf_load(ap, tf); |
354 | ap->ops->exec_command(ap, tf); | 354 | ap->ops->exec_command(ap, tf); |
@@ -558,7 +558,7 @@ u8 ata_chk_err(struct ata_port *ap) | |||
558 | * Inherited from caller. | 558 | * Inherited from caller. |
559 | */ | 559 | */ |
560 | 560 | ||
561 | void ata_tf_to_fis(struct ata_taskfile *tf, u8 *fis, u8 pmp) | 561 | void ata_tf_to_fis(const struct ata_taskfile *tf, u8 *fis, u8 pmp) |
562 | { | 562 | { |
563 | fis[0] = 0x27; /* Register - Host to Device FIS */ | 563 | fis[0] = 0x27; /* Register - Host to Device FIS */ |
564 | fis[1] = (pmp & 0xf) | (1 << 7); /* Port multiplier number, | 564 | fis[1] = (pmp & 0xf) | (1 << 7); /* Port multiplier number, |
@@ -599,7 +599,7 @@ void ata_tf_to_fis(struct ata_taskfile *tf, u8 *fis, u8 pmp) | |||
599 | * Inherited from caller. | 599 | * Inherited from caller. |
600 | */ | 600 | */ |
601 | 601 | ||
602 | void ata_tf_from_fis(u8 *fis, struct ata_taskfile *tf) | 602 | void ata_tf_from_fis(const u8 *fis, struct ata_taskfile *tf) |
603 | { | 603 | { |
604 | tf->command = fis[2]; /* status */ | 604 | tf->command = fis[2]; /* status */ |
605 | tf->feature = fis[3]; /* error */ | 605 | tf->feature = fis[3]; /* error */ |
@@ -845,7 +845,7 @@ static unsigned int ata_devchk(struct ata_port *ap, | |||
845 | * the event of failure. | 845 | * the event of failure. |
846 | */ | 846 | */ |
847 | 847 | ||
848 | unsigned int ata_dev_classify(struct ata_taskfile *tf) | 848 | unsigned int ata_dev_classify(const struct ata_taskfile *tf) |
849 | { | 849 | { |
850 | /* Apple's open source Darwin code hints that some devices only | 850 | /* Apple's open source Darwin code hints that some devices only |
851 | * put a proper signature into the LBA mid/high registers, | 851 | * put a proper signature into the LBA mid/high registers, |
@@ -937,7 +937,7 @@ static u8 ata_dev_try_classify(struct ata_port *ap, unsigned int device) | |||
937 | * caller. | 937 | * caller. |
938 | */ | 938 | */ |
939 | 939 | ||
940 | void ata_dev_id_string(u16 *id, unsigned char *s, | 940 | void ata_dev_id_string(const u16 *id, unsigned char *s, |
941 | unsigned int ofs, unsigned int len) | 941 | unsigned int ofs, unsigned int len) |
942 | { | 942 | { |
943 | unsigned int c; | 943 | unsigned int c; |
@@ -1054,7 +1054,7 @@ void ata_dev_select(struct ata_port *ap, unsigned int device, | |||
1054 | * caller. | 1054 | * caller. |
1055 | */ | 1055 | */ |
1056 | 1056 | ||
1057 | static inline void ata_dump_id(struct ata_device *dev) | 1057 | static inline void ata_dump_id(const struct ata_device *dev) |
1058 | { | 1058 | { |
1059 | DPRINTK("49==0x%04x " | 1059 | DPRINTK("49==0x%04x " |
1060 | "53==0x%04x " | 1060 | "53==0x%04x " |
@@ -1082,6 +1082,31 @@ static inline void ata_dump_id(struct ata_device *dev) | |||
1082 | dev->id[93]); | 1082 | dev->id[93]); |
1083 | } | 1083 | } |
1084 | 1084 | ||
1085 | /* | ||
1086 | * Compute the PIO modes available for this device. This is not as | ||
1087 | * trivial as it seems if we must consider early devices correctly. | ||
1088 | * | ||
1089 | * FIXME: pre IDE drive timing (do we care ?). | ||
1090 | */ | ||
1091 | |||
1092 | static unsigned int ata_pio_modes(const struct ata_device *adev) | ||
1093 | { | ||
1094 | u16 modes; | ||
1095 | |||
1096 | /* Usual case. Word 53 indicates word 88 is valid */ | ||
1097 | if (adev->id[ATA_ID_FIELD_VALID] & (1 << 2)) { | ||
1098 | modes = adev->id[ATA_ID_PIO_MODES] & 0x03; | ||
1099 | modes <<= 3; | ||
1100 | modes |= 0x7; | ||
1101 | return modes; | ||
1102 | } | ||
1103 | |||
1104 | /* If word 88 isn't valid then Word 51 holds the PIO timing number | ||
1105 | for the maximum. Turn it into a mask and return it */ | ||
1106 | modes = (2 << (adev->id[ATA_ID_OLD_PIO_MODES] & 0xFF)) - 1 ; | ||
1107 | return modes; | ||
1108 | } | ||
1109 | |||
1085 | /** | 1110 | /** |
1086 | * ata_dev_identify - obtain IDENTIFY x DEVICE page | 1111 | * ata_dev_identify - obtain IDENTIFY x DEVICE page |
1087 | * @ap: port on which device we wish to probe resides | 1112 | * @ap: port on which device we wish to probe resides |
@@ -1215,10 +1240,8 @@ retry: | |||
1215 | xfer_modes = dev->id[ATA_ID_UDMA_MODES]; | 1240 | xfer_modes = dev->id[ATA_ID_UDMA_MODES]; |
1216 | if (!xfer_modes) | 1241 | if (!xfer_modes) |
1217 | xfer_modes = (dev->id[ATA_ID_MWDMA_MODES]) << ATA_SHIFT_MWDMA; | 1242 | xfer_modes = (dev->id[ATA_ID_MWDMA_MODES]) << ATA_SHIFT_MWDMA; |
1218 | if (!xfer_modes) { | 1243 | if (!xfer_modes) |
1219 | xfer_modes = (dev->id[ATA_ID_PIO_MODES]) << (ATA_SHIFT_PIO + 3); | 1244 | xfer_modes = ata_pio_modes(dev); |
1220 | xfer_modes |= (0x7 << ATA_SHIFT_PIO); | ||
1221 | } | ||
1222 | 1245 | ||
1223 | ata_dump_id(dev); | 1246 | ata_dump_id(dev); |
1224 | 1247 | ||
@@ -1329,7 +1352,7 @@ err_out: | |||
1329 | } | 1352 | } |
1330 | 1353 | ||
1331 | 1354 | ||
1332 | static inline u8 ata_dev_knobble(struct ata_port *ap) | 1355 | static inline u8 ata_dev_knobble(const struct ata_port *ap) |
1333 | { | 1356 | { |
1334 | return ((ap->cbl == ATA_CBL_SATA) && (!ata_id_is_sata(ap->device->id))); | 1357 | return ((ap->cbl == ATA_CBL_SATA) && (!ata_id_is_sata(ap->device->id))); |
1335 | } | 1358 | } |
@@ -1515,7 +1538,153 @@ void ata_port_disable(struct ata_port *ap) | |||
1515 | ap->flags |= ATA_FLAG_PORT_DISABLED; | 1538 | ap->flags |= ATA_FLAG_PORT_DISABLED; |
1516 | } | 1539 | } |
1517 | 1540 | ||
1518 | static struct { | 1541 | /* |
1542 | * This mode timing computation functionality is ported over from | ||
1543 | * drivers/ide/ide-timing.h and was originally written by Vojtech Pavlik | ||
1544 | */ | ||
1545 | /* | ||
1546 | * PIO 0-5, MWDMA 0-2 and UDMA 0-6 timings (in nanoseconds). | ||
1547 | * These were taken from ATA/ATAPI-6 standard, rev 0a, except | ||
1548 | * for PIO 5, which is a nonstandard extension and UDMA6, which | ||
1549 | * is currently supported only by Maxtor drives. | ||
1550 | */ | ||
1551 | |||
1552 | static const struct ata_timing ata_timing[] = { | ||
1553 | |||
1554 | { XFER_UDMA_6, 0, 0, 0, 0, 0, 0, 0, 15 }, | ||
1555 | { XFER_UDMA_5, 0, 0, 0, 0, 0, 0, 0, 20 }, | ||
1556 | { XFER_UDMA_4, 0, 0, 0, 0, 0, 0, 0, 30 }, | ||
1557 | { XFER_UDMA_3, 0, 0, 0, 0, 0, 0, 0, 45 }, | ||
1558 | |||
1559 | { XFER_UDMA_2, 0, 0, 0, 0, 0, 0, 0, 60 }, | ||
1560 | { XFER_UDMA_1, 0, 0, 0, 0, 0, 0, 0, 80 }, | ||
1561 | { XFER_UDMA_0, 0, 0, 0, 0, 0, 0, 0, 120 }, | ||
1562 | |||
1563 | /* { XFER_UDMA_SLOW, 0, 0, 0, 0, 0, 0, 0, 150 }, */ | ||
1564 | |||
1565 | { XFER_MW_DMA_2, 25, 0, 0, 0, 70, 25, 120, 0 }, | ||
1566 | { XFER_MW_DMA_1, 45, 0, 0, 0, 80, 50, 150, 0 }, | ||
1567 | { XFER_MW_DMA_0, 60, 0, 0, 0, 215, 215, 480, 0 }, | ||
1568 | |||
1569 | { XFER_SW_DMA_2, 60, 0, 0, 0, 120, 120, 240, 0 }, | ||
1570 | { XFER_SW_DMA_1, 90, 0, 0, 0, 240, 240, 480, 0 }, | ||
1571 | { XFER_SW_DMA_0, 120, 0, 0, 0, 480, 480, 960, 0 }, | ||
1572 | |||
1573 | /* { XFER_PIO_5, 20, 50, 30, 100, 50, 30, 100, 0 }, */ | ||
1574 | { XFER_PIO_4, 25, 70, 25, 120, 70, 25, 120, 0 }, | ||
1575 | { XFER_PIO_3, 30, 80, 70, 180, 80, 70, 180, 0 }, | ||
1576 | |||
1577 | { XFER_PIO_2, 30, 290, 40, 330, 100, 90, 240, 0 }, | ||
1578 | { XFER_PIO_1, 50, 290, 93, 383, 125, 100, 383, 0 }, | ||
1579 | { XFER_PIO_0, 70, 290, 240, 600, 165, 150, 600, 0 }, | ||
1580 | |||
1581 | /* { XFER_PIO_SLOW, 120, 290, 240, 960, 290, 240, 960, 0 }, */ | ||
1582 | |||
1583 | { 0xFF } | ||
1584 | }; | ||
1585 | |||
1586 | #define ENOUGH(v,unit) (((v)-1)/(unit)+1) | ||
1587 | #define EZ(v,unit) ((v)?ENOUGH(v,unit):0) | ||
1588 | |||
1589 | static void ata_timing_quantize(const struct ata_timing *t, struct ata_timing *q, int T, int UT) | ||
1590 | { | ||
1591 | q->setup = EZ(t->setup * 1000, T); | ||
1592 | q->act8b = EZ(t->act8b * 1000, T); | ||
1593 | q->rec8b = EZ(t->rec8b * 1000, T); | ||
1594 | q->cyc8b = EZ(t->cyc8b * 1000, T); | ||
1595 | q->active = EZ(t->active * 1000, T); | ||
1596 | q->recover = EZ(t->recover * 1000, T); | ||
1597 | q->cycle = EZ(t->cycle * 1000, T); | ||
1598 | q->udma = EZ(t->udma * 1000, UT); | ||
1599 | } | ||
1600 | |||
1601 | void ata_timing_merge(const struct ata_timing *a, const struct ata_timing *b, | ||
1602 | struct ata_timing *m, unsigned int what) | ||
1603 | { | ||
1604 | if (what & ATA_TIMING_SETUP ) m->setup = max(a->setup, b->setup); | ||
1605 | if (what & ATA_TIMING_ACT8B ) m->act8b = max(a->act8b, b->act8b); | ||
1606 | if (what & ATA_TIMING_REC8B ) m->rec8b = max(a->rec8b, b->rec8b); | ||
1607 | if (what & ATA_TIMING_CYC8B ) m->cyc8b = max(a->cyc8b, b->cyc8b); | ||
1608 | if (what & ATA_TIMING_ACTIVE ) m->active = max(a->active, b->active); | ||
1609 | if (what & ATA_TIMING_RECOVER) m->recover = max(a->recover, b->recover); | ||
1610 | if (what & ATA_TIMING_CYCLE ) m->cycle = max(a->cycle, b->cycle); | ||
1611 | if (what & ATA_TIMING_UDMA ) m->udma = max(a->udma, b->udma); | ||
1612 | } | ||
1613 | |||
1614 | static const struct ata_timing* ata_timing_find_mode(unsigned short speed) | ||
1615 | { | ||
1616 | const struct ata_timing *t; | ||
1617 | |||
1618 | for (t = ata_timing; t->mode != speed; t++) | ||
1619 | if (t->mode == 0xFF) | ||
1620 | return NULL; | ||
1621 | return t; | ||
1622 | } | ||
1623 | |||
1624 | int ata_timing_compute(struct ata_device *adev, unsigned short speed, | ||
1625 | struct ata_timing *t, int T, int UT) | ||
1626 | { | ||
1627 | const struct ata_timing *s; | ||
1628 | struct ata_timing p; | ||
1629 | |||
1630 | /* | ||
1631 | * Find the mode. | ||
1632 | */ | ||
1633 | |||
1634 | if (!(s = ata_timing_find_mode(speed))) | ||
1635 | return -EINVAL; | ||
1636 | |||
1637 | /* | ||
1638 | * If the drive is an EIDE drive, it can tell us it needs extended | ||
1639 | * PIO/MW_DMA cycle timing. | ||
1640 | */ | ||
1641 | |||
1642 | if (adev->id[ATA_ID_FIELD_VALID] & 2) { /* EIDE drive */ | ||
1643 | memset(&p, 0, sizeof(p)); | ||
1644 | if(speed >= XFER_PIO_0 && speed <= XFER_SW_DMA_0) { | ||
1645 | if (speed <= XFER_PIO_2) p.cycle = p.cyc8b = adev->id[ATA_ID_EIDE_PIO]; | ||
1646 | else p.cycle = p.cyc8b = adev->id[ATA_ID_EIDE_PIO_IORDY]; | ||
1647 | } else if(speed >= XFER_MW_DMA_0 && speed <= XFER_MW_DMA_2) { | ||
1648 | p.cycle = adev->id[ATA_ID_EIDE_DMA_MIN]; | ||
1649 | } | ||
1650 | ata_timing_merge(&p, t, t, ATA_TIMING_CYCLE | ATA_TIMING_CYC8B); | ||
1651 | } | ||
1652 | |||
1653 | /* | ||
1654 | * Convert the timing to bus clock counts. | ||
1655 | */ | ||
1656 | |||
1657 | ata_timing_quantize(s, t, T, UT); | ||
1658 | |||
1659 | /* | ||
1660 | * Even in DMA/UDMA modes we still use PIO access for IDENTIFY, S.M.A.R.T | ||
1661 | * and some other commands. We have to ensure that the DMA cycle timing is | ||
1662 | * slower/equal than the fastest PIO timing. | ||
1663 | */ | ||
1664 | |||
1665 | if (speed > XFER_PIO_4) { | ||
1666 | ata_timing_compute(adev, adev->pio_mode, &p, T, UT); | ||
1667 | ata_timing_merge(&p, t, t, ATA_TIMING_ALL); | ||
1668 | } | ||
1669 | |||
1670 | /* | ||
1671 | * Lenghten active & recovery time so that cycle time is correct. | ||
1672 | */ | ||
1673 | |||
1674 | if (t->act8b + t->rec8b < t->cyc8b) { | ||
1675 | t->act8b += (t->cyc8b - (t->act8b + t->rec8b)) / 2; | ||
1676 | t->rec8b = t->cyc8b - t->act8b; | ||
1677 | } | ||
1678 | |||
1679 | if (t->active + t->recover < t->cycle) { | ||
1680 | t->active += (t->cycle - (t->active + t->recover)) / 2; | ||
1681 | t->recover = t->cycle - t->active; | ||
1682 | } | ||
1683 | |||
1684 | return 0; | ||
1685 | } | ||
1686 | |||
1687 | static const struct { | ||
1519 | unsigned int shift; | 1688 | unsigned int shift; |
1520 | u8 base; | 1689 | u8 base; |
1521 | } xfer_mode_classes[] = { | 1690 | } xfer_mode_classes[] = { |
@@ -1924,7 +2093,8 @@ err_out: | |||
1924 | DPRINTK("EXIT\n"); | 2093 | DPRINTK("EXIT\n"); |
1925 | } | 2094 | } |
1926 | 2095 | ||
1927 | static void ata_pr_blacklisted(struct ata_port *ap, struct ata_device *dev) | 2096 | static void ata_pr_blacklisted(const struct ata_port *ap, |
2097 | const struct ata_device *dev) | ||
1928 | { | 2098 | { |
1929 | printk(KERN_WARNING "ata%u: dev %u is on DMA blacklist, disabling DMA\n", | 2099 | printk(KERN_WARNING "ata%u: dev %u is on DMA blacklist, disabling DMA\n", |
1930 | ap->id, dev->devno); | 2100 | ap->id, dev->devno); |
@@ -1962,7 +2132,7 @@ static const char * ata_dma_blacklist [] = { | |||
1962 | "_NEC DV5800A", | 2132 | "_NEC DV5800A", |
1963 | }; | 2133 | }; |
1964 | 2134 | ||
1965 | static int ata_dma_blacklisted(struct ata_port *ap, struct ata_device *dev) | 2135 | static int ata_dma_blacklisted(const struct ata_device *dev) |
1966 | { | 2136 | { |
1967 | unsigned char model_num[40]; | 2137 | unsigned char model_num[40]; |
1968 | char *s; | 2138 | char *s; |
@@ -1987,9 +2157,9 @@ static int ata_dma_blacklisted(struct ata_port *ap, struct ata_device *dev) | |||
1987 | return 0; | 2157 | return 0; |
1988 | } | 2158 | } |
1989 | 2159 | ||
1990 | static unsigned int ata_get_mode_mask(struct ata_port *ap, int shift) | 2160 | static unsigned int ata_get_mode_mask(const struct ata_port *ap, int shift) |
1991 | { | 2161 | { |
1992 | struct ata_device *master, *slave; | 2162 | const struct ata_device *master, *slave; |
1993 | unsigned int mask; | 2163 | unsigned int mask; |
1994 | 2164 | ||
1995 | master = &ap->device[0]; | 2165 | master = &ap->device[0]; |
@@ -2001,14 +2171,14 @@ static unsigned int ata_get_mode_mask(struct ata_port *ap, int shift) | |||
2001 | mask = ap->udma_mask; | 2171 | mask = ap->udma_mask; |
2002 | if (ata_dev_present(master)) { | 2172 | if (ata_dev_present(master)) { |
2003 | mask &= (master->id[ATA_ID_UDMA_MODES] & 0xff); | 2173 | mask &= (master->id[ATA_ID_UDMA_MODES] & 0xff); |
2004 | if (ata_dma_blacklisted(ap, master)) { | 2174 | if (ata_dma_blacklisted(master)) { |
2005 | mask = 0; | 2175 | mask = 0; |
2006 | ata_pr_blacklisted(ap, master); | 2176 | ata_pr_blacklisted(ap, master); |
2007 | } | 2177 | } |
2008 | } | 2178 | } |
2009 | if (ata_dev_present(slave)) { | 2179 | if (ata_dev_present(slave)) { |
2010 | mask &= (slave->id[ATA_ID_UDMA_MODES] & 0xff); | 2180 | mask &= (slave->id[ATA_ID_UDMA_MODES] & 0xff); |
2011 | if (ata_dma_blacklisted(ap, slave)) { | 2181 | if (ata_dma_blacklisted(slave)) { |
2012 | mask = 0; | 2182 | mask = 0; |
2013 | ata_pr_blacklisted(ap, slave); | 2183 | ata_pr_blacklisted(ap, slave); |
2014 | } | 2184 | } |
@@ -2018,14 +2188,14 @@ static unsigned int ata_get_mode_mask(struct ata_port *ap, int shift) | |||
2018 | mask = ap->mwdma_mask; | 2188 | mask = ap->mwdma_mask; |
2019 | if (ata_dev_present(master)) { | 2189 | if (ata_dev_present(master)) { |
2020 | mask &= (master->id[ATA_ID_MWDMA_MODES] & 0x07); | 2190 | mask &= (master->id[ATA_ID_MWDMA_MODES] & 0x07); |
2021 | if (ata_dma_blacklisted(ap, master)) { | 2191 | if (ata_dma_blacklisted(master)) { |
2022 | mask = 0; | 2192 | mask = 0; |
2023 | ata_pr_blacklisted(ap, master); | 2193 | ata_pr_blacklisted(ap, master); |
2024 | } | 2194 | } |
2025 | } | 2195 | } |
2026 | if (ata_dev_present(slave)) { | 2196 | if (ata_dev_present(slave)) { |
2027 | mask &= (slave->id[ATA_ID_MWDMA_MODES] & 0x07); | 2197 | mask &= (slave->id[ATA_ID_MWDMA_MODES] & 0x07); |
2028 | if (ata_dma_blacklisted(ap, slave)) { | 2198 | if (ata_dma_blacklisted(slave)) { |
2029 | mask = 0; | 2199 | mask = 0; |
2030 | ata_pr_blacklisted(ap, slave); | 2200 | ata_pr_blacklisted(ap, slave); |
2031 | } | 2201 | } |
@@ -2089,7 +2259,7 @@ static int fgb(u32 bitmap) | |||
2089 | * Zero on success, negative on error. | 2259 | * Zero on success, negative on error. |
2090 | */ | 2260 | */ |
2091 | 2261 | ||
2092 | static int ata_choose_xfer_mode(struct ata_port *ap, | 2262 | static int ata_choose_xfer_mode(const struct ata_port *ap, |
2093 | u8 *xfer_mode_out, | 2263 | u8 *xfer_mode_out, |
2094 | unsigned int *xfer_shift_out) | 2264 | unsigned int *xfer_shift_out) |
2095 | { | 2265 | { |
@@ -2613,13 +2783,13 @@ void ata_poll_qc_complete(struct ata_queued_cmd *qc, u8 drv_stat) | |||
2613 | 2783 | ||
2614 | /** | 2784 | /** |
2615 | * ata_pio_poll - | 2785 | * ata_pio_poll - |
2616 | * @ap: | 2786 | * @ap: the target ata_port |
2617 | * | 2787 | * |
2618 | * LOCKING: | 2788 | * LOCKING: |
2619 | * None. (executing in kernel thread context) | 2789 | * None. (executing in kernel thread context) |
2620 | * | 2790 | * |
2621 | * RETURNS: | 2791 | * RETURNS: |
2622 | * | 2792 | * timeout value to use |
2623 | */ | 2793 | */ |
2624 | 2794 | ||
2625 | static unsigned long ata_pio_poll(struct ata_port *ap) | 2795 | static unsigned long ata_pio_poll(struct ata_port *ap) |
@@ -2660,8 +2830,8 @@ static unsigned long ata_pio_poll(struct ata_port *ap) | |||
2660 | } | 2830 | } |
2661 | 2831 | ||
2662 | /** | 2832 | /** |
2663 | * ata_pio_complete - | 2833 | * ata_pio_complete - check if drive is busy or idle |
2664 | * @ap: | 2834 | * @ap: the target ata_port |
2665 | * | 2835 | * |
2666 | * LOCKING: | 2836 | * LOCKING: |
2667 | * None. (executing in kernel thread context) | 2837 | * None. (executing in kernel thread context) |
@@ -2713,7 +2883,7 @@ static int ata_pio_complete (struct ata_port *ap) | |||
2713 | 2883 | ||
2714 | 2884 | ||
2715 | /** | 2885 | /** |
2716 | * swap_buf_le16 - | 2886 | * swap_buf_le16 - swap halves of 16-words in place |
2717 | * @buf: Buffer to swap | 2887 | * @buf: Buffer to swap |
2718 | * @buf_words: Number of 16-bit words in buffer. | 2888 | * @buf_words: Number of 16-bit words in buffer. |
2719 | * | 2889 | * |
@@ -2722,6 +2892,7 @@ static int ata_pio_complete (struct ata_port *ap) | |||
2722 | * vice-versa. | 2892 | * vice-versa. |
2723 | * | 2893 | * |
2724 | * LOCKING: | 2894 | * LOCKING: |
2895 | * Inherited from caller. | ||
2725 | */ | 2896 | */ |
2726 | void swap_buf_le16(u16 *buf, unsigned int buf_words) | 2897 | void swap_buf_le16(u16 *buf, unsigned int buf_words) |
2727 | { | 2898 | { |
@@ -2744,7 +2915,6 @@ void swap_buf_le16(u16 *buf, unsigned int buf_words) | |||
2744 | * | 2915 | * |
2745 | * LOCKING: | 2916 | * LOCKING: |
2746 | * Inherited from caller. | 2917 | * Inherited from caller. |
2747 | * | ||
2748 | */ | 2918 | */ |
2749 | 2919 | ||
2750 | static void ata_mmio_data_xfer(struct ata_port *ap, unsigned char *buf, | 2920 | static void ata_mmio_data_xfer(struct ata_port *ap, unsigned char *buf, |
@@ -2790,7 +2960,6 @@ static void ata_mmio_data_xfer(struct ata_port *ap, unsigned char *buf, | |||
2790 | * | 2960 | * |
2791 | * LOCKING: | 2961 | * LOCKING: |
2792 | * Inherited from caller. | 2962 | * Inherited from caller. |
2793 | * | ||
2794 | */ | 2963 | */ |
2795 | 2964 | ||
2796 | static void ata_pio_data_xfer(struct ata_port *ap, unsigned char *buf, | 2965 | static void ata_pio_data_xfer(struct ata_port *ap, unsigned char *buf, |
@@ -2830,7 +2999,6 @@ static void ata_pio_data_xfer(struct ata_port *ap, unsigned char *buf, | |||
2830 | * | 2999 | * |
2831 | * LOCKING: | 3000 | * LOCKING: |
2832 | * Inherited from caller. | 3001 | * Inherited from caller. |
2833 | * | ||
2834 | */ | 3002 | */ |
2835 | 3003 | ||
2836 | static void ata_data_xfer(struct ata_port *ap, unsigned char *buf, | 3004 | static void ata_data_xfer(struct ata_port *ap, unsigned char *buf, |
@@ -2983,7 +3151,6 @@ next_sg: | |||
2983 | * | 3151 | * |
2984 | * LOCKING: | 3152 | * LOCKING: |
2985 | * Inherited from caller. | 3153 | * Inherited from caller. |
2986 | * | ||
2987 | */ | 3154 | */ |
2988 | 3155 | ||
2989 | static void atapi_pio_bytes(struct ata_queued_cmd *qc) | 3156 | static void atapi_pio_bytes(struct ata_queued_cmd *qc) |
@@ -3019,8 +3186,8 @@ err_out: | |||
3019 | } | 3186 | } |
3020 | 3187 | ||
3021 | /** | 3188 | /** |
3022 | * ata_pio_sector - | 3189 | * ata_pio_block - start PIO on a block |
3023 | * @ap: | 3190 | * @ap: the target ata_port |
3024 | * | 3191 | * |
3025 | * LOCKING: | 3192 | * LOCKING: |
3026 | * None. (executing in kernel thread context) | 3193 | * None. (executing in kernel thread context) |
@@ -3032,7 +3199,7 @@ static void ata_pio_block(struct ata_port *ap) | |||
3032 | u8 status; | 3199 | u8 status; |
3033 | 3200 | ||
3034 | /* | 3201 | /* |
3035 | * This is purely hueristic. This is a fast path. | 3202 | * This is purely heuristic. This is a fast path. |
3036 | * Sometimes when we enter, BSY will be cleared in | 3203 | * Sometimes when we enter, BSY will be cleared in |
3037 | * a chk-status or two. If not, the drive is probably seeking | 3204 | * a chk-status or two. If not, the drive is probably seeking |
3038 | * or something. Snooze for a couple msecs, then | 3205 | * or something. Snooze for a couple msecs, then |
@@ -3352,7 +3519,6 @@ static void __ata_qc_complete(struct ata_queued_cmd *qc) | |||
3352 | * | 3519 | * |
3353 | * LOCKING: | 3520 | * LOCKING: |
3354 | * spin_lock_irqsave(host_set lock) | 3521 | * spin_lock_irqsave(host_set lock) |
3355 | * | ||
3356 | */ | 3522 | */ |
3357 | void ata_qc_free(struct ata_queued_cmd *qc) | 3523 | void ata_qc_free(struct ata_queued_cmd *qc) |
3358 | { | 3524 | { |
@@ -3372,7 +3538,6 @@ void ata_qc_free(struct ata_queued_cmd *qc) | |||
3372 | * | 3538 | * |
3373 | * LOCKING: | 3539 | * LOCKING: |
3374 | * spin_lock_irqsave(host_set lock) | 3540 | * spin_lock_irqsave(host_set lock) |
3375 | * | ||
3376 | */ | 3541 | */ |
3377 | 3542 | ||
3378 | void ata_qc_complete(struct ata_queued_cmd *qc, u8 drv_stat) | 3543 | void ata_qc_complete(struct ata_queued_cmd *qc, u8 drv_stat) |
@@ -3866,7 +4031,6 @@ idle_irq: | |||
3866 | * | 4031 | * |
3867 | * RETURNS: | 4032 | * RETURNS: |
3868 | * IRQ_NONE or IRQ_HANDLED. | 4033 | * IRQ_NONE or IRQ_HANDLED. |
3869 | * | ||
3870 | */ | 4034 | */ |
3871 | 4035 | ||
3872 | irqreturn_t ata_interrupt (int irq, void *dev_instance, struct pt_regs *regs) | 4036 | irqreturn_t ata_interrupt (int irq, void *dev_instance, struct pt_regs *regs) |
@@ -3978,6 +4142,7 @@ err_out: | |||
3978 | * May be used as the port_start() entry in ata_port_operations. | 4142 | * May be used as the port_start() entry in ata_port_operations. |
3979 | * | 4143 | * |
3980 | * LOCKING: | 4144 | * LOCKING: |
4145 | * Inherited from caller. | ||
3981 | */ | 4146 | */ |
3982 | 4147 | ||
3983 | int ata_port_start (struct ata_port *ap) | 4148 | int ata_port_start (struct ata_port *ap) |
@@ -4009,6 +4174,7 @@ int ata_port_start (struct ata_port *ap) | |||
4009 | * May be used as the port_stop() entry in ata_port_operations. | 4174 | * May be used as the port_stop() entry in ata_port_operations. |
4010 | * | 4175 | * |
4011 | * LOCKING: | 4176 | * LOCKING: |
4177 | * Inherited from caller. | ||
4012 | */ | 4178 | */ |
4013 | 4179 | ||
4014 | void ata_port_stop (struct ata_port *ap) | 4180 | void ata_port_stop (struct ata_port *ap) |
@@ -4032,6 +4198,7 @@ void ata_host_stop (struct ata_host_set *host_set) | |||
4032 | * @do_unregister: 1 if we fully unregister, 0 to just stop the port | 4198 | * @do_unregister: 1 if we fully unregister, 0 to just stop the port |
4033 | * | 4199 | * |
4034 | * LOCKING: | 4200 | * LOCKING: |
4201 | * Inherited from caller. | ||
4035 | */ | 4202 | */ |
4036 | 4203 | ||
4037 | static void ata_host_remove(struct ata_port *ap, unsigned int do_unregister) | 4204 | static void ata_host_remove(struct ata_port *ap, unsigned int do_unregister) |
@@ -4059,12 +4226,11 @@ static void ata_host_remove(struct ata_port *ap, unsigned int do_unregister) | |||
4059 | * | 4226 | * |
4060 | * LOCKING: | 4227 | * LOCKING: |
4061 | * Inherited from caller. | 4228 | * Inherited from caller. |
4062 | * | ||
4063 | */ | 4229 | */ |
4064 | 4230 | ||
4065 | static void ata_host_init(struct ata_port *ap, struct Scsi_Host *host, | 4231 | static void ata_host_init(struct ata_port *ap, struct Scsi_Host *host, |
4066 | struct ata_host_set *host_set, | 4232 | struct ata_host_set *host_set, |
4067 | struct ata_probe_ent *ent, unsigned int port_no) | 4233 | const struct ata_probe_ent *ent, unsigned int port_no) |
4068 | { | 4234 | { |
4069 | unsigned int i; | 4235 | unsigned int i; |
4070 | 4236 | ||
@@ -4120,10 +4286,9 @@ static void ata_host_init(struct ata_port *ap, struct Scsi_Host *host, | |||
4120 | * | 4286 | * |
4121 | * RETURNS: | 4287 | * RETURNS: |
4122 | * New ata_port on success, for NULL on error. | 4288 | * New ata_port on success, for NULL on error. |
4123 | * | ||
4124 | */ | 4289 | */ |
4125 | 4290 | ||
4126 | static struct ata_port * ata_host_add(struct ata_probe_ent *ent, | 4291 | static struct ata_port * ata_host_add(const struct ata_probe_ent *ent, |
4127 | struct ata_host_set *host_set, | 4292 | struct ata_host_set *host_set, |
4128 | unsigned int port_no) | 4293 | unsigned int port_no) |
4129 | { | 4294 | { |
@@ -4168,10 +4333,9 @@ err_out: | |||
4168 | * | 4333 | * |
4169 | * RETURNS: | 4334 | * RETURNS: |
4170 | * Number of ports registered. Zero on error (no ports registered). | 4335 | * Number of ports registered. Zero on error (no ports registered). |
4171 | * | ||
4172 | */ | 4336 | */ |
4173 | 4337 | ||
4174 | int ata_device_add(struct ata_probe_ent *ent) | 4338 | int ata_device_add(const struct ata_probe_ent *ent) |
4175 | { | 4339 | { |
4176 | unsigned int count = 0, i; | 4340 | unsigned int count = 0, i; |
4177 | struct device *dev = ent->dev; | 4341 | struct device *dev = ent->dev; |
@@ -4300,7 +4464,6 @@ err_out: | |||
4300 | * Inherited from calling layer (may sleep). | 4464 | * Inherited from calling layer (may sleep). |
4301 | */ | 4465 | */ |
4302 | 4466 | ||
4303 | |||
4304 | void ata_host_set_remove(struct ata_host_set *host_set) | 4467 | void ata_host_set_remove(struct ata_host_set *host_set) |
4305 | { | 4468 | { |
4306 | struct ata_port *ap; | 4469 | struct ata_port *ap; |
@@ -4390,7 +4553,7 @@ void ata_std_ports(struct ata_ioports *ioaddr) | |||
4390 | } | 4553 | } |
4391 | 4554 | ||
4392 | static struct ata_probe_ent * | 4555 | static struct ata_probe_ent * |
4393 | ata_probe_ent_alloc(struct device *dev, struct ata_port_info *port) | 4556 | ata_probe_ent_alloc(struct device *dev, const struct ata_port_info *port) |
4394 | { | 4557 | { |
4395 | struct ata_probe_ent *probe_ent; | 4558 | struct ata_probe_ent *probe_ent; |
4396 | 4559 | ||
@@ -4490,7 +4653,6 @@ static struct ata_probe_ent *ata_pci_init_legacy_port(struct pci_dev *pdev, stru | |||
4490 | if (!probe_ent) | 4653 | if (!probe_ent) |
4491 | return NULL; | 4654 | return NULL; |
4492 | 4655 | ||
4493 | |||
4494 | probe_ent->legacy_mode = 1; | 4656 | probe_ent->legacy_mode = 1; |
4495 | probe_ent->n_ports = 1; | 4657 | probe_ent->n_ports = 1; |
4496 | probe_ent->hard_port_no = port_num; | 4658 | probe_ent->hard_port_no = port_num; |
@@ -4534,7 +4696,6 @@ static struct ata_probe_ent *ata_pci_init_legacy_port(struct pci_dev *pdev, stru | |||
4534 | * | 4696 | * |
4535 | * RETURNS: | 4697 | * RETURNS: |
4536 | * Zero on success, negative on errno-based value on error. | 4698 | * Zero on success, negative on errno-based value on error. |
4537 | * | ||
4538 | */ | 4699 | */ |
4539 | 4700 | ||
4540 | int ata_pci_init_one (struct pci_dev *pdev, struct ata_port_info **port_info, | 4701 | int ata_pci_init_one (struct pci_dev *pdev, struct ata_port_info **port_info, |
@@ -4682,7 +4843,7 @@ err_out: | |||
4682 | * @pdev: PCI device that was removed | 4843 | * @pdev: PCI device that was removed |
4683 | * | 4844 | * |
4684 | * PCI layer indicates to libata via this hook that | 4845 | * PCI layer indicates to libata via this hook that |
4685 | * hot-unplug or module unload event has occured. | 4846 | * hot-unplug or module unload event has occurred. |
4686 | * Handle this by unregistering all objects associated | 4847 | * Handle this by unregistering all objects associated |
4687 | * with this PCI device. Free those objects. Then finally | 4848 | * with this PCI device. Free those objects. Then finally |
4688 | * release PCI resources and disable device. | 4849 | * release PCI resources and disable device. |
@@ -4703,7 +4864,7 @@ void ata_pci_remove_one (struct pci_dev *pdev) | |||
4703 | } | 4864 | } |
4704 | 4865 | ||
4705 | /* move to PCI subsystem */ | 4866 | /* move to PCI subsystem */ |
4706 | int pci_test_config_bits(struct pci_dev *pdev, struct pci_bits *bits) | 4867 | int pci_test_config_bits(struct pci_dev *pdev, const struct pci_bits *bits) |
4707 | { | 4868 | { |
4708 | unsigned long tmp = 0; | 4869 | unsigned long tmp = 0; |
4709 | 4870 | ||
@@ -4830,6 +4991,9 @@ EXPORT_SYMBOL_GPL(ata_dev_id_string); | |||
4830 | EXPORT_SYMBOL_GPL(ata_dev_config); | 4991 | EXPORT_SYMBOL_GPL(ata_dev_config); |
4831 | EXPORT_SYMBOL_GPL(ata_scsi_simulate); | 4992 | EXPORT_SYMBOL_GPL(ata_scsi_simulate); |
4832 | 4993 | ||
4994 | EXPORT_SYMBOL_GPL(ata_timing_compute); | ||
4995 | EXPORT_SYMBOL_GPL(ata_timing_merge); | ||
4996 | |||
4833 | #ifdef CONFIG_PCI | 4997 | #ifdef CONFIG_PCI |
4834 | EXPORT_SYMBOL_GPL(pci_test_config_bits); | 4998 | EXPORT_SYMBOL_GPL(pci_test_config_bits); |
4835 | EXPORT_SYMBOL_GPL(ata_pci_host_stop); | 4999 | EXPORT_SYMBOL_GPL(ata_pci_host_stop); |