fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / drivers / pci / hotplug / acpiphp.h
index 293603e..ddbadd9 100644 (file)
@@ -37,7 +37,8 @@
 
 #include <linux/acpi.h>
 #include <linux/kobject.h>     /* for KOBJ_NAME_LEN */
-#include "pci_hotplug.h"
+#include <linux/mutex.h>
+#include <linux/pci_hotplug.h>
 
 #define dbg(format, arg...)                                    \
        do {                                                    \
@@ -59,28 +60,12 @@ struct acpiphp_slot;
  * struct slot - slot information for each *physical* slot
  */
 struct slot {
-       u8 number;
        struct hotplug_slot     *hotplug_slot;
-       struct list_head        slot_list;
-
        struct acpiphp_slot     *acpi_slot;
+       struct hotplug_slot_info info;
+       char name[SLOT_NAME_SIZE];
 };
 
-/**
- * struct hpp_param - ACPI 2.0 _HPP Hot Plug Parameters
- * @cache_line_size in DWORD
- * @latency_timer in PCI clock
- * @enable_SERR 0 or 1
- * @enable_PERR 0 or 1
- */
-struct hpp_param {
-       u8 cache_line_size;
-       u8 latency_timer;
-       u8 enable_SERR;
-       u8 enable_PERR;
-};
-
-
 /**
  * struct acpiphp_bridge - PCI bridge information
  *
@@ -90,6 +75,10 @@ struct acpiphp_bridge {
        struct list_head list;
        acpi_handle handle;
        struct acpiphp_slot *slots;
+
+       /* Ejectable PCI-to-PCI bridge (PCI bridge and PCI function) */
+       struct acpiphp_func *func;
+
        int type;
        int nr_slots;
 
@@ -102,7 +91,7 @@ struct acpiphp_bridge {
        struct pci_dev *pci_dev;
 
        /* ACPI 2.0 _HPP parameters */
-       struct hpp_param hpp;
+       struct hotplug_params hpp;
 
        spinlock_t res_lock;
 };
@@ -118,9 +107,9 @@ struct acpiphp_slot {
        struct acpiphp_bridge *bridge;  /* parent */
        struct list_head funcs;         /* one slot may have different
                                           objects (i.e. for each function) */
-       struct semaphore crit_sect;
+       struct slot *slot;
+       struct mutex crit_sect;
 
-       u32             id;             /* slot id (serial #) for hotplug core */
        u8              device;         /* pci device# */
 
        u32             sun;            /* ACPI _SUN (slot unique number) */
@@ -137,10 +126,11 @@ struct acpiphp_slot {
  */
 struct acpiphp_func {
        struct acpiphp_slot *slot;      /* parent */
+       struct acpiphp_bridge *bridge;  /* Ejectable PCI-to-PCI bridge */
 
        struct list_head sibling;
        struct pci_dev *pci_dev;
-
+       struct notifier_block nb;
        acpi_handle     handle;
 
        u8              function;       /* pci function# */
@@ -160,6 +150,12 @@ struct acpiphp_attention_info
        struct module *owner;
 };
 
+struct acpiphp_ioapic {
+       struct pci_dev *dev;
+       u32 gsi_base;
+       struct list_head list;
+};
+
 /* PCI bus bridge HID */
 #define ACPI_PCI_HOST_HID              "PNP0A03"
 
@@ -197,18 +193,20 @@ struct acpiphp_attention_info
 #define FUNC_HAS_PS1           (0x00000020)
 #define FUNC_HAS_PS2           (0x00000040)
 #define FUNC_HAS_PS3           (0x00000080)
+#define FUNC_HAS_DCK            (0x00000100)
 
 /* function prototypes */
 
 /* acpiphp_core.c */
 extern int acpiphp_register_attention(struct acpiphp_attention_info*info);
 extern int acpiphp_unregister_attention(struct acpiphp_attention_info *info);
+extern int acpiphp_register_hotplug_slot(struct acpiphp_slot *slot);
+extern void acpiphp_unregister_hotplug_slot(struct acpiphp_slot *slot);
 
 /* acpiphp_glue.c */
 extern int acpiphp_glue_init (void);
 extern void acpiphp_glue_exit (void);
 extern int acpiphp_get_num_slots (void);
-extern struct acpiphp_slot *get_slot_from_id (int id);
 typedef int (*acpiphp_callback)(struct acpiphp_slot *slot, void *data);
 
 extern int acpiphp_enable_slot (struct acpiphp_slot *slot);