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
21#include <linux/mod_devicetable.h>
22
23#include <linux/types.h>
24#include <linux/init.h>
25#include <linux/ioport.h>
26#include <linux/list.h>
27#include <linux/compiler.h>
28#include <linux/errno.h>
29#include <linux/kobject.h>
30#include <linux/atomic.h>
31#include <linux/device.h>
32#include <linux/interrupt.h>
33#include <linux/io.h>
34#include <linux/resource_ext.h>
35#include <uapi/linux/pci.h>
36
37#include <linux/pci_ids.h>
38
39
40
41
42
43
44
45
46
47
48
49
50
51#define PCI_DEVID(bus, devfn) ((((u16)(bus)) << 8) | (devfn))
52
53#define PCI_BUS_NUM(x) (((x) >> 8) & 0xff)
54
55
56struct pci_slot {
57 struct pci_bus *bus;
58 struct list_head list;
59 struct hotplug_slot *hotplug;
60 unsigned char number;
61 struct kobject kobj;
62};
63
64static inline const char *pci_slot_name(const struct pci_slot *slot)
65{
66 return kobject_name(&slot->kobj);
67}
68
69
70enum pci_mmap_state {
71 pci_mmap_io,
72 pci_mmap_mem
73};
74
75
76enum {
77
78 PCI_STD_RESOURCES,
79 PCI_STD_RESOURCE_END = 5,
80
81
82 PCI_ROM_RESOURCE,
83
84
85#ifdef CONFIG_PCI_IOV
86 PCI_IOV_RESOURCES,
87 PCI_IOV_RESOURCE_END = PCI_IOV_RESOURCES + PCI_SRIOV_NUM_BARS - 1,
88#endif
89
90
91#define PCI_BRIDGE_RESOURCE_NUM 4
92
93 PCI_BRIDGE_RESOURCES,
94 PCI_BRIDGE_RESOURCE_END = PCI_BRIDGE_RESOURCES +
95 PCI_BRIDGE_RESOURCE_NUM - 1,
96
97
98 PCI_NUM_RESOURCES,
99
100
101 DEVICE_COUNT_RESOURCE = PCI_NUM_RESOURCES,
102};
103
104
105
106
107
108
109
110
111
112
113
114
115enum pci_interrupt_pin {
116 PCI_INTERRUPT_UNKNOWN,
117 PCI_INTERRUPT_INTA,
118 PCI_INTERRUPT_INTB,
119 PCI_INTERRUPT_INTC,
120 PCI_INTERRUPT_INTD,
121};
122
123
124#define PCI_NUM_INTX 4
125
126
127
128
129
130typedef int __bitwise pci_power_t;
131
132#define PCI_D0 ((pci_power_t __force) 0)
133#define PCI_D1 ((pci_power_t __force) 1)
134#define PCI_D2 ((pci_power_t __force) 2)
135#define PCI_D3hot ((pci_power_t __force) 3)
136#define PCI_D3cold ((pci_power_t __force) 4)
137#define PCI_UNKNOWN ((pci_power_t __force) 5)
138#define PCI_POWER_ERROR ((pci_power_t __force) -1)
139
140
141extern const char *pci_power_names[];
142
143static inline const char *pci_power_name(pci_power_t state)
144{
145 return pci_power_names[1 + (__force int) state];
146}
147
148#define PCI_PM_D2_DELAY 200
149#define PCI_PM_D3_WAIT 10
150#define PCI_PM_D3COLD_WAIT 100
151#define PCI_PM_BUS_WAIT 50
152
153
154
155
156
157
158typedef unsigned int __bitwise pci_channel_state_t;
159
160enum pci_channel_state {
161
162 pci_channel_io_normal = (__force pci_channel_state_t) 1,
163
164
165 pci_channel_io_frozen = (__force pci_channel_state_t) 2,
166
167
168 pci_channel_io_perm_failure = (__force pci_channel_state_t) 3,
169};
170
171typedef unsigned int __bitwise pcie_reset_state_t;
172
173enum pcie_reset_state {
174
175 pcie_deassert_reset = (__force pcie_reset_state_t) 1,
176
177
178 pcie_warm_reset = (__force pcie_reset_state_t) 2,
179
180
181 pcie_hot_reset = (__force pcie_reset_state_t) 3
182};
183
184typedef unsigned short __bitwise pci_dev_flags_t;
185enum pci_dev_flags {
186
187 PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG = (__force pci_dev_flags_t) (1 << 0),
188
189 PCI_DEV_FLAGS_NO_D3 = (__force pci_dev_flags_t) (1 << 1),
190
191 PCI_DEV_FLAGS_ASSIGNED = (__force pci_dev_flags_t) (1 << 2),
192
193 PCI_DEV_FLAGS_ACS_ENABLED_QUIRK = (__force pci_dev_flags_t) (1 << 3),
194
195 PCI_DEV_FLAG_PCIE_BRIDGE_ALIAS = (__force pci_dev_flags_t) (1 << 5),
196
197 PCI_DEV_FLAGS_NO_BUS_RESET = (__force pci_dev_flags_t) (1 << 6),
198
199 PCI_DEV_FLAGS_NO_PM_RESET = (__force pci_dev_flags_t) (1 << 7),
200
201 PCI_DEV_FLAGS_VPD_REF_F0 = (__force pci_dev_flags_t) (1 << 8),
202
203 PCI_DEV_FLAGS_BRIDGE_XLATE_ROOT = (__force pci_dev_flags_t) (1 << 9),
204
205 PCI_DEV_FLAGS_NO_FLR_RESET = (__force pci_dev_flags_t) (1 << 10),
206
207 PCI_DEV_FLAGS_NO_RELAXED_ORDERING = (__force pci_dev_flags_t) (1 << 11),
208};
209
210enum pci_irq_reroute_variant {
211 INTEL_IRQ_REROUTE_VARIANT = 1,
212 MAX_IRQ_REROUTE_VARIANTS = 3
213};
214
215typedef unsigned short __bitwise pci_bus_flags_t;
216enum pci_bus_flags {
217 PCI_BUS_FLAGS_NO_MSI = (__force pci_bus_flags_t) 1,
218 PCI_BUS_FLAGS_NO_MMRBC = (__force pci_bus_flags_t) 2,
219 PCI_BUS_FLAGS_NO_AERSID = (__force pci_bus_flags_t) 4,
220};
221
222
223enum pcie_link_width {
224 PCIE_LNK_WIDTH_RESRV = 0x00,
225 PCIE_LNK_X1 = 0x01,
226 PCIE_LNK_X2 = 0x02,
227 PCIE_LNK_X4 = 0x04,
228 PCIE_LNK_X8 = 0x08,
229 PCIE_LNK_X12 = 0x0c,
230 PCIE_LNK_X16 = 0x10,
231 PCIE_LNK_X32 = 0x20,
232 PCIE_LNK_WIDTH_UNKNOWN = 0xff,
233};
234
235
236enum pci_bus_speed {
237 PCI_SPEED_33MHz = 0x00,
238 PCI_SPEED_66MHz = 0x01,
239 PCI_SPEED_66MHz_PCIX = 0x02,
240 PCI_SPEED_100MHz_PCIX = 0x03,
241 PCI_SPEED_133MHz_PCIX = 0x04,
242 PCI_SPEED_66MHz_PCIX_ECC = 0x05,
243 PCI_SPEED_100MHz_PCIX_ECC = 0x06,
244 PCI_SPEED_133MHz_PCIX_ECC = 0x07,
245 PCI_SPEED_66MHz_PCIX_266 = 0x09,
246 PCI_SPEED_100MHz_PCIX_266 = 0x0a,
247 PCI_SPEED_133MHz_PCIX_266 = 0x0b,
248 AGP_UNKNOWN = 0x0c,
249 AGP_1X = 0x0d,
250 AGP_2X = 0x0e,
251 AGP_4X = 0x0f,
252 AGP_8X = 0x10,
253 PCI_SPEED_66MHz_PCIX_533 = 0x11,
254 PCI_SPEED_100MHz_PCIX_533 = 0x12,
255 PCI_SPEED_133MHz_PCIX_533 = 0x13,
256 PCIE_SPEED_2_5GT = 0x14,
257 PCIE_SPEED_5_0GT = 0x15,
258 PCIE_SPEED_8_0GT = 0x16,
259 PCI_SPEED_UNKNOWN = 0xff,
260};
261
262struct pci_cap_saved_data {
263 u16 cap_nr;
264 bool cap_extended;
265 unsigned int size;
266 u32 data[0];
267};
268
269struct pci_cap_saved_state {
270 struct hlist_node next;
271 struct pci_cap_saved_data cap;
272};
273
274struct irq_affinity;
275struct pcie_link_state;
276struct pci_vpd;
277struct pci_sriov;
278struct pci_ats;
279
280
281struct pci_dev {
282 struct list_head bus_list;
283 struct pci_bus *bus;
284 struct pci_bus *subordinate;
285
286 void *sysdata;
287 struct proc_dir_entry *procent;
288 struct pci_slot *slot;
289
290 unsigned int devfn;
291 unsigned short vendor;
292 unsigned short device;
293 unsigned short subsystem_vendor;
294 unsigned short subsystem_device;
295 unsigned int class;
296 u8 revision;
297 u8 hdr_type;
298#ifdef CONFIG_PCIEAER
299 u16 aer_cap;
300#endif
301 u8 pcie_cap;
302 u8 msi_cap;
303 u8 msix_cap;
304 u8 pcie_mpss:3;
305 u8 rom_base_reg;
306 u8 pin;
307 u16 pcie_flags_reg;
308 unsigned long *dma_alias_mask;
309
310 struct pci_driver *driver;
311 u64 dma_mask;
312
313
314
315
316
317 struct device_dma_parameters dma_parms;
318
319 pci_power_t current_state;
320
321
322 u8 pm_cap;
323 unsigned int pme_support:5;
324
325 unsigned int pme_poll:1;
326 unsigned int d1_support:1;
327 unsigned int d2_support:1;
328 unsigned int no_d1d2:1;
329 unsigned int no_d3cold:1;
330 unsigned int bridge_d3:1;
331 unsigned int d3cold_allowed:1;
332 unsigned int mmio_always_on:1;
333
334 unsigned int wakeup_prepared:1;
335 unsigned int runtime_d3cold:1;
336
337
338
339 unsigned int ignore_hotplug:1;
340 unsigned int hotplug_user_indicators:1;
341
342
343 unsigned int d3_delay;
344 unsigned int d3cold_delay;
345
346#ifdef CONFIG_PCIEASPM
347 struct pcie_link_state *link_state;
348 unsigned int ltr_path:1;
349
350#endif
351
352 pci_channel_state_t error_state;
353 struct device dev;
354
355 int cfg_size;
356
357
358
359
360
361 unsigned int irq;
362 struct resource resource[DEVICE_COUNT_RESOURCE];
363
364 bool match_driver;
365
366 unsigned int transparent:1;
367 unsigned int multifunction:1;
368
369 unsigned int is_added:1;
370 unsigned int is_busmaster:1;
371 unsigned int no_msi:1;
372 unsigned int no_64bit_msi:1;
373 unsigned int block_cfg_access:1;
374 unsigned int broken_parity_status:1;
375 unsigned int irq_reroute_variant:2;
376 unsigned int msi_enabled:1;
377 unsigned int msix_enabled:1;
378 unsigned int ari_enabled:1;
379 unsigned int ats_enabled:1;
380 unsigned int pasid_enabled:1;
381 unsigned int pri_enabled:1;
382 unsigned int is_managed:1;
383 unsigned int needs_freset:1;
384 unsigned int state_saved:1;
385 unsigned int is_physfn:1;
386 unsigned int is_virtfn:1;
387 unsigned int reset_fn:1;
388 unsigned int is_hotplug_bridge:1;
389 unsigned int is_thunderbolt:1;
390 unsigned int __aer_firmware_first_valid:1;
391 unsigned int __aer_firmware_first:1;
392 unsigned int broken_intx_masking:1;
393 unsigned int io_window_1k:1;
394 unsigned int irq_managed:1;
395 unsigned int has_secondary_link:1;
396 unsigned int non_compliant_bars:1;
397 unsigned int is_probed:1;
398 pci_dev_flags_t dev_flags;
399 atomic_t enable_cnt;
400
401 u32 saved_config_space[16];
402 struct hlist_head saved_cap_space;
403 struct bin_attribute *rom_attr;
404 int rom_attr_enabled;
405 struct bin_attribute *res_attr[DEVICE_COUNT_RESOURCE];
406 struct bin_attribute *res_attr_wc[DEVICE_COUNT_RESOURCE];
407
408#ifdef CONFIG_PCIE_PTM
409 unsigned int ptm_root:1;
410 unsigned int ptm_enabled:1;
411 u8 ptm_granularity;
412#endif
413#ifdef CONFIG_PCI_MSI
414 const struct attribute_group **msi_irq_groups;
415#endif
416 struct pci_vpd *vpd;
417#ifdef CONFIG_PCI_ATS
418 union {
419 struct pci_sriov *sriov;
420 struct pci_dev *physfn;
421 };
422 u16 ats_cap;
423 u8 ats_stu;
424 atomic_t ats_ref_cnt;
425#endif
426#ifdef CONFIG_PCI_PRI
427 u32 pri_reqs_alloc;
428#endif
429#ifdef CONFIG_PCI_PASID
430 u16 pasid_features;
431#endif
432 phys_addr_t rom;
433 size_t romlen;
434 char *driver_override;
435
436 unsigned long priv_flags;
437};
438
439static inline struct pci_dev *pci_physfn(struct pci_dev *dev)
440{
441#ifdef CONFIG_PCI_IOV
442 if (dev->is_virtfn)
443 dev = dev->physfn;
444#endif
445 return dev;
446}
447
448struct pci_dev *pci_alloc_dev(struct pci_bus *bus);
449
450#define to_pci_dev(n) container_of(n, struct pci_dev, dev)
451#define for_each_pci_dev(d) while ((d = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, d)) != NULL)
452
453static inline int pci_channel_offline(struct pci_dev *pdev)
454{
455 return (pdev->error_state != pci_channel_io_normal);
456}
457
458struct pci_host_bridge {
459 struct device dev;
460 struct pci_bus *bus;
461 struct pci_ops *ops;
462 void *sysdata;
463 int busnr;
464 struct list_head windows;
465 u8 (*swizzle_irq)(struct pci_dev *, u8 *);
466 int (*map_irq)(const struct pci_dev *, u8, u8);
467 void (*release_fn)(struct pci_host_bridge *);
468 void *release_data;
469 struct msi_controller *msi;
470 unsigned int ignore_reset_delay:1;
471 unsigned int no_ext_tags:1;
472
473 resource_size_t (*align_resource)(struct pci_dev *dev,
474 const struct resource *res,
475 resource_size_t start,
476 resource_size_t size,
477 resource_size_t align);
478 unsigned long private[0] ____cacheline_aligned;
479};
480
481#define to_pci_host_bridge(n) container_of(n, struct pci_host_bridge, dev)
482
483static inline void *pci_host_bridge_priv(struct pci_host_bridge *bridge)
484{
485 return (void *)bridge->private;
486}
487
488static inline struct pci_host_bridge *pci_host_bridge_from_priv(void *priv)
489{
490 return container_of(priv, struct pci_host_bridge, private);
491}
492
493struct pci_host_bridge *pci_alloc_host_bridge(size_t priv);
494struct pci_host_bridge *devm_pci_alloc_host_bridge(struct device *dev,
495 size_t priv);
496void pci_free_host_bridge(struct pci_host_bridge *bridge);
497struct pci_host_bridge *pci_find_host_bridge(struct pci_bus *bus);
498
499void pci_set_host_bridge_release(struct pci_host_bridge *bridge,
500 void (*release_fn)(struct pci_host_bridge *),
501 void *release_data);
502
503int pcibios_root_bridge_prepare(struct pci_host_bridge *bridge);
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518#define PCI_SUBTRACTIVE_DECODE 0x1
519
520struct pci_bus_resource {
521 struct list_head list;
522 struct resource *res;
523 unsigned int flags;
524};
525
526#define PCI_REGION_FLAG_MASK 0x0fU
527
528struct pci_bus {
529 struct list_head node;
530 struct pci_bus *parent;
531 struct list_head children;
532 struct list_head devices;
533 struct pci_dev *self;
534 struct list_head slots;
535
536 struct resource *resource[PCI_BRIDGE_RESOURCE_NUM];
537 struct list_head resources;
538 struct resource busn_res;
539
540 struct pci_ops *ops;
541 struct msi_controller *msi;
542 void *sysdata;
543 struct proc_dir_entry *procdir;
544
545 unsigned char number;
546 unsigned char primary;
547 unsigned char max_bus_speed;
548 unsigned char cur_bus_speed;
549#ifdef CONFIG_PCI_DOMAINS_GENERIC
550 int domain_nr;
551#endif
552
553 char name[48];
554
555 unsigned short bridge_ctl;
556 pci_bus_flags_t bus_flags;
557 struct device *bridge;
558 struct device dev;
559 struct bin_attribute *legacy_io;
560 struct bin_attribute *legacy_mem;
561 unsigned int is_added:1;
562};
563
564#define to_pci_bus(n) container_of(n, struct pci_bus, dev)
565
566
567
568
569
570
571
572
573
574static inline bool pci_is_root_bus(struct pci_bus *pbus)
575{
576 return !(pbus->parent);
577}
578
579
580
581
582
583
584
585
586static inline bool pci_is_bridge(struct pci_dev *dev)
587{
588 return dev->hdr_type == PCI_HEADER_TYPE_BRIDGE ||
589 dev->hdr_type == PCI_HEADER_TYPE_CARDBUS;
590}
591
592#define for_each_pci_bridge(dev, bus) \
593 list_for_each_entry(dev, &bus->devices, bus_list) \
594 if (!pci_is_bridge(dev)) {} else
595
596static inline struct pci_dev *pci_upstream_bridge(struct pci_dev *dev)
597{
598 dev = pci_physfn(dev);
599 if (pci_is_root_bus(dev->bus))
600 return NULL;
601
602 return dev->bus->self;
603}
604
605struct device *pci_get_host_bridge_device(struct pci_dev *dev);
606void pci_put_host_bridge_device(struct device *dev);
607
608#ifdef CONFIG_PCI_MSI
609static inline bool pci_dev_msi_enabled(struct pci_dev *pci_dev)
610{
611 return pci_dev->msi_enabled || pci_dev->msix_enabled;
612}
613#else
614static inline bool pci_dev_msi_enabled(struct pci_dev *pci_dev) { return false; }
615#endif
616
617
618#define PCIBIOS_SUCCESSFUL 0x00
619#define PCIBIOS_FUNC_NOT_SUPPORTED 0x81
620#define PCIBIOS_BAD_VENDOR_ID 0x83
621#define PCIBIOS_DEVICE_NOT_FOUND 0x86
622#define PCIBIOS_BAD_REGISTER_NUMBER 0x87
623#define PCIBIOS_SET_FAILED 0x88
624#define PCIBIOS_BUFFER_TOO_SMALL 0x89
625
626
627static inline int pcibios_err_to_errno(int err)
628{
629 if (err <= PCIBIOS_SUCCESSFUL)
630 return err;
631
632 switch (err) {
633 case PCIBIOS_FUNC_NOT_SUPPORTED:
634 return -ENOENT;
635 case PCIBIOS_BAD_VENDOR_ID:
636 return -ENOTTY;
637 case PCIBIOS_DEVICE_NOT_FOUND:
638 return -ENODEV;
639 case PCIBIOS_BAD_REGISTER_NUMBER:
640 return -EFAULT;
641 case PCIBIOS_SET_FAILED:
642 return -EIO;
643 case PCIBIOS_BUFFER_TOO_SMALL:
644 return -ENOSPC;
645 }
646
647 return -ERANGE;
648}
649
650
651
652struct pci_ops {
653 int (*add_bus)(struct pci_bus *bus);
654 void (*remove_bus)(struct pci_bus *bus);
655 void __iomem *(*map_bus)(struct pci_bus *bus, unsigned int devfn, int where);
656 int (*read)(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 *val);
657 int (*write)(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 val);
658};
659
660
661
662
663
664int raw_pci_read(unsigned int domain, unsigned int bus, unsigned int devfn,
665 int reg, int len, u32 *val);
666int raw_pci_write(unsigned int domain, unsigned int bus, unsigned int devfn,
667 int reg, int len, u32 val);
668
669#ifdef CONFIG_PCI_BUS_ADDR_T_64BIT
670typedef u64 pci_bus_addr_t;
671#else
672typedef u32 pci_bus_addr_t;
673#endif
674
675struct pci_bus_region {
676 pci_bus_addr_t start;
677 pci_bus_addr_t end;
678};
679
680struct pci_dynids {
681 spinlock_t lock;
682 struct list_head list;
683};
684
685
686
687
688
689
690
691
692
693typedef unsigned int __bitwise pci_ers_result_t;
694
695enum pci_ers_result {
696
697 PCI_ERS_RESULT_NONE = (__force pci_ers_result_t) 1,
698
699
700 PCI_ERS_RESULT_CAN_RECOVER = (__force pci_ers_result_t) 2,
701
702
703 PCI_ERS_RESULT_NEED_RESET = (__force pci_ers_result_t) 3,
704
705
706 PCI_ERS_RESULT_DISCONNECT = (__force pci_ers_result_t) 4,
707
708
709 PCI_ERS_RESULT_RECOVERED = (__force pci_ers_result_t) 5,
710
711
712 PCI_ERS_RESULT_NO_AER_DRIVER = (__force pci_ers_result_t) 6,
713};
714
715
716struct pci_error_handlers {
717
718 pci_ers_result_t (*error_detected)(struct pci_dev *dev,
719 enum pci_channel_state error);
720
721
722 pci_ers_result_t (*mmio_enabled)(struct pci_dev *dev);
723
724
725 pci_ers_result_t (*slot_reset)(struct pci_dev *dev);
726
727
728 void (*reset_prepare)(struct pci_dev *dev);
729 void (*reset_done)(struct pci_dev *dev);
730
731
732 void (*resume)(struct pci_dev *dev);
733};
734
735
736struct module;
737struct pci_driver {
738 struct list_head node;
739 const char *name;
740 const struct pci_device_id *id_table;
741 int (*probe)(struct pci_dev *dev, const struct pci_device_id *id);
742 void (*remove)(struct pci_dev *dev);
743 int (*suspend)(struct pci_dev *dev, pm_message_t state);
744 int (*suspend_late)(struct pci_dev *dev, pm_message_t state);
745 int (*resume_early)(struct pci_dev *dev);
746 int (*resume) (struct pci_dev *dev);
747 void (*shutdown) (struct pci_dev *dev);
748 int (*sriov_configure) (struct pci_dev *dev, int num_vfs);
749 const struct pci_error_handlers *err_handler;
750 const struct attribute_group **groups;
751 struct device_driver driver;
752 struct pci_dynids dynids;
753};
754
755#define to_pci_driver(drv) container_of(drv, struct pci_driver, driver)
756
757
758
759
760
761
762
763
764
765
766#define PCI_DEVICE(vend,dev) \
767 .vendor = (vend), .device = (dev), \
768 .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID
769
770
771
772
773
774
775
776
777
778
779
780#define PCI_DEVICE_SUB(vend, dev, subvend, subdev) \
781 .vendor = (vend), .device = (dev), \
782 .subvendor = (subvend), .subdevice = (subdev)
783
784
785
786
787
788
789
790
791
792
793#define PCI_DEVICE_CLASS(dev_class,dev_class_mask) \
794 .class = (dev_class), .class_mask = (dev_class_mask), \
795 .vendor = PCI_ANY_ID, .device = PCI_ANY_ID, \
796 .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID
797
798
799
800
801
802
803
804
805
806
807
808#define PCI_VDEVICE(vend, dev) \
809 .vendor = PCI_VENDOR_ID_##vend, .device = (dev), \
810 .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID, 0, 0
811
812enum {
813 PCI_REASSIGN_ALL_RSRC = 0x00000001,
814 PCI_REASSIGN_ALL_BUS = 0x00000002,
815 PCI_PROBE_ONLY = 0x00000004,
816 PCI_CAN_SKIP_ISA_ALIGN = 0x00000008,
817 PCI_ENABLE_PROC_DOMAINS = 0x00000010,
818 PCI_COMPAT_DOMAIN_0 = 0x00000020,
819 PCI_SCAN_ALL_PCIE_DEVS = 0x00000040,
820};
821
822
823#ifdef CONFIG_PCI
824
825extern unsigned int pci_flags;
826
827static inline void pci_set_flags(int flags) { pci_flags = flags; }
828static inline void pci_add_flags(int flags) { pci_flags |= flags; }
829static inline void pci_clear_flags(int flags) { pci_flags &= ~flags; }
830static inline int pci_has_flag(int flag) { return pci_flags & flag; }
831
832void pcie_bus_configure_settings(struct pci_bus *bus);
833
834enum pcie_bus_config_types {
835 PCIE_BUS_TUNE_OFF,
836 PCIE_BUS_DEFAULT,
837 PCIE_BUS_SAFE,
838 PCIE_BUS_PERFORMANCE,
839 PCIE_BUS_PEER2PEER,
840};
841
842extern enum pcie_bus_config_types pcie_bus_config;
843
844extern struct bus_type pci_bus_type;
845
846
847
848extern struct list_head pci_root_buses;
849
850int no_pci_devices(void);
851
852void pcibios_resource_survey_bus(struct pci_bus *bus);
853void pcibios_bus_add_device(struct pci_dev *pdev);
854void pcibios_add_bus(struct pci_bus *bus);
855void pcibios_remove_bus(struct pci_bus *bus);
856void pcibios_fixup_bus(struct pci_bus *);
857int __must_check pcibios_enable_device(struct pci_dev *, int mask);
858
859char *pcibios_setup(char *str);
860
861
862resource_size_t pcibios_align_resource(void *, const struct resource *,
863 resource_size_t,
864 resource_size_t);
865
866
867void pci_fixup_cardbus(struct pci_bus *);
868
869
870
871void pcibios_resource_to_bus(struct pci_bus *bus, struct pci_bus_region *region,
872 struct resource *res);
873void pcibios_bus_to_resource(struct pci_bus *bus, struct resource *res,
874 struct pci_bus_region *region);
875void pcibios_scan_specific_bus(int busn);
876struct pci_bus *pci_find_bus(int domain, int busnr);
877void pci_bus_add_devices(const struct pci_bus *bus);
878struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops, void *sysdata);
879struct pci_bus *pci_create_root_bus(struct device *parent, int bus,
880 struct pci_ops *ops, void *sysdata,
881 struct list_head *resources);
882int pci_host_probe(struct pci_host_bridge *bridge);
883int pci_bus_insert_busn_res(struct pci_bus *b, int bus, int busmax);
884int pci_bus_update_busn_res_end(struct pci_bus *b, int busmax);
885void pci_bus_release_busn_res(struct pci_bus *b);
886struct pci_bus *pci_scan_root_bus(struct device *parent, int bus,
887 struct pci_ops *ops, void *sysdata,
888 struct list_head *resources);
889int pci_scan_root_bus_bridge(struct pci_host_bridge *bridge);
890struct pci_bus *pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev,
891 int busnr);
892void pcie_update_link_speed(struct pci_bus *bus, u16 link_status);
893struct pci_slot *pci_create_slot(struct pci_bus *parent, int slot_nr,
894 const char *name,
895 struct hotplug_slot *hotplug);
896void pci_destroy_slot(struct pci_slot *slot);
897#ifdef CONFIG_SYSFS
898void pci_dev_assign_slot(struct pci_dev *dev);
899#else
900static inline void pci_dev_assign_slot(struct pci_dev *dev) { }
901#endif
902int pci_scan_slot(struct pci_bus *bus, int devfn);
903struct pci_dev *pci_scan_single_device(struct pci_bus *bus, int devfn);
904void pci_device_add(struct pci_dev *dev, struct pci_bus *bus);
905unsigned int pci_scan_child_bus(struct pci_bus *bus);
906void pci_bus_add_device(struct pci_dev *dev);
907void pci_read_bridge_bases(struct pci_bus *child);
908struct resource *pci_find_parent_resource(const struct pci_dev *dev,
909 struct resource *res);
910struct pci_dev *pci_find_pcie_root_port(struct pci_dev *dev);
911u8 pci_swizzle_interrupt_pin(const struct pci_dev *dev, u8 pin);
912int pci_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge);
913u8 pci_common_swizzle(struct pci_dev *dev, u8 *pinp);
914struct pci_dev *pci_dev_get(struct pci_dev *dev);
915void pci_dev_put(struct pci_dev *dev);
916void pci_remove_bus(struct pci_bus *b);
917void pci_stop_and_remove_bus_device(struct pci_dev *dev);
918void pci_stop_and_remove_bus_device_locked(struct pci_dev *dev);
919void pci_stop_root_bus(struct pci_bus *bus);
920void pci_remove_root_bus(struct pci_bus *bus);
921void pci_setup_cardbus(struct pci_bus *bus);
922void pcibios_setup_bridge(struct pci_bus *bus, unsigned long type);
923void pci_sort_breadthfirst(void);
924#define dev_is_pci(d) ((d)->bus == &pci_bus_type)
925#define dev_is_pf(d) ((dev_is_pci(d) ? to_pci_dev(d)->is_physfn : false))
926
927
928
929enum pci_lost_interrupt_reason {
930 PCI_LOST_IRQ_NO_INFORMATION = 0,
931 PCI_LOST_IRQ_DISABLE_MSI,
932 PCI_LOST_IRQ_DISABLE_MSIX,
933 PCI_LOST_IRQ_DISABLE_ACPI,
934};
935enum pci_lost_interrupt_reason pci_lost_interrupt(struct pci_dev *dev);
936int pci_find_capability(struct pci_dev *dev, int cap);
937int pci_find_next_capability(struct pci_dev *dev, u8 pos, int cap);
938int pci_find_ext_capability(struct pci_dev *dev, int cap);
939int pci_find_next_ext_capability(struct pci_dev *dev, int pos, int cap);
940int pci_find_ht_capability(struct pci_dev *dev, int ht_cap);
941int pci_find_next_ht_capability(struct pci_dev *dev, int pos, int ht_cap);
942struct pci_bus *pci_find_next_bus(const struct pci_bus *from);
943
944struct pci_dev *pci_get_device(unsigned int vendor, unsigned int device,
945 struct pci_dev *from);
946struct pci_dev *pci_get_subsys(unsigned int vendor, unsigned int device,
947 unsigned int ss_vendor, unsigned int ss_device,
948 struct pci_dev *from);
949struct pci_dev *pci_get_slot(struct pci_bus *bus, unsigned int devfn);
950struct pci_dev *pci_get_domain_bus_and_slot(int domain, unsigned int bus,
951 unsigned int devfn);
952static inline struct pci_dev *pci_get_bus_and_slot(unsigned int bus,
953 unsigned int devfn)
954{
955 return pci_get_domain_bus_and_slot(0, bus, devfn);
956}
957struct pci_dev *pci_get_class(unsigned int class, struct pci_dev *from);
958int pci_dev_present(const struct pci_device_id *ids);
959
960int pci_bus_read_config_byte(struct pci_bus *bus, unsigned int devfn,
961 int where, u8 *val);
962int pci_bus_read_config_word(struct pci_bus *bus, unsigned int devfn,
963 int where, u16 *val);
964int pci_bus_read_config_dword(struct pci_bus *bus, unsigned int devfn,
965 int where, u32 *val);
966int pci_bus_write_config_byte(struct pci_bus *bus, unsigned int devfn,
967 int where, u8 val);
968int pci_bus_write_config_word(struct pci_bus *bus, unsigned int devfn,
969 int where, u16 val);
970int pci_bus_write_config_dword(struct pci_bus *bus, unsigned int devfn,
971 int where, u32 val);
972
973int pci_generic_config_read(struct pci_bus *bus, unsigned int devfn,
974 int where, int size, u32 *val);
975int pci_generic_config_write(struct pci_bus *bus, unsigned int devfn,
976 int where, int size, u32 val);
977int pci_generic_config_read32(struct pci_bus *bus, unsigned int devfn,
978 int where, int size, u32 *val);
979int pci_generic_config_write32(struct pci_bus *bus, unsigned int devfn,
980 int where, int size, u32 val);
981
982struct pci_ops *pci_bus_set_ops(struct pci_bus *bus, struct pci_ops *ops);
983
984int pci_read_config_byte(const struct pci_dev *dev, int where, u8 *val);
985int pci_read_config_word(const struct pci_dev *dev, int where, u16 *val);
986int pci_read_config_dword(const struct pci_dev *dev, int where, u32 *val);
987int pci_write_config_byte(const struct pci_dev *dev, int where, u8 val);
988int pci_write_config_word(const struct pci_dev *dev, int where, u16 val);
989int pci_write_config_dword(const struct pci_dev *dev, int where, u32 val);
990
991int pcie_capability_read_word(struct pci_dev *dev, int pos, u16 *val);
992int pcie_capability_read_dword(struct pci_dev *dev, int pos, u32 *val);
993int pcie_capability_write_word(struct pci_dev *dev, int pos, u16 val);
994int pcie_capability_write_dword(struct pci_dev *dev, int pos, u32 val);
995int pcie_capability_clear_and_set_word(struct pci_dev *dev, int pos,
996 u16 clear, u16 set);
997int pcie_capability_clear_and_set_dword(struct pci_dev *dev, int pos,
998 u32 clear, u32 set);
999
1000static inline int pcie_capability_set_word(struct pci_dev *dev, int pos,
1001 u16 set)
1002{
1003 return pcie_capability_clear_and_set_word(dev, pos, 0, set);
1004}
1005
1006static inline int pcie_capability_set_dword(struct pci_dev *dev, int pos,
1007 u32 set)
1008{
1009 return pcie_capability_clear_and_set_dword(dev, pos, 0, set);
1010}
1011
1012static inline int pcie_capability_clear_word(struct pci_dev *dev, int pos,
1013 u16 clear)
1014{
1015 return pcie_capability_clear_and_set_word(dev, pos, clear, 0);
1016}
1017
1018static inline int pcie_capability_clear_dword(struct pci_dev *dev, int pos,
1019 u32 clear)
1020{
1021 return pcie_capability_clear_and_set_dword(dev, pos, clear, 0);
1022}
1023
1024
1025int pci_user_read_config_byte(struct pci_dev *dev, int where, u8 *val);
1026int pci_user_read_config_word(struct pci_dev *dev, int where, u16 *val);
1027int pci_user_read_config_dword(struct pci_dev *dev, int where, u32 *val);
1028int pci_user_write_config_byte(struct pci_dev *dev, int where, u8 val);
1029int pci_user_write_config_word(struct pci_dev *dev, int where, u16 val);
1030int pci_user_write_config_dword(struct pci_dev *dev, int where, u32 val);
1031
1032int __must_check pci_enable_device(struct pci_dev *dev);
1033int __must_check pci_enable_device_io(struct pci_dev *dev);
1034int __must_check pci_enable_device_mem(struct pci_dev *dev);
1035int __must_check pci_reenable_device(struct pci_dev *);
1036int __must_check pcim_enable_device(struct pci_dev *pdev);
1037void pcim_pin_device(struct pci_dev *pdev);
1038
1039static inline bool pci_intx_mask_supported(struct pci_dev *pdev)
1040{
1041
1042
1043
1044
1045 return !pdev->broken_intx_masking;
1046}
1047
1048static inline int pci_is_enabled(struct pci_dev *pdev)
1049{
1050 return (atomic_read(&pdev->enable_cnt) > 0);
1051}
1052
1053static inline int pci_is_managed(struct pci_dev *pdev)
1054{
1055 return pdev->is_managed;
1056}
1057
1058void pci_disable_device(struct pci_dev *dev);
1059
1060extern unsigned int pcibios_max_latency;
1061void pci_set_master(struct pci_dev *dev);
1062void pci_clear_master(struct pci_dev *dev);
1063
1064int pci_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state state);
1065int pci_set_cacheline_size(struct pci_dev *dev);
1066#define HAVE_PCI_SET_MWI
1067int __must_check pci_set_mwi(struct pci_dev *dev);
1068int __must_check pcim_set_mwi(struct pci_dev *dev);
1069int pci_try_set_mwi(struct pci_dev *dev);
1070void pci_clear_mwi(struct pci_dev *dev);
1071void pci_intx(struct pci_dev *dev, int enable);
1072bool pci_check_and_mask_intx(struct pci_dev *dev);
1073bool pci_check_and_unmask_intx(struct pci_dev *dev);
1074int pci_wait_for_pending(struct pci_dev *dev, int pos, u16 mask);
1075int pci_wait_for_pending_transaction(struct pci_dev *dev);
1076int pcix_get_max_mmrbc(struct pci_dev *dev);
1077int pcix_get_mmrbc(struct pci_dev *dev);
1078int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc);
1079int pcie_get_readrq(struct pci_dev *dev);
1080int pcie_set_readrq(struct pci_dev *dev, int rq);
1081int pcie_get_mps(struct pci_dev *dev);
1082int pcie_set_mps(struct pci_dev *dev, int mps);
1083int pcie_get_minimum_link(struct pci_dev *dev, enum pci_bus_speed *speed,
1084 enum pcie_link_width *width);
1085void pcie_flr(struct pci_dev *dev);
1086int __pci_reset_function_locked(struct pci_dev *dev);
1087int pci_reset_function(struct pci_dev *dev);
1088int pci_reset_function_locked(struct pci_dev *dev);
1089int pci_try_reset_function(struct pci_dev *dev);
1090int pci_probe_reset_slot(struct pci_slot *slot);
1091int pci_reset_slot(struct pci_slot *slot);
1092int pci_try_reset_slot(struct pci_slot *slot);
1093int pci_probe_reset_bus(struct pci_bus *bus);
1094int pci_reset_bus(struct pci_bus *bus);
1095int pci_try_reset_bus(struct pci_bus *bus);
1096void pci_reset_secondary_bus(struct pci_dev *dev);
1097void pcibios_reset_secondary_bus(struct pci_dev *dev);
1098void pci_reset_bridge_secondary_bus(struct pci_dev *dev);
1099void pci_update_resource(struct pci_dev *dev, int resno);
1100int __must_check pci_assign_resource(struct pci_dev *dev, int i);
1101int __must_check pci_reassign_resource(struct pci_dev *dev, int i, resource_size_t add_size, resource_size_t align);
1102void pci_release_resource(struct pci_dev *dev, int resno);
1103int __must_check pci_resize_resource(struct pci_dev *dev, int i, int size);
1104int pci_select_bars(struct pci_dev *dev, unsigned long flags);
1105bool pci_device_is_present(struct pci_dev *pdev);
1106void pci_ignore_hotplug(struct pci_dev *dev);
1107
1108int __printf(6, 7) pci_request_irq(struct pci_dev *dev, unsigned int nr,
1109 irq_handler_t handler, irq_handler_t thread_fn, void *dev_id,
1110 const char *fmt, ...);
1111void pci_free_irq(struct pci_dev *dev, unsigned int nr, void *dev_id);
1112
1113
1114int pci_enable_rom(struct pci_dev *pdev);
1115void pci_disable_rom(struct pci_dev *pdev);
1116void __iomem __must_check *pci_map_rom(struct pci_dev *pdev, size_t *size);
1117void pci_unmap_rom(struct pci_dev *pdev, void __iomem *rom);
1118size_t pci_get_rom_size(struct pci_dev *pdev, void __iomem *rom, size_t size);
1119void __iomem __must_check *pci_platform_rom(struct pci_dev *pdev, size_t *size);
1120
1121
1122int pci_save_state(struct pci_dev *dev);
1123void pci_restore_state(struct pci_dev *dev);
1124struct pci_saved_state *pci_store_saved_state(struct pci_dev *dev);
1125int pci_load_saved_state(struct pci_dev *dev,
1126 struct pci_saved_state *state);
1127int pci_load_and_free_saved_state(struct pci_dev *dev,
1128 struct pci_saved_state **state);
1129struct pci_cap_saved_state *pci_find_saved_cap(struct pci_dev *dev, char cap);
1130struct pci_cap_saved_state *pci_find_saved_ext_cap(struct pci_dev *dev,
1131 u16 cap);
1132int pci_add_cap_save_buffer(struct pci_dev *dev, char cap, unsigned int size);
1133int pci_add_ext_cap_save_buffer(struct pci_dev *dev,
1134 u16 cap, unsigned int size);
1135int __pci_complete_power_transition(struct pci_dev *dev, pci_power_t state);
1136int pci_set_power_state(struct pci_dev *dev, pci_power_t state);
1137pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state);
1138bool pci_pme_capable(struct pci_dev *dev, pci_power_t state);
1139void pci_pme_active(struct pci_dev *dev, bool enable);
1140int pci_enable_wake(struct pci_dev *dev, pci_power_t state, bool enable);
1141int pci_wake_from_d3(struct pci_dev *dev, bool enable);
1142int pci_prepare_to_sleep(struct pci_dev *dev);
1143int pci_back_from_sleep(struct pci_dev *dev);
1144bool pci_dev_run_wake(struct pci_dev *dev);
1145bool pci_check_pme_status(struct pci_dev *dev);
1146void pci_pme_wakeup_bus(struct pci_bus *bus);
1147void pci_d3cold_enable(struct pci_dev *dev);
1148void pci_d3cold_disable(struct pci_dev *dev);
1149bool pcie_relaxed_ordering_enabled(struct pci_dev *dev);
1150
1151
1152int pci_save_vc_state(struct pci_dev *dev);
1153void pci_restore_vc_state(struct pci_dev *dev);
1154void pci_allocate_vc_save_buffers(struct pci_dev *dev);
1155
1156
1157void set_pcie_port_type(struct pci_dev *pdev);
1158void set_pcie_hotplug_bridge(struct pci_dev *pdev);
1159
1160
1161int pci_bus_find_capability(struct pci_bus *bus, unsigned int devfn, int cap);
1162unsigned int pci_rescan_bus_bridge_resize(struct pci_dev *bridge);
1163unsigned int pci_rescan_bus(struct pci_bus *bus);
1164void pci_lock_rescan_remove(void);
1165void pci_unlock_rescan_remove(void);
1166
1167
1168ssize_t pci_read_vpd(struct pci_dev *dev, loff_t pos, size_t count, void *buf);
1169ssize_t pci_write_vpd(struct pci_dev *dev, loff_t pos, size_t count, const void *buf);
1170int pci_set_vpd_size(struct pci_dev *dev, size_t len);
1171
1172
1173resource_size_t pcibios_retrieve_fw_addr(struct pci_dev *dev, int idx);
1174void pci_bus_assign_resources(const struct pci_bus *bus);
1175void pci_bus_claim_resources(struct pci_bus *bus);
1176void pci_bus_size_bridges(struct pci_bus *bus);
1177int pci_claim_resource(struct pci_dev *, int);
1178int pci_claim_bridge_resource(struct pci_dev *bridge, int i);
1179void pci_assign_unassigned_resources(void);
1180void pci_assign_unassigned_bridge_resources(struct pci_dev *bridge);
1181void pci_assign_unassigned_bus_resources(struct pci_bus *bus);
1182void pci_assign_unassigned_root_bus_resources(struct pci_bus *bus);
1183int pci_reassign_bridge_resources(struct pci_dev *bridge, unsigned long type);
1184void pdev_enable_device(struct pci_dev *);
1185int pci_enable_resources(struct pci_dev *, int mask);
1186void pci_assign_irq(struct pci_dev *dev);
1187struct resource *pci_find_resource(struct pci_dev *dev, struct resource *res);
1188#define HAVE_PCI_REQ_REGIONS 2
1189int __must_check pci_request_regions(struct pci_dev *, const char *);
1190int __must_check pci_request_regions_exclusive(struct pci_dev *, const char *);
1191void pci_release_regions(struct pci_dev *);
1192int __must_check pci_request_region(struct pci_dev *, int, const char *);
1193int __must_check pci_request_region_exclusive(struct pci_dev *, int, const char *);
1194void pci_release_region(struct pci_dev *, int);
1195int pci_request_selected_regions(struct pci_dev *, int, const char *);
1196int pci_request_selected_regions_exclusive(struct pci_dev *, int, const char *);
1197void pci_release_selected_regions(struct pci_dev *, int);
1198
1199
1200struct pci_bus *pci_bus_get(struct pci_bus *bus);
1201void pci_bus_put(struct pci_bus *bus);
1202void pci_add_resource(struct list_head *resources, struct resource *res);
1203void pci_add_resource_offset(struct list_head *resources, struct resource *res,
1204 resource_size_t offset);
1205void pci_free_resource_list(struct list_head *resources);
1206void pci_bus_add_resource(struct pci_bus *bus, struct resource *res,
1207 unsigned int flags);
1208struct resource *pci_bus_resource_n(const struct pci_bus *bus, int n);
1209void pci_bus_remove_resources(struct pci_bus *bus);
1210int devm_request_pci_bus_resources(struct device *dev,
1211 struct list_head *resources);
1212
1213#define pci_bus_for_each_resource(bus, res, i) \
1214 for (i = 0; \
1215 (res = pci_bus_resource_n(bus, i)) || i < PCI_BRIDGE_RESOURCE_NUM; \
1216 i++)
1217
1218int __must_check pci_bus_alloc_resource(struct pci_bus *bus,
1219 struct resource *res, resource_size_t size,
1220 resource_size_t align, resource_size_t min,
1221 unsigned long type_mask,
1222 resource_size_t (*alignf)(void *,
1223 const struct resource *,
1224 resource_size_t,
1225 resource_size_t),
1226 void *alignf_data);
1227
1228
1229int pci_register_io_range(phys_addr_t addr, resource_size_t size);
1230unsigned long pci_address_to_pio(phys_addr_t addr);
1231phys_addr_t pci_pio_to_address(unsigned long pio);
1232int pci_remap_iospace(const struct resource *res, phys_addr_t phys_addr);
1233void pci_unmap_iospace(struct resource *res);
1234void __iomem *devm_pci_remap_cfgspace(struct device *dev,
1235 resource_size_t offset,
1236 resource_size_t size);
1237void __iomem *devm_pci_remap_cfg_resource(struct device *dev,
1238 struct resource *res);
1239
1240static inline pci_bus_addr_t pci_bus_address(struct pci_dev *pdev, int bar)
1241{
1242 struct pci_bus_region region;
1243
1244 pcibios_resource_to_bus(pdev->bus, ®ion, &pdev->resource[bar]);
1245 return region.start;
1246}
1247
1248
1249int __must_check __pci_register_driver(struct pci_driver *, struct module *,
1250 const char *mod_name);
1251
1252
1253#define pci_register_driver(driver) \
1254 __pci_register_driver(driver, THIS_MODULE, KBUILD_MODNAME)
1255
1256void pci_unregister_driver(struct pci_driver *dev);
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266#define module_pci_driver(__pci_driver) \
1267 module_driver(__pci_driver, pci_register_driver, pci_unregister_driver)
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277#define builtin_pci_driver(__pci_driver) \
1278 builtin_driver(__pci_driver, pci_register_driver)
1279
1280struct pci_driver *pci_dev_driver(const struct pci_dev *dev);
1281int pci_add_dynid(struct pci_driver *drv,
1282 unsigned int vendor, unsigned int device,
1283 unsigned int subvendor, unsigned int subdevice,
1284 unsigned int class, unsigned int class_mask,
1285 unsigned long driver_data);
1286const struct pci_device_id *pci_match_id(const struct pci_device_id *ids,
1287 struct pci_dev *dev);
1288int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max,
1289 int pass);
1290
1291void pci_walk_bus(struct pci_bus *top, int (*cb)(struct pci_dev *, void *),
1292 void *userdata);
1293int pci_cfg_space_size(struct pci_dev *dev);
1294unsigned char pci_bus_max_busnr(struct pci_bus *bus);
1295void pci_setup_bridge(struct pci_bus *bus);
1296resource_size_t pcibios_window_alignment(struct pci_bus *bus,
1297 unsigned long type);
1298resource_size_t pcibios_iov_resource_alignment(struct pci_dev *dev, int resno);
1299
1300#define PCI_VGA_STATE_CHANGE_BRIDGE (1 << 0)
1301#define PCI_VGA_STATE_CHANGE_DECODES (1 << 1)
1302
1303int pci_set_vga_state(struct pci_dev *pdev, bool decode,
1304 unsigned int command_bits, u32 flags);
1305
1306#define PCI_IRQ_LEGACY (1 << 0)
1307#define PCI_IRQ_MSI (1 << 1)
1308#define PCI_IRQ_MSIX (1 << 2)
1309#define PCI_IRQ_AFFINITY (1 << 3)
1310#define PCI_IRQ_ALL_TYPES \
1311 (PCI_IRQ_LEGACY | PCI_IRQ_MSI | PCI_IRQ_MSIX)
1312
1313
1314
1315#include <linux/pci-dma.h>
1316#include <linux/dmapool.h>
1317
1318#define pci_pool dma_pool
1319#define pci_pool_create(name, pdev, size, align, allocation) \
1320 dma_pool_create(name, &pdev->dev, size, align, allocation)
1321#define pci_pool_destroy(pool) dma_pool_destroy(pool)
1322#define pci_pool_alloc(pool, flags, handle) dma_pool_alloc(pool, flags, handle)
1323#define pci_pool_zalloc(pool, flags, handle) \
1324 dma_pool_zalloc(pool, flags, handle)
1325#define pci_pool_free(pool, vaddr, addr) dma_pool_free(pool, vaddr, addr)
1326
1327struct msix_entry {
1328 u32 vector;
1329 u16 entry;
1330};
1331
1332#ifdef CONFIG_PCI_MSI
1333int pci_msi_vec_count(struct pci_dev *dev);
1334void pci_disable_msi(struct pci_dev *dev);
1335int pci_msix_vec_count(struct pci_dev *dev);
1336void pci_disable_msix(struct pci_dev *dev);
1337void pci_restore_msi_state(struct pci_dev *dev);
1338int pci_msi_enabled(void);
1339int pci_enable_msi(struct pci_dev *dev);
1340int pci_enable_msix_range(struct pci_dev *dev, struct msix_entry *entries,
1341 int minvec, int maxvec);
1342static inline int pci_enable_msix_exact(struct pci_dev *dev,
1343 struct msix_entry *entries, int nvec)
1344{
1345 int rc = pci_enable_msix_range(dev, entries, nvec, nvec);
1346 if (rc < 0)
1347 return rc;
1348 return 0;
1349}
1350int pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs,
1351 unsigned int max_vecs, unsigned int flags,
1352 const struct irq_affinity *affd);
1353
1354void pci_free_irq_vectors(struct pci_dev *dev);
1355int pci_irq_vector(struct pci_dev *dev, unsigned int nr);
1356const struct cpumask *pci_irq_get_affinity(struct pci_dev *pdev, int vec);
1357int pci_irq_get_node(struct pci_dev *pdev, int vec);
1358
1359#else
1360static inline int pci_msi_vec_count(struct pci_dev *dev) { return -ENOSYS; }
1361static inline void pci_disable_msi(struct pci_dev *dev) { }
1362static inline int pci_msix_vec_count(struct pci_dev *dev) { return -ENOSYS; }
1363static inline void pci_disable_msix(struct pci_dev *dev) { }
1364static inline void pci_restore_msi_state(struct pci_dev *dev) { }
1365static inline int pci_msi_enabled(void) { return 0; }
1366static inline int pci_enable_msi(struct pci_dev *dev)
1367{ return -ENOSYS; }
1368static inline int pci_enable_msix_range(struct pci_dev *dev,
1369 struct msix_entry *entries, int minvec, int maxvec)
1370{ return -ENOSYS; }
1371static inline int pci_enable_msix_exact(struct pci_dev *dev,
1372 struct msix_entry *entries, int nvec)
1373{ return -ENOSYS; }
1374
1375static inline int
1376pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs,
1377 unsigned int max_vecs, unsigned int flags,
1378 const struct irq_affinity *aff_desc)
1379{
1380 if ((flags & PCI_IRQ_LEGACY) && min_vecs == 1 && dev->irq)
1381 return 1;
1382 return -ENOSPC;
1383}
1384
1385static inline void pci_free_irq_vectors(struct pci_dev *dev)
1386{
1387}
1388
1389static inline int pci_irq_vector(struct pci_dev *dev, unsigned int nr)
1390{
1391 if (WARN_ON_ONCE(nr > 0))
1392 return -EINVAL;
1393 return dev->irq;
1394}
1395static inline const struct cpumask *pci_irq_get_affinity(struct pci_dev *pdev,
1396 int vec)
1397{
1398 return cpu_possible_mask;
1399}
1400
1401static inline int pci_irq_get_node(struct pci_dev *pdev, int vec)
1402{
1403 return first_online_node;
1404}
1405#endif
1406
1407static inline int
1408pci_alloc_irq_vectors(struct pci_dev *dev, unsigned int min_vecs,
1409 unsigned int max_vecs, unsigned int flags)
1410{
1411 return pci_alloc_irq_vectors_affinity(dev, min_vecs, max_vecs, flags,
1412 NULL);
1413}
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431static inline int pci_irqd_intx_xlate(struct irq_domain *d,
1432 struct device_node *node,
1433 const u32 *intspec,
1434 unsigned int intsize,
1435 unsigned long *out_hwirq,
1436 unsigned int *out_type)
1437{
1438 const u32 intx = intspec[0];
1439
1440 if (intx < PCI_INTERRUPT_INTA || intx > PCI_INTERRUPT_INTD)
1441 return -EINVAL;
1442
1443 *out_hwirq = intx - PCI_INTERRUPT_INTA;
1444 return 0;
1445}
1446
1447#ifdef CONFIG_PCIEPORTBUS
1448extern bool pcie_ports_disabled;
1449extern bool pcie_ports_auto;
1450#else
1451#define pcie_ports_disabled true
1452#define pcie_ports_auto false
1453#endif
1454
1455#ifdef CONFIG_PCIEASPM
1456bool pcie_aspm_support_enabled(void);
1457#else
1458static inline bool pcie_aspm_support_enabled(void) { return false; }
1459#endif
1460
1461#ifdef CONFIG_PCIEAER
1462void pci_no_aer(void);
1463bool pci_aer_available(void);
1464int pci_aer_init(struct pci_dev *dev);
1465#else
1466static inline void pci_no_aer(void) { }
1467static inline bool pci_aer_available(void) { return false; }
1468static inline int pci_aer_init(struct pci_dev *d) { return -ENODEV; }
1469#endif
1470
1471#ifdef CONFIG_PCIE_ECRC
1472void pcie_set_ecrc_checking(struct pci_dev *dev);
1473void pcie_ecrc_get_policy(char *str);
1474#else
1475static inline void pcie_set_ecrc_checking(struct pci_dev *dev) { }
1476static inline void pcie_ecrc_get_policy(char *str) { }
1477#endif
1478
1479#ifdef CONFIG_PCI_ATS
1480
1481void pci_ats_init(struct pci_dev *dev);
1482int pci_enable_ats(struct pci_dev *dev, int ps);
1483void pci_disable_ats(struct pci_dev *dev);
1484int pci_ats_queue_depth(struct pci_dev *dev);
1485#else
1486static inline void pci_ats_init(struct pci_dev *d) { }
1487static inline int pci_enable_ats(struct pci_dev *d, int ps) { return -ENODEV; }
1488static inline void pci_disable_ats(struct pci_dev *d) { }
1489static inline int pci_ats_queue_depth(struct pci_dev *d) { return -ENODEV; }
1490#endif
1491
1492#ifdef CONFIG_PCIE_PTM
1493int pci_enable_ptm(struct pci_dev *dev, u8 *granularity);
1494#else
1495static inline int pci_enable_ptm(struct pci_dev *dev, u8 *granularity)
1496{ return -EINVAL; }
1497#endif
1498
1499void pci_cfg_access_lock(struct pci_dev *dev);
1500bool pci_cfg_access_trylock(struct pci_dev *dev);
1501void pci_cfg_access_unlock(struct pci_dev *dev);
1502
1503
1504
1505
1506
1507
1508#ifdef CONFIG_PCI_DOMAINS
1509extern int pci_domains_supported;
1510int pci_get_new_domain_nr(void);
1511#else
1512enum { pci_domains_supported = 0 };
1513static inline int pci_domain_nr(struct pci_bus *bus) { return 0; }
1514static inline int pci_proc_domain(struct pci_bus *bus) { return 0; }
1515static inline int pci_get_new_domain_nr(void) { return -ENOSYS; }
1516#endif
1517
1518
1519
1520
1521
1522
1523#ifdef CONFIG_PCI_DOMAINS_GENERIC
1524static inline int pci_domain_nr(struct pci_bus *bus)
1525{
1526 return bus->domain_nr;
1527}
1528#ifdef CONFIG_ACPI
1529int acpi_pci_bus_find_domain_nr(struct pci_bus *bus);
1530#else
1531static inline int acpi_pci_bus_find_domain_nr(struct pci_bus *bus)
1532{ return 0; }
1533#endif
1534int pci_bus_find_domain_nr(struct pci_bus *bus, struct device *parent);
1535#endif
1536
1537
1538typedef int (*arch_set_vga_state_t)(struct pci_dev *pdev, bool decode,
1539 unsigned int command_bits, u32 flags);
1540void pci_register_set_vga_state(arch_set_vga_state_t func);
1541
1542static inline int
1543pci_request_io_regions(struct pci_dev *pdev, const char *name)
1544{
1545 return pci_request_selected_regions(pdev,
1546 pci_select_bars(pdev, IORESOURCE_IO), name);
1547}
1548
1549static inline void
1550pci_release_io_regions(struct pci_dev *pdev)
1551{
1552 return pci_release_selected_regions(pdev,
1553 pci_select_bars(pdev, IORESOURCE_IO));
1554}
1555
1556static inline int
1557pci_request_mem_regions(struct pci_dev *pdev, const char *name)
1558{
1559 return pci_request_selected_regions(pdev,
1560 pci_select_bars(pdev, IORESOURCE_MEM), name);
1561}
1562
1563static inline void
1564pci_release_mem_regions(struct pci_dev *pdev)
1565{
1566 return pci_release_selected_regions(pdev,
1567 pci_select_bars(pdev, IORESOURCE_MEM));
1568}
1569
1570#else
1571
1572static inline void pci_set_flags(int flags) { }
1573static inline void pci_add_flags(int flags) { }
1574static inline void pci_clear_flags(int flags) { }
1575static inline int pci_has_flag(int flag) { return 0; }
1576
1577
1578
1579
1580
1581#define _PCI_NOP(o, s, t) \
1582 static inline int pci_##o##_config_##s(struct pci_dev *dev, \
1583 int where, t val) \
1584 { return PCIBIOS_FUNC_NOT_SUPPORTED; }
1585
1586#define _PCI_NOP_ALL(o, x) _PCI_NOP(o, byte, u8 x) \
1587 _PCI_NOP(o, word, u16 x) \
1588 _PCI_NOP(o, dword, u32 x)
1589_PCI_NOP_ALL(read, *)
1590_PCI_NOP_ALL(write,)
1591
1592static inline struct pci_dev *pci_get_device(unsigned int vendor,
1593 unsigned int device,
1594 struct pci_dev *from)
1595{ return NULL; }
1596
1597static inline struct pci_dev *pci_get_subsys(unsigned int vendor,
1598 unsigned int device,
1599 unsigned int ss_vendor,
1600 unsigned int ss_device,
1601 struct pci_dev *from)
1602{ return NULL; }
1603
1604static inline struct pci_dev *pci_get_class(unsigned int class,
1605 struct pci_dev *from)
1606{ return NULL; }
1607
1608#define pci_dev_present(ids) (0)
1609#define no_pci_devices() (1)
1610#define pci_dev_put(dev) do { } while (0)
1611
1612static inline void pci_set_master(struct pci_dev *dev) { }
1613static inline int pci_enable_device(struct pci_dev *dev) { return -EIO; }
1614static inline void pci_disable_device(struct pci_dev *dev) { }
1615static inline int pci_assign_resource(struct pci_dev *dev, int i)
1616{ return -EBUSY; }
1617static inline int __pci_register_driver(struct pci_driver *drv,
1618 struct module *owner)
1619{ return 0; }
1620static inline int pci_register_driver(struct pci_driver *drv)
1621{ return 0; }
1622static inline void pci_unregister_driver(struct pci_driver *drv) { }
1623static inline int pci_find_capability(struct pci_dev *dev, int cap)
1624{ return 0; }
1625static inline int pci_find_next_capability(struct pci_dev *dev, u8 post,
1626 int cap)
1627{ return 0; }
1628static inline int pci_find_ext_capability(struct pci_dev *dev, int cap)
1629{ return 0; }
1630
1631
1632static inline int pci_save_state(struct pci_dev *dev) { return 0; }
1633static inline void pci_restore_state(struct pci_dev *dev) { }
1634static inline int pci_set_power_state(struct pci_dev *dev, pci_power_t state)
1635{ return 0; }
1636static inline int pci_wake_from_d3(struct pci_dev *dev, bool enable)
1637{ return 0; }
1638static inline pci_power_t pci_choose_state(struct pci_dev *dev,
1639 pm_message_t state)
1640{ return PCI_D0; }
1641static inline int pci_enable_wake(struct pci_dev *dev, pci_power_t state,
1642 int enable)
1643{ return 0; }
1644
1645static inline struct resource *pci_find_resource(struct pci_dev *dev,
1646 struct resource *res)
1647{ return NULL; }
1648static inline int pci_request_regions(struct pci_dev *dev, const char *res_name)
1649{ return -EIO; }
1650static inline void pci_release_regions(struct pci_dev *dev) { }
1651
1652static inline unsigned long pci_address_to_pio(phys_addr_t addr) { return -1; }
1653
1654static inline void pci_block_cfg_access(struct pci_dev *dev) { }
1655static inline int pci_block_cfg_access_in_atomic(struct pci_dev *dev)
1656{ return 0; }
1657static inline void pci_unblock_cfg_access(struct pci_dev *dev) { }
1658
1659static inline struct pci_bus *pci_find_next_bus(const struct pci_bus *from)
1660{ return NULL; }
1661static inline struct pci_dev *pci_get_slot(struct pci_bus *bus,
1662 unsigned int devfn)
1663{ return NULL; }
1664static inline struct pci_dev *pci_get_bus_and_slot(unsigned int bus,
1665 unsigned int devfn)
1666{ return NULL; }
1667static inline struct pci_dev *pci_get_domain_bus_and_slot(int domain,
1668 unsigned int bus, unsigned int devfn)
1669{ return NULL; }
1670
1671static inline int pci_domain_nr(struct pci_bus *bus) { return 0; }
1672static inline struct pci_dev *pci_dev_get(struct pci_dev *dev) { return NULL; }
1673static inline int pci_get_new_domain_nr(void) { return -ENOSYS; }
1674
1675#define dev_is_pci(d) (false)
1676#define dev_is_pf(d) (false)
1677static inline bool pci_acs_enabled(struct pci_dev *pdev, u16 acs_flags)
1678{ return false; }
1679static inline int pci_irqd_intx_xlate(struct irq_domain *d,
1680 struct device_node *node,
1681 const u32 *intspec,
1682 unsigned int intsize,
1683 unsigned long *out_hwirq,
1684 unsigned int *out_type)
1685{ return -EINVAL; }
1686#endif
1687
1688
1689
1690#include <asm/pci.h>
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704int pci_mmap_resource_range(struct pci_dev *dev, int bar,
1705 struct vm_area_struct *vma,
1706 enum pci_mmap_state mmap_state, int write_combine);
1707int pci_mmap_page_range(struct pci_dev *pdev, int bar,
1708 struct vm_area_struct *vma,
1709 enum pci_mmap_state mmap_state, int write_combine);
1710
1711#ifndef arch_can_pci_mmap_wc
1712#define arch_can_pci_mmap_wc() 0
1713#endif
1714
1715#ifndef arch_can_pci_mmap_io
1716#define arch_can_pci_mmap_io() 0
1717#define pci_iobar_pfn(pdev, bar, vma) (-EINVAL)
1718#else
1719int pci_iobar_pfn(struct pci_dev *pdev, int bar, struct vm_area_struct *vma);
1720#endif
1721
1722#ifndef pci_root_bus_fwnode
1723#define pci_root_bus_fwnode(bus) NULL
1724#endif
1725
1726
1727
1728
1729
1730#define pci_resource_start(dev, bar) ((dev)->resource[(bar)].start)
1731#define pci_resource_end(dev, bar) ((dev)->resource[(bar)].end)
1732#define pci_resource_flags(dev, bar) ((dev)->resource[(bar)].flags)
1733#define pci_resource_len(dev,bar) \
1734 ((pci_resource_start((dev), (bar)) == 0 && \
1735 pci_resource_end((dev), (bar)) == \
1736 pci_resource_start((dev), (bar))) ? 0 : \
1737 \
1738 (pci_resource_end((dev), (bar)) - \
1739 pci_resource_start((dev), (bar)) + 1))
1740
1741
1742
1743
1744
1745
1746static inline void *pci_get_drvdata(struct pci_dev *pdev)
1747{
1748 return dev_get_drvdata(&pdev->dev);
1749}
1750
1751static inline void pci_set_drvdata(struct pci_dev *pdev, void *data)
1752{
1753 dev_set_drvdata(&pdev->dev, data);
1754}
1755
1756static inline const char *pci_name(const struct pci_dev *pdev)
1757{
1758 return dev_name(&pdev->dev);
1759}
1760
1761
1762
1763
1764
1765
1766#ifdef HAVE_ARCH_PCI_RESOURCE_TO_USER
1767void pci_resource_to_user(const struct pci_dev *dev, int bar,
1768 const struct resource *rsrc,
1769 resource_size_t *start, resource_size_t *end);
1770#else
1771static inline void pci_resource_to_user(const struct pci_dev *dev, int bar,
1772 const struct resource *rsrc, resource_size_t *start,
1773 resource_size_t *end)
1774{
1775 *start = rsrc->start;
1776 *end = rsrc->end;
1777}
1778#endif
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788struct pci_fixup {
1789 u16 vendor;
1790 u16 device;
1791 u32 class;
1792 unsigned int class_shift;
1793 void (*hook)(struct pci_dev *dev);
1794};
1795
1796enum pci_fixup_pass {
1797 pci_fixup_early,
1798 pci_fixup_header,
1799 pci_fixup_final,
1800 pci_fixup_enable,
1801 pci_fixup_resume,
1802 pci_fixup_suspend,
1803 pci_fixup_resume_early,
1804 pci_fixup_suspend_late,
1805};
1806
1807
1808#define DECLARE_PCI_FIXUP_SECTION(section, name, vendor, device, class, \
1809 class_shift, hook) \
1810 static const struct pci_fixup __PASTE(__pci_fixup_##name,__LINE__) __used \
1811 __attribute__((__section__(#section), aligned((sizeof(void *))))) \
1812 = { vendor, device, class, class_shift, hook };
1813
1814#define DECLARE_PCI_FIXUP_CLASS_EARLY(vendor, device, class, \
1815 class_shift, hook) \
1816 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_early, \
1817 hook, vendor, device, class, class_shift, hook)
1818#define DECLARE_PCI_FIXUP_CLASS_HEADER(vendor, device, class, \
1819 class_shift, hook) \
1820 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_header, \
1821 hook, vendor, device, class, class_shift, hook)
1822#define DECLARE_PCI_FIXUP_CLASS_FINAL(vendor, device, class, \
1823 class_shift, hook) \
1824 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_final, \
1825 hook, vendor, device, class, class_shift, hook)
1826#define DECLARE_PCI_FIXUP_CLASS_ENABLE(vendor, device, class, \
1827 class_shift, hook) \
1828 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_enable, \
1829 hook, vendor, device, class, class_shift, hook)
1830#define DECLARE_PCI_FIXUP_CLASS_RESUME(vendor, device, class, \
1831 class_shift, hook) \
1832 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_resume, \
1833 resume##hook, vendor, device, class, class_shift, hook)
1834#define DECLARE_PCI_FIXUP_CLASS_RESUME_EARLY(vendor, device, class, \
1835 class_shift, hook) \
1836 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_resume_early, \
1837 resume_early##hook, vendor, device, class, class_shift, hook)
1838#define DECLARE_PCI_FIXUP_CLASS_SUSPEND(vendor, device, class, \
1839 class_shift, hook) \
1840 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_suspend, \
1841 suspend##hook, vendor, device, class, class_shift, hook)
1842#define DECLARE_PCI_FIXUP_CLASS_SUSPEND_LATE(vendor, device, class, \
1843 class_shift, hook) \
1844 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_suspend_late, \
1845 suspend_late##hook, vendor, device, class, class_shift, hook)
1846
1847#define DECLARE_PCI_FIXUP_EARLY(vendor, device, hook) \
1848 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_early, \
1849 hook, vendor, device, PCI_ANY_ID, 0, hook)
1850#define DECLARE_PCI_FIXUP_HEADER(vendor, device, hook) \
1851 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_header, \
1852 hook, vendor, device, PCI_ANY_ID, 0, hook)
1853#define DECLARE_PCI_FIXUP_FINAL(vendor, device, hook) \
1854 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_final, \
1855 hook, vendor, device, PCI_ANY_ID, 0, hook)
1856#define DECLARE_PCI_FIXUP_ENABLE(vendor, device, hook) \
1857 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_enable, \
1858 hook, vendor, device, PCI_ANY_ID, 0, hook)
1859#define DECLARE_PCI_FIXUP_RESUME(vendor, device, hook) \
1860 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_resume, \
1861 resume##hook, vendor, device, PCI_ANY_ID, 0, hook)
1862#define DECLARE_PCI_FIXUP_RESUME_EARLY(vendor, device, hook) \
1863 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_resume_early, \
1864 resume_early##hook, vendor, device, PCI_ANY_ID, 0, hook)
1865#define DECLARE_PCI_FIXUP_SUSPEND(vendor, device, hook) \
1866 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_suspend, \
1867 suspend##hook, vendor, device, PCI_ANY_ID, 0, hook)
1868#define DECLARE_PCI_FIXUP_SUSPEND_LATE(vendor, device, hook) \
1869 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_suspend_late, \
1870 suspend_late##hook, vendor, device, PCI_ANY_ID, 0, hook)
1871
1872#ifdef CONFIG_PCI_QUIRKS
1873void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev);
1874int pci_dev_specific_acs_enabled(struct pci_dev *dev, u16 acs_flags);
1875int pci_dev_specific_enable_acs(struct pci_dev *dev);
1876#else
1877static inline void pci_fixup_device(enum pci_fixup_pass pass,
1878 struct pci_dev *dev) { }
1879static inline int pci_dev_specific_acs_enabled(struct pci_dev *dev,
1880 u16 acs_flags)
1881{
1882 return -ENOTTY;
1883}
1884static inline int pci_dev_specific_enable_acs(struct pci_dev *dev)
1885{
1886 return -ENOTTY;
1887}
1888#endif
1889
1890void __iomem *pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen);
1891void pcim_iounmap(struct pci_dev *pdev, void __iomem *addr);
1892void __iomem * const *pcim_iomap_table(struct pci_dev *pdev);
1893int pcim_iomap_regions(struct pci_dev *pdev, int mask, const char *name);
1894int pcim_iomap_regions_request_all(struct pci_dev *pdev, int mask,
1895 const char *name);
1896void pcim_iounmap_regions(struct pci_dev *pdev, int mask);
1897
1898extern int pci_pci_problems;
1899#define PCIPCI_FAIL 1
1900#define PCIPCI_TRITON 2
1901#define PCIPCI_NATOMA 4
1902#define PCIPCI_VIAETBF 8
1903#define PCIPCI_VSFX 16
1904#define PCIPCI_ALIMAGIK 32
1905#define PCIAGP_FAIL 64
1906
1907extern unsigned long pci_cardbus_io_size;
1908extern unsigned long pci_cardbus_mem_size;
1909extern u8 pci_dfl_cache_line_size;
1910extern u8 pci_cache_line_size;
1911
1912extern unsigned long pci_hotplug_io_size;
1913extern unsigned long pci_hotplug_mem_size;
1914extern unsigned long pci_hotplug_bus_size;
1915
1916
1917void pcibios_disable_device(struct pci_dev *dev);
1918void pcibios_set_master(struct pci_dev *dev);
1919int pcibios_set_pcie_reset_state(struct pci_dev *dev,
1920 enum pcie_reset_state state);
1921int pcibios_add_device(struct pci_dev *dev);
1922void pcibios_release_device(struct pci_dev *dev);
1923void pcibios_penalize_isa_irq(int irq, int active);
1924int pcibios_alloc_irq(struct pci_dev *dev);
1925void pcibios_free_irq(struct pci_dev *dev);
1926
1927#ifdef CONFIG_HIBERNATE_CALLBACKS
1928extern struct dev_pm_ops pcibios_pm_ops;
1929#endif
1930
1931#if defined(CONFIG_PCI_MMCONFIG) || defined(CONFIG_ACPI_MCFG)
1932void __init pci_mmcfg_early_init(void);
1933void __init pci_mmcfg_late_init(void);
1934#else
1935static inline void pci_mmcfg_early_init(void) { }
1936static inline void pci_mmcfg_late_init(void) { }
1937#endif
1938
1939int pci_ext_cfg_avail(void);
1940
1941void __iomem *pci_ioremap_bar(struct pci_dev *pdev, int bar);
1942void __iomem *pci_ioremap_wc_bar(struct pci_dev *pdev, int bar);
1943
1944#ifdef CONFIG_PCI_IOV
1945int pci_iov_virtfn_bus(struct pci_dev *dev, int id);
1946int pci_iov_virtfn_devfn(struct pci_dev *dev, int id);
1947
1948int pci_enable_sriov(struct pci_dev *dev, int nr_virtfn);
1949void pci_disable_sriov(struct pci_dev *dev);
1950int pci_iov_add_virtfn(struct pci_dev *dev, int id);
1951void pci_iov_remove_virtfn(struct pci_dev *dev, int id);
1952int pci_num_vf(struct pci_dev *dev);
1953int pci_vfs_assigned(struct pci_dev *dev);
1954int pci_sriov_set_totalvfs(struct pci_dev *dev, u16 numvfs);
1955int pci_sriov_get_totalvfs(struct pci_dev *dev);
1956resource_size_t pci_iov_resource_size(struct pci_dev *dev, int resno);
1957void pci_vf_drivers_autoprobe(struct pci_dev *dev, bool probe);
1958#else
1959static inline int pci_iov_virtfn_bus(struct pci_dev *dev, int id)
1960{
1961 return -ENOSYS;
1962}
1963static inline int pci_iov_virtfn_devfn(struct pci_dev *dev, int id)
1964{
1965 return -ENOSYS;
1966}
1967static inline int pci_enable_sriov(struct pci_dev *dev, int nr_virtfn)
1968{ return -ENODEV; }
1969static inline int pci_iov_add_virtfn(struct pci_dev *dev, int id)
1970{
1971 return -ENOSYS;
1972}
1973static inline void pci_iov_remove_virtfn(struct pci_dev *dev,
1974 int id) { }
1975static inline void pci_disable_sriov(struct pci_dev *dev) { }
1976static inline int pci_num_vf(struct pci_dev *dev) { return 0; }
1977static inline int pci_vfs_assigned(struct pci_dev *dev)
1978{ return 0; }
1979static inline int pci_sriov_set_totalvfs(struct pci_dev *dev, u16 numvfs)
1980{ return 0; }
1981static inline int pci_sriov_get_totalvfs(struct pci_dev *dev)
1982{ return 0; }
1983static inline resource_size_t pci_iov_resource_size(struct pci_dev *dev, int resno)
1984{ return 0; }
1985static inline void pci_vf_drivers_autoprobe(struct pci_dev *dev, bool probe) { }
1986#endif
1987
1988#if defined(CONFIG_HOTPLUG_PCI) || defined(CONFIG_HOTPLUG_PCI_MODULE)
1989void pci_hp_create_module_link(struct pci_slot *pci_slot);
1990void pci_hp_remove_module_link(struct pci_slot *pci_slot);
1991#endif
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004static inline int pci_pcie_cap(struct pci_dev *dev)
2005{
2006 return dev->pcie_cap;
2007}
2008
2009
2010
2011
2012
2013
2014
2015static inline bool pci_is_pcie(struct pci_dev *dev)
2016{
2017 return pci_pcie_cap(dev);
2018}
2019
2020
2021
2022
2023
2024static inline u16 pcie_caps_reg(const struct pci_dev *dev)
2025{
2026 return dev->pcie_flags_reg;
2027}
2028
2029
2030
2031
2032
2033static inline int pci_pcie_type(const struct pci_dev *dev)
2034{
2035 return (pcie_caps_reg(dev) & PCI_EXP_FLAGS_TYPE) >> 4;
2036}
2037
2038static inline struct pci_dev *pcie_find_root_port(struct pci_dev *dev)
2039{
2040 while (1) {
2041 if (!pci_is_pcie(dev))
2042 break;
2043 if (pci_pcie_type(dev) == PCI_EXP_TYPE_ROOT_PORT)
2044 return dev;
2045 if (!dev->bus->self)
2046 break;
2047 dev = dev->bus->self;
2048 }
2049 return NULL;
2050}
2051
2052void pci_request_acs(void);
2053bool pci_acs_enabled(struct pci_dev *pdev, u16 acs_flags);
2054bool pci_acs_path_enabled(struct pci_dev *start,
2055 struct pci_dev *end, u16 acs_flags);
2056int pci_enable_atomic_ops_to_root(struct pci_dev *dev, u32 cap_mask);
2057
2058#define PCI_VPD_LRDT 0x80
2059#define PCI_VPD_LRDT_ID(x) ((x) | PCI_VPD_LRDT)
2060
2061
2062#define PCI_VPD_LTIN_ID_STRING 0x02
2063#define PCI_VPD_LTIN_RO_DATA 0x10
2064#define PCI_VPD_LTIN_RW_DATA 0x11
2065
2066#define PCI_VPD_LRDT_ID_STRING PCI_VPD_LRDT_ID(PCI_VPD_LTIN_ID_STRING)
2067#define PCI_VPD_LRDT_RO_DATA PCI_VPD_LRDT_ID(PCI_VPD_LTIN_RO_DATA)
2068#define PCI_VPD_LRDT_RW_DATA PCI_VPD_LRDT_ID(PCI_VPD_LTIN_RW_DATA)
2069
2070
2071#define PCI_VPD_STIN_END 0x0f
2072
2073#define PCI_VPD_SRDT_END (PCI_VPD_STIN_END << 3)
2074
2075#define PCI_VPD_SRDT_TIN_MASK 0x78
2076#define PCI_VPD_SRDT_LEN_MASK 0x07
2077#define PCI_VPD_LRDT_TIN_MASK 0x7f
2078
2079#define PCI_VPD_LRDT_TAG_SIZE 3
2080#define PCI_VPD_SRDT_TAG_SIZE 1
2081
2082#define PCI_VPD_INFO_FLD_HDR_SIZE 3
2083
2084#define PCI_VPD_RO_KEYWORD_PARTNO "PN"
2085#define PCI_VPD_RO_KEYWORD_MFR_ID "MN"
2086#define PCI_VPD_RO_KEYWORD_VENDOR0 "V0"
2087#define PCI_VPD_RO_KEYWORD_CHKSUM "RV"
2088
2089
2090
2091
2092
2093
2094
2095static inline u16 pci_vpd_lrdt_size(const u8 *lrdt)
2096{
2097 return (u16)lrdt[1] + ((u16)lrdt[2] << 8);
2098}
2099
2100
2101
2102
2103
2104
2105
2106static inline u16 pci_vpd_lrdt_tag(const u8 *lrdt)
2107{
2108 return (u16)(lrdt[0] & PCI_VPD_LRDT_TIN_MASK);
2109}
2110
2111
2112
2113
2114
2115
2116
2117static inline u8 pci_vpd_srdt_size(const u8 *srdt)
2118{
2119 return (*srdt) & PCI_VPD_SRDT_LEN_MASK;
2120}
2121
2122
2123
2124
2125
2126
2127
2128static inline u8 pci_vpd_srdt_tag(const u8 *srdt)
2129{
2130 return ((*srdt) & PCI_VPD_SRDT_TIN_MASK) >> 3;
2131}
2132
2133
2134
2135
2136
2137
2138
2139static inline u8 pci_vpd_info_field_size(const u8 *info_field)
2140{
2141 return info_field[2];
2142}
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154int pci_vpd_find_tag(const u8 *buf, unsigned int off, unsigned int len, u8 rdt);
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166int pci_vpd_find_info_keyword(const u8 *buf, unsigned int off,
2167 unsigned int len, const char *kw);
2168
2169
2170#ifdef CONFIG_OF
2171struct device_node;
2172struct irq_domain;
2173void pci_set_of_node(struct pci_dev *dev);
2174void pci_release_of_node(struct pci_dev *dev);
2175void pci_set_bus_of_node(struct pci_bus *bus);
2176void pci_release_bus_of_node(struct pci_bus *bus);
2177struct irq_domain *pci_host_bridge_of_msi_domain(struct pci_bus *bus);
2178int pci_parse_request_of_pci_ranges(struct device *dev,
2179 struct list_head *resources,
2180 struct resource **bus_range);
2181
2182
2183struct device_node *pcibios_get_phb_of_node(struct pci_bus *bus);
2184
2185static inline struct device_node *
2186pci_device_to_OF_node(const struct pci_dev *pdev)
2187{
2188 return pdev ? pdev->dev.of_node : NULL;
2189}
2190
2191static inline struct device_node *pci_bus_to_OF_node(struct pci_bus *bus)
2192{
2193 return bus ? bus->dev.of_node : NULL;
2194}
2195
2196#else
2197static inline void pci_set_of_node(struct pci_dev *dev) { }
2198static inline void pci_release_of_node(struct pci_dev *dev) { }
2199static inline void pci_set_bus_of_node(struct pci_bus *bus) { }
2200static inline void pci_release_bus_of_node(struct pci_bus *bus) { }
2201static inline struct device_node *
2202pci_device_to_OF_node(const struct pci_dev *pdev) { return NULL; }
2203static inline struct irq_domain *
2204pci_host_bridge_of_msi_domain(struct pci_bus *bus) { return NULL; }
2205static inline int pci_parse_request_of_pci_ranges(struct device *dev,
2206 struct list_head *resources,
2207 struct resource **bus_range)
2208{
2209 return -EINVAL;
2210}
2211#endif
2212
2213#ifdef CONFIG_ACPI
2214struct irq_domain *pci_host_bridge_acpi_msi_domain(struct pci_bus *bus);
2215
2216void
2217pci_msi_register_fwnode_provider(struct fwnode_handle *(*fn)(struct device *));
2218#else
2219static inline struct irq_domain *
2220pci_host_bridge_acpi_msi_domain(struct pci_bus *bus) { return NULL; }
2221#endif
2222
2223#ifdef CONFIG_EEH
2224static inline struct eeh_dev *pci_dev_to_eeh_dev(struct pci_dev *pdev)
2225{
2226 return pdev->dev.archdata.edev;
2227}
2228#endif
2229
2230void pci_add_dma_alias(struct pci_dev *dev, u8 devfn);
2231bool pci_devs_are_dma_aliases(struct pci_dev *dev1, struct pci_dev *dev2);
2232int pci_for_each_dma_alias(struct pci_dev *pdev,
2233 int (*fn)(struct pci_dev *pdev,
2234 u16 alias, void *data), void *data);
2235
2236
2237static inline void pci_set_dev_assigned(struct pci_dev *pdev)
2238{
2239 pdev->dev_flags |= PCI_DEV_FLAGS_ASSIGNED;
2240}
2241static inline void pci_clear_dev_assigned(struct pci_dev *pdev)
2242{
2243 pdev->dev_flags &= ~PCI_DEV_FLAGS_ASSIGNED;
2244}
2245static inline bool pci_is_dev_assigned(struct pci_dev *pdev)
2246{
2247 return (pdev->dev_flags & PCI_DEV_FLAGS_ASSIGNED) == PCI_DEV_FLAGS_ASSIGNED;
2248}
2249
2250
2251
2252
2253
2254
2255
2256static inline bool pci_ari_enabled(struct pci_bus *bus)
2257{
2258 return bus->self && bus->self->ari_enabled;
2259}
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269static inline bool pci_is_thunderbolt_attached(struct pci_dev *pdev)
2270{
2271 struct pci_dev *parent = pdev;
2272
2273 if (pdev->is_thunderbolt)
2274 return true;
2275
2276 while ((parent = pci_upstream_bridge(parent)))
2277 if (parent->is_thunderbolt)
2278 return true;
2279
2280 return false;
2281}
2282
2283
2284
2285
2286
2287
2288
2289static inline void pci_uevent_ers(struct pci_dev *pdev,
2290 enum pci_ers_result err_type)
2291{
2292 int idx = 0;
2293 char *envp[3];
2294
2295 switch (err_type) {
2296 case PCI_ERS_RESULT_NONE:
2297 case PCI_ERS_RESULT_CAN_RECOVER:
2298 envp[idx++] = "ERROR_EVENT=BEGIN_RECOVERY";
2299 envp[idx++] = "DEVICE_ONLINE=0";
2300 break;
2301 case PCI_ERS_RESULT_RECOVERED:
2302 envp[idx++] = "ERROR_EVENT=SUCCESSFUL_RECOVERY";
2303 envp[idx++] = "DEVICE_ONLINE=1";
2304 break;
2305 case PCI_ERS_RESULT_DISCONNECT:
2306 envp[idx++] = "ERROR_EVENT=FAILED_RECOVERY";
2307 envp[idx++] = "DEVICE_ONLINE=0";
2308 break;
2309 default:
2310 break;
2311 }
2312
2313 if (idx > 0) {
2314 envp[idx++] = NULL;
2315 kobject_uevent_env(&pdev->dev.kobj, KOBJ_CHANGE, envp);
2316 }
2317}
2318
2319
2320#include <linux/pci-dma-compat.h>
2321
2322#define pci_printk(level, pdev, fmt, arg...) \
2323 dev_printk(level, &(pdev)->dev, fmt, ##arg)
2324
2325#define pci_emerg(pdev, fmt, arg...) dev_emerg(&(pdev)->dev, fmt, ##arg)
2326#define pci_alert(pdev, fmt, arg...) dev_alert(&(pdev)->dev, fmt, ##arg)
2327#define pci_crit(pdev, fmt, arg...) dev_crit(&(pdev)->dev, fmt, ##arg)
2328#define pci_err(pdev, fmt, arg...) dev_err(&(pdev)->dev, fmt, ##arg)
2329#define pci_warn(pdev, fmt, arg...) dev_warn(&(pdev)->dev, fmt, ##arg)
2330#define pci_notice(pdev, fmt, arg...) dev_notice(&(pdev)->dev, fmt, ##arg)
2331#define pci_info(pdev, fmt, arg...) dev_info(&(pdev)->dev, fmt, ##arg)
2332#define pci_dbg(pdev, fmt, arg...) dev_dbg(&(pdev)->dev, fmt, ##arg)
2333
2334#endif
2335