[LinuxBIOS] r2951 - trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx

svn at openbios.org svn at openbios.org
Wed Nov 7 23:09:03 CET 2007


Author: uwe
Date: 2007-11-07 23:09:02 +0100 (Wed, 07 Nov 2007)
New Revision: 2951

Modified:
   trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/Config.lb
   trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx.c
   trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_ac97.c
   trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_early_smbus.c
   trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_nic.c
   trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_sata.c
   trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_smbus.c
   trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_usb.c
   trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_usb_ehci.c
Log:
Add initial support for all known ICH* southbridges to the
i82801xx code for the following parts:

 - AC97 audio/modem
 - Onboard network interface cards (NICs)
 - USB 1.1 controllers
 - SMBus controllers

Some other parts are still missing and will be added later.

Use PCI ID #defines from pci_ids.h everywhere. Constify various structs.
Also, fix some random cosmetic issues in the code.

All of this is relatively trivial and tested by manually building
all boards which currently use the i82801xx code.

Signed-off-by: Uwe Hermann <uwe at hermann-uwe.de>
Acked-by: Uwe Hermann <uwe at hermann-uwe.de>



Modified: trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/Config.lb
===================================================================
--- trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/Config.lb	2007-11-07 19:07:17 UTC (rev 2950)
+++ trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/Config.lb	2007-11-07 22:09:02 UTC (rev 2951)
@@ -17,6 +17,7 @@
 ## along with this program; if not, write to the Free Software
 ## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
 ##
+
 driver i82801xx.o
 driver i82801xx_usb.o
 driver i82801xx_lpc.o

Modified: trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx.c
===================================================================
--- trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx.c	2007-11-07 19:07:17 UTC (rev 2950)
+++ trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx.c	2007-11-07 22:09:02 UTC (rev 2951)
@@ -30,7 +30,7 @@
 	unsigned int index = 0;
 	uint16_t cur_disable_mask, new_disable_mask;
 
-	/* All 82801 devices should be on bus 0. */
+	/* All 82801xx devices should be on bus 0. */
 	unsigned int devfn = PCI_DEVFN(0x1f, 0);	// LPC
 	device_t lpc_dev = dev_find_slot(0, devfn);	// 0
 	if (!lpc_dev)
@@ -50,10 +50,11 @@
 	if (index == 0) {
 		index = 14;
 	}
+
 	cur_disable_mask = pci_read_config16(lpc_dev, FUNC_DIS);
-	new_disable_mask = cur_disable_mask & ~(1 << index);	// enable it
+	new_disable_mask = cur_disable_mask & ~(1 << index); /* Enable it. */
 	if (!dev->enabled) {
-		new_disable_mask |= (1 << index); // disable it, if desired
+		new_disable_mask |= (1 << index); /* Disable it, if desired. */
 	}
 	if (new_disable_mask != cur_disable_mask) {
 		pci_write_config16(lpc_dev, FUNC_DIS, new_disable_mask);
@@ -61,6 +62,6 @@
 }
 
 struct chip_operations southbridge_intel_i82801xx_ops = {
-	CHIP_NAME("Intel i82801 Series Southbridge")
+	CHIP_NAME("Intel 82801 Series Southbridge")
 	.enable_dev = i82801xx_enable,
 };

Modified: trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_ac97.c
===================================================================
--- trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_ac97.c	2007-11-07 19:07:17 UTC (rev 2950)
+++ trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_ac97.c	2007-11-07 22:09:02 UTC (rev 2951)
@@ -19,13 +19,15 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
+/* This code should work for all ICH* southbridges with AC97 audio/modem. */
+
 #include <console/console.h>
 #include <device/device.h>
 #include <device/pci.h>
 #include <device/pci_ids.h>
 #include "i82801xx.h"
 
-static struct device_operations ac97_ops = {
+static const struct device_operations ac97_ops = {
 	.read_resources		= pci_dev_read_resources,
 	.set_resources		= pci_dev_set_resources,
 	.enable_resources	= pci_dev_enable_resources,
@@ -34,80 +36,109 @@
 	.enable			= i82801xx_enable,
 };
 
-/* 82801AA */
+/* 82801AA (ICH) */
 static const struct pci_driver i82801aa_ac97_audio __pci_driver = {
 	.ops	= &ac97_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x2415,
+	.device	= PCI_DEVICE_ID_INTEL_82801AA_AC97_AUDIO,
 };
 
 static const struct pci_driver i82801aa_ac97_modem __pci_driver = {
 	.ops	= &ac97_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x2416,
+	.device	= PCI_DEVICE_ID_INTEL_82801AA_AC97_MODEM,
 };
 
-/* 82801AB */
+/* 82801AB (ICH0) */
 static const struct pci_driver i82801ab_ac97_audio __pci_driver = {
 	.ops	= &ac97_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x2425,
+	.device	= PCI_DEVICE_ID_INTEL_82801AB_AC97_AUDIO,
 };
 
 static const struct pci_driver i82801ab_ac97_modem __pci_driver = {
 	.ops	= &ac97_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x2426,
+	.device	= PCI_DEVICE_ID_INTEL_82801AB_AC97_MODEM,
 };
 
-/* 82801BA */
+/* 82801BA/BAM (ICH2/ICH2-M) */
 static const struct pci_driver i82801ba_ac97_audio __pci_driver = {
 	.ops	= &ac97_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x2445,
+	.device	= PCI_DEVICE_ID_INTEL_82801BA_AC97_AUDIO,
 };
 
 static const struct pci_driver i82801ba_ac97_modem __pci_driver = {
 	.ops	= &ac97_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x2446,
+	.device	= PCI_DEVICE_ID_INTEL_82801BA_AC97_MODEM,
 };
 
-/* 82801CA */
+/* 82801CA/CAM (ICH3-S/ICH3-M) */
 static const struct pci_driver i82801ca_ac97_audio __pci_driver = {
 	.ops	= &ac97_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x2485,
+	.device	= PCI_DEVICE_ID_INTEL_82801CA_AC97_AUDIO,
 };
 
 static const struct pci_driver i82801ca_ac97_modem __pci_driver = {
 	.ops	= &ac97_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x2486,
+	.device	= PCI_DEVICE_ID_INTEL_82801CA_AC97_MODEM,
 };
 
-/* 82801DB & 82801DBM */
+/* 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) */
 static const struct pci_driver i82801db_ac97_audio __pci_driver = {
 	.ops	= &ac97_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x24c5,
+	.device	= PCI_DEVICE_ID_INTEL_82801DB_AC97_AUDIO,
 };
 
 static const struct pci_driver i82801db_ac97_modem __pci_driver = {
 	.ops	= &ac97_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x24c6,
+	.device	= PCI_DEVICE_ID_INTEL_82801DB_AC97_MODEM,
 };
 
-/* 82801EB & 82801ER */
-static const struct pci_driver i82801ex_ac97_audio __pci_driver = {
+/* 82801EB/ER (ICH5/ICH5R) */
+static const struct pci_driver i82801eb_ac97_audio __pci_driver = {
 	.ops	= &ac97_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x24d5,
+	.device	= PCI_DEVICE_ID_INTEL_82801EB_AC97_AUDIO,
 };
 
-static const struct pci_driver i82801ex_ac97_modem __pci_driver = {
+static const struct pci_driver i82801eb_ac97_modem __pci_driver = {
 	.ops	= &ac97_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x24d6,
+	.device	= PCI_DEVICE_ID_INTEL_82801EB_AC97_MODEM,
 };
+
+/* 82801FB/FR/FW/FRW/FBM (ICH6/ICH6R/ICH6W/ICH6RW/ICH6-M) */
+static const struct pci_driver i82801fb_ac97_audio __pci_driver = {
+	.ops	= &ac97_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801FB_AC97_AUDIO,
+};
+
+static const struct pci_driver i82801fb_ac97_modem __pci_driver = {
+	.ops	= &ac97_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801FB_AC97_MODEM,
+};
+
+/* 82801GB/GR/GDH/GBM/GHM (ICH7/ICH7R/ICH7DH/ICH7-M/ICH7-M DH) */
+/* Note: 82801GU (ICH7-U) doesn't have AC97 audio/modem. */
+static const struct pci_driver i82801gb_ac97_audio __pci_driver = {
+	.ops	= &ac97_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801GB_AC97_AUDIO,
+};
+
+static const struct pci_driver i82801gb_ac97_modem __pci_driver = {
+	.ops	= &ac97_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801GB_AC97_MODEM,
+};
+
+/* Note: There's no AC97 audio/modem on ICH8/ICH9/C-ICH. */

Modified: trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_early_smbus.c
===================================================================
--- trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_early_smbus.c	2007-11-07 19:07:17 UTC (rev 2950)
+++ trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_early_smbus.c	2007-11-07 22:09:02 UTC (rev 2951)
@@ -29,7 +29,7 @@
 	device_t dev;
 	uint16_t device_id;
 
-	/* Set the SMBus device staticly. */
+	/* Set the SMBus device statically. */
 	dev = PCI_DEV(0x0, 0x1f, 0x3);
 
 	/* Check to make sure we've got the right device. */

Modified: trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_nic.c
===================================================================
--- trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_nic.c	2007-11-07 19:07:17 UTC (rev 2950)
+++ trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_nic.c	2007-11-07 22:09:02 UTC (rev 2951)
@@ -18,12 +18,14 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
+/* This code should work for all ICH* southbridges with a NIC. */
+
 #include <console/console.h>
 #include <device/device.h>
 #include <device/pci.h>
 #include <device/pci_ids.h>
 
-static struct device_operations nic_ops = {
+static const struct device_operations nic_ops = {
 	.read_resources		= pci_dev_read_resources,
 	.set_resources		= pci_dev_set_resources,
 	.enable_resources	= pci_dev_enable_resources,
@@ -31,14 +33,68 @@
 	.scan_bus		= 0,
 };
 
-static const struct pci_driver i82801dbm_nic __pci_driver = {
+/* Note: There's no NIC on 82801AA/AB (ICH/ICH0). */
+
+/* 82801BA/BAM/CA/CAM (ICH2/ICH2-M/ICH3-S/ICH3-M) */
+static const struct pci_driver i82801ba_nic __pci_driver = {
 	.ops	= &nic_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x103a,
+	.device	= PCI_DEVICE_ID_INTEL_82801BA_LAN,
 };
 
-static const struct pci_driver i82801ex_nic __pci_driver = {
+/* 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) */
+static const struct pci_driver i82801db_nic __pci_driver = {
 	.ops	= &nic_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x1051,
+	.device	= PCI_DEVICE_ID_INTEL_82801DB_LAN,
 };
+
+/* 82801EB/ER (ICH5/ICH5R) */
+static const struct pci_driver i82801eb_nic __pci_driver = {
+	.ops	= &nic_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801EB_LAN,
+};
+
+/* 82801FB/FR/FW/FRW/FBM (ICH6/ICH6R/ICH6W/ICH6RW/ICH6-M) */
+static const struct pci_driver i82801fb_nic __pci_driver = {
+	.ops	= &nic_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801FB_LAN,
+};
+
+/* 82801GB/GR/GDH/GBM/GHM (ICH7/ICH7R/ICH7DH/ICH7-M/ICH7-M DH) */
+/* Note: 82801GU (ICH7-U) doesn't have a NIC. */
+static const struct pci_driver i82801gb_nic __pci_driver = {
+	.ops	= &nic_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801GB_LAN,
+};
+
+/* 82801HB/HR/HDH/HDO/HBM/HEM (ICH8/ICH8R/ICH8DH/ICH8DO/ICH8M/ICH8M-E) */
+static const struct pci_driver i82801hb_nic __pci_driver = {
+	.ops	= &nic_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801HB_LAN,
+};
+
+/* 82801IB/IR/IH/IO (ICH9/ICH9R/ICH9DH/ICH9DO) */
+static const struct pci_driver i82801ib_nic __pci_driver = {
+	.ops	= &nic_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801IB_LAN,
+};
+
+/* 82801E (C-ICH) */
+static const struct pci_driver i82801e_nic1 __pci_driver = {
+	.ops	= &nic_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801E_LAN1,
+};
+
+static const struct pci_driver i82801e_nic2 __pci_driver = {
+	.ops	= &nic_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801E_LAN2,
+};
+

Modified: trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_sata.c
===================================================================
--- trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_sata.c	2007-11-07 19:07:17 UTC (rev 2950)
+++ trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_sata.c	2007-11-07 22:09:02 UTC (rev 2951)
@@ -23,7 +23,6 @@
 #include <device/device.h>
 #include <device/pci.h>
 #include <device/pci_ids.h>
-#include <device/pci_ops.h>
 #include "i82801xx.h"
 
 /* TODO: Set dynamically, if the user only wants one SATA channel or none

Modified: trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_smbus.c
===================================================================
--- trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_smbus.c	2007-11-07 19:07:17 UTC (rev 2950)
+++ trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_smbus.c	2007-11-07 22:09:02 UTC (rev 2951)
@@ -18,16 +18,18 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
+/* TODO: Check datasheets if this will work for all ICH* southbridges. */
+
+#include <stdint.h>
 #include <smbus.h>
 #include <pci.h>
 #include <arch/io.h>
-#include "i82801_model_specific.h"
 #include "i82801xx.h"
 #include "i82801_smbus.h"
 
-static int smbus_read_byte(struct bus *bus, device_t dev, uint8_t address)
+static int smbus_read_byte(struct bus *bus, device_t dev, u8 address)
 {
-	unsigned device;
+	unsigned device;	/* TODO: u16? */
 	struct resource *res;
 
 	device = dev->path.u.i2c.device;
@@ -36,11 +38,11 @@
 	return do_smbus_read_byte(res->base, device, address);
 }
 
-static struct smbus_bus_operations lops_smbus_bus = {
+static const struct smbus_bus_operations lops_smbus_bus = {
 	.read_byte	= smbus_read_byte,
 };
 
-static struct device_operations smbus_ops = {
+static const struct device_operations smbus_ops = {
 	.read_resources		= pci_dev_read_resources,
 	.set_resources		= pci_dev_set_resources,
 	.enable_resources	= pci_dev_enable_resources,
@@ -50,44 +52,79 @@
 	.ops_smbus_bus		= &lops_smbus_bus,
 };
 
-/* 82801AA */
-static const struct pci_driver smbus_driver __pci_driver = {
+/* 82801AA (ICH) */
+static const struct pci_driver i82801aa_smb __pci_driver = {
 	.ops	= &smbus_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x2413,
+	.device	= PCI_DEVICE_ID_INTEL_82801AA_SMB,
 };
 
-/* 82801AB */
-static const struct pci_driver smbus_driver __pci_driver = {
+/* 82801AB (ICH0) */
+static const struct pci_driver i82801ab_smb __pci_driver = {
 	.ops	= &smbus_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x2423,
+	.device	= PCI_DEVICE_ID_INTEL_82801AB_SMB,
 };
 
-/* 82801BA */
-static const struct pci_driver smbus_driver __pci_driver = {
+/* 82801BA/BAM (ICH2/ICH2-M) */
+static const struct pci_driver i82801ba_smb __pci_driver = {
 	.ops	= &smbus_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x2443,
+	.device	= PCI_DEVICE_ID_INTEL_82801BA_SMB,
 };
 
-/* 82801CA */
-static const struct pci_driver smbus_driver __pci_driver = {
+/* 82801CA/CAM (ICH3-S/ICH3-M) */
+static const struct pci_driver i82801ca_smb __pci_driver = {
 	.ops	= &smbus_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x2483,
+	.device	= PCI_DEVICE_ID_INTEL_82801CA_SMB,
 };
 
-/* 82801DB and 82801DBM */
-static const struct pci_driver smbus_driver __pci_driver = {
+/* 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) */
+static const struct pci_driver i82801db_smb __pci_driver = {
 	.ops	= &smbus_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x24c3,
+	.device	= PCI_DEVICE_ID_INTEL_82801DB_SMB,
 };
 
-/* 82801EB and 82801ER */
-static const struct pci_driver smbus_driver __pci_driver = {
+/* 82801EB/ER (ICH5/ICH5R) */
+static const struct pci_driver i82801eb_smb __pci_driver = {
 	.ops	= &smbus_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x24d3,
+	.device	= PCI_DEVICE_ID_INTEL_82801EB_SMB,
 };
+
+/* 82801FB/FR/FW/FRW/FBM (ICH6/ICH6R/ICH6W/ICH6RW/ICH6-M) */
+static const struct pci_driver i82801fb_smb __pci_driver = {
+	.ops	= &smbus_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801FB_SMB,
+};
+
+/* 82801GB/GR/GDH/GBM/GHM/GU (ICH7/ICH7R/ICH7DH/ICH7-M/ICH7-M DH/ICH7-U) */
+static const struct pci_driver i82801gb_smb __pci_driver = {
+	.ops	= &smbus_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801GB_SMB,
+};
+
+/* 82801HB/HR/HDH/HDO/HBM/HEM (ICH8/ICH8R/ICH8DH/ICH8DO/ICH8M/ICH8M-E) */
+static const struct pci_driver i82801hb_smb __pci_driver = {
+	.ops	= &smbus_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801HB_LAN,
+};
+
+/* 82801IB/IR/IH/IO (ICH9/ICH9R/ICH9DH/ICH9DO) */
+static const struct pci_driver i82801ib_smb __pci_driver = {
+	.ops	= &smbus_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801IB_SMB,
+};
+
+/* 82801E (C-ICH) */
+static const struct pci_driver i82801e_smb __pci_driver = {
+	.ops	= &smbus_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801E_SMB,
+};

Modified: trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_usb.c
===================================================================
--- trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_usb.c	2007-11-07 19:07:17 UTC (rev 2950)
+++ trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_usb.c	2007-11-07 22:09:02 UTC (rev 2951)
@@ -18,11 +18,12 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
+/* This code should work for all ICH* southbridges with USB. */
+
 #include <console/console.h>
 #include <device/device.h>
 #include <device/pci.h>
 #include <device/pci_ids.h>
-#include <device/pci_ops.h>
 #include "i82801xx.h"
 
 static void usb_init(struct device *dev)
@@ -30,7 +31,7 @@
 	/* TODO: Any init needed? Some ports have it, others don't. */
 }
 
-static struct device_operations usb_ops = {
+static const struct device_operations usb_ops = {
 	.read_resources		= pci_dev_read_resources,
 	.set_resources		= pci_dev_set_resources,
 	.enable_resources	= pci_dev_enable_resources,
@@ -39,92 +40,217 @@
 	.enable			= i82801xx_enable,
 };
 
-/* 82801AA */
-static const struct pci_driver i82801aa_usb_1 __pci_driver = {
+/* 82801AA (ICH) */
+static const struct pci_driver i82801aa_usb1 __pci_driver = {
 	.ops	= &usb_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x2412,
+	.device	= PCI_DEVICE_ID_INTEL_82801AA_USB,
 };
 
-/* 82801AB */
-static const struct pci_driver i82801ab_usb_1 __pci_driver = {
+/* 82801AB (ICH0) */
+static const struct pci_driver i82801ab_usb1 __pci_driver = {
 	.ops	= &usb_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x2422,
+	.device	= PCI_DEVICE_ID_INTEL_82801AB_USB,
 };
 
-/* 82801BA */
-static const struct pci_driver i82801ba_usb_1 __pci_driver = {
+/* 82801BA/BAM (ICH2/ICH2-M) */
+static const struct pci_driver i82801ba_usb1 __pci_driver = {
 	.ops	= &usb_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x2442,
+	.device	= PCI_DEVICE_ID_INTEL_82801BA_USB1,
 };
 
-static const struct pci_driver i82801ba_usb_2 __pci_driver = {
+static const struct pci_driver i82801ba_usb2 __pci_driver = {
 	.ops	= &usb_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x2444,
+	.device	= PCI_DEVICE_ID_INTEL_82801BA_USB2,
 };
 
-/* 82801CA */
-static const struct pci_driver i82801ca_usb_1 __pci_driver = {
+/* 82801CA/CAM (ICH3-S/ICH3-M) */
+static const struct pci_driver i82801ca_usb1 __pci_driver = {
 	.ops	= &usb_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x2482,
+	.device	= PCI_DEVICE_ID_INTEL_82801CA_USB1,
 };
 
-static const struct pci_driver i82801ca_usb_2 __pci_driver = {
+static const struct pci_driver i82801ca_usb2 __pci_driver = {
 	.ops	= &usb_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x2484,
+	.device	= PCI_DEVICE_ID_INTEL_82801CA_USB2,
 };
 
-static const struct pci_driver i82801ca_usb_3 __pci_driver = {
+static const struct pci_driver i82801ca_usb3 __pci_driver = {
 	.ops	= &usb_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x2487,
+	.device	= PCI_DEVICE_ID_INTEL_82801CA_USB3,
 };
 
-/* 82801DB and 82801DBM */
-static const struct pci_driver i82801db_usb_1 __pci_driver = {
+/* 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) */
+static const struct pci_driver i82801db_usb1 __pci_driver = {
 	.ops	= &usb_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x24c2,
+	.device	= PCI_DEVICE_ID_INTEL_82801DB_USB1,
 };
 
-static const struct pci_driver i82801db_usb_2 __pci_driver = {
+static const struct pci_driver i82801db_usb2 __pci_driver = {
 	.ops	= &usb_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x24c4,
+	.device	= PCI_DEVICE_ID_INTEL_82801DB_USB2,
 };
 
-static const struct pci_driver i82801db_usb_3 __pci_driver = {
+static const struct pci_driver i82801db_usb3 __pci_driver = {
 	.ops	= &usb_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x24c7,
+	.device	= PCI_DEVICE_ID_INTEL_82801DB_USB3,
 };
 
-/* 82801EB and 82801ER */
-static const struct pci_driver i82801ex_usb_1 __pci_driver = {
+/* 82801EB/ER (ICH5/ICH5R) */
+static const struct pci_driver i82801eb_usb1 __pci_driver = {
 	.ops	= &usb_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x24d2,
+	.device	= PCI_DEVICE_ID_INTEL_82801EB_USB1,
 };
 
-static const struct pci_driver i82801ex_usb_2 __pci_driver = {
+static const struct pci_driver i82801eb_usb2 __pci_driver = {
 	.ops	= &usb_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x24d4,
+	.device	= PCI_DEVICE_ID_INTEL_82801EB_USB2,
 };
 
-static const struct pci_driver i82801ex_usb_3 __pci_driver = {
+static const struct pci_driver i82801eb_usb3 __pci_driver = {
 	.ops	= &usb_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x24d7,
+	.device	= PCI_DEVICE_ID_INTEL_82801EB_USB3,
 };
 
-static const struct pci_driver i82801ex_usb_4 __pci_driver = {
+static const struct pci_driver i82801eb_usb4 __pci_driver = {
 	.ops	= &usb_ops,
 	.vendor	= PCI_VENDOR_ID_INTEL,
-	.device	= 0x24de,
+	.device	= PCI_DEVICE_ID_INTEL_82801EB_USB4,
 };
+
+/* 82801FB/FR/FW/FRW/FBM (ICH6/ICH6R/ICH6W/ICH6RW/ICH6-M) */
+static const struct pci_driver i82801fb_usb1 __pci_driver = {
+	.ops	= &usb_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801FB_USB1,
+};
+
+static const struct pci_driver i82801fb_usb2 __pci_driver = {
+	.ops	= &usb_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801FB_USB2,
+};
+
+static const struct pci_driver i82801fb_usb3 __pci_driver = {
+	.ops	= &usb_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801FB_USB3,
+};
+
+static const struct pci_driver i82801fb_usb4 __pci_driver = {
+	.ops	= &usb_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801FB_USB4,
+};
+
+/* 82801GB/GR/GDH/GBM/GHM/GU (ICH7/ICH7R/ICH7DH/ICH7-M/ICH7-M DH/ICH7-U) */
+static const struct pci_driver i82801gb_usb1 __pci_driver = {
+	.ops	= &usb_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801GB_USB1,
+};
+
+static const struct pci_driver i82801gb_usb2 __pci_driver = {
+	.ops	= &usb_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801GB_USB2,
+};
+
+static const struct pci_driver i82801gb_usb3 __pci_driver = {
+	.ops	= &usb_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801GB_USB3,
+};
+
+static const struct pci_driver i82801gb_usb4 __pci_driver = {
+	.ops	= &usb_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801GB_USB4,
+};
+
+/* 82801HB/HR/HDH/HDO/HBM/HEM (ICH8/ICH8R/ICH8DH/ICH8DO/ICH8M/ICH8M-E) */
+static const struct pci_driver i82801hb_usb1 __pci_driver = {
+	.ops	= &usb_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801HB_USB1,
+};
+
+static const struct pci_driver i82801hb_usb2 __pci_driver = {
+	.ops	= &usb_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801HB_USB2,
+};
+
+static const struct pci_driver i82801hb_usb3 __pci_driver = {
+	.ops	= &usb_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801HB_USB3,
+};
+
+static const struct pci_driver i82801hb_usb4 __pci_driver = {
+	.ops	= &usb_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801HB_USB4,
+};
+
+static const struct pci_driver i82801hb_usb5 __pci_driver = {
+	.ops	= &usb_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801HB_USB5,
+};
+
+/* 82801IB/IR/IH/IO (ICH9/ICH9R/ICH9DH/ICH9DO) */
+static const struct pci_driver i82801ib_usb1 __pci_driver = {
+	.ops	= &usb_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801IB_USB1,
+};
+
+static const struct pci_driver i82801ib_usb2 __pci_driver = {
+	.ops	= &usb_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801IB_USB2,
+};
+
+static const struct pci_driver i82801ib_usb3 __pci_driver = {
+	.ops	= &usb_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801IB_USB3,
+};
+
+static const struct pci_driver i82801ib_usb4 __pci_driver = {
+	.ops	= &usb_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801IB_USB4,
+};
+
+static const struct pci_driver i82801ib_usb5 __pci_driver = {
+	.ops	= &usb_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801IB_USB5,
+};
+
+static const struct pci_driver i82801ib_usb6 __pci_driver = {
+	.ops	= &usb_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801IB_USB6,
+};
+
+/* 82801E (C-ICH) */
+static const struct pci_driver i82801e_usb __pci_driver = {
+	.ops	= &usb_ops,
+	.vendor	= PCI_VENDOR_ID_INTEL,
+	.device	= PCI_DEVICE_ID_INTEL_82801E_USB,
+};

Modified: trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_usb_ehci.c
===================================================================
--- trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_usb_ehci.c	2007-11-07 19:07:17 UTC (rev 2950)
+++ trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_usb_ehci.c	2007-11-07 22:09:02 UTC (rev 2951)
@@ -23,7 +23,6 @@
 #include <device/device.h>
 #include <device/pci.h>
 #include <device/pci_ids.h>
-#include <device/pci_ops.h>
 #include "i82801xx.h"
 
 static void usb_ehci_init(struct device *dev)





More information about the coreboot mailing list