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_ID_PCIX 0x07
199#define PCI_CAP_LIST_NEXT 1
200#define PCI_CAP_FLAGS 2
201#define PCI_CAP_SIZEOF 4
202
203
204
205#define PCI_PM_PMC 2
206#define PCI_PM_CAP_VER_MASK 0x0007
207#define PCI_PM_CAP_PME_CLOCK 0x0008
208#define PCI_PM_CAP_RESERVED 0x0010
209#define PCI_PM_CAP_DSI 0x0020
210#define PCI_PM_CAP_AUX_POWER 0x01C0
211#define PCI_PM_CAP_D1 0x0200
212#define PCI_PM_CAP_D2 0x0400
213#define PCI_PM_CAP_PME 0x0800
214#define PCI_PM_CAP_PME_MASK 0xF800
215#define PCI_PM_CAP_PME_D0 0x0800
216#define PCI_PM_CAP_PME_D1 0x1000
217#define PCI_PM_CAP_PME_D2 0x2000
218#define PCI_PM_CAP_PME_D3 0x4000
219#define PCI_PM_CAP_PME_D3cold 0x8000
220#define PCI_PM_CTRL 4
221#define PCI_PM_CTRL_STATE_MASK 0x0003
222#define PCI_PM_CTRL_PME_ENABLE 0x0100
223#define PCI_PM_CTRL_DATA_SEL_MASK 0x1e00
224#define PCI_PM_CTRL_DATA_SCALE_MASK 0x6000
225#define PCI_PM_CTRL_PME_STATUS 0x8000
226#define PCI_PM_PPB_EXTENSIONS 6
227#define PCI_PM_PPB_B2_B3 0x40
228#define PCI_PM_BPCC_ENABLE 0x80
229#define PCI_PM_DATA_REGISTER 7
230#define PCI_PM_SIZEOF 8
231
232
233
234#define PCI_AGP_VERSION 2
235#define PCI_AGP_RFU 3
236#define PCI_AGP_STATUS 4
237#define PCI_AGP_STATUS_RQ_MASK 0xff000000
238#define PCI_AGP_STATUS_SBA 0x0200
239#define PCI_AGP_STATUS_64BIT 0x0020
240#define PCI_AGP_STATUS_FW 0x0010
241#define PCI_AGP_STATUS_RATE4 0x0004
242#define PCI_AGP_STATUS_RATE2 0x0002
243#define PCI_AGP_STATUS_RATE1 0x0001
244#define PCI_AGP_COMMAND 8
245#define PCI_AGP_COMMAND_RQ_MASK 0xff000000
246#define PCI_AGP_COMMAND_SBA 0x0200
247#define PCI_AGP_COMMAND_AGP 0x0100
248#define PCI_AGP_COMMAND_64BIT 0x0020
249#define PCI_AGP_COMMAND_FW 0x0010
250#define PCI_AGP_COMMAND_RATE4 0x0004
251#define PCI_AGP_COMMAND_RATE2 0x0002
252#define PCI_AGP_COMMAND_RATE1 0x0001
253#define PCI_AGP_SIZEOF 12
254
255
256
257#define PCI_SID_ESR 2
258#define PCI_SID_ESR_NSLOTS 0x1f
259#define PCI_SID_ESR_FIC 0x20
260#define PCI_SID_CHASSIS_NR 3
261
262
263
264#define PCI_MSI_FLAGS 2
265#define PCI_MSI_FLAGS_64BIT 0x80
266#define PCI_MSI_FLAGS_QSIZE 0x70
267#define PCI_MSI_FLAGS_QMASK 0x0e
268#define PCI_MSI_FLAGS_ENABLE 0x01
269#define PCI_MSI_RFU 3
270#define PCI_MSI_ADDRESS_LO 4
271#define PCI_MSI_ADDRESS_HI 8
272#define PCI_MSI_DATA_32 8
273#define PCI_MSI_DATA_64 12
274
275
276
277#define PCI_CHSWP_CSR 2
278#define PCI_CHSWP_DHA 0x01
279#define PCI_CHSWP_EIM 0x02
280#define PCI_CHSWP_PIE 0x04
281#define PCI_CHSWP_LOO 0x08
282#define PCI_CHSWP_PI 0x30
283#define PCI_CHSWP_EXT 0x40
284#define PCI_CHSWP_INS 0x80
285
286
287
288#define PCI_X_CMD 2
289#define PCI_X_CMD_DPERR_E 0x0001
290#define PCI_X_CMD_ERO 0x0002
291#define PCI_X_CMD_MAX_READ 0x000c
292#define PCI_X_CMD_MAX_SPLIT 0x0070
293#define PCI_X_DEVFN 4
294#define PCI_X_BUSNR 5
295#define PCI_X_STATUS 6
296#define PCI_X_STATUS_64BIT 0x0001
297#define PCI_X_STATUS_133MHZ 0x0002
298#define PCI_X_STATUS_SPL_DISC 0x0004
299#define PCI_X_STATUS_UNX_SPL 0x0008
300#define PCI_X_STATUS_COMPLEX 0x0010
301#define PCI_X_STATUS_MAX_READ 0x0060
302#define PCI_X_STATUS_MAX_SPLIT 0x0380
303#define PCI_X_STATUS_MAX_CUM 0x1c00
304#define PCI_X_STATUS_SPL_ERR 0x2000
305
306
307
308#include <linux/pci_ids.h>
309
310
311
312
313
314
315
316
317
318#define PCI_DEVFN(slot,func) ((((slot) & 0x1f) << 3) | ((func) & 0x07))
319#define PCI_SLOT(devfn) (((devfn) >> 3) & 0x1f)
320#define PCI_FUNC(devfn) ((devfn) & 0x07)
321
322
323#define PCIIOC_BASE ('P' << 24 | 'C' << 16 | 'I' << 8)
324#define PCIIOC_CONTROLLER (PCIIOC_BASE | 0x00)
325#define PCIIOC_MMAP_IS_IO (PCIIOC_BASE | 0x01)
326#define PCIIOC_MMAP_IS_MEM (PCIIOC_BASE | 0x02)
327#define PCIIOC_WRITE_COMBINE (PCIIOC_BASE | 0x03)
328
329#ifdef __KERNEL__
330
331#include <linux/types.h>
332#include <linux/config.h>
333#include <linux/ioport.h>
334#include <linux/list.h>
335#include <linux/errno.h>
336
337
338enum pci_mmap_state {
339 pci_mmap_io,
340 pci_mmap_mem
341};
342
343
344#define PCI_DMA_BIDIRECTIONAL 0
345#define PCI_DMA_TODEVICE 1
346#define PCI_DMA_FROMDEVICE 2
347#define PCI_DMA_NONE 3
348
349#define DEVICE_COUNT_COMPATIBLE 4
350#define DEVICE_COUNT_IRQ 2
351#define DEVICE_COUNT_DMA 2
352#define DEVICE_COUNT_RESOURCE 12
353
354#define PCI_ANY_ID (~0)
355
356#define pci_present pcibios_present
357
358
359#define pci_for_each_dev_reverse(dev) \
360 for(dev = pci_dev_g(pci_devices.prev); dev != pci_dev_g(&pci_devices); dev = pci_dev_g(dev->global_list.prev))
361
362#define pci_for_each_bus(bus) \
363for(bus = pci_bus_b(pci_root_buses.next); bus != pci_bus_b(&pci_root_buses); bus = pci_bus_b(bus->node.next))
364
365
366
367
368struct pci_dev {
369 struct list_head global_list;
370 struct list_head bus_list;
371 struct pci_bus *bus;
372 struct pci_bus *subordinate;
373
374 void *sysdata;
375 struct proc_dir_entry *procent;
376
377 unsigned int devfn;
378 unsigned short vendor;
379 unsigned short device;
380 unsigned short subsystem_vendor;
381 unsigned short subsystem_device;
382 unsigned int class;
383 u8 hdr_type;
384 u8 rom_base_reg;
385
386 struct pci_driver *driver;
387 void *driver_data;
388 u64 dma_mask;
389
390
391
392
393
394 u32 current_state;
395
396
397
398
399 unsigned short vendor_compatible[DEVICE_COUNT_COMPATIBLE];
400 unsigned short device_compatible[DEVICE_COUNT_COMPATIBLE];
401
402
403
404
405
406 unsigned int irq;
407 struct resource resource[DEVICE_COUNT_RESOURCE];
408 struct resource dma_resource[DEVICE_COUNT_DMA];
409 struct resource irq_resource[DEVICE_COUNT_IRQ];
410
411 char name[90];
412 char slot_name[8];
413 int active;
414 int ro;
415 unsigned short regs;
416
417
418 unsigned short transparent:1;
419
420 int (*prepare)(struct pci_dev *dev);
421 int (*activate)(struct pci_dev *dev);
422 int (*deactivate)(struct pci_dev *dev);
423};
424
425#define pci_dev_g(n) list_entry(n, struct pci_dev, global_list)
426#define pci_dev_b(n) list_entry(n, struct pci_dev, bus_list)
427
428
429
430
431
432
433
434
435
436#define PCI_ROM_RESOURCE 6
437#define PCI_BRIDGE_RESOURCES 7
438#define PCI_NUM_RESOURCES 11
439
440#define PCI_REGION_FLAG_MASK 0x0fU
441
442struct pci_bus {
443 struct list_head node;
444 struct pci_bus *parent;
445 struct list_head children;
446 struct list_head devices;
447 struct pci_dev *self;
448 struct resource *resource[4];
449
450 struct pci_ops *ops;
451 void *sysdata;
452 struct proc_dir_entry *procdir;
453
454 unsigned char number;
455 unsigned char primary;
456 unsigned char secondary;
457 unsigned char subordinate;
458
459 char name[48];
460 unsigned short vendor;
461 unsigned short device;
462 unsigned int serial;
463 unsigned char pnpver;
464 unsigned char productver;
465 unsigned char checksum;
466 unsigned char pad1;
467};
468
469#define pci_bus_b(n) list_entry(n, struct pci_bus, node)
470
471extern struct list_head pci_root_buses;
472extern struct list_head pci_devices;
473
474extern struct proc_dir_entry *proc_bus_pci_dir;
475
476
477
478#define PCIBIOS_SUCCESSFUL 0x00
479#define PCIBIOS_FUNC_NOT_SUPPORTED 0x81
480#define PCIBIOS_BAD_VENDOR_ID 0x83
481#define PCIBIOS_DEVICE_NOT_FOUND 0x86
482#define PCIBIOS_BAD_REGISTER_NUMBER 0x87
483#define PCIBIOS_SET_FAILED 0x88
484#define PCIBIOS_BUFFER_TOO_SMALL 0x89
485
486
487
488struct pci_ops {
489 int (*read_byte)(struct pci_dev *, int where, u8 *val);
490 int (*read_word)(struct pci_dev *, int where, u16 *val);
491 int (*read_dword)(struct pci_dev *, int where, u32 *val);
492 int (*write_byte)(struct pci_dev *, int where, u8 val);
493 int (*write_word)(struct pci_dev *, int where, u16 val);
494 int (*write_dword)(struct pci_dev *, int where, u32 val);
495};
496
497struct pbus_set_ranges_data
498{
499 unsigned long io_start, io_end;
500 unsigned long mem_start, mem_end;
501 unsigned long prefetch_start, prefetch_end;
502};
503
504struct pci_device_id {
505 unsigned int vendor, device;
506 unsigned int subvendor, subdevice;
507 unsigned int class, class_mask;
508 unsigned long driver_data;
509};
510
511struct pci_driver {
512 struct list_head node;
513 char *name;
514 const struct pci_device_id *id_table;
515 int (*probe) (struct pci_dev *dev, const struct pci_device_id *id);
516 void (*remove) (struct pci_dev *dev);
517 int (*save_state) (struct pci_dev *dev, u32 state);
518 int (*suspend) (struct pci_dev *dev, u32 state);
519 int (*resume) (struct pci_dev *dev);
520 int (*enable_wake) (struct pci_dev *dev, u32 state, int enable);
521};
522
523
524
525
526
527
528
529
530
531
532#define PCI_DEVICE(vend,dev) \
533 .vendor = (vend), .device = (dev), \
534 .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID
535
536
537
538
539
540
541
542
543
544
545#define PCI_DEVICE_CLASS(dev_class,dev_class_mask) \
546 .class = (dev_class), .class_mask = (dev_class_mask), \
547 .vendor = PCI_ANY_ID, .device = PCI_ANY_ID, \
548 .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID
549
550
551#ifdef CONFIG_PCI
552
553#define pci_for_each_dev(dev) \
554 for(dev = pci_dev_g(pci_devices.next); dev != pci_dev_g(&pci_devices); dev = pci_dev_g(dev->global_list.next))
555
556void pcibios_init(void);
557void pcibios_fixup_bus(struct pci_bus *);
558int pcibios_enable_device(struct pci_dev *, int mask);
559char *pcibios_setup (char *str);
560
561
562void pcibios_align_resource(void *, struct resource *,
563 unsigned long, unsigned long);
564void pcibios_update_resource(struct pci_dev *, struct resource *,
565 struct resource *, int);
566void pcibios_update_irq(struct pci_dev *, int irq);
567void pcibios_fixup_pbus_ranges(struct pci_bus *, struct pbus_set_ranges_data *);
568
569
570
571int pcibios_present(void);
572int pcibios_read_config_byte (unsigned char bus, unsigned char dev_fn,
573 unsigned char where, unsigned char *val);
574int pcibios_read_config_word (unsigned char bus, unsigned char dev_fn,
575 unsigned char where, unsigned short *val);
576int pcibios_read_config_dword (unsigned char bus, unsigned char dev_fn,
577 unsigned char where, unsigned int *val);
578int pcibios_write_config_byte (unsigned char bus, unsigned char dev_fn,
579 unsigned char where, unsigned char val);
580int pcibios_write_config_word (unsigned char bus, unsigned char dev_fn,
581 unsigned char where, unsigned short val);
582int pcibios_write_config_dword (unsigned char bus, unsigned char dev_fn,
583 unsigned char where, unsigned int val);
584int pcibios_find_class (unsigned int class_code, unsigned short index, unsigned char *bus, unsigned char *dev_fn);
585int pcibios_find_device (unsigned short vendor, unsigned short dev_id,
586 unsigned short index, unsigned char *bus,
587 unsigned char *dev_fn);
588
589
590
591void pci_init(void);
592int pci_bus_exists(const struct list_head *list, int nr);
593struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops, void *sysdata);
594struct pci_bus *pci_alloc_primary_bus(int bus);
595struct pci_dev *pci_scan_slot(struct pci_dev *temp);
596int pci_proc_attach_device(struct pci_dev *dev);
597int pci_proc_detach_device(struct pci_dev *dev);
598int pci_proc_attach_bus(struct pci_bus *bus);
599int pci_proc_detach_bus(struct pci_bus *bus);
600void pci_name_device(struct pci_dev *dev);
601char *pci_class_name(u32 class);
602void pci_read_bridge_bases(struct pci_bus *child);
603struct resource *pci_find_parent_resource(const struct pci_dev *dev, struct resource *res);
604int pci_setup_device(struct pci_dev *dev);
605int pci_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge);
606
607
608
609struct pci_dev *pci_find_device (unsigned int vendor, unsigned int device, const struct pci_dev *from);
610struct pci_dev *pci_find_subsys (unsigned int vendor, unsigned int device,
611 unsigned int ss_vendor, unsigned int ss_device,
612 const struct pci_dev *from);
613struct pci_dev *pci_find_class (unsigned int class, const struct pci_dev *from);
614struct pci_dev *pci_find_slot (unsigned int bus, unsigned int devfn);
615int pci_find_capability (struct pci_dev *dev, int cap);
616
617int pci_read_config_byte(struct pci_dev *dev, int where, u8 *val);
618int pci_read_config_word(struct pci_dev *dev, int where, u16 *val);
619int pci_read_config_dword(struct pci_dev *dev, int where, u32 *val);
620int pci_write_config_byte(struct pci_dev *dev, int where, u8 val);
621int pci_write_config_word(struct pci_dev *dev, int where, u16 val);
622int pci_write_config_dword(struct pci_dev *dev, int where, u32 val);
623
624int pci_enable_device(struct pci_dev *dev);
625int pci_enable_device_bars(struct pci_dev *dev, int mask);
626void pci_disable_device(struct pci_dev *dev);
627void pci_set_master(struct pci_dev *dev);
628#define HAVE_PCI_SET_MWI
629int pci_set_mwi(struct pci_dev *dev);
630void pci_clear_mwi(struct pci_dev *dev);
631int pci_set_dma_mask(struct pci_dev *dev, u64 mask);
632int pci_dac_set_dma_mask(struct pci_dev *dev, u64 mask);
633int pci_assign_resource(struct pci_dev *dev, int i);
634
635
636int pci_save_state(struct pci_dev *dev, u32 *buffer);
637int pci_restore_state(struct pci_dev *dev, u32 *buffer);
638int pci_set_power_state(struct pci_dev *dev, int state);
639int pci_enable_wake(struct pci_dev *dev, u32 state, int enable);
640
641
642
643int pci_claim_resource(struct pci_dev *, int);
644void pci_assign_unassigned_resources(void);
645void pdev_enable_device(struct pci_dev *);
646void pdev_sort_resources(struct pci_dev *, struct resource_list *);
647unsigned long pci_bridge_check_io(struct pci_dev *);
648void pci_fixup_irqs(u8 (*)(struct pci_dev *, u8 *),
649 int (*)(struct pci_dev *, u8, u8));
650#define HAVE_PCI_REQ_REGIONS 2
651int pci_request_regions(struct pci_dev *, char *);
652void pci_release_regions(struct pci_dev *);
653int pci_request_region(struct pci_dev *, int, char *);
654void pci_release_region(struct pci_dev *, int);
655
656
657int pci_register_driver(struct pci_driver *);
658void pci_unregister_driver(struct pci_driver *);
659void pci_insert_device(struct pci_dev *, struct pci_bus *);
660void pci_remove_device(struct pci_dev *);
661struct pci_driver *pci_dev_driver(const struct pci_dev *);
662const struct pci_device_id *pci_match_device(const struct pci_device_id *ids, const struct pci_dev *dev);
663void pci_announce_device_to_drivers(struct pci_dev *);
664unsigned int pci_do_scan_bus(struct pci_bus *bus);
665struct pci_bus * pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, int busnr);
666
667
668struct pci_pool *pci_pool_create (const char *name, struct pci_dev *dev,
669 size_t size, size_t align, size_t allocation, int flags);
670void pci_pool_destroy (struct pci_pool *pool);
671
672void *pci_pool_alloc (struct pci_pool *pool, int flags, dma_addr_t *handle);
673void pci_pool_free (struct pci_pool *pool, void *vaddr, dma_addr_t addr);
674
675#endif
676
677
678
679#include <asm/pci.h>
680
681
682
683
684
685
686#ifndef CONFIG_PCI
687static inline int pcibios_present(void) { return 0; }
688static inline int pcibios_find_class (unsigned int class_code, unsigned short index, unsigned char *bus, unsigned char *dev_fn)
689{ return PCIBIOS_DEVICE_NOT_FOUND; }
690
691#define _PCI_NOP(o,s,t) \
692 static inline int pcibios_##o##_config_##s (u8 bus, u8 dfn, u8 where, t val) \
693 { return PCIBIOS_FUNC_NOT_SUPPORTED; } \
694 static inline int pci_##o##_config_##s (struct pci_dev *dev, int where, t val) \
695 { return PCIBIOS_FUNC_NOT_SUPPORTED; }
696#define _PCI_NOP_ALL(o,x) _PCI_NOP(o,byte,u8 x) \
697 _PCI_NOP(o,word,u16 x) \
698 _PCI_NOP(o,dword,u32 x)
699_PCI_NOP_ALL(read, *)
700_PCI_NOP_ALL(write,)
701
702static inline struct pci_dev *pci_find_device(unsigned int vendor, unsigned int device, const struct pci_dev *from)
703{ return NULL; }
704
705static inline struct pci_dev *pci_find_class(unsigned int class, const struct pci_dev *from)
706{ return NULL; }
707
708static inline struct pci_dev *pci_find_slot(unsigned int bus, unsigned int devfn)
709{ return NULL; }
710
711static inline struct pci_dev *pci_find_subsys(unsigned int vendor, unsigned int device,
712unsigned int ss_vendor, unsigned int ss_device, const struct pci_dev *from)
713{ return NULL; }
714
715static inline void pci_set_master(struct pci_dev *dev) { }
716static inline int pci_enable_device_bars(struct pci_dev *dev, int mask) { return -EBUSY; }
717static inline int pci_enable_device(struct pci_dev *dev) { return -EIO; }
718static inline void pci_disable_device(struct pci_dev *dev) { }
719static inline int pci_module_init(struct pci_driver *drv) { return -ENODEV; }
720static inline int pci_set_dma_mask(struct pci_dev *dev, u64 mask) { return -EIO; }
721static inline int pci_dac_set_dma_mask(struct pci_dev *dev, u64 mask) { return -EIO; }
722static inline int pci_assign_resource(struct pci_dev *dev, int i) { return -EBUSY;}
723static inline int pci_register_driver(struct pci_driver *drv) { return 0;}
724static inline void pci_unregister_driver(struct pci_driver *drv) { }
725static inline int scsi_to_pci_dma_dir(unsigned char scsi_dir) { return scsi_dir; }
726static inline int pci_find_capability (struct pci_dev *dev, int cap) {return 0; }
727static inline const struct pci_device_id *pci_match_device(const struct pci_device_id *ids, const struct pci_dev *dev) { return NULL; }
728
729
730static inline int pci_save_state(struct pci_dev *dev, u32 *buffer) { return 0; }
731static inline int pci_restore_state(struct pci_dev *dev, u32 *buffer) { return 0; }
732static inline int pci_set_power_state(struct pci_dev *dev, int state) { return 0; }
733static inline int pci_enable_wake(struct pci_dev *dev, u32 state, int enable) { return 0; }
734
735#define pci_for_each_dev(dev) \
736 for(dev = NULL; 0; )
737
738#else
739
740
741
742
743
744
745
746static inline int pci_module_init(struct pci_driver *drv)
747{
748 int rc = pci_register_driver (drv);
749
750 if (rc > 0)
751 return 0;
752
753
754
755
756
757#if defined(CONFIG_HOTPLUG) && !defined(MODULE)
758 if (rc == 0)
759 return 0;
760#else
761 if (rc == 0)
762 rc = -ENODEV;
763#endif
764
765
766
767 pci_unregister_driver (drv);
768
769 return rc;
770}
771
772#endif
773
774
775
776#define pci_resource_start(dev,bar) ((dev)->resource[(bar)].start)
777#define pci_resource_end(dev,bar) ((dev)->resource[(bar)].end)
778#define pci_resource_flags(dev,bar) ((dev)->resource[(bar)].flags)
779#define pci_resource_len(dev,bar) \
780 ((pci_resource_start((dev),(bar)) == 0 && \
781 pci_resource_end((dev),(bar)) == \
782 pci_resource_start((dev),(bar))) ? 0 : \
783 \
784 (pci_resource_end((dev),(bar)) - \
785 pci_resource_start((dev),(bar)) + 1))
786
787
788
789
790
791static inline void *pci_get_drvdata (struct pci_dev *pdev)
792{
793 return pdev->driver_data;
794}
795
796static inline void pci_set_drvdata (struct pci_dev *pdev, void *data)
797{
798 pdev->driver_data = data;
799}
800
801static inline char *pci_name(struct pci_dev *pdev)
802{
803 return pdev->slot_name;
804}
805
806
807
808
809
810
811
812
813struct pci_fixup {
814 int pass;
815 u16 vendor, device;
816 void (*hook)(struct pci_dev *dev);
817};
818
819extern struct pci_fixup pcibios_fixups[];
820
821#define PCI_FIXUP_HEADER 1
822#define PCI_FIXUP_FINAL 2
823
824void pci_fixup_device(int pass, struct pci_dev *dev);
825
826extern int pci_pci_problems;
827#define PCIPCI_FAIL 1
828#define PCIPCI_TRITON 2
829#define PCIPCI_NATOMA 4
830#define PCIPCI_VIAETBF 8
831#define PCIPCI_VSFX 16
832#define PCIPCI_ALIMAGIK 32
833
834#endif
835#endif
836