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