struct iwl_shared;
 struct iwl_bus;
 
-/**
- * struct iwl_bus_ops - bus specific operations
- * @get_hw_id: get hw_id in u32
- */
-struct iwl_bus_ops {
-       u32 (*get_hw_id)(struct iwl_bus *bus);
-};
-
 /**
  * struct iwl_bus - bus common data
  *
  *     it allocates the shared data
  */
 struct iwl_bus {
-       const struct iwl_bus_ops *ops;
        struct iwl_shared *shrd;
 
        /* pointer to bus specific struct */
        char bus_specific[0] __attribute__((__aligned__(sizeof(void *))));
 };
 
-static inline u32 bus_get_hw_id(struct iwl_bus *bus)
-{
-       return bus->ops->get_hw_id(bus);
-}
-
 /*****************************************************
 * Bus layer registration functions
 ******************************************************/
 
 #include "iwl-csr.h"
 #include "iwl-cfg.h"
 
-/* PCI registers */
-#define PCI_CFG_RETRY_TIMEOUT  0x041
-#define PCI_CFG_LINK_CTRL_VAL_L0S_EN   0x01
-#define PCI_CFG_LINK_CTRL_VAL_L1_EN    0x02
-
-struct iwl_pci_bus {
-       /* basic pci-network driver stuff */
-       struct pci_dev *pci_dev;
-};
-
-#define IWL_BUS_GET_PCI_BUS(_iwl_bus) \
-                       ((struct iwl_pci_bus *) ((_iwl_bus)->bus_specific))
-
-#define IWL_BUS_GET_PCI_DEV(_iwl_bus) \
-                       ((IWL_BUS_GET_PCI_BUS(_iwl_bus))->pci_dev)
-
-static u32 iwl_pci_get_hw_id(struct iwl_bus *bus)
-{
-       struct pci_dev *pci_dev = IWL_BUS_GET_PCI_DEV(bus);
-
-       return (pci_dev->device << 16) + pci_dev->subsystem_device;
-}
-
-static const struct iwl_bus_ops bus_ops_pci = {
-       .get_hw_id = iwl_pci_get_hw_id,
-};
-
 #define IWL_PCI_DEVICE(dev, subdev, cfg) \
        .vendor = PCI_VENDOR_ID_INTEL,  .device = (dev), \
        .subvendor = PCI_ANY_ID, .subdevice = (subdev), \
 };
 MODULE_DEVICE_TABLE(pci, iwl_hw_card_ids);
 
+/* PCI registers */
+#define PCI_CFG_RETRY_TIMEOUT  0x041
+
 static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 {
        struct iwl_cfg *cfg = (struct iwl_cfg *)(ent->driver_data);
        struct iwl_bus *bus;
-       struct iwl_pci_bus *pci_bus;
        int err;
 
-       bus = kzalloc(sizeof(*bus) + sizeof(*pci_bus), GFP_KERNEL);
+       bus = kzalloc(sizeof(*bus), GFP_KERNEL);
        if (!bus) {
                dev_printk(KERN_ERR, &pdev->dev,
                           "Couldn't allocate iwl_pci_bus");
        }
 
        bus->shrd->bus = bus;
-       pci_bus = IWL_BUS_GET_PCI_BUS(bus);
-       pci_bus->pci_dev = pdev;
 
        pci_set_drvdata(pdev, bus);
 
-       bus->ops = &bus_ops_pci;
-
 #ifdef CONFIG_IWLWIFI_IDI
        trans(bus) = iwl_trans_idi_alloc(bus->shrd, pdev, ent);
        if (trans(bus) == NULL) {
 
  * @reg_lock - protect hw register access
  * @dev - pointer to struct device * that represents the device
  * @irq - the irq number for the device
+ * @hw_id: a u32 with the ID of the device / subdevice.
+  *    Set during transport alloaction.
  * @hw_id_str: a string with info about HW ID. Set during transport allocation.
  * @ucode_write_complete: indicates that the ucode has been copied.
  * @ucode_rt: run time ucode image
 
        struct device *dev;
        unsigned int irq;
+       u32 hw_id;
        char hw_id_str[52];
 
        u8 ucode_write_complete;        /* the image write is complete */