hwserv_drv.c revision 209ff23f
1/* 2 * Copyright 2006-2007 Advanced Micro Devices, Inc. 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice shall be included in 12 * all copies or substantial portions of the Software. 13 * 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20 * OTHER DEALINGS IN THE SOFTWARE. 21 */ 22 23/** 24 25Module Name: 26 27 hwserv_drv.c 28 29Abstract: 30 31 Functions defined in the Command Decoder Specification document 32 33Revision History: 34 35 NEG:27.09.2002 Initiated. 36--*/ 37#include "CD_binding.h" 38#include "CD_hw_services.h" 39 40//trace settings 41#if DEBUG_OUTPUT_DEVICE & 1 42 #define TRACE_USING_STDERR //define it to use stderr as trace output, 43#endif 44#if DEBUG_OUTPUT_DEVICE & 2 45 #define TRACE_USING_RS232 46#endif 47#if DEBUG_OUTPUT_DEVICE & 4 48 #define TRACE_USING_LPT 49#endif 50 51 52#if DEBUG_PARSER == 4 53 #define IO_TRACE //IO access trace switch, undefine it to turn off 54 #define PCI_TRACE //PCI access trace switch, undefine it to turn off 55 #define MEM_TRACE //MEM access trace switch, undefine it to turn off 56#endif 57 58UINT32 CailReadATIRegister(VOID*,UINT32); 59VOID CailWriteATIRegister(VOID*,UINT32,UINT32); 60VOID* CailAllocateMemory(VOID*,UINT16); 61VOID CailReleaseMemory(VOID *,VOID *); 62VOID CailDelayMicroSeconds(VOID *,UINT32 ); 63VOID CailReadPCIConfigData(VOID*,VOID*,UINT32,UINT16); 64VOID CailWritePCIConfigData(VOID*,VOID*,UINT32,UINT16); 65UINT32 CailReadFBData(VOID*,UINT32); 66VOID CailWriteFBData(VOID*,UINT32,UINT32); 67ULONG CailReadPLL(VOID *Context ,ULONG Address); 68VOID CailWritePLL(VOID *Context,ULONG Address,ULONG Data); 69ULONG CailReadMC(VOID *Context ,ULONG Address); 70VOID CailWriteMC(VOID *Context ,ULONG Address,ULONG Data); 71 72 73#if DEBUG_PARSER>0 74VOID CailVideoDebugPrint(VOID*,ULONG_PTR, UINT16); 75#endif 76// Delay function 77#if ( defined ENABLE_PARSER_DELAY || defined ENABLE_ALL_SERVICE_FUNCTIONS ) 78 79VOID DelayMilliseconds(PARSER_TEMP_DATA STACK_BASED * pWorkingTableData) 80{ 81 CailDelayMicroSeconds(pWorkingTableData->pDeviceData->CAIL,pWorkingTableData->SourceData32*1000); 82} 83 84VOID DelayMicroseconds(PARSER_TEMP_DATA STACK_BASED * pWorkingTableData) 85{ 86 CailDelayMicroSeconds(pWorkingTableData->pDeviceData->CAIL,pWorkingTableData->SourceData32); 87} 88#endif 89 90VOID PostCharOutput(PARSER_TEMP_DATA STACK_BASED * pParserTempData) 91{ 92} 93 94VOID CallerDebugFunc(PARSER_TEMP_DATA STACK_BASED * pParserTempData) 95{ 96} 97 98 99// PCI READ Access 100 101#if ( defined ENABLE_PARSER_PCIREAD8 || defined ENABLE_ALL_SERVICE_FUNCTIONS ) 102UINT8 ReadPCIReg8(PARSER_TEMP_DATA STACK_BASED * pWorkingTableData) 103{ 104 UINT8 rvl; 105 CailReadPCIConfigData(pWorkingTableData->pDeviceData->CAIL,&rvl,pWorkingTableData->Index,sizeof(UINT8)); 106 return rvl; 107} 108#endif 109 110 111#if ( defined ENABLE_PARSER_PCIREAD16 || defined ENABLE_ALL_SERVICE_FUNCTIONS ) 112UINT16 ReadPCIReg16(PARSER_TEMP_DATA STACK_BASED * pWorkingTableData) 113{ 114 115 UINT16 rvl; 116 CailReadPCIConfigData(pWorkingTableData->pDeviceData->CAIL,&rvl,pWorkingTableData->Index,sizeof(UINT16)); 117 return rvl; 118 119} 120#endif 121 122 123 124#if ( defined ENABLE_PARSER_PCIREAD32 || defined ENABLE_ALL_SERVICE_FUNCTIONS ) 125UINT32 ReadPCIReg32 (PARSER_TEMP_DATA STACK_BASED * pWorkingTableData) 126{ 127 128 UINT32 rvl; 129 CailReadPCIConfigData(pWorkingTableData->pDeviceData->CAIL,&rvl,pWorkingTableData->Index,sizeof(UINT32)); 130 return rvl; 131} 132#endif 133 134 135// PCI WRITE Access 136 137#if ( defined ENABLE_PARSER_PCIWRITE8 || defined ENABLE_ALL_SERVICE_FUNCTIONS ) 138VOID WritePCIReg8 (PARSER_TEMP_DATA STACK_BASED * pWorkingTableData) 139{ 140 141 CailWritePCIConfigData(pWorkingTableData->pDeviceData->CAIL,&(pWorkingTableData->DestData32),pWorkingTableData->Index,sizeof(UINT8)); 142 143} 144 145#endif 146 147 148#if ( defined ENABLE_PARSER_PCIWRITE16 || defined ENABLE_ALL_SERVICE_FUNCTIONS ) 149VOID WritePCIReg16 (PARSER_TEMP_DATA STACK_BASED * pWorkingTableData) 150{ 151 152 CailWritePCIConfigData(pWorkingTableData->pDeviceData->CAIL,&(pWorkingTableData->DestData32),pWorkingTableData->Index,sizeof(UINT16)); 153} 154 155#endif 156 157 158#if ( defined ENABLE_PARSER_PCIWRITE32 || defined ENABLE_ALL_SERVICE_FUNCTIONS ) 159VOID WritePCIReg32 (PARSER_TEMP_DATA STACK_BASED * pWorkingTableData) 160{ 161 CailWritePCIConfigData(pWorkingTableData->pDeviceData->CAIL,&(pWorkingTableData->DestData32),pWorkingTableData->Index,sizeof(UINT32)); 162} 163#endif 164 165 166 167 168// System IO Access 169#if ( defined ENABLE_PARSER_SYS_IOREAD8 || defined ENABLE_ALL_SERVICE_FUNCTIONS ) 170UINT8 ReadSysIOReg8 (PARSER_TEMP_DATA STACK_BASED * pWorkingTableData) 171{ 172 UINT8 rvl; 173 rvl=0; 174 //rvl= (UINT8) ReadGenericPciCfg(dev,reg,sizeof(UINT8)); 175 return rvl; 176} 177#endif 178 179 180#if ( defined ENABLE_PARSER_SYS_IOREAD16 || defined ENABLE_ALL_SERVICE_FUNCTIONS ) 181UINT16 ReadSysIOReg16(PARSER_TEMP_DATA STACK_BASED * pWorkingTableData) 182{ 183 184 UINT16 rvl; 185 rvl=0; 186 //rvl= (UINT16) ReadGenericPciCfg(dev,reg,sizeof(UINT16)); 187 return rvl; 188 189} 190#endif 191 192 193 194#if ( defined ENABLE_PARSER_SYS_IOREAD32 || defined ENABLE_ALL_SERVICE_FUNCTIONS ) 195UINT32 ReadSysIOReg32 (PARSER_TEMP_DATA STACK_BASED * pWorkingTableData) 196{ 197 198 UINT32 rvl; 199 rvl=0; 200 //rvl= (UINT32) ReadGenericPciCfg(dev,reg,sizeof(UINT32)); 201 return rvl; 202} 203#endif 204 205 206// PCI WRITE Access 207 208#if ( defined ENABLE_PARSER_SYS_IOWRITE8 || defined ENABLE_ALL_SERVICE_FUNCTIONS ) 209VOID WriteSysIOReg8 (PARSER_TEMP_DATA STACK_BASED * pWorkingTableData) 210{ 211 212 //WriteGenericPciCfg(dev,reg,sizeof(UINT8),(UINT32)value); 213} 214 215#endif 216 217 218#if ( defined ENABLE_PARSER_SYS_IOWRITE16 || defined ENABLE_ALL_SERVICE_FUNCTIONS ) 219VOID WriteSysIOReg16 (PARSER_TEMP_DATA STACK_BASED * pWorkingTableData) 220{ 221 222 //WriteGenericPciCfg(dev,reg,sizeof(UINT16),(UINT32)value); 223} 224 225#endif 226 227 228#if ( defined ENABLE_PARSER_SYS_IOWRITE32 || defined ENABLE_ALL_SERVICE_FUNCTIONS ) 229VOID WriteSysIOReg32 (PARSER_TEMP_DATA STACK_BASED * pWorkingTableData) 230{ 231 //WriteGenericPciCfg(dev,reg,sizeof(UINT32),(UINT32)value); 232} 233#endif 234 235// ATI Registers Memory Mapped Access 236 237#if ( defined ENABLE_PARSER_REGISTERS_MEMORY_ACCESS || defined ENABLE_ALL_SERVICE_FUNCTIONS) 238 239UINT32 ReadReg32 (PARSER_TEMP_DATA STACK_BASED * pWorkingTableData) 240{ 241 return CailReadATIRegister(pWorkingTableData->pDeviceData->CAIL,pWorkingTableData->Index); 242} 243 244VOID WriteReg32(PARSER_TEMP_DATA STACK_BASED * pWorkingTableData) 245{ 246 CailWriteATIRegister(pWorkingTableData->pDeviceData->CAIL,(UINT16)pWorkingTableData->Index,pWorkingTableData->DestData32 ); 247} 248 249 250VOID ReadIndReg32 (PARSER_TEMP_DATA STACK_BASED * pWorkingTableData) 251{ 252 pWorkingTableData->IndirectData = CailReadATIRegister(pWorkingTableData->pDeviceData->CAIL,*(UINT16*)(pWorkingTableData->IndirectIOTablePointer+1)); 253} 254 255VOID WriteIndReg32(PARSER_TEMP_DATA STACK_BASED * pWorkingTableData) 256{ 257 CailWriteATIRegister(pWorkingTableData->pDeviceData->CAIL,*(UINT16*)(pWorkingTableData->IndirectIOTablePointer+1),pWorkingTableData->IndirectData ); 258} 259 260#endif 261 262// ATI Registers IO Mapped Access 263 264#if ( defined ENABLE_PARSER_REGISTERS_IO_ACCESS || defined ENABLE_ALL_SERVICE_FUNCTIONS ) 265UINT32 ReadRegIO (PARSER_TEMP_DATA STACK_BASED * pWorkingTableData) 266{ 267 //return CailReadATIRegister(pWorkingTableData->pDeviceData->CAIL,pWorkingTableData->Index); 268 return 0; 269} 270VOID WriteRegIO(PARSER_TEMP_DATA STACK_BASED * pWorkingTableData) 271{ 272 // return CailWriteATIRegister(pWorkingTableData->pDeviceData->CAIL,pWorkingTableData->Index,pWorkingTableData->DestData32 ); 273} 274#endif 275 276// access to Frame buffer, dummy function, need more information to implement it 277UINT32 ReadFrameBuffer32 (PARSER_TEMP_DATA STACK_BASED * pWorkingTableData) 278{ 279 280 return CailReadFBData(pWorkingTableData->pDeviceData->CAIL, (pWorkingTableData->Index <<2 )); 281 282} 283 284VOID WriteFrameBuffer32(PARSER_TEMP_DATA STACK_BASED * pWorkingTableData) 285{ 286 CailWriteFBData(pWorkingTableData->pDeviceData->CAIL,(pWorkingTableData->Index <<2), pWorkingTableData->DestData32); 287 288} 289 290 291VOID *AllocateMemory(DEVICE_DATA *pDeviceData , UINT16 MemSize) 292{ 293 if(MemSize) 294 return(CailAllocateMemory(pDeviceData->CAIL,MemSize)); 295 else 296 return NULL; 297} 298 299 300VOID ReleaseMemory(DEVICE_DATA *pDeviceData , WORKING_TABLE_DATA* pWorkingTableData) 301{ 302 if( pWorkingTableData) 303 CailReleaseMemory(pDeviceData->CAIL, pWorkingTableData); 304} 305 306 307UINT32 ReadMC32(PARSER_TEMP_DATA STACK_BASED * pWorkingTableData) 308{ 309 UINT32 ReadData; 310 ReadData=(UINT32)CailReadMC(pWorkingTableData->pDeviceData->CAIL,pWorkingTableData->Index); 311 return ReadData; 312} 313 314VOID WriteMC32(PARSER_TEMP_DATA STACK_BASED * pWorkingTableData) 315{ 316 CailWriteMC(pWorkingTableData->pDeviceData->CAIL,pWorkingTableData->Index,pWorkingTableData->DestData32); 317} 318 319UINT32 ReadPLL32(PARSER_TEMP_DATA STACK_BASED * pWorkingTableData) 320{ 321 UINT32 ReadData; 322 ReadData=(UINT32)CailReadPLL(pWorkingTableData->pDeviceData->CAIL,pWorkingTableData->Index); 323 return ReadData; 324 325} 326 327VOID WritePLL32(PARSER_TEMP_DATA STACK_BASED * pWorkingTableData) 328{ 329 CailWritePLL(pWorkingTableData->pDeviceData->CAIL,pWorkingTableData->Index,pWorkingTableData->DestData32); 330 331} 332 333 334 335#if DEBUG_PARSER>0 336VOID CD_print_string (DEVICE_DATA *pDeviceData, UINT8 *str) 337{ 338 CailVideoDebugPrint( pDeviceData->CAIL, (ULONG_PTR) str, PARSER_STRINGS); 339} 340 341VOID CD_print_value (DEVICE_DATA *pDeviceData, ULONG_PTR value, UINT16 value_type ) 342{ 343 CailVideoDebugPrint( pDeviceData->CAIL, (ULONG_PTR)value, value_type); 344} 345 346#endif 347 348// EOF 349