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