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