1 /*
2  *	Low-Level PCI Access for i386 machines.
3  *
4  *	(c) 1999 Martin Mares <mj@ucw.cz>
5  */
6 
7 #undef DEBUG
8 
9 #ifdef DEBUG
10 #define DBG(x...) printk(x)
11 #else
12 #define DBG(x...)
13 #endif
14 
15 #define PCI_PROBE_BIOS		0x0001
16 #define PCI_PROBE_CONF1		0x0002
17 #define PCI_PROBE_CONF2		0x0004
18 #define PCI_NO_SORT		0x0100
19 #define PCI_BIOS_SORT		0x0200
20 #define PCI_NO_CHECKS		0x0400
21 #define PCI_ASSIGN_ROMS		0x1000
22 #define PCI_BIOS_IRQ_SCAN	0x2000
23 #define PCI_ASSIGN_ALL_BUSSES	0x4000
24 
25 extern unsigned int pci_probe;
26 
27 /* pci-i386.c */
28 
29 extern unsigned int pcibios_max_latency;
30 extern u8 pci_cache_line_size;
31 
32 void pcibios_resource_survey(void);
33 void pcibios_set_cacheline_size(void);
34 int pcibios_enable_resources(struct pci_dev *, int mask);
35 
36 /* pci-pc.c */
37 
38 extern int pcibios_last_bus;
39 extern struct pci_bus *pci_root_bus;
40 extern struct pci_ops *pci_root_ops;
41 
42 struct irq_routing_table *pcibios_get_irq_routing_table(void);
43 int pcibios_set_irq_routing(struct pci_dev *dev, int pin, int irq);
44 
45 /* pci-irq.c */
46 
47 struct irq_info {
48 	u8 bus, devfn;			/* Bus, device and function */
49 	struct {
50 		u8 link;		/* IRQ line ID, chipset dependent, 0=not routed */
51 		u16 bitmap;		/* Available IRQs */
52 	} __attribute__((packed)) irq[4];
53 	u8 slot;			/* Slot number, 0=onboard */
54 	u8 rfu;
55 } __attribute__((packed));
56 
57 struct irq_routing_table {
58 	u32 signature;			/* PIRQ_SIGNATURE should be here */
59 	u16 version;			/* PIRQ_VERSION */
60 	u16 size;			/* Table size in bytes */
61 	u8 rtr_bus, rtr_devfn;		/* Where the interrupt router lies */
62 	u16 exclusive_irqs;		/* IRQs devoted exclusively to PCI usage */
63 	u16 rtr_vendor, rtr_device;	/* Vendor and device ID of interrupt router */
64 	u32 miniport_data;		/* Crap */
65 	u8 rfu[11];
66 	u8 checksum;			/* Modulo 256 checksum must give zero */
67 	struct irq_info slots[0];
68 } __attribute__((packed));
69 
70 extern unsigned int pcibios_irq_mask;
71 
72 void pcibios_irq_init(void);
73 void pcibios_fixup_irqs(void);
74 void pcibios_enable_irq(struct pci_dev *dev);
75 
76 void pci_iommu_init(void);
77