sunxi: Add support for using MII phy-s with the GMAC nic
[oweals/u-boot.git] / include / galileo / pci.h
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,
44                                 REGION6,REGION7} PCI_ACCESS_REGIONS;
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}
50                             PCI_SNOOP_TYPE;
51 typedef enum __pciSnoopRegion{PCI_SNOOP_REGION0,PCI_SNOOP_REGION1,
52                               PCI_SNOOP_REGION2,PCI_SNOOP_REGION3}
53                               PCI_SNOOP_REGION;
54
55 typedef enum __memPciHost{PCI_HOST0,PCI_HOST1} PCI_HOST;
56 typedef enum __memPciRegion{PCI_REGION0,PCI_REGION1,
57                          PCI_REGION2,PCI_REGION3,
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,
65                                unsigned int pciDevNum);
66
67 /* read/write configuration registers on another PCI bus. */
68 void pciOverBridgeWriteConfigReg(PCI_HOST host,
69                                  unsigned int regOffset,
70                                  unsigned int pciDevNum,
71                                  unsigned int busNum,unsigned int data);
72 unsigned int pciOverBridgeReadConfigReg(PCI_HOST host,
73                                         unsigned int regOffset,
74                                         unsigned int pciDevNum,
75                                         unsigned int busNum);
76
77 /*      Master`s memory space   */
78 bool pciMapSpace(PCI_HOST host, PCI_REGION region,
79                 unsigned int remapBase,
80                 unsigned int deviceBase,
81                 unsigned int deviceLength);
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,
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);
108 bool pciSetRegionSnoopMode(PCI_HOST host, PCI_SNOOP_REGION region,
109                             PCI_SNOOP_TYPE snoopType,
110                             unsigned int baseAddress,
111                             unsigned int regionLength);
112
113 #endif /* __INCpcih */