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
22
23
24#define PCI_VENDOR_ID 0x00
25#define PCI_DEVICE_ID 0x02
26#define PCI_COMMAND 0x04
27#define PCI_COMMAND_IO 0x1
28#define PCI_COMMAND_MEMORY 0x2
29#define PCI_COMMAND_MASTER 0x4
30#define PCI_COMMAND_SPECIAL 0x8
31#define PCI_COMMAND_INVALIDATE 0x10
32#define PCI_COMMAND_VGA_PALETTE 0x20
33#define PCI_COMMAND_PARITY 0x40
34#define PCI_COMMAND_WAIT 0x80
35#define PCI_COMMAND_SERR 0x100
36#define PCI_COMMAND_FAST_BACK 0x200
37
38#define PCI_STATUS 0x06
39#define PCI_STATUS_CAP_LIST 0x10
40#define PCI_STATUS_66MHZ 0x20
41#define PCI_STATUS_UDF 0x40
42#define PCI_STATUS_FAST_BACK 0x80
43#define PCI_STATUS_PARITY 0x100
44#define PCI_STATUS_DEVSEL_MASK 0x600
45#define PCI_STATUS_DEVSEL_FAST 0x000
46#define PCI_STATUS_DEVSEL_MEDIUM 0x200
47#define PCI_STATUS_DEVSEL_SLOW 0x400
48#define PCI_STATUS_SIG_TARGET_ABORT 0x800
49#define PCI_STATUS_REC_TARGET_ABORT 0x1000
50#define PCI_STATUS_REC_MASTER_ABORT 0x2000
51#define PCI_STATUS_SIG_SYSTEM_ERROR 0x4000
52#define PCI_STATUS_DETECTED_PARITY 0x8000
53
54#define PCI_CLASS_REVISION 0x08
55
56#define PCI_REVISION_ID 0x08
57#define PCI_CLASS_PROG 0x09
58#define PCI_CLASS_DEVICE 0x0a
59
60#define PCI_CACHE_LINE_SIZE 0x0c
61#define PCI_LATENCY_TIMER 0x0d
62#define PCI_HEADER_TYPE 0x0e
63#define PCI_HEADER_TYPE_NORMAL 0
64#define PCI_HEADER_TYPE_BRIDGE 1
65#define PCI_HEADER_TYPE_CARDBUS 2
66
67#define PCI_BIST 0x0f
68#define PCI_BIST_CODE_MASK 0x0f
69#define PCI_BIST_START 0x40
70#define PCI_BIST_CAPABLE 0x80
71
72
73
74
75
76
77
78#define PCI_BASE_ADDRESS_0 0x10
79#define PCI_BASE_ADDRESS_1 0x14
80#define PCI_BASE_ADDRESS_2 0x18
81#define PCI_BASE_ADDRESS_3 0x1c
82#define PCI_BASE_ADDRESS_4 0x20
83#define PCI_BASE_ADDRESS_5 0x24
84#define PCI_BASE_ADDRESS_SPACE 0x01
85#define PCI_BASE_ADDRESS_SPACE_IO 0x01
86#define PCI_BASE_ADDRESS_SPACE_MEMORY 0x00
87#define PCI_BASE_ADDRESS_MEM_TYPE_MASK 0x06
88#define PCI_BASE_ADDRESS_MEM_TYPE_32 0x00
89#define PCI_BASE_ADDRESS_MEM_TYPE_1M 0x02
90#define PCI_BASE_ADDRESS_MEM_TYPE_64 0x04
91#define PCI_BASE_ADDRESS_MEM_PREFETCH 0x08
92#define PCI_BASE_ADDRESS_MEM_MASK (~0x0fUL)
93#define PCI_BASE_ADDRESS_IO_MASK (~0x03UL)
94
95
96
97#define PCI_CARDBUS_CIS 0x28
98#define PCI_SUBSYSTEM_VENDOR_ID 0x2c
99#define PCI_SUBSYSTEM_ID 0x2e
100#define PCI_ROM_ADDRESS 0x30
101#define PCI_ROM_ADDRESS_ENABLE 0x01
102#define PCI_ROM_ADDRESS_MASK (~0x7ffUL)
103
104#define PCI_CAPABILITY_LIST 0x34
105
106
107#define PCI_INTERRUPT_LINE 0x3c
108#define PCI_INTERRUPT_PIN 0x3d
109#define PCI_MIN_GNT 0x3e
110#define PCI_MAX_LAT 0x3f
111
112
113#define PCI_PRIMARY_BUS 0x18
114#define PCI_SECONDARY_BUS 0x19
115#define PCI_SUBORDINATE_BUS 0x1a
116#define PCI_SEC_LATENCY_TIMER 0x1b
117#define PCI_IO_BASE 0x1c
118#define PCI_IO_LIMIT 0x1d
119#define PCI_IO_RANGE_TYPE_MASK 0x0fUL
120#define PCI_IO_RANGE_TYPE_16 0x00
121#define PCI_IO_RANGE_TYPE_32 0x01
122#define PCI_IO_RANGE_MASK (~0x0fUL)
123#define PCI_SEC_STATUS 0x1e
124#define PCI_MEMORY_BASE 0x20
125#define PCI_MEMORY_LIMIT 0x22
126#define PCI_MEMORY_RANGE_TYPE_MASK 0x0fUL
127#define PCI_MEMORY_RANGE_MASK (~0x0fUL)
128#define PCI_PREF_MEMORY_BASE 0x24
129#define PCI_PREF_MEMORY_LIMIT 0x26
130#define PCI_PREF_RANGE_TYPE_MASK 0x0fUL
131#define PCI_PREF_RANGE_TYPE_32 0x00
132#define PCI_PREF_RANGE_TYPE_64 0x01
133#define PCI_PREF_RANGE_MASK (~0x0fUL)
134#define PCI_PREF_BASE_UPPER32 0x28
135#define PCI_PREF_LIMIT_UPPER32 0x2c
136#define PCI_IO_BASE_UPPER16 0x30
137#define PCI_IO_LIMIT_UPPER16 0x32
138
139
140#define PCI_ROM_ADDRESS1 0x38
141
142#define PCI_BRIDGE_CONTROL 0x3e
143#define PCI_BRIDGE_CTL_PARITY 0x01
144#define PCI_BRIDGE_CTL_SERR 0x02
145#define PCI_BRIDGE_CTL_NO_ISA 0x04
146#define PCI_BRIDGE_CTL_VGA 0x08
147#define PCI_BRIDGE_CTL_MASTER_ABORT 0x20
148#define PCI_BRIDGE_CTL_BUS_RESET 0x40
149#define PCI_BRIDGE_CTL_FAST_BACK 0x80
150
151
152#define PCI_CB_CAPABILITY_LIST 0x14
153
154#define PCI_CB_SEC_STATUS 0x16
155#define PCI_CB_PRIMARY_BUS 0x18
156#define PCI_CB_CARD_BUS 0x19
157#define PCI_CB_SUBORDINATE_BUS 0x1a
158#define PCI_CB_LATENCY_TIMER 0x1b
159#define PCI_CB_MEMORY_BASE_0 0x1c
160#define PCI_CB_MEMORY_LIMIT_0 0x20
161#define PCI_CB_MEMORY_BASE_1 0x24
162#define PCI_CB_MEMORY_LIMIT_1 0x28
163#define PCI_CB_IO_BASE_0 0x2c
164#define PCI_CB_IO_BASE_0_HI 0x2e
165#define PCI_CB_IO_LIMIT_0 0x30
166#define PCI_CB_IO_LIMIT_0_HI 0x32
167#define PCI_CB_IO_BASE_1 0x34
168#define PCI_CB_IO_BASE_1_HI 0x36
169#define PCI_CB_IO_LIMIT_1 0x38
170#define PCI_CB_IO_LIMIT_1_HI 0x3a
171#define PCI_CB_IO_RANGE_MASK (~0x03UL)
172
173#define PCI_CB_BRIDGE_CONTROL 0x3e
174#define PCI_CB_BRIDGE_CTL_PARITY 0x01
175#define PCI_CB_BRIDGE_CTL_SERR 0x02
176#define PCI_CB_BRIDGE_CTL_ISA 0x04
177#define PCI_CB_BRIDGE_CTL_VGA 0x08
178#define PCI_CB_BRIDGE_CTL_MASTER_ABORT 0x20
179#define PCI_CB_BRIDGE_CTL_CB_RESET 0x40
180#define PCI_CB_BRIDGE_CTL_16BIT_INT 0x80
181#define PCI_CB_BRIDGE_CTL_PREFETCH_MEM0 0x100
182#define PCI_CB_BRIDGE_CTL_PREFETCH_MEM1 0x200
183#define PCI_CB_BRIDGE_CTL_POST_WRITES 0x400
184#define PCI_CB_SUBSYSTEM_VENDOR_ID 0x40
185#define PCI_CB_SUBSYSTEM_ID 0x42
186#define PCI_CB_LEGACY_MODE_BASE 0x44
187
188
189
190
191#define PCI_CAP_LIST_ID 0
192#define PCI_CAP_ID_PM 0x01
193#define PCI_CAP_ID_AGP 0x02
194#define PCI_CAP_ID_VPD 0x03
195#define PCI_CAP_ID_SLOTID 0x04
196#define PCI_CAP_ID_MSI 0x05
197#define PCI_CAP_ID_CHSWP 0x06
198#define PCI_CAP_LIST_NEXT 1
199#define PCI_CAP_FLAGS 2
200#define PCI_CAP_SIZEOF 4
201
202
203
204#define PCI_PM_PMC 2
205#define PCI_PM_CAP_VER_MASK 0x0007
206#define PCI_PM_CAP_PME_CLOCK 0x0008
207#define PCI_PM_CAP_RESERVED 0x0010
208#define PCI_PM_CAP_DSI 0x0020
209#define PCI_PM_CAP_AUX_POWER 0x01C0
210#define PCI_PM_CAP_D1 0x0200
211#define PCI_PM_CAP_D2 0x0400
212#define PCI_PM_CAP_PME 0x0800
213#define PCI_PM_CAP_PME_MASK 0xF800
214#define PCI_PM_CAP_PME_D0 0x0800
215#define PCI_PM_CAP_PME_D1 0x1000
216#define PCI_PM_CAP_PME_D2 0x2000
217#define PCI_PM_CAP_PME_D3 0x4000
218#define PCI_PM_CAP_PME_D3cold 0x8000
219#define PCI_PM_CTRL 4
220#define PCI_PM_CTRL_STATE_MASK 0x0003
221#define PCI_PM_CTRL_PME_ENABLE 0x0100
222#define PCI_PM_CTRL_DATA_SEL_MASK 0x1e00
223#define PCI_PM_CTRL_DATA_SCALE_MASK 0x6000
224#define PCI_PM_CTRL_PME_STATUS 0x8000
225#define PCI_PM_PPB_EXTENSIONS 6
226#define PCI_PM_PPB_B2_B3 0x40
227#define PCI_PM_BPCC_ENABLE 0x80
228#define PCI_PM_DATA_REGISTER 7
229#define PCI_PM_SIZEOF 8
230
231
232
233#define PCI_AGP_VERSION 2
234#define PCI_AGP_RFU 3
235#define PCI_AGP_STATUS 4
236#define PCI_AGP_STATUS_RQ_MASK 0xff000000
237#define PCI_AGP_STATUS_SBA 0x0200
238#define PCI_AGP_STATUS_64BIT 0x0020
239#define PCI_AGP_STATUS_FW 0x0010
240#define PCI_AGP_STATUS_RATE4 0x0004
241#define PCI_AGP_STATUS_RATE2 0x0002
242#define PCI_AGP_STATUS_RATE1 0x0001
243#define PCI_AGP_COMMAND 8
244#define PCI_AGP_COMMAND_RQ_MASK 0xff000000
245#define PCI_AGP_COMMAND_SBA 0x0200
246#define PCI_AGP_COMMAND_AGP 0x0100
247#define PCI_AGP_COMMAND_64BIT 0x0020
248#define PCI_AGP_COMMAND_FW 0x0010
249#define PCI_AGP_COMMAND_RATE4 0x0004
250#define PCI_AGP_COMMAND_RATE2 0x0002
251#define PCI_AGP_COMMAND_RATE1 0x0001
252#define PCI_AGP_SIZEOF 12
253
254
255
256#define PCI_SID_ESR 2
257#define PCI_SID_ESR_NSLOTS 0x1f
258#define PCI_SID_ESR_FIC 0x20
259#define PCI_SID_CHASSIS_NR 3
260
261
262
263#define PCI_MSI_FLAGS 2
264#define PCI_MSI_FLAGS_64BIT 0x80
265#define PCI_MSI_FLAGS_QSIZE 0x70
266#define PCI_MSI_FLAGS_QMASK 0x0e
267#define PCI_MSI_FLAGS_ENABLE 0x01
268#define PCI_MSI_RFU 3
269#define PCI_MSI_ADDRESS_LO 4
270#define PCI_MSI_ADDRESS_HI 8
271#define PCI_MSI_DATA_32 8
272#define PCI_MSI_DATA_64 12
273
274
275
276#include <linux/pci_ids.h>
277
278
279
280
281
282
283
284
285
286#define PCI_DEVFN(slot,func) ((((slot) & 0x1f) << 3) | ((func) & 0x07))
287#define PCI_SLOT(devfn) (((devfn) >> 3) & 0x1f)
288#define PCI_FUNC(devfn) ((devfn) & 0x07)
289
290
291#define PCIIOC_BASE ('P' << 24 | 'C' << 16 | 'I' << 8)
292#define PCIIOC_CONTROLLER (PCIIOC_BASE | 0x00)
293#define PCIIOC_MMAP_IS_IO (PCIIOC_BASE | 0x01)
294#define PCIIOC_MMAP_IS_MEM (PCIIOC_BASE | 0x02)
295#define PCIIOC_WRITE_COMBINE (PCIIOC_BASE | 0x03)
296
297#ifdef __KERNEL__
298
299#include <linux/types.h>
300#include <linux/config.h>
301#include <linux/ioport.h>
302#include <linux/list.h>
303#include <linux/errno.h>
304
305
306enum pci_mmap_state {
307 pci_mmap_io,
308 pci_mmap_mem
309};
310
311
312#define PCI_DMA_BIDIRECTIONAL 0
313#define PCI_DMA_TODEVICE 1
314#define PCI_DMA_FROMDEVICE 2
315#define PCI_DMA_NONE 3
316
317#define DEVICE_COUNT_COMPATIBLE 4
318#define DEVICE_COUNT_IRQ 2
319#define DEVICE_COUNT_DMA 2
320#define DEVICE_COUNT_RESOURCE 12
321
322#define PCI_ANY_ID (~0)
323
324#define pci_present pcibios_present
325
326
327#define pci_for_each_dev_reverse(dev) \
328 for(dev = pci_dev_g(pci_devices.prev); dev != pci_dev_g(&pci_devices); dev = pci_dev_g(dev->global_list.prev))
329
330#define pci_for_each_bus(bus) \
331for(bus = pci_bus_b(pci_root_buses.next); bus != pci_bus_b(&pci_root_buses); bus = pci_bus_b(bus->node.next))
332
333
334
335
336struct pci_dev {
337 struct list_head global_list;
338 struct list_head bus_list;
339 struct pci_bus *bus;
340 struct pci_bus *subordinate;
341
342 void *sysdata;
343 struct proc_dir_entry *procent;
344
345 unsigned int devfn;
346 unsigned short vendor;
347 unsigned short device;
348 unsigned short subsystem_vendor;
349 unsigned short subsystem_device;
350 unsigned int class;
351 u8 hdr_type;
352 u8 rom_base_reg;
353
354 struct pci_driver *driver;
355 void *driver_data;
356 u64 dma_mask;
357
358
359
360
361
362 u32 current_state;
363
364
365
366
367 unsigned short vendor_compatible[DEVICE_COUNT_COMPATIBLE];
368 unsigned short device_compatible[DEVICE_COUNT_COMPATIBLE];
369
370
371
372
373
374 unsigned int irq;
375 struct resource resource[DEVICE_COUNT_RESOURCE];
376 struct resource dma_resource[DEVICE_COUNT_DMA];
377 struct resource irq_resource[DEVICE_COUNT_IRQ];
378
379 char name[80];
380 char slot_name[8];
381 int active;
382 int ro;
383 unsigned short regs;
384
385 int (*prepare)(struct pci_dev *dev);
386 int (*activate)(struct pci_dev *dev);
387 int (*deactivate)(struct pci_dev *dev);
388};
389
390#define pci_dev_g(n) list_entry(n, struct pci_dev, global_list)
391#define pci_dev_b(n) list_entry(n, struct pci_dev, bus_list)
392
393
394
395
396
397
398
399
400
401#define PCI_ROM_RESOURCE 6
402#define PCI_BRIDGE_RESOURCES 7
403#define PCI_NUM_RESOURCES 11
404
405#define PCI_REGION_FLAG_MASK 0x0fU
406
407struct pci_bus {
408 struct list_head node;
409 struct pci_bus *parent;
410 struct list_head children;
411 struct list_head devices;
412 struct pci_dev *self;
413 struct resource *resource[4];
414
415 struct pci_ops *ops;
416 void *sysdata;
417 struct proc_dir_entry *procdir;
418
419 unsigned char number;
420 unsigned char primary;
421 unsigned char secondary;
422 unsigned char subordinate;
423
424 char name[48];
425 unsigned short vendor;
426 unsigned short device;
427 unsigned int serial;
428 unsigned char pnpver;
429 unsigned char productver;
430 unsigned char checksum;
431 unsigned char pad1;
432};
433
434#define pci_bus_b(n) list_entry(n, struct pci_bus, node)
435
436extern struct list_head pci_root_buses;
437extern struct list_head pci_devices;
438
439
440
441
442#define PCIBIOS_SUCCESSFUL 0x00
443#define PCIBIOS_FUNC_NOT_SUPPORTED 0x81
444#define PCIBIOS_BAD_VENDOR_ID 0x83
445#define PCIBIOS_DEVICE_NOT_FOUND 0x86
446#define PCIBIOS_BAD_REGISTER_NUMBER 0x87
447#define PCIBIOS_SET_FAILED 0x88
448#define PCIBIOS_BUFFER_TOO_SMALL 0x89
449
450
451
452struct pci_ops {
453 int (*read_byte)(struct pci_dev *, int where, u8 *val);
454 int (*read_word)(struct pci_dev *, int where, u16 *val);
455 int (*read_dword)(struct pci_dev *, int where, u32 *val);
456 int (*write_byte)(struct pci_dev *, int where, u8 val);
457 int (*write_word)(struct pci_dev *, int where, u16 val);
458 int (*write_dword)(struct pci_dev *, int where, u32 val);
459};
460
461struct pbus_set_ranges_data
462{
463 int found_vga;
464 unsigned long io_start, io_end;
465 unsigned long mem_start, mem_end;
466};
467
468struct pci_device_id {
469 unsigned int vendor, device;
470 unsigned int subvendor, subdevice;
471 unsigned int class, class_mask;
472 unsigned long driver_data;
473};
474
475struct pci_driver {
476 struct list_head node;
477 char *name;
478 const struct pci_device_id *id_table;
479 int (*probe) (struct pci_dev *dev, const struct pci_device_id *id);
480 void (*remove) (struct pci_dev *dev);
481 int (*save_state) (struct pci_dev *dev, u32 state);
482 int (*suspend)(struct pci_dev *dev, u32 state);
483 int (*resume) (struct pci_dev *dev);
484 int (*enable_wake) (struct pci_dev *dev, u32 state, int enable);
485};
486
487
488
489#ifdef CONFIG_PCI
490
491#define pci_for_each_dev(dev) \
492 for(dev = pci_dev_g(pci_devices.next); dev != pci_dev_g(&pci_devices); dev = pci_dev_g(dev->global_list.next))
493
494void pcibios_init(void);
495void pcibios_fixup_bus(struct pci_bus *);
496int pcibios_enable_device(struct pci_dev *);
497char *pcibios_setup (char *str);
498
499
500void pcibios_align_resource(void *, struct resource *, unsigned long);
501void pcibios_update_resource(struct pci_dev *, struct resource *,
502 struct resource *, int);
503void pcibios_update_irq(struct pci_dev *, int irq);
504void pcibios_fixup_pbus_ranges(struct pci_bus *, struct pbus_set_ranges_data *);
505
506
507
508int pcibios_present(void);
509int pcibios_read_config_byte (unsigned char bus, unsigned char dev_fn,
510 unsigned char where, unsigned char *val);
511int pcibios_read_config_word (unsigned char bus, unsigned char dev_fn,
512 unsigned char where, unsigned short *val);
513int pcibios_read_config_dword (unsigned char bus, unsigned char dev_fn,
514 unsigned char where, unsigned int *val);
515int pcibios_write_config_byte (unsigned char bus, unsigned char dev_fn,
516 unsigned char where, unsigned char val);
517int pcibios_write_config_word (unsigned char bus, unsigned char dev_fn,
518 unsigned char where, unsigned short val);
519int pcibios_write_config_dword (unsigned char bus, unsigned char dev_fn,
520 unsigned char where, unsigned int val);
521int pcibios_find_class (unsigned int class_code, unsigned short index, unsigned char *bus, unsigned char *dev_fn);
522int pcibios_find_device (unsigned short vendor, unsigned short dev_id,
523 unsigned short index, unsigned char *bus,
524 unsigned char *dev_fn);
525
526
527
528void pci_init(void);
529int pci_bus_exists(const struct list_head *list, int nr);
530struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops, void *sysdata);
531struct pci_bus *pci_alloc_primary_bus(int bus);
532struct pci_dev *pci_scan_slot(struct pci_dev *temp);
533int pci_proc_attach_device(struct pci_dev *dev);
534int pci_proc_detach_device(struct pci_dev *dev);
535int pci_proc_attach_bus(struct pci_bus *bus);
536int pci_proc_detach_bus(struct pci_bus *bus);
537void pci_name_device(struct pci_dev *dev);
538char *pci_class_name(u32 class);
539void pci_read_bridge_bases(struct pci_bus *child);
540struct resource *pci_find_parent_resource(const struct pci_dev *dev, struct resource *res);
541int pci_setup_device(struct pci_dev *dev);
542int pci_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge);
543
544
545
546struct pci_dev *pci_find_device (unsigned int vendor, unsigned int device, const struct pci_dev *from);
547struct pci_dev *pci_find_subsys (unsigned int vendor, unsigned int device,
548 unsigned int ss_vendor, unsigned int ss_device,
549 const struct pci_dev *from);
550struct pci_dev *pci_find_class (unsigned int class, const struct pci_dev *from);
551struct pci_dev *pci_find_slot (unsigned int bus, unsigned int devfn);
552int pci_find_capability (struct pci_dev *dev, int cap);
553
554int pci_read_config_byte(struct pci_dev *dev, int where, u8 *val);
555int pci_read_config_word(struct pci_dev *dev, int where, u16 *val);
556int pci_read_config_dword(struct pci_dev *dev, int where, u32 *val);
557int pci_write_config_byte(struct pci_dev *dev, int where, u8 val);
558int pci_write_config_word(struct pci_dev *dev, int where, u16 val);
559int pci_write_config_dword(struct pci_dev *dev, int where, u32 val);
560
561int pci_enable_device(struct pci_dev *dev);
562void pci_disable_device(struct pci_dev *dev);
563void pci_set_master(struct pci_dev *dev);
564int pci_set_dma_mask(struct pci_dev *dev, u64 mask);
565int pci_dac_set_dma_mask(struct pci_dev *dev, u64 mask);
566int pci_assign_resource(struct pci_dev *dev, int i);
567
568
569int pci_save_state(struct pci_dev *dev, u32 *buffer);
570int pci_restore_state(struct pci_dev *dev, u32 *buffer);
571int pci_set_power_state(struct pci_dev *dev, int state);
572int pci_enable_wake(struct pci_dev *dev, u32 state, int enable);
573
574
575
576int pci_claim_resource(struct pci_dev *, int);
577void pci_assign_unassigned_resources(void);
578void pdev_enable_device(struct pci_dev *);
579void pdev_sort_resources(struct pci_dev *, struct resource_list *, u32);
580unsigned long pci_bridge_check_io(struct pci_dev *);
581void pci_fixup_irqs(u8 (*)(struct pci_dev *, u8 *),
582 int (*)(struct pci_dev *, u8, u8));
583#define HAVE_PCI_REQ_REGIONS
584int pci_request_regions(struct pci_dev *, char *);
585void pci_release_regions(struct pci_dev *);
586
587
588int pci_register_driver(struct pci_driver *);
589void pci_unregister_driver(struct pci_driver *);
590void pci_insert_device(struct pci_dev *, struct pci_bus *);
591void pci_remove_device(struct pci_dev *);
592struct pci_driver *pci_dev_driver(const struct pci_dev *);
593const struct pci_device_id *pci_match_device(const struct pci_device_id *ids, const struct pci_dev *dev);
594void pci_announce_device_to_drivers(struct pci_dev *);
595unsigned int pci_do_scan_bus(struct pci_bus *bus);
596struct pci_bus * pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, int busnr);
597
598
599struct pci_pool *pci_pool_create (const char *name, struct pci_dev *dev,
600 size_t size, size_t align, size_t allocation, int flags);
601void pci_pool_destroy (struct pci_pool *pool);
602
603void *pci_pool_alloc (struct pci_pool *pool, int flags, dma_addr_t *handle);
604void pci_pool_free (struct pci_pool *pool, void *vaddr, dma_addr_t addr);
605
606#endif
607
608
609
610#include <asm/pci.h>
611
612
613
614
615
616
617#ifndef CONFIG_PCI
618static inline int pcibios_present(void) { return 0; }
619static inline int pcibios_find_class (unsigned int class_code, unsigned short index, unsigned char *bus, unsigned char *dev_fn)
620{ return PCIBIOS_DEVICE_NOT_FOUND; }
621
622#define _PCI_NOP(o,s,t) \
623 static inline int pcibios_##o##_config_##s (u8 bus, u8 dfn, u8 where, t val) \
624 { return PCIBIOS_FUNC_NOT_SUPPORTED; } \
625 static inline int pci_##o##_config_##s (struct pci_dev *dev, int where, t val) \
626 { return PCIBIOS_FUNC_NOT_SUPPORTED; }
627#define _PCI_NOP_ALL(o,x) _PCI_NOP(o,byte,u8 x) \
628 _PCI_NOP(o,word,u16 x) \
629 _PCI_NOP(o,dword,u32 x)
630_PCI_NOP_ALL(read, *)
631_PCI_NOP_ALL(write,)
632
633static inline struct pci_dev *pci_find_device(unsigned int vendor, unsigned int device, const struct pci_dev *from)
634{ return NULL; }
635
636static inline struct pci_dev *pci_find_class(unsigned int class, const struct pci_dev *from)
637{ return NULL; }
638
639static inline struct pci_dev *pci_find_slot(unsigned int bus, unsigned int devfn)
640{ return NULL; }
641
642static inline struct pci_dev *pci_find_subsys(unsigned int vendor, unsigned int device,
643unsigned int ss_vendor, unsigned int ss_device, const struct pci_dev *from)
644{ return NULL; }
645
646static inline void pci_set_master(struct pci_dev *dev) { }
647static inline int pci_enable_device(struct pci_dev *dev) { return -EIO; }
648static inline void pci_disable_device(struct pci_dev *dev) { }
649static inline int pci_module_init(struct pci_driver *drv) { return -ENODEV; }
650static inline int pci_set_dma_mask(struct pci_dev *dev, u64 mask) { return -EIO; }
651static inline int pci_dac_set_dma_mask(struct pci_dev *dev, u64 mask) { return -EIO; }
652static inline int pci_assign_resource(struct pci_dev *dev, int i) { return -EBUSY;}
653static inline int pci_register_driver(struct pci_driver *drv) { return 0;}
654static inline void pci_unregister_driver(struct pci_driver *drv) { }
655static inline int scsi_to_pci_dma_dir(unsigned char scsi_dir) { return scsi_dir; }
656static inline int pci_find_capability (struct pci_dev *dev, int cap) {return 0; }
657static inline const struct pci_device_id *pci_match_device(const struct pci_device_id *ids, const struct pci_dev *dev) { return NULL; }
658
659
660static inline int pci_save_state(struct pci_dev *dev, u32 *buffer) { return 0; }
661static inline int pci_restore_state(struct pci_dev *dev, u32 *buffer) { return 0; }
662static inline int pci_set_power_state(struct pci_dev *dev, int state) { return 0; }
663static inline int pci_enable_wake(struct pci_dev *dev, u32 state, int enable) { return 0; }
664
665#define pci_for_each_dev(dev) \
666 for(dev = NULL; 0; )
667
668#else
669
670
671
672
673
674
675
676static inline int pci_module_init(struct pci_driver *drv)
677{
678 int rc = pci_register_driver (drv);
679
680 if (rc > 0)
681 return 0;
682
683
684
685
686
687#if defined(CONFIG_HOTPLUG) && !defined(MODULE)
688 if (rc == 0)
689 return 0;
690#else
691 if (rc == 0)
692 rc = -ENODEV;
693#endif
694
695
696
697 pci_unregister_driver (drv);
698
699 return rc;
700}
701
702#endif
703
704
705
706#define pci_resource_start(dev,bar) ((dev)->resource[(bar)].start)
707#define pci_resource_end(dev,bar) ((dev)->resource[(bar)].end)
708#define pci_resource_flags(dev,bar) ((dev)->resource[(bar)].flags)
709#define pci_resource_len(dev,bar) \
710 ((pci_resource_start((dev),(bar)) == 0 && \
711 pci_resource_end((dev),(bar)) == \
712 pci_resource_start((dev),(bar))) ? 0 : \
713 \
714 (pci_resource_end((dev),(bar)) - \
715 pci_resource_start((dev),(bar)) + 1))
716
717
718
719
720
721static inline void *pci_get_drvdata (struct pci_dev *pdev)
722{
723 return pdev->driver_data;
724}
725
726static inline void pci_set_drvdata (struct pci_dev *pdev, void *data)
727{
728 pdev->driver_data = data;
729}
730
731
732
733
734
735
736
737
738struct pci_fixup {
739 int pass;
740 u16 vendor, device;
741 void (*hook)(struct pci_dev *dev);
742};
743
744extern struct pci_fixup pcibios_fixups[];
745
746#define PCI_FIXUP_HEADER 1
747#define PCI_FIXUP_FINAL 2
748
749void pci_fixup_device(int pass, struct pci_dev *dev);
750
751extern int pci_pci_problems;
752#define PCIPCI_FAIL 1
753#define PCIPCI_TRITON 2
754#define PCIPCI_NATOMA 4
755#define PCIPCI_VIAETBF 8
756#define PCIPCI_VSFX 16
757
758#endif
759#endif
760