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