2
* Copyright 2006-2007 Advanced Micro Devices, Inc.
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:
11
* The above copyright notice and this permission notice shall be included in
12
* all copies or substantial portions of the Software.
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.
31
Functions defined in the Command Decoder Specification document
35
NEG:27.09.2002 Initiated.
37
#include "CD_binding.h"
38
#include "CD_hw_services.h"
41
#if DEBUG_OUTPUT_DEVICE & 1
42
#define TRACE_USING_STDERR //define it to use stderr as trace output,
44
#if DEBUG_OUTPUT_DEVICE & 2
45
#define TRACE_USING_RS232
47
#if DEBUG_OUTPUT_DEVICE & 4
48
#define TRACE_USING_LPT
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
58
UINT32 CailReadATIRegister(VOID*,UINT32);
59
VOID CailWriteATIRegister(VOID*,UINT32,UINT32);
60
VOID* CailAllocateMemory(VOID*,UINT16);
61
VOID CailReleaseMemory(VOID *,VOID *);
62
VOID CailDelayMicroSeconds(VOID *,UINT32 );
63
VOID CailReadPCIConfigData(VOID*,VOID*,UINT32,UINT16);
64
VOID CailWritePCIConfigData(VOID*,VOID*,UINT32,UINT16);
65
UINT32 CailReadFBData(VOID*,UINT32);
66
VOID CailWriteFBData(VOID*,UINT32,UINT32);
67
ULONG CailReadPLL(VOID *Context ,ULONG Address);
68
VOID CailWritePLL(VOID *Context,ULONG Address,ULONG Data);
69
ULONG CailReadMC(VOID *Context ,ULONG Address);
70
VOID CailWriteMC(VOID *Context ,ULONG Address,ULONG Data);
74
VOID CailVideoDebugPrint(VOID*,ULONG_PTR, UINT16);
77
#if ( defined ENABLE_PARSER_DELAY || defined ENABLE_ALL_SERVICE_FUNCTIONS )
79
VOID DelayMilliseconds(PARSER_TEMP_DATA STACK_BASED * pWorkingTableData)
81
CailDelayMicroSeconds(pWorkingTableData->pDeviceData->CAIL,pWorkingTableData->SourceData32*1000);
84
VOID DelayMicroseconds(PARSER_TEMP_DATA STACK_BASED * pWorkingTableData)
86
CailDelayMicroSeconds(pWorkingTableData->pDeviceData->CAIL,pWorkingTableData->SourceData32);
90
VOID PostCharOutput(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
94
VOID CallerDebugFunc(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
101
#if ( defined ENABLE_PARSER_PCIREAD8 || defined ENABLE_ALL_SERVICE_FUNCTIONS )
102
UINT8 ReadPCIReg8(PARSER_TEMP_DATA STACK_BASED * pWorkingTableData)
105
CailReadPCIConfigData(pWorkingTableData->pDeviceData->CAIL,&rvl,pWorkingTableData->Index,sizeof(UINT8));
111
#if ( defined ENABLE_PARSER_PCIREAD16 || defined ENABLE_ALL_SERVICE_FUNCTIONS )
112
UINT16 ReadPCIReg16(PARSER_TEMP_DATA STACK_BASED * pWorkingTableData)
116
CailReadPCIConfigData(pWorkingTableData->pDeviceData->CAIL,&rvl,pWorkingTableData->Index,sizeof(UINT16));
124
#if ( defined ENABLE_PARSER_PCIREAD32 || defined ENABLE_ALL_SERVICE_FUNCTIONS )
125
UINT32 ReadPCIReg32 (PARSER_TEMP_DATA STACK_BASED * pWorkingTableData)
129
CailReadPCIConfigData(pWorkingTableData->pDeviceData->CAIL,&rvl,pWorkingTableData->Index,sizeof(UINT32));
137
#if ( defined ENABLE_PARSER_PCIWRITE8 || defined ENABLE_ALL_SERVICE_FUNCTIONS )
138
VOID WritePCIReg8 (PARSER_TEMP_DATA STACK_BASED * pWorkingTableData)
141
CailWritePCIConfigData(pWorkingTableData->pDeviceData->CAIL,&(pWorkingTableData->DestData32),pWorkingTableData->Index,sizeof(UINT8));
148
#if ( defined ENABLE_PARSER_PCIWRITE16 || defined ENABLE_ALL_SERVICE_FUNCTIONS )
149
VOID WritePCIReg16 (PARSER_TEMP_DATA STACK_BASED * pWorkingTableData)
152
CailWritePCIConfigData(pWorkingTableData->pDeviceData->CAIL,&(pWorkingTableData->DestData32),pWorkingTableData->Index,sizeof(UINT16));
158
#if ( defined ENABLE_PARSER_PCIWRITE32 || defined ENABLE_ALL_SERVICE_FUNCTIONS )
159
VOID WritePCIReg32 (PARSER_TEMP_DATA STACK_BASED * pWorkingTableData)
161
CailWritePCIConfigData(pWorkingTableData->pDeviceData->CAIL,&(pWorkingTableData->DestData32),pWorkingTableData->Index,sizeof(UINT32));
169
#if ( defined ENABLE_PARSER_SYS_IOREAD8 || defined ENABLE_ALL_SERVICE_FUNCTIONS )
170
UINT8 ReadSysIOReg8 (PARSER_TEMP_DATA STACK_BASED * pWorkingTableData)
174
//rvl= (UINT8) ReadGenericPciCfg(dev,reg,sizeof(UINT8));
180
#if ( defined ENABLE_PARSER_SYS_IOREAD16 || defined ENABLE_ALL_SERVICE_FUNCTIONS )
181
UINT16 ReadSysIOReg16(PARSER_TEMP_DATA STACK_BASED * pWorkingTableData)
186
//rvl= (UINT16) ReadGenericPciCfg(dev,reg,sizeof(UINT16));
194
#if ( defined ENABLE_PARSER_SYS_IOREAD32 || defined ENABLE_ALL_SERVICE_FUNCTIONS )
195
UINT32 ReadSysIOReg32 (PARSER_TEMP_DATA STACK_BASED * pWorkingTableData)
200
//rvl= (UINT32) ReadGenericPciCfg(dev,reg,sizeof(UINT32));
208
#if ( defined ENABLE_PARSER_SYS_IOWRITE8 || defined ENABLE_ALL_SERVICE_FUNCTIONS )
209
VOID WriteSysIOReg8 (PARSER_TEMP_DATA STACK_BASED * pWorkingTableData)
212
//WriteGenericPciCfg(dev,reg,sizeof(UINT8),(UINT32)value);
218
#if ( defined ENABLE_PARSER_SYS_IOWRITE16 || defined ENABLE_ALL_SERVICE_FUNCTIONS )
219
VOID WriteSysIOReg16 (PARSER_TEMP_DATA STACK_BASED * pWorkingTableData)
222
//WriteGenericPciCfg(dev,reg,sizeof(UINT16),(UINT32)value);
228
#if ( defined ENABLE_PARSER_SYS_IOWRITE32 || defined ENABLE_ALL_SERVICE_FUNCTIONS )
229
VOID WriteSysIOReg32 (PARSER_TEMP_DATA STACK_BASED * pWorkingTableData)
231
//WriteGenericPciCfg(dev,reg,sizeof(UINT32),(UINT32)value);
235
// ATI Registers Memory Mapped Access
237
#if ( defined ENABLE_PARSER_REGISTERS_MEMORY_ACCESS || defined ENABLE_ALL_SERVICE_FUNCTIONS)
239
UINT32 ReadReg32 (PARSER_TEMP_DATA STACK_BASED * pWorkingTableData)
241
return CailReadATIRegister(pWorkingTableData->pDeviceData->CAIL,pWorkingTableData->Index);
244
VOID WriteReg32(PARSER_TEMP_DATA STACK_BASED * pWorkingTableData)
246
CailWriteATIRegister(pWorkingTableData->pDeviceData->CAIL,(UINT16)pWorkingTableData->Index,pWorkingTableData->DestData32 );
250
VOID ReadIndReg32 (PARSER_TEMP_DATA STACK_BASED * pWorkingTableData)
252
pWorkingTableData->IndirectData = CailReadATIRegister(pWorkingTableData->pDeviceData->CAIL,*(UINT16*)(pWorkingTableData->IndirectIOTablePointer+1));
255
VOID WriteIndReg32(PARSER_TEMP_DATA STACK_BASED * pWorkingTableData)
257
CailWriteATIRegister(pWorkingTableData->pDeviceData->CAIL,*(UINT16*)(pWorkingTableData->IndirectIOTablePointer+1),pWorkingTableData->IndirectData );
262
// ATI Registers IO Mapped Access
264
#if ( defined ENABLE_PARSER_REGISTERS_IO_ACCESS || defined ENABLE_ALL_SERVICE_FUNCTIONS )
265
UINT32 ReadRegIO (PARSER_TEMP_DATA STACK_BASED * pWorkingTableData)
267
//return CailReadATIRegister(pWorkingTableData->pDeviceData->CAIL,pWorkingTableData->Index);
270
VOID WriteRegIO(PARSER_TEMP_DATA STACK_BASED * pWorkingTableData)
272
// return CailWriteATIRegister(pWorkingTableData->pDeviceData->CAIL,pWorkingTableData->Index,pWorkingTableData->DestData32 );
276
// access to Frame buffer, dummy function, need more information to implement it
277
UINT32 ReadFrameBuffer32 (PARSER_TEMP_DATA STACK_BASED * pWorkingTableData)
280
return CailReadFBData(pWorkingTableData->pDeviceData->CAIL, (pWorkingTableData->Index <<2 ));
284
VOID WriteFrameBuffer32(PARSER_TEMP_DATA STACK_BASED * pWorkingTableData)
286
CailWriteFBData(pWorkingTableData->pDeviceData->CAIL,(pWorkingTableData->Index <<2), pWorkingTableData->DestData32);
291
VOID *AllocateMemory(DEVICE_DATA *pDeviceData , UINT16 MemSize)
294
return(CailAllocateMemory(pDeviceData->CAIL,MemSize));
300
VOID ReleaseMemory(DEVICE_DATA *pDeviceData , WORKING_TABLE_DATA* pWorkingTableData)
302
if( pWorkingTableData)
303
CailReleaseMemory(pDeviceData->CAIL, pWorkingTableData);
307
UINT32 ReadMC32(PARSER_TEMP_DATA STACK_BASED * pWorkingTableData)
310
ReadData=(UINT32)CailReadMC(pWorkingTableData->pDeviceData->CAIL,pWorkingTableData->Index);
314
VOID WriteMC32(PARSER_TEMP_DATA STACK_BASED * pWorkingTableData)
316
CailWriteMC(pWorkingTableData->pDeviceData->CAIL,pWorkingTableData->Index,pWorkingTableData->DestData32);
319
UINT32 ReadPLL32(PARSER_TEMP_DATA STACK_BASED * pWorkingTableData)
322
ReadData=(UINT32)CailReadPLL(pWorkingTableData->pDeviceData->CAIL,pWorkingTableData->Index);
327
VOID WritePLL32(PARSER_TEMP_DATA STACK_BASED * pWorkingTableData)
329
CailWritePLL(pWorkingTableData->pDeviceData->CAIL,pWorkingTableData->Index,pWorkingTableData->DestData32);
336
VOID CD_print_string (DEVICE_DATA *pDeviceData, UINT8 *str)
338
CailVideoDebugPrint( pDeviceData->CAIL, (ULONG_PTR) str, PARSER_STRINGS);
341
VOID CD_print_value (DEVICE_DATA *pDeviceData, ULONG_PTR value, UINT16 value_type )
343
CailVideoDebugPrint( pDeviceData->CAIL, (ULONG_PTR)value, value_type);