1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#ifndef LINUX_PCI_H
18#define LINUX_PCI_H
19
20
21#include <linux/pci_regs.h>
22
23
24
25
26
27
28
29
30
31#define PCI_DEVFN(slot, func) ((((slot) & 0x1f) << 3) | ((func) & 0x07))
32#define PCI_SLOT(devfn) (((devfn) >> 3) & 0x1f)
33#define PCI_FUNC(devfn) ((devfn) & 0x07)
34
35
36#define PCIIOC_BASE ('P' << 24 | 'C' << 16 | 'I' << 8)
37#define PCIIOC_CONTROLLER (PCIIOC_BASE | 0x00)
38#define PCIIOC_MMAP_IS_IO (PCIIOC_BASE | 0x01)
39#define PCIIOC_MMAP_IS_MEM (PCIIOC_BASE | 0x02)
40#define PCIIOC_WRITE_COMBINE (PCIIOC_BASE | 0x03)
41
42#ifdef __KERNEL__
43
44#include <linux/mod_devicetable.h>
45
46#include <linux/types.h>
47#include <linux/init.h>
48#include <linux/ioport.h>
49#include <linux/list.h>
50#include <linux/compiler.h>
51#include <linux/errno.h>
52#include <asm/atomic.h>
53#include <linux/device.h>
54
55
56#include <linux/pci_ids.h>
57
58
59enum pci_mmap_state {
60 pci_mmap_io,
61 pci_mmap_mem
62};
63
64
65#define PCI_DMA_BIDIRECTIONAL 0
66#define PCI_DMA_TODEVICE 1
67#define PCI_DMA_FROMDEVICE 2
68#define PCI_DMA_NONE 3
69
70#define DEVICE_COUNT_RESOURCE 12
71
72typedef int __bitwise pci_power_t;
73
74#define PCI_D0 ((pci_power_t __force) 0)
75#define PCI_D1 ((pci_power_t __force) 1)
76#define PCI_D2 ((pci_power_t __force) 2)
77#define PCI_D3hot ((pci_power_t __force) 3)
78#define PCI_D3cold ((pci_power_t __force) 4)
79#define PCI_UNKNOWN ((pci_power_t __force) 5)
80#define PCI_POWER_ERROR ((pci_power_t __force) -1)
81
82
83
84
85
86typedef unsigned int __bitwise pci_channel_state_t;
87
88enum pci_channel_state {
89
90 pci_channel_io_normal = (__force pci_channel_state_t) 1,
91
92
93 pci_channel_io_frozen = (__force pci_channel_state_t) 2,
94
95
96 pci_channel_io_perm_failure = (__force pci_channel_state_t) 3,
97};
98
99typedef unsigned int __bitwise pcie_reset_state_t;
100
101enum pcie_reset_state {
102
103 pcie_deassert_reset = (__force pcie_reset_state_t) 1,
104
105
106 pcie_warm_reset = (__force pcie_reset_state_t) 2,
107
108
109 pcie_hot_reset = (__force pcie_reset_state_t) 3
110};
111
112typedef unsigned short __bitwise pci_dev_flags_t;
113enum pci_dev_flags {
114
115
116
117 PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG = (__force pci_dev_flags_t) 1,
118};
119
120typedef unsigned short __bitwise pci_bus_flags_t;
121enum pci_bus_flags {
122 PCI_BUS_FLAGS_NO_MSI = (__force pci_bus_flags_t) 1,
123 PCI_BUS_FLAGS_NO_MMRBC = (__force pci_bus_flags_t) 2,
124};
125
126struct pci_cap_saved_state {
127 struct hlist_node next;
128 char cap_nr;
129 u32 data[0];
130};
131
132struct pcie_link_state;
133struct pci_vpd;
134
135
136
137
138struct pci_dev {
139 struct list_head bus_list;
140 struct pci_bus *bus;
141 struct pci_bus *subordinate;
142
143 void *sysdata;
144 struct proc_dir_entry *procent;
145
146 unsigned int devfn;
147 unsigned short vendor;
148 unsigned short device;
149 unsigned short subsystem_vendor;
150 unsigned short subsystem_device;
151 unsigned int class;
152 u8 revision;
153 u8 hdr_type;
154 u8 pcie_type;
155 u8 rom_base_reg;
156 u8 pin;
157
158 struct pci_driver *driver;
159 u64 dma_mask;
160
161
162
163
164
165 struct device_dma_parameters dma_parms;
166
167 pci_power_t current_state;
168
169
170
171#ifdef CONFIG_PCIEASPM
172 struct pcie_link_state *link_state;
173#endif
174
175 pci_channel_state_t error_state;
176 struct device dev;
177
178 int cfg_size;
179
180
181
182
183
184 unsigned int irq;
185 struct resource resource[DEVICE_COUNT_RESOURCE];
186
187
188 unsigned int transparent:1;
189 unsigned int multifunction:1;
190
191 unsigned int is_added:1;
192 unsigned int is_busmaster:1;
193 unsigned int no_msi:1;
194 unsigned int no_d1d2:1;
195 unsigned int block_ucfg_access:1;
196 unsigned int broken_parity_status:1;
197 unsigned int msi_enabled:1;
198 unsigned int msix_enabled:1;
199 unsigned int is_managed:1;
200 unsigned int is_pcie:1;
201 pci_dev_flags_t dev_flags;
202 atomic_t enable_cnt;
203
204 u32 saved_config_space[16];
205 struct hlist_head saved_cap_space;
206 struct bin_attribute *rom_attr;
207 int rom_attr_enabled;
208 struct bin_attribute *res_attr[DEVICE_COUNT_RESOURCE];
209 struct bin_attribute *res_attr_wc[DEVICE_COUNT_RESOURCE];
210#ifdef CONFIG_PCI_MSI
211 struct list_head msi_list;
212#endif
213 struct pci_vpd *vpd;
214};
215
216extern struct pci_dev *alloc_pci_dev(void);
217
218#define pci_dev_b(n) list_entry(n, struct pci_dev, bus_list)
219#define to_pci_dev(n) container_of(n, struct pci_dev, dev)
220#define for_each_pci_dev(d) while ((d = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, d)) != NULL)
221
222static inline int pci_channel_offline(struct pci_dev *pdev)
223{
224 return (pdev->error_state != pci_channel_io_normal);
225}
226
227static inline struct pci_cap_saved_state *pci_find_saved_cap(
228 struct pci_dev *pci_dev, char cap)
229{
230 struct pci_cap_saved_state *tmp;
231 struct hlist_node *pos;
232
233 hlist_for_each_entry(tmp, pos, &pci_dev->saved_cap_space, next) {
234 if (tmp->cap_nr == cap)
235 return tmp;
236 }
237 return NULL;
238}
239
240static inline void pci_add_saved_cap(struct pci_dev *pci_dev,
241 struct pci_cap_saved_state *new_cap)
242{
243 hlist_add_head(&new_cap->next, &pci_dev->saved_cap_space);
244}
245
246
247
248
249
250
251
252
253
254#define PCI_ROM_RESOURCE 6
255#define PCI_BRIDGE_RESOURCES 7
256#define PCI_NUM_RESOURCES 11
257
258#ifndef PCI_BUS_NUM_RESOURCES
259#define PCI_BUS_NUM_RESOURCES 16
260#endif
261
262#define PCI_REGION_FLAG_MASK 0x0fU
263
264struct pci_bus {
265 struct list_head node;
266 struct pci_bus *parent;
267 struct list_head children;
268 struct list_head devices;
269 struct pci_dev *self;
270 struct resource *resource[PCI_BUS_NUM_RESOURCES];
271
272
273 struct pci_ops *ops;
274 void *sysdata;
275 struct proc_dir_entry *procdir;
276
277 unsigned char number;
278 unsigned char primary;
279 unsigned char secondary;
280 unsigned char subordinate;
281
282 char name[48];
283
284 unsigned short bridge_ctl;
285 pci_bus_flags_t bus_flags;
286 struct device *bridge;
287 struct device dev;
288 struct bin_attribute *legacy_io;
289 struct bin_attribute *legacy_mem;
290 unsigned int is_added:1;
291};
292
293#define pci_bus_b(n) list_entry(n, struct pci_bus, node)
294#define to_pci_bus(n) container_of(n, struct pci_bus, dev)
295
296
297
298
299#define PCIBIOS_SUCCESSFUL 0x00
300#define PCIBIOS_FUNC_NOT_SUPPORTED 0x81
301#define PCIBIOS_BAD_VENDOR_ID 0x83
302#define PCIBIOS_DEVICE_NOT_FOUND 0x86
303#define PCIBIOS_BAD_REGISTER_NUMBER 0x87
304#define PCIBIOS_SET_FAILED 0x88
305#define PCIBIOS_BUFFER_TOO_SMALL 0x89
306
307
308
309struct pci_ops {
310 int (*read)(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 *val);
311 int (*write)(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 val);
312};
313
314
315
316
317
318extern int raw_pci_read(unsigned int domain, unsigned int bus,
319 unsigned int devfn, int reg, int len, u32 *val);
320extern int raw_pci_write(unsigned int domain, unsigned int bus,
321 unsigned int devfn, int reg, int len, u32 val);
322
323struct pci_bus_region {
324 resource_size_t start;
325 resource_size_t end;
326};
327
328struct pci_dynids {
329 spinlock_t lock;
330 struct list_head list;
331 unsigned int use_driver_data:1;
332};
333
334
335
336
337
338
339
340
341typedef unsigned int __bitwise pci_ers_result_t;
342
343enum pci_ers_result {
344
345 PCI_ERS_RESULT_NONE = (__force pci_ers_result_t) 1,
346
347
348 PCI_ERS_RESULT_CAN_RECOVER = (__force pci_ers_result_t) 2,
349
350
351 PCI_ERS_RESULT_NEED_RESET = (__force pci_ers_result_t) 3,
352
353
354 PCI_ERS_RESULT_DISCONNECT = (__force pci_ers_result_t) 4,
355
356
357 PCI_ERS_RESULT_RECOVERED = (__force pci_ers_result_t) 5,
358};
359
360
361struct pci_error_handlers {
362
363 pci_ers_result_t (*error_detected)(struct pci_dev *dev,
364 enum pci_channel_state error);
365
366
367 pci_ers_result_t (*mmio_enabled)(struct pci_dev *dev);
368
369
370 pci_ers_result_t (*link_reset)(struct pci_dev *dev);
371
372
373 pci_ers_result_t (*slot_reset)(struct pci_dev *dev);
374
375
376 void (*resume)(struct pci_dev *dev);
377};
378
379
380
381struct module;
382struct pci_driver {
383 struct list_head node;
384 char *name;
385 const struct pci_device_id *id_table;
386 int (*probe) (struct pci_dev *dev, const struct pci_device_id *id);
387 void (*remove) (struct pci_dev *dev);
388 int (*suspend) (struct pci_dev *dev, pm_message_t state);
389 int (*suspend_late) (struct pci_dev *dev, pm_message_t state);
390 int (*resume_early) (struct pci_dev *dev);
391 int (*resume) (struct pci_dev *dev);
392 void (*shutdown) (struct pci_dev *dev);
393
394 struct pci_error_handlers *err_handler;
395 struct device_driver driver;
396 struct pci_dynids dynids;
397};
398
399#define to_pci_driver(drv) container_of(drv, struct pci_driver, driver)
400
401
402
403
404
405
406
407
408#define DEFINE_PCI_DEVICE_TABLE(_table) \
409 const struct pci_device_id _table[] __devinitconst
410
411
412
413
414
415
416
417
418
419
420#define PCI_DEVICE(vend,dev) \
421 .vendor = (vend), .device = (dev), \
422 .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID
423
424
425
426
427
428
429
430
431
432
433#define PCI_DEVICE_CLASS(dev_class,dev_class_mask) \
434 .class = (dev_class), .class_mask = (dev_class_mask), \
435 .vendor = PCI_ANY_ID, .device = PCI_ANY_ID, \
436 .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID
437
438
439
440
441
442
443
444
445
446
447
448
449#define PCI_VDEVICE(vendor, device) \
450 PCI_VENDOR_ID_##vendor, (device), \
451 PCI_ANY_ID, PCI_ANY_ID, 0, 0
452
453
454#ifdef CONFIG_PCI
455
456extern struct bus_type pci_bus_type;
457
458
459
460extern struct list_head pci_root_buses;
461
462extern int no_pci_devices(void);
463
464void pcibios_fixup_bus(struct pci_bus *);
465int __must_check pcibios_enable_device(struct pci_dev *, int mask);
466char *pcibios_setup(char *str);
467
468
469void pcibios_align_resource(void *, struct resource *, resource_size_t,
470 resource_size_t);
471void pcibios_update_irq(struct pci_dev *, int irq);
472
473
474
475extern struct pci_bus *pci_find_bus(int domain, int busnr);
476void pci_bus_add_devices(struct pci_bus *bus);
477struct pci_bus *pci_scan_bus_parented(struct device *parent, int bus,
478 struct pci_ops *ops, void *sysdata);
479static inline struct pci_bus * __devinit pci_scan_bus(int bus, struct pci_ops *ops,
480 void *sysdata)
481{
482 struct pci_bus *root_bus;
483 root_bus = pci_scan_bus_parented(NULL, bus, ops, sysdata);
484 if (root_bus)
485 pci_bus_add_devices(root_bus);
486 return root_bus;
487}
488struct pci_bus *pci_create_bus(struct device *parent, int bus,
489 struct pci_ops *ops, void *sysdata);
490struct pci_bus *pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev,
491 int busnr);
492int pci_scan_slot(struct pci_bus *bus, int devfn);
493struct pci_dev *pci_scan_single_device(struct pci_bus *bus, int devfn);
494void pci_device_add(struct pci_dev *dev, struct pci_bus *bus);
495unsigned int pci_scan_child_bus(struct pci_bus *bus);
496int __must_check pci_bus_add_device(struct pci_dev *dev);
497void pci_read_bridge_bases(struct pci_bus *child);
498struct resource *pci_find_parent_resource(const struct pci_dev *dev,
499 struct resource *res);
500int pci_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge);
501extern struct pci_dev *pci_dev_get(struct pci_dev *dev);
502extern void pci_dev_put(struct pci_dev *dev);
503extern void pci_remove_bus(struct pci_bus *b);
504extern void pci_remove_bus_device(struct pci_dev *dev);
505extern void pci_stop_bus_device(struct pci_dev *dev);
506void pci_setup_cardbus(struct pci_bus *bus);
507extern void pci_sort_breadthfirst(void);
508
509
510
511#ifdef CONFIG_PCI_LEGACY
512struct pci_dev __deprecated *pci_find_device(unsigned int vendor,
513 unsigned int device,
514 const struct pci_dev *from);
515struct pci_dev __deprecated *pci_find_slot(unsigned int bus,
516 unsigned int devfn);
517#endif
518
519int pci_find_capability(struct pci_dev *dev, int cap);
520int pci_find_next_capability(struct pci_dev *dev, u8 pos, int cap);
521int pci_find_ext_capability(struct pci_dev *dev, int cap);
522int pci_find_ht_capability(struct pci_dev *dev, int ht_cap);
523int pci_find_next_ht_capability(struct pci_dev *dev, int pos, int ht_cap);
524struct pci_bus *pci_find_next_bus(const struct pci_bus *from);
525
526struct pci_dev *pci_get_device(unsigned int vendor, unsigned int device,
527 struct pci_dev *from);
528struct pci_dev *pci_get_subsys(unsigned int vendor, unsigned int device,
529 unsigned int ss_vendor, unsigned int ss_device,
530 const struct pci_dev *from);
531struct pci_dev *pci_get_slot(struct pci_bus *bus, unsigned int devfn);
532struct pci_dev *pci_get_bus_and_slot(unsigned int bus, unsigned int devfn);
533struct pci_dev *pci_get_class(unsigned int class, struct pci_dev *from);
534int pci_dev_present(const struct pci_device_id *ids);
535
536int pci_bus_read_config_byte(struct pci_bus *bus, unsigned int devfn,
537 int where, u8 *val);
538int pci_bus_read_config_word(struct pci_bus *bus, unsigned int devfn,
539 int where, u16 *val);
540int pci_bus_read_config_dword(struct pci_bus *bus, unsigned int devfn,
541 int where, u32 *val);
542int pci_bus_write_config_byte(struct pci_bus *bus, unsigned int devfn,
543 int where, u8 val);
544int pci_bus_write_config_word(struct pci_bus *bus, unsigned int devfn,
545 int where, u16 val);
546int pci_bus_write_config_dword(struct pci_bus *bus, unsigned int devfn,
547 int where, u32 val);
548
549static inline int pci_read_config_byte(struct pci_dev *dev, int where, u8 *val)
550{
551 return pci_bus_read_config_byte(dev->bus, dev->devfn, where, val);
552}
553static inline int pci_read_config_word(struct pci_dev *dev, int where, u16 *val)
554{
555 return pci_bus_read_config_word(dev->bus, dev->devfn, where, val);
556}
557static inline int pci_read_config_dword(struct pci_dev *dev, int where,
558 u32 *val)
559{
560 return pci_bus_read_config_dword(dev->bus, dev->devfn, where, val);
561}
562static inline int pci_write_config_byte(struct pci_dev *dev, int where, u8 val)
563{
564 return pci_bus_write_config_byte(dev->bus, dev->devfn, where, val);
565}
566static inline int pci_write_config_word(struct pci_dev *dev, int where, u16 val)
567{
568 return pci_bus_write_config_word(dev->bus, dev->devfn, where, val);
569}
570static inline int pci_write_config_dword(struct pci_dev *dev, int where,
571 u32 val)
572{
573 return pci_bus_write_config_dword(dev->bus, dev->devfn, where, val);
574}
575
576int __must_check pci_enable_device(struct pci_dev *dev);
577int __must_check pci_enable_device_io(struct pci_dev *dev);
578int __must_check pci_enable_device_mem(struct pci_dev *dev);
579int __must_check pci_reenable_device(struct pci_dev *);
580int __must_check pcim_enable_device(struct pci_dev *pdev);
581void pcim_pin_device(struct pci_dev *pdev);
582
583static inline int pci_is_managed(struct pci_dev *pdev)
584{
585 return pdev->is_managed;
586}
587
588void pci_disable_device(struct pci_dev *dev);
589void pci_set_master(struct pci_dev *dev);
590int pci_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state state);
591#define HAVE_PCI_SET_MWI
592int __must_check pci_set_mwi(struct pci_dev *dev);
593int pci_try_set_mwi(struct pci_dev *dev);
594void pci_clear_mwi(struct pci_dev *dev);
595void pci_intx(struct pci_dev *dev, int enable);
596void pci_msi_off(struct pci_dev *dev);
597int pci_set_dma_mask(struct pci_dev *dev, u64 mask);
598int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask);
599int pci_set_dma_max_seg_size(struct pci_dev *dev, unsigned int size);
600int pci_set_dma_seg_boundary(struct pci_dev *dev, unsigned long mask);
601int pcix_get_max_mmrbc(struct pci_dev *dev);
602int pcix_get_mmrbc(struct pci_dev *dev);
603int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc);
604int pcie_get_readrq(struct pci_dev *dev);
605int pcie_set_readrq(struct pci_dev *dev, int rq);
606void pci_update_resource(struct pci_dev *dev, struct resource *res, int resno);
607int __must_check pci_assign_resource(struct pci_dev *dev, int i);
608int pci_select_bars(struct pci_dev *dev, unsigned long flags);
609
610
611void __iomem __must_check *pci_map_rom(struct pci_dev *pdev, size_t *size);
612void pci_unmap_rom(struct pci_dev *pdev, void __iomem *rom);
613size_t pci_get_rom_size(void __iomem *rom, size_t size);
614
615
616int pci_save_state(struct pci_dev *dev);
617int pci_restore_state(struct pci_dev *dev);
618int pci_set_power_state(struct pci_dev *dev, pci_power_t state);
619pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state);
620int pci_enable_wake(struct pci_dev *dev, pci_power_t state, int enable);
621
622
623int pci_bus_find_capability(struct pci_bus *bus, unsigned int devfn, int cap);
624
625
626void pci_bus_assign_resources(struct pci_bus *bus);
627void pci_bus_size_bridges(struct pci_bus *bus);
628int pci_claim_resource(struct pci_dev *, int);
629void pci_assign_unassigned_resources(void);
630void pdev_enable_device(struct pci_dev *);
631void pdev_sort_resources(struct pci_dev *, struct resource_list *);
632int pci_enable_resources(struct pci_dev *, int mask);
633void pci_fixup_irqs(u8 (*)(struct pci_dev *, u8 *),
634 int (*)(struct pci_dev *, u8, u8));
635#define HAVE_PCI_REQ_REGIONS 2
636int __must_check pci_request_regions(struct pci_dev *, const char *);
637void pci_release_regions(struct pci_dev *);
638int __must_check pci_request_region(struct pci_dev *, int, const char *);
639void pci_release_region(struct pci_dev *, int);
640int pci_request_selected_regions(struct pci_dev *, int, const char *);
641void pci_release_selected_regions(struct pci_dev *, int);
642
643
644int __must_check pci_bus_alloc_resource(struct pci_bus *bus,
645 struct resource *res, resource_size_t size,
646 resource_size_t align, resource_size_t min,
647 unsigned int type_mask,
648 void (*alignf)(void *, struct resource *,
649 resource_size_t, resource_size_t),
650 void *alignf_data);
651void pci_enable_bridges(struct pci_bus *bus);
652
653
654int __must_check __pci_register_driver(struct pci_driver *, struct module *,
655 const char *mod_name);
656static inline int __must_check pci_register_driver(struct pci_driver *driver)
657{
658 return __pci_register_driver(driver, THIS_MODULE, KBUILD_MODNAME);
659}
660
661void pci_unregister_driver(struct pci_driver *dev);
662void pci_remove_behind_bridge(struct pci_dev *dev);
663struct pci_driver *pci_dev_driver(const struct pci_dev *dev);
664const struct pci_device_id *pci_match_id(const struct pci_device_id *ids,
665 struct pci_dev *dev);
666int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max,
667 int pass);
668
669void pci_walk_bus(struct pci_bus *top, void (*cb)(struct pci_dev *, void *),
670 void *userdata);
671int pci_cfg_space_size_ext(struct pci_dev *dev);
672int pci_cfg_space_size(struct pci_dev *dev);
673unsigned char pci_bus_max_busnr(struct pci_bus *bus);
674
675
676
677#include <linux/dmapool.h>
678
679#define pci_pool dma_pool
680#define pci_pool_create(name, pdev, size, align, allocation) \
681 dma_pool_create(name, &pdev->dev, size, align, allocation)
682#define pci_pool_destroy(pool) dma_pool_destroy(pool)
683#define pci_pool_alloc(pool, flags, handle) dma_pool_alloc(pool, flags, handle)
684#define pci_pool_free(pool, vaddr, addr) dma_pool_free(pool, vaddr, addr)
685
686enum pci_dma_burst_strategy {
687 PCI_DMA_BURST_INFINITY,
688
689 PCI_DMA_BURST_BOUNDARY,
690
691 PCI_DMA_BURST_MULTIPLE,
692
693};
694
695struct msix_entry {
696 u16 vector;
697 u16 entry;
698};
699
700
701#ifndef CONFIG_PCI_MSI
702static inline int pci_enable_msi(struct pci_dev *dev)
703{
704 return -1;
705}
706
707static inline void pci_msi_shutdown(struct pci_dev *dev)
708{ }
709static inline void pci_disable_msi(struct pci_dev *dev)
710{ }
711
712static inline int pci_enable_msix(struct pci_dev *dev,
713 struct msix_entry *entries, int nvec)
714{
715 return -1;
716}
717
718static inline void pci_msix_shutdown(struct pci_dev *dev)
719{ }
720static inline void pci_disable_msix(struct pci_dev *dev)
721{ }
722
723static inline void msi_remove_pci_irq_vectors(struct pci_dev *dev)
724{ }
725
726static inline void pci_restore_msi_state(struct pci_dev *dev)
727{ }
728#else
729extern int pci_enable_msi(struct pci_dev *dev);
730extern void pci_msi_shutdown(struct pci_dev *dev);
731extern void pci_disable_msi(struct pci_dev *dev);
732extern int pci_enable_msix(struct pci_dev *dev,
733 struct msix_entry *entries, int nvec);
734extern void pci_msix_shutdown(struct pci_dev *dev);
735extern void pci_disable_msix(struct pci_dev *dev);
736extern void msi_remove_pci_irq_vectors(struct pci_dev *dev);
737extern void pci_restore_msi_state(struct pci_dev *dev);
738#endif
739
740#ifdef CONFIG_HT_IRQ
741
742int ht_create_irq(struct pci_dev *dev, int idx);
743void ht_destroy_irq(unsigned int irq);
744#endif
745
746extern void pci_block_user_cfg_access(struct pci_dev *dev);
747extern void pci_unblock_user_cfg_access(struct pci_dev *dev);
748
749
750
751
752
753
754#ifdef CONFIG_PCI_DOMAINS
755extern int pci_domains_supported;
756#else
757enum { pci_domains_supported = 0 };
758static inline int pci_domain_nr(struct pci_bus *bus)
759{
760 return 0;
761}
762
763static inline int pci_proc_domain(struct pci_bus *bus)
764{
765 return 0;
766}
767#endif
768
769#else
770
771
772
773
774
775
776#define _PCI_NOP(o, s, t) \
777 static inline int pci_##o##_config_##s(struct pci_dev *dev, \
778 int where, t val) \
779 { return PCIBIOS_FUNC_NOT_SUPPORTED; }
780
781#define _PCI_NOP_ALL(o, x) _PCI_NOP(o, byte, u8 x) \
782 _PCI_NOP(o, word, u16 x) \
783 _PCI_NOP(o, dword, u32 x)
784_PCI_NOP_ALL(read, *)
785_PCI_NOP_ALL(write,)
786
787static inline struct pci_dev *pci_find_device(unsigned int vendor,
788 unsigned int device,
789 const struct pci_dev *from)
790{
791 return NULL;
792}
793
794static inline struct pci_dev *pci_find_slot(unsigned int bus,
795 unsigned int devfn)
796{
797 return NULL;
798}
799
800static inline struct pci_dev *pci_get_device(unsigned int vendor,
801 unsigned int device,
802 struct pci_dev *from)
803{
804 return NULL;
805}
806
807static inline struct pci_dev *pci_get_subsys(unsigned int vendor,
808 unsigned int device,
809 unsigned int ss_vendor,
810 unsigned int ss_device,
811 const struct pci_dev *from)
812{
813 return NULL;
814}
815
816static inline struct pci_dev *pci_get_class(unsigned int class,
817 struct pci_dev *from)
818{
819 return NULL;
820}
821
822#define pci_dev_present(ids) (0)
823#define no_pci_devices() (1)
824#define pci_dev_put(dev) do { } while (0)
825
826static inline void pci_set_master(struct pci_dev *dev)
827{ }
828
829static inline int pci_enable_device(struct pci_dev *dev)
830{
831 return -EIO;
832}
833
834static inline void pci_disable_device(struct pci_dev *dev)
835{ }
836
837static inline int pci_set_dma_mask(struct pci_dev *dev, u64 mask)
838{
839 return -EIO;
840}
841
842static inline int pci_set_dma_max_seg_size(struct pci_dev *dev,
843 unsigned int size)
844{
845 return -EIO;
846}
847
848static inline int pci_set_dma_seg_boundary(struct pci_dev *dev,
849 unsigned long mask)
850{
851 return -EIO;
852}
853
854static inline int pci_assign_resource(struct pci_dev *dev, int i)
855{
856 return -EBUSY;
857}
858
859static inline int __pci_register_driver(struct pci_driver *drv,
860 struct module *owner)
861{
862 return 0;
863}
864
865static inline int pci_register_driver(struct pci_driver *drv)
866{
867 return 0;
868}
869
870static inline void pci_unregister_driver(struct pci_driver *drv)
871{ }
872
873static inline int pci_find_capability(struct pci_dev *dev, int cap)
874{
875 return 0;
876}
877
878static inline int pci_find_next_capability(struct pci_dev *dev, u8 post,
879 int cap)
880{
881 return 0;
882}
883
884static inline int pci_find_ext_capability(struct pci_dev *dev, int cap)
885{
886 return 0;
887}
888
889
890static inline int pci_save_state(struct pci_dev *dev)
891{
892 return 0;
893}
894
895static inline int pci_restore_state(struct pci_dev *dev)
896{
897 return 0;
898}
899
900static inline int pci_set_power_state(struct pci_dev *dev, pci_power_t state)
901{
902 return 0;
903}
904
905static inline pci_power_t pci_choose_state(struct pci_dev *dev,
906 pm_message_t state)
907{
908 return PCI_D0;
909}
910
911static inline int pci_enable_wake(struct pci_dev *dev, pci_power_t state,
912 int enable)
913{
914 return 0;
915}
916
917static inline int pci_request_regions(struct pci_dev *dev, const char *res_name)
918{
919 return -EIO;
920}
921
922static inline void pci_release_regions(struct pci_dev *dev)
923{ }
924
925#define pci_dma_burst_advice(pdev, strat, strategy_parameter) do { } while (0)
926
927static inline void pci_block_user_cfg_access(struct pci_dev *dev)
928{ }
929
930static inline void pci_unblock_user_cfg_access(struct pci_dev *dev)
931{ }
932
933static inline struct pci_bus *pci_find_next_bus(const struct pci_bus *from)
934{ return NULL; }
935
936static inline struct pci_dev *pci_get_slot(struct pci_bus *bus,
937 unsigned int devfn)
938{ return NULL; }
939
940static inline struct pci_dev *pci_get_bus_and_slot(unsigned int bus,
941 unsigned int devfn)
942{ return NULL; }
943
944#endif
945
946
947
948#include <asm/pci.h>
949
950
951
952#define pci_resource_start(dev, bar) ((dev)->resource[(bar)].start)
953#define pci_resource_end(dev, bar) ((dev)->resource[(bar)].end)
954#define pci_resource_flags(dev, bar) ((dev)->resource[(bar)].flags)
955#define pci_resource_len(dev,bar) \
956 ((pci_resource_start((dev), (bar)) == 0 && \
957 pci_resource_end((dev), (bar)) == \
958 pci_resource_start((dev), (bar))) ? 0 : \
959 \
960 (pci_resource_end((dev), (bar)) - \
961 pci_resource_start((dev), (bar)) + 1))
962
963
964
965
966
967static inline void *pci_get_drvdata(struct pci_dev *pdev)
968{
969 return dev_get_drvdata(&pdev->dev);
970}
971
972static inline void pci_set_drvdata(struct pci_dev *pdev, void *data)
973{
974 dev_set_drvdata(&pdev->dev, data);
975}
976
977
978
979
980static inline char *pci_name(struct pci_dev *pdev)
981{
982 return pdev->dev.bus_id;
983}
984
985
986
987
988
989#ifndef HAVE_ARCH_PCI_RESOURCE_TO_USER
990static inline void pci_resource_to_user(const struct pci_dev *dev, int bar,
991 const struct resource *rsrc, resource_size_t *start,
992 resource_size_t *end)
993{
994 *start = rsrc->start;
995 *end = rsrc->end;
996}
997#endif
998
999
1000
1001
1002
1003
1004
1005
1006
1007struct pci_fixup {
1008 u16 vendor, device;
1009 void (*hook)(struct pci_dev *dev);
1010};
1011
1012enum pci_fixup_pass {
1013 pci_fixup_early,
1014 pci_fixup_header,
1015 pci_fixup_final,
1016 pci_fixup_enable,
1017 pci_fixup_resume,
1018};
1019
1020
1021#define DECLARE_PCI_FIXUP_SECTION(section, name, vendor, device, hook) \
1022 static const struct pci_fixup __pci_fixup_##name __used \
1023 __attribute__((__section__(#section))) = { vendor, device, hook };
1024#define DECLARE_PCI_FIXUP_EARLY(vendor, device, hook) \
1025 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_early, \
1026 vendor##device##hook, vendor, device, hook)
1027#define DECLARE_PCI_FIXUP_HEADER(vendor, device, hook) \
1028 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_header, \
1029 vendor##device##hook, vendor, device, hook)
1030#define DECLARE_PCI_FIXUP_FINAL(vendor, device, hook) \
1031 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_final, \
1032 vendor##device##hook, vendor, device, hook)
1033#define DECLARE_PCI_FIXUP_ENABLE(vendor, device, hook) \
1034 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_enable, \
1035 vendor##device##hook, vendor, device, hook)
1036#define DECLARE_PCI_FIXUP_RESUME(vendor, device, hook) \
1037 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_resume, \
1038 resume##vendor##device##hook, vendor, device, hook)
1039
1040
1041void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev);
1042
1043void __iomem *pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen);
1044void pcim_iounmap(struct pci_dev *pdev, void __iomem *addr);
1045void __iomem * const *pcim_iomap_table(struct pci_dev *pdev);
1046int pcim_iomap_regions(struct pci_dev *pdev, u16 mask, const char *name);
1047int pcim_iomap_regions_request_all(struct pci_dev *pdev, u16 mask,
1048 const char *name);
1049void pcim_iounmap_regions(struct pci_dev *pdev, u16 mask);
1050
1051extern int pci_pci_problems;
1052#define PCIPCI_FAIL 1
1053#define PCIPCI_TRITON 2
1054#define PCIPCI_NATOMA 4
1055#define PCIPCI_VIAETBF 8
1056#define PCIPCI_VSFX 16
1057#define PCIPCI_ALIMAGIK 32
1058#define PCIAGP_FAIL 64
1059
1060extern unsigned long pci_cardbus_io_size;
1061extern unsigned long pci_cardbus_mem_size;
1062
1063extern int pcibios_add_platform_entries(struct pci_dev *dev);
1064
1065#ifdef CONFIG_PCI_MMCONFIG
1066extern void __init pci_mmcfg_early_init(void);
1067extern void __init pci_mmcfg_late_init(void);
1068#else
1069static inline void pci_mmcfg_early_init(void) { }
1070static inline void pci_mmcfg_late_init(void) { }
1071#endif
1072
1073#endif
1074#endif
1075