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