All of lore.kernel.org
 help / color / mirror / Atom feed
From: Prarit Bhargava <prarit@redhat.com>
To: linux-kernel@vger.kernel.org
Cc: Prarit Bhargava <prarit@redhat.com>, linux-ide@vger.kernel.org
Subject: [PATCH 05/34] drivers/ata changes for SMBIOS and System Firmware
Date: Mon, 18 Jul 2011 09:08:19 -0400	[thread overview]
Message-ID: <1310994528-26276-6-git-send-email-prarit@redhat.com> (raw)
In-Reply-To: <1310994528-26276-1-git-send-email-prarit@redhat.com>

As part of the new SMBIOS and System Firmware code:

- Replace old dmi* structures and functions with new sysfw* and smbios*
structures and functions in individual drivers
- cleanup sysfw_id lookup tables
- cleanup of includes for dmi.h and mod_devicetable.h which were included in
some files that did not need them

[v2]: removed sysfw_match() from ata_piix.c code.  The matching code is limited
to four matches, and this manual comparison was required.  The sysfw_id struct
now has been modified to allow up to 8 matches instead so the need for
sysfw_match() has been eliminated.

Cc: linux-ide@vger.kernel.org
Acked-by: Jeff Garzik <jgarzik@redhat.com>
Signed-off-by: Prarit Bhargava <prarit@redhat.com>
---
 drivers/ata/acard-ahci.c  |    1 -
 drivers/ata/ahci.c        |  177 +++++++++++++++++++++++----------------------
 drivers/ata/ata_piix.c    |  154 +++++++++++++++++++++------------------
 drivers/ata/pata_ali.c    |   18 +++---
 drivers/ata/pata_cs5530.c |   12 ++--
 drivers/ata/pata_rdc.c    |    1 -
 drivers/ata/pata_sch.c    |    1 -
 drivers/ata/pata_via.c    |   14 ++--
 drivers/ata/sata_sil.c    |   19 +++---
 9 files changed, 203 insertions(+), 194 deletions(-)

diff --git a/drivers/ata/acard-ahci.c b/drivers/ata/acard-ahci.c
index ae22be4..d16b700 100644
--- a/drivers/ata/acard-ahci.c
+++ b/drivers/ata/acard-ahci.c
@@ -42,7 +42,6 @@
 #include <linux/interrupt.h>
 #include <linux/dma-mapping.h>
 #include <linux/device.h>
-#include <linux/dmi.h>
 #include <linux/gfp.h>
 #include <scsi/scsi_host.h>
 #include <scsi/scsi_cmnd.h>
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index 71afe03..90100c4 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -41,7 +41,7 @@
 #include <linux/interrupt.h>
 #include <linux/dma-mapping.h>
 #include <linux/device.h>
-#include <linux/dmi.h>
+#include <linux/sysfw.h>
 #include <linux/gfp.h>
 #include <scsi/scsi_host.h>
 #include <scsi/scsi_cmnd.h>
@@ -742,21 +742,22 @@ static void ahci_pci_print_info(struct ata_host *host)
  */
 static void ahci_p5wdh_workaround(struct ata_host *host)
 {
-	static struct dmi_system_id sysids[] = {
+	static struct sysfw_id sysids[] = {
 		{
 			.ident = "P5W DH Deluxe",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR,
-					  "ASUSTEK COMPUTER INC"),
-				DMI_MATCH(DMI_PRODUCT_NAME, "P5W DH Deluxe"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR,
+					    "ASUSTEK COMPUTER INC"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME,
+					    "P5W DH Deluxe"),
 			},
 		},
-		{ }
+		{}
 	};
 	struct pci_dev *pdev = to_pci_dev(host->dev);
 
 	if (pdev->bus->number == 0 && pdev->devfn == PCI_DEVFN(0x1f, 2) &&
-	    dmi_check_system(sysids)) {
+	    sysfw_callback(sysids)) {
 		struct ata_port *ap = host->ports[1];
 
 		dev_printk(KERN_INFO, &pdev->dev, "enabling ASUS P5W DH "
@@ -770,7 +771,7 @@ static void ahci_p5wdh_workaround(struct ata_host *host)
 /* only some SB600 ahci controllers can do 64bit DMA */
 static bool ahci_sb600_enable_64bit(struct pci_dev *pdev)
 {
-	static const struct dmi_system_id sysids[] = {
+	static const struct sysfw_id sysids[] = {
 		/*
 		 * The oldest version known to be broken is 0901 and
 		 * working is 1501 which was released on 2007-10-26.
@@ -781,43 +782,41 @@ static bool ahci_sb600_enable_64bit(struct pci_dev *pdev)
 		{
 			.ident = "ASUS M2A-VM",
 			.matches = {
-				DMI_MATCH(DMI_BOARD_VENDOR,
-					  "ASUSTeK Computer INC."),
-				DMI_MATCH(DMI_BOARD_NAME, "M2A-VM"),
+				SYSFW_MATCH(SYSFW_BOARD_VENDOR,
+					    "ASUSTeK Computer INC."),
+				SYSFW_MATCH(SYSFW_BOARD_NAME, "M2A-VM"),
 			},
-			.driver_data = "20071026",	/* yyyymmdd */
+			.driver_data = (void *)20071026, /* yyyymmdd */
 		},
 		/*
 		 * All BIOS versions for the MSI K9A2 Platinum (MS-7376)
 		 * support 64bit DMA.
 		 *
-		 * BIOS versions earlier than 1.5 had the Manufacturer DMI
+		 * BIOS versions earlier than 1.5 had the Manufacturer SMBIOS
 		 * fields as "MICRO-STAR INTERANTIONAL CO.,LTD".
 		 * This spelling mistake was fixed in BIOS version 1.5, so
 		 * 1.5 and later have the Manufacturer as
 		 * "MICRO-STAR INTERNATIONAL CO.,LTD".
-		 * So try to match on DMI_BOARD_VENDOR of "MICRO-STAR INTER".
+		 * So try to match on SYSFW_BOARD_VENDOR of "MICRO-STAR INTER".
 		 *
 		 * BIOS versions earlier than 1.9 had a Board Product Name
-		 * DMI field of "MS-7376". This was changed to be
+		 * SMBIOS field of "MS-7376". This was changed to be
 		 * "K9A2 Platinum (MS-7376)" in version 1.9, but we can still
-		 * match on DMI_BOARD_NAME of "MS-7376".
+		 * match on SYSFW_BOARD_NAME of "MS-7376".
 		 */
 		{
 			.ident = "MSI K9A2 Platinum",
 			.matches = {
-				DMI_MATCH(DMI_BOARD_VENDOR,
-					  "MICRO-STAR INTER"),
-				DMI_MATCH(DMI_BOARD_NAME, "MS-7376"),
+				SYSFW_MATCH(SYSFW_BOARD_VENDOR,
+					    "MICRO-STAR INTER"),
+				SYSFW_MATCH(SYSFW_BOARD_NAME, "MS-7376"),
 			},
 		},
-		{ }
+		{}
 	};
-	const struct dmi_system_id *match;
-	int year, month, date;
-	char buf[9];
+	const struct sysfw_id *match;
 
-	match = dmi_first_match(sysids);
+	match = sysfw_callback(sysids);
 	if (pdev->bus->number != 0 || pdev->devfn != PCI_DEVFN(0x12, 0) ||
 	    !match)
 		return false;
@@ -825,14 +824,12 @@ static bool ahci_sb600_enable_64bit(struct pci_dev *pdev)
 	if (!match->driver_data)
 		goto enable_64bit;
 
-	dmi_get_date(DMI_BIOS_DATE, &year, &month, &date);
-	snprintf(buf, sizeof(buf), "%04d%02d%02d", year, month, date);
-
-	if (strcmp(buf, match->driver_data) >= 0)
+	if (sysfw_get_date() >= (unsigned long)match->driver_data)
 		goto enable_64bit;
 	else {
-		dev_printk(KERN_WARNING, &pdev->dev, "%s: BIOS too old, "
-			   "forcing 32bit DMA, update BIOS\n", match->ident);
+		dev_printk(KERN_WARNING, &pdev->dev, "%s: BIOS too old, %s "
+			   "forcing 32bit DMA, update BIOS\n", match->ident,
+			   sysfw_lookup(SYSFW_BIOS_DATE));
 		return false;
 	}
 
@@ -844,12 +841,14 @@ enable_64bit:
 
 static bool ahci_broken_system_poweroff(struct pci_dev *pdev)
 {
-	static const struct dmi_system_id broken_systems[] = {
+	static const struct sysfw_id broken_systems[] = {
 		{
 			.ident = "HP Compaq nx6310",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
-				DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6310"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR,
+					    "Hewlett-Packard"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME,
+					    "HP Compaq nx6310"),
 			},
 			/* PCI slot number of the controller */
 			.driver_data = (void *)0x1FUL,
@@ -857,19 +856,20 @@ static bool ahci_broken_system_poweroff(struct pci_dev *pdev)
 		{
 			.ident = "HP Compaq 6720s",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
-				DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq 6720s"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR,
+					    "Hewlett-Packard"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME,
+					    "HP Compaq 6720s"),
 			},
 			/* PCI slot number of the controller */
 			.driver_data = (void *)0x1FUL,
 		},
-
-		{ }	/* terminate list */
+		{}
 	};
-	const struct dmi_system_id *dmi = dmi_first_match(broken_systems);
+	const struct sysfw_id *id = sysfw_callback(broken_systems);
 
-	if (dmi) {
-		unsigned long slot = (unsigned long)dmi->driver_data;
+	if (id) {
+		unsigned long slot = (unsigned long)id->driver_data;
 		/* apply the quirk only to on-board controllers */
 		return slot == PCI_SLOT(pdev->devfn);
 	}
@@ -879,7 +879,7 @@ static bool ahci_broken_system_poweroff(struct pci_dev *pdev)
 
 static bool ahci_broken_suspend(struct pci_dev *pdev)
 {
-	static const struct dmi_system_id sysids[] = {
+	static const struct sysfw_id sysids[] = {
 		/*
 		 * On HP dv[4-6] and HDX18 with earlier BIOSen, link
 		 * to the harddisk doesn't become online after
@@ -896,38 +896,42 @@ static bool ahci_broken_suspend(struct pci_dev *pdev)
 		{
 			.ident = "dv4",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
-				DMI_MATCH(DMI_PRODUCT_NAME,
-					  "HP Pavilion dv4 Notebook PC"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR,
+					    "Hewlett-Packard"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME,
+					    "HP Pavilion dv4 Notebook PC"),
 			},
-			.driver_data = "20090105",	/* F.30 */
+			.driver_data = (void *)20090105, /* F.30 */
 		},
 		{
 			.ident = "dv5",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
-				DMI_MATCH(DMI_PRODUCT_NAME,
-					  "HP Pavilion dv5 Notebook PC"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR,
+					    "Hewlett-Packard"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME,
+					    "HP Pavilion dv5 Notebook PC"),
 			},
-			.driver_data = "20090506",	/* F.16 */
+			.driver_data = (void *)20090506, /* F.16 */
 		},
 		{
 			.ident = "dv6",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
-				DMI_MATCH(DMI_PRODUCT_NAME,
-					  "HP Pavilion dv6 Notebook PC"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR,
+					    "Hewlett-Packard"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME,
+					    "HP Pavilion dv6 Notebook PC"),
 			},
-			.driver_data = "20090423",	/* F.21 */
+			.driver_data = (void *)20090423, /* F.21 */
 		},
 		{
 			.ident = "HDX18",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
-				DMI_MATCH(DMI_PRODUCT_NAME,
-					  "HP HDX18 Notebook PC"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR,
+					    "Hewlett-Packard"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME,
+					    "HP HDX18 Notebook PC"),
 			},
-			.driver_data = "20090430",	/* F.23 */
+			.driver_data = (void *)20090430, /* F.23 */
 		},
 		/*
 		 * Acer eMachines G725 has the same problem.  BIOS
@@ -941,31 +945,27 @@ static bool ahci_broken_suspend(struct pci_dev *pdev)
 		{
 			.ident = "G725",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "eMachines"),
-				DMI_MATCH(DMI_PRODUCT_NAME, "eMachines G725"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR, "eMachines"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME,
+					    "eMachines G725"),
 			},
-			.driver_data = "20091216",	/* V3.04 */
+			.driver_data = (void *)20091216, /* V3.04 */
 		},
-		{ }	/* terminate list */
+		{}
 	};
-	const struct dmi_system_id *dmi = dmi_first_match(sysids);
-	int year, month, date;
-	char buf[9];
+	const struct sysfw_id *id = sysfw_callback(sysids);
 
-	if (!dmi || pdev->bus->number || pdev->devfn != PCI_DEVFN(0x1f, 2))
+	if (!id || pdev->bus->number || pdev->devfn != PCI_DEVFN(0x1f, 2))
 		return false;
 
-	dmi_get_date(DMI_BIOS_DATE, &year, &month, &date);
-	snprintf(buf, sizeof(buf), "%04d%02d%02d", year, month, date);
-
-	return strcmp(buf, dmi->driver_data) < 0;
+	return (sysfw_get_date() < (unsigned long)id->driver_data);
 }
 
 static bool ahci_broken_online(struct pci_dev *pdev)
 {
 #define ENCODE_BUSDEVFN(bus, slot, func)			\
 	(void *)(unsigned long)(((bus) << 8) | PCI_DEVFN((slot), (func)))
-	static const struct dmi_system_id sysids[] = {
+	static const struct sysfw_id sysids[] = {
 		/*
 		 * There are several gigabyte boards which use
 		 * SIMG5723s configured as hardware RAID.  Certain
@@ -982,31 +982,31 @@ static bool ahci_broken_online(struct pci_dev *pdev)
 		{
 			.ident = "EP45-DQ6",
 			.matches = {
-				DMI_MATCH(DMI_BOARD_VENDOR,
-					  "Gigabyte Technology Co., Ltd."),
-				DMI_MATCH(DMI_BOARD_NAME, "EP45-DQ6"),
+				SYSFW_MATCH(SYSFW_BOARD_VENDOR,
+					    "Gigabyte Technology Co., Ltd."),
+				SYSFW_MATCH(SYSFW_BOARD_NAME, "EP45-DQ6"),
 			},
 			.driver_data = ENCODE_BUSDEVFN(0x0a, 0x00, 0),
 		},
 		{
 			.ident = "EP45-DS5",
 			.matches = {
-				DMI_MATCH(DMI_BOARD_VENDOR,
-					  "Gigabyte Technology Co., Ltd."),
-				DMI_MATCH(DMI_BOARD_NAME, "EP45-DS5"),
+				SYSFW_MATCH(SYSFW_BOARD_VENDOR,
+					    "Gigabyte Technology Co., Ltd."),
+				SYSFW_MATCH(SYSFW_BOARD_NAME, "EP45-DS5"),
 			},
 			.driver_data = ENCODE_BUSDEVFN(0x03, 0x00, 0),
 		},
-		{ }	/* terminate list */
+		{}
 	};
 #undef ENCODE_BUSDEVFN
-	const struct dmi_system_id *dmi = dmi_first_match(sysids);
+	const struct sysfw_id *id = sysfw_callback(sysids);
 	unsigned int val;
 
-	if (!dmi)
+	if (!id)
 		return false;
 
-	val = (unsigned long)dmi->driver_data;
+	val = (unsigned long)id->driver_data;
 
 	return pdev->bus->number == (val >> 8) && pdev->devfn == (val & 0xff);
 }
@@ -1014,7 +1014,7 @@ static bool ahci_broken_online(struct pci_dev *pdev)
 #ifdef CONFIG_ATA_ACPI
 static void ahci_gtf_filter_workaround(struct ata_host *host)
 {
-	static const struct dmi_system_id sysids[] = {
+	static const struct sysfw_id sysids[] = {
 		/*
 		 * Aspire 3810T issues a bunch of SATA enable commands
 		 * via _GTF including an invalid one and one which is
@@ -1026,24 +1026,25 @@ static void ahci_gtf_filter_workaround(struct ata_host *host)
 		{
 			.ident = "Aspire 3810T",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
-				DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 3810T"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR, "Acer"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME,
+					    "Aspire 3810T"),
 			},
 			.driver_data = (void *)ATA_ACPI_FILTER_FPDMA_OFFSET,
 		},
-		{ }
+		{}
 	};
-	const struct dmi_system_id *dmi = dmi_first_match(sysids);
+	const struct sysfw_id *id = sysfw_callback(sysids);
 	unsigned int filter;
 	int i;
 
-	if (!dmi)
+	if (!id)
 		return;
 
-	filter = (unsigned long)dmi->driver_data;
+	filter = (unsigned long)id->driver_data;
 	dev_printk(KERN_INFO, host->dev,
 		   "applying extra ACPI _GTF filter 0x%x for %s\n",
-		   filter, dmi->ident);
+		   filter, id->ident);
 
 	for (i = 0; i < host->n_ports; i++) {
 		struct ata_port *ap = host->ports[i];
diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c
index 6f6e771..cc8b62e 100644
--- a/drivers/ata/ata_piix.c
+++ b/drivers/ata/ata_piix.c
@@ -93,7 +93,8 @@
 #include <linux/gfp.h>
 #include <scsi/scsi_host.h>
 #include <linux/libata.h>
-#include <linux/dmi.h>
+#include <linux/smbios.h>
+#include <linux/sysfw.h>
 
 #define DRV_NAME	"ata_piix"
 #define DRV_VERSION	"2.13"
@@ -1017,156 +1018,163 @@ static bool piix_irq_check(struct ata_port *ap)
 #ifdef CONFIG_PM
 static int piix_broken_suspend(void)
 {
-	static const struct dmi_system_id sysids[] = {
+	static const struct sysfw_id sysids[] = {
 		{
 			.ident = "TECRA M3",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
-				DMI_MATCH(DMI_PRODUCT_NAME, "TECRA M3"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR, "TOSHIBA"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME, "TECRA M3"),
 			},
 		},
 		{
 			.ident = "TECRA M3",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
-				DMI_MATCH(DMI_PRODUCT_NAME, "Tecra M3"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR, "TOSHIBA"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME, "Tecra M3"),
 			},
 		},
 		{
 			.ident = "TECRA M4",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
-				DMI_MATCH(DMI_PRODUCT_NAME, "Tecra M4"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR, "TOSHIBA"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME, "Tecra M4"),
 			},
 		},
 		{
 			.ident = "TECRA M4",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
-				DMI_MATCH(DMI_PRODUCT_NAME, "TECRA M4"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR, "TOSHIBA"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME, "TECRA M4"),
 			},
 		},
 		{
 			.ident = "TECRA M5",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
-				DMI_MATCH(DMI_PRODUCT_NAME, "TECRA M5"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR, "TOSHIBA"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME, "TECRA M5"),
 			},
 		},
 		{
 			.ident = "TECRA M6",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
-				DMI_MATCH(DMI_PRODUCT_NAME, "TECRA M6"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR, "TOSHIBA"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME, "TECRA M6"),
 			},
 		},
 		{
 			.ident = "TECRA M7",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
-				DMI_MATCH(DMI_PRODUCT_NAME, "TECRA M7"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR, "TOSHIBA"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME, "TECRA M7"),
 			},
 		},
 		{
 			.ident = "TECRA A8",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
-				DMI_MATCH(DMI_PRODUCT_NAME, "TECRA A8"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR, "TOSHIBA"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME, "TECRA A8"),
 			},
 		},
 		{
 			.ident = "Satellite R20",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
-				DMI_MATCH(DMI_PRODUCT_NAME, "Satellite R20"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR, "TOSHIBA"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME,
+					    "Satellite R20"),
 			},
 		},
 		{
 			.ident = "Satellite R25",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
-				DMI_MATCH(DMI_PRODUCT_NAME, "Satellite R25"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR, "TOSHIBA"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME,
+					    "Satellite R25"),
 			},
 		},
 		{
 			.ident = "Satellite U200",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
-				DMI_MATCH(DMI_PRODUCT_NAME, "Satellite U200"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR, "TOSHIBA"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME,
+					    "Satellite U200"),
 			},
 		},
 		{
 			.ident = "Satellite U200",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
-				DMI_MATCH(DMI_PRODUCT_NAME, "SATELLITE U200"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR, "TOSHIBA"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME,
+					    "SATELLITE U200"),
 			},
 		},
 		{
 			.ident = "Satellite Pro U200",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
-				DMI_MATCH(DMI_PRODUCT_NAME, "SATELLITE PRO U200"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR, "TOSHIBA"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME,
+					    "SATELLITE PRO U200"),
 			},
 		},
 		{
 			.ident = "Satellite U205",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
-				DMI_MATCH(DMI_PRODUCT_NAME, "Satellite U205"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR, "TOSHIBA"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME,
+					    "Satellite U205"),
 			},
 		},
 		{
 			.ident = "SATELLITE U205",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
-				DMI_MATCH(DMI_PRODUCT_NAME, "SATELLITE U205"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR, "TOSHIBA"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME,
+					    "SATELLITE U205"),
 			},
 		},
 		{
 			.ident = "Portege M500",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
-				DMI_MATCH(DMI_PRODUCT_NAME, "PORTEGE M500"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR, "TOSHIBA"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME,
+					    "PORTEGE M500"),
 			},
 		},
 		{
 			.ident = "VGN-BX297XP",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
-				DMI_MATCH(DMI_PRODUCT_NAME, "VGN-BX297XP"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR,
+					    "Sony Corporation"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME,
+					    "VGN-BX297XP"),
 			},
 		},
-
-		{ }	/* terminate list */
+		{
+			.ident = "TECRA M4",
+			.matches = {
+				SYSFW_MATCH(SYSFW_SYS_VENDOR, "TOSHIBA"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME, "000000"),
+				SYSFW_MATCH(SYSFW_PRODUCT_VERSION, "000000"),
+				SYSFW_MATCH(SYSFW_PRODUCT_SERIAL, "000000"),
+				SYSFW_MATCH(SYSFW_BOARD_VENDOR, "TOSHIBA"),
+				SYSFW_MATCH(SYSFW_BOARD_NAME, "Portable PC"),
+				SYSFW_MATCH(SYSFW_BOARD_VERSION, "Version A0"),
+			},
+			.exactmatch = 1,
+		},
+		{}
 	};
 	static const char *oemstrs[] = {
 		"Tecra M3,",
 	};
 	int i;
 
-	if (dmi_check_system(sysids))
+	if (sysfw_callback(sysids))
 		return 1;
 
 	for (i = 0; i < ARRAY_SIZE(oemstrs); i++)
-		if (dmi_find_device(DMI_DEV_TYPE_OEM_STRING, oemstrs[i], NULL))
+		if (smbios_match_oem_string(oemstrs[i]))
 			return 1;
 
-	/* TECRA M4 sometimes forgets its identify and reports bogus
-	 * DMI information.  As the bogus information is a bit
-	 * generic, match as many entries as possible.  This manual
-	 * matching is necessary because dmi_system_id.matches is
-	 * limited to four entries.
-	 */
-	if (dmi_match(DMI_SYS_VENDOR, "TOSHIBA") &&
-	    dmi_match(DMI_PRODUCT_NAME, "000000") &&
-	    dmi_match(DMI_PRODUCT_VERSION, "000000") &&
-	    dmi_match(DMI_PRODUCT_SERIAL, "000000") &&
-	    dmi_match(DMI_BOARD_VENDOR, "TOSHIBA") &&
-	    dmi_match(DMI_BOARD_NAME, "Portable PC") &&
-	    dmi_match(DMI_BOARD_VERSION, "Version A0"))
-		return 1;
-
 	return 0;
 }
 
@@ -1383,7 +1391,7 @@ static bool piix_no_sidpr(struct ata_host *host)
 	 * while not responding to SRST protocol causing excessive
 	 * detection delay.
 	 *
-	 * Unfortunately, the system doesn't carry enough DMI
+	 * Unfortunately, the system doesn't carry enough SMBIOS
 	 * information to identify the machine but does have subsystem
 	 * vendor and device set.  As it's unclear whether the
 	 * subsystem vendor/device is used only for this specific
@@ -1475,7 +1483,7 @@ static int __devinit piix_init_sidpr(struct ata_host *host)
 
 static void piix_iocfg_bit18_quirk(struct ata_host *host)
 {
-	static const struct dmi_system_id sysids[] = {
+	static const struct sysfw_id sysids[] = {
 		{
 			/* Clevo M570U sets IOCFG bit 18 if the cdrom
 			 * isn't used to boot the system which
@@ -1483,17 +1491,16 @@ static void piix_iocfg_bit18_quirk(struct ata_host *host)
 			 */
 			.ident = "M570U",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "Clevo Co."),
-				DMI_MATCH(DMI_PRODUCT_NAME, "M570U"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR, "Clevo Co."),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME, "M570U"),
 			},
 		},
-
-		{ }	/* terminate list */
+		{}
 	};
 	struct pci_dev *pdev = to_pci_dev(host->dev);
 	struct piix_host_priv *hpriv = host->private_data;
 
-	if (!dmi_check_system(sysids))
+	if (!sysfw_callback(sysids))
 		return;
 
 	/* The datasheet says that bit 18 is NOOP but certain systems
@@ -1510,12 +1517,14 @@ static void piix_iocfg_bit18_quirk(struct ata_host *host)
 
 static bool piix_broken_system_poweroff(struct pci_dev *pdev)
 {
-	static const struct dmi_system_id broken_systems[] = {
+	static const struct sysfw_id broken_systems[] = {
 		{
 			.ident = "HP Compaq 2510p",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
-				DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq 2510p"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR,
+					    "Hewlett-Packard"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME,
+					    "HP Compaq 2510p"),
 			},
 			/* PCI slot number of the controller */
 			.driver_data = (void *)0x1FUL,
@@ -1523,19 +1532,20 @@ static bool piix_broken_system_poweroff(struct pci_dev *pdev)
 		{
 			.ident = "HP Compaq nc6000",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
-				DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nc6000"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR,
+					    "Hewlett-Packard"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME,
+					    "HP Compaq nc6000"),
 			},
 			/* PCI slot number of the controller */
 			.driver_data = (void *)0x1FUL,
 		},
-
-		{ }	/* terminate list */
+		{}
 	};
-	const struct dmi_system_id *dmi = dmi_first_match(broken_systems);
+	const struct sysfw_id *id = sysfw_callback(broken_systems);
 
-	if (dmi) {
-		unsigned long slot = (unsigned long)dmi->driver_data;
+	if (id) {
+		unsigned long slot = (unsigned long)id->driver_data;
 		/* apply the quirk only to on-board controllers */
 		return slot == PCI_SLOT(pdev->devfn);
 	}
diff --git a/drivers/ata/pata_ali.c b/drivers/ata/pata_ali.c
index 794ec6e..d6e158b 100644
--- a/drivers/ata/pata_ali.c
+++ b/drivers/ata/pata_ali.c
@@ -32,7 +32,7 @@
 #include <linux/delay.h>
 #include <scsi/scsi_host.h>
 #include <linux/libata.h>
-#include <linux/dmi.h>
+#include <linux/sysfw.h>
 
 #define DRV_NAME "pata_ali"
 #define DRV_VERSION "0.7.8"
@@ -47,22 +47,22 @@ static struct pci_dev *ali_isa_bridge;
  *	Cable special cases
  */
 
-static const struct dmi_system_id cable_dmi_table[] = {
+static const struct sysfw_id cable_override_table[] = {
 	{
 		.ident = "HP Pavilion N5430",
 		.matches = {
-			DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
-			DMI_MATCH(DMI_BOARD_VERSION, "OmniBook N32N-736"),
+			SYSFW_MATCH(SYSFW_BOARD_VENDOR, "Hewlett-Packard"),
+			SYSFW_MATCH(SYSFW_BOARD_VERSION, "OmniBook N32N-736"),
 		},
 	},
 	{
 		.ident = "Toshiba Satelite S1800-814",
 		.matches = {
-			DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
-			DMI_MATCH(DMI_PRODUCT_NAME, "S1800-814"),
+			SYSFW_MATCH(SYSFW_SYS_VENDOR, "TOSHIBA"),
+			SYSFW_MATCH(SYSFW_PRODUCT_NAME, "S1800-814"),
 		},
 	},
-	{ }
+	{}
 };
 
 static int ali_cable_override(struct pci_dev *pdev)
@@ -73,8 +73,8 @@ static int ali_cable_override(struct pci_dev *pdev)
 	/* Mitac 8317 (Winbook-A) and relatives */
 	if (pdev->subsystem_vendor == 0x1071 && pdev->subsystem_device == 0x8317)
 		return 1;
-	/* Systems by DMI */
-	if (dmi_check_system(cable_dmi_table))
+	/* Systems by SMBIOS */
+	if (sysfw_callback(cable_override_table))
 		return 1;
 	return 0;
 }
diff --git a/drivers/ata/pata_cs5530.c b/drivers/ata/pata_cs5530.c
index f792330..085820a 100644
--- a/drivers/ata/pata_cs5530.c
+++ b/drivers/ata/pata_cs5530.c
@@ -31,7 +31,7 @@
 #include <linux/delay.h>
 #include <scsi/scsi_host.h>
 #include <linux/libata.h>
-#include <linux/dmi.h>
+#include <linux/sysfw.h>
 
 #define DRV_NAME	"pata_cs5530"
 #define DRV_VERSION	"0.7.4"
@@ -175,20 +175,20 @@ static struct ata_port_operations cs5530_port_ops = {
 	.set_dmamode	= cs5530_set_dmamode,
 };
 
-static const struct dmi_system_id palmax_dmi_table[] = {
+static const struct sysfw_id palmax_id_table[] = {
 	{
 		.ident = "Palmax PD1100",
 		.matches = {
-			DMI_MATCH(DMI_SYS_VENDOR, "Cyrix"),
-			DMI_MATCH(DMI_PRODUCT_NAME, "Caddis"),
+			SYSFW_MATCH(SYSFW_SYS_VENDOR, "Cyrix"),
+			SYSFW_MATCH(SYSFW_PRODUCT_NAME, "Caddis"),
 		},
 	},
-	{ }
+	{}
 };
 
 static int cs5530_is_palmax(void)
 {
-	if (dmi_check_system(palmax_dmi_table)) {
+	if (sysfw_callback(palmax_id_table)) {
 		printk(KERN_INFO "Palmax PD1100: Disabling DMA on docking port.\n");
 		return 1;
 	}
diff --git a/drivers/ata/pata_rdc.c b/drivers/ata/pata_rdc.c
index 5fbe9b1..497f514 100644
--- a/drivers/ata/pata_rdc.c
+++ b/drivers/ata/pata_rdc.c
@@ -31,7 +31,6 @@
 #include <linux/gfp.h>
 #include <scsi/scsi_host.h>
 #include <linux/libata.h>
-#include <linux/dmi.h>
 
 #define DRV_NAME	"pata_rdc"
 #define DRV_VERSION	"0.01"
diff --git a/drivers/ata/pata_sch.c b/drivers/ata/pata_sch.c
index e97b32f..8b95c13 100644
--- a/drivers/ata/pata_sch.c
+++ b/drivers/ata/pata_sch.c
@@ -33,7 +33,6 @@
 #include <linux/device.h>
 #include <scsi/scsi_host.h>
 #include <linux/libata.h>
-#include <linux/dmi.h>
 
 #define DRV_NAME	"pata_sch"
 #define DRV_VERSION	"0.2"
diff --git a/drivers/ata/pata_via.c b/drivers/ata/pata_via.c
index ac8d7d9..2175119 100644
--- a/drivers/ata/pata_via.c
+++ b/drivers/ata/pata_via.c
@@ -61,7 +61,7 @@
 #include <linux/gfp.h>
 #include <scsi/scsi_host.h>
 #include <linux/libata.h>
-#include <linux/dmi.h>
+#include <linux/sysfw.h>
 
 #define DRV_NAME "pata_via"
 #define DRV_VERSION "0.3.4"
@@ -132,21 +132,21 @@ struct via_port {
  *	Cable special cases
  */
 
-static const struct dmi_system_id cable_dmi_table[] = {
+static const struct sysfw_id cable_override_table[] = {
 	{
 		.ident = "Acer Ferrari 3400",
 		.matches = {
-			DMI_MATCH(DMI_BOARD_VENDOR, "Acer,Inc."),
-			DMI_MATCH(DMI_BOARD_NAME, "Ferrari 3400"),
+			SYSFW_MATCH(SYSFW_BOARD_VENDOR, "Acer,Inc."),
+			SYSFW_MATCH(SYSFW_BOARD_NAME, "Ferrari 3400"),
 		},
 	},
-	{ }
+	{}
 };
 
 static int via_cable_override(struct pci_dev *pdev)
 {
-	/* Systems by DMI */
-	if (dmi_check_system(cable_dmi_table))
+	/* Systems by SMBIOS */
+	if (sysfw_callback(cable_override_table))
 		return 1;
 	/* Arima W730-K8/Targa Visionary 811/... */
 	if (pdev->subsystem_vendor == 0x161F && pdev->subsystem_device == 0x2032)
diff --git a/drivers/ata/sata_sil.c b/drivers/ata/sata_sil.c
index b42edaa..fff0e2b 100644
--- a/drivers/ata/sata_sil.c
+++ b/drivers/ata/sata_sil.c
@@ -44,7 +44,7 @@
 #include <linux/device.h>
 #include <scsi/scsi_host.h>
 #include <linux/libata.h>
-#include <linux/dmi.h>
+#include <linux/sysfw.h>
 
 #define DRV_NAME	"sata_sil"
 #define DRV_VERSION	"2.4"
@@ -707,23 +707,24 @@ static void sil_init_controller(struct ata_host *host)
 
 static bool sil_broken_system_poweroff(struct pci_dev *pdev)
 {
-	static const struct dmi_system_id broken_systems[] = {
+	static const struct sysfw_id broken_systems[] = {
 		{
 			.ident = "HP Compaq nx6325",
 			.matches = {
-				DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
-				DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6325"),
+				SYSFW_MATCH(SYSFW_SYS_VENDOR,
+					    "Hewlett-Packard"),
+				SYSFW_MATCH(SYSFW_PRODUCT_NAME,
+					    "HP Compaq nx6325"),
 			},
 			/* PCI slot number of the controller */
 			.driver_data = (void *)0x12UL,
 		},
-
-		{ }	/* terminate list */
+		{}	/* terminate list */
 	};
-	const struct dmi_system_id *dmi = dmi_first_match(broken_systems);
+	const struct sysfw_id *id = sysfw_callback(broken_systems);
 
-	if (dmi) {
-		unsigned long slot = (unsigned long)dmi->driver_data;
+	if (id) {
+		unsigned long slot = (unsigned long)id->driver_data;
 		/* apply the quirk only to on-board controllers */
 		return slot == PCI_SLOT(pdev->devfn);
 	}
-- 
1.6.5.2

  parent reply	other threads:[~2011-07-18 13:08 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-18 13:08 [PATCH 00/34] System Firmware and SMBIOS Support [v3] Prarit Bhargava
2011-07-18 13:08 ` [PATCH 01/34] System Firmware Interface Prarit Bhargava
2011-07-18 13:08   ` [lm-sensors] " Prarit Bhargava
2011-07-18 13:08   ` Prarit Bhargava
2011-07-18 13:08   ` Prarit Bhargava
2011-07-19  0:43   ` Andi Kleen
2011-07-19  9:05     ` Alan Cox
2011-07-19 12:23       ` Prarit Bhargava
2011-07-19 13:25         ` Andi Kleen
2011-07-19 13:52           ` Prarit Bhargava
2011-07-19 13:21       ` Andi Kleen
2011-07-19 13:39         ` Prarit Bhargava
2011-07-19 13:46           ` Andi Kleen
2011-07-19 13:58             ` Prarit Bhargava
     [not found]   ` <1310994528-26276-2-git-send-email-prarit-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2011-07-25 19:03     ` [lm-sensors] " Jean Delvare
2011-07-25 19:03       ` Jean Delvare
2011-07-25 19:03       ` Jean Delvare
2011-07-25 19:03       ` Jean Delvare
2011-08-10 13:26       ` Prarit Bhargava
     [not found] ` <1310994528-26276-1-git-send-email-prarit-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2011-07-18 13:08   ` [PATCH 02/34] New SMBIOS driver for x86 and ia64 Prarit Bhargava
2011-07-18 13:08     ` [lm-sensors] " Prarit Bhargava
2011-07-18 13:08     ` Prarit Bhargava
2011-07-18 13:08     ` Prarit Bhargava
2011-07-18 13:08 ` [PATCH 03/34] arch specific changes for SMBIOS and System Firmware Prarit Bhargava
2011-07-18 13:08   ` Prarit Bhargava
2011-07-18 13:08 ` [PATCH 04/34] drivers/acpi changes for SMBIOS and System Firmware interface Prarit Bhargava
2011-07-18 13:08 ` Prarit Bhargava [this message]
2011-07-18 13:08 ` [PATCH 06/34] drivers/floppy changes for SMBIOS and System Firmware Prarit Bhargava
2011-07-18 13:08 ` [PATCH 07/34] drivers/char " Prarit Bhargava
2011-07-18 13:08 ` [PATCH 08/34] drivers/crypto " Prarit Bhargava
2011-07-18 13:08 ` [PATCH 09/34] drivers/gpio " Prarit Bhargava
2011-07-18 13:08 ` [PATCH 10/34] drivers/gpu " Prarit Bhargava
2011-07-18 13:08 ` [PATCH 11/34] drivers/hwmon " Prarit Bhargava
2011-07-18 13:08   ` [lm-sensors] [PATCH 11/34] drivers/hwmon changes for SMBIOS and Prarit Bhargava
2011-07-18 13:08 ` [PATCH 12/34] drivers/i2c changes for SMBIOS and System Firmware Prarit Bhargava
2011-07-18 13:08 ` [PATCH 13/34] drivers/ide " Prarit Bhargava
2011-07-18 13:08 ` [PATCH 14/34] drivers/input " Prarit Bhargava
2011-07-18 13:08 ` [PATCH 15/34] drivers/leds " Prarit Bhargava
2011-07-18 13:08 ` [PATCH 16/34] drivers/media " Prarit Bhargava
2011-07-18 13:08 ` [PATCH 17/34] drivers/misc " Prarit Bhargava
2011-07-18 13:08 ` [PATCH 18/34] drivers/mtd " Prarit Bhargava
2011-07-18 13:08 ` [PATCH 19/34] drivers/net " Prarit Bhargava
2011-07-18 13:08 ` [PATCH 20/34] drivers/pci " Prarit Bhargava
2011-07-18 13:08 ` [PATCH 21/34] drivers/platform " Prarit Bhargava
2011-08-11  4:30   ` Jonathan Woithe
2011-07-18 13:08 ` [PATCH 22/34] drivers/pnp " Prarit Bhargava
2011-07-18 13:08 ` [PATCH 23/34] drivers/power " Prarit Bhargava
2011-07-18 13:08 ` [PATCH 24/34] drivers/rtc " Prarit Bhargava
2011-07-18 13:08 ` [PATCH 25/34] drivers/staging " Prarit Bhargava
2011-07-18 13:08 ` [PATCH 26/34] drivers/tty " Prarit Bhargava
2011-07-18 13:08 ` [PATCH 27/34] drivers/usb " Prarit Bhargava
2011-07-19 19:47   ` Alan Stern
2011-07-18 13:08 ` [PATCH 28/34] drivers/video " Prarit Bhargava
2011-07-18 13:08 ` [PATCH 29/34] drivers/w1 " Prarit Bhargava
2011-07-18 13:08 ` [PATCH 30/34] drivers/watchdog " Prarit Bhargava
2011-07-18 13:08 ` [PATCH 31/34] include/linux/acpi.h " Prarit Bhargava
2011-07-18 13:08 ` [PATCH 32/34] Kernel panic " Prarit Bhargava
2011-07-18 13:08 ` [PATCH 33/34] sound/pci/hda " Prarit Bhargava
2011-07-18 13:08 ` [PATCH 34/34] Remove old DMI & SMBIOS code and make SMBIOS default on Prarit Bhargava
2011-07-18 13:08   ` [lm-sensors] [PATCH 34/34] Remove old DMI & SMBIOS code and make Prarit Bhargava
2011-07-18 13:08   ` [PATCH 34/34] Remove old DMI & SMBIOS code and make SMBIOS default on Prarit Bhargava
2011-07-18 13:08   ` Prarit Bhargava

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1310994528-26276-6-git-send-email-prarit@redhat.com \
    --to=prarit@redhat.com \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.