1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#ifndef LINUX_PCI_H
18#define LINUX_PCI_H
19
20#include <linux/pci_regs.h>
21
22
23
24
25
26
27
28
29
30#define PCI_DEVFN(slot, func) ((((slot) & 0x1f) << 3) | ((func) & 0x07))
31#define PCI_SLOT(devfn) (((devfn) >> 3) & 0x1f)
32#define PCI_FUNC(devfn) ((devfn) & 0x07)
33
34
35#define PCIIOC_BASE ('P' << 24 | 'C' << 16 | 'I' << 8)
36#define PCIIOC_CONTROLLER (PCIIOC_BASE | 0x00)
37#define PCIIOC_MMAP_IS_IO (PCIIOC_BASE | 0x01)
38#define PCIIOC_MMAP_IS_MEM (PCIIOC_BASE | 0x02)
39#define PCIIOC_WRITE_COMBINE (PCIIOC_BASE | 0x03)
40
41#ifdef __KERNEL__
42
43#include <linux/mod_devicetable.h>
44
45#include <linux/types.h>
46#include <linux/init.h>
47#include <linux/ioport.h>
48#include <linux/list.h>
49#include <linux/compiler.h>
50#include <linux/errno.h>
51#include <linux/kobject.h>
52#include <asm/atomic.h>
53#include <linux/device.h>
54#include <linux/io.h>
55#include <linux/irqreturn.h>
56
57
58#include <linux/pci_ids.h>
59
60
61struct pci_slot {
62 struct pci_bus *bus;
63 struct list_head list;
64 struct hotplug_slot *hotplug;
65 unsigned char number;
66 struct kobject kobj;
67};
68
69static inline const char *pci_slot_name(const struct pci_slot *slot)
70{
71 return kobject_name(&slot->kobj);
72}
73
74
75enum pci_mmap_state {
76 pci_mmap_io,
77 pci_mmap_mem
78};
79
80
81#define PCI_DMA_BIDIRECTIONAL 0
82#define PCI_DMA_TODEVICE 1
83#define PCI_DMA_FROMDEVICE 2
84#define PCI_DMA_NONE 3
85
86
87
88
89enum {
90
91 PCI_STD_RESOURCES,
92 PCI_STD_RESOURCE_END = 5,
93
94
95 PCI_ROM_RESOURCE,
96
97
98#ifdef CONFIG_PCI_IOV
99 PCI_IOV_RESOURCES,
100 PCI_IOV_RESOURCE_END = PCI_IOV_RESOURCES + PCI_SRIOV_NUM_BARS - 1,
101#endif
102
103
104#define PCI_BRIDGE_RESOURCE_NUM 4
105
106 PCI_BRIDGE_RESOURCES,
107 PCI_BRIDGE_RESOURCE_END = PCI_BRIDGE_RESOURCES +
108 PCI_BRIDGE_RESOURCE_NUM - 1,
109
110
111 PCI_NUM_RESOURCES,
112
113
114 DEVICE_COUNT_RESOURCE
115};
116
117typedef int __bitwise pci_power_t;
118
119#define PCI_D0 ((pci_power_t __force) 0)
120#define PCI_D1 ((pci_power_t __force) 1)
121#define PCI_D2 ((pci_power_t __force) 2)
122#define PCI_D3hot ((pci_power_t __force) 3)
123#define PCI_D3cold ((pci_power_t __force) 4)
124#define PCI_UNKNOWN ((pci_power_t __force) 5)
125#define PCI_POWER_ERROR ((pci_power_t __force) -1)
126
127
128extern const char *pci_power_names[];
129
130static inline const char *pci_power_name(pci_power_t state)
131{
132 return pci_power_names[1 + (int) state];
133}
134
135#define PCI_PM_D2_DELAY 200
136#define PCI_PM_D3_WAIT 10
137#define PCI_PM_BUS_WAIT 50
138
139
140
141
142
143typedef unsigned int __bitwise pci_channel_state_t;
144
145enum pci_channel_state {
146
147 pci_channel_io_normal = (__force pci_channel_state_t) 1,
148
149
150 pci_channel_io_frozen = (__force pci_channel_state_t) 2,
151
152
153 pci_channel_io_perm_failure = (__force pci_channel_state_t) 3,
154};
155
156typedef unsigned int __bitwise pcie_reset_state_t;
157
158enum pcie_reset_state {
159
160 pcie_deassert_reset = (__force pcie_reset_state_t) 1,
161
162
163 pcie_warm_reset = (__force pcie_reset_state_t) 2,
164
165
166 pcie_hot_reset = (__force pcie_reset_state_t) 3
167};
168
169typedef unsigned short __bitwise pci_dev_flags_t;
170enum pci_dev_flags {
171
172
173
174 PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG = (__force pci_dev_flags_t) 1,
175
176 PCI_DEV_FLAGS_NO_D3 = (__force pci_dev_flags_t) 2,
177};
178
179enum pci_irq_reroute_variant {
180 INTEL_IRQ_REROUTE_VARIANT = 1,
181 MAX_IRQ_REROUTE_VARIANTS = 3
182};
183
184typedef unsigned short __bitwise pci_bus_flags_t;
185enum pci_bus_flags {
186 PCI_BUS_FLAGS_NO_MSI = (__force pci_bus_flags_t) 1,
187 PCI_BUS_FLAGS_NO_MMRBC = (__force pci_bus_flags_t) 2,
188};
189
190struct pci_cap_saved_state {
191 struct hlist_node next;
192 char cap_nr;
193 u32 data[0];
194};
195
196struct pcie_link_state;
197struct pci_vpd;
198struct pci_sriov;
199struct pci_ats;
200
201
202
203
204struct pci_dev {
205 struct list_head bus_list;
206 struct pci_bus *bus;
207 struct pci_bus *subordinate;
208
209 void *sysdata;
210 struct proc_dir_entry *procent;
211 struct pci_slot *slot;
212
213 unsigned int devfn;
214 unsigned short vendor;
215 unsigned short device;
216 unsigned short subsystem_vendor;
217 unsigned short subsystem_device;
218 unsigned int class;
219 u8 revision;
220 u8 hdr_type;
221 u8 pcie_type;
222 u8 rom_base_reg;
223 u8 pin;
224
225 struct pci_driver *driver;
226 u64 dma_mask;
227
228
229
230
231
232 struct device_dma_parameters dma_parms;
233
234 pci_power_t current_state;
235
236
237 int pm_cap;
238
239 unsigned int pme_support:5;
240
241 unsigned int d1_support:1;
242 unsigned int d2_support:1;
243 unsigned int no_d1d2:1;
244
245#ifdef CONFIG_PCIEASPM
246 struct pcie_link_state *link_state;
247#endif
248
249 pci_channel_state_t error_state;
250 struct device dev;
251
252 int cfg_size;
253
254
255
256
257
258 unsigned int irq;
259 struct resource resource[DEVICE_COUNT_RESOURCE];
260
261
262 unsigned int transparent:1;
263 unsigned int multifunction:1;
264
265 unsigned int is_added:1;
266 unsigned int is_busmaster:1;
267 unsigned int no_msi:1;
268 unsigned int block_ucfg_access:1;
269 unsigned int broken_parity_status:1;
270 unsigned int irq_reroute_variant:2;
271 unsigned int msi_enabled:1;
272 unsigned int msix_enabled:1;
273 unsigned int ari_enabled:1;
274 unsigned int is_managed:1;
275 unsigned int is_pcie:1;
276 unsigned int state_saved:1;
277 unsigned int is_physfn:1;
278 unsigned int is_virtfn:1;
279 pci_dev_flags_t dev_flags;
280 atomic_t enable_cnt;
281
282 u32 saved_config_space[16];
283 struct hlist_head saved_cap_space;
284 struct bin_attribute *rom_attr;
285 int rom_attr_enabled;
286 struct bin_attribute *res_attr[DEVICE_COUNT_RESOURCE];
287 struct bin_attribute *res_attr_wc[DEVICE_COUNT_RESOURCE];
288#ifdef CONFIG_PCI_MSI
289 struct list_head msi_list;
290#endif
291 struct pci_vpd *vpd;
292#ifdef CONFIG_PCI_IOV
293 union {
294 struct pci_sriov *sriov;
295 struct pci_dev *physfn;
296 };
297 struct pci_ats *ats;
298#endif
299};
300
301extern struct pci_dev *alloc_pci_dev(void);
302
303#define pci_dev_b(n) list_entry(n, struct pci_dev, bus_list)
304#define to_pci_dev(n) container_of(n, struct pci_dev, dev)
305#define for_each_pci_dev(d) while ((d = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, d)) != NULL)
306
307static inline int pci_channel_offline(struct pci_dev *pdev)
308{
309 return (pdev->error_state != pci_channel_io_normal);
310}
311
312static inline struct pci_cap_saved_state *pci_find_saved_cap(
313 struct pci_dev *pci_dev, char cap)
314{
315 struct pci_cap_saved_state *tmp;
316 struct hlist_node *pos;
317
318 hlist_for_each_entry(tmp, pos, &pci_dev->saved_cap_space, next) {
319 if (tmp->cap_nr == cap)
320 return tmp;
321 }
322 return NULL;
323}
324
325static inline void pci_add_saved_cap(struct pci_dev *pci_dev,
326 struct pci_cap_saved_state *new_cap)
327{
328 hlist_add_head(&new_cap->next, &pci_dev->saved_cap_space);
329}
330
331#ifndef PCI_BUS_NUM_RESOURCES
332#define PCI_BUS_NUM_RESOURCES 16
333#endif
334
335#define PCI_REGION_FLAG_MASK 0x0fU
336
337struct pci_bus {
338 struct list_head node;
339 struct pci_bus *parent;
340 struct list_head children;
341 struct list_head devices;
342 struct pci_dev *self;
343 struct list_head slots;
344 struct resource *resource[PCI_BUS_NUM_RESOURCES];
345
346
347 struct pci_ops *ops;
348 void *sysdata;
349 struct proc_dir_entry *procdir;
350
351 unsigned char number;
352 unsigned char primary;
353 unsigned char secondary;
354 unsigned char subordinate;
355
356 char name[48];
357
358 unsigned short bridge_ctl;
359 pci_bus_flags_t bus_flags;
360 struct device *bridge;
361 struct device dev;
362 struct bin_attribute *legacy_io;
363 struct bin_attribute *legacy_mem;
364 unsigned int is_added:1;
365};
366
367#define pci_bus_b(n) list_entry(n, struct pci_bus, node)
368#define to_pci_bus(n) container_of(n, struct pci_bus, dev)
369
370
371
372
373
374static inline bool pci_is_root_bus(struct pci_bus *pbus)
375{
376 return !(pbus->parent);
377}
378
379#ifdef CONFIG_PCI_MSI
380static inline bool pci_dev_msi_enabled(struct pci_dev *pci_dev)
381{
382 return pci_dev->msi_enabled || pci_dev->msix_enabled;
383}
384#else
385static inline bool pci_dev_msi_enabled(struct pci_dev *pci_dev) { return false; }
386#endif
387
388
389
390
391#define PCIBIOS_SUCCESSFUL 0x00
392#define PCIBIOS_FUNC_NOT_SUPPORTED 0x81
393#define PCIBIOS_BAD_VENDOR_ID 0x83
394#define PCIBIOS_DEVICE_NOT_FOUND 0x86
395#define PCIBIOS_BAD_REGISTER_NUMBER 0x87
396#define PCIBIOS_SET_FAILED 0x88
397#define PCIBIOS_BUFFER_TOO_SMALL 0x89
398
399
400
401struct pci_ops {
402 int (*read)(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 *val);
403 int (*write)(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 val);
404};
405
406
407
408
409
410extern int raw_pci_read(unsigned int domain, unsigned int bus,
411 unsigned int devfn, int reg, int len, u32 *val);
412extern int raw_pci_write(unsigned int domain, unsigned int bus,
413 unsigned int devfn, int reg, int len, u32 val);
414
415struct pci_bus_region {
416 resource_size_t start;
417 resource_size_t end;
418};
419
420struct pci_dynids {
421 spinlock_t lock;
422 struct list_head list;
423};
424
425
426
427
428
429
430
431
432typedef unsigned int __bitwise pci_ers_result_t;
433
434enum pci_ers_result {
435
436 PCI_ERS_RESULT_NONE = (__force pci_ers_result_t) 1,
437
438
439 PCI_ERS_RESULT_CAN_RECOVER = (__force pci_ers_result_t) 2,
440
441
442 PCI_ERS_RESULT_NEED_RESET = (__force pci_ers_result_t) 3,
443
444
445 PCI_ERS_RESULT_DISCONNECT = (__force pci_ers_result_t) 4,
446
447
448 PCI_ERS_RESULT_RECOVERED = (__force pci_ers_result_t) 5,
449};
450
451
452struct pci_error_handlers {
453
454 pci_ers_result_t (*error_detected)(struct pci_dev *dev,
455 enum pci_channel_state error);
456
457
458 pci_ers_result_t (*mmio_enabled)(struct pci_dev *dev);
459
460
461 pci_ers_result_t (*link_reset)(struct pci_dev *dev);
462
463
464 pci_ers_result_t (*slot_reset)(struct pci_dev *dev);
465
466
467 void (*resume)(struct pci_dev *dev);
468};
469
470
471
472struct module;
473struct pci_driver {
474 struct list_head node;
475 char *name;
476 const struct pci_device_id *id_table;
477 int (*probe) (struct pci_dev *dev, const struct pci_device_id *id);
478 void (*remove) (struct pci_dev *dev);
479 int (*suspend) (struct pci_dev *dev, pm_message_t state);
480 int (*suspend_late) (struct pci_dev *dev, pm_message_t state);
481 int (*resume_early) (struct pci_dev *dev);
482 int (*resume) (struct pci_dev *dev);
483 void (*shutdown) (struct pci_dev *dev);
484 struct pci_error_handlers *err_handler;
485 struct device_driver driver;
486 struct pci_dynids dynids;
487};
488
489#define to_pci_driver(drv) container_of(drv, struct pci_driver, driver)
490
491
492
493
494
495
496
497
498#define DEFINE_PCI_DEVICE_TABLE(_table) \
499 const struct pci_device_id _table[] __devinitconst
500
501
502
503
504
505
506
507
508
509
510#define PCI_DEVICE(vend,dev) \
511 .vendor = (vend), .device = (dev), \
512 .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID
513
514
515
516
517
518
519
520
521
522
523#define PCI_DEVICE_CLASS(dev_class,dev_class_mask) \
524 .class = (dev_class), .class_mask = (dev_class_mask), \
525 .vendor = PCI_ANY_ID, .device = PCI_ANY_ID, \
526 .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID
527
528
529
530
531
532
533
534
535
536
537
538
539#define PCI_VDEVICE(vendor, device) \
540 PCI_VENDOR_ID_##vendor, (device), \
541 PCI_ANY_ID, PCI_ANY_ID, 0, 0
542
543
544#ifdef CONFIG_PCI
545
546extern struct bus_type pci_bus_type;
547
548
549
550extern struct list_head pci_root_buses;
551
552extern int no_pci_devices(void);
553
554void pcibios_fixup_bus(struct pci_bus *);
555int __must_check pcibios_enable_device(struct pci_dev *, int mask);
556char *pcibios_setup(char *str);
557
558
559void pcibios_align_resource(void *, struct resource *, resource_size_t,
560 resource_size_t);
561void pcibios_update_irq(struct pci_dev *, int irq);
562
563
564
565extern struct pci_bus *pci_find_bus(int domain, int busnr);
566void pci_bus_add_devices(const struct pci_bus *bus);
567struct pci_bus *pci_scan_bus_parented(struct device *parent, int bus,
568 struct pci_ops *ops, void *sysdata);
569static inline struct pci_bus * __devinit pci_scan_bus(int bus, struct pci_ops *ops,
570 void *sysdata)
571{
572 struct pci_bus *root_bus;
573 root_bus = pci_scan_bus_parented(NULL, bus, ops, sysdata);
574 if (root_bus)
575 pci_bus_add_devices(root_bus);
576 return root_bus;
577}
578struct pci_bus *pci_create_bus(struct device *parent, int bus,
579 struct pci_ops *ops, void *sysdata);
580struct pci_bus *pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev,
581 int busnr);
582struct pci_slot *pci_create_slot(struct pci_bus *parent, int slot_nr,
583 const char *name,
584 struct hotplug_slot *hotplug);
585void pci_destroy_slot(struct pci_slot *slot);
586void pci_renumber_slot(struct pci_slot *slot, int slot_nr);
587int pci_scan_slot(struct pci_bus *bus, int devfn);
588struct pci_dev *pci_scan_single_device(struct pci_bus *bus, int devfn);
589void pci_device_add(struct pci_dev *dev, struct pci_bus *bus);
590unsigned int pci_scan_child_bus(struct pci_bus *bus);
591int __must_check pci_bus_add_device(struct pci_dev *dev);
592void pci_read_bridge_bases(struct pci_bus *child);
593struct resource *pci_find_parent_resource(const struct pci_dev *dev,
594 struct resource *res);
595u8 pci_swizzle_interrupt_pin(struct pci_dev *dev, u8 pin);
596int pci_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge);
597u8 pci_common_swizzle(struct pci_dev *dev, u8 *pinp);
598extern struct pci_dev *pci_dev_get(struct pci_dev *dev);
599extern void pci_dev_put(struct pci_dev *dev);
600extern void pci_remove_bus(struct pci_bus *b);
601extern void pci_remove_bus_device(struct pci_dev *dev);
602extern void pci_stop_bus_device(struct pci_dev *dev);
603void pci_setup_cardbus(struct pci_bus *bus);
604extern void pci_sort_breadthfirst(void);
605
606
607
608#ifdef CONFIG_PCI_LEGACY
609struct pci_dev __deprecated *pci_find_device(unsigned int vendor,
610 unsigned int device,
611 struct pci_dev *from);
612#endif
613
614enum pci_lost_interrupt_reason {
615 PCI_LOST_IRQ_NO_INFORMATION = 0,
616 PCI_LOST_IRQ_DISABLE_MSI,
617 PCI_LOST_IRQ_DISABLE_MSIX,
618 PCI_LOST_IRQ_DISABLE_ACPI,
619};
620enum pci_lost_interrupt_reason pci_lost_interrupt(struct pci_dev *dev);
621int pci_find_capability(struct pci_dev *dev, int cap);
622int pci_find_next_capability(struct pci_dev *dev, u8 pos, int cap);
623int pci_find_ext_capability(struct pci_dev *dev, int cap);
624int pci_find_ht_capability(struct pci_dev *dev, int ht_cap);
625int pci_find_next_ht_capability(struct pci_dev *dev, int pos, int ht_cap);
626struct pci_bus *pci_find_next_bus(const struct pci_bus *from);
627
628struct pci_dev *pci_get_device(unsigned int vendor, unsigned int device,
629 struct pci_dev *from);
630struct pci_dev *pci_get_subsys(unsigned int vendor, unsigned int device,
631 unsigned int ss_vendor, unsigned int ss_device,
632 struct pci_dev *from);
633struct pci_dev *pci_get_slot(struct pci_bus *bus, unsigned int devfn);
634struct pci_dev *pci_get_bus_and_slot(unsigned int bus, unsigned int devfn);
635struct pci_dev *pci_get_class(unsigned int class, struct pci_dev *from);
636int pci_dev_present(const struct pci_device_id *ids);
637
638int pci_bus_read_config_byte(struct pci_bus *bus, unsigned int devfn,
639 int where, u8 *val);
640int pci_bus_read_config_word(struct pci_bus *bus, unsigned int devfn,
641 int where, u16 *val);
642int pci_bus_read_config_dword(struct pci_bus *bus, unsigned int devfn,
643 int where, u32 *val);
644int pci_bus_write_config_byte(struct pci_bus *bus, unsigned int devfn,
645 int where, u8 val);
646int pci_bus_write_config_word(struct pci_bus *bus, unsigned int devfn,
647 int where, u16 val);
648int pci_bus_write_config_dword(struct pci_bus *bus, unsigned int devfn,
649 int where, u32 val);
650struct pci_ops *pci_bus_set_ops(struct pci_bus *bus, struct pci_ops *ops);
651
652static inline int pci_read_config_byte(struct pci_dev *dev, int where, u8 *val)
653{
654 return pci_bus_read_config_byte(dev->bus, dev->devfn, where, val);
655}
656static inline int pci_read_config_word(struct pci_dev *dev, int where, u16 *val)
657{
658 return pci_bus_read_config_word(dev->bus, dev->devfn, where, val);
659}
660static inline int pci_read_config_dword(struct pci_dev *dev, int where,
661 u32 *val)
662{
663 return pci_bus_read_config_dword(dev->bus, dev->devfn, where, val);
664}
665static inline int pci_write_config_byte(struct pci_dev *dev, int where, u8 val)
666{
667 return pci_bus_write_config_byte(dev->bus, dev->devfn, where, val);
668}
669static inline int pci_write_config_word(struct pci_dev *dev, int where, u16 val)
670{
671 return pci_bus_write_config_word(dev->bus, dev->devfn, where, val);
672}
673static inline int pci_write_config_dword(struct pci_dev *dev, int where,
674 u32 val)
675{
676 return pci_bus_write_config_dword(dev->bus, dev->devfn, where, val);
677}
678
679int __must_check pci_enable_device(struct pci_dev *dev);
680int __must_check pci_enable_device_io(struct pci_dev *dev);
681int __must_check pci_enable_device_mem(struct pci_dev *dev);
682int __must_check pci_reenable_device(struct pci_dev *);
683int __must_check pcim_enable_device(struct pci_dev *pdev);
684void pcim_pin_device(struct pci_dev *pdev);
685
686static inline int pci_is_enabled(struct pci_dev *pdev)
687{
688 return (atomic_read(&pdev->enable_cnt) > 0);
689}
690
691static inline int pci_is_managed(struct pci_dev *pdev)
692{
693 return pdev->is_managed;
694}
695
696void pci_disable_device(struct pci_dev *dev);
697void pci_set_master(struct pci_dev *dev);
698void pci_clear_master(struct pci_dev *dev);
699int pci_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state state);
700#define HAVE_PCI_SET_MWI
701int __must_check pci_set_mwi(struct pci_dev *dev);
702int pci_try_set_mwi(struct pci_dev *dev);
703void pci_clear_mwi(struct pci_dev *dev);
704void pci_intx(struct pci_dev *dev, int enable);
705void pci_msi_off(struct pci_dev *dev);
706int pci_set_dma_mask(struct pci_dev *dev, u64 mask);
707int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask);
708int pci_set_dma_max_seg_size(struct pci_dev *dev, unsigned int size);
709int pci_set_dma_seg_boundary(struct pci_dev *dev, unsigned long mask);
710int pcix_get_max_mmrbc(struct pci_dev *dev);
711int pcix_get_mmrbc(struct pci_dev *dev);
712int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc);
713int pcie_get_readrq(struct pci_dev *dev);
714int pcie_set_readrq(struct pci_dev *dev, int rq);
715int __pci_reset_function(struct pci_dev *dev);
716int pci_reset_function(struct pci_dev *dev);
717void pci_update_resource(struct pci_dev *dev, int resno);
718int __must_check pci_assign_resource(struct pci_dev *dev, int i);
719int pci_select_bars(struct pci_dev *dev, unsigned long flags);
720
721
722int pci_enable_rom(struct pci_dev *pdev);
723void pci_disable_rom(struct pci_dev *pdev);
724void __iomem __must_check *pci_map_rom(struct pci_dev *pdev, size_t *size);
725void pci_unmap_rom(struct pci_dev *pdev, void __iomem *rom);
726size_t pci_get_rom_size(struct pci_dev *pdev, void __iomem *rom, size_t size);
727
728
729int pci_save_state(struct pci_dev *dev);
730int pci_restore_state(struct pci_dev *dev);
731int __pci_complete_power_transition(struct pci_dev *dev, pci_power_t state);
732int pci_set_power_state(struct pci_dev *dev, pci_power_t state);
733pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state);
734bool pci_pme_capable(struct pci_dev *dev, pci_power_t state);
735void pci_pme_active(struct pci_dev *dev, bool enable);
736int pci_enable_wake(struct pci_dev *dev, pci_power_t state, bool enable);
737int pci_wake_from_d3(struct pci_dev *dev, bool enable);
738pci_power_t pci_target_state(struct pci_dev *dev);
739int pci_prepare_to_sleep(struct pci_dev *dev);
740int pci_back_from_sleep(struct pci_dev *dev);
741
742
743int pci_bus_find_capability(struct pci_bus *bus, unsigned int devfn, int cap);
744#ifdef CONFIG_HOTPLUG
745unsigned int pci_rescan_bus(struct pci_bus *bus);
746#endif
747
748
749ssize_t pci_read_vpd(struct pci_dev *dev, loff_t pos, size_t count, void *buf);
750ssize_t pci_write_vpd(struct pci_dev *dev, loff_t pos, size_t count, const void *buf);
751int pci_vpd_truncate(struct pci_dev *dev, size_t size);
752
753
754void pci_bus_assign_resources(const struct pci_bus *bus);
755void pci_bus_size_bridges(struct pci_bus *bus);
756int pci_claim_resource(struct pci_dev *, int);
757void pci_assign_unassigned_resources(void);
758void pdev_enable_device(struct pci_dev *);
759void pdev_sort_resources(struct pci_dev *, struct resource_list *);
760int pci_enable_resources(struct pci_dev *, int mask);
761void pci_fixup_irqs(u8 (*)(struct pci_dev *, u8 *),
762 int (*)(struct pci_dev *, u8, u8));
763#define HAVE_PCI_REQ_REGIONS 2
764int __must_check pci_request_regions(struct pci_dev *, const char *);
765int __must_check pci_request_regions_exclusive(struct pci_dev *, const char *);
766void pci_release_regions(struct pci_dev *);
767int __must_check pci_request_region(struct pci_dev *, int, const char *);
768int __must_check pci_request_region_exclusive(struct pci_dev *, int, const char *);
769void pci_release_region(struct pci_dev *, int);
770int pci_request_selected_regions(struct pci_dev *, int, const char *);
771int pci_request_selected_regions_exclusive(struct pci_dev *, int, const char *);
772void pci_release_selected_regions(struct pci_dev *, int);
773
774
775int __must_check pci_bus_alloc_resource(struct pci_bus *bus,
776 struct resource *res, resource_size_t size,
777 resource_size_t align, resource_size_t min,
778 unsigned int type_mask,
779 void (*alignf)(void *, struct resource *,
780 resource_size_t, resource_size_t),
781 void *alignf_data);
782void pci_enable_bridges(struct pci_bus *bus);
783
784
785int __must_check __pci_register_driver(struct pci_driver *, struct module *,
786 const char *mod_name);
787
788
789
790
791#define pci_register_driver(driver) \
792 __pci_register_driver(driver, THIS_MODULE, KBUILD_MODNAME)
793
794void pci_unregister_driver(struct pci_driver *dev);
795void pci_remove_behind_bridge(struct pci_dev *dev);
796struct pci_driver *pci_dev_driver(const struct pci_dev *dev);
797const struct pci_device_id *pci_match_id(const struct pci_device_id *ids,
798 struct pci_dev *dev);
799int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max,
800 int pass);
801
802void pci_walk_bus(struct pci_bus *top, int (*cb)(struct pci_dev *, void *),
803 void *userdata);
804int pci_cfg_space_size_ext(struct pci_dev *dev);
805int pci_cfg_space_size(struct pci_dev *dev);
806unsigned char pci_bus_max_busnr(struct pci_bus *bus);
807
808
809
810#include <linux/dmapool.h>
811
812#define pci_pool dma_pool
813#define pci_pool_create(name, pdev, size, align, allocation) \
814 dma_pool_create(name, &pdev->dev, size, align, allocation)
815#define pci_pool_destroy(pool) dma_pool_destroy(pool)
816#define pci_pool_alloc(pool, flags, handle) dma_pool_alloc(pool, flags, handle)
817#define pci_pool_free(pool, vaddr, addr) dma_pool_free(pool, vaddr, addr)
818
819enum pci_dma_burst_strategy {
820 PCI_DMA_BURST_INFINITY,
821
822 PCI_DMA_BURST_BOUNDARY,
823
824 PCI_DMA_BURST_MULTIPLE,
825
826};
827
828struct msix_entry {
829 u32 vector;
830 u16 entry;
831};
832
833
834#ifndef CONFIG_PCI_MSI
835static inline int pci_enable_msi_block(struct pci_dev *dev, unsigned int nvec)
836{
837 return -1;
838}
839
840static inline void pci_msi_shutdown(struct pci_dev *dev)
841{ }
842static inline void pci_disable_msi(struct pci_dev *dev)
843{ }
844
845static inline int pci_msix_table_size(struct pci_dev *dev)
846{
847 return 0;
848}
849static inline int pci_enable_msix(struct pci_dev *dev,
850 struct msix_entry *entries, int nvec)
851{
852 return -1;
853}
854
855static inline void pci_msix_shutdown(struct pci_dev *dev)
856{ }
857static inline void pci_disable_msix(struct pci_dev *dev)
858{ }
859
860static inline void msi_remove_pci_irq_vectors(struct pci_dev *dev)
861{ }
862
863static inline void pci_restore_msi_state(struct pci_dev *dev)
864{ }
865static inline int pci_msi_enabled(void)
866{
867 return 0;
868}
869#else
870extern int pci_enable_msi_block(struct pci_dev *dev, unsigned int nvec);
871extern void pci_msi_shutdown(struct pci_dev *dev);
872extern void pci_disable_msi(struct pci_dev *dev);
873extern int pci_msix_table_size(struct pci_dev *dev);
874extern int pci_enable_msix(struct pci_dev *dev,
875 struct msix_entry *entries, int nvec);
876extern void pci_msix_shutdown(struct pci_dev *dev);
877extern void pci_disable_msix(struct pci_dev *dev);
878extern void msi_remove_pci_irq_vectors(struct pci_dev *dev);
879extern void pci_restore_msi_state(struct pci_dev *dev);
880extern int pci_msi_enabled(void);
881#endif
882
883#ifndef CONFIG_PCIEASPM
884static inline int pcie_aspm_enabled(void)
885{
886 return 0;
887}
888#else
889extern int pcie_aspm_enabled(void);
890#endif
891
892#ifndef CONFIG_PCIE_ECRC
893static inline void pcie_set_ecrc_checking(struct pci_dev *dev)
894{
895 return;
896}
897static inline void pcie_ecrc_get_policy(char *str) {};
898#else
899extern void pcie_set_ecrc_checking(struct pci_dev *dev);
900extern void pcie_ecrc_get_policy(char *str);
901#endif
902
903#define pci_enable_msi(pdev) pci_enable_msi_block(pdev, 1)
904
905#ifdef CONFIG_HT_IRQ
906
907int ht_create_irq(struct pci_dev *dev, int idx);
908void ht_destroy_irq(unsigned int irq);
909#endif
910
911extern void pci_block_user_cfg_access(struct pci_dev *dev);
912extern void pci_unblock_user_cfg_access(struct pci_dev *dev);
913
914
915
916
917
918
919#ifdef CONFIG_PCI_DOMAINS
920extern int pci_domains_supported;
921#else
922enum { pci_domains_supported = 0 };
923static inline int pci_domain_nr(struct pci_bus *bus)
924{
925 return 0;
926}
927
928static inline int pci_proc_domain(struct pci_bus *bus)
929{
930 return 0;
931}
932#endif
933
934#else
935
936
937
938
939
940
941#define _PCI_NOP(o, s, t) \
942 static inline int pci_##o##_config_##s(struct pci_dev *dev, \
943 int where, t val) \
944 { return PCIBIOS_FUNC_NOT_SUPPORTED; }
945
946#define _PCI_NOP_ALL(o, x) _PCI_NOP(o, byte, u8 x) \
947 _PCI_NOP(o, word, u16 x) \
948 _PCI_NOP(o, dword, u32 x)
949_PCI_NOP_ALL(read, *)
950_PCI_NOP_ALL(write,)
951
952static inline struct pci_dev *pci_find_device(unsigned int vendor,
953 unsigned int device,
954 struct pci_dev *from)
955{
956 return NULL;
957}
958
959static inline struct pci_dev *pci_get_device(unsigned int vendor,
960 unsigned int device,
961 struct pci_dev *from)
962{
963 return NULL;
964}
965
966static inline struct pci_dev *pci_get_subsys(unsigned int vendor,
967 unsigned int device,
968 unsigned int ss_vendor,
969 unsigned int ss_device,
970 struct pci_dev *from)
971{
972 return NULL;
973}
974
975static inline struct pci_dev *pci_get_class(unsigned int class,
976 struct pci_dev *from)
977{
978 return NULL;
979}
980
981#define pci_dev_present(ids) (0)
982#define no_pci_devices() (1)
983#define pci_dev_put(dev) do { } while (0)
984
985static inline void pci_set_master(struct pci_dev *dev)
986{ }
987
988static inline int pci_enable_device(struct pci_dev *dev)
989{
990 return -EIO;
991}
992
993static inline void pci_disable_device(struct pci_dev *dev)
994{ }
995
996static inline int pci_set_dma_mask(struct pci_dev *dev, u64 mask)
997{
998 return -EIO;
999}
1000
1001static inline int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask)
1002{
1003 return -EIO;
1004}
1005
1006static inline int pci_set_dma_max_seg_size(struct pci_dev *dev,
1007 unsigned int size)
1008{
1009 return -EIO;
1010}
1011
1012static inline int pci_set_dma_seg_boundary(struct pci_dev *dev,
1013 unsigned long mask)
1014{
1015 return -EIO;
1016}
1017
1018static inline int pci_assign_resource(struct pci_dev *dev, int i)
1019{
1020 return -EBUSY;
1021}
1022
1023static inline int __pci_register_driver(struct pci_driver *drv,
1024 struct module *owner)
1025{
1026 return 0;
1027}
1028
1029static inline int pci_register_driver(struct pci_driver *drv)
1030{
1031 return 0;
1032}
1033
1034static inline void pci_unregister_driver(struct pci_driver *drv)
1035{ }
1036
1037static inline int pci_find_capability(struct pci_dev *dev, int cap)
1038{
1039 return 0;
1040}
1041
1042static inline int pci_find_next_capability(struct pci_dev *dev, u8 post,
1043 int cap)
1044{
1045 return 0;
1046}
1047
1048static inline int pci_find_ext_capability(struct pci_dev *dev, int cap)
1049{
1050 return 0;
1051}
1052
1053
1054static inline int pci_save_state(struct pci_dev *dev)
1055{
1056 return 0;
1057}
1058
1059static inline int pci_restore_state(struct pci_dev *dev)
1060{
1061 return 0;
1062}
1063
1064static inline int pci_set_power_state(struct pci_dev *dev, pci_power_t state)
1065{
1066 return 0;
1067}
1068
1069static inline pci_power_t pci_choose_state(struct pci_dev *dev,
1070 pm_message_t state)
1071{
1072 return PCI_D0;
1073}
1074
1075static inline int pci_enable_wake(struct pci_dev *dev, pci_power_t state,
1076 int enable)
1077{
1078 return 0;
1079}
1080
1081static inline int pci_request_regions(struct pci_dev *dev, const char *res_name)
1082{
1083 return -EIO;
1084}
1085
1086static inline void pci_release_regions(struct pci_dev *dev)
1087{ }
1088
1089#define pci_dma_burst_advice(pdev, strat, strategy_parameter) do { } while (0)
1090
1091static inline void pci_block_user_cfg_access(struct pci_dev *dev)
1092{ }
1093
1094static inline void pci_unblock_user_cfg_access(struct pci_dev *dev)
1095{ }
1096
1097static inline struct pci_bus *pci_find_next_bus(const struct pci_bus *from)
1098{ return NULL; }
1099
1100static inline struct pci_dev *pci_get_slot(struct pci_bus *bus,
1101 unsigned int devfn)
1102{ return NULL; }
1103
1104static inline struct pci_dev *pci_get_bus_and_slot(unsigned int bus,
1105 unsigned int devfn)
1106{ return NULL; }
1107
1108#endif
1109
1110
1111
1112#include <asm/pci.h>
1113
1114#ifndef PCIBIOS_MAX_MEM_32
1115#define PCIBIOS_MAX_MEM_32 (-1)
1116#endif
1117
1118
1119
1120#define pci_resource_start(dev, bar) ((dev)->resource[(bar)].start)
1121#define pci_resource_end(dev, bar) ((dev)->resource[(bar)].end)
1122#define pci_resource_flags(dev, bar) ((dev)->resource[(bar)].flags)
1123#define pci_resource_len(dev,bar) \
1124 ((pci_resource_start((dev), (bar)) == 0 && \
1125 pci_resource_end((dev), (bar)) == \
1126 pci_resource_start((dev), (bar))) ? 0 : \
1127 \
1128 (pci_resource_end((dev), (bar)) - \
1129 pci_resource_start((dev), (bar)) + 1))
1130
1131
1132
1133
1134
1135static inline void *pci_get_drvdata(struct pci_dev *pdev)
1136{
1137 return dev_get_drvdata(&pdev->dev);
1138}
1139
1140static inline void pci_set_drvdata(struct pci_dev *pdev, void *data)
1141{
1142 dev_set_drvdata(&pdev->dev, data);
1143}
1144
1145
1146
1147
1148static inline const char *pci_name(const struct pci_dev *pdev)
1149{
1150 return dev_name(&pdev->dev);
1151}
1152
1153
1154
1155
1156
1157#ifndef HAVE_ARCH_PCI_RESOURCE_TO_USER
1158static inline void pci_resource_to_user(const struct pci_dev *dev, int bar,
1159 const struct resource *rsrc, resource_size_t *start,
1160 resource_size_t *end)
1161{
1162 *start = rsrc->start;
1163 *end = rsrc->end;
1164}
1165#endif
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175struct pci_fixup {
1176 u16 vendor, device;
1177 void (*hook)(struct pci_dev *dev);
1178};
1179
1180enum pci_fixup_pass {
1181 pci_fixup_early,
1182 pci_fixup_header,
1183 pci_fixup_final,
1184 pci_fixup_enable,
1185 pci_fixup_resume,
1186 pci_fixup_suspend,
1187 pci_fixup_resume_early,
1188};
1189
1190
1191#define DECLARE_PCI_FIXUP_SECTION(section, name, vendor, device, hook) \
1192 static const struct pci_fixup __pci_fixup_##name __used \
1193 __attribute__((__section__(#section))) = { vendor, device, hook };
1194#define DECLARE_PCI_FIXUP_EARLY(vendor, device, hook) \
1195 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_early, \
1196 vendor##device##hook, vendor, device, hook)
1197#define DECLARE_PCI_FIXUP_HEADER(vendor, device, hook) \
1198 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_header, \
1199 vendor##device##hook, vendor, device, hook)
1200#define DECLARE_PCI_FIXUP_FINAL(vendor, device, hook) \
1201 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_final, \
1202 vendor##device##hook, vendor, device, hook)
1203#define DECLARE_PCI_FIXUP_ENABLE(vendor, device, hook) \
1204 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_enable, \
1205 vendor##device##hook, vendor, device, hook)
1206#define DECLARE_PCI_FIXUP_RESUME(vendor, device, hook) \
1207 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_resume, \
1208 resume##vendor##device##hook, vendor, device, hook)
1209#define DECLARE_PCI_FIXUP_RESUME_EARLY(vendor, device, hook) \
1210 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_resume_early, \
1211 resume_early##vendor##device##hook, vendor, device, hook)
1212#define DECLARE_PCI_FIXUP_SUSPEND(vendor, device, hook) \
1213 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_suspend, \
1214 suspend##vendor##device##hook, vendor, device, hook)
1215
1216
1217void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev);
1218
1219void __iomem *pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen);
1220void pcim_iounmap(struct pci_dev *pdev, void __iomem *addr);
1221void __iomem * const *pcim_iomap_table(struct pci_dev *pdev);
1222int pcim_iomap_regions(struct pci_dev *pdev, u16 mask, const char *name);
1223int pcim_iomap_regions_request_all(struct pci_dev *pdev, u16 mask,
1224 const char *name);
1225void pcim_iounmap_regions(struct pci_dev *pdev, u16 mask);
1226
1227extern int pci_pci_problems;
1228#define PCIPCI_FAIL 1
1229#define PCIPCI_TRITON 2
1230#define PCIPCI_NATOMA 4
1231#define PCIPCI_VIAETBF 8
1232#define PCIPCI_VSFX 16
1233#define PCIPCI_ALIMAGIK 32
1234#define PCIAGP_FAIL 64
1235
1236extern unsigned long pci_cardbus_io_size;
1237extern unsigned long pci_cardbus_mem_size;
1238
1239int pcibios_add_platform_entries(struct pci_dev *dev);
1240void pcibios_disable_device(struct pci_dev *dev);
1241int pcibios_set_pcie_reset_state(struct pci_dev *dev,
1242 enum pcie_reset_state state);
1243
1244#ifdef CONFIG_PCI_MMCONFIG
1245extern void __init pci_mmcfg_early_init(void);
1246extern void __init pci_mmcfg_late_init(void);
1247#else
1248static inline void pci_mmcfg_early_init(void) { }
1249static inline void pci_mmcfg_late_init(void) { }
1250#endif
1251
1252int pci_ext_cfg_avail(struct pci_dev *dev);
1253
1254void __iomem *pci_ioremap_bar(struct pci_dev *pdev, int bar);
1255
1256#ifdef CONFIG_PCI_IOV
1257extern int pci_enable_sriov(struct pci_dev *dev, int nr_virtfn);
1258extern void pci_disable_sriov(struct pci_dev *dev);
1259extern irqreturn_t pci_sriov_migration(struct pci_dev *dev);
1260#else
1261static inline int pci_enable_sriov(struct pci_dev *dev, int nr_virtfn)
1262{
1263 return -ENODEV;
1264}
1265static inline void pci_disable_sriov(struct pci_dev *dev)
1266{
1267}
1268static inline irqreturn_t pci_sriov_migration(struct pci_dev *dev)
1269{
1270 return IRQ_NONE;
1271}
1272#endif
1273
1274#if defined(CONFIG_HOTPLUG_PCI) || defined(CONFIG_HOTPLUG_PCI_MODULE)
1275extern void pci_hp_create_module_link(struct pci_slot *pci_slot);
1276extern void pci_hp_remove_module_link(struct pci_slot *pci_slot);
1277#endif
1278
1279#endif
1280#endif
1281