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#ifndef _HW_SERVICES_INTERFACE_ 24#define _HW_SERVICES_INTERFACE_ 25 26#include "CD_Common_Types.h" 27#include "CD_Structs.h" 28 29 30// CD - from Command Decoder 31typedef UINT16 CD_REG_INDEX; 32typedef UINT8 CD_PCI_OFFSET; 33typedef UINT16 CD_FB_OFFSET; 34typedef UINT16 CD_SYS_IO_PORT; 35typedef UINT8 CD_MEM_TYPE; 36typedef UINT8 CD_MEM_SIZE; 37 38typedef VOID * CD_VIRT_ADDR; 39typedef UINT32 CD_PHYS_ADDR; 40typedef UINT32 CD_IO_ADDR; 41 42/***********************ATI Registers access routines**************************/ 43 44 VOID ReadIndReg32(PARSER_TEMP_DATA STACK_BASED * pParserTempData); 45 46 VOID WriteIndReg32(PARSER_TEMP_DATA STACK_BASED * pParserTempData); 47 48 UINT32 ReadReg32(PARSER_TEMP_DATA STACK_BASED * pParserTempData); 49 50 VOID WriteReg32(PARSER_TEMP_DATA STACK_BASED * pParserTempData); 51 52 UINT32 ReadPLL32(PARSER_TEMP_DATA STACK_BASED * pParserTempData); 53 54 VOID WritePLL32(PARSER_TEMP_DATA STACK_BASED * pParserTempData); 55 56 UINT32 ReadMC32(PARSER_TEMP_DATA STACK_BASED * pParserTempData); 57 58 VOID WriteMC32(PARSER_TEMP_DATA STACK_BASED * pParserTempData); 59 60/************************PCI Registers access routines*************************/ 61 62 UINT8 ReadPCIReg8(PARSER_TEMP_DATA STACK_BASED * pParserTempData); 63 64 UINT16 ReadPCIReg16(PARSER_TEMP_DATA STACK_BASED * pParserTempData); 65 66 UINT32 ReadPCIReg32(PARSER_TEMP_DATA STACK_BASED * pParserTempData); 67 68 VOID WritePCIReg8(PARSER_TEMP_DATA STACK_BASED * pParserTempData); 69 70 VOID WritePCIReg16(PARSER_TEMP_DATA STACK_BASED * pParserTempData); 71 72 VOID WritePCIReg32(PARSER_TEMP_DATA STACK_BASED * pParserTempData); 73 74/***************************Frame buffer access routines************************/ 75 76 UINT32 ReadFrameBuffer32(PARSER_TEMP_DATA STACK_BASED * pParserTempData); 77 78 VOID WriteFrameBuffer32(PARSER_TEMP_DATA STACK_BASED * pParserTempData); 79 80/******************System IO Registers access routines********************/ 81 82 UINT8 ReadSysIOReg8(PARSER_TEMP_DATA STACK_BASED * pParserTempData); 83 84 UINT16 ReadSysIOReg16(PARSER_TEMP_DATA STACK_BASED * pParserTempData); 85 86 UINT32 ReadSysIOReg32(PARSER_TEMP_DATA STACK_BASED * pParserTempData); 87 88 VOID WriteSysIOReg8(PARSER_TEMP_DATA STACK_BASED * pParserTempData); 89 90 VOID WriteSysIOReg16(PARSER_TEMP_DATA STACK_BASED * pParserTempData); 91 92 VOID WriteSysIOReg32(PARSER_TEMP_DATA STACK_BASED * pParserTempData); 93 94/****************************Delay routines****************************************/ 95 96 VOID DelayMicroseconds(PARSER_TEMP_DATA STACK_BASED * pParserTempData); // take WORKING_TABLE_DATA->SourceData32 as a delay value 97 98 VOID DelayMilliseconds(PARSER_TEMP_DATA STACK_BASED * pParserTempData); 99 100 VOID PostCharOutput(PARSER_TEMP_DATA STACK_BASED * pParserTempData); 101 102 VOID CallerDebugFunc(PARSER_TEMP_DATA STACK_BASED * pParserTempData); 103 104 105//************************Tracing/Debugging routines and macroses******************/ 106#define KEYPRESSED -1 107 108#if (DEBUG_PARSER != 0) 109 110#ifdef DRIVER_PARSER 111 112VOID CD_print_string (DEVICE_DATA STACK_BASED *pDeviceData, UINT8 *str); 113VOID CD_print_value (DEVICE_DATA STACK_BASED *pDeviceData, ULONG_PTR value, UINT16 value_type ); 114 115// Level 1 : can use WorkingTableData or pDeviceData 116#define CD_TRACE_DL1(string) CD_print_string(pDeviceData, string); 117#define CD_TRACETAB_DL1(string) CD_TRACE_DL1("\n");CD_TRACE_DL1(string) 118#define CD_TRACEDEC_DL1(value) CD_print_value( pDeviceData, (ULONG_PTR)value, PARSER_DEC); 119#define CD_TRACEHEX_DL1(value) CD_print_value( pDeviceData, (ULONG_PTR)value, PARSER_HEX); 120 121// Level 2:can use pWorkingTableData 122#define CD_TRACE_DL2(string) CD_print_string( pWorkingTableData->pParserTempData->pDeviceData, string); 123#define CD_TRACETAB_DL2(string) CD_TRACE_DL2("\n");CD_TRACE_DL2(string) 124#define CD_TRACEDEC_DL2(value) CD_print_value( pWorkingTableData->pParserTempData->pDeviceData, (ULONG_PTR)value, PARSER_DEC); 125#define CD_TRACEHEX_DL2(value) CD_print_value( pWorkingTableData->pParserTempData->pDeviceData, (ULONG_PTR)value, PARSER_HEX); 126 127// Level 3:can use pWorkingTableData 128#define CD_TRACE_DL3(string) CD_print_string( pWorkingTableData->pParserTempData->pDeviceData, string); 129#define CD_TRACETAB_DL3(string) CD_TRACE_DL3("\n");CD_TRACE_DL3(string) 130#define CD_TRACEDEC_DL3(value) CD_print_value( pWorkingTableData->pParserTempData->pDeviceData, value, PARSER_DEC); 131#define CD_TRACEHEX_DL3(value) CD_print_value( pWorkingTableData->pParserTempData->pDeviceData, value, PARSER_HEX); 132 133#define CD_TRACE(string) 134#define CD_WAIT(what) 135#define CD_BREAKPOINT() 136 137#else 138 139 140VOID CD_assert (UINT8 *file, INTN lineno); //output file/line to debug console 141VOID CD_postcode(UINT8 value); //output post code to debug console 142VOID CD_print (UINT8 *str); //output text to debug console 143VOID CD_print_dec(UINTN value); //output value in decimal format to debug console 144VOID CD_print_hex(UINT32 value, UINT8 len); //output value in hexadecimal format to debug console 145VOID CD_print_buf(UINT8 *p, UINTN len); //output dump of memory to debug console 146VOID CD_wait(INT32 what); //wait for KEYPRESSED=-1 or Delay value expires 147VOID CD_breakpoint(); //insert int3 opcode or 0xF1 (for American Arium) 148 149#define CD_ASSERT(condition) if(!(condition)) CD_assert(__FILE__, __LINE__) 150#define CD_POSTCODE(value) CD_postcode(value) 151#define CD_TRACE(string) CD_print(string) 152#define CD_TRACETAB(string) CD_print(string) 153#define CD_TRACEDEC(value) CD_print_dec( (UINTN)(value)) 154#define CD_TRACEHEX(value) CD_print_hex( (UINT32)(value), sizeof(value) ) 155#define CD_TRACEBUF(pointer, len) CD_print_buf( (UINT8 *)(pointer), (UINTN) len) 156#define CD_WAIT(what) CD_wait((INT32)what) 157#define CD_BREAKPOINT() CD_breakpoint() 158 159#if (DEBUG_PARSER == 4) 160#define CD_ASSERT_DL4(condition) if(!(condition)) CD_assert(__FILE__, __LINE__) 161#define CD_POSTCODE_DL4(value) CD_postcode(value) 162#define CD_TRACE_DL4(string) CD_print(string) 163#define CD_TRACETAB_DL4(string) CD_print("\n\t\t");CD_print(string) 164#define CD_TRACEDEC_DL4(value) CD_print_dec( (UINTN)(value)) 165#define CD_TRACEHEX_DL4(value) CD_print_hex( (UINT32)(value), sizeof(value) ) 166#define CD_TRACEBUF_DL4(pointer, len) CD_print_buf( (UINT8 *)(pointer), (UINTN) len) 167#define CD_WAIT_DL4(what) CD_wait((INT32)what) 168#define CD_BREAKPOINT_DL4() CD_breakpoint() 169#else 170#define CD_ASSERT_DL4(condition) 171#define CD_POSTCODE_DL4(value) 172#define CD_TRACE_DL4(string) 173#define CD_TRACETAB_DL4(string) 174#define CD_TRACEDEC_DL4(value) 175#define CD_TRACEHEX_DL4(value) 176#define CD_TRACEBUF_DL4(pointer, len) 177#define CD_WAIT_DL4(what) 178#define CD_BREAKPOINT_DL4() 179#endif 180 181#if (DEBUG_PARSER >= 3) 182#define CD_ASSERT_DL3(condition) if(!(condition)) CD_assert(__FILE__, __LINE__) 183#define CD_POSTCODE_DL3(value) CD_postcode(value) 184#define CD_TRACE_DL3(string) CD_print(string) 185#define CD_TRACETAB_DL3(string) CD_print("\n\t\t");CD_print(string) 186#define CD_TRACEDEC_DL3(value) CD_print_dec( (UINTN)(value)) 187#define CD_TRACEHEX_DL3(value) CD_print_hex( (UINT32)(value), sizeof(value) ) 188#define CD_TRACEBUF_DL3(pointer, len) CD_print_buf( (UINT8 *)(pointer), (UINTN) len) 189#define CD_WAIT_DL3(what) CD_wait((INT32)what) 190#define CD_BREAKPOINT_DL3() CD_breakpoint() 191#else 192#define CD_ASSERT_DL3(condition) 193#define CD_POSTCODE_DL3(value) 194#define CD_TRACE_DL3(string) 195#define CD_TRACETAB_DL3(string) 196#define CD_TRACEDEC_DL3(value) 197#define CD_TRACEHEX_DL3(value) 198#define CD_TRACEBUF_DL3(pointer, len) 199#define CD_WAIT_DL3(what) 200#define CD_BREAKPOINT_DL3() 201#endif 202 203 204#if (DEBUG_PARSER >= 2) 205#define CD_ASSERT_DL2(condition) if(!(condition)) CD_assert(__FILE__, __LINE__) 206#define CD_POSTCODE_DL2(value) CD_postcode(value) 207#define CD_TRACE_DL2(string) CD_print(string) 208#define CD_TRACETAB_DL2(string) CD_print("\n\t");CD_print(string) 209#define CD_TRACEDEC_DL2(value) CD_print_dec( (UINTN)(value)) 210#define CD_TRACEHEX_DL2(value) CD_print_hex( (UINT32)(value), sizeof(value) ) 211#define CD_TRACEBUF_DL2(pointer, len) CD_print_buf( (UINT8 *)(pointer), (UINTN) len) 212#define CD_WAIT_DL2(what) CD_wait((INT32)what) 213#define CD_BREAKPOINT_DL2() CD_breakpoint() 214#else 215#define CD_ASSERT_DL2(condition) 216#define CD_POSTCODE_DL2(value) 217#define CD_TRACE_DL2(string) 218#define CD_TRACETAB_DL2(string) 219#define CD_TRACEDEC_DL2(value) 220#define CD_TRACEHEX_DL2(value) 221#define CD_TRACEBUF_DL2(pointer, len) 222#define CD_WAIT_DL2(what) 223#define CD_BREAKPOINT_DL2() 224#endif 225 226 227#if (DEBUG_PARSER >= 1) 228#define CD_ASSERT_DL1(condition) if(!(condition)) CD_assert(__FILE__, __LINE__) 229#define CD_POSTCODE_DL1(value) CD_postcode(value) 230#define CD_TRACE_DL1(string) CD_print(string) 231#define CD_TRACETAB_DL1(string) CD_print("\n");CD_print(string) 232#define CD_TRACEDEC_DL1(value) CD_print_dec( (UINTN)(value)) 233#define CD_TRACEHEX_DL1(value) CD_print_hex( (UINT32)(value), sizeof(value) ) 234#define CD_TRACEBUF_DL1(pointer, len) CD_print_buf( (UINT8 *)(pointer), (UINTN) len) 235#define CD_WAIT_DL1(what) CD_wait((INT32)what) 236#define CD_BREAKPOINT_DL1() CD_breakpoint() 237#else 238#define CD_ASSERT_DL1(condition) 239#define CD_POSTCODE_DL1(value) 240#define CD_TRACE_DL1(string) 241#define CD_TRACETAB_DL1(string) 242#define CD_TRACEDEC_DL1(value) 243#define CD_TRACEHEX_DL1(value) 244#define CD_TRACEBUF_DL1(pointer, len) 245#define CD_WAIT_DL1(what) 246#define CD_BREAKPOINT_DL1() 247#endif 248 249#endif //#ifdef DRIVER_PARSER 250 251 252#else 253 254#define CD_ASSERT(condition) 255#define CD_POSTCODE(value) 256#define CD_TRACE(string) 257#define CD_TRACEDEC(value) 258#define CD_TRACEHEX(value) 259#define CD_TRACEBUF(pointer, len) 260#define CD_WAIT(what) 261#define CD_BREAKPOINT() 262 263#define CD_ASSERT_DL4(condition) 264#define CD_POSTCODE_DL4(value) 265#define CD_TRACE_DL4(string) 266#define CD_TRACETAB_DL4(string) 267#define CD_TRACEDEC_DL4(value) 268#define CD_TRACEHEX_DL4(value) 269#define CD_TRACEBUF_DL4(pointer, len) 270#define CD_WAIT_DL4(what) 271#define CD_BREAKPOINT_DL4() 272 273#define CD_ASSERT_DL3(condition) 274#define CD_POSTCODE_DL3(value) 275#define CD_TRACE_DL3(string) 276#define CD_TRACETAB_DL3(string) 277#define CD_TRACEDEC_DL3(value) 278#define CD_TRACEHEX_DL3(value) 279#define CD_TRACEBUF_DL3(pointer, len) 280#define CD_WAIT_DL3(what) 281#define CD_BREAKPOINT_DL3() 282 283#define CD_ASSERT_DL2(condition) 284#define CD_POSTCODE_DL2(value) 285#define CD_TRACE_DL2(string) 286#define CD_TRACETAB_DL2(string) 287#define CD_TRACEDEC_DL2(value) 288#define CD_TRACEHEX_DL2(value) 289#define CD_TRACEBUF_DL2(pointer, len) 290#define CD_WAIT_DL2(what) 291#define CD_BREAKPOINT_DL2() 292 293#define CD_ASSERT_DL1(condition) 294#define CD_POSTCODE_DL1(value) 295#define CD_TRACE_DL1(string) 296#define CD_TRACETAB_DL1(string) 297#define CD_TRACEDEC_DL1(value) 298#define CD_TRACEHEX_DL1(value) 299#define CD_TRACEBUF_DL1(pointer, len) 300#define CD_WAIT_DL1(what) 301#define CD_BREAKPOINT_DL1() 302 303 304#endif //#if (DEBUG_PARSER > 0) 305 306 307#ifdef CHECKSTACK 308VOID CD_fillstack(UINT16 size); 309UINT16 CD_checkstack(UINT16 size); 310#define CD_CHECKSTACK(stacksize) CD_checkstack(stacksize) 311#define CD_FILLSTACK(stacksize) CD_fillstack(stacksize) 312#else 313#define CD_CHECKSTACK(stacksize) 0 314#define CD_FILLSTACK(stacksize) 315#endif 316 317 318#endif 319