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