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