blob: f2fbd2e4e9df59479660f26811d04a92b8955b95 [file] [log] [blame]
Jerome Glisse771fe6b2009-06-05 14:42:42 +02001/*
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 */
Rafał Miłecki74338742009-11-03 00:53:02 +010034uint32_t radeon_legacy_get_engine_clock(struct radeon_device *rdev);
Jerome Glisse771fe6b2009-06-05 14:42:42 +020035void radeon_legacy_set_engine_clock(struct radeon_device *rdev, uint32_t eng_clock);
Rafał Miłecki5ea597f2009-12-17 13:50:09 +010036uint32_t radeon_legacy_get_memory_clock(struct radeon_device *rdev);
Jerome Glisse771fe6b2009-06-05 14:42:42 +020037void radeon_legacy_set_clock_gating(struct radeon_device *rdev, int enable);
38
Rafał Miłecki74338742009-11-03 00:53:02 +010039uint32_t radeon_atom_get_engine_clock(struct radeon_device *rdev);
Jerome Glisse771fe6b2009-06-05 14:42:42 +020040void radeon_atom_set_engine_clock(struct radeon_device *rdev, uint32_t eng_clock);
Rafał Miłecki74338742009-11-03 00:53:02 +010041uint32_t radeon_atom_get_memory_clock(struct radeon_device *rdev);
Jerome Glisse771fe6b2009-06-05 14:42:42 +020042void radeon_atom_set_memory_clock(struct radeon_device *rdev, uint32_t mem_clock);
43void radeon_atom_set_clock_gating(struct radeon_device *rdev, int enable);
44
45/*
46 * r100,rv100,rs100,rv200,rs200,r200,rv250,rs300,rv280
47 */
Jerome Glissed4550902009-10-01 10:12:06 +020048extern int r100_init(struct radeon_device *rdev);
49extern void r100_fini(struct radeon_device *rdev);
50extern int r100_suspend(struct radeon_device *rdev);
51extern int r100_resume(struct radeon_device *rdev);
Jerome Glisse771fe6b2009-06-05 14:42:42 +020052uint32_t r100_mm_rreg(struct radeon_device *rdev, uint32_t reg);
53void r100_mm_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
Dave Airlie28d52042009-09-21 14:33:58 +100054void r100_vga_set_state(struct radeon_device *rdev, bool state);
Jerome Glisse771fe6b2009-06-05 14:42:42 +020055int r100_gpu_reset(struct radeon_device *rdev);
Michel Dänzer7ed220d2009-08-13 11:10:51 +020056u32 r100_get_vblank_counter(struct radeon_device *rdev, int crtc);
Jerome Glisse771fe6b2009-06-05 14:42:42 +020057void r100_pci_gart_tlb_flush(struct radeon_device *rdev);
58int r100_pci_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr);
Jerome Glisse3ce0a232009-09-08 10:10:24 +100059void r100_cp_commit(struct radeon_device *rdev);
Jerome Glisse771fe6b2009-06-05 14:42:42 +020060void r100_ring_start(struct radeon_device *rdev);
61int r100_irq_set(struct radeon_device *rdev);
62int r100_irq_process(struct radeon_device *rdev);
63void r100_fence_ring_emit(struct radeon_device *rdev,
64 struct radeon_fence *fence);
65int r100_cs_parse(struct radeon_cs_parser *p);
66void r100_pll_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
67uint32_t r100_pll_rreg(struct radeon_device *rdev, uint32_t reg);
68int r100_copy_blit(struct radeon_device *rdev,
69 uint64_t src_offset,
70 uint64_t dst_offset,
71 unsigned num_pages,
72 struct radeon_fence *fence);
Dave Airliee024e112009-06-24 09:48:08 +100073int r100_set_surface_reg(struct radeon_device *rdev, int reg,
74 uint32_t tiling_flags, uint32_t pitch,
75 uint32_t offset, uint32_t obj_size);
76int r100_clear_surface_reg(struct radeon_device *rdev, int reg);
Jerome Glissec93bb852009-07-13 21:04:08 +020077void r100_bandwidth_update(struct radeon_device *rdev);
Jerome Glisse3ce0a232009-09-08 10:10:24 +100078void r100_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
Jerome Glisse3ce0a232009-09-08 10:10:24 +100079int r100_ring_test(struct radeon_device *rdev);
Alex Deucher429770b2009-12-04 15:26:55 -050080void r100_hpd_init(struct radeon_device *rdev);
81void r100_hpd_fini(struct radeon_device *rdev);
82bool r100_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd);
83void r100_hpd_set_polarity(struct radeon_device *rdev,
84 enum radeon_hpd_id hpd);
Jerome Glisse771fe6b2009-06-05 14:42:42 +020085
86static struct radeon_asic r100_asic = {
Jerome Glisse068a1172009-06-17 13:28:30 +020087 .init = &r100_init,
Jerome Glissed4550902009-10-01 10:12:06 +020088 .fini = &r100_fini,
89 .suspend = &r100_suspend,
90 .resume = &r100_resume,
Dave Airlie28d52042009-09-21 14:33:58 +100091 .vga_set_state = &r100_vga_set_state,
Jerome Glisse771fe6b2009-06-05 14:42:42 +020092 .gpu_reset = &r100_gpu_reset,
Jerome Glisse771fe6b2009-06-05 14:42:42 +020093 .gart_tlb_flush = &r100_pci_gart_tlb_flush,
94 .gart_set_page = &r100_pci_gart_set_page,
Jerome Glisse3ce0a232009-09-08 10:10:24 +100095 .cp_commit = &r100_cp_commit,
Jerome Glisse771fe6b2009-06-05 14:42:42 +020096 .ring_start = &r100_ring_start,
Jerome Glisse3ce0a232009-09-08 10:10:24 +100097 .ring_test = &r100_ring_test,
98 .ring_ib_execute = &r100_ring_ib_execute,
Jerome Glisse771fe6b2009-06-05 14:42:42 +020099 .irq_set = &r100_irq_set,
100 .irq_process = &r100_irq_process,
Michel Dänzer7ed220d2009-08-13 11:10:51 +0200101 .get_vblank_counter = &r100_get_vblank_counter,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200102 .fence_ring_emit = &r100_fence_ring_emit,
103 .cs_parse = &r100_cs_parse,
104 .copy_blit = &r100_copy_blit,
105 .copy_dma = NULL,
106 .copy = &r100_copy_blit,
Rafał Miłecki74338742009-11-03 00:53:02 +0100107 .get_engine_clock = &radeon_legacy_get_engine_clock,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200108 .set_engine_clock = &radeon_legacy_set_engine_clock,
Rafał Miłecki5ea597f2009-12-17 13:50:09 +0100109 .get_memory_clock = &radeon_legacy_get_memory_clock,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200110 .set_memory_clock = NULL,
111 .set_pcie_lanes = NULL,
112 .set_clock_gating = &radeon_legacy_set_clock_gating,
Dave Airliee024e112009-06-24 09:48:08 +1000113 .set_surface_reg = r100_set_surface_reg,
114 .clear_surface_reg = r100_clear_surface_reg,
Jerome Glissec93bb852009-07-13 21:04:08 +0200115 .bandwidth_update = &r100_bandwidth_update,
Alex Deucher429770b2009-12-04 15:26:55 -0500116 .hpd_init = &r100_hpd_init,
117 .hpd_fini = &r100_hpd_fini,
118 .hpd_sense = &r100_hpd_sense,
119 .hpd_set_polarity = &r100_hpd_set_polarity,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200120};
121
122
123/*
124 * r300,r350,rv350,rv380
125 */
Jerome Glisse207bf9e2009-09-30 15:35:32 +0200126extern int r300_init(struct radeon_device *rdev);
127extern void r300_fini(struct radeon_device *rdev);
128extern int r300_suspend(struct radeon_device *rdev);
129extern int r300_resume(struct radeon_device *rdev);
130extern int r300_gpu_reset(struct radeon_device *rdev);
131extern void r300_ring_start(struct radeon_device *rdev);
132extern void r300_fence_ring_emit(struct radeon_device *rdev,
133 struct radeon_fence *fence);
134extern int r300_cs_parse(struct radeon_cs_parser *p);
135extern void rv370_pcie_gart_tlb_flush(struct radeon_device *rdev);
136extern int rv370_pcie_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr);
137extern uint32_t rv370_pcie_rreg(struct radeon_device *rdev, uint32_t reg);
138extern void rv370_pcie_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
139extern void rv370_set_pcie_lanes(struct radeon_device *rdev, int lanes);
140extern int r300_copy_dma(struct radeon_device *rdev,
141 uint64_t src_offset,
142 uint64_t dst_offset,
143 unsigned num_pages,
144 struct radeon_fence *fence);
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200145static struct radeon_asic r300_asic = {
Jerome Glisse068a1172009-06-17 13:28:30 +0200146 .init = &r300_init,
Jerome Glisse207bf9e2009-09-30 15:35:32 +0200147 .fini = &r300_fini,
148 .suspend = &r300_suspend,
149 .resume = &r300_resume,
Dave Airlie28d52042009-09-21 14:33:58 +1000150 .vga_set_state = &r100_vga_set_state,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200151 .gpu_reset = &r300_gpu_reset,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200152 .gart_tlb_flush = &r100_pci_gart_tlb_flush,
153 .gart_set_page = &r100_pci_gart_set_page,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000154 .cp_commit = &r100_cp_commit,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200155 .ring_start = &r300_ring_start,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000156 .ring_test = &r100_ring_test,
157 .ring_ib_execute = &r100_ring_ib_execute,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200158 .irq_set = &r100_irq_set,
159 .irq_process = &r100_irq_process,
Michel Dänzer7ed220d2009-08-13 11:10:51 +0200160 .get_vblank_counter = &r100_get_vblank_counter,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200161 .fence_ring_emit = &r300_fence_ring_emit,
162 .cs_parse = &r300_cs_parse,
163 .copy_blit = &r100_copy_blit,
164 .copy_dma = &r300_copy_dma,
165 .copy = &r100_copy_blit,
Rafał Miłecki74338742009-11-03 00:53:02 +0100166 .get_engine_clock = &radeon_legacy_get_engine_clock,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200167 .set_engine_clock = &radeon_legacy_set_engine_clock,
Rafał Miłecki5ea597f2009-12-17 13:50:09 +0100168 .get_memory_clock = &radeon_legacy_get_memory_clock,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200169 .set_memory_clock = NULL,
170 .set_pcie_lanes = &rv370_set_pcie_lanes,
171 .set_clock_gating = &radeon_legacy_set_clock_gating,
Dave Airliee024e112009-06-24 09:48:08 +1000172 .set_surface_reg = r100_set_surface_reg,
173 .clear_surface_reg = r100_clear_surface_reg,
Jerome Glissec93bb852009-07-13 21:04:08 +0200174 .bandwidth_update = &r100_bandwidth_update,
Alex Deucher429770b2009-12-04 15:26:55 -0500175 .hpd_init = &r100_hpd_init,
176 .hpd_fini = &r100_hpd_fini,
177 .hpd_sense = &r100_hpd_sense,
178 .hpd_set_polarity = &r100_hpd_set_polarity,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200179};
180
181/*
182 * r420,r423,rv410
183 */
Jerome Glisse9f022dd2009-09-11 15:35:22 +0200184extern int r420_init(struct radeon_device *rdev);
185extern void r420_fini(struct radeon_device *rdev);
186extern int r420_suspend(struct radeon_device *rdev);
187extern int r420_resume(struct radeon_device *rdev);
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200188static struct radeon_asic r420_asic = {
Jerome Glisse9f022dd2009-09-11 15:35:22 +0200189 .init = &r420_init,
190 .fini = &r420_fini,
191 .suspend = &r420_suspend,
192 .resume = &r420_resume,
Dave Airlie28d52042009-09-21 14:33:58 +1000193 .vga_set_state = &r100_vga_set_state,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200194 .gpu_reset = &r300_gpu_reset,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200195 .gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
196 .gart_set_page = &rv370_pcie_gart_set_page,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000197 .cp_commit = &r100_cp_commit,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200198 .ring_start = &r300_ring_start,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000199 .ring_test = &r100_ring_test,
200 .ring_ib_execute = &r100_ring_ib_execute,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200201 .irq_set = &r100_irq_set,
202 .irq_process = &r100_irq_process,
Michel Dänzer7ed220d2009-08-13 11:10:51 +0200203 .get_vblank_counter = &r100_get_vblank_counter,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200204 .fence_ring_emit = &r300_fence_ring_emit,
205 .cs_parse = &r300_cs_parse,
206 .copy_blit = &r100_copy_blit,
207 .copy_dma = &r300_copy_dma,
208 .copy = &r100_copy_blit,
Rafał Miłecki74338742009-11-03 00:53:02 +0100209 .get_engine_clock = &radeon_atom_get_engine_clock,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200210 .set_engine_clock = &radeon_atom_set_engine_clock,
Rafał Miłecki74338742009-11-03 00:53:02 +0100211 .get_memory_clock = &radeon_atom_get_memory_clock,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200212 .set_memory_clock = &radeon_atom_set_memory_clock,
213 .set_pcie_lanes = &rv370_set_pcie_lanes,
214 .set_clock_gating = &radeon_atom_set_clock_gating,
Dave Airliee024e112009-06-24 09:48:08 +1000215 .set_surface_reg = r100_set_surface_reg,
216 .clear_surface_reg = r100_clear_surface_reg,
Jerome Glissec93bb852009-07-13 21:04:08 +0200217 .bandwidth_update = &r100_bandwidth_update,
Alex Deucher429770b2009-12-04 15:26:55 -0500218 .hpd_init = &r100_hpd_init,
219 .hpd_fini = &r100_hpd_fini,
220 .hpd_sense = &r100_hpd_sense,
221 .hpd_set_polarity = &r100_hpd_set_polarity,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200222};
223
224
225/*
226 * rs400,rs480
227 */
Jerome Glisseca6ffc62009-10-01 10:20:52 +0200228extern int rs400_init(struct radeon_device *rdev);
229extern void rs400_fini(struct radeon_device *rdev);
230extern int rs400_suspend(struct radeon_device *rdev);
231extern int rs400_resume(struct radeon_device *rdev);
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200232void rs400_gart_tlb_flush(struct radeon_device *rdev);
233int rs400_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr);
234uint32_t rs400_mc_rreg(struct radeon_device *rdev, uint32_t reg);
235void rs400_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
236static struct radeon_asic rs400_asic = {
Jerome Glisseca6ffc62009-10-01 10:20:52 +0200237 .init = &rs400_init,
238 .fini = &rs400_fini,
239 .suspend = &rs400_suspend,
240 .resume = &rs400_resume,
Dave Airlie28d52042009-09-21 14:33:58 +1000241 .vga_set_state = &r100_vga_set_state,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200242 .gpu_reset = &r300_gpu_reset,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200243 .gart_tlb_flush = &rs400_gart_tlb_flush,
244 .gart_set_page = &rs400_gart_set_page,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000245 .cp_commit = &r100_cp_commit,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200246 .ring_start = &r300_ring_start,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000247 .ring_test = &r100_ring_test,
248 .ring_ib_execute = &r100_ring_ib_execute,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200249 .irq_set = &r100_irq_set,
250 .irq_process = &r100_irq_process,
Michel Dänzer7ed220d2009-08-13 11:10:51 +0200251 .get_vblank_counter = &r100_get_vblank_counter,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200252 .fence_ring_emit = &r300_fence_ring_emit,
253 .cs_parse = &r300_cs_parse,
254 .copy_blit = &r100_copy_blit,
255 .copy_dma = &r300_copy_dma,
256 .copy = &r100_copy_blit,
Rafał Miłecki74338742009-11-03 00:53:02 +0100257 .get_engine_clock = &radeon_legacy_get_engine_clock,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200258 .set_engine_clock = &radeon_legacy_set_engine_clock,
Rafał Miłecki5ea597f2009-12-17 13:50:09 +0100259 .get_memory_clock = &radeon_legacy_get_memory_clock,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200260 .set_memory_clock = NULL,
261 .set_pcie_lanes = NULL,
262 .set_clock_gating = &radeon_legacy_set_clock_gating,
Dave Airliee024e112009-06-24 09:48:08 +1000263 .set_surface_reg = r100_set_surface_reg,
264 .clear_surface_reg = r100_clear_surface_reg,
Jerome Glissec93bb852009-07-13 21:04:08 +0200265 .bandwidth_update = &r100_bandwidth_update,
Alex Deucher429770b2009-12-04 15:26:55 -0500266 .hpd_init = &r100_hpd_init,
267 .hpd_fini = &r100_hpd_fini,
268 .hpd_sense = &r100_hpd_sense,
269 .hpd_set_polarity = &r100_hpd_set_polarity,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200270};
271
272
273/*
274 * rs600.
275 */
Jerome Glissec010f802009-09-30 22:09:06 +0200276extern int rs600_init(struct radeon_device *rdev);
277extern void rs600_fini(struct radeon_device *rdev);
278extern int rs600_suspend(struct radeon_device *rdev);
279extern int rs600_resume(struct radeon_device *rdev);
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200280int rs600_irq_set(struct radeon_device *rdev);
Michel Dänzer7ed220d2009-08-13 11:10:51 +0200281int rs600_irq_process(struct radeon_device *rdev);
282u32 rs600_get_vblank_counter(struct radeon_device *rdev, int crtc);
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200283void rs600_gart_tlb_flush(struct radeon_device *rdev);
284int rs600_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr);
285uint32_t rs600_mc_rreg(struct radeon_device *rdev, uint32_t reg);
286void rs600_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
Jerome Glissec93bb852009-07-13 21:04:08 +0200287void rs600_bandwidth_update(struct radeon_device *rdev);
Alex Deucher429770b2009-12-04 15:26:55 -0500288void rs600_hpd_init(struct radeon_device *rdev);
289void rs600_hpd_fini(struct radeon_device *rdev);
290bool rs600_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd);
291void rs600_hpd_set_polarity(struct radeon_device *rdev,
292 enum radeon_hpd_id hpd);
293
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200294static struct radeon_asic rs600_asic = {
Dave Airlie3f7dc91a2009-08-27 11:10:15 +1000295 .init = &rs600_init,
Jerome Glissec010f802009-09-30 22:09:06 +0200296 .fini = &rs600_fini,
297 .suspend = &rs600_suspend,
298 .resume = &rs600_resume,
Dave Airlie28d52042009-09-21 14:33:58 +1000299 .vga_set_state = &r100_vga_set_state,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200300 .gpu_reset = &r300_gpu_reset,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200301 .gart_tlb_flush = &rs600_gart_tlb_flush,
302 .gart_set_page = &rs600_gart_set_page,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000303 .cp_commit = &r100_cp_commit,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200304 .ring_start = &r300_ring_start,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000305 .ring_test = &r100_ring_test,
306 .ring_ib_execute = &r100_ring_ib_execute,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200307 .irq_set = &rs600_irq_set,
Michel Dänzer7ed220d2009-08-13 11:10:51 +0200308 .irq_process = &rs600_irq_process,
309 .get_vblank_counter = &rs600_get_vblank_counter,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200310 .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 = &r100_copy_blit,
Rafał Miłecki74338742009-11-03 00:53:02 +0100315 .get_engine_clock = &radeon_atom_get_engine_clock,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200316 .set_engine_clock = &radeon_atom_set_engine_clock,
Rafał Miłecki74338742009-11-03 00:53:02 +0100317 .get_memory_clock = &radeon_atom_get_memory_clock,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200318 .set_memory_clock = &radeon_atom_set_memory_clock,
319 .set_pcie_lanes = NULL,
320 .set_clock_gating = &radeon_atom_set_clock_gating,
Jerome Glissec93bb852009-07-13 21:04:08 +0200321 .bandwidth_update = &rs600_bandwidth_update,
Alex Deucher429770b2009-12-04 15:26:55 -0500322 .hpd_init = &rs600_hpd_init,
323 .hpd_fini = &rs600_hpd_fini,
324 .hpd_sense = &rs600_hpd_sense,
325 .hpd_set_polarity = &rs600_hpd_set_polarity,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200326};
327
328
329/*
330 * rs690,rs740
331 */
Jerome Glisse3bc68532009-10-01 09:39:24 +0200332int rs690_init(struct radeon_device *rdev);
333void rs690_fini(struct radeon_device *rdev);
334int rs690_resume(struct radeon_device *rdev);
335int rs690_suspend(struct radeon_device *rdev);
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200336uint32_t rs690_mc_rreg(struct radeon_device *rdev, uint32_t reg);
337void rs690_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
Jerome Glissec93bb852009-07-13 21:04:08 +0200338void rs690_bandwidth_update(struct radeon_device *rdev);
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200339static struct radeon_asic rs690_asic = {
Jerome Glisse3bc68532009-10-01 09:39:24 +0200340 .init = &rs690_init,
341 .fini = &rs690_fini,
342 .suspend = &rs690_suspend,
343 .resume = &rs690_resume,
Dave Airlie28d52042009-09-21 14:33:58 +1000344 .vga_set_state = &r100_vga_set_state,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200345 .gpu_reset = &r300_gpu_reset,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200346 .gart_tlb_flush = &rs400_gart_tlb_flush,
347 .gart_set_page = &rs400_gart_set_page,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000348 .cp_commit = &r100_cp_commit,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200349 .ring_start = &r300_ring_start,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000350 .ring_test = &r100_ring_test,
351 .ring_ib_execute = &r100_ring_ib_execute,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200352 .irq_set = &rs600_irq_set,
Michel Dänzer7ed220d2009-08-13 11:10:51 +0200353 .irq_process = &rs600_irq_process,
354 .get_vblank_counter = &rs600_get_vblank_counter,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200355 .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 = &r300_copy_dma,
Rafał Miłecki74338742009-11-03 00:53:02 +0100360 .get_engine_clock = &radeon_atom_get_engine_clock,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200361 .set_engine_clock = &radeon_atom_set_engine_clock,
Rafał Miłecki74338742009-11-03 00:53:02 +0100362 .get_memory_clock = &radeon_atom_get_memory_clock,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200363 .set_memory_clock = &radeon_atom_set_memory_clock,
364 .set_pcie_lanes = NULL,
365 .set_clock_gating = &radeon_atom_set_clock_gating,
Dave Airliee024e112009-06-24 09:48:08 +1000366 .set_surface_reg = r100_set_surface_reg,
367 .clear_surface_reg = r100_clear_surface_reg,
Jerome Glissec93bb852009-07-13 21:04:08 +0200368 .bandwidth_update = &rs690_bandwidth_update,
Alex Deucher429770b2009-12-04 15:26:55 -0500369 .hpd_init = &rs600_hpd_init,
370 .hpd_fini = &rs600_hpd_fini,
371 .hpd_sense = &rs600_hpd_sense,
372 .hpd_set_polarity = &rs600_hpd_set_polarity,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200373};
374
375
376/*
377 * rv515
378 */
Jerome Glisse068a1172009-06-17 13:28:30 +0200379int rv515_init(struct radeon_device *rdev);
Jerome Glissed39c3b82009-09-28 18:34:43 +0200380void rv515_fini(struct radeon_device *rdev);
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200381int rv515_gpu_reset(struct radeon_device *rdev);
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200382uint32_t rv515_mc_rreg(struct radeon_device *rdev, uint32_t reg);
383void rv515_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
384void rv515_ring_start(struct radeon_device *rdev);
385uint32_t rv515_pcie_rreg(struct radeon_device *rdev, uint32_t reg);
386void rv515_pcie_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
Jerome Glissec93bb852009-07-13 21:04:08 +0200387void rv515_bandwidth_update(struct radeon_device *rdev);
Jerome Glissed39c3b82009-09-28 18:34:43 +0200388int rv515_resume(struct radeon_device *rdev);
389int rv515_suspend(struct radeon_device *rdev);
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200390static struct radeon_asic rv515_asic = {
Jerome Glisse068a1172009-06-17 13:28:30 +0200391 .init = &rv515_init,
Jerome Glissed39c3b82009-09-28 18:34:43 +0200392 .fini = &rv515_fini,
393 .suspend = &rv515_suspend,
394 .resume = &rv515_resume,
Dave Airlie28d52042009-09-21 14:33:58 +1000395 .vga_set_state = &r100_vga_set_state,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200396 .gpu_reset = &rv515_gpu_reset,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200397 .gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
398 .gart_set_page = &rv370_pcie_gart_set_page,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000399 .cp_commit = &r100_cp_commit,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200400 .ring_start = &rv515_ring_start,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000401 .ring_test = &r100_ring_test,
402 .ring_ib_execute = &r100_ring_ib_execute,
Michel Dänzer7ed220d2009-08-13 11:10:51 +0200403 .irq_set = &rs600_irq_set,
404 .irq_process = &rs600_irq_process,
405 .get_vblank_counter = &rs600_get_vblank_counter,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200406 .fence_ring_emit = &r300_fence_ring_emit,
Jerome Glisse068a1172009-06-17 13:28:30 +0200407 .cs_parse = &r300_cs_parse,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200408 .copy_blit = &r100_copy_blit,
409 .copy_dma = &r300_copy_dma,
410 .copy = &r100_copy_blit,
Rafał Miłecki74338742009-11-03 00:53:02 +0100411 .get_engine_clock = &radeon_atom_get_engine_clock,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200412 .set_engine_clock = &radeon_atom_set_engine_clock,
Rafał Miłecki74338742009-11-03 00:53:02 +0100413 .get_memory_clock = &radeon_atom_get_memory_clock,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200414 .set_memory_clock = &radeon_atom_set_memory_clock,
415 .set_pcie_lanes = &rv370_set_pcie_lanes,
416 .set_clock_gating = &radeon_atom_set_clock_gating,
Dave Airliee024e112009-06-24 09:48:08 +1000417 .set_surface_reg = r100_set_surface_reg,
418 .clear_surface_reg = r100_clear_surface_reg,
Jerome Glissec93bb852009-07-13 21:04:08 +0200419 .bandwidth_update = &rv515_bandwidth_update,
Alex Deucher429770b2009-12-04 15:26:55 -0500420 .hpd_init = &rs600_hpd_init,
421 .hpd_fini = &rs600_hpd_fini,
422 .hpd_sense = &rs600_hpd_sense,
423 .hpd_set_polarity = &rs600_hpd_set_polarity,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200424};
425
426
427/*
428 * r520,rv530,rv560,rv570,r580
429 */
Jerome Glissed39c3b82009-09-28 18:34:43 +0200430int r520_init(struct radeon_device *rdev);
Jerome Glissef0ed1f62009-09-28 20:39:19 +0200431int r520_resume(struct radeon_device *rdev);
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200432static struct radeon_asic r520_asic = {
Jerome Glissed39c3b82009-09-28 18:34:43 +0200433 .init = &r520_init,
Jerome Glissef0ed1f62009-09-28 20:39:19 +0200434 .fini = &rv515_fini,
435 .suspend = &rv515_suspend,
436 .resume = &r520_resume,
Dave Airlie28d52042009-09-21 14:33:58 +1000437 .vga_set_state = &r100_vga_set_state,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200438 .gpu_reset = &rv515_gpu_reset,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200439 .gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
440 .gart_set_page = &rv370_pcie_gart_set_page,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000441 .cp_commit = &r100_cp_commit,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200442 .ring_start = &rv515_ring_start,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000443 .ring_test = &r100_ring_test,
444 .ring_ib_execute = &r100_ring_ib_execute,
Michel Dänzer7ed220d2009-08-13 11:10:51 +0200445 .irq_set = &rs600_irq_set,
446 .irq_process = &rs600_irq_process,
447 .get_vblank_counter = &rs600_get_vblank_counter,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200448 .fence_ring_emit = &r300_fence_ring_emit,
Jerome Glisse068a1172009-06-17 13:28:30 +0200449 .cs_parse = &r300_cs_parse,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200450 .copy_blit = &r100_copy_blit,
451 .copy_dma = &r300_copy_dma,
452 .copy = &r100_copy_blit,
Rafał Miłecki74338742009-11-03 00:53:02 +0100453 .get_engine_clock = &radeon_atom_get_engine_clock,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200454 .set_engine_clock = &radeon_atom_set_engine_clock,
Rafał Miłecki74338742009-11-03 00:53:02 +0100455 .get_memory_clock = &radeon_atom_get_memory_clock,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200456 .set_memory_clock = &radeon_atom_set_memory_clock,
457 .set_pcie_lanes = &rv370_set_pcie_lanes,
458 .set_clock_gating = &radeon_atom_set_clock_gating,
Dave Airliee024e112009-06-24 09:48:08 +1000459 .set_surface_reg = r100_set_surface_reg,
460 .clear_surface_reg = r100_clear_surface_reg,
Jerome Glissef0ed1f62009-09-28 20:39:19 +0200461 .bandwidth_update = &rv515_bandwidth_update,
Alex Deucher429770b2009-12-04 15:26:55 -0500462 .hpd_init = &rs600_hpd_init,
463 .hpd_fini = &rs600_hpd_fini,
464 .hpd_sense = &rs600_hpd_sense,
465 .hpd_set_polarity = &rs600_hpd_set_polarity,
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200466};
467
468/*
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000469 * r600,rv610,rv630,rv620,rv635,rv670,rs780,rs880
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200470 */
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000471int r600_init(struct radeon_device *rdev);
472void r600_fini(struct radeon_device *rdev);
473int r600_suspend(struct radeon_device *rdev);
474int r600_resume(struct radeon_device *rdev);
Dave Airlie28d52042009-09-21 14:33:58 +1000475void r600_vga_set_state(struct radeon_device *rdev, bool state);
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000476int r600_wb_init(struct radeon_device *rdev);
477void r600_wb_fini(struct radeon_device *rdev);
478void r600_cp_commit(struct radeon_device *rdev);
479void r600_pcie_gart_tlb_flush(struct radeon_device *rdev);
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200480uint32_t r600_pciep_rreg(struct radeon_device *rdev, uint32_t reg);
481void r600_pciep_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000482int r600_cs_parse(struct radeon_cs_parser *p);
483void r600_fence_ring_emit(struct radeon_device *rdev,
484 struct radeon_fence *fence);
485int r600_copy_dma(struct radeon_device *rdev,
486 uint64_t src_offset,
487 uint64_t dst_offset,
488 unsigned num_pages,
489 struct radeon_fence *fence);
490int r600_irq_process(struct radeon_device *rdev);
491int r600_irq_set(struct radeon_device *rdev);
492int r600_gpu_reset(struct radeon_device *rdev);
493int r600_set_surface_reg(struct radeon_device *rdev, int reg,
494 uint32_t tiling_flags, uint32_t pitch,
495 uint32_t offset, uint32_t obj_size);
496int r600_clear_surface_reg(struct radeon_device *rdev, int reg);
497void r600_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000498int r600_ring_test(struct radeon_device *rdev);
499int r600_copy_blit(struct radeon_device *rdev,
500 uint64_t src_offset, uint64_t dst_offset,
501 unsigned num_pages, struct radeon_fence *fence);
Alex Deucher429770b2009-12-04 15:26:55 -0500502void r600_hpd_init(struct radeon_device *rdev);
503void r600_hpd_fini(struct radeon_device *rdev);
504bool r600_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd);
505void r600_hpd_set_polarity(struct radeon_device *rdev,
506 enum radeon_hpd_id hpd);
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000507
508static struct radeon_asic r600_asic = {
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000509 .init = &r600_init,
510 .fini = &r600_fini,
511 .suspend = &r600_suspend,
512 .resume = &r600_resume,
513 .cp_commit = &r600_cp_commit,
Dave Airlie28d52042009-09-21 14:33:58 +1000514 .vga_set_state = &r600_vga_set_state,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000515 .gpu_reset = &r600_gpu_reset,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000516 .gart_tlb_flush = &r600_pcie_gart_tlb_flush,
517 .gart_set_page = &rs600_gart_set_page,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000518 .ring_test = &r600_ring_test,
519 .ring_ib_execute = &r600_ring_ib_execute,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000520 .irq_set = &r600_irq_set,
521 .irq_process = &r600_irq_process,
Alex Deucherd8f60cf2009-12-01 13:43:46 -0500522 .get_vblank_counter = &rs600_get_vblank_counter,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000523 .fence_ring_emit = &r600_fence_ring_emit,
524 .cs_parse = &r600_cs_parse,
525 .copy_blit = &r600_copy_blit,
526 .copy_dma = &r600_copy_blit,
Alex Deuchera3812872009-09-10 15:54:35 -0400527 .copy = &r600_copy_blit,
Rafał Miłecki74338742009-11-03 00:53:02 +0100528 .get_engine_clock = &radeon_atom_get_engine_clock,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000529 .set_engine_clock = &radeon_atom_set_engine_clock,
Rafał Miłecki74338742009-11-03 00:53:02 +0100530 .get_memory_clock = &radeon_atom_get_memory_clock,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000531 .set_memory_clock = &radeon_atom_set_memory_clock,
532 .set_pcie_lanes = NULL,
533 .set_clock_gating = &radeon_atom_set_clock_gating,
534 .set_surface_reg = r600_set_surface_reg,
535 .clear_surface_reg = r600_clear_surface_reg,
Jerome Glissef0ed1f62009-09-28 20:39:19 +0200536 .bandwidth_update = &rv515_bandwidth_update,
Alex Deucher429770b2009-12-04 15:26:55 -0500537 .hpd_init = &r600_hpd_init,
538 .hpd_fini = &r600_hpd_fini,
539 .hpd_sense = &r600_hpd_sense,
540 .hpd_set_polarity = &r600_hpd_set_polarity,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000541};
542
543/*
544 * rv770,rv730,rv710,rv740
545 */
546int rv770_init(struct radeon_device *rdev);
547void rv770_fini(struct radeon_device *rdev);
548int rv770_suspend(struct radeon_device *rdev);
549int rv770_resume(struct radeon_device *rdev);
550int rv770_gpu_reset(struct radeon_device *rdev);
551
552static struct radeon_asic rv770_asic = {
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000553 .init = &rv770_init,
554 .fini = &rv770_fini,
555 .suspend = &rv770_suspend,
556 .resume = &rv770_resume,
557 .cp_commit = &r600_cp_commit,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000558 .gpu_reset = &rv770_gpu_reset,
Dave Airlie28d52042009-09-21 14:33:58 +1000559 .vga_set_state = &r600_vga_set_state,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000560 .gart_tlb_flush = &r600_pcie_gart_tlb_flush,
561 .gart_set_page = &rs600_gart_set_page,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000562 .ring_test = &r600_ring_test,
563 .ring_ib_execute = &r600_ring_ib_execute,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000564 .irq_set = &r600_irq_set,
565 .irq_process = &r600_irq_process,
Alex Deucherd8f60cf2009-12-01 13:43:46 -0500566 .get_vblank_counter = &rs600_get_vblank_counter,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000567 .fence_ring_emit = &r600_fence_ring_emit,
568 .cs_parse = &r600_cs_parse,
569 .copy_blit = &r600_copy_blit,
570 .copy_dma = &r600_copy_blit,
Alex Deuchera3812872009-09-10 15:54:35 -0400571 .copy = &r600_copy_blit,
Rafał Miłecki74338742009-11-03 00:53:02 +0100572 .get_engine_clock = &radeon_atom_get_engine_clock,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000573 .set_engine_clock = &radeon_atom_set_engine_clock,
Rafał Miłecki74338742009-11-03 00:53:02 +0100574 .get_memory_clock = &radeon_atom_get_memory_clock,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000575 .set_memory_clock = &radeon_atom_set_memory_clock,
576 .set_pcie_lanes = NULL,
577 .set_clock_gating = &radeon_atom_set_clock_gating,
578 .set_surface_reg = r600_set_surface_reg,
579 .clear_surface_reg = r600_clear_surface_reg,
Jerome Glissef0ed1f62009-09-28 20:39:19 +0200580 .bandwidth_update = &rv515_bandwidth_update,
Alex Deucher429770b2009-12-04 15:26:55 -0500581 .hpd_init = &r600_hpd_init,
582 .hpd_fini = &r600_hpd_fini,
583 .hpd_sense = &r600_hpd_sense,
584 .hpd_set_polarity = &r600_hpd_set_polarity,
Jerome Glisse3ce0a232009-09-08 10:10:24 +1000585};
Jerome Glisse771fe6b2009-06-05 14:42:42 +0200586
587#endif