Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
pci_hotplug.h
Go to the documentation of this file.
1 /*
2  * PCI HotPlug Core Functions
3  *
4  * Copyright (C) 1995,2001 Compaq Computer Corporation
5  * Copyright (C) 2001 Greg Kroah-Hartman ([email protected])
6  * Copyright (C) 2001 IBM Corp.
7  *
8  * All rights reserved.
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or (at
13  * your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful, but
16  * WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
18  * NON INFRINGEMENT. See the GNU General Public License for more
19  * details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program; if not, write to the Free Software
23  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24  *
25  * Send feedback to <[email protected]>
26  *
27  */
28 #ifndef _PCI_HOTPLUG_H
29 #define _PCI_HOTPLUG_H
30 
31 /* These values come from the PCI Express Spec */
34  PCIE_LNK_X1 = 0x01,
35  PCIE_LNK_X2 = 0x02,
36  PCIE_LNK_X4 = 0x04,
37  PCIE_LNK_X8 = 0x08,
38  PCIE_LNK_X12 = 0x0C,
39  PCIE_LNK_X16 = 0x10,
40  PCIE_LNK_X32 = 0x20,
42 };
43 
73  struct module *owner;
74  const char *mod_name;
75  int (*enable_slot) (struct hotplug_slot *slot);
76  int (*disable_slot) (struct hotplug_slot *slot);
77  int (*set_attention_status) (struct hotplug_slot *slot, u8 value);
78  int (*hardware_test) (struct hotplug_slot *slot, u32 value);
79  int (*get_power_status) (struct hotplug_slot *slot, u8 *value);
80  int (*get_attention_status) (struct hotplug_slot *slot, u8 *value);
81  int (*get_latch_status) (struct hotplug_slot *slot, u8 *value);
82  int (*get_adapter_status) (struct hotplug_slot *slot, u8 *value);
83 };
84 
99 };
100 
111 struct hotplug_slot {
112  struct hotplug_slot_ops *ops;
113  struct hotplug_slot_info *info;
114  void (*release) (struct hotplug_slot *slot);
115  void *private;
116 
117  /* Variables below this are for use only by the hotplug pci core. */
118  struct list_head slot_list;
119  struct pci_slot *pci_slot;
120 };
121 #define to_hotplug_slot(n) container_of(n, struct hotplug_slot, kobj)
122 
123 static inline const char *hotplug_slot_name(const struct hotplug_slot *slot)
124 {
125  return pci_slot_name(slot->pci_slot);
126 }
127 
128 extern int __pci_hp_register(struct hotplug_slot *slot, struct pci_bus *pbus,
129  int nr, const char *name,
130  struct module *owner, const char *mod_name);
131 extern int pci_hp_deregister(struct hotplug_slot *slot);
132 extern int __must_check pci_hp_change_slot_info (struct hotplug_slot *slot,
133  struct hotplug_slot_info *info);
134 
135 /* use a define to avoid include chaining to get THIS_MODULE & friends */
136 #define pci_hp_register(slot, pbus, devnr, name) \
137  __pci_hp_register(slot, pbus, devnr, name, THIS_MODULE, KBUILD_MODNAME)
138 
139 /* PCI Setting Record (Type 0) */
140 struct hpp_type0 {
146 };
147 
148 /* PCI-X Setting Record (Type 1) */
149 struct hpp_type1 {
154 };
155 
156 /* PCI Express Setting Record (Type 2) */
157 struct hpp_type2 {
175 };
176 
178  struct hpp_type0 *t0; /* Type0: NULL if not available */
179  struct hpp_type1 *t1; /* Type1: NULL if not available */
180  struct hpp_type2 *t2; /* Type2: NULL if not available */
184 };
185 
186 #ifdef CONFIG_ACPI
187 #include <acpi/acpi.h>
188 #include <acpi/acpi_bus.h>
189 int pci_get_hp_params(struct pci_dev *dev, struct hotplug_params *hpp);
193 #else
194 static inline int pci_get_hp_params(struct pci_dev *dev,
195  struct hotplug_params *hpp)
196 {
197  return -ENODEV;
198 }
199 #endif
200 
201 void pci_configure_slot(struct pci_dev *dev);
202 #endif
203