diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-08 11:18:01 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-08 11:18:01 -0500 |
commit | 23eb3b64b5e44680c867e165fe1cd18e57fba255 (patch) | |
tree | d6aed2971ef647f7be2986353f830577abd1fab9 /include | |
parent | 1c496784a0d317535f846ddb2c93a08ba936266b (diff) | |
parent | 1b52f2a41c41052d2a7c78af0bd9b8b11d70f49a (diff) |
Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev
* 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev: (54 commits)
Revert "pata_sis: Implement MWDMA for the UDMA 133 capable chips"
libata: Clarify ata_set_lba_range_entries function
libata: Report zeroed read after TRIM and max discard size
pata_hpt3x2n: fix overclocked MWDMA0 timing
pata_it8213: MWDMA0 is unsupported
[libata] MWDMA0 is unsupported on PIIX-like PATA controllers
pata_via: clear UDMA transfer mode bit for PIO and MWDMA
pata_sis: Power Management fix
pata_rz1000: Power Management fix
pata_radisys: fix UDMA handling
pata_ns87415: Power Management fix
pata_marvell: fix marvell_pre_reset() documentation
pata_legacy: add pointers to QDI65x0 documentation
pata_legacy: fix access to control register for QDI6580
pata_legacy: fix QDI6580DP support
pata_it8213: fix it8213_pre_reset() documentation
pata_it8213: fix wrong MWDMA timings being programmed
pata_it8213: fix PIO2 underclocking
pata_it8213: fix wrong PIO timings being programmed
pata_it8213: fix UDMA handling
...
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/ata.h | 44 | ||||
-rw-r--r-- | include/linux/libata.h | 3 | ||||
-rw-r--r-- | include/linux/pci_ids.h | 7 |
3 files changed, 40 insertions, 14 deletions
diff --git a/include/linux/ata.h b/include/linux/ata.h index 4fb357312b3b..38a6948ce0c2 100644 --- a/include/linux/ata.h +++ b/include/linux/ata.h | |||
@@ -75,6 +75,7 @@ enum { | |||
75 | ATA_ID_EIDE_DMA_TIME = 66, | 75 | ATA_ID_EIDE_DMA_TIME = 66, |
76 | ATA_ID_EIDE_PIO = 67, | 76 | ATA_ID_EIDE_PIO = 67, |
77 | ATA_ID_EIDE_PIO_IORDY = 68, | 77 | ATA_ID_EIDE_PIO_IORDY = 68, |
78 | ATA_ID_ADDITIONAL_SUPP = 69, | ||
78 | ATA_ID_QUEUE_DEPTH = 75, | 79 | ATA_ID_QUEUE_DEPTH = 75, |
79 | ATA_ID_MAJOR_VER = 80, | 80 | ATA_ID_MAJOR_VER = 80, |
80 | ATA_ID_COMMAND_SET_1 = 82, | 81 | ATA_ID_COMMAND_SET_1 = 82, |
@@ -87,6 +88,7 @@ enum { | |||
87 | ATA_ID_HW_CONFIG = 93, | 88 | ATA_ID_HW_CONFIG = 93, |
88 | ATA_ID_SPG = 98, | 89 | ATA_ID_SPG = 98, |
89 | ATA_ID_LBA_CAPACITY_2 = 100, | 90 | ATA_ID_LBA_CAPACITY_2 = 100, |
91 | ATA_ID_SECTOR_SIZE = 106, | ||
90 | ATA_ID_LAST_LUN = 126, | 92 | ATA_ID_LAST_LUN = 126, |
91 | ATA_ID_DLF = 128, | 93 | ATA_ID_DLF = 128, |
92 | ATA_ID_CSFO = 129, | 94 | ATA_ID_CSFO = 129, |
@@ -638,6 +640,18 @@ static inline int ata_id_flush_ext_enabled(const u16 *id) | |||
638 | return (id[ATA_ID_CFS_ENABLE_2] & 0x2400) == 0x2400; | 640 | return (id[ATA_ID_CFS_ENABLE_2] & 0x2400) == 0x2400; |
639 | } | 641 | } |
640 | 642 | ||
643 | static inline int ata_id_has_large_logical_sectors(const u16 *id) | ||
644 | { | ||
645 | if ((id[ATA_ID_SECTOR_SIZE] & 0xc000) != 0x4000) | ||
646 | return 0; | ||
647 | return id[ATA_ID_SECTOR_SIZE] & (1 << 13); | ||
648 | } | ||
649 | |||
650 | static inline u8 ata_id_logical_per_physical_sectors(const u16 *id) | ||
651 | { | ||
652 | return id[ATA_ID_SECTOR_SIZE] & 0xf; | ||
653 | } | ||
654 | |||
641 | static inline int ata_id_has_lba48(const u16 *id) | 655 | static inline int ata_id_has_lba48(const u16 *id) |
642 | { | 656 | { |
643 | if ((id[ATA_ID_COMMAND_SET_2] & 0xC000) != 0x4000) | 657 | if ((id[ATA_ID_COMMAND_SET_2] & 0xC000) != 0x4000) |
@@ -803,6 +817,16 @@ static inline int ata_id_has_trim(const u16 *id) | |||
803 | return 0; | 817 | return 0; |
804 | } | 818 | } |
805 | 819 | ||
820 | static inline int ata_id_has_zero_after_trim(const u16 *id) | ||
821 | { | ||
822 | /* DSM supported, deterministic read, and read zero after trim set */ | ||
823 | if (ata_id_has_trim(id) && | ||
824 | (id[ATA_ID_ADDITIONAL_SUPP] & 0x4020) == 0x4020) | ||
825 | return 1; | ||
826 | |||
827 | return 0; | ||
828 | } | ||
829 | |||
806 | static inline int ata_id_current_chs_valid(const u16 *id) | 830 | static inline int ata_id_current_chs_valid(const u16 *id) |
807 | { | 831 | { |
808 | /* For ATA-1 devices, if the INITIALIZE DEVICE PARAMETERS command | 832 | /* For ATA-1 devices, if the INITIALIZE DEVICE PARAMETERS command |
@@ -958,17 +982,17 @@ static inline void ata_id_to_hd_driveid(u16 *id) | |||
958 | } | 982 | } |
959 | 983 | ||
960 | /* | 984 | /* |
961 | * Write up to 'max' LBA Range Entries to the buffer that will cover the | 985 | * Write LBA Range Entries to the buffer that will cover the extent from |
962 | * extent from sector to sector + count. This is used for TRIM and for | 986 | * sector to sector + count. This is used for TRIM and for ADD LBA(S) |
963 | * ADD LBA(S) TO NV CACHE PINNED SET. | 987 | * TO NV CACHE PINNED SET. |
964 | */ | 988 | */ |
965 | static inline unsigned ata_set_lba_range_entries(void *_buffer, unsigned max, | 989 | static inline unsigned ata_set_lba_range_entries(void *_buffer, |
966 | u64 sector, unsigned long count) | 990 | unsigned buf_size, u64 sector, unsigned long count) |
967 | { | 991 | { |
968 | __le64 *buffer = _buffer; | 992 | __le64 *buffer = _buffer; |
969 | unsigned i = 0; | 993 | unsigned i = 0, used_bytes; |
970 | 994 | ||
971 | while (i < max) { | 995 | while (i < buf_size / 8 ) { /* 6-byte LBA + 2-byte range per entry */ |
972 | u64 entry = sector | | 996 | u64 entry = sector | |
973 | ((u64)(count > 0xffff ? 0xffff : count) << 48); | 997 | ((u64)(count > 0xffff ? 0xffff : count) << 48); |
974 | buffer[i++] = __cpu_to_le64(entry); | 998 | buffer[i++] = __cpu_to_le64(entry); |
@@ -978,9 +1002,9 @@ static inline unsigned ata_set_lba_range_entries(void *_buffer, unsigned max, | |||
978 | sector += 0xffff; | 1002 | sector += 0xffff; |
979 | } | 1003 | } |
980 | 1004 | ||
981 | max = ALIGN(i * 8, 512); | 1005 | used_bytes = ALIGN(i * 8, 512); |
982 | memset(buffer + i, 0, max - i * 8); | 1006 | memset(buffer + i, 0, used_bytes - i * 8); |
983 | return max; | 1007 | return used_bytes; |
984 | } | 1008 | } |
985 | 1009 | ||
986 | static inline int is_multi_taskfile(struct ata_taskfile *tf) | 1010 | static inline int is_multi_taskfile(struct ata_taskfile *tf) |
diff --git a/include/linux/libata.h b/include/linux/libata.h index 87698640c091..a5b3dc71e819 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
@@ -365,7 +365,7 @@ enum { | |||
365 | /* This should match the actual table size of | 365 | /* This should match the actual table size of |
366 | * ata_eh_cmd_timeout_table in libata-eh.c. | 366 | * ata_eh_cmd_timeout_table in libata-eh.c. |
367 | */ | 367 | */ |
368 | ATA_EH_CMD_TIMEOUT_TABLE_SIZE = 5, | 368 | ATA_EH_CMD_TIMEOUT_TABLE_SIZE = 6, |
369 | 369 | ||
370 | /* Horkage types. May be set by libata or controller on drives | 370 | /* Horkage types. May be set by libata or controller on drives |
371 | (some horkage may be drive/controller pair dependant */ | 371 | (some horkage may be drive/controller pair dependant */ |
@@ -595,6 +595,7 @@ struct ata_device { | |||
595 | unsigned int horkage; /* List of broken features */ | 595 | unsigned int horkage; /* List of broken features */ |
596 | unsigned long flags; /* ATA_DFLAG_xxx */ | 596 | unsigned long flags; /* ATA_DFLAG_xxx */ |
597 | struct scsi_device *sdev; /* attached SCSI device */ | 597 | struct scsi_device *sdev; /* attached SCSI device */ |
598 | void *private_data; | ||
598 | #ifdef CONFIG_ATA_ACPI | 599 | #ifdef CONFIG_ATA_ACPI |
599 | acpi_handle acpi_handle; | 600 | acpi_handle acpi_handle; |
600 | union acpi_object *gtf_cache; | 601 | union acpi_object *gtf_cache; |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index daecca3c8300..cabf074b4324 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
@@ -1496,9 +1496,10 @@ | |||
1496 | #define PCI_DEVICE_ID_SBE_WANXL400 0x0104 | 1496 | #define PCI_DEVICE_ID_SBE_WANXL400 0x0104 |
1497 | 1497 | ||
1498 | #define PCI_VENDOR_ID_TOSHIBA 0x1179 | 1498 | #define PCI_VENDOR_ID_TOSHIBA 0x1179 |
1499 | #define PCI_DEVICE_ID_TOSHIBA_PICCOLO 0x0102 | 1499 | #define PCI_DEVICE_ID_TOSHIBA_PICCOLO_1 0x0101 |
1500 | #define PCI_DEVICE_ID_TOSHIBA_PICCOLO_1 0x0103 | 1500 | #define PCI_DEVICE_ID_TOSHIBA_PICCOLO_2 0x0102 |
1501 | #define PCI_DEVICE_ID_TOSHIBA_PICCOLO_2 0x0105 | 1501 | #define PCI_DEVICE_ID_TOSHIBA_PICCOLO_3 0x0103 |
1502 | #define PCI_DEVICE_ID_TOSHIBA_PICCOLO_5 0x0105 | ||
1502 | #define PCI_DEVICE_ID_TOSHIBA_TOPIC95 0x060a | 1503 | #define PCI_DEVICE_ID_TOSHIBA_TOPIC95 0x060a |
1503 | #define PCI_DEVICE_ID_TOSHIBA_TOPIC97 0x060f | 1504 | #define PCI_DEVICE_ID_TOSHIBA_TOPIC97 0x060f |
1504 | #define PCI_DEVICE_ID_TOSHIBA_TOPIC100 0x0617 | 1505 | #define PCI_DEVICE_ID_TOSHIBA_TOPIC100 0x0617 |