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 <linux/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 = PCI_NUM_RESOURCES,
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 PCI_DEV_FLAGS_ASSIGNED = (__force pci_dev_flags_t) 4,
179};
180
181enum pci_irq_reroute_variant {
182 INTEL_IRQ_REROUTE_VARIANT = 1,
183 MAX_IRQ_REROUTE_VARIANTS = 3
184};
185
186typedef unsigned short __bitwise pci_bus_flags_t;
187enum pci_bus_flags {
188 PCI_BUS_FLAGS_NO_MSI = (__force pci_bus_flags_t) 1,
189 PCI_BUS_FLAGS_NO_MMRBC = (__force pci_bus_flags_t) 2,
190};
191
192
193enum pci_bus_speed {
194 PCI_SPEED_33MHz = 0x00,
195 PCI_SPEED_66MHz = 0x01,
196 PCI_SPEED_66MHz_PCIX = 0x02,
197 PCI_SPEED_100MHz_PCIX = 0x03,
198 PCI_SPEED_133MHz_PCIX = 0x04,
199 PCI_SPEED_66MHz_PCIX_ECC = 0x05,
200 PCI_SPEED_100MHz_PCIX_ECC = 0x06,
201 PCI_SPEED_133MHz_PCIX_ECC = 0x07,
202 PCI_SPEED_66MHz_PCIX_266 = 0x09,
203 PCI_SPEED_100MHz_PCIX_266 = 0x0a,
204 PCI_SPEED_133MHz_PCIX_266 = 0x0b,
205 AGP_UNKNOWN = 0x0c,
206 AGP_1X = 0x0d,
207 AGP_2X = 0x0e,
208 AGP_4X = 0x0f,
209 AGP_8X = 0x10,
210 PCI_SPEED_66MHz_PCIX_533 = 0x11,
211 PCI_SPEED_100MHz_PCIX_533 = 0x12,
212 PCI_SPEED_133MHz_PCIX_533 = 0x13,
213 PCIE_SPEED_2_5GT = 0x14,
214 PCIE_SPEED_5_0GT = 0x15,
215 PCIE_SPEED_8_0GT = 0x16,
216 PCI_SPEED_UNKNOWN = 0xff,
217};
218
219struct pci_cap_saved_data {
220 char cap_nr;
221 unsigned int size;
222 u32 data[0];
223};
224
225struct pci_cap_saved_state {
226 struct hlist_node next;
227 struct pci_cap_saved_data cap;
228};
229
230struct pcie_link_state;
231struct pci_vpd;
232struct pci_sriov;
233struct pci_ats;
234
235
236
237
238struct pci_dev {
239 struct list_head bus_list;
240 struct pci_bus *bus;
241 struct pci_bus *subordinate;
242
243 void *sysdata;
244 struct proc_dir_entry *procent;
245 struct pci_slot *slot;
246
247 unsigned int devfn;
248 unsigned short vendor;
249 unsigned short device;
250 unsigned short subsystem_vendor;
251 unsigned short subsystem_device;
252 unsigned int class;
253 u8 revision;
254 u8 hdr_type;
255 u8 pcie_cap;
256 u8 pcie_type:4;
257 u8 pcie_mpss:3;
258 u8 rom_base_reg;
259 u8 pin;
260
261 struct pci_driver *driver;
262 u64 dma_mask;
263
264
265
266
267
268 struct device_dma_parameters dma_parms;
269
270 pci_power_t current_state;
271
272
273 int pm_cap;
274
275 unsigned int pme_support:5;
276
277 unsigned int pme_interrupt:1;
278 unsigned int pme_poll:1;
279 unsigned int d1_support:1;
280 unsigned int d2_support:1;
281 unsigned int no_d1d2:1;
282 unsigned int mmio_always_on:1;
283
284 unsigned int wakeup_prepared:1;
285 unsigned int d3_delay;
286
287#ifdef CONFIG_PCIEASPM
288 struct pcie_link_state *link_state;
289#endif
290
291 pci_channel_state_t error_state;
292 struct device dev;
293
294 int cfg_size;
295
296
297
298
299
300 unsigned int irq;
301 struct resource resource[DEVICE_COUNT_RESOURCE];
302 resource_size_t fw_addr[DEVICE_COUNT_RESOURCE];
303
304
305 unsigned int transparent:1;
306 unsigned int multifunction:1;
307
308 unsigned int is_added:1;
309 unsigned int is_busmaster:1;
310 unsigned int no_msi:1;
311 unsigned int block_cfg_access:1;
312 unsigned int broken_parity_status:1;
313 unsigned int irq_reroute_variant:2;
314 unsigned int msi_enabled:1;
315 unsigned int msix_enabled:1;
316 unsigned int ari_enabled:1;
317 unsigned int is_managed:1;
318 unsigned int is_pcie:1;
319
320 unsigned int needs_freset:1;
321 unsigned int state_saved:1;
322 unsigned int is_physfn:1;
323 unsigned int is_virtfn:1;
324 unsigned int reset_fn:1;
325 unsigned int is_hotplug_bridge:1;
326 unsigned int __aer_firmware_first_valid:1;
327 unsigned int __aer_firmware_first:1;
328 pci_dev_flags_t dev_flags;
329 atomic_t enable_cnt;
330
331 u32 saved_config_space[16];
332 struct hlist_head saved_cap_space;
333 struct bin_attribute *rom_attr;
334 int rom_attr_enabled;
335 struct bin_attribute *res_attr[DEVICE_COUNT_RESOURCE];
336 struct bin_attribute *res_attr_wc[DEVICE_COUNT_RESOURCE];
337#ifdef CONFIG_PCI_MSI
338 struct list_head msi_list;
339 struct kset *msi_kset;
340#endif
341 struct pci_vpd *vpd;
342#ifdef CONFIG_PCI_ATS
343 union {
344 struct pci_sriov *sriov;
345 struct pci_dev *physfn;
346 };
347 struct pci_ats *ats;
348#endif
349};
350
351static inline struct pci_dev *pci_physfn(struct pci_dev *dev)
352{
353#ifdef CONFIG_PCI_IOV
354 if (dev->is_virtfn)
355 dev = dev->physfn;
356#endif
357
358 return dev;
359}
360
361extern struct pci_dev *alloc_pci_dev(void);
362
363#define pci_dev_b(n) list_entry(n, struct pci_dev, bus_list)
364#define to_pci_dev(n) container_of(n, struct pci_dev, dev)
365#define for_each_pci_dev(d) while ((d = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, d)) != NULL)
366
367static inline int pci_channel_offline(struct pci_dev *pdev)
368{
369 return (pdev->error_state != pci_channel_io_normal);
370}
371
372static inline struct pci_cap_saved_state *pci_find_saved_cap(
373 struct pci_dev *pci_dev, char cap)
374{
375 struct pci_cap_saved_state *tmp;
376 struct hlist_node *pos;
377
378 hlist_for_each_entry(tmp, pos, &pci_dev->saved_cap_space, next) {
379 if (tmp->cap.cap_nr == cap)
380 return tmp;
381 }
382 return NULL;
383}
384
385static inline void pci_add_saved_cap(struct pci_dev *pci_dev,
386 struct pci_cap_saved_state *new_cap)
387{
388 hlist_add_head(&new_cap->next, &pci_dev->saved_cap_space);
389}
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404#define PCI_SUBTRACTIVE_DECODE 0x1
405
406struct pci_bus_resource {
407 struct list_head list;
408 struct resource *res;
409 unsigned int flags;
410};
411
412#define PCI_REGION_FLAG_MASK 0x0fU
413
414struct pci_bus {
415 struct list_head node;
416 struct pci_bus *parent;
417 struct list_head children;
418 struct list_head devices;
419 struct pci_dev *self;
420 struct list_head slots;
421 struct resource *resource[PCI_BRIDGE_RESOURCE_NUM];
422 struct list_head resources;
423
424 struct pci_ops *ops;
425 void *sysdata;
426 struct proc_dir_entry *procdir;
427
428 unsigned char number;
429 unsigned char primary;
430 unsigned char secondary;
431 unsigned char subordinate;
432 unsigned char max_bus_speed;
433 unsigned char cur_bus_speed;
434
435 char name[48];
436
437 unsigned short bridge_ctl;
438 pci_bus_flags_t bus_flags;
439 struct device *bridge;
440 struct device dev;
441 struct bin_attribute *legacy_io;
442 struct bin_attribute *legacy_mem;
443 unsigned int is_added:1;
444};
445
446#define pci_bus_b(n) list_entry(n, struct pci_bus, node)
447#define to_pci_bus(n) container_of(n, struct pci_bus, dev)
448
449
450
451
452
453static inline bool pci_is_root_bus(struct pci_bus *pbus)
454{
455 return !(pbus->parent);
456}
457
458#ifdef CONFIG_PCI_MSI
459static inline bool pci_dev_msi_enabled(struct pci_dev *pci_dev)
460{
461 return pci_dev->msi_enabled || pci_dev->msix_enabled;
462}
463#else
464static inline bool pci_dev_msi_enabled(struct pci_dev *pci_dev) { return false; }
465#endif
466
467
468
469
470#define PCIBIOS_SUCCESSFUL 0x00
471#define PCIBIOS_FUNC_NOT_SUPPORTED 0x81
472#define PCIBIOS_BAD_VENDOR_ID 0x83
473#define PCIBIOS_DEVICE_NOT_FOUND 0x86
474#define PCIBIOS_BAD_REGISTER_NUMBER 0x87
475#define PCIBIOS_SET_FAILED 0x88
476#define PCIBIOS_BUFFER_TOO_SMALL 0x89
477
478
479
480struct pci_ops {
481 int (*read)(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 *val);
482 int (*write)(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 val);
483};
484
485
486
487
488
489extern int raw_pci_read(unsigned int domain, unsigned int bus,
490 unsigned int devfn, int reg, int len, u32 *val);
491extern int raw_pci_write(unsigned int domain, unsigned int bus,
492 unsigned int devfn, int reg, int len, u32 val);
493
494struct pci_bus_region {
495 resource_size_t start;
496 resource_size_t end;
497};
498
499struct pci_dynids {
500 spinlock_t lock;
501 struct list_head list;
502};
503
504
505
506
507
508
509
510
511typedef unsigned int __bitwise pci_ers_result_t;
512
513enum pci_ers_result {
514
515 PCI_ERS_RESULT_NONE = (__force pci_ers_result_t) 1,
516
517
518 PCI_ERS_RESULT_CAN_RECOVER = (__force pci_ers_result_t) 2,
519
520
521 PCI_ERS_RESULT_NEED_RESET = (__force pci_ers_result_t) 3,
522
523
524 PCI_ERS_RESULT_DISCONNECT = (__force pci_ers_result_t) 4,
525
526
527 PCI_ERS_RESULT_RECOVERED = (__force pci_ers_result_t) 5,
528};
529
530
531struct pci_error_handlers {
532
533 pci_ers_result_t (*error_detected)(struct pci_dev *dev,
534 enum pci_channel_state error);
535
536
537 pci_ers_result_t (*mmio_enabled)(struct pci_dev *dev);
538
539
540 pci_ers_result_t (*link_reset)(struct pci_dev *dev);
541
542
543 pci_ers_result_t (*slot_reset)(struct pci_dev *dev);
544
545
546 void (*resume)(struct pci_dev *dev);
547};
548
549
550
551struct module;
552struct pci_driver {
553 struct list_head node;
554 const char *name;
555 const struct pci_device_id *id_table;
556 int (*probe) (struct pci_dev *dev, const struct pci_device_id *id);
557 void (*remove) (struct pci_dev *dev);
558 int (*suspend) (struct pci_dev *dev, pm_message_t state);
559 int (*suspend_late) (struct pci_dev *dev, pm_message_t state);
560 int (*resume_early) (struct pci_dev *dev);
561 int (*resume) (struct pci_dev *dev);
562 void (*shutdown) (struct pci_dev *dev);
563 struct pci_error_handlers *err_handler;
564 struct device_driver driver;
565 struct pci_dynids dynids;
566};
567
568#define to_pci_driver(drv) container_of(drv, struct pci_driver, driver)
569
570
571
572
573
574
575
576
577#define DEFINE_PCI_DEVICE_TABLE(_table) \
578 const struct pci_device_id _table[] __devinitconst
579
580
581
582
583
584
585
586
587
588
589#define PCI_DEVICE(vend,dev) \
590 .vendor = (vend), .device = (dev), \
591 .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID
592
593
594
595
596
597
598
599
600
601
602#define PCI_DEVICE_CLASS(dev_class,dev_class_mask) \
603 .class = (dev_class), .class_mask = (dev_class_mask), \
604 .vendor = PCI_ANY_ID, .device = PCI_ANY_ID, \
605 .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID
606
607
608
609
610
611
612
613
614
615
616
617
618#define PCI_VDEVICE(vendor, device) \
619 PCI_VENDOR_ID_##vendor, (device), \
620 PCI_ANY_ID, PCI_ANY_ID, 0, 0
621
622
623#ifdef CONFIG_PCI
624
625extern void pcie_bus_configure_settings(struct pci_bus *bus, u8 smpss);
626
627enum pcie_bus_config_types {
628 PCIE_BUS_TUNE_OFF,
629 PCIE_BUS_SAFE,
630 PCIE_BUS_PERFORMANCE,
631 PCIE_BUS_PEER2PEER,
632};
633
634extern enum pcie_bus_config_types pcie_bus_config;
635
636extern struct bus_type pci_bus_type;
637
638
639
640extern struct list_head pci_root_buses;
641
642extern int no_pci_devices(void);
643
644void pcibios_fixup_bus(struct pci_bus *);
645int __must_check pcibios_enable_device(struct pci_dev *, int mask);
646char *pcibios_setup(char *str);
647
648
649resource_size_t pcibios_align_resource(void *, const struct resource *,
650 resource_size_t,
651 resource_size_t);
652void pcibios_update_irq(struct pci_dev *, int irq);
653
654
655void pci_fixup_cardbus(struct pci_bus *);
656
657
658
659void pcibios_scan_specific_bus(int busn);
660extern struct pci_bus *pci_find_bus(int domain, int busnr);
661void pci_bus_add_devices(const struct pci_bus *bus);
662struct pci_bus *pci_scan_bus_parented(struct device *parent, int bus,
663 struct pci_ops *ops, void *sysdata);
664struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops, void *sysdata);
665struct pci_bus *pci_create_root_bus(struct device *parent, int bus,
666 struct pci_ops *ops, void *sysdata,
667 struct list_head *resources);
668struct pci_bus * __devinit pci_scan_root_bus(struct device *parent, int bus,
669 struct pci_ops *ops, void *sysdata,
670 struct list_head *resources);
671struct pci_bus *pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev,
672 int busnr);
673void pcie_update_link_speed(struct pci_bus *bus, u16 link_status);
674struct pci_slot *pci_create_slot(struct pci_bus *parent, int slot_nr,
675 const char *name,
676 struct hotplug_slot *hotplug);
677void pci_destroy_slot(struct pci_slot *slot);
678void pci_renumber_slot(struct pci_slot *slot, int slot_nr);
679int pci_scan_slot(struct pci_bus *bus, int devfn);
680struct pci_dev *pci_scan_single_device(struct pci_bus *bus, int devfn);
681void pci_device_add(struct pci_dev *dev, struct pci_bus *bus);
682unsigned int pci_scan_child_bus(struct pci_bus *bus);
683int __must_check pci_bus_add_device(struct pci_dev *dev);
684void pci_read_bridge_bases(struct pci_bus *child);
685struct resource *pci_find_parent_resource(const struct pci_dev *dev,
686 struct resource *res);
687u8 pci_swizzle_interrupt_pin(struct pci_dev *dev, u8 pin);
688int pci_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge);
689u8 pci_common_swizzle(struct pci_dev *dev, u8 *pinp);
690extern struct pci_dev *pci_dev_get(struct pci_dev *dev);
691extern void pci_dev_put(struct pci_dev *dev);
692extern void pci_remove_bus(struct pci_bus *b);
693extern void pci_remove_bus_device(struct pci_dev *dev);
694extern void pci_stop_bus_device(struct pci_dev *dev);
695void pci_setup_cardbus(struct pci_bus *bus);
696extern void pci_sort_breadthfirst(void);
697#define dev_is_pci(d) ((d)->bus == &pci_bus_type)
698#define dev_is_pf(d) ((dev_is_pci(d) ? to_pci_dev(d)->is_physfn : false))
699#define dev_num_vf(d) ((dev_is_pci(d) ? pci_num_vf(to_pci_dev(d)) : 0))
700
701
702
703enum pci_lost_interrupt_reason {
704 PCI_LOST_IRQ_NO_INFORMATION = 0,
705 PCI_LOST_IRQ_DISABLE_MSI,
706 PCI_LOST_IRQ_DISABLE_MSIX,
707 PCI_LOST_IRQ_DISABLE_ACPI,
708};
709enum pci_lost_interrupt_reason pci_lost_interrupt(struct pci_dev *dev);
710int pci_find_capability(struct pci_dev *dev, int cap);
711int pci_find_next_capability(struct pci_dev *dev, u8 pos, int cap);
712int pci_find_ext_capability(struct pci_dev *dev, int cap);
713int pci_bus_find_ext_capability(struct pci_bus *bus, unsigned int devfn,
714 int cap);
715int pci_find_ht_capability(struct pci_dev *dev, int ht_cap);
716int pci_find_next_ht_capability(struct pci_dev *dev, int pos, int ht_cap);
717struct pci_bus *pci_find_next_bus(const struct pci_bus *from);
718
719struct pci_dev *pci_get_device(unsigned int vendor, unsigned int device,
720 struct pci_dev *from);
721struct pci_dev *pci_get_subsys(unsigned int vendor, unsigned int device,
722 unsigned int ss_vendor, unsigned int ss_device,
723 struct pci_dev *from);
724struct pci_dev *pci_get_slot(struct pci_bus *bus, unsigned int devfn);
725struct pci_dev *pci_get_domain_bus_and_slot(int domain, unsigned int bus,
726 unsigned int devfn);
727static inline struct pci_dev *pci_get_bus_and_slot(unsigned int bus,
728 unsigned int devfn)
729{
730 return pci_get_domain_bus_and_slot(0, bus, devfn);
731}
732struct pci_dev *pci_get_class(unsigned int class, struct pci_dev *from);
733int pci_dev_present(const struct pci_device_id *ids);
734
735int pci_bus_read_config_byte(struct pci_bus *bus, unsigned int devfn,
736 int where, u8 *val);
737int pci_bus_read_config_word(struct pci_bus *bus, unsigned int devfn,
738 int where, u16 *val);
739int pci_bus_read_config_dword(struct pci_bus *bus, unsigned int devfn,
740 int where, u32 *val);
741int pci_bus_write_config_byte(struct pci_bus *bus, unsigned int devfn,
742 int where, u8 val);
743int pci_bus_write_config_word(struct pci_bus *bus, unsigned int devfn,
744 int where, u16 val);
745int pci_bus_write_config_dword(struct pci_bus *bus, unsigned int devfn,
746 int where, u32 val);
747struct pci_ops *pci_bus_set_ops(struct pci_bus *bus, struct pci_ops *ops);
748
749static inline int pci_read_config_byte(struct pci_dev *dev, int where, u8 *val)
750{
751 return pci_bus_read_config_byte(dev->bus, dev->devfn, where, val);
752}
753static inline int pci_read_config_word(struct pci_dev *dev, int where, u16 *val)
754{
755 return pci_bus_read_config_word(dev->bus, dev->devfn, where, val);
756}
757static inline int pci_read_config_dword(struct pci_dev *dev, int where,
758 u32 *val)
759{
760 return pci_bus_read_config_dword(dev->bus, dev->devfn, where, val);
761}
762static inline int pci_write_config_byte(struct pci_dev *dev, int where, u8 val)
763{
764 return pci_bus_write_config_byte(dev->bus, dev->devfn, where, val);
765}
766static inline int pci_write_config_word(struct pci_dev *dev, int where, u16 val)
767{
768 return pci_bus_write_config_word(dev->bus, dev->devfn, where, val);
769}
770static inline int pci_write_config_dword(struct pci_dev *dev, int where,
771 u32 val)
772{
773 return pci_bus_write_config_dword(dev->bus, dev->devfn, where, val);
774}
775
776int __must_check pci_enable_device(struct pci_dev *dev);
777int __must_check pci_enable_device_io(struct pci_dev *dev);
778int __must_check pci_enable_device_mem(struct pci_dev *dev);
779int __must_check pci_reenable_device(struct pci_dev *);
780int __must_check pcim_enable_device(struct pci_dev *pdev);
781void pcim_pin_device(struct pci_dev *pdev);
782
783static inline int pci_is_enabled(struct pci_dev *pdev)
784{
785 return (atomic_read(&pdev->enable_cnt) > 0);
786}
787
788static inline int pci_is_managed(struct pci_dev *pdev)
789{
790 return pdev->is_managed;
791}
792
793void pci_disable_device(struct pci_dev *dev);
794
795extern unsigned int pcibios_max_latency;
796void pci_set_master(struct pci_dev *dev);
797void pci_clear_master(struct pci_dev *dev);
798
799int pci_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state state);
800int pci_set_cacheline_size(struct pci_dev *dev);
801#define HAVE_PCI_SET_MWI
802int __must_check pci_set_mwi(struct pci_dev *dev);
803int pci_try_set_mwi(struct pci_dev *dev);
804void pci_clear_mwi(struct pci_dev *dev);
805void pci_intx(struct pci_dev *dev, int enable);
806bool pci_intx_mask_supported(struct pci_dev *dev);
807bool pci_check_and_mask_intx(struct pci_dev *dev);
808bool pci_check_and_unmask_intx(struct pci_dev *dev);
809void pci_msi_off(struct pci_dev *dev);
810int pci_set_dma_max_seg_size(struct pci_dev *dev, unsigned int size);
811int pci_set_dma_seg_boundary(struct pci_dev *dev, unsigned long mask);
812int pcix_get_max_mmrbc(struct pci_dev *dev);
813int pcix_get_mmrbc(struct pci_dev *dev);
814int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc);
815int pcie_get_readrq(struct pci_dev *dev);
816int pcie_set_readrq(struct pci_dev *dev, int rq);
817int pcie_get_mps(struct pci_dev *dev);
818int pcie_set_mps(struct pci_dev *dev, int mps);
819int __pci_reset_function(struct pci_dev *dev);
820int pci_reset_function(struct pci_dev *dev);
821void pci_update_resource(struct pci_dev *dev, int resno);
822int __must_check pci_assign_resource(struct pci_dev *dev, int i);
823int __must_check pci_reassign_resource(struct pci_dev *dev, int i, resource_size_t add_size, resource_size_t align);
824int pci_select_bars(struct pci_dev *dev, unsigned long flags);
825
826
827int pci_enable_rom(struct pci_dev *pdev);
828void pci_disable_rom(struct pci_dev *pdev);
829void __iomem __must_check *pci_map_rom(struct pci_dev *pdev, size_t *size);
830void pci_unmap_rom(struct pci_dev *pdev, void __iomem *rom);
831size_t pci_get_rom_size(struct pci_dev *pdev, void __iomem *rom, size_t size);
832
833
834int pci_save_state(struct pci_dev *dev);
835void pci_restore_state(struct pci_dev *dev);
836struct pci_saved_state *pci_store_saved_state(struct pci_dev *dev);
837int pci_load_saved_state(struct pci_dev *dev, struct pci_saved_state *state);
838int pci_load_and_free_saved_state(struct pci_dev *dev,
839 struct pci_saved_state **state);
840int __pci_complete_power_transition(struct pci_dev *dev, pci_power_t state);
841int pci_set_power_state(struct pci_dev *dev, pci_power_t state);
842pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state);
843bool pci_pme_capable(struct pci_dev *dev, pci_power_t state);
844void pci_pme_active(struct pci_dev *dev, bool enable);
845int __pci_enable_wake(struct pci_dev *dev, pci_power_t state,
846 bool runtime, bool enable);
847int pci_wake_from_d3(struct pci_dev *dev, bool enable);
848pci_power_t pci_target_state(struct pci_dev *dev);
849int pci_prepare_to_sleep(struct pci_dev *dev);
850int pci_back_from_sleep(struct pci_dev *dev);
851bool pci_dev_run_wake(struct pci_dev *dev);
852bool pci_check_pme_status(struct pci_dev *dev);
853void pci_pme_wakeup_bus(struct pci_bus *bus);
854
855static inline int pci_enable_wake(struct pci_dev *dev, pci_power_t state,
856 bool enable)
857{
858 return __pci_enable_wake(dev, state, false, enable);
859}
860
861#define PCI_EXP_IDO_REQUEST (1<<0)
862#define PCI_EXP_IDO_COMPLETION (1<<1)
863void pci_enable_ido(struct pci_dev *dev, unsigned long type);
864void pci_disable_ido(struct pci_dev *dev, unsigned long type);
865
866enum pci_obff_signal_type {
867 PCI_EXP_OBFF_SIGNAL_L0 = 0,
868 PCI_EXP_OBFF_SIGNAL_ALWAYS = 1,
869};
870int pci_enable_obff(struct pci_dev *dev, enum pci_obff_signal_type);
871void pci_disable_obff(struct pci_dev *dev);
872
873bool pci_ltr_supported(struct pci_dev *dev);
874int pci_enable_ltr(struct pci_dev *dev);
875void pci_disable_ltr(struct pci_dev *dev);
876int pci_set_ltr(struct pci_dev *dev, int snoop_lat_ns, int nosnoop_lat_ns);
877
878
879void set_pcie_port_type(struct pci_dev *pdev);
880void set_pcie_hotplug_bridge(struct pci_dev *pdev);
881
882
883int pci_bus_find_capability(struct pci_bus *bus, unsigned int devfn, int cap);
884#ifdef CONFIG_HOTPLUG
885unsigned int pci_rescan_bus(struct pci_bus *bus);
886#endif
887
888
889ssize_t pci_read_vpd(struct pci_dev *dev, loff_t pos, size_t count, void *buf);
890ssize_t pci_write_vpd(struct pci_dev *dev, loff_t pos, size_t count, const void *buf);
891int pci_vpd_truncate(struct pci_dev *dev, size_t size);
892
893
894void pci_bus_assign_resources(const struct pci_bus *bus);
895void pci_bus_size_bridges(struct pci_bus *bus);
896int pci_claim_resource(struct pci_dev *, int);
897void pci_assign_unassigned_resources(void);
898void pci_assign_unassigned_bridge_resources(struct pci_dev *bridge);
899void pdev_enable_device(struct pci_dev *);
900void pdev_sort_resources(struct pci_dev *, struct resource_list *);
901int pci_enable_resources(struct pci_dev *, int mask);
902void pci_fixup_irqs(u8 (*)(struct pci_dev *, u8 *),
903 int (*)(const struct pci_dev *, u8, u8));
904#define HAVE_PCI_REQ_REGIONS 2
905int __must_check pci_request_regions(struct pci_dev *, const char *);
906int __must_check pci_request_regions_exclusive(struct pci_dev *, const char *);
907void pci_release_regions(struct pci_dev *);
908int __must_check pci_request_region(struct pci_dev *, int, const char *);
909int __must_check pci_request_region_exclusive(struct pci_dev *, int, const char *);
910void pci_release_region(struct pci_dev *, int);
911int pci_request_selected_regions(struct pci_dev *, int, const char *);
912int pci_request_selected_regions_exclusive(struct pci_dev *, int, const char *);
913void pci_release_selected_regions(struct pci_dev *, int);
914
915
916void pci_add_resource(struct list_head *resources, struct resource *res);
917void pci_free_resource_list(struct list_head *resources);
918void pci_bus_add_resource(struct pci_bus *bus, struct resource *res, unsigned int flags);
919struct resource *pci_bus_resource_n(const struct pci_bus *bus, int n);
920void pci_bus_remove_resources(struct pci_bus *bus);
921
922#define pci_bus_for_each_resource(bus, res, i) \
923 for (i = 0; \
924 (res = pci_bus_resource_n(bus, i)) || i < PCI_BRIDGE_RESOURCE_NUM; \
925 i++)
926
927int __must_check pci_bus_alloc_resource(struct pci_bus *bus,
928 struct resource *res, resource_size_t size,
929 resource_size_t align, resource_size_t min,
930 unsigned int type_mask,
931 resource_size_t (*alignf)(void *,
932 const struct resource *,
933 resource_size_t,
934 resource_size_t),
935 void *alignf_data);
936void pci_enable_bridges(struct pci_bus *bus);
937
938
939int __must_check __pci_register_driver(struct pci_driver *, struct module *,
940 const char *mod_name);
941
942
943
944
945#define pci_register_driver(driver) \
946 __pci_register_driver(driver, THIS_MODULE, KBUILD_MODNAME)
947
948void pci_unregister_driver(struct pci_driver *dev);
949void pci_remove_behind_bridge(struct pci_dev *dev);
950struct pci_driver *pci_dev_driver(const struct pci_dev *dev);
951int pci_add_dynid(struct pci_driver *drv,
952 unsigned int vendor, unsigned int device,
953 unsigned int subvendor, unsigned int subdevice,
954 unsigned int class, unsigned int class_mask,
955 unsigned long driver_data);
956const struct pci_device_id *pci_match_id(const struct pci_device_id *ids,
957 struct pci_dev *dev);
958int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max,
959 int pass);
960
961void pci_walk_bus(struct pci_bus *top, int (*cb)(struct pci_dev *, void *),
962 void *userdata);
963int pci_cfg_space_size_ext(struct pci_dev *dev);
964int pci_cfg_space_size(struct pci_dev *dev);
965unsigned char pci_bus_max_busnr(struct pci_bus *bus);
966void pci_setup_bridge(struct pci_bus *bus);
967
968#define PCI_VGA_STATE_CHANGE_BRIDGE (1 << 0)
969#define PCI_VGA_STATE_CHANGE_DECODES (1 << 1)
970
971int pci_set_vga_state(struct pci_dev *pdev, bool decode,
972 unsigned int command_bits, u32 flags);
973
974
975#include <linux/pci-dma.h>
976#include <linux/dmapool.h>
977
978#define pci_pool dma_pool
979#define pci_pool_create(name, pdev, size, align, allocation) \
980 dma_pool_create(name, &pdev->dev, size, align, allocation)
981#define pci_pool_destroy(pool) dma_pool_destroy(pool)
982#define pci_pool_alloc(pool, flags, handle) dma_pool_alloc(pool, flags, handle)
983#define pci_pool_free(pool, vaddr, addr) dma_pool_free(pool, vaddr, addr)
984
985enum pci_dma_burst_strategy {
986 PCI_DMA_BURST_INFINITY,
987
988 PCI_DMA_BURST_BOUNDARY,
989
990 PCI_DMA_BURST_MULTIPLE,
991
992};
993
994struct msix_entry {
995 u32 vector;
996 u16 entry;
997};
998
999
1000#ifndef CONFIG_PCI_MSI
1001static inline int pci_enable_msi_block(struct pci_dev *dev, unsigned int nvec)
1002{
1003 return -1;
1004}
1005
1006static inline void pci_msi_shutdown(struct pci_dev *dev)
1007{ }
1008static inline void pci_disable_msi(struct pci_dev *dev)
1009{ }
1010
1011static inline int pci_msix_table_size(struct pci_dev *dev)
1012{
1013 return 0;
1014}
1015static inline int pci_enable_msix(struct pci_dev *dev,
1016 struct msix_entry *entries, int nvec)
1017{
1018 return -1;
1019}
1020
1021static inline void pci_msix_shutdown(struct pci_dev *dev)
1022{ }
1023static inline void pci_disable_msix(struct pci_dev *dev)
1024{ }
1025
1026static inline void msi_remove_pci_irq_vectors(struct pci_dev *dev)
1027{ }
1028
1029static inline void pci_restore_msi_state(struct pci_dev *dev)
1030{ }
1031static inline int pci_msi_enabled(void)
1032{
1033 return 0;
1034}
1035#else
1036extern int pci_enable_msi_block(struct pci_dev *dev, unsigned int nvec);
1037extern void pci_msi_shutdown(struct pci_dev *dev);
1038extern void pci_disable_msi(struct pci_dev *dev);
1039extern int pci_msix_table_size(struct pci_dev *dev);
1040extern int pci_enable_msix(struct pci_dev *dev,
1041 struct msix_entry *entries, int nvec);
1042extern void pci_msix_shutdown(struct pci_dev *dev);
1043extern void pci_disable_msix(struct pci_dev *dev);
1044extern void msi_remove_pci_irq_vectors(struct pci_dev *dev);
1045extern void pci_restore_msi_state(struct pci_dev *dev);
1046extern int pci_msi_enabled(void);
1047#endif
1048
1049#ifdef CONFIG_PCIEPORTBUS
1050extern bool pcie_ports_disabled;
1051extern bool pcie_ports_auto;
1052#else
1053#define pcie_ports_disabled true
1054#define pcie_ports_auto false
1055#endif
1056
1057#ifndef CONFIG_PCIEASPM
1058static inline int pcie_aspm_enabled(void) { return 0; }
1059static inline bool pcie_aspm_support_enabled(void) { return false; }
1060#else
1061extern int pcie_aspm_enabled(void);
1062extern bool pcie_aspm_support_enabled(void);
1063#endif
1064
1065#ifdef CONFIG_PCIEAER
1066void pci_no_aer(void);
1067bool pci_aer_available(void);
1068#else
1069static inline void pci_no_aer(void) { }
1070static inline bool pci_aer_available(void) { return false; }
1071#endif
1072
1073#ifndef CONFIG_PCIE_ECRC
1074static inline void pcie_set_ecrc_checking(struct pci_dev *dev)
1075{
1076 return;
1077}
1078static inline void pcie_ecrc_get_policy(char *str) {};
1079#else
1080extern void pcie_set_ecrc_checking(struct pci_dev *dev);
1081extern void pcie_ecrc_get_policy(char *str);
1082#endif
1083
1084#define pci_enable_msi(pdev) pci_enable_msi_block(pdev, 1)
1085
1086#ifdef CONFIG_HT_IRQ
1087
1088int ht_create_irq(struct pci_dev *dev, int idx);
1089void ht_destroy_irq(unsigned int irq);
1090#endif
1091
1092extern void pci_cfg_access_lock(struct pci_dev *dev);
1093extern bool pci_cfg_access_trylock(struct pci_dev *dev);
1094extern void pci_cfg_access_unlock(struct pci_dev *dev);
1095
1096
1097
1098
1099
1100
1101#ifdef CONFIG_PCI_DOMAINS
1102extern int pci_domains_supported;
1103#else
1104enum { pci_domains_supported = 0 };
1105static inline int pci_domain_nr(struct pci_bus *bus)
1106{
1107 return 0;
1108}
1109
1110static inline int pci_proc_domain(struct pci_bus *bus)
1111{
1112 return 0;
1113}
1114#endif
1115
1116
1117typedef int (*arch_set_vga_state_t)(struct pci_dev *pdev, bool decode,
1118 unsigned int command_bits, u32 flags);
1119extern void pci_register_set_vga_state(arch_set_vga_state_t func);
1120
1121#else
1122
1123
1124
1125
1126
1127
1128#define _PCI_NOP(o, s, t) \
1129 static inline int pci_##o##_config_##s(struct pci_dev *dev, \
1130 int where, t val) \
1131 { return PCIBIOS_FUNC_NOT_SUPPORTED; }
1132
1133#define _PCI_NOP_ALL(o, x) _PCI_NOP(o, byte, u8 x) \
1134 _PCI_NOP(o, word, u16 x) \
1135 _PCI_NOP(o, dword, u32 x)
1136_PCI_NOP_ALL(read, *)
1137_PCI_NOP_ALL(write,)
1138
1139static inline struct pci_dev *pci_get_device(unsigned int vendor,
1140 unsigned int device,
1141 struct pci_dev *from)
1142{
1143 return NULL;
1144}
1145
1146static inline struct pci_dev *pci_get_subsys(unsigned int vendor,
1147 unsigned int device,
1148 unsigned int ss_vendor,
1149 unsigned int ss_device,
1150 struct pci_dev *from)
1151{
1152 return NULL;
1153}
1154
1155static inline struct pci_dev *pci_get_class(unsigned int class,
1156 struct pci_dev *from)
1157{
1158 return NULL;
1159}
1160
1161#define pci_dev_present(ids) (0)
1162#define no_pci_devices() (1)
1163#define pci_dev_put(dev) do { } while (0)
1164
1165static inline void pci_set_master(struct pci_dev *dev)
1166{ }
1167
1168static inline int pci_enable_device(struct pci_dev *dev)
1169{
1170 return -EIO;
1171}
1172
1173static inline void pci_disable_device(struct pci_dev *dev)
1174{ }
1175
1176static inline int pci_set_dma_mask(struct pci_dev *dev, u64 mask)
1177{
1178 return -EIO;
1179}
1180
1181static inline int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask)
1182{
1183 return -EIO;
1184}
1185
1186static inline int pci_set_dma_max_seg_size(struct pci_dev *dev,
1187 unsigned int size)
1188{
1189 return -EIO;
1190}
1191
1192static inline int pci_set_dma_seg_boundary(struct pci_dev *dev,
1193 unsigned long mask)
1194{
1195 return -EIO;
1196}
1197
1198static inline int pci_assign_resource(struct pci_dev *dev, int i)
1199{
1200 return -EBUSY;
1201}
1202
1203static inline int __pci_register_driver(struct pci_driver *drv,
1204 struct module *owner)
1205{
1206 return 0;
1207}
1208
1209static inline int pci_register_driver(struct pci_driver *drv)
1210{
1211 return 0;
1212}
1213
1214static inline void pci_unregister_driver(struct pci_driver *drv)
1215{ }
1216
1217static inline int pci_find_capability(struct pci_dev *dev, int cap)
1218{
1219 return 0;
1220}
1221
1222static inline int pci_find_next_capability(struct pci_dev *dev, u8 post,
1223 int cap)
1224{
1225 return 0;
1226}
1227
1228static inline int pci_find_ext_capability(struct pci_dev *dev, int cap)
1229{
1230 return 0;
1231}
1232
1233
1234static inline int pci_save_state(struct pci_dev *dev)
1235{
1236 return 0;
1237}
1238
1239static inline void pci_restore_state(struct pci_dev *dev)
1240{ }
1241
1242static inline int pci_set_power_state(struct pci_dev *dev, pci_power_t state)
1243{
1244 return 0;
1245}
1246
1247static inline int pci_wake_from_d3(struct pci_dev *dev, bool enable)
1248{
1249 return 0;
1250}
1251
1252static inline pci_power_t pci_choose_state(struct pci_dev *dev,
1253 pm_message_t state)
1254{
1255 return PCI_D0;
1256}
1257
1258static inline int pci_enable_wake(struct pci_dev *dev, pci_power_t state,
1259 int enable)
1260{
1261 return 0;
1262}
1263
1264static inline void pci_enable_ido(struct pci_dev *dev, unsigned long type)
1265{
1266}
1267
1268static inline void pci_disable_ido(struct pci_dev *dev, unsigned long type)
1269{
1270}
1271
1272static inline int pci_enable_obff(struct pci_dev *dev, unsigned long type)
1273{
1274 return 0;
1275}
1276
1277static inline void pci_disable_obff(struct pci_dev *dev)
1278{
1279}
1280
1281static inline int pci_request_regions(struct pci_dev *dev, const char *res_name)
1282{
1283 return -EIO;
1284}
1285
1286static inline void pci_release_regions(struct pci_dev *dev)
1287{ }
1288
1289#define pci_dma_burst_advice(pdev, strat, strategy_parameter) do { } while (0)
1290
1291static inline void pci_block_cfg_access(struct pci_dev *dev)
1292{ }
1293
1294static inline int pci_block_cfg_access_in_atomic(struct pci_dev *dev)
1295{ return 0; }
1296
1297static inline void pci_unblock_cfg_access(struct pci_dev *dev)
1298{ }
1299
1300static inline struct pci_bus *pci_find_next_bus(const struct pci_bus *from)
1301{ return NULL; }
1302
1303static inline struct pci_dev *pci_get_slot(struct pci_bus *bus,
1304 unsigned int devfn)
1305{ return NULL; }
1306
1307static inline struct pci_dev *pci_get_bus_and_slot(unsigned int bus,
1308 unsigned int devfn)
1309{ return NULL; }
1310
1311static inline int pci_domain_nr(struct pci_bus *bus)
1312{ return 0; }
1313
1314#define dev_is_pci(d) (false)
1315#define dev_is_pf(d) (false)
1316#define dev_num_vf(d) (0)
1317#endif
1318
1319
1320
1321#include <asm/pci.h>
1322
1323#ifndef PCIBIOS_MAX_MEM_32
1324#define PCIBIOS_MAX_MEM_32 (-1)
1325#endif
1326
1327
1328
1329#define pci_resource_start(dev, bar) ((dev)->resource[(bar)].start)
1330#define pci_resource_end(dev, bar) ((dev)->resource[(bar)].end)
1331#define pci_resource_flags(dev, bar) ((dev)->resource[(bar)].flags)
1332#define pci_resource_len(dev,bar) \
1333 ((pci_resource_start((dev), (bar)) == 0 && \
1334 pci_resource_end((dev), (bar)) == \
1335 pci_resource_start((dev), (bar))) ? 0 : \
1336 \
1337 (pci_resource_end((dev), (bar)) - \
1338 pci_resource_start((dev), (bar)) + 1))
1339
1340
1341
1342
1343
1344static inline void *pci_get_drvdata(struct pci_dev *pdev)
1345{
1346 return dev_get_drvdata(&pdev->dev);
1347}
1348
1349static inline void pci_set_drvdata(struct pci_dev *pdev, void *data)
1350{
1351 dev_set_drvdata(&pdev->dev, data);
1352}
1353
1354
1355
1356
1357static inline const char *pci_name(const struct pci_dev *pdev)
1358{
1359 return dev_name(&pdev->dev);
1360}
1361
1362
1363
1364
1365
1366#ifndef HAVE_ARCH_PCI_RESOURCE_TO_USER
1367static inline void pci_resource_to_user(const struct pci_dev *dev, int bar,
1368 const struct resource *rsrc, resource_size_t *start,
1369 resource_size_t *end)
1370{
1371 *start = rsrc->start;
1372 *end = rsrc->end;
1373}
1374#endif
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384struct pci_fixup {
1385 u16 vendor, device;
1386 void (*hook)(struct pci_dev *dev);
1387};
1388
1389enum pci_fixup_pass {
1390 pci_fixup_early,
1391 pci_fixup_header,
1392 pci_fixup_final,
1393 pci_fixup_enable,
1394 pci_fixup_resume,
1395 pci_fixup_suspend,
1396 pci_fixup_resume_early,
1397};
1398
1399
1400#define DECLARE_PCI_FIXUP_SECTION(section, name, vendor, device, hook) \
1401 static const struct pci_fixup __pci_fixup_##name __used \
1402 __attribute__((__section__(#section))) = { vendor, device, hook };
1403#define DECLARE_PCI_FIXUP_EARLY(vendor, device, hook) \
1404 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_early, \
1405 vendor##device##hook, vendor, device, hook)
1406#define DECLARE_PCI_FIXUP_HEADER(vendor, device, hook) \
1407 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_header, \
1408 vendor##device##hook, vendor, device, hook)
1409#define DECLARE_PCI_FIXUP_FINAL(vendor, device, hook) \
1410 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_final, \
1411 vendor##device##hook, vendor, device, hook)
1412#define DECLARE_PCI_FIXUP_ENABLE(vendor, device, hook) \
1413 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_enable, \
1414 vendor##device##hook, vendor, device, hook)
1415#define DECLARE_PCI_FIXUP_RESUME(vendor, device, hook) \
1416 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_resume, \
1417 resume##vendor##device##hook, vendor, device, hook)
1418#define DECLARE_PCI_FIXUP_RESUME_EARLY(vendor, device, hook) \
1419 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_resume_early, \
1420 resume_early##vendor##device##hook, vendor, device, hook)
1421#define DECLARE_PCI_FIXUP_SUSPEND(vendor, device, hook) \
1422 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_suspend, \
1423 suspend##vendor##device##hook, vendor, device, hook)
1424
1425#ifdef CONFIG_PCI_QUIRKS
1426void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev);
1427#else
1428static inline void pci_fixup_device(enum pci_fixup_pass pass,
1429 struct pci_dev *dev) {}
1430#endif
1431
1432void __iomem *pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen);
1433void pcim_iounmap(struct pci_dev *pdev, void __iomem *addr);
1434void __iomem * const *pcim_iomap_table(struct pci_dev *pdev);
1435int pcim_iomap_regions(struct pci_dev *pdev, int mask, const char *name);
1436int pcim_iomap_regions_request_all(struct pci_dev *pdev, int mask,
1437 const char *name);
1438void pcim_iounmap_regions(struct pci_dev *pdev, int mask);
1439
1440extern int pci_pci_problems;
1441#define PCIPCI_FAIL 1
1442#define PCIPCI_TRITON 2
1443#define PCIPCI_NATOMA 4
1444#define PCIPCI_VIAETBF 8
1445#define PCIPCI_VSFX 16
1446#define PCIPCI_ALIMAGIK 32
1447#define PCIAGP_FAIL 64
1448
1449extern unsigned long pci_cardbus_io_size;
1450extern unsigned long pci_cardbus_mem_size;
1451extern u8 __devinitdata pci_dfl_cache_line_size;
1452extern u8 pci_cache_line_size;
1453
1454extern unsigned long pci_hotplug_io_size;
1455extern unsigned long pci_hotplug_mem_size;
1456
1457
1458int pcibios_add_platform_entries(struct pci_dev *dev);
1459void pcibios_disable_device(struct pci_dev *dev);
1460void pcibios_set_master(struct pci_dev *dev);
1461int pcibios_set_pcie_reset_state(struct pci_dev *dev,
1462 enum pcie_reset_state state);
1463
1464#ifdef CONFIG_PCI_MMCONFIG
1465extern void __init pci_mmcfg_early_init(void);
1466extern void __init pci_mmcfg_late_init(void);
1467#else
1468static inline void pci_mmcfg_early_init(void) { }
1469static inline void pci_mmcfg_late_init(void) { }
1470#endif
1471
1472int pci_ext_cfg_avail(struct pci_dev *dev);
1473
1474void __iomem *pci_ioremap_bar(struct pci_dev *pdev, int bar);
1475
1476#ifdef CONFIG_PCI_IOV
1477extern int pci_enable_sriov(struct pci_dev *dev, int nr_virtfn);
1478extern void pci_disable_sriov(struct pci_dev *dev);
1479extern irqreturn_t pci_sriov_migration(struct pci_dev *dev);
1480extern int pci_num_vf(struct pci_dev *dev);
1481#else
1482static inline int pci_enable_sriov(struct pci_dev *dev, int nr_virtfn)
1483{
1484 return -ENODEV;
1485}
1486static inline void pci_disable_sriov(struct pci_dev *dev)
1487{
1488}
1489static inline irqreturn_t pci_sriov_migration(struct pci_dev *dev)
1490{
1491 return IRQ_NONE;
1492}
1493static inline int pci_num_vf(struct pci_dev *dev)
1494{
1495 return 0;
1496}
1497#endif
1498
1499#if defined(CONFIG_HOTPLUG_PCI) || defined(CONFIG_HOTPLUG_PCI_MODULE)
1500extern void pci_hp_create_module_link(struct pci_slot *pci_slot);
1501extern void pci_hp_remove_module_link(struct pci_slot *pci_slot);
1502#endif
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515static inline int pci_pcie_cap(struct pci_dev *dev)
1516{
1517 return dev->pcie_cap;
1518}
1519
1520
1521
1522
1523
1524
1525
1526static inline bool pci_is_pcie(struct pci_dev *dev)
1527{
1528 return !!pci_pcie_cap(dev);
1529}
1530
1531void pci_request_acs(void);
1532
1533
1534#define PCI_VPD_LRDT 0x80
1535#define PCI_VPD_LRDT_ID(x) (x | PCI_VPD_LRDT)
1536
1537
1538#define PCI_VPD_LTIN_ID_STRING 0x02
1539#define PCI_VPD_LTIN_RO_DATA 0x10
1540#define PCI_VPD_LTIN_RW_DATA 0x11
1541
1542#define PCI_VPD_LRDT_ID_STRING PCI_VPD_LRDT_ID(PCI_VPD_LTIN_ID_STRING)
1543#define PCI_VPD_LRDT_RO_DATA PCI_VPD_LRDT_ID(PCI_VPD_LTIN_RO_DATA)
1544#define PCI_VPD_LRDT_RW_DATA PCI_VPD_LRDT_ID(PCI_VPD_LTIN_RW_DATA)
1545
1546
1547#define PCI_VPD_STIN_END 0x78
1548
1549#define PCI_VPD_SRDT_END PCI_VPD_STIN_END
1550
1551#define PCI_VPD_SRDT_TIN_MASK 0x78
1552#define PCI_VPD_SRDT_LEN_MASK 0x07
1553
1554#define PCI_VPD_LRDT_TAG_SIZE 3
1555#define PCI_VPD_SRDT_TAG_SIZE 1
1556
1557#define PCI_VPD_INFO_FLD_HDR_SIZE 3
1558
1559#define PCI_VPD_RO_KEYWORD_PARTNO "PN"
1560#define PCI_VPD_RO_KEYWORD_MFR_ID "MN"
1561#define PCI_VPD_RO_KEYWORD_VENDOR0 "V0"
1562#define PCI_VPD_RO_KEYWORD_CHKSUM "RV"
1563
1564
1565
1566
1567
1568
1569
1570static inline u16 pci_vpd_lrdt_size(const u8 *lrdt)
1571{
1572 return (u16)lrdt[1] + ((u16)lrdt[2] << 8);
1573}
1574
1575
1576
1577
1578
1579
1580
1581static inline u8 pci_vpd_srdt_size(const u8 *srdt)
1582{
1583 return (*srdt) & PCI_VPD_SRDT_LEN_MASK;
1584}
1585
1586
1587
1588
1589
1590
1591
1592static inline u8 pci_vpd_info_field_size(const u8 *info_field)
1593{
1594 return info_field[2];
1595}
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607int pci_vpd_find_tag(const u8 *buf, unsigned int off, unsigned int len, u8 rdt);
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619int pci_vpd_find_info_keyword(const u8 *buf, unsigned int off,
1620 unsigned int len, const char *kw);
1621
1622
1623#ifdef CONFIG_OF
1624struct device_node;
1625extern void pci_set_of_node(struct pci_dev *dev);
1626extern void pci_release_of_node(struct pci_dev *dev);
1627extern void pci_set_bus_of_node(struct pci_bus *bus);
1628extern void pci_release_bus_of_node(struct pci_bus *bus);
1629
1630
1631extern struct device_node * __weak pcibios_get_phb_of_node(struct pci_bus *bus);
1632
1633static inline struct device_node *pci_device_to_OF_node(struct pci_dev *pdev)
1634{
1635 return pdev ? pdev->dev.of_node : NULL;
1636}
1637
1638static inline struct device_node *pci_bus_to_OF_node(struct pci_bus *bus)
1639{
1640 return bus ? bus->dev.of_node : NULL;
1641}
1642
1643#else
1644static inline void pci_set_of_node(struct pci_dev *dev) { }
1645static inline void pci_release_of_node(struct pci_dev *dev) { }
1646static inline void pci_set_bus_of_node(struct pci_bus *bus) { }
1647static inline void pci_release_bus_of_node(struct pci_bus *bus) { }
1648#endif
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659struct pci_dev *pci_find_upstream_pcie_bridge(struct pci_dev *pdev);
1660
1661#endif
1662#endif
1663