]>
Commit | Line | Data |
---|---|---|
fe8c2806 WD |
1 | /* PCI.h - PCI functions header file */ |
2 | ||
3 | /* Copyright - Galileo technology. */ | |
4 | ||
5 | #ifndef __INCpcih | |
6 | #define __INCpcih | |
7 | ||
8 | /* includes */ | |
9 | ||
10 | #include "core.h" | |
11 | #include "memory.h" | |
12 | ||
13 | /* According to PCI REV 2.1 MAX agents allowed on the bus are -21- */ | |
14 | #define PCI_MAX_DEVICES 22 | |
15 | ||
16 | ||
17 | /* Macros */ | |
18 | #define SELF 32 | |
19 | ||
20 | /* Defines for the access regions. */ | |
21 | #define PREFETCH_ENABLE BIT12 | |
22 | #define PREFETCH_DISABLE NO_BIT | |
23 | #define DELAYED_READ_ENABLE BIT13 | |
24 | /* #define CACHING_ENABLE BIT14 */ | |
25 | /* aggressive prefetch: PCI slave prefetch two burst in advance*/ | |
26 | #define AGGRESSIVE_PREFETCH BIT16 | |
27 | /* read line aggresive prefetch: PCI slave prefetch two burst in advance*/ | |
28 | #define READ_LINE_AGGRESSIVE_PREFETCH BIT17 | |
29 | /* read multiple aggresive prefetch: PCI slave prefetch two burst in advance*/ | |
30 | #define READ_MULTI_AGGRESSIVE_PREFETCH BIT18 | |
31 | #define MAX_BURST_4 NO_BIT | |
32 | #define MAX_BURST_8 BIT20 /* Bits[21:20] = 01 */ | |
33 | #define MAX_BURST_16 BIT21 /* Bits[21:20] = 10 */ | |
34 | #define PCI_BYTE_SWAP NO_BIT /* Bits[25:24] = 00 */ | |
35 | #define PCI_NO_SWAP BIT24 /* Bits[25:24] = 01 */ | |
36 | #define PCI_BYTE_AND_WORD_SWAP BIT25 /* Bits[25:24] = 10 */ | |
37 | #define PCI_WORD_SWAP (BIT24 | BIT25) /* Bits[25:24] = 11 */ | |
38 | #define PCI_ACCESS_PROTECT BIT28 | |
39 | #define PCI_WRITE_PROTECT BIT29 | |
40 | ||
41 | /* typedefs */ | |
42 | ||
43 | typedef enum __pciAccessRegions{REGION0,REGION1,REGION2,REGION3,REGION4,REGION5, | |
8bde7f77 | 44 | REGION6,REGION7} PCI_ACCESS_REGIONS; |
fe8c2806 WD |
45 | |
46 | typedef enum __pciAgentPrio{LOW_AGENT_PRIO,HI_AGENT_PRIO} PCI_AGENT_PRIO; | |
47 | typedef enum __pciAgentPark{PARK_ON_AGENT,DONT_PARK_ON_AGENT} PCI_AGENT_PARK; | |
48 | ||
49 | typedef enum __pciSnoopType{PCI_NO_SNOOP,PCI_SNOOP_WT,PCI_SNOOP_WB} | |
8bde7f77 | 50 | PCI_SNOOP_TYPE; |
fe8c2806 | 51 | typedef enum __pciSnoopRegion{PCI_SNOOP_REGION0,PCI_SNOOP_REGION1, |
8bde7f77 WD |
52 | PCI_SNOOP_REGION2,PCI_SNOOP_REGION3} |
53 | PCI_SNOOP_REGION; | |
fe8c2806 WD |
54 | |
55 | typedef enum __memPciHost{PCI_HOST0,PCI_HOST1} PCI_HOST; | |
56 | typedef enum __memPciRegion{PCI_REGION0,PCI_REGION1, | |
8bde7f77 | 57 | PCI_REGION2,PCI_REGION3, |
fe8c2806 WD |
58 | PCI_IO} |
59 | PCI_REGION; | |
60 | ||
61 | /* read/write configuration registers on local PCI bus. */ | |
62 | void pciWriteConfigReg(PCI_HOST host, unsigned int regOffset, | |
63 | unsigned int pciDevNum, unsigned int data); | |
64 | unsigned int pciReadConfigReg (PCI_HOST host, unsigned int regOffset, | |
8bde7f77 | 65 | unsigned int pciDevNum); |
fe8c2806 WD |
66 | |
67 | /* read/write configuration registers on another PCI bus. */ | |
68 | void pciOverBridgeWriteConfigReg(PCI_HOST host, | |
69 | unsigned int regOffset, | |
8bde7f77 WD |
70 | unsigned int pciDevNum, |
71 | unsigned int busNum,unsigned int data); | |
fe8c2806 WD |
72 | unsigned int pciOverBridgeReadConfigReg(PCI_HOST host, |
73 | unsigned int regOffset, | |
8bde7f77 WD |
74 | unsigned int pciDevNum, |
75 | unsigned int busNum); | |
fe8c2806 WD |
76 | |
77 | /* Master`s memory space */ | |
78 | bool pciMapSpace(PCI_HOST host, PCI_REGION region, | |
79 | unsigned int remapBase, | |
80 | unsigned int deviceBase, | |
8bde7f77 | 81 | unsigned int deviceLength); |
fe8c2806 WD |
82 | unsigned int pciGetSpaceBase(PCI_HOST host, PCI_REGION region); |
83 | unsigned int pciGetSpaceSize(PCI_HOST host, PCI_REGION region); | |
84 | ||
85 | /* Slave`s memory space */ | |
86 | void pciMapMemoryBank(PCI_HOST host, MEMORY_BANK bank, | |
87 | unsigned int pci0Dram0Base, unsigned int pci0Dram0Size); | |
88 | ||
89 | /* PCI region options */ | |
90 | ||
91 | bool pciSetRegionFeatures(PCI_HOST host, PCI_ACCESS_REGIONS region, | |
92 | unsigned int features, unsigned int baseAddress, | |
93 | unsigned int regionLength); | |
94 | ||
95 | void pciDisableAccessRegion(PCI_HOST host, PCI_ACCESS_REGIONS region); | |
96 | ||
97 | /* PCI arbiter */ | |
98 | ||
99 | bool pciArbiterEnable(PCI_HOST host); | |
100 | bool pciArbiterDisable(PCI_HOST host); | |
101 | bool pciParkingDisable(PCI_HOST host, PCI_AGENT_PARK internalAgent, | |
8bde7f77 WD |
102 | PCI_AGENT_PARK externalAgent0, |
103 | PCI_AGENT_PARK externalAgent1, | |
104 | PCI_AGENT_PARK externalAgent2, | |
105 | PCI_AGENT_PARK externalAgent3, | |
106 | PCI_AGENT_PARK externalAgent4, | |
107 | PCI_AGENT_PARK externalAgent5); | |
fe8c2806 WD |
108 | bool pciSetRegionSnoopMode(PCI_HOST host, PCI_SNOOP_REGION region, |
109 | PCI_SNOOP_TYPE snoopType, | |
8bde7f77 WD |
110 | unsigned int baseAddress, |
111 | unsigned int regionLength); | |
fe8c2806 WD |
112 | |
113 | #endif /* __INCpcih */ |