5 #include <lunaix/ds/llist.h>
7 #define PCI_CONFIG_ADDR 0xcf8
8 #define PCI_CONFIG_DATA 0xcfc
11 #define PCI_TPCIBRIDGE 0x1
12 #define PCI_TCARDBRIDGE 0x2
14 #define PCI_VENDOR_INVLD 0xffff
16 #define PCI_REG_VENDER 0x0
17 #define PCI_REG_DEV 0x1
18 #define PCI_REG_HDRTYPE 0x7
20 #define PCI_ADDRESS(bus, dev, funct, reg) \
21 (((bus)&0xff) << 16) | (((dev)&0xff) << 11) | (((funct)&0xff) << 8) | \
22 (((reg)&0xff) << 2) | 0x80000000
24 typedef unsigned int pci_reg_t;
26 // PCI device header format
27 // Ref: "PCI Local Bus Specification, Rev.3, Section 6.1"
31 struct llist_header dev_chain;
44 // PCI Configuration Space (C-Space) r/w:
45 // Refer to "PCI Local Bus Specification, Rev.3, Section 3.2.2.3.2"
48 pci_read_cspace(int bus, int dev, int funct, int reg)
50 io_outl(PCI_CONFIG_ADDR, PCI_ADDRESS(bus, dev, funct, reg));
51 return io_inl(PCI_CONFIG_DATA);
55 pci_write_cspace(int bus, int dev, int funct, int reg, pci_reg_t data)
57 io_outl(PCI_CONFIG_ADDR, PCI_ADDRESS(bus, dev, funct, reg));
58 io_outl(PCI_CONFIG_DATA, data);
71 pci_get_device(uint16_t vendorId, uint16_t deviceId);
73 #endif /* __LUNAIX_PCI_H */