[PATCH 2/3] Unify dma blacklist in ide-dma.c and libata-core.c

Junio C Hamano
2007-05-22T05:06:50Z

This introduces a shared header file that defines the entries
for two dma blacklists in ide-dma.c and libata-core.c to make it
easier to keep them in sync.

Signed-off-by: Junio C Hamano <junkio@cox.net>
---

* Removes more lines than it adds. I am not proud of the
DMA_BLACK_LIST macro in ide-dma.c which relies on the
compiler doing a sane thing for compile time constant
expression to initialize the list, but that hopefully can be
fixed in the next patch.

drivers/ata/libata-core.c | 34 ++++------------------------------
drivers/ide/dma-blacklist.h | 39 +++++++++++++++++++++++++++++++++++++++
drivers/ide/ide-dma.c | 33 +++------------------------------
3 files changed, 46 insertions(+), 60 deletions(-)
create mode 100644 drivers/ide/dma-blacklist.h

diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index a6de57e..93b7fa7 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -3739,36 +3739,10 @@ struct ata_blacklist_entry {

static const struct ata_blacklist_entry ata_device_blacklist [] = {
/* Devices with DMA related problems under Linux */
- { "WDC AC11000H", NULL, ATA_HORKAGE_NODMA },
- { "WDC AC22100H", NULL, ATA_HORKAGE_NODMA },
- { "WDC AC32500H", NULL, ATA_HORKAGE_NODMA },
- { "WDC AC33100H", NULL, ATA_HORKAGE_NODMA },
- { "WDC AC31600H", NULL, ATA_HORKAGE_NODMA },
- { "WDC AC32100H", "24.09P07", ATA_HORKAGE_NODMA },
- { "WDC AC23200L", "21.10N21", ATA_HORKAGE_NODMA },
- { "Compaq CRD-8241B", NULL, ATA_HORKAGE_NODMA },
- { "CRD-8400B", NULL, ATA_HORKAGE_NODMA },
- { "CRD-8480B", NULL, ATA_HORKAGE_NODMA },
- { "CRD-8482B", NULL, ATA_HORKAGE_NODMA },
- { "CRD-84", NULL, ATA_HORKAGE_NODMA },
- { "SanDisk SDP3B", NULL, ATA_HORKAGE_NODMA },
- { "SanDisk SDP3B-64", NULL, ATA_HORKAGE_NODMA },
- { "SANYO CD-ROM CRD", NULL, ATA_HORKAGE_NODMA },
- { "HITACHI CDR-8", NULL, ATA_HORKAGE_NODMA },
- { "HITACHI CDR-8335", NULL, ATA_HORKAGE_NODMA },
- { "HITACHI CDR-8435", NULL, ATA_HORKAGE_NODMA },
- { "Toshiba CD-ROM XM-6202B", NULL, ATA_HORKAGE_NODMA },
- { "TOSHIBA CD-ROM XM-1702BC", NULL, ATA_HORKAGE_NODMA },
- { "CD-532E-A", NULL, ATA_HORKAGE_NODMA },
- { "E-IDE CD-ROM CR-840",NULL, ATA_HORKAGE_NODMA },
- { "CD-ROM Drive/F5A", NULL, ATA_HORKAGE_NODMA },
- { "WPI CDD-820", NULL, ATA_HORKAGE_NODMA },
- { "SAMSUNG CD-ROM SC-148C", NULL, ATA_HORKAGE_NODMA },
- { "SAMSUNG CD-ROM SC", NULL, ATA_HORKAGE_NODMA },
- { "ATAPI CD-ROM DRIVE 40X MAXIMUM",NULL,ATA_HORKAGE_NODMA },
- { "_NEC DV5800A", NULL, ATA_HORKAGE_NODMA },
- { "SAMSUNG CD-ROM SN-124","N001", ATA_HORKAGE_NODMA },
- { "Seagate STT20000A", NULL, ATA_HORKAGE_NODMA },
+
+#define DMA_BLACK_LIST(model,rev) { (model), (rev), ATA_HORKAGE_NODMA }
+#include "../ide/dma-blacklist.h"
+#undef DMA_BLACK_LIST

/* Weird ATAPI devices */
{ "TORiSAN DVD-ROM DRD-N216", NULL, ATA_HORKAGE_MAX_SEC_128 |
diff --git a/drivers/ide/dma-blacklist.h b/drivers/ide/dma-blacklist.h
new file mode 100644
index 0000000..19b4e0c
--- /dev/null
+++ b/drivers/ide/dma-blacklist.h
@@ -0,0 +1,39 @@
+/*
+ * Shared between ide-dma.c::drive_blacklist[] and
+ * ../ata/libata-core.c::ata_device_blacklist[].
+ *
+ * Each of the above users define DMA_BLACK_LIST() macro
+ * which expands these to structure of their liking.
+ */
+
+ DMA_BLACK_LIST("WDC AC11000H", NULL),
+ DMA_BLACK_LIST("WDC AC22100H", NULL),
+ DMA_BLACK_LIST("WDC AC32500H", NULL),
+ DMA_BLACK_LIST("WDC AC33100H", NULL),
+ DMA_BLACK_LIST("WDC AC31600H", NULL),
+ DMA_BLACK_LIST("WDC AC32100H", "24.09P07"),
+ DMA_BLACK_LIST("WDC AC23200L", "21.10N21"),
+ DMA_BLACK_LIST("Compaq CRD-8241B", NULL),
+ DMA_BLACK_LIST("CRD-8400B", NULL),
+ DMA_BLACK_LIST("CRD-8480B", NULL),
+ DMA_BLACK_LIST("CRD-8482B", NULL),
+ DMA_BLACK_LIST("CRD-84", NULL),
+ DMA_BLACK_LIST("SanDisk SDP3B", NULL),
+ DMA_BLACK_LIST("SanDisk SDP3B-64", NULL),
+ DMA_BLACK_LIST("SANYO CD-ROM CRD", NULL),
+ DMA_BLACK_LIST("HITACHI CDR-8", NULL),
+ DMA_BLACK_LIST("HITACHI CDR-8335", NULL),
+ DMA_BLACK_LIST("HITACHI CDR-8435", NULL),
+ DMA_BLACK_LIST("Toshiba CD-ROM XM-6202B", NULL),
+ DMA_BLACK_LIST("TOSHIBA CD-ROM XM-1702BC", NULL),
+ DMA_BLACK_LIST("CD-532E-A", NULL),
+ DMA_BLACK_LIST("E-IDE CD-ROM CR-840", NULL),
+ DMA_BLACK_LIST("CD-ROM Drive/F5A", NULL),
+ DMA_BLACK_LIST("WPI CDD-820", NULL),
+ DMA_BLACK_LIST("SAMSUNG CD-ROM SC-148C", NULL),
+ DMA_BLACK_LIST("SAMSUNG CD-ROM SC", NULL),
+ DMA_BLACK_LIST("ATAPI CD-ROM DRIVE 40X MAXIMUM", NULL),
+ DMA_BLACK_LIST("_NEC DV5800A", NULL),
+ DMA_BLACK_LIST("SAMSUNG CD-ROM SN-124", "N001"),
+ DMA_BLACK_LIST("Seagate STT20000A", NULL),
+
diff --git a/drivers/ide/ide-dma.c b/drivers/ide/ide-dma.c
index ead141e..a6a2074 100644
--- a/drivers/ide/ide-dma.c
+++ b/drivers/ide/ide-dma.c
@@ -100,36 +100,9 @@ static const struct drive_list_entry drive_whitelist [] = {

static const struct drive_list_entry drive_blacklist [] = {

- { "WDC AC11000H" , "ALL" },
- { "WDC AC22100H" , "ALL" },
- { "WDC AC32500H" , "ALL" },
- { "WDC AC33100H" , "ALL" },
- { "WDC AC31600H" , "ALL" },
- { "WDC AC32100H" , "24.09P07" },
- { "WDC AC23200L" , "21.10N21" },
- { "Compaq CRD-8241B" , "ALL" },
- { "CRD-8400B" , "ALL" },
- { "CRD-8480B", "ALL" },
- { "CRD-8482B", "ALL" },
- { "CRD-84" , "ALL" },
- { "SanDisk SDP3B" , "ALL" },
- { "SanDisk SDP3B-64" , "ALL" },
- { "SANYO CD-ROM CRD" , "ALL" },
- { "HITACHI CDR-8" , "ALL" },
- { "HITACHI CDR-8335" , "ALL" },
- { "HITACHI CDR-8435" , "ALL" },
- { "Toshiba CD-ROM XM-6202B" , "ALL" },
- { "TOSHIBA CD-ROM XM-1702BC", "ALL" },
- { "CD-532E-A" , "ALL" },
- { "E-IDE CD-ROM CR-840", "ALL" },
- { "CD-ROM Drive/F5A", "ALL" },
- { "WPI CDD-820", "ALL" },
- { "SAMSUNG CD-ROM SC-148C", "ALL" },
- { "SAMSUNG CD-ROM SC", "ALL" },
- { "ATAPI CD-ROM DRIVE 40X MAXIMUM", "ALL" },
- { "_NEC DV5800A", "ALL" },
- { "SAMSUNG CD-ROM SN-124", "N001" },
- { "Seagate STT20000A", "ALL" },
+#define DMA_BLACK_LIST(model,rev) { (model), (rev==NULL ? "ALL" : (rev)) }
+#include "dma-blacklist.h"
+#undef DMA_BLACK_LIST
{ NULL , NULL }

};
--
1.5.2.24.g93d4