1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28#ifndef _PCI_HOTPLUG_H
29#define _PCI_HOTPLUG_H
30
31
32
33enum pci_bus_speed {
34 PCI_SPEED_33MHz = 0x00,
35 PCI_SPEED_66MHz = 0x01,
36 PCI_SPEED_66MHz_PCIX = 0x02,
37 PCI_SPEED_100MHz_PCIX = 0x03,
38 PCI_SPEED_133MHz_PCIX = 0x04,
39 PCI_SPEED_66MHz_PCIX_ECC = 0x05,
40 PCI_SPEED_100MHz_PCIX_ECC = 0x06,
41 PCI_SPEED_133MHz_PCIX_ECC = 0x07,
42 PCI_SPEED_66MHz_PCIX_266 = 0x09,
43 PCI_SPEED_100MHz_PCIX_266 = 0x0a,
44 PCI_SPEED_133MHz_PCIX_266 = 0x0b,
45 PCI_SPEED_66MHz_PCIX_533 = 0x11,
46 PCI_SPEED_100MHz_PCIX_533 = 0x12,
47 PCI_SPEED_133MHz_PCIX_533 = 0x13,
48 PCI_SPEED_UNKNOWN = 0xff,
49};
50
51
52enum pcie_link_width {
53 PCIE_LNK_WIDTH_RESRV = 0x00,
54 PCIE_LNK_X1 = 0x01,
55 PCIE_LNK_X2 = 0x02,
56 PCIE_LNK_X4 = 0x04,
57 PCIE_LNK_X8 = 0x08,
58 PCIE_LNK_X12 = 0x0C,
59 PCIE_LNK_X16 = 0x10,
60 PCIE_LNK_X32 = 0x20,
61 PCIE_LNK_WIDTH_UNKNOWN = 0xFF,
62};
63
64enum pcie_link_speed {
65 PCIE_2PT5GB = 0x14,
66 PCIE_LNK_SPEED_UNKNOWN = 0xFF,
67};
68
69struct hotplug_slot;
70struct hotplug_slot_core;
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108struct hotplug_slot_ops {
109 struct module *owner;
110 int (*enable_slot) (struct hotplug_slot *slot);
111 int (*disable_slot) (struct hotplug_slot *slot);
112 int (*set_attention_status) (struct hotplug_slot *slot, u8 value);
113 int (*hardware_test) (struct hotplug_slot *slot, u32 value);
114 int (*get_power_status) (struct hotplug_slot *slot, u8 *value);
115 int (*get_attention_status) (struct hotplug_slot *slot, u8 *value);
116 int (*get_latch_status) (struct hotplug_slot *slot, u8 *value);
117 int (*get_adapter_status) (struct hotplug_slot *slot, u8 *value);
118 int (*get_address) (struct hotplug_slot *slot, u32 *value);
119 int (*get_max_bus_speed) (struct hotplug_slot *slot, enum pci_bus_speed *value);
120 int (*get_cur_bus_speed) (struct hotplug_slot *slot, enum pci_bus_speed *value);
121};
122
123
124
125
126
127
128
129
130
131
132
133struct hotplug_slot_info {
134 u8 power_status;
135 u8 attention_status;
136 u8 latch_status;
137 u8 adapter_status;
138 u32 address;
139 enum pci_bus_speed max_bus_speed;
140 enum pci_bus_speed cur_bus_speed;
141};
142
143
144
145
146
147
148
149
150
151
152
153struct hotplug_slot {
154 char *name;
155 struct hotplug_slot_ops *ops;
156 struct hotplug_slot_info *info;
157 void *private;
158
159
160 struct list_head slot_list;
161 struct hotplug_slot_core *core_priv;
162};
163
164extern int pci_hp_register (struct hotplug_slot *slot);
165extern int pci_hp_deregister (struct hotplug_slot *slot);
166extern int pci_hp_change_slot_info (const char *name,
167 struct hotplug_slot_info *info);
168
169struct pci_dev_wrapped {
170 struct pci_dev *dev;
171 void *data;
172};
173
174struct pci_bus_wrapped {
175 struct pci_bus *bus;
176 void *data;
177};
178
179struct pci_visit {
180 int (* pre_visit_pci_bus) (struct pci_bus_wrapped *,
181 struct pci_dev_wrapped *);
182 int (* post_visit_pci_bus) (struct pci_bus_wrapped *,
183 struct pci_dev_wrapped *);
184
185 int (* pre_visit_pci_dev) (struct pci_dev_wrapped *,
186 struct pci_bus_wrapped *);
187 int (* visit_pci_dev) (struct pci_dev_wrapped *,
188 struct pci_bus_wrapped *);
189 int (* post_visit_pci_dev) (struct pci_dev_wrapped *,
190 struct pci_bus_wrapped *);
191};
192
193extern int pci_visit_dev (struct pci_visit *fn,
194 struct pci_dev_wrapped *wrapped_dev,
195 struct pci_bus_wrapped *wrapped_parent);
196
197int pci_bus_read_config_byte (struct pci_bus *bus, unsigned int devfn, int where, u8 *val);
198int pci_bus_read_config_word (struct pci_bus *bus, unsigned int devfn, int where, u16 *val);
199int pci_bus_read_config_dword (struct pci_bus *bus, unsigned int devfn, int where, u32 *val);
200int pci_bus_write_config_byte(struct pci_bus *bus, unsigned int devfn, int where, u8 val);
201int pci_bus_write_config_word(struct pci_bus *bus, unsigned int devfn, int where, u16 val);
202int pci_bus_write_config_dword(struct pci_bus *bus, unsigned int devfn, int where, u32 val);
203
204
205
206
207
208
209extern int pci_read_config_byte_nodev (struct pci_ops *ops, u8 bus, u8 device,
210 u8 function, int where, u8 *val);
211extern int pci_read_config_word_nodev (struct pci_ops *ops, u8 bus, u8 device,
212 u8 function, int where, u16 *val);
213extern int pci_read_config_dword_nodev (struct pci_ops *ops, u8 bus, u8 device,
214 u8 function, int where, u32 *val);
215
216extern int pci_write_config_byte_nodev (struct pci_ops *ops, u8 bus, u8 device,
217 u8 function, int where, u8 val);
218extern int pci_write_config_word_nodev (struct pci_ops *ops, u8 bus, u8 device,
219 u8 function, int where, u16 val);
220extern int pci_write_config_dword_nodev (struct pci_ops *ops, u8 bus, u8 device,
221 u8 function, int where, u32 val);
222
223
224#endif
225
226