]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/pci/hotplug/pciehp.h
Merge branch 'linus' into release
[linux-2.6-omap-h63xx.git] / drivers / pci / hotplug / pciehp.h
index c367978bd7feb21e57580f4fcc8ed4e23ff8d4dc..db85284ffb621a98d93252f8c6d6069aa43fb006 100644 (file)
@@ -74,15 +74,13 @@ extern struct workqueue_struct *pciehp_wq;
 struct slot {
        u8 bus;
        u8 device;
-       u32 number;
        u8 state;
-       struct timer_list task_event;
        u8 hp_slot;
+       u32 number;
        struct controller *ctrl;
        struct hpc_ops *hpc_ops;
        struct hotplug_slot *hotplug_slot;
        struct list_head        slot_list;
-       char name[SLOT_NAME_SIZE];
        unsigned long last_emi_toggle;
        struct delayed_work work;       /* work for button event */
        struct mutex lock;
@@ -112,6 +110,7 @@ struct controller {
        struct timer_list poll_timer;
        int cmd_busy;
        unsigned int no_cmd_complete:1;
+       unsigned int link_active_reporting:1;
 };
 
 #define INT_BUTTON_IGNORE              0
@@ -175,6 +174,11 @@ int pciehp_enable_slot(struct slot *p_slot);
 int pciehp_disable_slot(struct slot *p_slot);
 int pcie_enable_notification(struct controller *ctrl);
 
+static inline const char *slot_name(struct slot *slot)
+{
+       return hotplug_slot_name(slot->hotplug_slot);
+}
+
 static inline struct slot *pciehp_find_slot(struct controller *ctrl, u8 device)
 {
        struct slot *slot;
@@ -184,7 +188,7 @@ static inline struct slot *pciehp_find_slot(struct controller *ctrl, u8 device)
                        return slot;
        }
 
-       ctrl_err(ctrl, "%s: slot (device=0x%x) not found\n", __func__, device);
+       ctrl_err(ctrl, "Slot (device=0x%02x) not found\n", device);
        return NULL;
 }
 
@@ -213,14 +217,25 @@ struct hpc_ops {
 #ifdef CONFIG_ACPI
 #include <acpi/acpi.h>
 #include <acpi/acpi_bus.h>
-#include <acpi/actypes.h>
 #include <linux/pci-acpi.h>
 
+extern void __init pciehp_acpi_slot_detection_init(void);
+extern int pciehp_acpi_slot_detection_check(struct pci_dev *dev);
+
+static inline void pciehp_firmware_init(void)
+{
+       pciehp_acpi_slot_detection_init();
+}
+
 static inline int pciehp_get_hp_hw_control_from_firmware(struct pci_dev *dev)
 {
+       int retval;
        u32 flags = (OSC_PCI_EXPRESS_NATIVE_HP_CONTROL |
                     OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL);
-       return acpi_get_hp_hw_control_from_firmware(dev, flags);
+       retval = acpi_get_hp_hw_control_from_firmware(dev, flags);
+       if (retval)
+               return retval;
+       return pciehp_acpi_slot_detection_check(dev);
 }
 
 static inline int pciehp_get_hp_params_from_firmware(struct pci_dev *dev,
@@ -231,6 +246,7 @@ static inline int pciehp_get_hp_params_from_firmware(struct pci_dev *dev,
        return 0;
 }
 #else
+#define pciehp_firmware_init()                         do {} while (0)
 #define pciehp_get_hp_hw_control_from_firmware(dev)    0
 #define pciehp_get_hp_params_from_firmware(dev, hpp)    (-ENODEV)
 #endif                                 /* CONFIG_ACPI */