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