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