]> xenbits.xen.org Git - xenclient/kernel.git/commitdiff
FLR - intermediate checkin 10 3/28 - use vendor, device, class fields
authorRoss Philipson <ross.philipson@citrix.com>
Sat, 28 Mar 2009 17:03:30 +0000 (13:03 -0400)
committerRoss Philipson <ross.philipson@citrix.com>
Sat, 28 Mar 2009 17:03:30 +0000 (13:03 -0400)
in pci dev struct.

 Changes to be committed:
modified:   drivers/xen/pciback/pciback_ops.c

drivers/xen/pciback/pciback_ops.c

index 1c74b0b16ed162bc66034baf43fdbd5ddbfc3a67..b9b5492e8bd4d866547c056b5bc988bc2cc4e02d 100644 (file)
@@ -57,7 +57,7 @@ void pciback_reload_config_space(struct pci_dev *dev)
  */
 void pciback_reset_device(struct pci_dev *dev)
 {
-       u16 cmd;
+       u16 cmd = 0;
 
        /* Disable devices (but not bridges) */
        if (dev->hdr_type == PCI_HEADER_TYPE_NORMAL) {
@@ -83,7 +83,7 @@ void pciback_reset_device(struct pci_dev *dev)
  */
 static void pciback_do_pcie_flr(struct pci_dev *dev, int exp_pos)
 {
-       u16 status;
+       u16 status = 0;
        
        dev_dbg(&dev->dev, "doing PCIe FLR\n"); 
 
@@ -114,7 +114,7 @@ static void pciback_do_pcie_flr(struct pci_dev *dev, int exp_pos)
  */
 static void pciback_do_pci_flr(struct pci_dev *dev, int af_pos)
 {
-       u8 status;
+       u8 status = 0;
 
        dev_dbg(&dev->dev, "doing PCI FLR\n");
 
@@ -150,18 +150,16 @@ static int pciback_do_vendor_specific_reset(struct pci_dev *dev)
 {
        struct pci_dev *gmch;
        int vendor_pos, i;
-       u32 reg32;
-       u16 vendor_id, device_id, class_id;     
-       u8 reg8;
+       u32 reg32 = 0;
+       u16 device_id;  
+       u8 reg8 = 0;
 
        dev_dbg(&dev->dev, "doing vendor specific resets\n");   
 
-       pci_read_config_word(dev, PCI_VENDOR_ID, &vendor_id);
-       if (vendor_id != PCIBACK_VENDOR_INTEL)
+       if (dev->vendor != PCIBACK_VENDOR_INTEL)
                return -ENXIO;
 
-       pci_read_config_word(dev, PCI_CLASS_DEVICE, &class_id);
-       if (class_id == PCIBACK_CLASS_ID_VGA) {
+       if ((dev->class >> 8) == PCIBACK_CLASS_ID_VGA) {
                if (dev->bus->number != 0 || dev->devfn != PCI_DEVFN(2,0))
                        return -ENXIO;
 
@@ -170,7 +168,7 @@ static int pciback_do_vendor_specific_reset(struct pci_dev *dev)
                if (!gmch)
                        return -ENXIO;
 
-               pci_read_config_word(gmch, PCI_DEVICE_ID, &device_id);
+               device_id = gmch->device;
                pci_dev_put(gmch);
 
                if (device_id != PCI_DEVICE_ID_INTEL_GMCHGM45)
@@ -184,7 +182,7 @@ static int pciback_do_vendor_specific_reset(struct pci_dev *dev)
                        return -ENXIO;
 
                vendor_pos = PCIBACK_IGFX_CAP09_OFFSET;
-       } else if (class_id == PCIBACK_CLASS_ID_USB) {
+       } else if ((dev->class >> 8) == PCIBACK_CLASS_ID_USB) {
                vendor_pos = pci_find_capability(dev, PCI_CAP_ID_VNDR);
                if (vendor_pos == 0)
                        return -ENXIO;
@@ -192,7 +190,7 @@ static int pciback_do_vendor_specific_reset(struct pci_dev *dev)
        else
                return -ENXIO;  
 
-       if (class_id == PCIBACK_CLASS_ID_VGA) {
+       if ((dev->class >> 8) == PCIBACK_CLASS_ID_VGA) {
                pci_write_config_byte(dev, PCIBACK_IGFX_MEDIARST_OFFSET, PCIBACK_IGFX_MEDIARST);
                for (i = 0; i <= 10; i++) {
                        msleep(100);
@@ -228,7 +226,7 @@ out:
 static int pciback_do_dstate_transition_reset(struct pci_dev *dev)
 {
        int pm_pos;
-       u32 pm_ctl;
+       u32 pm_ctl = 0;
 
        pm_pos = pci_find_capability(dev, PCI_CAP_ID_PM);
        if (pm_pos == 0)
@@ -271,11 +269,10 @@ static int pciback_do_dstate_transition_reset(struct pci_dev *dev)
 static int pciback_do_secondary_bus_reset(struct pci_dev *dev)
 {
        struct pci_dev *bridge = dev->bus->self;
-       u16 pci_bctl;
+       u16 pci_bctl = 0;
        struct pci_dev *dev_tmp;
        struct pci_dev *dev_arr[8];
-       int i = 0;
-       int err = 0;
+       int i = 0, err = 0;
 
        dev_dbg(&dev->dev, "doing PCIe secondary bus reset\n"); 
 
@@ -410,7 +407,7 @@ void pciback_flr_device(struct pci_dev *dev)
 static int pciback_find_pcie_flr_caps(struct pci_dev *dev)
 {
        int exp_pos;
-       u32 cap;
+       u32 cap = 0;
 
        /* First look for the PCIe FLR capabilities using the capabilities list */
        exp_pos = pci_find_capability(dev, PCI_CAP_ID_EXP);
@@ -434,8 +431,8 @@ static int pciback_find_pci_flr_caps(struct pci_dev *dev)
 {
        struct pci_dev *gmch;
        int af_pos;
-       u16 vendor_id, device_id, class_id;
-       u8 cap, reg8;
+       u16 device_id;
+       u8 cap = 0, reg8 = 0;
 
        /* First look for the PCI AF capabilities for FLR using the capabilities list. This
         * is only used on the devices on the root/host bus (integrated devices). 
@@ -456,13 +453,8 @@ static int pciback_find_pci_flr_caps(struct pci_dev *dev)
         * systems has special logic for locating the hidden FLR caps.
      */
        do {
-               if (dev->bus->number != 0 || dev->devfn != PCI_DEVFN(2,0))
-                       break;
-               pci_read_config_word(dev, PCI_VENDOR_ID, &vendor_id);
-               if (vendor_id != PCIBACK_VENDOR_INTEL)
-                       break;
-               pci_read_config_word(dev, PCI_CLASS_DEVICE, &class_id);
-               if (class_id != PCIBACK_CLASS_ID_VGA)
+               if (dev->bus->number != 0 || dev->devfn != PCI_DEVFN(2,0) ||
+                       dev->vendor != PCIBACK_VENDOR_INTEL || (dev->class >> 8) != PCIBACK_CLASS_ID_VGA)
                        break;
 
                /* Locate the GMCH (north bridge) and test for specific Intel devices */
@@ -470,7 +462,7 @@ static int pciback_find_pci_flr_caps(struct pci_dev *dev)
                if (!gmch)
                        break;
 
-               pci_read_config_word(gmch, PCI_DEVICE_ID, &device_id);
+               device_id = gmch->device;
                pci_dev_put(gmch);
 
                if (device_id != PCI_DEVICE_ID_INTEL_GMCHQ45 &&
@@ -499,21 +491,15 @@ static int pciback_find_pci_flr_caps(struct pci_dev *dev)
 void pciback_classify_device(struct pci_dev *dev)
 {
        struct pciback_dev_data *dev_data;
-       int err = 0;
-       u16 dev_class, exp_caps;
        int exp_pos;
+       u16 exp_caps = 0;
 
        dev_data = pci_get_drvdata(dev);
        dev_data->dev_type = PCIBACK_TYPE_UNKNOWN;
 
-       err = pci_read_config_word(dev, PCI_CLASS_DEVICE, &dev_class);
-       if (err) {
-               dev_warn(&dev->dev, "failed to read PCI class information!\n");
-               goto classify_done;
-       }       
        exp_pos = pci_find_capability(dev, PCI_CAP_ID_EXP);
        
-       if (dev_class != DEV_CLASS_PCI_PCI_BRIDGE) {
+       if ((dev->class >> 8) != DEV_CLASS_PCI_PCI_BRIDGE) {
                if (exp_pos != 0) {
                        dev_data->dev_type = PCIBACK_TYPE_PCIe_ENDPOINT;
                        dev_data->exp_flr_offset = pciback_find_pcie_flr_caps(dev);
@@ -529,11 +515,7 @@ void pciback_classify_device(struct pci_dev *dev)
                goto classify_done;
        }
 
-       err = pci_read_config_word(dev, exp_pos + PCI_EXP_FLAGS, &exp_caps);
-       if (err) {
-               dev_warn(&dev->dev, "failed to read PCI Express flags!\n");
-               goto classify_done;
-       }
+       pci_read_config_word(dev, exp_pos + PCI_EXP_FLAGS, &exp_caps);
        dev_data->dev_type = ((PCI_EXP_FLAGS_TYPE >> 4) == PCI_EXP_TYPE_PCI_BRIDGE) ? PCIBACK_TYPE_PCI_BRIDGE : PCIBACK_TYPE_PCIe_BRIDGE;
 
 classify_done: