Rev 808 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
808 | serge | 1 | #include "pci.h" |
2 | #include "rhd_regs.h" |
||
3 | |||
4 | enum RHD_CHIPSETS { |
||
5 | RHD_UNKNOWN = 0, |
||
6 | /* R500 */ |
||
7 | RHD_RV505, |
||
8 | RHD_RV515, |
||
9 | RHD_RV516, |
||
10 | RHD_R520, |
||
11 | RHD_RV530, |
||
12 | RHD_RV535, |
||
13 | RHD_RV550, |
||
14 | RHD_RV560, |
||
15 | RHD_RV570, |
||
16 | RHD_R580, |
||
17 | /* R500 Mobility */ |
||
18 | RHD_M52, |
||
19 | RHD_M54, |
||
20 | RHD_M56, |
||
21 | RHD_M58, |
||
22 | RHD_M62, |
||
23 | RHD_M64, |
||
24 | RHD_M66, |
||
25 | RHD_M68, |
||
26 | RHD_M71, |
||
27 | /* R500 integrated */ |
||
28 | RHD_RS600, |
||
29 | RHD_RS690, |
||
30 | RHD_RS740, |
||
31 | /* R600 */ |
||
32 | RHD_R600, |
||
33 | RHD_RV610, |
||
34 | RHD_RV630, |
||
35 | /* R600 Mobility */ |
||
36 | RHD_M72, |
||
37 | RHD_M74, |
||
38 | RHD_M76, |
||
39 | /* RV670 came into existence after RV6x0 and M7x */ |
||
40 | RHD_RV670, |
||
41 | RHD_R680, |
||
42 | RHD_RV620, |
||
43 | RHD_M82, |
||
44 | RHD_RV635, |
||
45 | RHD_M86, |
||
46 | RHD_CHIP_END |
||
47 | }; |
||
48 | |||
49 | enum RHD_FAMILIES { |
||
50 | RHD_FAMILY_UNKNOWN = 0, |
||
51 | RHD_FAMILY_RV515, |
||
52 | RHD_FAMILY_R520, |
||
53 | RHD_FAMILY_RV530, |
||
54 | RHD_FAMILY_RV560, |
||
55 | RHD_FAMILY_RV570, |
||
56 | RHD_FAMILY_R580, |
||
57 | RHD_FAMILY_RS690, |
||
58 | RHD_FAMILY_R600, |
||
59 | RHD_FAMILY_RV610, |
||
60 | RHD_FAMILY_RV630, |
||
61 | RHD_FAMILY_RV670, |
||
62 | RHD_FAMILY_RV620, |
||
63 | RHD_FAMILY_RV635 |
||
64 | }; |
||
65 | |||
66 | #define RHD_FB_BAR 0 |
||
67 | #define RHD_MMIO_BAR 2 |
||
68 | |||
69 | #define RHD_MEM_GART 1 |
||
70 | #define RHD_MEM_FB 2 |
||
71 | |||
72 | typedef struct RHDRec |
||
73 | { |
||
74 | CARD32 MMIOBase; |
||
75 | CARD32 MMIOMapSize; |
||
76 | CARD32 videoRam; |
||
77 | |||
78 | CARD32 FbBase; /* map base of fb */ |
||
79 | CARD32 PhisBase; |
||
80 | CARD32 FbIntAddress; /* card internal address of FB */ |
||
81 | CARD32 FbMapSize; |
||
82 | |||
83 | CARD32 FbFreeStart; |
||
84 | CARD32 FbFreeSize; |
||
85 | |||
86 | /* visible part of the framebuffer */ |
||
87 | unsigned int FbScanoutStart; |
||
88 | unsigned int FbScanoutSize; |
||
89 | |||
90 | enum RHD_CHIPSETS ChipSet; |
||
91 | char *ChipName; |
||
92 | |||
93 | Bool IsIGP; |
||
94 | |||
95 | CARD32 bus; |
||
96 | CARD32 devfn; |
||
97 | |||
98 | PCITAG PciTag; |
||
99 | CARD16 PciDeviceID; |
||
100 | |||
101 | CARD16 subvendor_id; |
||
102 | CARD16 subdevice_id; |
||
103 | |||
104 | CARD32 memBase[6]; |
||
105 | CARD32 ioBase[6]; |
||
106 | CARD32 memtype[6]; |
||
107 | CARD32 memsize[6]; |
||
108 | |||
109 | struct mem_block *fb_heap; |
||
110 | struct mem_block *gart_heap; |
||
111 | |||
112 | CARD32 displayWidth; |
||
113 | CARD32 displayHeight; |
||
114 | |||
115 | CARD32 __xmin; |
||
116 | CARD32 __ymin; |
||
117 | CARD32 __xmax; |
||
118 | CARD32 __ymax; |
||
119 | |||
120 | CARD32 gui_control; |
||
121 | CARD32 dst_pitch_offset; |
||
122 | CARD32 surface_cntl; |
||
123 | |||
124 | u32 *ring_base; |
||
125 | u32 ring_rp; |
||
126 | u32 ring_wp; |
||
127 | |||
811 | serge | 128 | int num_gb_pipes; |
129 | Bool has_tcl; |
||
808 | serge | 130 | }RHD_t, *RHDPtr; |
131 | |||
132 | extern RHD_t rhd; |
||
133 | |||
134 | typedef struct |
||
135 | { |
||
136 | int xmin; |
||
137 | int ymin; |
||
138 | int xmax; |
||
139 | int ymax; |
||
140 | }clip_t, *PTRclip; |
||
141 | |||
142 | typedef struct { |
||
143 | int token; /* id of the token */ |
||
144 | const char * name; /* token name */ |
||
145 | } SymTabRec, *SymTabPtr; |
||
146 | |||
147 | extern inline CARD32 INREG(CARD16 offset) |
||
148 | { |
||
149 | return *(volatile CARD32 *)((CARD8*)(rhd.MMIOBase + offset)); |
||
150 | } |
||
151 | |||
152 | //#define INREG(offset) *(volatile CARD32 *)((CARD8*)(rhd.MMIOBase + (offset))) |
||
153 | |||
154 | extern inline void |
||
155 | OUTREG(CARD16 offset, CARD32 value) |
||
156 | { |
||
157 | *(volatile CARD32 *)((CARD8 *)(rhd.MMIOBase + offset)) = value; |
||
158 | } |
||
159 | |||
160 | extern inline CARD32 _RHDRegRead(RHDPtr rhdPtr, CARD16 offset) |
||
161 | { |
||
162 | return *(volatile CARD32 *)((CARD8*)(rhdPtr->MMIOBase + offset)); |
||
163 | } |
||
164 | |||
165 | extern inline void |
||
166 | MASKREG(CARD16 offset, CARD32 value, CARD32 mask) |
||
167 | { |
||
168 | CARD32 tmp; |
||
169 | |||
170 | tmp = INREG(offset); |
||
171 | tmp &= ~mask; |
||
172 | tmp |= (value & mask); |
||
173 | OUTREG(offset, tmp); |
||
174 | }; |
||
175 | |||
176 | extern inline void |
||
177 | _RHDRegWrite(RHDPtr rhdPtr, CARD16 offset, CARD32 value) |
||
178 | { |
||
179 | *(volatile CARD32 *)((CARD8 *)(rhdPtr->MMIOBase + offset)) = value; |
||
180 | } |
||
181 | |||
182 | extern inline void |
||
183 | _RHDRegMask(RHDPtr rhdPtr, CARD16 offset, CARD32 value, CARD32 mask) |
||
184 | { |
||
185 | CARD32 tmp; |
||
186 | |||
187 | tmp = _RHDRegRead(rhdPtr, offset); |
||
188 | tmp &= ~mask; |
||
189 | tmp |= (value & mask); |
||
190 | _RHDRegWrite(rhdPtr, offset, tmp); |
||
191 | }; |
||
192 | |||
193 | enum RHD_FAMILIES RHDFamily(enum RHD_CHIPSETS chipset); |
||
194 | |||
195 | #define RHDRegRead(ptr, offset) _RHDRegRead((ptr)->rhdPtr, (offset)) |
||
196 | #define RHDRegWrite(ptr, offset, value) _RHDRegWrite((ptr)->rhdPtr, (offset), (value)) |
||
197 | #define RHDRegMask(ptr, offset, value, mask) _RHDRegMask((ptr)->rhdPtr, (offset), (value), (mask)) |
||
198 | |||
199 | |||
200 | RHDPtr FindPciDevice(); |
||
201 | |||
202 | Bool RHDPreInit(); |
||
203 | int rhdInitHeap(RHDPtr rhdPtr); |
||
204 | |||
205 | #define RHDFUNC(ptr) |
||
206 | |||
207 | #define DBG(x) x |
||
208 | // #define DBG(x) |
||
209 | |||
210 | #pragma pack (push,1) |
||
211 | typedef struct s_cursor |
||
212 | { |
||
213 | u32 magic; // 'CURS' |
||
214 | void (*destroy)(struct s_cursor*); // destructor |
||
215 | u32 fd; // next object in list |
||
216 | u32 bk; // prev object in list |
||
217 | u32 pid; // owner id |
||
218 | |||
219 | void *base; // allocated memory |
||
220 | u32 hot_x; // hotspot coords |
||
221 | u32 hot_y; |
||
222 | }cursor_t; |
||
223 | #pragma pack (pop) |
||
224 | |||
225 | #define LOAD_FROM_FILE 0 |
||
226 | #define LOAD_FROM_MEM 1 |
||
227 | #define LOAD_INDIRECT 2 |
||
228 | |||
229 | cursor_t *create_cursor(u32 pid, void *src, u32 flags); |
||
230 | void __stdcall copy_cursor(void *img, void *src); |
||
231 | void destroy_cursor(cursor_t *cursor); |
||
232 | void __destroy_cursor(cursor_t *cursor); // wrap |
||
233 | |||
234 | void __stdcall r500_SelectCursor(cursor_t *cursor); |
||
235 | void __stdcall r500_SetCursor(cursor_t *cursor, int x, int y); |
||
236 | void __stdcall r500_CursorRestore(int x, int y); |
||
237 | |||
238 | void R5xx2DInit(); |