1254885Sdumbbell/*
2254885Sdumbbell * Copyright 2008 Advanced Micro Devices, Inc.
3254885Sdumbbell * Copyright 2008 Red Hat Inc.
4254885Sdumbbell * Copyright 2009 Jerome Glisse.
5254885Sdumbbell *
6254885Sdumbbell * Permission is hereby granted, free of charge, to any person obtaining a
7254885Sdumbbell * copy of this software and associated documentation files (the "Software"),
8254885Sdumbbell * to deal in the Software without restriction, including without limitation
9254885Sdumbbell * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10254885Sdumbbell * and/or sell copies of the Software, and to permit persons to whom the
11254885Sdumbbell * Software is furnished to do so, subject to the following conditions:
12254885Sdumbbell *
13254885Sdumbbell * The above copyright notice and this permission notice shall be included in
14254885Sdumbbell * all copies or substantial portions of the Software.
15254885Sdumbbell *
16254885Sdumbbell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17254885Sdumbbell * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18254885Sdumbbell * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19254885Sdumbbell * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
20254885Sdumbbell * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21254885Sdumbbell * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22254885Sdumbbell * OTHER DEALINGS IN THE SOFTWARE.
23254885Sdumbbell *
24254885Sdumbbell * Authors: Dave Airlie
25254885Sdumbbell *          Alex Deucher
26254885Sdumbbell *          Jerome Glisse
27254885Sdumbbell */
28254885Sdumbbell
29254885Sdumbbell#include <sys/cdefs.h>
30254885Sdumbbell__FBSDID("$FreeBSD$");
31254885Sdumbbell
32254885Sdumbbell#ifndef __RADEON_ASIC_H__
33254885Sdumbbell#define __RADEON_ASIC_H__
34254885Sdumbbell
35254885Sdumbbell/*
36254885Sdumbbell * common functions
37254885Sdumbbell */
38254885Sdumbbelluint32_t radeon_legacy_get_engine_clock(struct radeon_device *rdev);
39254885Sdumbbellvoid radeon_legacy_set_engine_clock(struct radeon_device *rdev, uint32_t eng_clock);
40254885Sdumbbelluint32_t radeon_legacy_get_memory_clock(struct radeon_device *rdev);
41254885Sdumbbellvoid radeon_legacy_set_clock_gating(struct radeon_device *rdev, int enable);
42254885Sdumbbell
43254885Sdumbbelluint32_t radeon_atom_get_engine_clock(struct radeon_device *rdev);
44254885Sdumbbellvoid radeon_atom_set_engine_clock(struct radeon_device *rdev, uint32_t eng_clock);
45254885Sdumbbelluint32_t radeon_atom_get_memory_clock(struct radeon_device *rdev);
46254885Sdumbbellvoid radeon_atom_set_memory_clock(struct radeon_device *rdev, uint32_t mem_clock);
47254885Sdumbbellvoid radeon_atom_set_clock_gating(struct radeon_device *rdev, int enable);
48254885Sdumbbell
49254885Sdumbbellvoid atombios_set_backlight_level(struct radeon_encoder *radeon_encoder, u8 level);
50254885Sdumbbellu8 atombios_get_backlight_level(struct radeon_encoder *radeon_encoder);
51254885Sdumbbellvoid radeon_legacy_set_backlight_level(struct radeon_encoder *radeon_encoder, u8 level);
52254885Sdumbbellu8 radeon_legacy_get_backlight_level(struct radeon_encoder *radeon_encoder);
53254885Sdumbbell
54254885Sdumbbell
55254885Sdumbbell/*
56254885Sdumbbell * r100,rv100,rs100,rv200,rs200
57254885Sdumbbell */
58254885Sdumbbellstruct r100_mc_save {
59254885Sdumbbell	u32	GENMO_WT;
60254885Sdumbbell	u32	CRTC_EXT_CNTL;
61254885Sdumbbell	u32	CRTC_GEN_CNTL;
62254885Sdumbbell	u32	CRTC2_GEN_CNTL;
63254885Sdumbbell	u32	CUR_OFFSET;
64254885Sdumbbell	u32	CUR2_OFFSET;
65254885Sdumbbell};
66254885Sdumbbellint r100_init(struct radeon_device *rdev);
67254885Sdumbbellvoid r100_fini(struct radeon_device *rdev);
68254885Sdumbbellint r100_suspend(struct radeon_device *rdev);
69254885Sdumbbellint r100_resume(struct radeon_device *rdev);
70254885Sdumbbellvoid r100_vga_set_state(struct radeon_device *rdev, bool state);
71254885Sdumbbellbool r100_gpu_is_lockup(struct radeon_device *rdev, struct radeon_ring *cp);
72254885Sdumbbellint r100_asic_reset(struct radeon_device *rdev);
73254885Sdumbbellu32 r100_get_vblank_counter(struct radeon_device *rdev, int crtc);
74254885Sdumbbellvoid r100_pci_gart_tlb_flush(struct radeon_device *rdev);
75254885Sdumbbellint r100_pci_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr);
76254885Sdumbbellvoid r100_ring_start(struct radeon_device *rdev, struct radeon_ring *ring);
77254885Sdumbbellint r100_irq_set(struct radeon_device *rdev);
78254885Sdumbbellirqreturn_t r100_irq_process(struct radeon_device *rdev);
79254885Sdumbbellvoid r100_fence_ring_emit(struct radeon_device *rdev,
80254885Sdumbbell			  struct radeon_fence *fence);
81254885Sdumbbellvoid r100_semaphore_ring_emit(struct radeon_device *rdev,
82254885Sdumbbell			      struct radeon_ring *cp,
83254885Sdumbbell			      struct radeon_semaphore *semaphore,
84254885Sdumbbell			      bool emit_wait);
85254885Sdumbbellint r100_cs_parse(struct radeon_cs_parser *p);
86254885Sdumbbellvoid r100_pll_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
87254885Sdumbbelluint32_t r100_pll_rreg(struct radeon_device *rdev, uint32_t reg);
88254885Sdumbbellint r100_copy_blit(struct radeon_device *rdev,
89254885Sdumbbell		   uint64_t src_offset,
90254885Sdumbbell		   uint64_t dst_offset,
91254885Sdumbbell		   unsigned num_gpu_pages,
92254885Sdumbbell		   struct radeon_fence **fence);
93254885Sdumbbellint r100_set_surface_reg(struct radeon_device *rdev, int reg,
94254885Sdumbbell			 uint32_t tiling_flags, uint32_t pitch,
95254885Sdumbbell			 uint32_t offset, uint32_t obj_size);
96254885Sdumbbellvoid r100_clear_surface_reg(struct radeon_device *rdev, int reg);
97254885Sdumbbellvoid r100_bandwidth_update(struct radeon_device *rdev);
98254885Sdumbbellvoid r100_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
99254885Sdumbbellint r100_ring_test(struct radeon_device *rdev, struct radeon_ring *cp);
100254885Sdumbbellvoid r100_hpd_init(struct radeon_device *rdev);
101254885Sdumbbellvoid r100_hpd_fini(struct radeon_device *rdev);
102254885Sdumbbellbool r100_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd);
103254885Sdumbbellvoid r100_hpd_set_polarity(struct radeon_device *rdev,
104254885Sdumbbell			   enum radeon_hpd_id hpd);
105254885Sdumbbellint r100_debugfs_rbbm_init(struct radeon_device *rdev);
106254885Sdumbbellint r100_debugfs_cp_init(struct radeon_device *rdev);
107254885Sdumbbellvoid r100_cp_disable(struct radeon_device *rdev);
108254885Sdumbbellint r100_cp_init(struct radeon_device *rdev, unsigned ring_size);
109254885Sdumbbellvoid r100_cp_fini(struct radeon_device *rdev);
110254885Sdumbbellint r100_pci_gart_init(struct radeon_device *rdev);
111254885Sdumbbellvoid r100_pci_gart_fini(struct radeon_device *rdev);
112254885Sdumbbellint r100_pci_gart_enable(struct radeon_device *rdev);
113254885Sdumbbellvoid r100_pci_gart_disable(struct radeon_device *rdev);
114254885Sdumbbellint r100_debugfs_mc_info_init(struct radeon_device *rdev);
115254885Sdumbbellint r100_gui_wait_for_idle(struct radeon_device *rdev);
116254885Sdumbbellint r100_ib_test(struct radeon_device *rdev, struct radeon_ring *ring);
117254885Sdumbbellvoid r100_irq_disable(struct radeon_device *rdev);
118254885Sdumbbellvoid r100_mc_stop(struct radeon_device *rdev, struct r100_mc_save *save);
119254885Sdumbbellvoid r100_mc_resume(struct radeon_device *rdev, struct r100_mc_save *save);
120254885Sdumbbellvoid r100_vram_init_sizes(struct radeon_device *rdev);
121254885Sdumbbellint r100_cp_reset(struct radeon_device *rdev);
122254885Sdumbbellvoid r100_vga_render_disable(struct radeon_device *rdev);
123254885Sdumbbellvoid r100_restore_sanity(struct radeon_device *rdev);
124254885Sdumbbellint r100_cs_track_check_pkt3_indx_buffer(struct radeon_cs_parser *p,
125254885Sdumbbell					 struct radeon_cs_packet *pkt,
126254885Sdumbbell					 struct radeon_bo *robj);
127254885Sdumbbellint r100_cs_parse_packet0(struct radeon_cs_parser *p,
128254885Sdumbbell			  struct radeon_cs_packet *pkt,
129254885Sdumbbell			  const unsigned *auth, unsigned n,
130254885Sdumbbell			  radeon_packet0_check_t check);
131254885Sdumbbellint r100_cs_packet_parse(struct radeon_cs_parser *p,
132254885Sdumbbell			 struct radeon_cs_packet *pkt,
133254885Sdumbbell			 unsigned idx);
134254885Sdumbbellvoid r100_enable_bm(struct radeon_device *rdev);
135254885Sdumbbellvoid r100_set_common_regs(struct radeon_device *rdev);
136254885Sdumbbellvoid r100_bm_disable(struct radeon_device *rdev);
137254885Sdumbbellextern bool r100_gui_idle(struct radeon_device *rdev);
138254885Sdumbbellextern void r100_pm_misc(struct radeon_device *rdev);
139254885Sdumbbellextern void r100_pm_prepare(struct radeon_device *rdev);
140254885Sdumbbellextern void r100_pm_finish(struct radeon_device *rdev);
141254885Sdumbbellextern void r100_pm_init_profile(struct radeon_device *rdev);
142254885Sdumbbellextern void r100_pm_get_dynpm_state(struct radeon_device *rdev);
143254885Sdumbbellextern void r100_pre_page_flip(struct radeon_device *rdev, int crtc);
144254885Sdumbbellextern u32 r100_page_flip(struct radeon_device *rdev, int crtc, u64 crtc_base);
145254885Sdumbbellextern void r100_post_page_flip(struct radeon_device *rdev, int crtc);
146254885Sdumbbellextern void r100_wait_for_vblank(struct radeon_device *rdev, int crtc);
147254885Sdumbbellextern int r100_mc_wait_for_idle(struct radeon_device *rdev);
148254885Sdumbbell
149254885Sdumbbell/*
150254885Sdumbbell * r200,rv250,rs300,rv280
151254885Sdumbbell */
152254885Sdumbbellextern int r200_copy_dma(struct radeon_device *rdev,
153254885Sdumbbell			 uint64_t src_offset,
154254885Sdumbbell			 uint64_t dst_offset,
155254885Sdumbbell			 unsigned num_gpu_pages,
156254885Sdumbbell			 struct radeon_fence **fence);
157254885Sdumbbellvoid r200_set_safe_registers(struct radeon_device *rdev);
158254885Sdumbbell
159254885Sdumbbell/*
160254885Sdumbbell * r300,r350,rv350,rv380
161254885Sdumbbell */
162254885Sdumbbellextern int r300_init(struct radeon_device *rdev);
163254885Sdumbbellextern void r300_fini(struct radeon_device *rdev);
164254885Sdumbbellextern int r300_suspend(struct radeon_device *rdev);
165254885Sdumbbellextern int r300_resume(struct radeon_device *rdev);
166254885Sdumbbellextern int r300_asic_reset(struct radeon_device *rdev);
167254885Sdumbbellextern void r300_ring_start(struct radeon_device *rdev, struct radeon_ring *ring);
168254885Sdumbbellextern void r300_fence_ring_emit(struct radeon_device *rdev,
169254885Sdumbbell				struct radeon_fence *fence);
170254885Sdumbbellextern int r300_cs_parse(struct radeon_cs_parser *p);
171254885Sdumbbellextern void rv370_pcie_gart_tlb_flush(struct radeon_device *rdev);
172254885Sdumbbellextern int rv370_pcie_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr);
173254885Sdumbbellextern void rv370_set_pcie_lanes(struct radeon_device *rdev, int lanes);
174254885Sdumbbellextern int rv370_get_pcie_lanes(struct radeon_device *rdev);
175254885Sdumbbellextern void r300_set_reg_safe(struct radeon_device *rdev);
176254885Sdumbbellextern void r300_mc_program(struct radeon_device *rdev);
177254885Sdumbbellextern void r300_mc_init(struct radeon_device *rdev);
178254885Sdumbbellextern void r300_clock_startup(struct radeon_device *rdev);
179254885Sdumbbellextern int r300_mc_wait_for_idle(struct radeon_device *rdev);
180254885Sdumbbellextern int rv370_pcie_gart_init(struct radeon_device *rdev);
181254885Sdumbbellextern void rv370_pcie_gart_fini(struct radeon_device *rdev);
182254885Sdumbbellextern int rv370_pcie_gart_enable(struct radeon_device *rdev);
183254885Sdumbbellextern void rv370_pcie_gart_disable(struct radeon_device *rdev);
184254885Sdumbbell
185254885Sdumbbell/*
186254885Sdumbbell * r420,r423,rv410
187254885Sdumbbell */
188254885Sdumbbellextern int r420_init(struct radeon_device *rdev);
189254885Sdumbbellextern void r420_fini(struct radeon_device *rdev);
190254885Sdumbbellextern int r420_suspend(struct radeon_device *rdev);
191254885Sdumbbellextern int r420_resume(struct radeon_device *rdev);
192254885Sdumbbellextern void r420_pm_init_profile(struct radeon_device *rdev);
193254885Sdumbbellextern u32 r420_mc_rreg(struct radeon_device *rdev, u32 reg);
194254885Sdumbbellextern void r420_mc_wreg(struct radeon_device *rdev, u32 reg, u32 v);
195254885Sdumbbellextern int r420_debugfs_pipes_info_init(struct radeon_device *rdev);
196254885Sdumbbellextern void r420_pipes_init(struct radeon_device *rdev);
197254885Sdumbbell
198254885Sdumbbell/*
199254885Sdumbbell * rs400,rs480
200254885Sdumbbell */
201254885Sdumbbellextern int rs400_init(struct radeon_device *rdev);
202254885Sdumbbellextern void rs400_fini(struct radeon_device *rdev);
203254885Sdumbbellextern int rs400_suspend(struct radeon_device *rdev);
204254885Sdumbbellextern int rs400_resume(struct radeon_device *rdev);
205254885Sdumbbellvoid rs400_gart_tlb_flush(struct radeon_device *rdev);
206254885Sdumbbellint rs400_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr);
207254885Sdumbbelluint32_t rs400_mc_rreg(struct radeon_device *rdev, uint32_t reg);
208254885Sdumbbellvoid rs400_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
209254885Sdumbbellint rs400_gart_init(struct radeon_device *rdev);
210254885Sdumbbellint rs400_gart_enable(struct radeon_device *rdev);
211254885Sdumbbellvoid rs400_gart_adjust_size(struct radeon_device *rdev);
212254885Sdumbbellvoid rs400_gart_disable(struct radeon_device *rdev);
213254885Sdumbbellvoid rs400_gart_fini(struct radeon_device *rdev);
214254885Sdumbbellextern int rs400_mc_wait_for_idle(struct radeon_device *rdev);
215254885Sdumbbell
216254885Sdumbbell/*
217254885Sdumbbell * rs600.
218254885Sdumbbell */
219254885Sdumbbellextern int rs600_asic_reset(struct radeon_device *rdev);
220254885Sdumbbellextern int rs600_init(struct radeon_device *rdev);
221254885Sdumbbellextern void rs600_fini(struct radeon_device *rdev);
222254885Sdumbbellextern int rs600_suspend(struct radeon_device *rdev);
223254885Sdumbbellextern int rs600_resume(struct radeon_device *rdev);
224254885Sdumbbellint rs600_irq_set(struct radeon_device *rdev);
225254885Sdumbbellirqreturn_t rs600_irq_process(struct radeon_device *rdev);
226254885Sdumbbellvoid rs600_irq_disable(struct radeon_device *rdev);
227254885Sdumbbellu32 rs600_get_vblank_counter(struct radeon_device *rdev, int crtc);
228254885Sdumbbellvoid rs600_gart_tlb_flush(struct radeon_device *rdev);
229254885Sdumbbellint rs600_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr);
230254885Sdumbbelluint32_t rs600_mc_rreg(struct radeon_device *rdev, uint32_t reg);
231254885Sdumbbellvoid rs600_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
232254885Sdumbbellvoid rs600_bandwidth_update(struct radeon_device *rdev);
233254885Sdumbbellvoid rs600_hpd_init(struct radeon_device *rdev);
234254885Sdumbbellvoid rs600_hpd_fini(struct radeon_device *rdev);
235254885Sdumbbellbool rs600_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd);
236254885Sdumbbellvoid rs600_hpd_set_polarity(struct radeon_device *rdev,
237254885Sdumbbell			    enum radeon_hpd_id hpd);
238254885Sdumbbellextern void rs600_pm_misc(struct radeon_device *rdev);
239254885Sdumbbellextern void rs600_pm_prepare(struct radeon_device *rdev);
240254885Sdumbbellextern void rs600_pm_finish(struct radeon_device *rdev);
241254885Sdumbbellextern void rs600_pre_page_flip(struct radeon_device *rdev, int crtc);
242254885Sdumbbellextern u32 rs600_page_flip(struct radeon_device *rdev, int crtc, u64 crtc_base);
243254885Sdumbbellextern void rs600_post_page_flip(struct radeon_device *rdev, int crtc);
244254885Sdumbbellvoid rs600_set_safe_registers(struct radeon_device *rdev);
245254885Sdumbbellextern void avivo_wait_for_vblank(struct radeon_device *rdev, int crtc);
246254885Sdumbbellextern int rs600_mc_wait_for_idle(struct radeon_device *rdev);
247254885Sdumbbell
248254885Sdumbbell/*
249254885Sdumbbell * rs690,rs740
250254885Sdumbbell */
251254885Sdumbbellint rs690_init(struct radeon_device *rdev);
252254885Sdumbbellvoid rs690_fini(struct radeon_device *rdev);
253254885Sdumbbellint rs690_resume(struct radeon_device *rdev);
254254885Sdumbbellint rs690_suspend(struct radeon_device *rdev);
255254885Sdumbbelluint32_t rs690_mc_rreg(struct radeon_device *rdev, uint32_t reg);
256254885Sdumbbellvoid rs690_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
257254885Sdumbbellvoid rs690_bandwidth_update(struct radeon_device *rdev);
258254885Sdumbbellvoid rs690_line_buffer_adjust(struct radeon_device *rdev,
259254885Sdumbbell					struct drm_display_mode *mode1,
260254885Sdumbbell					struct drm_display_mode *mode2);
261254885Sdumbbellextern int rs690_mc_wait_for_idle(struct radeon_device *rdev);
262254885Sdumbbell
263254885Sdumbbell/*
264254885Sdumbbell * rv515
265254885Sdumbbell */
266254885Sdumbbellstruct rv515_mc_save {
267254885Sdumbbell	u32 vga_render_control;
268254885Sdumbbell	u32 vga_hdp_control;
269254885Sdumbbell	bool crtc_enabled[2];
270254885Sdumbbell};
271254885Sdumbbell
272254885Sdumbbellint rv515_init(struct radeon_device *rdev);
273254885Sdumbbellvoid rv515_fini(struct radeon_device *rdev);
274254885Sdumbbelluint32_t rv515_mc_rreg(struct radeon_device *rdev, uint32_t reg);
275254885Sdumbbellvoid rv515_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
276254885Sdumbbellvoid rv515_ring_start(struct radeon_device *rdev, struct radeon_ring *ring);
277254885Sdumbbellvoid rv515_bandwidth_update(struct radeon_device *rdev);
278254885Sdumbbellint rv515_resume(struct radeon_device *rdev);
279254885Sdumbbellint rv515_suspend(struct radeon_device *rdev);
280254885Sdumbbellvoid rv515_bandwidth_avivo_update(struct radeon_device *rdev);
281254885Sdumbbellvoid rv515_vga_render_disable(struct radeon_device *rdev);
282254885Sdumbbellvoid rv515_set_safe_registers(struct radeon_device *rdev);
283254885Sdumbbellvoid rv515_mc_stop(struct radeon_device *rdev, struct rv515_mc_save *save);
284254885Sdumbbellvoid rv515_mc_resume(struct radeon_device *rdev, struct rv515_mc_save *save);
285254885Sdumbbellvoid rv515_clock_startup(struct radeon_device *rdev);
286254885Sdumbbellvoid rv515_debugfs(struct radeon_device *rdev);
287254885Sdumbbellint rv515_mc_wait_for_idle(struct radeon_device *rdev);
288254885Sdumbbell
289254885Sdumbbell/*
290254885Sdumbbell * r520,rv530,rv560,rv570,r580
291254885Sdumbbell */
292254885Sdumbbellint r520_init(struct radeon_device *rdev);
293254885Sdumbbellint r520_resume(struct radeon_device *rdev);
294254885Sdumbbellint r520_mc_wait_for_idle(struct radeon_device *rdev);
295254885Sdumbbell
296254885Sdumbbell/*
297254885Sdumbbell * r600,rv610,rv630,rv620,rv635,rv670,rs780,rs880
298254885Sdumbbell */
299254885Sdumbbellint r600_init(struct radeon_device *rdev);
300254885Sdumbbellvoid r600_fini(struct radeon_device *rdev);
301254885Sdumbbellint r600_suspend(struct radeon_device *rdev);
302254885Sdumbbellint r600_resume(struct radeon_device *rdev);
303254885Sdumbbellvoid r600_vga_set_state(struct radeon_device *rdev, bool state);
304254885Sdumbbellint r600_wb_init(struct radeon_device *rdev);
305254885Sdumbbellvoid r600_wb_fini(struct radeon_device *rdev);
306254885Sdumbbellvoid r600_pcie_gart_tlb_flush(struct radeon_device *rdev);
307254885Sdumbbelluint32_t r600_pciep_rreg(struct radeon_device *rdev, uint32_t reg);
308254885Sdumbbellvoid r600_pciep_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
309254885Sdumbbellint r600_cs_parse(struct radeon_cs_parser *p);
310254885Sdumbbellint r600_dma_cs_parse(struct radeon_cs_parser *p);
311254885Sdumbbellvoid r600_fence_ring_emit(struct radeon_device *rdev,
312254885Sdumbbell			  struct radeon_fence *fence);
313254885Sdumbbellvoid r600_semaphore_ring_emit(struct radeon_device *rdev,
314254885Sdumbbell			      struct radeon_ring *cp,
315254885Sdumbbell			      struct radeon_semaphore *semaphore,
316254885Sdumbbell			      bool emit_wait);
317254885Sdumbbellvoid r600_dma_fence_ring_emit(struct radeon_device *rdev,
318254885Sdumbbell			      struct radeon_fence *fence);
319254885Sdumbbellvoid r600_dma_semaphore_ring_emit(struct radeon_device *rdev,
320254885Sdumbbell				  struct radeon_ring *ring,
321254885Sdumbbell				  struct radeon_semaphore *semaphore,
322254885Sdumbbell				  bool emit_wait);
323254885Sdumbbellvoid r600_dma_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
324254885Sdumbbellbool r600_dma_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring);
325254885Sdumbbellbool r600_gpu_is_lockup(struct radeon_device *rdev, struct radeon_ring *cp);
326254885Sdumbbellint r600_asic_reset(struct radeon_device *rdev);
327254885Sdumbbellint r600_set_surface_reg(struct radeon_device *rdev, int reg,
328254885Sdumbbell			 uint32_t tiling_flags, uint32_t pitch,
329254885Sdumbbell			 uint32_t offset, uint32_t obj_size);
330254885Sdumbbellvoid r600_clear_surface_reg(struct radeon_device *rdev, int reg);
331254885Sdumbbellint r600_ib_test(struct radeon_device *rdev, struct radeon_ring *ring);
332254885Sdumbbellint r600_dma_ib_test(struct radeon_device *rdev, struct radeon_ring *ring);
333254885Sdumbbellvoid r600_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
334254885Sdumbbellint r600_ring_test(struct radeon_device *rdev, struct radeon_ring *cp);
335254885Sdumbbellint r600_dma_ring_test(struct radeon_device *rdev, struct radeon_ring *cp);
336254885Sdumbbellint r600_copy_blit(struct radeon_device *rdev,
337254885Sdumbbell		   uint64_t src_offset, uint64_t dst_offset,
338254885Sdumbbell		   unsigned num_gpu_pages, struct radeon_fence **fence);
339254885Sdumbbellint r600_copy_dma(struct radeon_device *rdev,
340254885Sdumbbell		  uint64_t src_offset, uint64_t dst_offset,
341254885Sdumbbell		  unsigned num_gpu_pages, struct radeon_fence **fence);
342254885Sdumbbellvoid r600_hpd_init(struct radeon_device *rdev);
343254885Sdumbbellvoid r600_hpd_fini(struct radeon_device *rdev);
344254885Sdumbbellbool r600_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd);
345254885Sdumbbellvoid r600_hpd_set_polarity(struct radeon_device *rdev,
346254885Sdumbbell			   enum radeon_hpd_id hpd);
347254885Sdumbbellextern void r600_ioctl_wait_idle(struct radeon_device *rdev, struct radeon_bo *bo);
348254885Sdumbbellextern bool r600_gui_idle(struct radeon_device *rdev);
349254885Sdumbbellextern void r600_pm_misc(struct radeon_device *rdev);
350254885Sdumbbellextern void r600_pm_init_profile(struct radeon_device *rdev);
351254885Sdumbbellextern void rs780_pm_init_profile(struct radeon_device *rdev);
352254885Sdumbbellextern void r600_pm_get_dynpm_state(struct radeon_device *rdev);
353254885Sdumbbellextern void r600_set_pcie_lanes(struct radeon_device *rdev, int lanes);
354254885Sdumbbellextern int r600_get_pcie_lanes(struct radeon_device *rdev);
355254885Sdumbbellbool r600_card_posted(struct radeon_device *rdev);
356254885Sdumbbellvoid r600_cp_stop(struct radeon_device *rdev);
357254885Sdumbbellint r600_cp_start(struct radeon_device *rdev);
358254885Sdumbbellvoid r600_ring_init(struct radeon_device *rdev, struct radeon_ring *cp, unsigned ring_size);
359254885Sdumbbellint r600_cp_resume(struct radeon_device *rdev);
360254885Sdumbbellvoid r600_cp_fini(struct radeon_device *rdev);
361254885Sdumbbellint r600_count_pipe_bits(uint32_t val);
362254885Sdumbbellint r600_mc_wait_for_idle(struct radeon_device *rdev);
363254885Sdumbbellint r600_pcie_gart_init(struct radeon_device *rdev);
364254885Sdumbbellvoid r600_scratch_init(struct radeon_device *rdev);
365254885Sdumbbellint r600_blit_init(struct radeon_device *rdev);
366254885Sdumbbellvoid r600_blit_fini(struct radeon_device *rdev);
367254885Sdumbbellint r600_init_microcode(struct radeon_device *rdev);
368254885Sdumbbellvoid r600_fini_microcode(struct radeon_device *rdev);
369254885Sdumbbell/* r600 irq */
370254885Sdumbbellirqreturn_t r600_irq_process(struct radeon_device *rdev);
371254885Sdumbbellint r600_irq_init(struct radeon_device *rdev);
372254885Sdumbbellvoid r600_irq_fini(struct radeon_device *rdev);
373254885Sdumbbellvoid r600_ih_ring_init(struct radeon_device *rdev, unsigned ring_size);
374254885Sdumbbellint r600_irq_set(struct radeon_device *rdev);
375254885Sdumbbellvoid r600_irq_suspend(struct radeon_device *rdev);
376254885Sdumbbellvoid r600_disable_interrupts(struct radeon_device *rdev);
377254885Sdumbbellvoid r600_rlc_stop(struct radeon_device *rdev);
378254885Sdumbbell/* r600 audio */
379254885Sdumbbellint r600_audio_init(struct radeon_device *rdev);
380254885Sdumbbellvoid r600_audio_set_clock(struct drm_encoder *encoder, int clock);
381254885Sdumbbellstruct r600_audio r600_audio_status(struct radeon_device *rdev);
382254885Sdumbbellvoid r600_audio_fini(struct radeon_device *rdev);
383254885Sdumbbellint r600_hdmi_buffer_status_changed(struct drm_encoder *encoder);
384254885Sdumbbellvoid r600_hdmi_update_audio_settings(struct drm_encoder *encoder);
385254885Sdumbbell/* r600 blit */
386254885Sdumbbellint r600_blit_prepare_copy(struct radeon_device *rdev, unsigned num_gpu_pages,
387254885Sdumbbell			   struct radeon_fence **fence, struct radeon_sa_bo **vb,
388254885Sdumbbell			   struct radeon_semaphore **sem);
389254885Sdumbbellvoid r600_blit_done_copy(struct radeon_device *rdev, struct radeon_fence **fence,
390254885Sdumbbell			 struct radeon_sa_bo *vb, struct radeon_semaphore *sem);
391254885Sdumbbellvoid r600_kms_blit_copy(struct radeon_device *rdev,
392254885Sdumbbell			u64 src_gpu_addr, u64 dst_gpu_addr,
393254885Sdumbbell			unsigned num_gpu_pages,
394254885Sdumbbell			struct radeon_sa_bo *vb);
395254885Sdumbbelluint64_t r600_get_gpu_clock(struct radeon_device *rdev);
396254885Sdumbbell
397254885Sdumbbell/*
398254885Sdumbbell * rv770,rv730,rv710,rv740
399254885Sdumbbell */
400254885Sdumbbellint rv770_init(struct radeon_device *rdev);
401254885Sdumbbellvoid rv770_fini(struct radeon_device *rdev);
402254885Sdumbbellint rv770_suspend(struct radeon_device *rdev);
403254885Sdumbbellint rv770_resume(struct radeon_device *rdev);
404254885Sdumbbellvoid rv770_pm_misc(struct radeon_device *rdev);
405254885Sdumbbellu32 rv770_page_flip(struct radeon_device *rdev, int crtc, u64 crtc_base);
406254885Sdumbbellvoid r700_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc);
407254885Sdumbbellvoid r700_cp_stop(struct radeon_device *rdev);
408254885Sdumbbellvoid r700_cp_fini(struct radeon_device *rdev);
409254885Sdumbbellint rv770_copy_dma(struct radeon_device *rdev,
410254885Sdumbbell		  uint64_t src_offset, uint64_t dst_offset,
411254885Sdumbbell		  unsigned num_gpu_pages,
412254885Sdumbbell		   struct radeon_fence **fence);
413254885Sdumbbell
414254885Sdumbbell/*
415254885Sdumbbell * evergreen
416254885Sdumbbell */
417254885Sdumbbellstruct evergreen_mc_save {
418254885Sdumbbell	u32 vga_render_control;
419254885Sdumbbell	u32 vga_hdp_control;
420254885Sdumbbell	bool crtc_enabled[RADEON_MAX_CRTCS];
421254885Sdumbbell};
422254885Sdumbbell
423254885Sdumbbellvoid evergreen_pcie_gart_tlb_flush(struct radeon_device *rdev);
424254885Sdumbbellint evergreen_init(struct radeon_device *rdev);
425254885Sdumbbellvoid evergreen_fini(struct radeon_device *rdev);
426254885Sdumbbellint evergreen_suspend(struct radeon_device *rdev);
427254885Sdumbbellint evergreen_resume(struct radeon_device *rdev);
428254885Sdumbbellbool evergreen_gpu_is_lockup(struct radeon_device *rdev, struct radeon_ring *cp);
429254885Sdumbbellint evergreen_asic_reset(struct radeon_device *rdev);
430254885Sdumbbellvoid evergreen_bandwidth_update(struct radeon_device *rdev);
431254885Sdumbbellvoid evergreen_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
432254885Sdumbbellvoid evergreen_hpd_init(struct radeon_device *rdev);
433254885Sdumbbellvoid evergreen_hpd_fini(struct radeon_device *rdev);
434254885Sdumbbellbool evergreen_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd);
435254885Sdumbbellvoid evergreen_hpd_set_polarity(struct radeon_device *rdev,
436254885Sdumbbell				enum radeon_hpd_id hpd);
437254885Sdumbbellu32 evergreen_get_vblank_counter(struct radeon_device *rdev, int crtc);
438254885Sdumbbellint evergreen_irq_set(struct radeon_device *rdev);
439254885Sdumbbellirqreturn_t evergreen_irq_process(struct radeon_device *rdev);
440254885Sdumbbellextern int evergreen_cs_parse(struct radeon_cs_parser *p);
441254885Sdumbbellextern int evergreen_dma_cs_parse(struct radeon_cs_parser *p);
442254885Sdumbbellextern void evergreen_pm_misc(struct radeon_device *rdev);
443254885Sdumbbellextern void evergreen_pm_prepare(struct radeon_device *rdev);
444254885Sdumbbellextern void evergreen_pm_finish(struct radeon_device *rdev);
445254885Sdumbbellextern void sumo_pm_init_profile(struct radeon_device *rdev);
446254885Sdumbbellextern void btc_pm_init_profile(struct radeon_device *rdev);
447254885Sdumbbellextern void evergreen_pre_page_flip(struct radeon_device *rdev, int crtc);
448254885Sdumbbellextern u32 evergreen_page_flip(struct radeon_device *rdev, int crtc, u64 crtc_base);
449254885Sdumbbellextern void evergreen_post_page_flip(struct radeon_device *rdev, int crtc);
450254885Sdumbbellextern void dce4_wait_for_vblank(struct radeon_device *rdev, int crtc);
451254885Sdumbbellvoid evergreen_disable_interrupt_state(struct radeon_device *rdev);
452254885Sdumbbellint evergreen_blit_init(struct radeon_device *rdev);
453254885Sdumbbellint evergreen_mc_wait_for_idle(struct radeon_device *rdev);
454254885Sdumbbellvoid evergreen_dma_fence_ring_emit(struct radeon_device *rdev,
455254885Sdumbbell				   struct radeon_fence *fence);
456254885Sdumbbellvoid evergreen_dma_ring_ib_execute(struct radeon_device *rdev,
457254885Sdumbbell				   struct radeon_ib *ib);
458254885Sdumbbellint evergreen_copy_dma(struct radeon_device *rdev,
459254885Sdumbbell		       uint64_t src_offset, uint64_t dst_offset,
460254885Sdumbbell		       unsigned num_gpu_pages,
461254885Sdumbbell		       struct radeon_fence **fence);
462254885Sdumbbellvoid evergreen_fix_pci_max_read_req_size(struct radeon_device *rdev);
463254885Sdumbbellu32 evergreen_get_number_of_dram_channels(struct radeon_device *rdev);
464254885Sdumbbellvoid evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *save);
465254885Sdumbbellvoid evergreen_mc_resume(struct radeon_device *rdev, struct evergreen_mc_save *save);
466254885Sdumbbellvoid evergreen_mc_program(struct radeon_device *rdev);
467254885Sdumbbellint evergreen_mc_init(struct radeon_device *rdev);
468254885Sdumbbellvoid evergreen_irq_suspend(struct radeon_device *rdev);
469254885Sdumbbell
470254885Sdumbbell/*
471254885Sdumbbell * cayman
472254885Sdumbbell */
473254885Sdumbbellvoid cayman_fence_ring_emit(struct radeon_device *rdev,
474254885Sdumbbell			    struct radeon_fence *fence);
475254885Sdumbbellvoid cayman_pcie_gart_tlb_flush(struct radeon_device *rdev);
476254885Sdumbbellint cayman_init(struct radeon_device *rdev);
477254885Sdumbbellvoid cayman_fini(struct radeon_device *rdev);
478254885Sdumbbellint cayman_suspend(struct radeon_device *rdev);
479254885Sdumbbellint cayman_resume(struct radeon_device *rdev);
480254885Sdumbbellint cayman_asic_reset(struct radeon_device *rdev);
481254885Sdumbbellvoid cayman_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
482254885Sdumbbellint cayman_vm_init(struct radeon_device *rdev);
483254885Sdumbbellvoid cayman_vm_fini(struct radeon_device *rdev);
484254885Sdumbbellvoid cayman_vm_flush(struct radeon_device *rdev, int ridx, struct radeon_vm *vm);
485254885Sdumbbelluint32_t cayman_vm_page_flags(struct radeon_device *rdev, uint32_t flags);
486254885Sdumbbellvoid cayman_vm_set_page(struct radeon_device *rdev, uint64_t pe,
487254885Sdumbbell			uint64_t addr, unsigned count,
488254885Sdumbbell			uint32_t incr, uint32_t flags);
489254885Sdumbbellint evergreen_ib_parse(struct radeon_device *rdev, struct radeon_ib *ib);
490254885Sdumbbellint evergreen_dma_ib_parse(struct radeon_device *rdev, struct radeon_ib *ib);
491254885Sdumbbellvoid cayman_dma_ring_ib_execute(struct radeon_device *rdev,
492254885Sdumbbell				struct radeon_ib *ib);
493254885Sdumbbellbool cayman_dma_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring);
494254885Sdumbbellvoid cayman_dma_vm_flush(struct radeon_device *rdev, int ridx, struct radeon_vm *vm);
495254885Sdumbbellextern void cayman_cp_int_cntl_setup(struct radeon_device *rdev,
496254885Sdumbbell				     int ring, u32 cp_int_cntl);
497254885Sdumbbell
498254885Sdumbbell/* DCE6 - SI */
499254885Sdumbbellvoid dce6_bandwidth_update(struct radeon_device *rdev);
500254885Sdumbbell
501254885Sdumbbell/*
502254885Sdumbbell * si
503254885Sdumbbell */
504254885Sdumbbellvoid si_fence_ring_emit(struct radeon_device *rdev,
505254885Sdumbbell			struct radeon_fence *fence);
506254885Sdumbbellvoid si_pcie_gart_tlb_flush(struct radeon_device *rdev);
507254885Sdumbbellint si_init(struct radeon_device *rdev);
508254885Sdumbbellvoid si_fini(struct radeon_device *rdev);
509254885Sdumbbellint si_suspend(struct radeon_device *rdev);
510254885Sdumbbellint si_resume(struct radeon_device *rdev);
511254885Sdumbbellbool si_gpu_is_lockup(struct radeon_device *rdev, struct radeon_ring *cp);
512254885Sdumbbellint si_asic_reset(struct radeon_device *rdev);
513254885Sdumbbellvoid si_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
514254885Sdumbbellint si_irq_set(struct radeon_device *rdev);
515254885Sdumbbellirqreturn_t si_irq_process(struct radeon_device *rdev);
516254885Sdumbbellint si_vm_init(struct radeon_device *rdev);
517254885Sdumbbellvoid si_vm_fini(struct radeon_device *rdev);
518254885Sdumbbellvoid si_vm_set_page(struct radeon_device *rdev, uint64_t pe,
519254885Sdumbbell		    uint64_t addr, unsigned count,
520254885Sdumbbell		    uint32_t incr, uint32_t flags);
521254885Sdumbbellvoid si_vm_flush(struct radeon_device *rdev, int ridx, struct radeon_vm *vm);
522254885Sdumbbellint si_ib_parse(struct radeon_device *rdev, struct radeon_ib *ib);
523254885Sdumbbelluint64_t si_get_gpu_clock(struct radeon_device *rdev);
524254885Sdumbbellint si_copy_dma(struct radeon_device *rdev,
525254885Sdumbbell		uint64_t src_offset, uint64_t dst_offset,
526254885Sdumbbell		unsigned num_gpu_pages,
527254885Sdumbbell		struct radeon_fence **fence);
528254885Sdumbbellvoid si_dma_vm_flush(struct radeon_device *rdev, int ridx, struct radeon_vm *vm);
529254885Sdumbbellvoid si_rlc_fini(struct radeon_device *rdev);
530254885Sdumbbellint si_rlc_init(struct radeon_device *rdev);
531254885Sdumbbell
532254885Sdumbbell#endif
533