aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-12-17 16:32:49 -0500
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-12-17 16:32:49 -0500
commit07232b971577442de0821afa0abafb6531b6192e (patch)
tree78c3558239eaebc65df72b40a6a2c6ddc3a02998 /drivers
parentea9e7b5569a538123dc4d60ba36b9170ca8e8830 (diff)
parent644a9d764b4747af057b3db73ccba28a168b1f4f (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6: ide: fix ->io_32bit race in set_io_32bit() ide: remove stale changelog from ide-probe.c ide: remove stale changelog from ide-disk.c ide: remove dead code from __ide_dma_test_irq() hpt366: fix HPT37x PIO mode timings (take 2) pdc202xx_new: fix Promise TX4 support ide-cd: remove dead post_transform_command() ide: DMA reporting and validity checking fixes (take 3) ide: add /sys/bus/ide/devices/*/{model,firmware,serial} sysfs entries ide: coding style fixes for drivers/ide/setup-pci.c ide: fix ide_scan_pcibus() error message ide: deprecate CONFIG_BLK_DEV_OFFBOARD ide: add missing checks for control register existence ide-scsi: add ide_scsi_hex_dump() helper
Diffstat (limited to 'drivers')
-rw-r--r--drivers/ide/Kconfig6
-rw-r--r--drivers/ide/ide-cd.c35
-rw-r--r--drivers/ide/ide-disk.c33
-rw-r--r--drivers/ide/ide-dma.c66
-rw-r--r--drivers/ide/ide-io.c3
-rw-r--r--drivers/ide/ide-iops.c3
-rw-r--r--drivers/ide/ide-lib.c55
-rw-r--r--drivers/ide/ide-probe.c21
-rw-r--r--drivers/ide/ide.c30
-rw-r--r--drivers/ide/pci/hpt366.c71
-rw-r--r--drivers/ide/pci/pdc202xx_new.c3
-rw-r--r--drivers/ide/setup-pci.c31
-rw-r--r--drivers/scsi/ide-scsi.c17
13 files changed, 188 insertions, 186 deletions
diff --git a/drivers/ide/Kconfig b/drivers/ide/Kconfig
index 45b22282f149..fb06555708a8 100644
--- a/drivers/ide/Kconfig
+++ b/drivers/ide/Kconfig
@@ -390,7 +390,7 @@ config IDEPCI_PCIBUS_ORDER
390 390
391# TODO: split it on per host driver config options (or module parameters) 391# TODO: split it on per host driver config options (or module parameters)
392config BLK_DEV_OFFBOARD 392config BLK_DEV_OFFBOARD
393 bool "Boot off-board chipsets first support" 393 bool "Boot off-board chipsets first support (DEPRECATED)"
394 depends on BLK_DEV_IDEPCI && (BLK_DEV_AEC62XX || BLK_DEV_GENERIC || BLK_DEV_HPT34X || BLK_DEV_HPT366 || BLK_DEV_PDC202XX_NEW || BLK_DEV_PDC202XX_OLD || BLK_DEV_TC86C001) 394 depends on BLK_DEV_IDEPCI && (BLK_DEV_AEC62XX || BLK_DEV_GENERIC || BLK_DEV_HPT34X || BLK_DEV_HPT366 || BLK_DEV_PDC202XX_NEW || BLK_DEV_PDC202XX_OLD || BLK_DEV_TC86C001)
395 help 395 help
396 Normally, IDE controllers built into the motherboard (on-board 396 Normally, IDE controllers built into the motherboard (on-board
@@ -410,6 +410,10 @@ config BLK_DEV_OFFBOARD
410 Note that, if you do this, the order of the hd* devices will be 410 Note that, if you do this, the order of the hd* devices will be
411 rearranged which may require modification of fstab and other files. 411 rearranged which may require modification of fstab and other files.
412 412
413 Please also note that this method of assuring stable naming of
414 IDE devices is unreliable and use other means for achieving it
415 (i.e. udev).
416
413 If in doubt, say N. 417 If in doubt, say N.
414 418
415config BLK_DEV_GENERIC 419config BLK_DEV_GENERIC
diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c
index 57a5f63d6ae3..92ac658dac33 100644
--- a/drivers/ide/ide-cd.c
+++ b/drivers/ide/ide-cd.c
@@ -1650,31 +1650,6 @@ static int cdrom_write_check_ireason(ide_drive_t *drive, int len, int ireason)
1650 return 1; 1650 return 1;
1651} 1651}
1652 1652
1653static void post_transform_command(struct request *req)
1654{
1655 u8 *c = req->cmd;
1656 char *ibuf;
1657
1658 if (!blk_pc_request(req))
1659 return;
1660
1661 if (req->bio)
1662 ibuf = bio_data(req->bio);
1663 else
1664 ibuf = req->data;
1665
1666 if (!ibuf)
1667 return;
1668
1669 /*
1670 * set ansi-revision and response data as atapi
1671 */
1672 if (c[0] == GPCMD_INQUIRY) {
1673 ibuf[2] |= 2;
1674 ibuf[3] = (ibuf[3] & 0xf0) | 2;
1675 }
1676}
1677
1678typedef void (xfer_func_t)(ide_drive_t *, void *, u32); 1653typedef void (xfer_func_t)(ide_drive_t *, void *, u32);
1679 1654
1680/* 1655/*
@@ -1810,9 +1785,6 @@ static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive)
1810 return ide_started; 1785 return ide_started;
1811 1786
1812end_request: 1787end_request:
1813 if (!rq->data_len)
1814 post_transform_command(rq);
1815
1816 spin_lock_irqsave(&ide_lock, flags); 1788 spin_lock_irqsave(&ide_lock, flags);
1817 blkdev_dequeue_request(rq); 1789 blkdev_dequeue_request(rq);
1818 end_that_request_last(rq, 1); 1790 end_that_request_last(rq, 1);
@@ -3049,12 +3021,7 @@ int ide_cdrom_probe_capabilities (ide_drive_t *drive)
3049 else 3021 else
3050 printk(" drive"); 3022 printk(" drive");
3051 3023
3052 printk(", %dkB Cache", be16_to_cpu(cap.buffer_size)); 3024 printk(KERN_CONT ", %dkB Cache\n", be16_to_cpu(cap.buffer_size));
3053
3054 if (drive->using_dma)
3055 ide_dma_verbose(drive);
3056
3057 printk("\n");
3058 3025
3059 return nslots; 3026 return nslots;
3060} 3027}
diff --git a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c
index 00123d99527a..b1781908e1f2 100644
--- a/drivers/ide/ide-disk.c
+++ b/drivers/ide/ide-disk.c
@@ -13,32 +13,6 @@
13 * and Andre Hedrick <andre@linux-ide.org> 13 * and Andre Hedrick <andre@linux-ide.org>
14 * 14 *
15 * This is the IDE/ATA disk driver, as evolved from hd.c and ide.c. 15 * This is the IDE/ATA disk driver, as evolved from hd.c and ide.c.
16 *
17 * Version 1.00 move disk only code from ide.c to ide-disk.c
18 * support optional byte-swapping of all data
19 * Version 1.01 fix previous byte-swapping code
20 * Version 1.02 remove ", LBA" from drive identification msgs
21 * Version 1.03 fix display of id->buf_size for big-endian
22 * Version 1.04 add /proc configurable settings and S.M.A.R.T support
23 * Version 1.05 add capacity support for ATA3 >= 8GB
24 * Version 1.06 get boot-up messages to show full cyl count
25 * Version 1.07 disable door-locking if it fails
26 * Version 1.08 fixed CHS/LBA translations for ATA4 > 8GB,
27 * process of adding new ATA4 compliance.
28 * fixed problems in allowing fdisk to see
29 * the entire disk.
30 * Version 1.09 added increment of rq->sector in ide_multwrite
31 * added UDMA 3/4 reporting
32 * Version 1.10 request queue changes, Ultra DMA 100
33 * Version 1.11 added 48-bit lba
34 * Version 1.12 adding taskfile io access method
35 * Version 1.13 added standby and flush-cache for notifier
36 * Version 1.14 added acoustic-wcache
37 * Version 1.15 convert all calls to ide_raw_taskfile
38 * since args will return register content.
39 * Version 1.16 added suspend-resume-checkpower
40 * Version 1.17 do flush on standby, do flush on ATA < ATA6
41 * fix wcache setup.
42 */ 16 */
43 17
44#define IDEDISK_VERSION "1.18" 18#define IDEDISK_VERSION "1.18"
@@ -961,11 +935,8 @@ static void idedisk_setup (ide_drive_t *drive)
961 if (id->buf_size) 935 if (id->buf_size)
962 printk (" w/%dKiB Cache", id->buf_size/2); 936 printk (" w/%dKiB Cache", id->buf_size/2);
963 937
964 printk(", CHS=%d/%d/%d", 938 printk(KERN_CONT ", CHS=%d/%d/%d\n",
965 drive->bios_cyl, drive->bios_head, drive->bios_sect); 939 drive->bios_cyl, drive->bios_head, drive->bios_sect);
966 if (drive->using_dma)
967 ide_dma_verbose(drive);
968 printk("\n");
969 940
970 /* write cache enabled? */ 941 /* write cache enabled? */
971 if ((id->csfo & 1) || (id->cfs_enable_1 & (1 << 5))) 942 if ((id->csfo & 1) || (id->cfs_enable_1 & (1 << 5)))
diff --git a/drivers/ide/ide-dma.c b/drivers/ide/ide-dma.c
index 0d795a1678c7..4703837bf1fc 100644
--- a/drivers/ide/ide-dma.c
+++ b/drivers/ide/ide-dma.c
@@ -611,12 +611,6 @@ static int __ide_dma_test_irq(ide_drive_t *drive)
611 ide_hwif_t *hwif = HWIF(drive); 611 ide_hwif_t *hwif = HWIF(drive);
612 u8 dma_stat = hwif->INB(hwif->dma_status); 612 u8 dma_stat = hwif->INB(hwif->dma_status);
613 613
614#if 0 /* do not set unless you know what you are doing */
615 if (dma_stat & 4) {
616 u8 stat = hwif->INB(IDE_STATUS_REG);
617 hwif->OUTB(hwif->dma_status, dma_stat & 0xE4);
618 }
619#endif
620 /* return 1 if INTR asserted */ 614 /* return 1 if INTR asserted */
621 if ((dma_stat & 4) == 4) 615 if ((dma_stat & 4) == 4)
622 return 1; 616 return 1;
@@ -753,10 +747,12 @@ u8 ide_find_dma_mode(ide_drive_t *drive, u8 req_mode)
753 mode = XFER_MW_DMA_1; 747 mode = XFER_MW_DMA_1;
754 } 748 }
755 749
756 printk(KERN_DEBUG "%s: %s mode selected\n", drive->name, 750 mode = min(mode, req_mode);
751
752 printk(KERN_INFO "%s: %s mode selected\n", drive->name,
757 mode ? ide_xfer_verbose(mode) : "no DMA"); 753 mode ? ide_xfer_verbose(mode) : "no DMA");
758 754
759 return min(mode, req_mode); 755 return mode;
760} 756}
761 757
762EXPORT_SYMBOL_GPL(ide_find_dma_mode); 758EXPORT_SYMBOL_GPL(ide_find_dma_mode);
@@ -772,6 +768,9 @@ static int ide_tune_dma(ide_drive_t *drive)
772 if (__ide_dma_bad_drive(drive)) 768 if (__ide_dma_bad_drive(drive))
773 return 0; 769 return 0;
774 770
771 if (ide_id_dma_bug(drive))
772 return 0;
773
775 if (drive->hwif->host_flags & IDE_HFLAG_TRUST_BIOS_FOR_DMA) 774 if (drive->hwif->host_flags & IDE_HFLAG_TRUST_BIOS_FOR_DMA)
776 return config_drive_for_dma(drive); 775 return config_drive_for_dma(drive);
777 776
@@ -806,58 +805,23 @@ static int ide_dma_check(ide_drive_t *drive)
806 return vdma ? 0 : -1; 805 return vdma ? 0 : -1;
807} 806}
808 807
809void ide_dma_verbose(ide_drive_t *drive) 808int ide_id_dma_bug(ide_drive_t *drive)
810{ 809{
811 struct hd_driveid *id = drive->id; 810 struct hd_driveid *id = drive->id;
812 ide_hwif_t *hwif = HWIF(drive);
813 811
814 if (id->field_valid & 4) { 812 if (id->field_valid & 4) {
815 if ((id->dma_ultra >> 8) && (id->dma_mword >> 8)) 813 if ((id->dma_ultra >> 8) && (id->dma_mword >> 8))
816 goto bug_dma_off; 814 goto err_out;
817 if (id->dma_ultra & ((id->dma_ultra >> 8) & hwif->ultra_mask)) {
818 if (((id->dma_ultra >> 11) & 0x1F) &&
819 eighty_ninty_three(drive)) {
820 if ((id->dma_ultra >> 15) & 1) {
821 printk(", UDMA(mode 7)");
822 } else if ((id->dma_ultra >> 14) & 1) {
823 printk(", UDMA(133)");
824 } else if ((id->dma_ultra >> 13) & 1) {
825 printk(", UDMA(100)");
826 } else if ((id->dma_ultra >> 12) & 1) {
827 printk(", UDMA(66)");
828 } else if ((id->dma_ultra >> 11) & 1) {
829 printk(", UDMA(44)");
830 } else
831 goto mode_two;
832 } else {
833 mode_two:
834 if ((id->dma_ultra >> 10) & 1) {
835 printk(", UDMA(33)");
836 } else if ((id->dma_ultra >> 9) & 1) {
837 printk(", UDMA(25)");
838 } else if ((id->dma_ultra >> 8) & 1) {
839 printk(", UDMA(16)");
840 }
841 }
842 } else {
843 printk(", (U)DMA"); /* Can be BIOS-enabled! */
844 }
845 } else if (id->field_valid & 2) { 815 } else if (id->field_valid & 2) {
846 if ((id->dma_mword >> 8) && (id->dma_1word >> 8)) 816 if ((id->dma_mword >> 8) && (id->dma_1word >> 8))
847 goto bug_dma_off; 817 goto err_out;
848 printk(", DMA");
849 } else if (id->field_valid & 1) {
850 goto bug_dma_off;
851 } 818 }
852 return; 819 return 0;
853bug_dma_off: 820err_out:
854 printk(", BUG DMA OFF"); 821 printk(KERN_ERR "%s: bad DMA info in identify block\n", drive->name);
855 hwif->dma_off_quietly(drive); 822 return 1;
856 return;
857} 823}
858 824
859EXPORT_SYMBOL(ide_dma_verbose);
860
861int ide_set_dma(ide_drive_t *drive) 825int ide_set_dma(ide_drive_t *drive)
862{ 826{
863 ide_hwif_t *hwif = drive->hwif; 827 ide_hwif_t *hwif = drive->hwif;
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c
index db22d1ff4e55..bef781fec500 100644
--- a/drivers/ide/ide-io.c
+++ b/drivers/ide/ide-io.c
@@ -970,7 +970,8 @@ static void ide_check_pm_state(ide_drive_t *drive, struct request *rq)
970 if (rc) 970 if (rc)
971 printk(KERN_WARNING "%s: bus not ready on wakeup\n", drive->name); 971 printk(KERN_WARNING "%s: bus not ready on wakeup\n", drive->name);
972 SELECT_DRIVE(drive); 972 SELECT_DRIVE(drive);
973 HWIF(drive)->OUTB(8, HWIF(drive)->io_ports[IDE_CONTROL_OFFSET]); 973 if (IDE_CONTROL_REG)
974 HWIF(drive)->OUTB(drive->ctl, IDE_CONTROL_REG);
974 rc = ide_wait_not_busy(HWIF(drive), 100000); 975 rc = ide_wait_not_busy(HWIF(drive), 100000);
975 if (rc) 976 if (rc)
976 printk(KERN_WARNING "%s: drive not ready on wakeup\n", drive->name); 977 printk(KERN_WARNING "%s: drive not ready on wakeup\n", drive->name);
diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c
index 5c3256180ae5..cef405ddaf0e 100644
--- a/drivers/ide/ide-iops.c
+++ b/drivers/ide/ide-iops.c
@@ -748,6 +748,9 @@ int ide_driveid_update(ide_drive_t *drive)
748 drive->id->dma_1word = id->dma_1word; 748 drive->id->dma_1word = id->dma_1word;
749 /* anything more ? */ 749 /* anything more ? */
750 kfree(id); 750 kfree(id);
751
752 if (drive->using_dma && ide_id_dma_bug(drive))
753 ide_dma_off(drive);
751 } 754 }
752 755
753 return 1; 756 return 1;
diff --git a/drivers/ide/ide-lib.c b/drivers/ide/ide-lib.c
index 1609b8604f56..062d3bcb2471 100644
--- a/drivers/ide/ide-lib.c
+++ b/drivers/ide/ide-lib.c
@@ -29,41 +29,44 @@
29 * Add common non I/O op stuff here. Make sure it has proper 29 * Add common non I/O op stuff here. Make sure it has proper
30 * kernel-doc function headers or your patch will be rejected 30 * kernel-doc function headers or your patch will be rejected
31 */ 31 */
32 32
33static const char *udma_str[] =
34 { "UDMA/16", "UDMA/25", "UDMA/33", "UDMA/44",
35 "UDMA/66", "UDMA/100", "UDMA/133", "UDMA7" };
36static const char *mwdma_str[] =
37 { "MWDMA0", "MWDMA1", "MWDMA2" };
38static const char *swdma_str[] =
39 { "SWDMA0", "SWDMA1", "SWDMA2" };
40static const char *pio_str[] =
41 { "PIO0", "PIO1", "PIO2", "PIO3", "PIO4", "PIO5" };
33 42
34/** 43/**
35 * ide_xfer_verbose - return IDE mode names 44 * ide_xfer_verbose - return IDE mode names
36 * @xfer_rate: rate to name 45 * @mode: transfer mode
37 * 46 *
38 * Returns a constant string giving the name of the mode 47 * Returns a constant string giving the name of the mode
39 * requested. 48 * requested.
40 */ 49 */
41 50
42char *ide_xfer_verbose (u8 xfer_rate) 51const char *ide_xfer_verbose(u8 mode)
43{ 52{
44 switch(xfer_rate) { 53 const char *s;
45 case XFER_UDMA_7: return("UDMA 7"); 54 u8 i = mode & 0xf;
46 case XFER_UDMA_6: return("UDMA 6"); 55
47 case XFER_UDMA_5: return("UDMA 5"); 56 if (mode >= XFER_UDMA_0 && mode <= XFER_UDMA_7)
48 case XFER_UDMA_4: return("UDMA 4"); 57 s = udma_str[i];
49 case XFER_UDMA_3: return("UDMA 3"); 58 else if (mode >= XFER_MW_DMA_0 && mode <= XFER_MW_DMA_2)
50 case XFER_UDMA_2: return("UDMA 2"); 59 s = mwdma_str[i];
51 case XFER_UDMA_1: return("UDMA 1"); 60 else if (mode >= XFER_SW_DMA_0 && mode <= XFER_SW_DMA_2)
52 case XFER_UDMA_0: return("UDMA 0"); 61 s = swdma_str[i];
53 case XFER_MW_DMA_2: return("MW DMA 2"); 62 else if (mode >= XFER_PIO_0 && mode <= XFER_PIO_5)
54 case XFER_MW_DMA_1: return("MW DMA 1"); 63 s = pio_str[i & 0x7];
55 case XFER_MW_DMA_0: return("MW DMA 0"); 64 else if (mode == XFER_PIO_SLOW)
56 case XFER_SW_DMA_2: return("SW DMA 2"); 65 s = "PIO SLOW";
57 case XFER_SW_DMA_1: return("SW DMA 1"); 66 else
58 case XFER_SW_DMA_0: return("SW DMA 0"); 67 s = "XFER ERROR";
59 case XFER_PIO_4: return("PIO 4"); 68
60 case XFER_PIO_3: return("PIO 3"); 69 return s;
61 case XFER_PIO_2: return("PIO 2");
62 case XFER_PIO_1: return("PIO 1");
63 case XFER_PIO_0: return("PIO 0");
64 case XFER_PIO_SLOW: return("PIO SLOW");
65 default: return("XFER ERROR");
66 }
67} 70}
68 71
69EXPORT_SYMBOL(ide_xfer_verbose); 72EXPORT_SYMBOL(ide_xfer_verbose);
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c
index ee848c705995..2994523be7bf 100644
--- a/drivers/ide/ide-probe.c
+++ b/drivers/ide/ide-probe.c
@@ -13,22 +13,8 @@
13 * 13 *
14 * This is the IDE probe module, as evolved from hd.c and ide.c. 14 * This is the IDE probe module, as evolved from hd.c and ide.c.
15 * 15 *
16 * Version 1.00 move drive probing code from ide.c to ide-probe.c 16 * -- increase WAIT_PIDENTIFY to avoid CD-ROM locking at boot
17 * Version 1.01 fix compilation problem for m68k 17 * by Andrea Arcangeli
18 * Version 1.02 increase WAIT_PIDENTIFY to avoid CD-ROM locking at boot
19 * by Andrea Arcangeli
20 * Version 1.03 fix for (hwif->chipset == ide_4drives)
21 * Version 1.04 fixed buggy treatments of known flash memory cards
22 *
23 * Version 1.05 fix for (hwif->chipset == ide_pdc4030)
24 * added ide6/7/8/9
25 * allowed for secondary flash card to be detectable
26 * with new flag : drive->ata_flash : 1;
27 * Version 1.06 stream line request queue and prep for cascade project.
28 * Version 1.07 max_sect <= 255; slower disks would get behind and
29 * then fall over when they get to 256. Paul G.
30 * Version 1.10 Update set for new IDE. drive->id is now always
31 * valid after probe time even with noprobe
32 */ 18 */
33 19
34#include <linux/module.h> 20#include <linux/module.h>
@@ -667,7 +653,8 @@ static int wait_hwif_ready(ide_hwif_t *hwif)
667 /* Ignore disks that we will not probe for later. */ 653 /* Ignore disks that we will not probe for later. */
668 if (!drive->noprobe || drive->present) { 654 if (!drive->noprobe || drive->present) {
669 SELECT_DRIVE(drive); 655 SELECT_DRIVE(drive);
670 hwif->OUTB(8, hwif->io_ports[IDE_CONTROL_OFFSET]); 656 if (IDE_CONTROL_REG)
657 hwif->OUTB(drive->ctl, IDE_CONTROL_REG);
671 mdelay(2); 658 mdelay(2);
672 rc = ide_wait_not_busy(hwif, 35000); 659 rc = ide_wait_not_busy(hwif, 35000);
673 if (rc) 660 if (rc)
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c
index 674a65c1a130..54943da6e4e5 100644
--- a/drivers/ide/ide.c
+++ b/drivers/ide/ide.c
@@ -800,11 +800,17 @@ int set_io_32bit(ide_drive_t *drive, int arg)
800 if (arg < 0 || arg > 1 + (SUPPORT_VLB_SYNC << 1)) 800 if (arg < 0 || arg > 1 + (SUPPORT_VLB_SYNC << 1))
801 return -EINVAL; 801 return -EINVAL;
802 802
803 if (ide_spin_wait_hwgroup(drive))
804 return -EBUSY;
805
803 drive->io_32bit = arg; 806 drive->io_32bit = arg;
804#ifdef CONFIG_BLK_DEV_DTC2278 807#ifdef CONFIG_BLK_DEV_DTC2278
805 if (HWIF(drive)->chipset == ide_dtc2278) 808 if (HWIF(drive)->chipset == ide_dtc2278)
806 HWIF(drive)->drives[!drive->select.b.unit].io_32bit = arg; 809 HWIF(drive)->drives[!drive->select.b.unit].io_32bit = arg;
807#endif /* CONFIG_BLK_DEV_DTC2278 */ 810#endif /* CONFIG_BLK_DEV_DTC2278 */
811
812 spin_unlock_irq(&ide_lock);
813
808 return 0; 814 return 0;
809} 815}
810 816
@@ -1670,10 +1676,34 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
1670 return sprintf(buf, "ide:m-%s\n", media_string(drive)); 1676 return sprintf(buf, "ide:m-%s\n", media_string(drive));
1671} 1677}
1672 1678
1679static ssize_t model_show(struct device *dev, struct device_attribute *attr,
1680 char *buf)
1681{
1682 ide_drive_t *drive = to_ide_device(dev);
1683 return sprintf(buf, "%s\n", drive->id->model);
1684}
1685
1686static ssize_t firmware_show(struct device *dev, struct device_attribute *attr,
1687 char *buf)
1688{
1689 ide_drive_t *drive = to_ide_device(dev);
1690 return sprintf(buf, "%s\n", drive->id->fw_rev);
1691}
1692
1693static ssize_t serial_show(struct device *dev, struct device_attribute *attr,
1694 char *buf)
1695{
1696 ide_drive_t *drive = to_ide_device(dev);
1697 return sprintf(buf, "%s\n", drive->id->serial_no);
1698}
1699
1673static struct device_attribute ide_dev_attrs[] = { 1700static struct device_attribute ide_dev_attrs[] = {
1674 __ATTR_RO(media), 1701 __ATTR_RO(media),
1675 __ATTR_RO(drivename), 1702 __ATTR_RO(drivename),
1676 __ATTR_RO(modalias), 1703 __ATTR_RO(modalias),
1704 __ATTR_RO(model),
1705 __ATTR_RO(firmware),
1706 __ATTR(serial, 0400, serial_show, NULL),
1677 __ATTR_NULL 1707 __ATTR_NULL
1678}; 1708};
1679 1709
diff --git a/drivers/ide/pci/hpt366.c b/drivers/ide/pci/hpt366.c
index 5682895d36d9..9fce25bdec8a 100644
--- a/drivers/ide/pci/hpt366.c
+++ b/drivers/ide/pci/hpt366.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * linux/drivers/ide/pci/hpt366.c Version 1.21 Oct 23, 2007 2 * linux/drivers/ide/pci/hpt366.c Version 1.22 Dec 4, 2007
3 * 3 *
4 * Copyright (C) 1999-2003 Andre Hedrick <andre@linux-ide.org> 4 * Copyright (C) 1999-2003 Andre Hedrick <andre@linux-ide.org>
5 * Portions Copyright (C) 2001 Sun Microsystems, Inc. 5 * Portions Copyright (C) 2001 Sun Microsystems, Inc.
@@ -310,6 +310,8 @@ static u32 twenty_five_base_hpt36x[] = {
310 /* XFER_PIO_0 */ 0xc0d08585 310 /* XFER_PIO_0 */ 0xc0d08585
311}; 311};
312 312
313#if 0
314/* These are the timing tables from the HighPoint open source drivers... */
313static u32 thirty_three_base_hpt37x[] = { 315static u32 thirty_three_base_hpt37x[] = {
314 /* XFER_UDMA_6 */ 0x12446231, /* 0x12646231 ?? */ 316 /* XFER_UDMA_6 */ 0x12446231, /* 0x12646231 ?? */
315 /* XFER_UDMA_5 */ 0x12446231, 317 /* XFER_UDMA_5 */ 0x12446231,
@@ -369,6 +371,73 @@ static u32 sixty_six_base_hpt37x[] = {
369 /* XFER_PIO_1 */ 0x0d029d26, 371 /* XFER_PIO_1 */ 0x0d029d26,
370 /* XFER_PIO_0 */ 0x0d029d5e 372 /* XFER_PIO_0 */ 0x0d029d5e
371}; 373};
374#else
375/*
376 * The following are the new timing tables with PIO mode data/taskfile transfer
377 * overclocking fixed...
378 */
379
380/* This table is taken from the HPT370 data manual rev. 1.02 */
381static u32 thirty_three_base_hpt37x[] = {
382 /* XFER_UDMA_6 */ 0x16455031, /* 0x16655031 ?? */
383 /* XFER_UDMA_5 */ 0x16455031,
384 /* XFER_UDMA_4 */ 0x16455031,
385 /* XFER_UDMA_3 */ 0x166d5031,
386 /* XFER_UDMA_2 */ 0x16495031,
387 /* XFER_UDMA_1 */ 0x164d5033,
388 /* XFER_UDMA_0 */ 0x16515097,
389
390 /* XFER_MW_DMA_2 */ 0x26515031,
391 /* XFER_MW_DMA_1 */ 0x26515033,
392 /* XFER_MW_DMA_0 */ 0x26515097,
393
394 /* XFER_PIO_4 */ 0x06515021,
395 /* XFER_PIO_3 */ 0x06515022,
396 /* XFER_PIO_2 */ 0x06515033,
397 /* XFER_PIO_1 */ 0x06915065,
398 /* XFER_PIO_0 */ 0x06d1508a
399};
400
401static u32 fifty_base_hpt37x[] = {
402 /* XFER_UDMA_6 */ 0x1a861842,
403 /* XFER_UDMA_5 */ 0x1a861842,
404 /* XFER_UDMA_4 */ 0x1aae1842,
405 /* XFER_UDMA_3 */ 0x1a8e1842,
406 /* XFER_UDMA_2 */ 0x1a0e1842,
407 /* XFER_UDMA_1 */ 0x1a161854,
408 /* XFER_UDMA_0 */ 0x1a1a18ea,
409
410 /* XFER_MW_DMA_2 */ 0x2a821842,
411 /* XFER_MW_DMA_1 */ 0x2a821854,
412 /* XFER_MW_DMA_0 */ 0x2a8218ea,
413
414 /* XFER_PIO_4 */ 0x0a821842,
415 /* XFER_PIO_3 */ 0x0a821843,
416 /* XFER_PIO_2 */ 0x0a821855,
417 /* XFER_PIO_1 */ 0x0ac218a8,
418 /* XFER_PIO_0 */ 0x0b02190c
419};
420
421static u32 sixty_six_base_hpt37x[] = {
422 /* XFER_UDMA_6 */ 0x1c86fe62,
423 /* XFER_UDMA_5 */ 0x1caefe62, /* 0x1c8afe62 */
424 /* XFER_UDMA_4 */ 0x1c8afe62,
425 /* XFER_UDMA_3 */ 0x1c8efe62,
426 /* XFER_UDMA_2 */ 0x1c92fe62,
427 /* XFER_UDMA_1 */ 0x1c9afe62,
428 /* XFER_UDMA_0 */ 0x1c82fe62,
429
430 /* XFER_MW_DMA_2 */ 0x2c82fe62,
431 /* XFER_MW_DMA_1 */ 0x2c82fe66,
432 /* XFER_MW_DMA_0 */ 0x2c82ff2e,
433
434 /* XFER_PIO_4 */ 0x0c82fe62,
435 /* XFER_PIO_3 */ 0x0c82fe84,
436 /* XFER_PIO_2 */ 0x0c82fea6,
437 /* XFER_PIO_1 */ 0x0d02ff26,
438 /* XFER_PIO_0 */ 0x0d42ff7f
439};
440#endif
372 441
373#define HPT366_DEBUG_DRIVE_INFO 0 442#define HPT366_DEBUG_DRIVE_INFO 0
374#define HPT371_ALLOW_ATA133_6 1 443#define HPT371_ALLOW_ATA133_6 1
diff --git a/drivers/ide/pci/pdc202xx_new.c b/drivers/ide/pci/pdc202xx_new.c
index 4234efeba606..2b4f44e45a1a 100644
--- a/drivers/ide/pci/pdc202xx_new.c
+++ b/drivers/ide/pci/pdc202xx_new.c
@@ -482,8 +482,9 @@ static struct pci_dev * __devinit pdc20270_get_dev2(struct pci_dev *dev)
482{ 482{
483 struct pci_dev *dev2; 483 struct pci_dev *dev2;
484 484
485 dev2 = pci_get_slot(dev->bus, PCI_DEVFN(PCI_SLOT(dev->devfn) + 2, 485 dev2 = pci_get_slot(dev->bus, PCI_DEVFN(PCI_SLOT(dev->devfn) + 1,
486 PCI_FUNC(dev->devfn))); 486 PCI_FUNC(dev->devfn)));
487
487 if (dev2 && 488 if (dev2 &&
488 dev2->vendor == dev->vendor && 489 dev2->vendor == dev->vendor &&
489 dev2->device == dev->device) { 490 dev2->device == dev->device) {
diff --git a/drivers/ide/setup-pci.c b/drivers/ide/setup-pci.c
index 25fd09053220..d2cd5a3d38f8 100644
--- a/drivers/ide/setup-pci.c
+++ b/drivers/ide/setup-pci.c
@@ -704,7 +704,7 @@ EXPORT_SYMBOL_GPL(ide_setup_pci_devices);
704/* 704/*
705 * Module interfaces 705 * Module interfaces
706 */ 706 */
707 707
708static int pre_init = 1; /* Before first ordered IDE scan */ 708static int pre_init = 1; /* Before first ordered IDE scan */
709static LIST_HEAD(ide_pci_drivers); 709static LIST_HEAD(ide_pci_drivers);
710 710
@@ -714,7 +714,7 @@ static LIST_HEAD(ide_pci_drivers);
714 * @module: owner module of the driver 714 * @module: owner module of the driver
715 * 715 *
716 * Registers a driver with the IDE layer. The IDE layer arranges that 716 * Registers a driver with the IDE layer. The IDE layer arranges that
717 * boot time setup is done in the expected device order and then 717 * boot time setup is done in the expected device order and then
718 * hands the controllers off to the core PCI code to do the rest of 718 * hands the controllers off to the core PCI code to do the rest of
719 * the work. 719 * the work.
720 * 720 *
@@ -724,13 +724,12 @@ static LIST_HEAD(ide_pci_drivers);
724int __ide_pci_register_driver(struct pci_driver *driver, struct module *module, 724int __ide_pci_register_driver(struct pci_driver *driver, struct module *module,
725 const char *mod_name) 725 const char *mod_name)
726{ 726{
727 if(!pre_init) 727 if (!pre_init)
728 return __pci_register_driver(driver, module, mod_name); 728 return __pci_register_driver(driver, module, mod_name);
729 driver->driver.owner = module; 729 driver->driver.owner = module;
730 list_add_tail(&driver->node, &ide_pci_drivers); 730 list_add_tail(&driver->node, &ide_pci_drivers);
731 return 0; 731 return 0;
732} 732}
733
734EXPORT_SYMBOL_GPL(__ide_pci_register_driver); 733EXPORT_SYMBOL_GPL(__ide_pci_register_driver);
735 734
736/** 735/**
@@ -741,17 +740,18 @@ EXPORT_SYMBOL_GPL(__ide_pci_register_driver);
741 * This is only used during boot up to get the ordering correct. After 740 * This is only used during boot up to get the ordering correct. After
742 * boot up the pci layer takes over the job. 741 * boot up the pci layer takes over the job.
743 */ 742 */
744 743
745static int __init ide_scan_pcidev(struct pci_dev *dev) 744static int __init ide_scan_pcidev(struct pci_dev *dev)
746{ 745{
747 struct list_head *l; 746 struct list_head *l;
748 struct pci_driver *d; 747 struct pci_driver *d;
749 748
750 list_for_each(l, &ide_pci_drivers) { 749 list_for_each(l, &ide_pci_drivers) {
751 d = list_entry(l, struct pci_driver, node); 750 d = list_entry(l, struct pci_driver, node);
752 if (d->id_table) { 751 if (d->id_table) {
753 const struct pci_device_id *id = pci_match_id(d->id_table, 752 const struct pci_device_id *id =
754 dev); 753 pci_match_id(d->id_table, dev);
754
755 if (id != NULL && d->probe(dev, id) >= 0) { 755 if (id != NULL && d->probe(dev, id) >= 0) {
756 dev->driver = d; 756 dev->driver = d;
757 pci_dev_get(dev); 757 pci_dev_get(dev);
@@ -779,13 +779,13 @@ void __init ide_scan_pcibus (int scan_direction)
779 779
780 pre_init = 0; 780 pre_init = 0;
781 if (!scan_direction) 781 if (!scan_direction)
782 while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) 782 while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)))
783 ide_scan_pcidev(dev); 783 ide_scan_pcidev(dev);
784 else 784 else
785 while ((dev = pci_get_device_reverse(PCI_ANY_ID, PCI_ANY_ID, dev)) 785 while ((dev = pci_get_device_reverse(PCI_ANY_ID, PCI_ANY_ID,
786 != NULL) 786 dev)))
787 ide_scan_pcidev(dev); 787 ide_scan_pcidev(dev);
788 788
789 /* 789 /*
790 * Hand the drivers over to the PCI layer now we 790 * Hand the drivers over to the PCI layer now we
791 * are post init. 791 * are post init.
@@ -794,9 +794,10 @@ void __init ide_scan_pcibus (int scan_direction)
794 list_for_each_safe(l, n, &ide_pci_drivers) { 794 list_for_each_safe(l, n, &ide_pci_drivers) {
795 list_del(l); 795 list_del(l);
796 d = list_entry(l, struct pci_driver, node); 796 d = list_entry(l, struct pci_driver, node);
797 if (__pci_register_driver(d, d->driver.owner, d->driver.mod_name)) 797 if (__pci_register_driver(d, d->driver.owner,
798 printk(KERN_ERR "%s: failed to register driver for %s\n", 798 d->driver.mod_name))
799 __FUNCTION__, d->driver.mod_name); 799 printk(KERN_ERR "%s: failed to register %s driver\n",
800 __FUNCTION__, d->driver.mod_name);
800 } 801 }
801} 802}
802#endif 803#endif
diff --git a/drivers/scsi/ide-scsi.c b/drivers/scsi/ide-scsi.c
index 7a835a35f21d..9706de9d98d5 100644
--- a/drivers/scsi/ide-scsi.c
+++ b/drivers/scsi/ide-scsi.c
@@ -242,6 +242,11 @@ static void idescsi_output_buffers (ide_drive_t *drive, idescsi_pc_t *pc, unsign
242 } 242 }
243} 243}
244 244
245static void ide_scsi_hex_dump(u8 *data, int len)
246{
247 print_hex_dump(KERN_CONT, "", DUMP_PREFIX_NONE, 16, 1, data, len, 0);
248}
249
245static int idescsi_check_condition(ide_drive_t *drive, struct request *failed_command) 250static int idescsi_check_condition(ide_drive_t *drive, struct request *failed_command)
246{ 251{
247 idescsi_scsi_t *scsi = drive_to_idescsi(drive); 252 idescsi_scsi_t *scsi = drive_to_idescsi(drive);
@@ -272,8 +277,7 @@ static int idescsi_check_condition(ide_drive_t *drive, struct request *failed_co
272 pc->scsi_cmd = ((idescsi_pc_t *) failed_command->special)->scsi_cmd; 277 pc->scsi_cmd = ((idescsi_pc_t *) failed_command->special)->scsi_cmd;
273 if (test_bit(IDESCSI_LOG_CMD, &scsi->log)) { 278 if (test_bit(IDESCSI_LOG_CMD, &scsi->log)) {
274 printk ("ide-scsi: %s: queue cmd = ", drive->name); 279 printk ("ide-scsi: %s: queue cmd = ", drive->name);
275 print_hex_dump(KERN_CONT, "", DUMP_PREFIX_NONE, 16, 1, pc->c, 280 ide_scsi_hex_dump(pc->c, 6);
276 6, 0);
277 } 281 }
278 rq->rq_disk = scsi->disk; 282 rq->rq_disk = scsi->disk;
279 return ide_do_drive_cmd(drive, rq, ide_preempt); 283 return ide_do_drive_cmd(drive, rq, ide_preempt);
@@ -328,8 +332,7 @@ static int idescsi_end_request (ide_drive_t *drive, int uptodate, int nrsecs)
328 idescsi_pc_t *opc = (idescsi_pc_t *) rq->buffer; 332 idescsi_pc_t *opc = (idescsi_pc_t *) rq->buffer;
329 if (log) { 333 if (log) {
330 printk ("ide-scsi: %s: wrap up check %lu, rst = ", drive->name, opc->scsi_cmd->serial_number); 334 printk ("ide-scsi: %s: wrap up check %lu, rst = ", drive->name, opc->scsi_cmd->serial_number);
331 print_hex_dump(KERN_CONT, "", DUMP_PREFIX_NONE, 16, 1, 335 ide_scsi_hex_dump(pc->buffer, 16);
332 pc->buffer, 16, 0);
333 } 336 }
334 memcpy((void *) opc->scsi_cmd->sense_buffer, pc->buffer, SCSI_SENSE_BUFFERSIZE); 337 memcpy((void *) opc->scsi_cmd->sense_buffer, pc->buffer, SCSI_SENSE_BUFFERSIZE);
335 kfree(pc->buffer); 338 kfree(pc->buffer);
@@ -808,12 +811,10 @@ static int idescsi_queue (struct scsi_cmnd *cmd,
808 811
809 if (test_bit(IDESCSI_LOG_CMD, &scsi->log)) { 812 if (test_bit(IDESCSI_LOG_CMD, &scsi->log)) {
810 printk ("ide-scsi: %s: que %lu, cmd = ", drive->name, cmd->serial_number); 813 printk ("ide-scsi: %s: que %lu, cmd = ", drive->name, cmd->serial_number);
811 print_hex_dump(KERN_CONT, "", DUMP_PREFIX_NONE, 16, 1, 814 ide_scsi_hex_dump(cmd->cmnd, cmd->cmd_len);
812 cmd->cmnd, cmd->cmd_len, 0);
813 if (memcmp(pc->c, cmd->cmnd, cmd->cmd_len)) { 815 if (memcmp(pc->c, cmd->cmnd, cmd->cmd_len)) {
814 printk ("ide-scsi: %s: que %lu, tsl = ", drive->name, cmd->serial_number); 816 printk ("ide-scsi: %s: que %lu, tsl = ", drive->name, cmd->serial_number);
815 print_hex_dump(KERN_CONT, "", DUMP_PREFIX_NONE, 16, 1, 817 ide_scsi_hex_dump(pc->c, 12);
816 pc->c, 12, 0);
817 } 818 }
818 } 819 }
819 820