Subversion Repositories Kolibri OS

Rev

Rev 1179 | Rev 1233 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1117 serge 1
/*
2
 * Copyright 2008 Advanced Micro Devices, Inc.
3
 * Copyright 2008 Red Hat Inc.
4
 * Copyright 2009 Jerome Glisse.
5
 *
6
 * Permission is hereby granted, free of charge, to any person obtaining a
7
 * copy of this software and associated documentation files (the "Software"),
8
 * to deal in the Software without restriction, including without limitation
9
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10
 * and/or sell copies of the Software, and to permit persons to whom the
11
 * Software is furnished to do so, subject to the following conditions:
12
 *
13
 * The above copyright notice and this permission notice shall be included in
14
 * all copies or substantial portions of the Software.
15
 *
16
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19
 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
20
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
 * OTHER DEALINGS IN THE SOFTWARE.
23
 *
24
 * Authors: Dave Airlie
25
 *          Alex Deucher
26
 *          Jerome Glisse
27
 */
28
#ifndef __RADEON_ASIC_H__
29
#define __RADEON_ASIC_H__
30
 
31
/*
32
 * common functions
33
 */
34
void radeon_legacy_set_engine_clock(struct radeon_device *rdev, uint32_t eng_clock);
35
void radeon_legacy_set_clock_gating(struct radeon_device *rdev, int enable);
36
 
37
void radeon_atom_set_engine_clock(struct radeon_device *rdev, uint32_t eng_clock);
38
void radeon_atom_set_memory_clock(struct radeon_device *rdev, uint32_t mem_clock);
39
void radeon_atom_set_clock_gating(struct radeon_device *rdev, int enable);
40
 
41
/*
42
 * r100,rv100,rs100,rv200,rs200,r200,rv250,rs300,rv280
43
 */
1221 serge 44
extern int r100_init(struct radeon_device *rdev);
45
extern void r100_fini(struct radeon_device *rdev);
46
extern int r100_suspend(struct radeon_device *rdev);
47
extern int r100_resume(struct radeon_device *rdev);
1117 serge 48
uint32_t r100_mm_rreg(struct radeon_device *rdev, uint32_t reg);
49
void r100_mm_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
1179 serge 50
void r100_vga_set_state(struct radeon_device *rdev, bool state);
1117 serge 51
int r100_gpu_reset(struct radeon_device *rdev);
1179 serge 52
u32 r100_get_vblank_counter(struct radeon_device *rdev, int crtc);
1117 serge 53
void r100_pci_gart_tlb_flush(struct radeon_device *rdev);
54
int r100_pci_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr);
1179 serge 55
void r100_cp_commit(struct radeon_device *rdev);
1117 serge 56
void r100_ring_start(struct radeon_device *rdev);
57
int r100_irq_set(struct radeon_device *rdev);
58
int r100_irq_process(struct radeon_device *rdev);
1128 serge 59
void r100_fence_ring_emit(struct radeon_device *rdev,
60
			  struct radeon_fence *fence);
61
int r100_cs_parse(struct radeon_cs_parser *p);
1117 serge 62
void r100_pll_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
63
uint32_t r100_pll_rreg(struct radeon_device *rdev, uint32_t reg);
1128 serge 64
int r100_copy_blit(struct radeon_device *rdev,
65
		   uint64_t src_offset,
66
		   uint64_t dst_offset,
67
		   unsigned num_pages,
68
		   struct radeon_fence *fence);
1179 serge 69
int r100_set_surface_reg(struct radeon_device *rdev, int reg,
70
			 uint32_t tiling_flags, uint32_t pitch,
71
			 uint32_t offset, uint32_t obj_size);
72
int r100_clear_surface_reg(struct radeon_device *rdev, int reg);
73
void r100_bandwidth_update(struct radeon_device *rdev);
74
void r100_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
75
int r100_ring_test(struct radeon_device *rdev);
1117 serge 76
 
77
static struct radeon_asic r100_asic = {
78
	.init = &r100_init,
1221 serge 79
//	.fini = &r100_fini,
80
//	.suspend = &r100_suspend,
81
//	.resume = &r100_resume,
82
//	.vga_set_state = &r100_vga_set_state,
1117 serge 83
	.gpu_reset = &r100_gpu_reset,
84
	.gart_tlb_flush = &r100_pci_gart_tlb_flush,
85
	.gart_set_page = &r100_pci_gart_set_page,
1221 serge 86
	.cp_commit = &r100_cp_commit,
87
//	.ring_start = &r100_ring_start,
88
//   .ring_test = &r100_ring_test,
89
//	.ring_ib_execute = &r100_ring_ib_execute,
90
//	.irq_set = &r100_irq_set,
91
//	.irq_process = &r100_irq_process,
92
//	.get_vblank_counter = &r100_get_vblank_counter,
93
//	.fence_ring_emit = &r100_fence_ring_emit,
94
//	.cs_parse = &r100_cs_parse,
95
//	.copy_blit = &r100_copy_blit,
96
//	.copy_dma = NULL,
97
//	.copy = &r100_copy_blit,
98
	.set_engine_clock = &radeon_legacy_set_engine_clock,
99
	.set_memory_clock = NULL,
100
	.set_pcie_lanes = NULL,
101
	.set_clock_gating = &radeon_legacy_set_clock_gating,
1179 serge 102
	.set_surface_reg = r100_set_surface_reg,
103
	.clear_surface_reg = r100_clear_surface_reg,
104
	.bandwidth_update = &r100_bandwidth_update,
1117 serge 105
};
106
 
107
 
108
/*
109
 * r300,r350,rv350,rv380
110
 */
1221 serge 111
extern int r300_init(struct radeon_device *rdev);
112
extern void r300_fini(struct radeon_device *rdev);
113
extern int r300_suspend(struct radeon_device *rdev);
114
extern int r300_resume(struct radeon_device *rdev);
115
extern int r300_gpu_reset(struct radeon_device *rdev);
116
extern void r300_ring_start(struct radeon_device *rdev);
117
extern void r300_fence_ring_emit(struct radeon_device *rdev,
1128 serge 118
			  struct radeon_fence *fence);
1221 serge 119
extern int r300_cs_parse(struct radeon_cs_parser *p);
120
extern void rv370_pcie_gart_tlb_flush(struct radeon_device *rdev);
121
extern int rv370_pcie_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr);
122
extern uint32_t rv370_pcie_rreg(struct radeon_device *rdev, uint32_t reg);
123
extern void rv370_pcie_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
124
extern void rv370_set_pcie_lanes(struct radeon_device *rdev, int lanes);
125
extern int r300_copy_dma(struct radeon_device *rdev,
1128 serge 126
		  uint64_t src_offset,
127
		  uint64_t dst_offset,
128
		  unsigned num_pages,
129
		  struct radeon_fence *fence);
1117 serge 130
static struct radeon_asic r300_asic = {
131
	.init = &r300_init,
1221 serge 132
//	.fini = &r300_fini,
133
//	.suspend = &r300_suspend,
134
//	.resume = &r300_resume,
135
//	.vga_set_state = &r100_vga_set_state,
1117 serge 136
	.gpu_reset = &r300_gpu_reset,
137
	.gart_tlb_flush = &r100_pci_gart_tlb_flush,
138
	.gart_set_page = &r100_pci_gart_set_page,
1221 serge 139
//	.cp_commit = &r100_cp_commit,
140
//	.ring_start = &r300_ring_start,
141
//   .ring_test = &r100_ring_test,
142
//	.ring_ib_execute = &r100_ring_ib_execute,
143
//	.irq_set = &r100_irq_set,
144
//	.irq_process = &r100_irq_process,
145
//	.get_vblank_counter = &r100_get_vblank_counter,
146
//	.fence_ring_emit = &r300_fence_ring_emit,
147
//	.cs_parse = &r300_cs_parse,
148
//	.copy_blit = &r100_copy_blit,
149
//	.copy_dma = &r300_copy_dma,
150
//	.copy = &r100_copy_blit,
151
	.set_engine_clock = &radeon_legacy_set_engine_clock,
152
	.set_memory_clock = NULL,
153
	.set_pcie_lanes = &rv370_set_pcie_lanes,
154
	.set_clock_gating = &radeon_legacy_set_clock_gating,
1179 serge 155
	.set_surface_reg = r100_set_surface_reg,
156
	.clear_surface_reg = r100_clear_surface_reg,
157
	.bandwidth_update = &r100_bandwidth_update,
1117 serge 158
};
159
 
160
/*
161
 * r420,r423,rv410
162
 */
1179 serge 163
extern int r420_init(struct radeon_device *rdev);
164
extern void r420_fini(struct radeon_device *rdev);
165
extern int r420_suspend(struct radeon_device *rdev);
166
extern int r420_resume(struct radeon_device *rdev);
1117 serge 167
static struct radeon_asic r420_asic = {
1179 serge 168
	.init = &r420_init,
1221 serge 169
//	.fini = &r420_fini,
170
//	.suspend = &r420_suspend,
171
//	.resume = &r420_resume,
172
//	.vga_set_state = &r100_vga_set_state,
1117 serge 173
	.gpu_reset = &r300_gpu_reset,
174
	.gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
175
	.gart_set_page = &rv370_pcie_gart_set_page,
1221 serge 176
//	.cp_commit = &r100_cp_commit,
177
//	.ring_start = &r300_ring_start,
178
//   .ring_test = &r100_ring_test,
179
//	.ring_ib_execute = &r100_ring_ib_execute,
180
//	.irq_set = &r100_irq_set,
181
//	.irq_process = &r100_irq_process,
182
//	.get_vblank_counter = &r100_get_vblank_counter,
183
//	.fence_ring_emit = &r300_fence_ring_emit,
184
//	.cs_parse = &r300_cs_parse,
185
//	.copy_blit = &r100_copy_blit,
186
//	.copy_dma = &r300_copy_dma,
187
//	.copy = &r100_copy_blit,
188
	.set_engine_clock = &radeon_atom_set_engine_clock,
189
	.set_memory_clock = &radeon_atom_set_memory_clock,
190
	.set_pcie_lanes = &rv370_set_pcie_lanes,
191
	.set_clock_gating = &radeon_atom_set_clock_gating,
1179 serge 192
	.set_surface_reg = r100_set_surface_reg,
193
	.clear_surface_reg = r100_clear_surface_reg,
194
	.bandwidth_update = &r100_bandwidth_update,
1117 serge 195
};
196
 
197
 
198
/*
199
 * rs400,rs480
200
 */
1221 serge 201
extern int rs400_init(struct radeon_device *rdev);
202
extern void rs400_fini(struct radeon_device *rdev);
203
extern int rs400_suspend(struct radeon_device *rdev);
204
extern int rs400_resume(struct radeon_device *rdev);
1117 serge 205
void rs400_gart_tlb_flush(struct radeon_device *rdev);
206
int rs400_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr);
207
uint32_t rs400_mc_rreg(struct radeon_device *rdev, uint32_t reg);
208
void rs400_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
209
static struct radeon_asic rs400_asic = {
1221 serge 210
	.init = &rs400_init,
211
//	.fini = &rs400_fini,
212
//	.suspend = &rs400_suspend,
213
//	.resume = &rs400_resume,
214
//	.vga_set_state = &r100_vga_set_state,
1117 serge 215
	.gpu_reset = &r300_gpu_reset,
216
	.gart_tlb_flush = &rs400_gart_tlb_flush,
217
	.gart_set_page = &rs400_gart_set_page,
1221 serge 218
//	.cp_commit = &r100_cp_commit,
219
//	.ring_start = &r300_ring_start,
220
//   .ring_test = &r100_ring_test,
221
//	.ring_ib_execute = &r100_ring_ib_execute,
222
//	.irq_set = &r100_irq_set,
223
//	.irq_process = &r100_irq_process,
224
//	.get_vblank_counter = &r100_get_vblank_counter,
225
//	.fence_ring_emit = &r300_fence_ring_emit,
226
//	.cs_parse = &r300_cs_parse,
227
//	.copy_blit = &r100_copy_blit,
228
//	.copy_dma = &r300_copy_dma,
229
//	.copy = &r100_copy_blit,
230
	.set_engine_clock = &radeon_legacy_set_engine_clock,
231
	.set_memory_clock = NULL,
232
	.set_pcie_lanes = NULL,
233
	.set_clock_gating = &radeon_legacy_set_clock_gating,
1179 serge 234
	.set_surface_reg = r100_set_surface_reg,
235
	.clear_surface_reg = r100_clear_surface_reg,
236
	.bandwidth_update = &r100_bandwidth_update,
1117 serge 237
};
238
 
239
 
240
/*
241
 * rs600.
242
 */
1221 serge 243
extern int rs600_init(struct radeon_device *rdev);
244
extern void rs600_fini(struct radeon_device *rdev);
245
extern int rs600_suspend(struct radeon_device *rdev);
246
extern int rs600_resume(struct radeon_device *rdev);
1117 serge 247
int rs600_irq_set(struct radeon_device *rdev);
1179 serge 248
int rs600_irq_process(struct radeon_device *rdev);
249
u32 rs600_get_vblank_counter(struct radeon_device *rdev, int crtc);
1117 serge 250
void rs600_gart_tlb_flush(struct radeon_device *rdev);
251
int rs600_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr);
252
uint32_t rs600_mc_rreg(struct radeon_device *rdev, uint32_t reg);
253
void rs600_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
1179 serge 254
void rs600_bandwidth_update(struct radeon_device *rdev);
1117 serge 255
static struct radeon_asic rs600_asic = {
1179 serge 256
	.init = &rs600_init,
1221 serge 257
//	.fini = &rs600_fini,
258
//	.suspend = &rs600_suspend,
259
//	.resume = &rs600_resume,
260
//	.vga_set_state = &r100_vga_set_state,
1117 serge 261
	.gpu_reset = &r300_gpu_reset,
262
	.gart_tlb_flush = &rs600_gart_tlb_flush,
263
	.gart_set_page = &rs600_gart_set_page,
1221 serge 264
//	.cp_commit = &r100_cp_commit,
265
//	.ring_start = &r300_ring_start,
266
//   .ring_test = &r100_ring_test,
267
//	.ring_ib_execute = &r100_ring_ib_execute,
268
//	.irq_set = &rs600_irq_set,
269
//	.irq_process = &rs600_irq_process,
270
//	.get_vblank_counter = &rs600_get_vblank_counter,
1117 serge 271
//   .fence_ring_emit = &r300_fence_ring_emit,
272
//   .cs_parse = &r300_cs_parse,
273
//   .copy_blit = &r100_copy_blit,
274
//   .copy_dma = &r300_copy_dma,
275
//   .copy = &r100_copy_blit,
1221 serge 276
	.set_engine_clock = &radeon_atom_set_engine_clock,
277
	.set_memory_clock = &radeon_atom_set_memory_clock,
278
	.set_pcie_lanes = NULL,
279
	.set_clock_gating = &radeon_atom_set_clock_gating,
1179 serge 280
	.bandwidth_update = &rs600_bandwidth_update,
1117 serge 281
};
282
 
283
 
284
/*
285
 * rs690,rs740
286
 */
1221 serge 287
int rs690_init(struct radeon_device *rdev);
288
void rs690_fini(struct radeon_device *rdev);
289
int rs690_resume(struct radeon_device *rdev);
290
int rs690_suspend(struct radeon_device *rdev);
1117 serge 291
uint32_t rs690_mc_rreg(struct radeon_device *rdev, uint32_t reg);
292
void rs690_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
1179 serge 293
void rs690_bandwidth_update(struct radeon_device *rdev);
1117 serge 294
static struct radeon_asic rs690_asic = {
1221 serge 295
	.init = &rs690_init,
296
//	.fini = &rs690_fini,
297
//	.suspend = &rs690_suspend,
298
//	.resume = &rs690_resume,
299
//	.vga_set_state = &r100_vga_set_state,
1117 serge 300
	.gpu_reset = &r300_gpu_reset,
301
	.gart_tlb_flush = &rs400_gart_tlb_flush,
302
	.gart_set_page = &rs400_gart_set_page,
1221 serge 303
//	.cp_commit = &r100_cp_commit,
304
//	.ring_start = &r300_ring_start,
305
//   .ring_test = &r100_ring_test,
306
//	.ring_ib_execute = &r100_ring_ib_execute,
307
//	.irq_set = &rs600_irq_set,
308
//	.irq_process = &rs600_irq_process,
309
//	.get_vblank_counter = &rs600_get_vblank_counter,
310
//	.fence_ring_emit = &r300_fence_ring_emit,
311
//	.cs_parse = &r300_cs_parse,
312
//	.copy_blit = &r100_copy_blit,
313
//	.copy_dma = &r300_copy_dma,
314
//	.copy = &r300_copy_dma,
315
	.set_engine_clock = &radeon_atom_set_engine_clock,
316
	.set_memory_clock = &radeon_atom_set_memory_clock,
317
	.set_pcie_lanes = NULL,
318
	.set_clock_gating = &radeon_atom_set_clock_gating,
1179 serge 319
	.set_surface_reg = r100_set_surface_reg,
320
	.clear_surface_reg = r100_clear_surface_reg,
321
	.bandwidth_update = &rs690_bandwidth_update,
1117 serge 322
};
323
 
1179 serge 324
 
1117 serge 325
/*
326
 * rv515
327
 */
328
int rv515_init(struct radeon_device *rdev);
1221 serge 329
void rv515_fini(struct radeon_device *rdev);
1117 serge 330
int rv515_gpu_reset(struct radeon_device *rdev);
331
uint32_t rv515_mc_rreg(struct radeon_device *rdev, uint32_t reg);
332
void rv515_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
333
void rv515_ring_start(struct radeon_device *rdev);
334
uint32_t rv515_pcie_rreg(struct radeon_device *rdev, uint32_t reg);
335
void rv515_pcie_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
1179 serge 336
void rv515_bandwidth_update(struct radeon_device *rdev);
1221 serge 337
int rv515_resume(struct radeon_device *rdev);
338
int rv515_suspend(struct radeon_device *rdev);
1117 serge 339
static struct radeon_asic rv515_asic = {
340
	.init = &rv515_init,
1221 serge 341
//	.fini = &rv515_fini,
342
//	.suspend = &rv515_suspend,
343
//	.resume = &rv515_resume,
344
//	.vga_set_state = &r100_vga_set_state,
1117 serge 345
	.gpu_reset = &rv515_gpu_reset,
346
	.gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
347
	.gart_set_page = &rv370_pcie_gart_set_page,
1221 serge 348
//	.cp_commit = &r100_cp_commit,
349
//  .ring_start = &rv515_ring_start,
350
//   .ring_test = &r100_ring_test,
351
//	.ring_ib_execute = &r100_ring_ib_execute,
352
//	.irq_set = &rs600_irq_set,
353
//	.irq_process = &rs600_irq_process,
354
//	.get_vblank_counter = &rs600_get_vblank_counter,
355
//	.fence_ring_emit = &r300_fence_ring_emit,
356
//	.cs_parse = &r300_cs_parse,
357
//	.copy_blit = &r100_copy_blit,
358
//	.copy_dma = &r300_copy_dma,
359
//	.copy = &r100_copy_blit,
360
	.set_engine_clock = &radeon_atom_set_engine_clock,
361
	.set_memory_clock = &radeon_atom_set_memory_clock,
362
	.set_pcie_lanes = &rv370_set_pcie_lanes,
363
	.set_clock_gating = &radeon_atom_set_clock_gating,
1179 serge 364
	.set_surface_reg = r100_set_surface_reg,
365
	.clear_surface_reg = r100_clear_surface_reg,
366
	.bandwidth_update = &rv515_bandwidth_update,
1117 serge 367
};
368
 
369
 
370
/*
371
 * r520,rv530,rv560,rv570,r580
372
 */
1221 serge 373
int r520_init(struct radeon_device *rdev);
374
int r520_resume(struct radeon_device *rdev);
1117 serge 375
static struct radeon_asic r520_asic = {
1221 serge 376
	.init = &r520_init,
377
//	.fini = &rv515_fini,
378
//	.suspend = &rv515_suspend,
379
//	.resume = &r520_resume,
380
//	.vga_set_state = &r100_vga_set_state,
1117 serge 381
    .gpu_reset = &rv515_gpu_reset,
1119 serge 382
    .gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
383
    .gart_set_page = &rv370_pcie_gart_set_page,
1221 serge 384
//	.cp_commit = &r100_cp_commit,
385
//  .ring_start = &rv515_ring_start,
386
//  .ring_test = &r100_ring_test,
387
//	.ring_ib_execute = &r100_ring_ib_execute,
388
//	.irq_set = &rs600_irq_set,
389
//	.irq_process = &rs600_irq_process,
390
//	.get_vblank_counter = &rs600_get_vblank_counter,
391
//	.fence_ring_emit = &r300_fence_ring_emit,
392
//	.cs_parse = &r300_cs_parse,
393
//	.copy_blit = &r100_copy_blit,
394
//	.copy_dma = &r300_copy_dma,
395
//	.copy = &r100_copy_blit,
396
	.set_engine_clock = &radeon_atom_set_engine_clock,
397
	.set_memory_clock = &radeon_atom_set_memory_clock,
398
	.set_pcie_lanes = &rv370_set_pcie_lanes,
399
	.set_clock_gating = &radeon_atom_set_clock_gating,
1179 serge 400
	.set_surface_reg = r100_set_surface_reg,
401
	.clear_surface_reg = r100_clear_surface_reg,
1221 serge 402
	.bandwidth_update = &rv515_bandwidth_update,
1117 serge 403
};
404
 
405
/*
1221 serge 406
 * r600,rv610,rv630,rv620,rv635,rv670,rs780,rs880
1117 serge 407
 */
1179 serge 408
int r600_init(struct radeon_device *rdev);
409
void r600_fini(struct radeon_device *rdev);
410
int r600_suspend(struct radeon_device *rdev);
411
int r600_resume(struct radeon_device *rdev);
412
void r600_vga_set_state(struct radeon_device *rdev, bool state);
413
int r600_wb_init(struct radeon_device *rdev);
414
void r600_wb_fini(struct radeon_device *rdev);
415
void r600_cp_commit(struct radeon_device *rdev);
416
void r600_pcie_gart_tlb_flush(struct radeon_device *rdev);
1117 serge 417
uint32_t r600_pciep_rreg(struct radeon_device *rdev, uint32_t reg);
418
void r600_pciep_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
419
 
420
#endif