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