162306a36Sopenharmony_ci/*
262306a36Sopenharmony_ci * Copyright 2008 Advanced Micro Devices, Inc.
362306a36Sopenharmony_ci * Copyright 2008 Red Hat Inc.
462306a36Sopenharmony_ci * Copyright 2009 Jerome Glisse.
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * Permission is hereby granted, free of charge, to any person obtaining a
762306a36Sopenharmony_ci * copy of this software and associated documentation files (the "Software"),
862306a36Sopenharmony_ci * to deal in the Software without restriction, including without limitation
962306a36Sopenharmony_ci * the rights to use, copy, modify, merge, publish, distribute, sublicense,
1062306a36Sopenharmony_ci * and/or sell copies of the Software, and to permit persons to whom the
1162306a36Sopenharmony_ci * Software is furnished to do so, subject to the following conditions:
1262306a36Sopenharmony_ci *
1362306a36Sopenharmony_ci * The above copyright notice and this permission notice shall be included in
1462306a36Sopenharmony_ci * all copies or substantial portions of the Software.
1562306a36Sopenharmony_ci *
1662306a36Sopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1762306a36Sopenharmony_ci * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1862306a36Sopenharmony_ci * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
1962306a36Sopenharmony_ci * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
2062306a36Sopenharmony_ci * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
2162306a36Sopenharmony_ci * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
2262306a36Sopenharmony_ci * OTHER DEALINGS IN THE SOFTWARE.
2362306a36Sopenharmony_ci *
2462306a36Sopenharmony_ci * Authors: Dave Airlie
2562306a36Sopenharmony_ci *          Alex Deucher
2662306a36Sopenharmony_ci *          Jerome Glisse
2762306a36Sopenharmony_ci */
2862306a36Sopenharmony_ci#ifndef __RADEON_ASIC_H__
2962306a36Sopenharmony_ci#define __RADEON_ASIC_H__
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci/*
3262306a36Sopenharmony_ci * common functions
3362306a36Sopenharmony_ci */
3462306a36Sopenharmony_ciuint32_t radeon_legacy_get_engine_clock(struct radeon_device *rdev);
3562306a36Sopenharmony_civoid radeon_legacy_set_engine_clock(struct radeon_device *rdev, uint32_t eng_clock);
3662306a36Sopenharmony_ciuint32_t radeon_legacy_get_memory_clock(struct radeon_device *rdev);
3762306a36Sopenharmony_civoid radeon_legacy_set_clock_gating(struct radeon_device *rdev, int enable);
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ciuint32_t radeon_atom_get_engine_clock(struct radeon_device *rdev);
4062306a36Sopenharmony_civoid radeon_atom_set_engine_clock(struct radeon_device *rdev, uint32_t eng_clock);
4162306a36Sopenharmony_ciuint32_t radeon_atom_get_memory_clock(struct radeon_device *rdev);
4262306a36Sopenharmony_civoid radeon_atom_set_memory_clock(struct radeon_device *rdev, uint32_t mem_clock);
4362306a36Sopenharmony_civoid radeon_atom_set_clock_gating(struct radeon_device *rdev, int enable);
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_civoid atombios_set_backlight_level(struct radeon_encoder *radeon_encoder, u8 level);
4662306a36Sopenharmony_ciu8 atombios_get_backlight_level(struct radeon_encoder *radeon_encoder);
4762306a36Sopenharmony_civoid radeon_legacy_set_backlight_level(struct radeon_encoder *radeon_encoder, u8 level);
4862306a36Sopenharmony_ciu8 radeon_legacy_get_backlight_level(struct radeon_encoder *radeon_encoder);
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ci/*
5162306a36Sopenharmony_ci * r100,rv100,rs100,rv200,rs200
5262306a36Sopenharmony_ci */
5362306a36Sopenharmony_cistruct r100_mc_save {
5462306a36Sopenharmony_ci	u32	GENMO_WT;
5562306a36Sopenharmony_ci	u32	CRTC_EXT_CNTL;
5662306a36Sopenharmony_ci	u32	CRTC_GEN_CNTL;
5762306a36Sopenharmony_ci	u32	CRTC2_GEN_CNTL;
5862306a36Sopenharmony_ci	u32	CUR_OFFSET;
5962306a36Sopenharmony_ci	u32	CUR2_OFFSET;
6062306a36Sopenharmony_ci};
6162306a36Sopenharmony_ciint r100_init(struct radeon_device *rdev);
6262306a36Sopenharmony_civoid r100_fini(struct radeon_device *rdev);
6362306a36Sopenharmony_ciint r100_suspend(struct radeon_device *rdev);
6462306a36Sopenharmony_ciint r100_resume(struct radeon_device *rdev);
6562306a36Sopenharmony_civoid r100_vga_set_state(struct radeon_device *rdev, bool state);
6662306a36Sopenharmony_cibool r100_gpu_is_lockup(struct radeon_device *rdev, struct radeon_ring *cp);
6762306a36Sopenharmony_ciint r100_asic_reset(struct radeon_device *rdev, bool hard);
6862306a36Sopenharmony_ciu32 r100_get_vblank_counter(struct radeon_device *rdev, int crtc);
6962306a36Sopenharmony_civoid r100_pci_gart_tlb_flush(struct radeon_device *rdev);
7062306a36Sopenharmony_ciuint64_t r100_pci_gart_get_page_entry(uint64_t addr, uint32_t flags);
7162306a36Sopenharmony_civoid r100_pci_gart_set_page(struct radeon_device *rdev, unsigned i,
7262306a36Sopenharmony_ci			    uint64_t entry);
7362306a36Sopenharmony_civoid r100_ring_start(struct radeon_device *rdev, struct radeon_ring *ring);
7462306a36Sopenharmony_ciint r100_irq_set(struct radeon_device *rdev);
7562306a36Sopenharmony_ciint r100_irq_process(struct radeon_device *rdev);
7662306a36Sopenharmony_civoid r100_fence_ring_emit(struct radeon_device *rdev,
7762306a36Sopenharmony_ci			  struct radeon_fence *fence);
7862306a36Sopenharmony_cibool r100_semaphore_ring_emit(struct radeon_device *rdev,
7962306a36Sopenharmony_ci			      struct radeon_ring *cp,
8062306a36Sopenharmony_ci			      struct radeon_semaphore *semaphore,
8162306a36Sopenharmony_ci			      bool emit_wait);
8262306a36Sopenharmony_ciint r100_cs_parse(struct radeon_cs_parser *p);
8362306a36Sopenharmony_civoid r100_pll_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
8462306a36Sopenharmony_ciuint32_t r100_pll_rreg(struct radeon_device *rdev, uint32_t reg);
8562306a36Sopenharmony_cistruct radeon_fence *r100_copy_blit(struct radeon_device *rdev,
8662306a36Sopenharmony_ci				    uint64_t src_offset,
8762306a36Sopenharmony_ci				    uint64_t dst_offset,
8862306a36Sopenharmony_ci				    unsigned num_gpu_pages,
8962306a36Sopenharmony_ci				    struct dma_resv *resv);
9062306a36Sopenharmony_ciint r100_set_surface_reg(struct radeon_device *rdev, int reg,
9162306a36Sopenharmony_ci			 uint32_t tiling_flags, uint32_t pitch,
9262306a36Sopenharmony_ci			 uint32_t offset, uint32_t obj_size);
9362306a36Sopenharmony_civoid r100_clear_surface_reg(struct radeon_device *rdev, int reg);
9462306a36Sopenharmony_civoid r100_bandwidth_update(struct radeon_device *rdev);
9562306a36Sopenharmony_civoid r100_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
9662306a36Sopenharmony_ciint r100_ring_test(struct radeon_device *rdev, struct radeon_ring *cp);
9762306a36Sopenharmony_civoid r100_hpd_init(struct radeon_device *rdev);
9862306a36Sopenharmony_civoid r100_hpd_fini(struct radeon_device *rdev);
9962306a36Sopenharmony_cibool r100_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd);
10062306a36Sopenharmony_civoid r100_hpd_set_polarity(struct radeon_device *rdev,
10162306a36Sopenharmony_ci			   enum radeon_hpd_id hpd);
10262306a36Sopenharmony_civoid r100_debugfs_rbbm_init(struct radeon_device *rdev);
10362306a36Sopenharmony_civoid r100_debugfs_cp_init(struct radeon_device *rdev);
10462306a36Sopenharmony_civoid r100_cp_disable(struct radeon_device *rdev);
10562306a36Sopenharmony_ciint r100_cp_init(struct radeon_device *rdev, unsigned ring_size);
10662306a36Sopenharmony_civoid r100_cp_fini(struct radeon_device *rdev);
10762306a36Sopenharmony_ciint r100_pci_gart_init(struct radeon_device *rdev);
10862306a36Sopenharmony_civoid r100_pci_gart_fini(struct radeon_device *rdev);
10962306a36Sopenharmony_ciint r100_pci_gart_enable(struct radeon_device *rdev);
11062306a36Sopenharmony_civoid r100_pci_gart_disable(struct radeon_device *rdev);
11162306a36Sopenharmony_civoid  r100_debugfs_mc_info_init(struct radeon_device *rdev);
11262306a36Sopenharmony_ciint r100_gui_wait_for_idle(struct radeon_device *rdev);
11362306a36Sopenharmony_ciint r100_ib_test(struct radeon_device *rdev, struct radeon_ring *ring);
11462306a36Sopenharmony_civoid r100_irq_disable(struct radeon_device *rdev);
11562306a36Sopenharmony_civoid r100_mc_stop(struct radeon_device *rdev, struct r100_mc_save *save);
11662306a36Sopenharmony_civoid r100_mc_resume(struct radeon_device *rdev, struct r100_mc_save *save);
11762306a36Sopenharmony_civoid r100_vram_init_sizes(struct radeon_device *rdev);
11862306a36Sopenharmony_ciint r100_cp_reset(struct radeon_device *rdev);
11962306a36Sopenharmony_civoid r100_vga_render_disable(struct radeon_device *rdev);
12062306a36Sopenharmony_civoid r100_restore_sanity(struct radeon_device *rdev);
12162306a36Sopenharmony_ciint r100_cs_track_check_pkt3_indx_buffer(struct radeon_cs_parser *p,
12262306a36Sopenharmony_ci					 struct radeon_cs_packet *pkt,
12362306a36Sopenharmony_ci					 struct radeon_bo *robj);
12462306a36Sopenharmony_ciint r100_cs_parse_packet0(struct radeon_cs_parser *p,
12562306a36Sopenharmony_ci			  struct radeon_cs_packet *pkt,
12662306a36Sopenharmony_ci			  const unsigned *auth, unsigned n,
12762306a36Sopenharmony_ci			  radeon_packet0_check_t check);
12862306a36Sopenharmony_ciint r100_cs_packet_parse(struct radeon_cs_parser *p,
12962306a36Sopenharmony_ci			 struct radeon_cs_packet *pkt,
13062306a36Sopenharmony_ci			 unsigned idx);
13162306a36Sopenharmony_civoid r100_enable_bm(struct radeon_device *rdev);
13262306a36Sopenharmony_civoid r100_set_common_regs(struct radeon_device *rdev);
13362306a36Sopenharmony_civoid r100_bm_disable(struct radeon_device *rdev);
13462306a36Sopenharmony_ciextern bool r100_gui_idle(struct radeon_device *rdev);
13562306a36Sopenharmony_ciextern void r100_pm_misc(struct radeon_device *rdev);
13662306a36Sopenharmony_ciextern void r100_pm_prepare(struct radeon_device *rdev);
13762306a36Sopenharmony_ciextern void r100_pm_finish(struct radeon_device *rdev);
13862306a36Sopenharmony_ciextern void r100_pm_init_profile(struct radeon_device *rdev);
13962306a36Sopenharmony_ciextern void r100_pm_get_dynpm_state(struct radeon_device *rdev);
14062306a36Sopenharmony_ciextern void r100_page_flip(struct radeon_device *rdev, int crtc,
14162306a36Sopenharmony_ci			   u64 crtc_base, bool async);
14262306a36Sopenharmony_ciextern bool r100_page_flip_pending(struct radeon_device *rdev, int crtc);
14362306a36Sopenharmony_ciextern void r100_wait_for_vblank(struct radeon_device *rdev, int crtc);
14462306a36Sopenharmony_ciextern int r100_mc_wait_for_idle(struct radeon_device *rdev);
14562306a36Sopenharmony_ci
14662306a36Sopenharmony_ciu32 r100_gfx_get_rptr(struct radeon_device *rdev,
14762306a36Sopenharmony_ci		      struct radeon_ring *ring);
14862306a36Sopenharmony_ciu32 r100_gfx_get_wptr(struct radeon_device *rdev,
14962306a36Sopenharmony_ci		      struct radeon_ring *ring);
15062306a36Sopenharmony_civoid r100_gfx_set_wptr(struct radeon_device *rdev,
15162306a36Sopenharmony_ci		       struct radeon_ring *ring);
15262306a36Sopenharmony_ci
15362306a36Sopenharmony_ci/*
15462306a36Sopenharmony_ci * r200,rv250,rs300,rv280
15562306a36Sopenharmony_ci */
15662306a36Sopenharmony_cistruct radeon_fence *r200_copy_dma(struct radeon_device *rdev,
15762306a36Sopenharmony_ci				   uint64_t src_offset,
15862306a36Sopenharmony_ci				   uint64_t dst_offset,
15962306a36Sopenharmony_ci				   unsigned num_gpu_pages,
16062306a36Sopenharmony_ci				   struct dma_resv *resv);
16162306a36Sopenharmony_civoid r200_set_safe_registers(struct radeon_device *rdev);
16262306a36Sopenharmony_ci
16362306a36Sopenharmony_ci/*
16462306a36Sopenharmony_ci * r300,r350,rv350,rv380
16562306a36Sopenharmony_ci */
16662306a36Sopenharmony_ciextern int r300_init(struct radeon_device *rdev);
16762306a36Sopenharmony_ciextern void r300_fini(struct radeon_device *rdev);
16862306a36Sopenharmony_ciextern int r300_suspend(struct radeon_device *rdev);
16962306a36Sopenharmony_ciextern int r300_resume(struct radeon_device *rdev);
17062306a36Sopenharmony_ciextern int r300_asic_reset(struct radeon_device *rdev, bool hard);
17162306a36Sopenharmony_ciextern void r300_ring_start(struct radeon_device *rdev, struct radeon_ring *ring);
17262306a36Sopenharmony_ciextern void r300_fence_ring_emit(struct radeon_device *rdev,
17362306a36Sopenharmony_ci				struct radeon_fence *fence);
17462306a36Sopenharmony_ciextern int r300_cs_parse(struct radeon_cs_parser *p);
17562306a36Sopenharmony_ciextern void rv370_pcie_gart_tlb_flush(struct radeon_device *rdev);
17662306a36Sopenharmony_ciextern uint64_t rv370_pcie_gart_get_page_entry(uint64_t addr, uint32_t flags);
17762306a36Sopenharmony_ciextern void rv370_pcie_gart_set_page(struct radeon_device *rdev, unsigned i,
17862306a36Sopenharmony_ci				     uint64_t entry);
17962306a36Sopenharmony_ciextern void rv370_set_pcie_lanes(struct radeon_device *rdev, int lanes);
18062306a36Sopenharmony_ciextern int rv370_get_pcie_lanes(struct radeon_device *rdev);
18162306a36Sopenharmony_ciextern void r300_set_reg_safe(struct radeon_device *rdev);
18262306a36Sopenharmony_ciextern void r300_mc_program(struct radeon_device *rdev);
18362306a36Sopenharmony_ciextern void r300_mc_init(struct radeon_device *rdev);
18462306a36Sopenharmony_ciextern void r300_clock_startup(struct radeon_device *rdev);
18562306a36Sopenharmony_ciextern int r300_mc_wait_for_idle(struct radeon_device *rdev);
18662306a36Sopenharmony_ciextern int rv370_pcie_gart_init(struct radeon_device *rdev);
18762306a36Sopenharmony_ciextern void rv370_pcie_gart_fini(struct radeon_device *rdev);
18862306a36Sopenharmony_ciextern int rv370_pcie_gart_enable(struct radeon_device *rdev);
18962306a36Sopenharmony_ciextern void rv370_pcie_gart_disable(struct radeon_device *rdev);
19062306a36Sopenharmony_ci
19162306a36Sopenharmony_ci/*
19262306a36Sopenharmony_ci * r420,r423,rv410
19362306a36Sopenharmony_ci */
19462306a36Sopenharmony_ciextern int r420_init(struct radeon_device *rdev);
19562306a36Sopenharmony_ciextern void r420_fini(struct radeon_device *rdev);
19662306a36Sopenharmony_ciextern int r420_suspend(struct radeon_device *rdev);
19762306a36Sopenharmony_ciextern int r420_resume(struct radeon_device *rdev);
19862306a36Sopenharmony_ciextern void r420_pm_init_profile(struct radeon_device *rdev);
19962306a36Sopenharmony_ciextern u32 r420_mc_rreg(struct radeon_device *rdev, u32 reg);
20062306a36Sopenharmony_ciextern void r420_mc_wreg(struct radeon_device *rdev, u32 reg, u32 v);
20162306a36Sopenharmony_ciextern void r420_debugfs_pipes_info_init(struct radeon_device *rdev);
20262306a36Sopenharmony_ciextern void r420_pipes_init(struct radeon_device *rdev);
20362306a36Sopenharmony_ci
20462306a36Sopenharmony_ci/*
20562306a36Sopenharmony_ci * rs400,rs480
20662306a36Sopenharmony_ci */
20762306a36Sopenharmony_ciextern int rs400_init(struct radeon_device *rdev);
20862306a36Sopenharmony_ciextern void rs400_fini(struct radeon_device *rdev);
20962306a36Sopenharmony_ciextern int rs400_suspend(struct radeon_device *rdev);
21062306a36Sopenharmony_ciextern int rs400_resume(struct radeon_device *rdev);
21162306a36Sopenharmony_civoid rs400_gart_tlb_flush(struct radeon_device *rdev);
21262306a36Sopenharmony_ciuint64_t rs400_gart_get_page_entry(uint64_t addr, uint32_t flags);
21362306a36Sopenharmony_civoid rs400_gart_set_page(struct radeon_device *rdev, unsigned i,
21462306a36Sopenharmony_ci			 uint64_t entry);
21562306a36Sopenharmony_ciuint32_t rs400_mc_rreg(struct radeon_device *rdev, uint32_t reg);
21662306a36Sopenharmony_civoid rs400_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
21762306a36Sopenharmony_ciint rs400_gart_init(struct radeon_device *rdev);
21862306a36Sopenharmony_ciint rs400_gart_enable(struct radeon_device *rdev);
21962306a36Sopenharmony_civoid rs400_gart_adjust_size(struct radeon_device *rdev);
22062306a36Sopenharmony_civoid rs400_gart_disable(struct radeon_device *rdev);
22162306a36Sopenharmony_civoid rs400_gart_fini(struct radeon_device *rdev);
22262306a36Sopenharmony_ciextern int rs400_mc_wait_for_idle(struct radeon_device *rdev);
22362306a36Sopenharmony_ci
22462306a36Sopenharmony_ci/*
22562306a36Sopenharmony_ci * rs600.
22662306a36Sopenharmony_ci */
22762306a36Sopenharmony_ciextern int rs600_asic_reset(struct radeon_device *rdev, bool hard);
22862306a36Sopenharmony_ciextern int rs600_init(struct radeon_device *rdev);
22962306a36Sopenharmony_ciextern void rs600_fini(struct radeon_device *rdev);
23062306a36Sopenharmony_ciextern int rs600_suspend(struct radeon_device *rdev);
23162306a36Sopenharmony_ciextern int rs600_resume(struct radeon_device *rdev);
23262306a36Sopenharmony_ciint rs600_irq_set(struct radeon_device *rdev);
23362306a36Sopenharmony_ciint rs600_irq_process(struct radeon_device *rdev);
23462306a36Sopenharmony_civoid rs600_irq_disable(struct radeon_device *rdev);
23562306a36Sopenharmony_ciu32 rs600_get_vblank_counter(struct radeon_device *rdev, int crtc);
23662306a36Sopenharmony_civoid rs600_gart_tlb_flush(struct radeon_device *rdev);
23762306a36Sopenharmony_ciuint64_t rs600_gart_get_page_entry(uint64_t addr, uint32_t flags);
23862306a36Sopenharmony_civoid rs600_gart_set_page(struct radeon_device *rdev, unsigned i,
23962306a36Sopenharmony_ci			 uint64_t entry);
24062306a36Sopenharmony_ciuint32_t rs600_mc_rreg(struct radeon_device *rdev, uint32_t reg);
24162306a36Sopenharmony_civoid rs600_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
24262306a36Sopenharmony_civoid rs600_bandwidth_update(struct radeon_device *rdev);
24362306a36Sopenharmony_civoid rs600_hpd_init(struct radeon_device *rdev);
24462306a36Sopenharmony_civoid rs600_hpd_fini(struct radeon_device *rdev);
24562306a36Sopenharmony_cibool rs600_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd);
24662306a36Sopenharmony_civoid rs600_hpd_set_polarity(struct radeon_device *rdev,
24762306a36Sopenharmony_ci			    enum radeon_hpd_id hpd);
24862306a36Sopenharmony_ciextern void rs600_pm_misc(struct radeon_device *rdev);
24962306a36Sopenharmony_ciextern void rs600_pm_prepare(struct radeon_device *rdev);
25062306a36Sopenharmony_ciextern void rs600_pm_finish(struct radeon_device *rdev);
25162306a36Sopenharmony_ciextern void rs600_page_flip(struct radeon_device *rdev, int crtc,
25262306a36Sopenharmony_ci			    u64 crtc_base, bool async);
25362306a36Sopenharmony_ciextern bool rs600_page_flip_pending(struct radeon_device *rdev, int crtc);
25462306a36Sopenharmony_civoid rs600_set_safe_registers(struct radeon_device *rdev);
25562306a36Sopenharmony_ciextern void avivo_wait_for_vblank(struct radeon_device *rdev, int crtc);
25662306a36Sopenharmony_ciextern int rs600_mc_wait_for_idle(struct radeon_device *rdev);
25762306a36Sopenharmony_ci
25862306a36Sopenharmony_ci/*
25962306a36Sopenharmony_ci * rs690,rs740
26062306a36Sopenharmony_ci */
26162306a36Sopenharmony_ciint rs690_init(struct radeon_device *rdev);
26262306a36Sopenharmony_civoid rs690_fini(struct radeon_device *rdev);
26362306a36Sopenharmony_ciint rs690_resume(struct radeon_device *rdev);
26462306a36Sopenharmony_ciint rs690_suspend(struct radeon_device *rdev);
26562306a36Sopenharmony_ciuint32_t rs690_mc_rreg(struct radeon_device *rdev, uint32_t reg);
26662306a36Sopenharmony_civoid rs690_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
26762306a36Sopenharmony_civoid rs690_bandwidth_update(struct radeon_device *rdev);
26862306a36Sopenharmony_civoid rs690_line_buffer_adjust(struct radeon_device *rdev,
26962306a36Sopenharmony_ci					struct drm_display_mode *mode1,
27062306a36Sopenharmony_ci					struct drm_display_mode *mode2);
27162306a36Sopenharmony_ciextern int rs690_mc_wait_for_idle(struct radeon_device *rdev);
27262306a36Sopenharmony_ci
27362306a36Sopenharmony_ci/*
27462306a36Sopenharmony_ci * rv515
27562306a36Sopenharmony_ci */
27662306a36Sopenharmony_cistruct rv515_mc_save {
27762306a36Sopenharmony_ci	u32 vga_render_control;
27862306a36Sopenharmony_ci	u32 vga_hdp_control;
27962306a36Sopenharmony_ci	bool crtc_enabled[2];
28062306a36Sopenharmony_ci};
28162306a36Sopenharmony_ci
28262306a36Sopenharmony_ciint rv515_init(struct radeon_device *rdev);
28362306a36Sopenharmony_civoid rv515_fini(struct radeon_device *rdev);
28462306a36Sopenharmony_ciuint32_t rv515_mc_rreg(struct radeon_device *rdev, uint32_t reg);
28562306a36Sopenharmony_civoid rv515_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
28662306a36Sopenharmony_civoid rv515_ring_start(struct radeon_device *rdev, struct radeon_ring *ring);
28762306a36Sopenharmony_civoid rv515_bandwidth_update(struct radeon_device *rdev);
28862306a36Sopenharmony_ciint rv515_resume(struct radeon_device *rdev);
28962306a36Sopenharmony_ciint rv515_suspend(struct radeon_device *rdev);
29062306a36Sopenharmony_civoid rv515_bandwidth_avivo_update(struct radeon_device *rdev);
29162306a36Sopenharmony_civoid rv515_vga_render_disable(struct radeon_device *rdev);
29262306a36Sopenharmony_civoid rv515_set_safe_registers(struct radeon_device *rdev);
29362306a36Sopenharmony_civoid rv515_mc_stop(struct radeon_device *rdev, struct rv515_mc_save *save);
29462306a36Sopenharmony_civoid rv515_mc_resume(struct radeon_device *rdev, struct rv515_mc_save *save);
29562306a36Sopenharmony_civoid rv515_clock_startup(struct radeon_device *rdev);
29662306a36Sopenharmony_civoid rv515_debugfs(struct radeon_device *rdev);
29762306a36Sopenharmony_ciint rv515_mc_wait_for_idle(struct radeon_device *rdev);
29862306a36Sopenharmony_ci
29962306a36Sopenharmony_ci/*
30062306a36Sopenharmony_ci * r520,rv530,rv560,rv570,r580
30162306a36Sopenharmony_ci */
30262306a36Sopenharmony_ciint r520_init(struct radeon_device *rdev);
30362306a36Sopenharmony_ciint r520_resume(struct radeon_device *rdev);
30462306a36Sopenharmony_ciint r520_mc_wait_for_idle(struct radeon_device *rdev);
30562306a36Sopenharmony_ci
30662306a36Sopenharmony_ci/*
30762306a36Sopenharmony_ci * r600,rv610,rv630,rv620,rv635,rv670,rs780,rs880
30862306a36Sopenharmony_ci */
30962306a36Sopenharmony_ciint r600_init(struct radeon_device *rdev);
31062306a36Sopenharmony_civoid r600_fini(struct radeon_device *rdev);
31162306a36Sopenharmony_ciint r600_suspend(struct radeon_device *rdev);
31262306a36Sopenharmony_ciint r600_resume(struct radeon_device *rdev);
31362306a36Sopenharmony_civoid r600_vga_set_state(struct radeon_device *rdev, bool state);
31462306a36Sopenharmony_ciint r600_wb_init(struct radeon_device *rdev);
31562306a36Sopenharmony_civoid r600_wb_fini(struct radeon_device *rdev);
31662306a36Sopenharmony_civoid r600_pcie_gart_tlb_flush(struct radeon_device *rdev);
31762306a36Sopenharmony_ciuint32_t r600_pciep_rreg(struct radeon_device *rdev, uint32_t reg);
31862306a36Sopenharmony_civoid r600_pciep_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
31962306a36Sopenharmony_ciint r600_cs_parse(struct radeon_cs_parser *p);
32062306a36Sopenharmony_ciint r600_dma_cs_parse(struct radeon_cs_parser *p);
32162306a36Sopenharmony_civoid r600_fence_ring_emit(struct radeon_device *rdev,
32262306a36Sopenharmony_ci			  struct radeon_fence *fence);
32362306a36Sopenharmony_cibool r600_semaphore_ring_emit(struct radeon_device *rdev,
32462306a36Sopenharmony_ci			      struct radeon_ring *cp,
32562306a36Sopenharmony_ci			      struct radeon_semaphore *semaphore,
32662306a36Sopenharmony_ci			      bool emit_wait);
32762306a36Sopenharmony_civoid r600_dma_fence_ring_emit(struct radeon_device *rdev,
32862306a36Sopenharmony_ci			      struct radeon_fence *fence);
32962306a36Sopenharmony_cibool r600_dma_semaphore_ring_emit(struct radeon_device *rdev,
33062306a36Sopenharmony_ci				  struct radeon_ring *ring,
33162306a36Sopenharmony_ci				  struct radeon_semaphore *semaphore,
33262306a36Sopenharmony_ci				  bool emit_wait);
33362306a36Sopenharmony_civoid r600_dma_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
33462306a36Sopenharmony_cibool r600_dma_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring);
33562306a36Sopenharmony_cibool r600_gfx_is_lockup(struct radeon_device *rdev, struct radeon_ring *cp);
33662306a36Sopenharmony_ciint r600_asic_reset(struct radeon_device *rdev, bool hard);
33762306a36Sopenharmony_ciint r600_set_surface_reg(struct radeon_device *rdev, int reg,
33862306a36Sopenharmony_ci			 uint32_t tiling_flags, uint32_t pitch,
33962306a36Sopenharmony_ci			 uint32_t offset, uint32_t obj_size);
34062306a36Sopenharmony_civoid r600_clear_surface_reg(struct radeon_device *rdev, int reg);
34162306a36Sopenharmony_ciint r600_ib_test(struct radeon_device *rdev, struct radeon_ring *ring);
34262306a36Sopenharmony_ciint r600_dma_ib_test(struct radeon_device *rdev, struct radeon_ring *ring);
34362306a36Sopenharmony_civoid r600_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
34462306a36Sopenharmony_ciint r600_ring_test(struct radeon_device *rdev, struct radeon_ring *cp);
34562306a36Sopenharmony_ciint r600_dma_ring_test(struct radeon_device *rdev, struct radeon_ring *cp);
34662306a36Sopenharmony_cistruct radeon_fence *r600_copy_cpdma(struct radeon_device *rdev,
34762306a36Sopenharmony_ci				     uint64_t src_offset, uint64_t dst_offset,
34862306a36Sopenharmony_ci				     unsigned num_gpu_pages,
34962306a36Sopenharmony_ci				     struct dma_resv *resv);
35062306a36Sopenharmony_cistruct radeon_fence *r600_copy_dma(struct radeon_device *rdev,
35162306a36Sopenharmony_ci				   uint64_t src_offset, uint64_t dst_offset,
35262306a36Sopenharmony_ci				   unsigned num_gpu_pages,
35362306a36Sopenharmony_ci				   struct dma_resv *resv);
35462306a36Sopenharmony_civoid r600_hpd_init(struct radeon_device *rdev);
35562306a36Sopenharmony_civoid r600_hpd_fini(struct radeon_device *rdev);
35662306a36Sopenharmony_cibool r600_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd);
35762306a36Sopenharmony_civoid r600_hpd_set_polarity(struct radeon_device *rdev,
35862306a36Sopenharmony_ci			   enum radeon_hpd_id hpd);
35962306a36Sopenharmony_ciextern void r600_mmio_hdp_flush(struct radeon_device *rdev);
36062306a36Sopenharmony_ciextern bool r600_gui_idle(struct radeon_device *rdev);
36162306a36Sopenharmony_ciextern void r600_pm_misc(struct radeon_device *rdev);
36262306a36Sopenharmony_ciextern void r600_pm_init_profile(struct radeon_device *rdev);
36362306a36Sopenharmony_ciextern void rs780_pm_init_profile(struct radeon_device *rdev);
36462306a36Sopenharmony_ciextern uint32_t rs780_mc_rreg(struct radeon_device *rdev, uint32_t reg);
36562306a36Sopenharmony_ciextern void rs780_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
36662306a36Sopenharmony_ciextern void r600_pm_get_dynpm_state(struct radeon_device *rdev);
36762306a36Sopenharmony_ciextern void r600_set_pcie_lanes(struct radeon_device *rdev, int lanes);
36862306a36Sopenharmony_ciextern int r600_get_pcie_lanes(struct radeon_device *rdev);
36962306a36Sopenharmony_cibool r600_card_posted(struct radeon_device *rdev);
37062306a36Sopenharmony_civoid r600_cp_stop(struct radeon_device *rdev);
37162306a36Sopenharmony_ciint r600_cp_start(struct radeon_device *rdev);
37262306a36Sopenharmony_civoid r600_ring_init(struct radeon_device *rdev, struct radeon_ring *cp, unsigned ring_size);
37362306a36Sopenharmony_ciint r600_cp_resume(struct radeon_device *rdev);
37462306a36Sopenharmony_civoid r600_cp_fini(struct radeon_device *rdev);
37562306a36Sopenharmony_ciint r600_count_pipe_bits(uint32_t val);
37662306a36Sopenharmony_ciint r600_mc_wait_for_idle(struct radeon_device *rdev);
37762306a36Sopenharmony_ciint r600_pcie_gart_init(struct radeon_device *rdev);
37862306a36Sopenharmony_civoid r600_scratch_init(struct radeon_device *rdev);
37962306a36Sopenharmony_ciint r600_init_microcode(struct radeon_device *rdev);
38062306a36Sopenharmony_ciu32 r600_gfx_get_rptr(struct radeon_device *rdev,
38162306a36Sopenharmony_ci		      struct radeon_ring *ring);
38262306a36Sopenharmony_ciu32 r600_gfx_get_wptr(struct radeon_device *rdev,
38362306a36Sopenharmony_ci		      struct radeon_ring *ring);
38462306a36Sopenharmony_civoid r600_gfx_set_wptr(struct radeon_device *rdev,
38562306a36Sopenharmony_ci		       struct radeon_ring *ring);
38662306a36Sopenharmony_ciint r600_get_allowed_info_register(struct radeon_device *rdev,
38762306a36Sopenharmony_ci				   u32 reg, u32 *val);
38862306a36Sopenharmony_ci/* r600 irq */
38962306a36Sopenharmony_ciint r600_irq_process(struct radeon_device *rdev);
39062306a36Sopenharmony_ciint r600_irq_init(struct radeon_device *rdev);
39162306a36Sopenharmony_civoid r600_irq_fini(struct radeon_device *rdev);
39262306a36Sopenharmony_civoid r600_ih_ring_init(struct radeon_device *rdev, unsigned ring_size);
39362306a36Sopenharmony_ciint r600_irq_set(struct radeon_device *rdev);
39462306a36Sopenharmony_civoid r600_irq_suspend(struct radeon_device *rdev);
39562306a36Sopenharmony_civoid r600_disable_interrupts(struct radeon_device *rdev);
39662306a36Sopenharmony_civoid r600_rlc_stop(struct radeon_device *rdev);
39762306a36Sopenharmony_ci/* r600 audio */
39862306a36Sopenharmony_civoid r600_audio_fini(struct radeon_device *rdev);
39962306a36Sopenharmony_civoid r600_audio_set_dto(struct drm_encoder *encoder, u32 clock);
40062306a36Sopenharmony_civoid r600_hdmi_update_avi_infoframe(struct drm_encoder *encoder, void *buffer,
40162306a36Sopenharmony_ci				    size_t size);
40262306a36Sopenharmony_civoid r600_hdmi_update_ACR(struct drm_encoder *encoder, uint32_t clock);
40362306a36Sopenharmony_civoid r600_hdmi_audio_workaround(struct drm_encoder *encoder);
40462306a36Sopenharmony_ciint r600_hdmi_buffer_status_changed(struct drm_encoder *encoder);
40562306a36Sopenharmony_civoid r600_hdmi_update_audio_settings(struct drm_encoder *encoder);
40662306a36Sopenharmony_ciu32 r600_get_xclk(struct radeon_device *rdev);
40762306a36Sopenharmony_ciuint64_t r600_get_gpu_clock_counter(struct radeon_device *rdev);
40862306a36Sopenharmony_ciint rv6xx_get_temp(struct radeon_device *rdev);
40962306a36Sopenharmony_ciint r600_set_uvd_clocks(struct radeon_device *rdev, u32 vclk, u32 dclk);
41062306a36Sopenharmony_ciint r600_dpm_pre_set_power_state(struct radeon_device *rdev);
41162306a36Sopenharmony_civoid r600_dpm_post_set_power_state(struct radeon_device *rdev);
41262306a36Sopenharmony_ciint r600_dpm_late_enable(struct radeon_device *rdev);
41362306a36Sopenharmony_ci/* r600 dma */
41462306a36Sopenharmony_ciuint32_t r600_dma_get_rptr(struct radeon_device *rdev,
41562306a36Sopenharmony_ci			   struct radeon_ring *ring);
41662306a36Sopenharmony_ciuint32_t r600_dma_get_wptr(struct radeon_device *rdev,
41762306a36Sopenharmony_ci			   struct radeon_ring *ring);
41862306a36Sopenharmony_civoid r600_dma_set_wptr(struct radeon_device *rdev,
41962306a36Sopenharmony_ci		       struct radeon_ring *ring);
42062306a36Sopenharmony_ci/* rv6xx dpm */
42162306a36Sopenharmony_ciint rv6xx_dpm_init(struct radeon_device *rdev);
42262306a36Sopenharmony_ciint rv6xx_dpm_enable(struct radeon_device *rdev);
42362306a36Sopenharmony_civoid rv6xx_dpm_disable(struct radeon_device *rdev);
42462306a36Sopenharmony_ciint rv6xx_dpm_set_power_state(struct radeon_device *rdev);
42562306a36Sopenharmony_civoid rv6xx_setup_asic(struct radeon_device *rdev);
42662306a36Sopenharmony_civoid rv6xx_dpm_display_configuration_changed(struct radeon_device *rdev);
42762306a36Sopenharmony_civoid rv6xx_dpm_fini(struct radeon_device *rdev);
42862306a36Sopenharmony_ciu32 rv6xx_dpm_get_sclk(struct radeon_device *rdev, bool low);
42962306a36Sopenharmony_ciu32 rv6xx_dpm_get_mclk(struct radeon_device *rdev, bool low);
43062306a36Sopenharmony_civoid rv6xx_dpm_print_power_state(struct radeon_device *rdev,
43162306a36Sopenharmony_ci				 struct radeon_ps *ps);
43262306a36Sopenharmony_civoid rv6xx_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
43362306a36Sopenharmony_ci						       struct seq_file *m);
43462306a36Sopenharmony_ciint rv6xx_dpm_force_performance_level(struct radeon_device *rdev,
43562306a36Sopenharmony_ci				      enum radeon_dpm_forced_level level);
43662306a36Sopenharmony_ciu32 rv6xx_dpm_get_current_sclk(struct radeon_device *rdev);
43762306a36Sopenharmony_ciu32 rv6xx_dpm_get_current_mclk(struct radeon_device *rdev);
43862306a36Sopenharmony_ci/* rs780 dpm */
43962306a36Sopenharmony_ciint rs780_dpm_init(struct radeon_device *rdev);
44062306a36Sopenharmony_ciint rs780_dpm_enable(struct radeon_device *rdev);
44162306a36Sopenharmony_civoid rs780_dpm_disable(struct radeon_device *rdev);
44262306a36Sopenharmony_ciint rs780_dpm_set_power_state(struct radeon_device *rdev);
44362306a36Sopenharmony_civoid rs780_dpm_setup_asic(struct radeon_device *rdev);
44462306a36Sopenharmony_civoid rs780_dpm_display_configuration_changed(struct radeon_device *rdev);
44562306a36Sopenharmony_civoid rs780_dpm_fini(struct radeon_device *rdev);
44662306a36Sopenharmony_ciu32 rs780_dpm_get_sclk(struct radeon_device *rdev, bool low);
44762306a36Sopenharmony_ciu32 rs780_dpm_get_mclk(struct radeon_device *rdev, bool low);
44862306a36Sopenharmony_civoid rs780_dpm_print_power_state(struct radeon_device *rdev,
44962306a36Sopenharmony_ci				 struct radeon_ps *ps);
45062306a36Sopenharmony_civoid rs780_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
45162306a36Sopenharmony_ci						       struct seq_file *m);
45262306a36Sopenharmony_ciint rs780_dpm_force_performance_level(struct radeon_device *rdev,
45362306a36Sopenharmony_ci				      enum radeon_dpm_forced_level level);
45462306a36Sopenharmony_ciu32 rs780_dpm_get_current_sclk(struct radeon_device *rdev);
45562306a36Sopenharmony_ciu32 rs780_dpm_get_current_mclk(struct radeon_device *rdev);
45662306a36Sopenharmony_ci
45762306a36Sopenharmony_ci/*
45862306a36Sopenharmony_ci * rv770,rv730,rv710,rv740
45962306a36Sopenharmony_ci */
46062306a36Sopenharmony_ciint rv770_init(struct radeon_device *rdev);
46162306a36Sopenharmony_civoid rv770_fini(struct radeon_device *rdev);
46262306a36Sopenharmony_ciint rv770_suspend(struct radeon_device *rdev);
46362306a36Sopenharmony_ciint rv770_resume(struct radeon_device *rdev);
46462306a36Sopenharmony_civoid rv770_pm_misc(struct radeon_device *rdev);
46562306a36Sopenharmony_civoid rv770_page_flip(struct radeon_device *rdev, int crtc, u64 crtc_base,
46662306a36Sopenharmony_ci		     bool async);
46762306a36Sopenharmony_cibool rv770_page_flip_pending(struct radeon_device *rdev, int crtc);
46862306a36Sopenharmony_civoid r700_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc);
46962306a36Sopenharmony_civoid r700_cp_stop(struct radeon_device *rdev);
47062306a36Sopenharmony_civoid r700_cp_fini(struct radeon_device *rdev);
47162306a36Sopenharmony_cistruct radeon_fence *rv770_copy_dma(struct radeon_device *rdev,
47262306a36Sopenharmony_ci				    uint64_t src_offset, uint64_t dst_offset,
47362306a36Sopenharmony_ci				    unsigned num_gpu_pages,
47462306a36Sopenharmony_ci				    struct dma_resv *resv);
47562306a36Sopenharmony_ciu32 rv770_get_xclk(struct radeon_device *rdev);
47662306a36Sopenharmony_ciint rv770_set_uvd_clocks(struct radeon_device *rdev, u32 vclk, u32 dclk);
47762306a36Sopenharmony_ciint rv770_get_temp(struct radeon_device *rdev);
47862306a36Sopenharmony_ci/* rv7xx pm */
47962306a36Sopenharmony_ciint rv770_dpm_init(struct radeon_device *rdev);
48062306a36Sopenharmony_ciint rv770_dpm_enable(struct radeon_device *rdev);
48162306a36Sopenharmony_ciint rv770_dpm_late_enable(struct radeon_device *rdev);
48262306a36Sopenharmony_civoid rv770_dpm_disable(struct radeon_device *rdev);
48362306a36Sopenharmony_ciint rv770_dpm_set_power_state(struct radeon_device *rdev);
48462306a36Sopenharmony_civoid rv770_dpm_setup_asic(struct radeon_device *rdev);
48562306a36Sopenharmony_civoid rv770_dpm_display_configuration_changed(struct radeon_device *rdev);
48662306a36Sopenharmony_civoid rv770_dpm_fini(struct radeon_device *rdev);
48762306a36Sopenharmony_ciu32 rv770_dpm_get_sclk(struct radeon_device *rdev, bool low);
48862306a36Sopenharmony_ciu32 rv770_dpm_get_mclk(struct radeon_device *rdev, bool low);
48962306a36Sopenharmony_civoid rv770_dpm_print_power_state(struct radeon_device *rdev,
49062306a36Sopenharmony_ci				 struct radeon_ps *ps);
49162306a36Sopenharmony_civoid rv770_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
49262306a36Sopenharmony_ci						       struct seq_file *m);
49362306a36Sopenharmony_ciint rv770_dpm_force_performance_level(struct radeon_device *rdev,
49462306a36Sopenharmony_ci				      enum radeon_dpm_forced_level level);
49562306a36Sopenharmony_cibool rv770_dpm_vblank_too_short(struct radeon_device *rdev);
49662306a36Sopenharmony_ciu32 rv770_dpm_get_current_sclk(struct radeon_device *rdev);
49762306a36Sopenharmony_ciu32 rv770_dpm_get_current_mclk(struct radeon_device *rdev);
49862306a36Sopenharmony_ci
49962306a36Sopenharmony_ci/*
50062306a36Sopenharmony_ci * evergreen
50162306a36Sopenharmony_ci */
50262306a36Sopenharmony_cistruct evergreen_mc_save {
50362306a36Sopenharmony_ci	u32 vga_render_control;
50462306a36Sopenharmony_ci	u32 vga_hdp_control;
50562306a36Sopenharmony_ci	bool crtc_enabled[RADEON_MAX_CRTCS];
50662306a36Sopenharmony_ci};
50762306a36Sopenharmony_ci
50862306a36Sopenharmony_civoid evergreen_pcie_gart_tlb_flush(struct radeon_device *rdev);
50962306a36Sopenharmony_ciint evergreen_init(struct radeon_device *rdev);
51062306a36Sopenharmony_civoid evergreen_fini(struct radeon_device *rdev);
51162306a36Sopenharmony_ciint evergreen_suspend(struct radeon_device *rdev);
51262306a36Sopenharmony_ciint evergreen_resume(struct radeon_device *rdev);
51362306a36Sopenharmony_cibool evergreen_gfx_is_lockup(struct radeon_device *rdev, struct radeon_ring *cp);
51462306a36Sopenharmony_cibool evergreen_dma_is_lockup(struct radeon_device *rdev, struct radeon_ring *cp);
51562306a36Sopenharmony_ciint evergreen_asic_reset(struct radeon_device *rdev, bool hard);
51662306a36Sopenharmony_civoid evergreen_bandwidth_update(struct radeon_device *rdev);
51762306a36Sopenharmony_civoid evergreen_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
51862306a36Sopenharmony_civoid evergreen_hpd_init(struct radeon_device *rdev);
51962306a36Sopenharmony_civoid evergreen_hpd_fini(struct radeon_device *rdev);
52062306a36Sopenharmony_cibool evergreen_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd);
52162306a36Sopenharmony_civoid evergreen_hpd_set_polarity(struct radeon_device *rdev,
52262306a36Sopenharmony_ci				enum radeon_hpd_id hpd);
52362306a36Sopenharmony_ciu32 evergreen_get_vblank_counter(struct radeon_device *rdev, int crtc);
52462306a36Sopenharmony_ciint evergreen_irq_set(struct radeon_device *rdev);
52562306a36Sopenharmony_ciint evergreen_irq_process(struct radeon_device *rdev);
52662306a36Sopenharmony_ciextern int evergreen_cs_parse(struct radeon_cs_parser *p);
52762306a36Sopenharmony_ciextern int evergreen_dma_cs_parse(struct radeon_cs_parser *p);
52862306a36Sopenharmony_ciextern void evergreen_pm_misc(struct radeon_device *rdev);
52962306a36Sopenharmony_ciextern void evergreen_pm_prepare(struct radeon_device *rdev);
53062306a36Sopenharmony_ciextern void evergreen_pm_finish(struct radeon_device *rdev);
53162306a36Sopenharmony_ciextern void sumo_pm_init_profile(struct radeon_device *rdev);
53262306a36Sopenharmony_ciextern void btc_pm_init_profile(struct radeon_device *rdev);
53362306a36Sopenharmony_ciint sumo_set_uvd_clocks(struct radeon_device *rdev, u32 vclk, u32 dclk);
53462306a36Sopenharmony_ciint evergreen_set_uvd_clocks(struct radeon_device *rdev, u32 vclk, u32 dclk);
53562306a36Sopenharmony_ciextern void evergreen_page_flip(struct radeon_device *rdev, int crtc,
53662306a36Sopenharmony_ci				u64 crtc_base, bool async);
53762306a36Sopenharmony_ciextern bool evergreen_page_flip_pending(struct radeon_device *rdev, int crtc);
53862306a36Sopenharmony_ciextern void dce4_wait_for_vblank(struct radeon_device *rdev, int crtc);
53962306a36Sopenharmony_civoid evergreen_disable_interrupt_state(struct radeon_device *rdev);
54062306a36Sopenharmony_ciint evergreen_mc_wait_for_idle(struct radeon_device *rdev);
54162306a36Sopenharmony_civoid evergreen_dma_fence_ring_emit(struct radeon_device *rdev,
54262306a36Sopenharmony_ci				   struct radeon_fence *fence);
54362306a36Sopenharmony_civoid evergreen_dma_ring_ib_execute(struct radeon_device *rdev,
54462306a36Sopenharmony_ci				   struct radeon_ib *ib);
54562306a36Sopenharmony_cistruct radeon_fence *evergreen_copy_dma(struct radeon_device *rdev,
54662306a36Sopenharmony_ci					uint64_t src_offset, uint64_t dst_offset,
54762306a36Sopenharmony_ci					unsigned num_gpu_pages,
54862306a36Sopenharmony_ci					struct dma_resv *resv);
54962306a36Sopenharmony_ciint evergreen_get_temp(struct radeon_device *rdev);
55062306a36Sopenharmony_ciint evergreen_get_allowed_info_register(struct radeon_device *rdev,
55162306a36Sopenharmony_ci					u32 reg, u32 *val);
55262306a36Sopenharmony_ciint sumo_get_temp(struct radeon_device *rdev);
55362306a36Sopenharmony_ciint tn_get_temp(struct radeon_device *rdev);
55462306a36Sopenharmony_ciint cypress_dpm_init(struct radeon_device *rdev);
55562306a36Sopenharmony_civoid cypress_dpm_setup_asic(struct radeon_device *rdev);
55662306a36Sopenharmony_ciint cypress_dpm_enable(struct radeon_device *rdev);
55762306a36Sopenharmony_civoid cypress_dpm_disable(struct radeon_device *rdev);
55862306a36Sopenharmony_ciint cypress_dpm_set_power_state(struct radeon_device *rdev);
55962306a36Sopenharmony_civoid cypress_dpm_display_configuration_changed(struct radeon_device *rdev);
56062306a36Sopenharmony_civoid cypress_dpm_fini(struct radeon_device *rdev);
56162306a36Sopenharmony_cibool cypress_dpm_vblank_too_short(struct radeon_device *rdev);
56262306a36Sopenharmony_ciint btc_dpm_init(struct radeon_device *rdev);
56362306a36Sopenharmony_civoid btc_dpm_setup_asic(struct radeon_device *rdev);
56462306a36Sopenharmony_ciint btc_dpm_enable(struct radeon_device *rdev);
56562306a36Sopenharmony_civoid btc_dpm_disable(struct radeon_device *rdev);
56662306a36Sopenharmony_ciint btc_dpm_pre_set_power_state(struct radeon_device *rdev);
56762306a36Sopenharmony_ciint btc_dpm_set_power_state(struct radeon_device *rdev);
56862306a36Sopenharmony_civoid btc_dpm_post_set_power_state(struct radeon_device *rdev);
56962306a36Sopenharmony_civoid btc_dpm_fini(struct radeon_device *rdev);
57062306a36Sopenharmony_ciu32 btc_dpm_get_sclk(struct radeon_device *rdev, bool low);
57162306a36Sopenharmony_ciu32 btc_dpm_get_mclk(struct radeon_device *rdev, bool low);
57262306a36Sopenharmony_cibool btc_dpm_vblank_too_short(struct radeon_device *rdev);
57362306a36Sopenharmony_civoid btc_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
57462306a36Sopenharmony_ci						     struct seq_file *m);
57562306a36Sopenharmony_ciu32 btc_dpm_get_current_sclk(struct radeon_device *rdev);
57662306a36Sopenharmony_ciu32 btc_dpm_get_current_mclk(struct radeon_device *rdev);
57762306a36Sopenharmony_ciint sumo_dpm_init(struct radeon_device *rdev);
57862306a36Sopenharmony_ciint sumo_dpm_enable(struct radeon_device *rdev);
57962306a36Sopenharmony_ciint sumo_dpm_late_enable(struct radeon_device *rdev);
58062306a36Sopenharmony_civoid sumo_dpm_disable(struct radeon_device *rdev);
58162306a36Sopenharmony_ciint sumo_dpm_pre_set_power_state(struct radeon_device *rdev);
58262306a36Sopenharmony_ciint sumo_dpm_set_power_state(struct radeon_device *rdev);
58362306a36Sopenharmony_civoid sumo_dpm_post_set_power_state(struct radeon_device *rdev);
58462306a36Sopenharmony_civoid sumo_dpm_setup_asic(struct radeon_device *rdev);
58562306a36Sopenharmony_civoid sumo_dpm_display_configuration_changed(struct radeon_device *rdev);
58662306a36Sopenharmony_civoid sumo_dpm_fini(struct radeon_device *rdev);
58762306a36Sopenharmony_ciu32 sumo_dpm_get_sclk(struct radeon_device *rdev, bool low);
58862306a36Sopenharmony_ciu32 sumo_dpm_get_mclk(struct radeon_device *rdev, bool low);
58962306a36Sopenharmony_civoid sumo_dpm_print_power_state(struct radeon_device *rdev,
59062306a36Sopenharmony_ci				struct radeon_ps *ps);
59162306a36Sopenharmony_civoid sumo_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
59262306a36Sopenharmony_ci						      struct seq_file *m);
59362306a36Sopenharmony_ciint sumo_dpm_force_performance_level(struct radeon_device *rdev,
59462306a36Sopenharmony_ci				     enum radeon_dpm_forced_level level);
59562306a36Sopenharmony_ciu32 sumo_dpm_get_current_sclk(struct radeon_device *rdev);
59662306a36Sopenharmony_ciu32 sumo_dpm_get_current_mclk(struct radeon_device *rdev);
59762306a36Sopenharmony_ciu16 sumo_dpm_get_current_vddc(struct radeon_device *rdev);
59862306a36Sopenharmony_ci
59962306a36Sopenharmony_ci/*
60062306a36Sopenharmony_ci * cayman
60162306a36Sopenharmony_ci */
60262306a36Sopenharmony_civoid cayman_fence_ring_emit(struct radeon_device *rdev,
60362306a36Sopenharmony_ci			    struct radeon_fence *fence);
60462306a36Sopenharmony_civoid cayman_pcie_gart_tlb_flush(struct radeon_device *rdev);
60562306a36Sopenharmony_ciint cayman_init(struct radeon_device *rdev);
60662306a36Sopenharmony_civoid cayman_fini(struct radeon_device *rdev);
60762306a36Sopenharmony_ciint cayman_suspend(struct radeon_device *rdev);
60862306a36Sopenharmony_ciint cayman_resume(struct radeon_device *rdev);
60962306a36Sopenharmony_ciint cayman_asic_reset(struct radeon_device *rdev, bool hard);
61062306a36Sopenharmony_civoid cayman_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
61162306a36Sopenharmony_ciint cayman_vm_init(struct radeon_device *rdev);
61262306a36Sopenharmony_civoid cayman_vm_fini(struct radeon_device *rdev);
61362306a36Sopenharmony_civoid cayman_vm_flush(struct radeon_device *rdev, struct radeon_ring *ring,
61462306a36Sopenharmony_ci		     unsigned vm_id, uint64_t pd_addr);
61562306a36Sopenharmony_ciuint32_t cayman_vm_page_flags(struct radeon_device *rdev, uint32_t flags);
61662306a36Sopenharmony_ciint evergreen_ib_parse(struct radeon_device *rdev, struct radeon_ib *ib);
61762306a36Sopenharmony_ciint evergreen_dma_ib_parse(struct radeon_device *rdev, struct radeon_ib *ib);
61862306a36Sopenharmony_civoid cayman_dma_ring_ib_execute(struct radeon_device *rdev,
61962306a36Sopenharmony_ci				struct radeon_ib *ib);
62062306a36Sopenharmony_cibool cayman_gfx_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring);
62162306a36Sopenharmony_cibool cayman_dma_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring);
62262306a36Sopenharmony_ci
62362306a36Sopenharmony_civoid cayman_dma_vm_copy_pages(struct radeon_device *rdev,
62462306a36Sopenharmony_ci			      struct radeon_ib *ib,
62562306a36Sopenharmony_ci			      uint64_t pe, uint64_t src,
62662306a36Sopenharmony_ci			      unsigned count);
62762306a36Sopenharmony_civoid cayman_dma_vm_write_pages(struct radeon_device *rdev,
62862306a36Sopenharmony_ci			       struct radeon_ib *ib,
62962306a36Sopenharmony_ci			       uint64_t pe,
63062306a36Sopenharmony_ci			       uint64_t addr, unsigned count,
63162306a36Sopenharmony_ci			       uint32_t incr, uint32_t flags);
63262306a36Sopenharmony_civoid cayman_dma_vm_set_pages(struct radeon_device *rdev,
63362306a36Sopenharmony_ci			     struct radeon_ib *ib,
63462306a36Sopenharmony_ci			     uint64_t pe,
63562306a36Sopenharmony_ci			     uint64_t addr, unsigned count,
63662306a36Sopenharmony_ci			     uint32_t incr, uint32_t flags);
63762306a36Sopenharmony_civoid cayman_dma_vm_pad_ib(struct radeon_ib *ib);
63862306a36Sopenharmony_ci
63962306a36Sopenharmony_civoid cayman_dma_vm_flush(struct radeon_device *rdev, struct radeon_ring *ring,
64062306a36Sopenharmony_ci			 unsigned vm_id, uint64_t pd_addr);
64162306a36Sopenharmony_ci
64262306a36Sopenharmony_ciu32 cayman_gfx_get_rptr(struct radeon_device *rdev,
64362306a36Sopenharmony_ci			struct radeon_ring *ring);
64462306a36Sopenharmony_ciu32 cayman_gfx_get_wptr(struct radeon_device *rdev,
64562306a36Sopenharmony_ci			struct radeon_ring *ring);
64662306a36Sopenharmony_civoid cayman_gfx_set_wptr(struct radeon_device *rdev,
64762306a36Sopenharmony_ci			 struct radeon_ring *ring);
64862306a36Sopenharmony_ciuint32_t cayman_dma_get_rptr(struct radeon_device *rdev,
64962306a36Sopenharmony_ci			     struct radeon_ring *ring);
65062306a36Sopenharmony_ciuint32_t cayman_dma_get_wptr(struct radeon_device *rdev,
65162306a36Sopenharmony_ci			     struct radeon_ring *ring);
65262306a36Sopenharmony_civoid cayman_dma_set_wptr(struct radeon_device *rdev,
65362306a36Sopenharmony_ci			 struct radeon_ring *ring);
65462306a36Sopenharmony_ciint cayman_get_allowed_info_register(struct radeon_device *rdev,
65562306a36Sopenharmony_ci				     u32 reg, u32 *val);
65662306a36Sopenharmony_ci
65762306a36Sopenharmony_ciint ni_dpm_init(struct radeon_device *rdev);
65862306a36Sopenharmony_civoid ni_dpm_setup_asic(struct radeon_device *rdev);
65962306a36Sopenharmony_ciint ni_dpm_enable(struct radeon_device *rdev);
66062306a36Sopenharmony_civoid ni_dpm_disable(struct radeon_device *rdev);
66162306a36Sopenharmony_ciint ni_dpm_pre_set_power_state(struct radeon_device *rdev);
66262306a36Sopenharmony_ciint ni_dpm_set_power_state(struct radeon_device *rdev);
66362306a36Sopenharmony_civoid ni_dpm_post_set_power_state(struct radeon_device *rdev);
66462306a36Sopenharmony_civoid ni_dpm_fini(struct radeon_device *rdev);
66562306a36Sopenharmony_ciu32 ni_dpm_get_sclk(struct radeon_device *rdev, bool low);
66662306a36Sopenharmony_ciu32 ni_dpm_get_mclk(struct radeon_device *rdev, bool low);
66762306a36Sopenharmony_civoid ni_dpm_print_power_state(struct radeon_device *rdev,
66862306a36Sopenharmony_ci			      struct radeon_ps *ps);
66962306a36Sopenharmony_civoid ni_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
67062306a36Sopenharmony_ci						    struct seq_file *m);
67162306a36Sopenharmony_ciint ni_dpm_force_performance_level(struct radeon_device *rdev,
67262306a36Sopenharmony_ci				   enum radeon_dpm_forced_level level);
67362306a36Sopenharmony_cibool ni_dpm_vblank_too_short(struct radeon_device *rdev);
67462306a36Sopenharmony_ciu32 ni_dpm_get_current_sclk(struct radeon_device *rdev);
67562306a36Sopenharmony_ciu32 ni_dpm_get_current_mclk(struct radeon_device *rdev);
67662306a36Sopenharmony_ciint trinity_dpm_init(struct radeon_device *rdev);
67762306a36Sopenharmony_ciint trinity_dpm_enable(struct radeon_device *rdev);
67862306a36Sopenharmony_ciint trinity_dpm_late_enable(struct radeon_device *rdev);
67962306a36Sopenharmony_civoid trinity_dpm_disable(struct radeon_device *rdev);
68062306a36Sopenharmony_ciint trinity_dpm_pre_set_power_state(struct radeon_device *rdev);
68162306a36Sopenharmony_ciint trinity_dpm_set_power_state(struct radeon_device *rdev);
68262306a36Sopenharmony_civoid trinity_dpm_post_set_power_state(struct radeon_device *rdev);
68362306a36Sopenharmony_civoid trinity_dpm_setup_asic(struct radeon_device *rdev);
68462306a36Sopenharmony_civoid trinity_dpm_display_configuration_changed(struct radeon_device *rdev);
68562306a36Sopenharmony_civoid trinity_dpm_fini(struct radeon_device *rdev);
68662306a36Sopenharmony_ciu32 trinity_dpm_get_sclk(struct radeon_device *rdev, bool low);
68762306a36Sopenharmony_ciu32 trinity_dpm_get_mclk(struct radeon_device *rdev, bool low);
68862306a36Sopenharmony_civoid trinity_dpm_print_power_state(struct radeon_device *rdev,
68962306a36Sopenharmony_ci				   struct radeon_ps *ps);
69062306a36Sopenharmony_civoid trinity_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
69162306a36Sopenharmony_ci							 struct seq_file *m);
69262306a36Sopenharmony_ciint trinity_dpm_force_performance_level(struct radeon_device *rdev,
69362306a36Sopenharmony_ci					enum radeon_dpm_forced_level level);
69462306a36Sopenharmony_civoid trinity_dpm_enable_bapm(struct radeon_device *rdev, bool enable);
69562306a36Sopenharmony_ciu32 trinity_dpm_get_current_sclk(struct radeon_device *rdev);
69662306a36Sopenharmony_ciu32 trinity_dpm_get_current_mclk(struct radeon_device *rdev);
69762306a36Sopenharmony_ciint tn_set_vce_clocks(struct radeon_device *rdev, u32 evclk, u32 ecclk);
69862306a36Sopenharmony_ci
69962306a36Sopenharmony_ci/* DCE6 - SI */
70062306a36Sopenharmony_civoid dce6_bandwidth_update(struct radeon_device *rdev);
70162306a36Sopenharmony_civoid dce6_audio_fini(struct radeon_device *rdev);
70262306a36Sopenharmony_ci
70362306a36Sopenharmony_ci/*
70462306a36Sopenharmony_ci * si
70562306a36Sopenharmony_ci */
70662306a36Sopenharmony_civoid si_fence_ring_emit(struct radeon_device *rdev,
70762306a36Sopenharmony_ci			struct radeon_fence *fence);
70862306a36Sopenharmony_civoid si_pcie_gart_tlb_flush(struct radeon_device *rdev);
70962306a36Sopenharmony_ciint si_init(struct radeon_device *rdev);
71062306a36Sopenharmony_civoid si_fini(struct radeon_device *rdev);
71162306a36Sopenharmony_ciint si_suspend(struct radeon_device *rdev);
71262306a36Sopenharmony_ciint si_resume(struct radeon_device *rdev);
71362306a36Sopenharmony_cibool si_gfx_is_lockup(struct radeon_device *rdev, struct radeon_ring *cp);
71462306a36Sopenharmony_cibool si_dma_is_lockup(struct radeon_device *rdev, struct radeon_ring *cp);
71562306a36Sopenharmony_ciint si_asic_reset(struct radeon_device *rdev, bool hard);
71662306a36Sopenharmony_civoid si_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
71762306a36Sopenharmony_ciint si_irq_set(struct radeon_device *rdev);
71862306a36Sopenharmony_ciint si_irq_process(struct radeon_device *rdev);
71962306a36Sopenharmony_ciint si_vm_init(struct radeon_device *rdev);
72062306a36Sopenharmony_civoid si_vm_fini(struct radeon_device *rdev);
72162306a36Sopenharmony_civoid si_vm_flush(struct radeon_device *rdev, struct radeon_ring *ring,
72262306a36Sopenharmony_ci		 unsigned vm_id, uint64_t pd_addr);
72362306a36Sopenharmony_ciint si_ib_parse(struct radeon_device *rdev, struct radeon_ib *ib);
72462306a36Sopenharmony_cistruct radeon_fence *si_copy_dma(struct radeon_device *rdev,
72562306a36Sopenharmony_ci				 uint64_t src_offset, uint64_t dst_offset,
72662306a36Sopenharmony_ci				 unsigned num_gpu_pages,
72762306a36Sopenharmony_ci				 struct dma_resv *resv);
72862306a36Sopenharmony_ci
72962306a36Sopenharmony_civoid si_dma_vm_copy_pages(struct radeon_device *rdev,
73062306a36Sopenharmony_ci			  struct radeon_ib *ib,
73162306a36Sopenharmony_ci			  uint64_t pe, uint64_t src,
73262306a36Sopenharmony_ci			  unsigned count);
73362306a36Sopenharmony_civoid si_dma_vm_write_pages(struct radeon_device *rdev,
73462306a36Sopenharmony_ci			   struct radeon_ib *ib,
73562306a36Sopenharmony_ci			   uint64_t pe,
73662306a36Sopenharmony_ci			   uint64_t addr, unsigned count,
73762306a36Sopenharmony_ci			   uint32_t incr, uint32_t flags);
73862306a36Sopenharmony_civoid si_dma_vm_set_pages(struct radeon_device *rdev,
73962306a36Sopenharmony_ci			 struct radeon_ib *ib,
74062306a36Sopenharmony_ci			 uint64_t pe,
74162306a36Sopenharmony_ci			 uint64_t addr, unsigned count,
74262306a36Sopenharmony_ci			 uint32_t incr, uint32_t flags);
74362306a36Sopenharmony_ci
74462306a36Sopenharmony_civoid si_dma_vm_flush(struct radeon_device *rdev, struct radeon_ring *ring,
74562306a36Sopenharmony_ci		     unsigned vm_id, uint64_t pd_addr);
74662306a36Sopenharmony_ciu32 si_get_xclk(struct radeon_device *rdev);
74762306a36Sopenharmony_ciuint64_t si_get_gpu_clock_counter(struct radeon_device *rdev);
74862306a36Sopenharmony_ciint si_set_uvd_clocks(struct radeon_device *rdev, u32 vclk, u32 dclk);
74962306a36Sopenharmony_ciint si_set_vce_clocks(struct radeon_device *rdev, u32 evclk, u32 ecclk);
75062306a36Sopenharmony_ciint si_get_temp(struct radeon_device *rdev);
75162306a36Sopenharmony_ciint si_get_allowed_info_register(struct radeon_device *rdev,
75262306a36Sopenharmony_ci				 u32 reg, u32 *val);
75362306a36Sopenharmony_ciint si_dpm_init(struct radeon_device *rdev);
75462306a36Sopenharmony_civoid si_dpm_setup_asic(struct radeon_device *rdev);
75562306a36Sopenharmony_ciint si_dpm_enable(struct radeon_device *rdev);
75662306a36Sopenharmony_ciint si_dpm_late_enable(struct radeon_device *rdev);
75762306a36Sopenharmony_civoid si_dpm_disable(struct radeon_device *rdev);
75862306a36Sopenharmony_ciint si_dpm_pre_set_power_state(struct radeon_device *rdev);
75962306a36Sopenharmony_ciint si_dpm_set_power_state(struct radeon_device *rdev);
76062306a36Sopenharmony_civoid si_dpm_post_set_power_state(struct radeon_device *rdev);
76162306a36Sopenharmony_civoid si_dpm_fini(struct radeon_device *rdev);
76262306a36Sopenharmony_civoid si_dpm_display_configuration_changed(struct radeon_device *rdev);
76362306a36Sopenharmony_civoid si_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
76462306a36Sopenharmony_ci						    struct seq_file *m);
76562306a36Sopenharmony_ciint si_dpm_force_performance_level(struct radeon_device *rdev,
76662306a36Sopenharmony_ci				   enum radeon_dpm_forced_level level);
76762306a36Sopenharmony_ciint si_fan_ctrl_get_fan_speed_percent(struct radeon_device *rdev,
76862306a36Sopenharmony_ci						 u32 *speed);
76962306a36Sopenharmony_ciint si_fan_ctrl_set_fan_speed_percent(struct radeon_device *rdev,
77062306a36Sopenharmony_ci						 u32 speed);
77162306a36Sopenharmony_ciu32 si_fan_ctrl_get_mode(struct radeon_device *rdev);
77262306a36Sopenharmony_civoid si_fan_ctrl_set_mode(struct radeon_device *rdev, u32 mode);
77362306a36Sopenharmony_ciu32 si_dpm_get_current_sclk(struct radeon_device *rdev);
77462306a36Sopenharmony_ciu32 si_dpm_get_current_mclk(struct radeon_device *rdev);
77562306a36Sopenharmony_ci
77662306a36Sopenharmony_ci/* DCE8 - CIK */
77762306a36Sopenharmony_civoid dce8_bandwidth_update(struct radeon_device *rdev);
77862306a36Sopenharmony_ci
77962306a36Sopenharmony_ci/*
78062306a36Sopenharmony_ci * cik
78162306a36Sopenharmony_ci */
78262306a36Sopenharmony_ciuint64_t cik_get_gpu_clock_counter(struct radeon_device *rdev);
78362306a36Sopenharmony_ciu32 cik_get_xclk(struct radeon_device *rdev);
78462306a36Sopenharmony_ciuint32_t cik_pciep_rreg(struct radeon_device *rdev, uint32_t reg);
78562306a36Sopenharmony_civoid cik_pciep_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
78662306a36Sopenharmony_ciint cik_set_uvd_clocks(struct radeon_device *rdev, u32 vclk, u32 dclk);
78762306a36Sopenharmony_ciint cik_set_vce_clocks(struct radeon_device *rdev, u32 evclk, u32 ecclk);
78862306a36Sopenharmony_civoid cik_sdma_fence_ring_emit(struct radeon_device *rdev,
78962306a36Sopenharmony_ci			      struct radeon_fence *fence);
79062306a36Sopenharmony_cibool cik_sdma_semaphore_ring_emit(struct radeon_device *rdev,
79162306a36Sopenharmony_ci				  struct radeon_ring *ring,
79262306a36Sopenharmony_ci				  struct radeon_semaphore *semaphore,
79362306a36Sopenharmony_ci				  bool emit_wait);
79462306a36Sopenharmony_civoid cik_sdma_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
79562306a36Sopenharmony_cistruct radeon_fence *cik_copy_dma(struct radeon_device *rdev,
79662306a36Sopenharmony_ci				  uint64_t src_offset, uint64_t dst_offset,
79762306a36Sopenharmony_ci				  unsigned num_gpu_pages,
79862306a36Sopenharmony_ci				  struct dma_resv *resv);
79962306a36Sopenharmony_cistruct radeon_fence *cik_copy_cpdma(struct radeon_device *rdev,
80062306a36Sopenharmony_ci				    uint64_t src_offset, uint64_t dst_offset,
80162306a36Sopenharmony_ci				    unsigned num_gpu_pages,
80262306a36Sopenharmony_ci				    struct dma_resv *resv);
80362306a36Sopenharmony_ciint cik_sdma_ring_test(struct radeon_device *rdev, struct radeon_ring *ring);
80462306a36Sopenharmony_ciint cik_sdma_ib_test(struct radeon_device *rdev, struct radeon_ring *ring);
80562306a36Sopenharmony_cibool cik_sdma_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring);
80662306a36Sopenharmony_civoid cik_fence_gfx_ring_emit(struct radeon_device *rdev,
80762306a36Sopenharmony_ci			     struct radeon_fence *fence);
80862306a36Sopenharmony_civoid cik_fence_compute_ring_emit(struct radeon_device *rdev,
80962306a36Sopenharmony_ci				 struct radeon_fence *fence);
81062306a36Sopenharmony_cibool cik_semaphore_ring_emit(struct radeon_device *rdev,
81162306a36Sopenharmony_ci			     struct radeon_ring *cp,
81262306a36Sopenharmony_ci			     struct radeon_semaphore *semaphore,
81362306a36Sopenharmony_ci			     bool emit_wait);
81462306a36Sopenharmony_civoid cik_pcie_gart_tlb_flush(struct radeon_device *rdev);
81562306a36Sopenharmony_ciint cik_init(struct radeon_device *rdev);
81662306a36Sopenharmony_civoid cik_fini(struct radeon_device *rdev);
81762306a36Sopenharmony_ciint cik_suspend(struct radeon_device *rdev);
81862306a36Sopenharmony_ciint cik_resume(struct radeon_device *rdev);
81962306a36Sopenharmony_cibool cik_gfx_is_lockup(struct radeon_device *rdev, struct radeon_ring *cp);
82062306a36Sopenharmony_ciint cik_asic_reset(struct radeon_device *rdev, bool hard);
82162306a36Sopenharmony_civoid cik_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
82262306a36Sopenharmony_ciint cik_ring_test(struct radeon_device *rdev, struct radeon_ring *ring);
82362306a36Sopenharmony_ciint cik_ib_test(struct radeon_device *rdev, struct radeon_ring *ring);
82462306a36Sopenharmony_ciint cik_irq_set(struct radeon_device *rdev);
82562306a36Sopenharmony_ciint cik_irq_process(struct radeon_device *rdev);
82662306a36Sopenharmony_ciint cik_vm_init(struct radeon_device *rdev);
82762306a36Sopenharmony_civoid cik_vm_fini(struct radeon_device *rdev);
82862306a36Sopenharmony_civoid cik_vm_flush(struct radeon_device *rdev, struct radeon_ring *ring,
82962306a36Sopenharmony_ci		  unsigned vm_id, uint64_t pd_addr);
83062306a36Sopenharmony_ci
83162306a36Sopenharmony_civoid cik_sdma_vm_copy_pages(struct radeon_device *rdev,
83262306a36Sopenharmony_ci			    struct radeon_ib *ib,
83362306a36Sopenharmony_ci			    uint64_t pe, uint64_t src,
83462306a36Sopenharmony_ci			    unsigned count);
83562306a36Sopenharmony_civoid cik_sdma_vm_write_pages(struct radeon_device *rdev,
83662306a36Sopenharmony_ci			     struct radeon_ib *ib,
83762306a36Sopenharmony_ci			     uint64_t pe,
83862306a36Sopenharmony_ci			     uint64_t addr, unsigned count,
83962306a36Sopenharmony_ci			     uint32_t incr, uint32_t flags);
84062306a36Sopenharmony_civoid cik_sdma_vm_set_pages(struct radeon_device *rdev,
84162306a36Sopenharmony_ci			   struct radeon_ib *ib,
84262306a36Sopenharmony_ci			   uint64_t pe,
84362306a36Sopenharmony_ci			   uint64_t addr, unsigned count,
84462306a36Sopenharmony_ci			   uint32_t incr, uint32_t flags);
84562306a36Sopenharmony_civoid cik_sdma_vm_pad_ib(struct radeon_ib *ib);
84662306a36Sopenharmony_ci
84762306a36Sopenharmony_civoid cik_dma_vm_flush(struct radeon_device *rdev, struct radeon_ring *ring,
84862306a36Sopenharmony_ci		      unsigned vm_id, uint64_t pd_addr);
84962306a36Sopenharmony_ciint cik_ib_parse(struct radeon_device *rdev, struct radeon_ib *ib);
85062306a36Sopenharmony_ciu32 cik_gfx_get_rptr(struct radeon_device *rdev,
85162306a36Sopenharmony_ci		     struct radeon_ring *ring);
85262306a36Sopenharmony_ciu32 cik_gfx_get_wptr(struct radeon_device *rdev,
85362306a36Sopenharmony_ci		     struct radeon_ring *ring);
85462306a36Sopenharmony_civoid cik_gfx_set_wptr(struct radeon_device *rdev,
85562306a36Sopenharmony_ci		      struct radeon_ring *ring);
85662306a36Sopenharmony_ciu32 cik_compute_get_rptr(struct radeon_device *rdev,
85762306a36Sopenharmony_ci			 struct radeon_ring *ring);
85862306a36Sopenharmony_ciu32 cik_compute_get_wptr(struct radeon_device *rdev,
85962306a36Sopenharmony_ci			 struct radeon_ring *ring);
86062306a36Sopenharmony_civoid cik_compute_set_wptr(struct radeon_device *rdev,
86162306a36Sopenharmony_ci			  struct radeon_ring *ring);
86262306a36Sopenharmony_ciu32 cik_sdma_get_rptr(struct radeon_device *rdev,
86362306a36Sopenharmony_ci		      struct radeon_ring *ring);
86462306a36Sopenharmony_ciu32 cik_sdma_get_wptr(struct radeon_device *rdev,
86562306a36Sopenharmony_ci		      struct radeon_ring *ring);
86662306a36Sopenharmony_civoid cik_sdma_set_wptr(struct radeon_device *rdev,
86762306a36Sopenharmony_ci		       struct radeon_ring *ring);
86862306a36Sopenharmony_ciint ci_get_temp(struct radeon_device *rdev);
86962306a36Sopenharmony_ciint kv_get_temp(struct radeon_device *rdev);
87062306a36Sopenharmony_ciint cik_get_allowed_info_register(struct radeon_device *rdev,
87162306a36Sopenharmony_ci				  u32 reg, u32 *val);
87262306a36Sopenharmony_ci
87362306a36Sopenharmony_ciint ci_dpm_init(struct radeon_device *rdev);
87462306a36Sopenharmony_ciint ci_dpm_enable(struct radeon_device *rdev);
87562306a36Sopenharmony_ciint ci_dpm_late_enable(struct radeon_device *rdev);
87662306a36Sopenharmony_civoid ci_dpm_disable(struct radeon_device *rdev);
87762306a36Sopenharmony_ciint ci_dpm_pre_set_power_state(struct radeon_device *rdev);
87862306a36Sopenharmony_ciint ci_dpm_set_power_state(struct radeon_device *rdev);
87962306a36Sopenharmony_civoid ci_dpm_post_set_power_state(struct radeon_device *rdev);
88062306a36Sopenharmony_civoid ci_dpm_setup_asic(struct radeon_device *rdev);
88162306a36Sopenharmony_civoid ci_dpm_display_configuration_changed(struct radeon_device *rdev);
88262306a36Sopenharmony_civoid ci_dpm_fini(struct radeon_device *rdev);
88362306a36Sopenharmony_ciu32 ci_dpm_get_sclk(struct radeon_device *rdev, bool low);
88462306a36Sopenharmony_ciu32 ci_dpm_get_mclk(struct radeon_device *rdev, bool low);
88562306a36Sopenharmony_civoid ci_dpm_print_power_state(struct radeon_device *rdev,
88662306a36Sopenharmony_ci			      struct radeon_ps *ps);
88762306a36Sopenharmony_civoid ci_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
88862306a36Sopenharmony_ci						    struct seq_file *m);
88962306a36Sopenharmony_ciint ci_dpm_force_performance_level(struct radeon_device *rdev,
89062306a36Sopenharmony_ci				   enum radeon_dpm_forced_level level);
89162306a36Sopenharmony_cibool ci_dpm_vblank_too_short(struct radeon_device *rdev);
89262306a36Sopenharmony_civoid ci_dpm_powergate_uvd(struct radeon_device *rdev, bool gate);
89362306a36Sopenharmony_ciu32 ci_dpm_get_current_sclk(struct radeon_device *rdev);
89462306a36Sopenharmony_ciu32 ci_dpm_get_current_mclk(struct radeon_device *rdev);
89562306a36Sopenharmony_ci
89662306a36Sopenharmony_ciint ci_fan_ctrl_get_fan_speed_percent(struct radeon_device *rdev,
89762306a36Sopenharmony_ci						 u32 *speed);
89862306a36Sopenharmony_ciint ci_fan_ctrl_set_fan_speed_percent(struct radeon_device *rdev,
89962306a36Sopenharmony_ci						 u32 speed);
90062306a36Sopenharmony_ciu32 ci_fan_ctrl_get_mode(struct radeon_device *rdev);
90162306a36Sopenharmony_civoid ci_fan_ctrl_set_mode(struct radeon_device *rdev, u32 mode);
90262306a36Sopenharmony_ci
90362306a36Sopenharmony_ciint kv_dpm_init(struct radeon_device *rdev);
90462306a36Sopenharmony_ciint kv_dpm_enable(struct radeon_device *rdev);
90562306a36Sopenharmony_ciint kv_dpm_late_enable(struct radeon_device *rdev);
90662306a36Sopenharmony_civoid kv_dpm_disable(struct radeon_device *rdev);
90762306a36Sopenharmony_ciint kv_dpm_pre_set_power_state(struct radeon_device *rdev);
90862306a36Sopenharmony_ciint kv_dpm_set_power_state(struct radeon_device *rdev);
90962306a36Sopenharmony_civoid kv_dpm_post_set_power_state(struct radeon_device *rdev);
91062306a36Sopenharmony_civoid kv_dpm_setup_asic(struct radeon_device *rdev);
91162306a36Sopenharmony_civoid kv_dpm_display_configuration_changed(struct radeon_device *rdev);
91262306a36Sopenharmony_civoid kv_dpm_fini(struct radeon_device *rdev);
91362306a36Sopenharmony_ciu32 kv_dpm_get_sclk(struct radeon_device *rdev, bool low);
91462306a36Sopenharmony_ciu32 kv_dpm_get_mclk(struct radeon_device *rdev, bool low);
91562306a36Sopenharmony_civoid kv_dpm_print_power_state(struct radeon_device *rdev,
91662306a36Sopenharmony_ci			      struct radeon_ps *ps);
91762306a36Sopenharmony_civoid kv_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
91862306a36Sopenharmony_ci						    struct seq_file *m);
91962306a36Sopenharmony_ciint kv_dpm_force_performance_level(struct radeon_device *rdev,
92062306a36Sopenharmony_ci				   enum radeon_dpm_forced_level level);
92162306a36Sopenharmony_civoid kv_dpm_powergate_uvd(struct radeon_device *rdev, bool gate);
92262306a36Sopenharmony_civoid kv_dpm_enable_bapm(struct radeon_device *rdev, bool enable);
92362306a36Sopenharmony_ciu32 kv_dpm_get_current_sclk(struct radeon_device *rdev);
92462306a36Sopenharmony_ciu32 kv_dpm_get_current_mclk(struct radeon_device *rdev);
92562306a36Sopenharmony_ci
92662306a36Sopenharmony_ci/* uvd v1.0 */
92762306a36Sopenharmony_ciuint32_t uvd_v1_0_get_rptr(struct radeon_device *rdev,
92862306a36Sopenharmony_ci                           struct radeon_ring *ring);
92962306a36Sopenharmony_ciuint32_t uvd_v1_0_get_wptr(struct radeon_device *rdev,
93062306a36Sopenharmony_ci                           struct radeon_ring *ring);
93162306a36Sopenharmony_civoid uvd_v1_0_set_wptr(struct radeon_device *rdev,
93262306a36Sopenharmony_ci                       struct radeon_ring *ring);
93362306a36Sopenharmony_ciint uvd_v1_0_resume(struct radeon_device *rdev);
93462306a36Sopenharmony_ci
93562306a36Sopenharmony_ciint uvd_v1_0_init(struct radeon_device *rdev);
93662306a36Sopenharmony_civoid uvd_v1_0_fini(struct radeon_device *rdev);
93762306a36Sopenharmony_ciint uvd_v1_0_start(struct radeon_device *rdev);
93862306a36Sopenharmony_civoid uvd_v1_0_stop(struct radeon_device *rdev);
93962306a36Sopenharmony_ci
94062306a36Sopenharmony_ciint uvd_v1_0_ring_test(struct radeon_device *rdev, struct radeon_ring *ring);
94162306a36Sopenharmony_civoid uvd_v1_0_fence_emit(struct radeon_device *rdev,
94262306a36Sopenharmony_ci			 struct radeon_fence *fence);
94362306a36Sopenharmony_ciint uvd_v1_0_ib_test(struct radeon_device *rdev, struct radeon_ring *ring);
94462306a36Sopenharmony_cibool uvd_v1_0_semaphore_emit(struct radeon_device *rdev,
94562306a36Sopenharmony_ci			     struct radeon_ring *ring,
94662306a36Sopenharmony_ci			     struct radeon_semaphore *semaphore,
94762306a36Sopenharmony_ci			     bool emit_wait);
94862306a36Sopenharmony_civoid uvd_v1_0_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
94962306a36Sopenharmony_ci
95062306a36Sopenharmony_ci/* uvd v2.2 */
95162306a36Sopenharmony_ciint uvd_v2_2_resume(struct radeon_device *rdev);
95262306a36Sopenharmony_civoid uvd_v2_2_fence_emit(struct radeon_device *rdev,
95362306a36Sopenharmony_ci			 struct radeon_fence *fence);
95462306a36Sopenharmony_cibool uvd_v2_2_semaphore_emit(struct radeon_device *rdev,
95562306a36Sopenharmony_ci			     struct radeon_ring *ring,
95662306a36Sopenharmony_ci			     struct radeon_semaphore *semaphore,
95762306a36Sopenharmony_ci			     bool emit_wait);
95862306a36Sopenharmony_ci
95962306a36Sopenharmony_ci/* uvd v3.1 */
96062306a36Sopenharmony_cibool uvd_v3_1_semaphore_emit(struct radeon_device *rdev,
96162306a36Sopenharmony_ci			     struct radeon_ring *ring,
96262306a36Sopenharmony_ci			     struct radeon_semaphore *semaphore,
96362306a36Sopenharmony_ci			     bool emit_wait);
96462306a36Sopenharmony_ci
96562306a36Sopenharmony_ci/* uvd v4.2 */
96662306a36Sopenharmony_ciint uvd_v4_2_resume(struct radeon_device *rdev);
96762306a36Sopenharmony_ci
96862306a36Sopenharmony_ci/* vce v1.0 */
96962306a36Sopenharmony_ciuint32_t vce_v1_0_get_rptr(struct radeon_device *rdev,
97062306a36Sopenharmony_ci			   struct radeon_ring *ring);
97162306a36Sopenharmony_ciuint32_t vce_v1_0_get_wptr(struct radeon_device *rdev,
97262306a36Sopenharmony_ci			   struct radeon_ring *ring);
97362306a36Sopenharmony_civoid vce_v1_0_set_wptr(struct radeon_device *rdev,
97462306a36Sopenharmony_ci		       struct radeon_ring *ring);
97562306a36Sopenharmony_ciint vce_v1_0_load_fw(struct radeon_device *rdev, uint32_t *data);
97662306a36Sopenharmony_ciunsigned vce_v1_0_bo_size(struct radeon_device *rdev);
97762306a36Sopenharmony_ciint vce_v1_0_resume(struct radeon_device *rdev);
97862306a36Sopenharmony_ciint vce_v1_0_init(struct radeon_device *rdev);
97962306a36Sopenharmony_ciint vce_v1_0_start(struct radeon_device *rdev);
98062306a36Sopenharmony_ci
98162306a36Sopenharmony_ci/* vce v2.0 */
98262306a36Sopenharmony_ciunsigned vce_v2_0_bo_size(struct radeon_device *rdev);
98362306a36Sopenharmony_ciint vce_v2_0_resume(struct radeon_device *rdev);
98462306a36Sopenharmony_ci
98562306a36Sopenharmony_ci#endif
986