]>
git.proxmox.com Git - mirror_edk2.git/blob - Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Include/VlvAccess.h
4 Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
6 SPDX-License-Identifier: BSD-2-Clause-Patent
16 Macros to simplify and abstract the interface to PCI configuration.
20 #ifndef _VLVACCESS_H_INCLUDED_
21 #define _VLVACCESS_H_INCLUDED_
23 #include "Valleyview.h"
24 #include "VlvCommonDefinitions.h"
25 #include <Library/IoLib.h>
28 // Memory Mapped IO access macros used by MSG BUS LIBRARY
30 #define MmioAddress( BaseAddr, Register ) \
40 #define Mmio32Ptr( BaseAddr, Register ) \
41 ( (volatile UINT32 *)MmioAddress( BaseAddr, Register ) )
43 #define Mmio32( BaseAddr, Register ) \
44 *Mmio32Ptr( BaseAddr, Register )
46 #define Mmio32Or( BaseAddr, Register, OrData ) \
47 Mmio32( BaseAddr, Register ) = \
49 Mmio32( BaseAddr, Register ) | \
53 #define Mmio32And( BaseAddr, Register, AndData ) \
54 Mmio32( BaseAddr, Register ) = \
56 Mmio32( BaseAddr, Register ) & \
60 #define Mmio32AndThenOr( BaseAddr, Register, AndData, OrData ) \
61 Mmio32( BaseAddr, Register ) = \
63 ( Mmio32( BaseAddr, Register ) & \
73 #define Mmio16Ptr( BaseAddr, Register ) \
74 ( (volatile UINT16 *)MmioAddress( BaseAddr, Register ) )
76 #define Mmio16( BaseAddr, Register ) \
77 *Mmio16Ptr( BaseAddr, Register )
79 #define Mmio16Or( BaseAddr, Register, OrData ) \
80 Mmio16( BaseAddr, Register ) = \
82 Mmio16( BaseAddr, Register ) | \
86 #define Mmio16And( BaseAddr, Register, AndData ) \
87 Mmio16( BaseAddr, Register ) = \
89 Mmio16( BaseAddr, Register ) & \
93 #define Mmio16AndThenOr( BaseAddr, Register, AndData, OrData ) \
94 Mmio16( BaseAddr, Register ) = \
96 ( Mmio16( BaseAddr, Register ) & \
106 #define Mmio8Ptr( BaseAddr, Register ) \
107 ( (volatile UINT8 *)MmioAddress( BaseAddr, Register ) )
109 #define Mmio8( BaseAddr, Register ) \
110 *Mmio8Ptr( BaseAddr, Register )
112 #define Mmio8Or( BaseAddr, Register, OrData ) \
113 Mmio8( BaseAddr, Register ) = \
115 Mmio8( BaseAddr, Register ) | \
119 #define Mmio8And( BaseAddr, Register, AndData ) \
120 Mmio8( BaseAddr, Register ) = \
122 Mmio8( BaseAddr, Register ) & \
126 #define Mmio8AndThenOr( BaseAddr, Register, AndData, OrData ) \
127 Mmio8( BaseAddr, Register ) = \
129 ( Mmio8( BaseAddr, Register ) & \
139 #define MSG_BUS_ENABLED 0x000000F0
140 #define MSGBUS_MASKHI 0xFFFFFF00
141 #define MSGBUS_MASKLO 0x000000FF
143 #define MESSAGE_BYTE_EN BIT4
144 #define MESSAGE_WORD_EN BIT4 | BIT5
145 #define MESSAGE_DWORD_EN BIT4 | BIT5 | BIT6 | BIT7
147 #define SIDEBAND_OPCODE 0x78
148 #define MEMREAD_OPCODE 0x00000000
149 #define MEMWRITE_OPCODE 0x01000000
153 /***************************/
155 // Memory mapped PCI IO
158 #define PciCfgPtr(Bus, Device, Function, Register )\
159 (UINTN)(Bus << 20) + \
160 (UINTN)(Device << 15) + \
161 (UINTN)(Function << 12) + \
164 #define PciCfg32Read_CF8CFC(B,D,F,R) \
165 (UINT32)(IoOut32(0xCF8,(0x80000000|(B<<16)|(D<<11)|(F<<8)|(R))),IoIn32(0xCFC))
167 #define PciCfg32Write_CF8CFC(B,D,F,R,Data) \
168 (IoOut32(0xCF8,(0x80000000|(B<<16)|(D<<11)|(F<<8)|(R))),IoOut32(0xCFC,Data))
170 #define PciCfg32Or_CF8CFC(B,D,F,R,O) \
171 PciCfg32Write_CF8CFC(B,D,F,R, \
172 (PciCfg32Read_CF8CFC(B,D,F,R) | (O)))
174 #define PciCfg32And_CF8CFC(B,D,F,R,A) \
175 PciCfg32Write_CF8CFC(B,D,F,R, \
176 (PciCfg32Read_CF8CFC(B,D,F,R) & (A)))
178 #define PciCfg32AndThenOr_CF8CFC(B,D,F,R,A,O) \
179 PciCfg32Write_CF8CFC(B,D,F,R, \
180 (PciCfg32Read_CF8CFC(B,D,F,R) & (A)) | (O))
183 // Device 0, Function 0
185 #define McD0PciCfg64(Register) MmPci64 (0, MC_BUS, 0, 0, Register)
186 #define McD0PciCfg64Or(Register, OrData) MmPci64Or (0, MC_BUS, 0, 0, Register, OrData)
187 #define McD0PciCfg64And(Register, AndData) MmPci64And (0, MC_BUS, 0, 0, Register, AndData)
188 #define McD0PciCfg64AndThenOr(Register, AndData, OrData) MmPci64AndThenOr (0, MC_BUS, 0, 0, Register, AndData, OrData)
190 #define McD0PciCfg32(Register) MmPci32 (0, MC_BUS, 0, 0, Register)
191 #define McD0PciCfg32Or(Register, OrData) MmPci32Or (0, MC_BUS, 0, 0, Register, OrData)
192 #define McD0PciCfg32And(Register, AndData) MmPci32And (0, MC_BUS, 0, 0, Register, AndData)
193 #define McD0PciCfg32AndThenOr(Register, AndData, OrData) MmPci32AndThenOr (0, MC_BUS, 0, 0, Register, AndData, OrData)
195 #define McD0PciCfg16(Register) MmPci16 (0, MC_BUS, 0, 0, Register)
196 #define McD0PciCfg16Or(Register, OrData) MmPci16Or (0, MC_BUS, 0, 0, Register, OrData)
197 #define McD0PciCfg16And(Register, AndData) MmPci16And (0, MC_BUS, 0, 0, Register, AndData)
198 #define McD0PciCfg16AndThenOr(Register, AndData, OrData) MmPci16AndThenOr (0, MC_BUS, 0, 0, Register, AndData, OrData)
200 #define McD0PciCfg8(Register) MmPci8 (0, MC_BUS, 0, 0, Register)
201 #define McD0PciCfg8Or(Register, OrData) MmPci8Or (0, MC_BUS, 0, 0, Register, OrData)
202 #define McD0PciCfg8And(Register, AndData) MmPci8And (0, MC_BUS, 0, 0, Register, AndData)
203 #define McD0PciCfg8AndThenOr( Register, AndData, OrData ) MmPci8AndThenOr (0, MC_BUS, 0, 0, Register, AndData, OrData)
207 // Device 2, Function 0
209 #define McD2PciCfg64(Register) MmPci64 (0, MC_BUS, 2, 0, Register)
210 #define McD2PciCfg64Or(Register, OrData) MmPci64Or (0, MC_BUS, 2, 0, Register, OrData)
211 #define McD2PciCfg64And(Register, AndData) MmPci64And (0, MC_BUS, 2, 0, Register, AndData)
212 #define McD2PciCfg64AndThenOr(Register, AndData, OrData) MmPci64AndThenOr (0, MC_BUS, 2, 0, Register, AndData, OrData)
214 #define McD2PciCfg32(Register) MmPci32 (0, MC_BUS, 2, 0, Register)
215 #define McD2PciCfg32Or(Register, OrData) MmPci32Or (0, MC_BUS, 2, 0, Register, OrData)
216 #define McD2PciCfg32And(Register, AndData) MmPci32And (0, MC_BUS, 2, 0, Register, AndData)
217 #define McD2PciCfg32AndThenOr(Register, AndData, OrData) MmPci32AndThenOr (0, MC_BUS, 2, 0, Register, AndData, OrData)
219 #define McD2PciCfg16(Register) MmPci16 (0, MC_BUS, 2, 0, Register)
220 #define McD2PciCfg16Or(Register, OrData) MmPci16Or (0, MC_BUS, 2, 0, Register, OrData)
221 #define McD2PciCfg16And(Register, AndData) MmPci16And (0, MC_BUS, 2, 0, Register, AndData)
222 #define McD2PciCfg16AndThenOr(Register, AndData, OrData) MmPci16AndThenOr (0, MC_BUS, 2, 0, Register, AndData, OrData)
224 #define McD2PciCfg8(Register) MmPci8 (0, MC_BUS, 2, 0, Register)
225 #define McD2PciCfg8Or(Register, OrData) MmPci8Or (0, MC_BUS, 2, 0, Register, OrData)
226 #define McD2PciCfg8And(Register, AndData) MmPci8And (0, MC_BUS, 2, 0, Register, AndData)
234 #define IoIn8(Port) \
237 #define IoIn16(Port) \
240 #define IoIn32(Port) \
243 #define IoOut8(Port, Data) \
246 #define IoOut16(Port, Data) \
247 IoWrite16(Port, Data)
249 #define IoOut32(Port, Data) \
250 IoWrite32(Port, Data)