12 #ifndef __PCI_ACCESS_H__ 13 #define __PCI_ACCESS_H__ 16 #include <libcpu/byteorder.h> 28 typedef uint16_t pci_dev_t;
30 #define PCI_DEV(bus, slot, func) (((bus)<<8) | ((slot)<<3) | (func)) 32 #define PCI_DEV_BUS(dev) (((dev) >> 8) & 0xff) 34 #define PCI_DEV_SLOT(dev) (((dev) >> 3) & 0x1f) 36 #define PCI_DEV_FUNC(dev) ((dev) & 0x7) 38 #define PCI_DEV_DEVFUNC(dev) ((dev) & 0xff) 40 #define PCI_DEV_EXPAND(dev) PCI_DEV_BUS((dev)), PCI_DEV_SLOT((dev)), PCI_DEV_FUNC((dev)) 45 int (*read8)(pci_dev_t dev,
int ofs, uint8_t *data);
46 int (*read16)(pci_dev_t dev,
int ofs, uint16_t *data);
47 int (*read32)(pci_dev_t dev,
int ofs, uint32_t *data);
48 int (*write8)(pci_dev_t dev,
int ofs, uint8_t data);
49 int (*write16)(pci_dev_t dev,
int ofs, uint16_t data);
50 int (*write32)(pci_dev_t dev,
int ofs, uint32_t data);
57 uint8_t (*read8)(uint8_t *adr);
58 uint16_t(*read16)(uint16_t *adr);
59 uint32_t (*read32)(uint32_t *adr);
60 void (*write8)(uint8_t *adr, uint8_t data);
61 void (*write16)(uint16_t *adr, uint16_t data);
62 void (*write32)(uint32_t *adr, uint32_t data);
69 uint8_t (*ld8)(uint8_t *adr);
70 void (*st8)(uint8_t *adr, uint8_t data);
72 uint16_t(*ld_le16)(uint16_t *adr);
73 void (*st_le16)(uint16_t *adr, uint16_t data);
74 uint16_t(*ld_be16)(uint16_t *adr);
75 void (*st_be16)(uint16_t *adr, uint16_t data);
77 uint32_t (*ld_le32)(uint32_t *adr);
78 void (*st_le32)(uint32_t *adr, uint32_t data);
79 uint32_t (*ld_be32)(uint32_t *adr);
80 void (*st_be32)(uint32_t *adr, uint32_t data);
83 typedef uint8_t (*pci_ld8_t)(uint8_t *adr);
84 typedef void (*pci_st8_t)(uint8_t *adr, uint8_t data);
85 typedef uint16_t(pci_ld16_t)(uint16_t *adr);
86 typedef void (*pci_st16_t)(uint16_t *adr, uint16_t data);
87 typedef uint32_t (*pci_ld32_t)(uint32_t *adr);
88 typedef void (*pci_st32_t)(uint32_t *adr, uint32_t data);
120 int (*translate)(uint32_t *address,
int type,
int dir);
130 extern void pci_modify_cmdsts(pci_dev_t dev, uint32_t mask, uint32_t val);
135 pci_modify_cmdsts(dev, PCIM_CMD_MEMEN, PCIM_CMD_MEMEN);
140 pci_modify_cmdsts(dev, PCIM_CMD_MEMEN, 0);
145 pci_modify_cmdsts(dev, PCIM_CMD_PORTEN, PCIM_CMD_PORTEN);
150 pci_modify_cmdsts(dev, PCIM_CMD_PORTEN, 0);
155 pci_modify_cmdsts(dev, PCIM_CMD_BUSMASTEREN, PCIM_CMD_BUSMASTEREN);
160 pci_modify_cmdsts(dev, PCIM_CMD_BUSMASTEREN, 0);
164 extern int pci_cfg_r8(pci_dev_t dev,
int ofs, uint8_t *data);
165 extern int pci_cfg_r16(pci_dev_t dev,
int ofs, uint16_t *data);
166 extern int pci_cfg_r32(pci_dev_t dev,
int ofs, uint32_t *data);
169 extern int pci_cfg_w8(pci_dev_t dev,
int ofs, uint8_t data);
170 extern int pci_cfg_w16(pci_dev_t dev,
int ofs, uint16_t data);
171 extern int pci_cfg_w32(pci_dev_t dev,
int ofs, uint32_t data);
174 extern uint8_t pci_io_r8(uint32_t adr);
175 extern uint16_t pci_io_r16(uint32_t adr);
176 extern uint32_t pci_io_r32(uint32_t adr);
179 extern void pci_io_w8(uint32_t adr, uint8_t data);
180 extern void pci_io_w16(uint32_t adr, uint16_t data);
181 extern void pci_io_w32(uint32_t adr, uint32_t data);
186 return pci_access_ops.translate(address, type, 0);
192 return pci_access_ops.translate(address, type, 1);
207 #ifdef BSP_PCI_BIG_ENDIAN 213 return ld_be16(addr);
223 return ld_be32(addr);
233 return ld_le16(addr);
243 return ld_le32(addr);
257 return ld_le16(addr);
267 return ld_le32(addr);
277 return ld_be16(addr);
287 return ld_be32(addr);
304 uint8_t pci_mem_ld8(uint8_t *adr);
305 void pci_mem_st8(uint8_t *adr, uint8_t data);
307 uint16_t pci_mem_be_ld_le16(uint16_t *adr);
308 uint16_t pci_mem_be_ld_be16(uint16_t *adr);
309 uint32_t pci_mem_be_ld_le32(uint32_t *adr);
310 uint32_t pci_mem_be_ld_be32(uint32_t *adr);
311 void pci_mem_be_st_le16(uint16_t *adr, uint16_t data);
312 void pci_mem_be_st_be16(uint16_t *adr, uint16_t data);
313 void pci_mem_be_st_le32(uint32_t *adr, uint32_t data);
314 void pci_mem_be_st_be32(uint32_t *adr, uint32_t data);
316 uint16_t pci_mem_le_ld_le16(uint16_t *adr);
317 uint16_t pci_mem_le_ld_be16(uint16_t *adr);
318 uint32_t pci_mem_le_ld_le32(uint32_t *adr);
319 uint32_t pci_mem_le_ld_be32(uint32_t *adr);
320 void pci_mem_le_st_le16(uint16_t *adr, uint16_t data);
321 void pci_mem_le_st_be16(uint16_t *adr, uint16_t data);
322 void pci_mem_le_st_le32(uint32_t *adr, uint32_t data);
323 void pci_mem_le_st_be32(uint32_t *adr, uint32_t data);
339 extern int pci_access_func(
int wr,
int size,
void **func,
int endian,
int type);
#define RTEMS_INLINE_ROUTINE
The following (in conjunction with compiler arguments) are used to choose between the use of static i...
Definition: basedefs.h:135