aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/radeon.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon.h')
-rw-r--r--drivers/gpu/drm/radeon/radeon.h296
1 files changed, 196 insertions, 100 deletions
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index 1668ec1ee770..138b95216d8d 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -236,12 +236,15 @@ void radeon_pm_resume(struct radeon_device *rdev);
236void radeon_combios_get_power_modes(struct radeon_device *rdev); 236void radeon_combios_get_power_modes(struct radeon_device *rdev);
237void radeon_atombios_get_power_modes(struct radeon_device *rdev); 237void radeon_atombios_get_power_modes(struct radeon_device *rdev);
238void radeon_atom_set_voltage(struct radeon_device *rdev, u16 voltage_level, u8 voltage_type); 238void radeon_atom_set_voltage(struct radeon_device *rdev, u16 voltage_level, u8 voltage_type);
239int radeon_atom_get_max_vddc(struct radeon_device *rdev, u16 *voltage);
240void rs690_pm_info(struct radeon_device *rdev); 239void rs690_pm_info(struct radeon_device *rdev);
241extern int rv6xx_get_temp(struct radeon_device *rdev); 240extern int rv6xx_get_temp(struct radeon_device *rdev);
242extern int rv770_get_temp(struct radeon_device *rdev); 241extern int rv770_get_temp(struct radeon_device *rdev);
243extern int evergreen_get_temp(struct radeon_device *rdev); 242extern int evergreen_get_temp(struct radeon_device *rdev);
244extern int sumo_get_temp(struct radeon_device *rdev); 243extern int sumo_get_temp(struct radeon_device *rdev);
244extern int si_get_temp(struct radeon_device *rdev);
245extern void evergreen_tiling_fields(unsigned tiling_flags, unsigned *bankw,
246 unsigned *bankh, unsigned *mtaspect,
247 unsigned *tile_split);
245 248
246/* 249/*
247 * Fences. 250 * Fences.
@@ -411,9 +414,6 @@ int radeon_gem_object_create(struct radeon_device *rdev, int size,
411 int alignment, int initial_domain, 414 int alignment, int initial_domain,
412 bool discardable, bool kernel, 415 bool discardable, bool kernel,
413 struct drm_gem_object **obj); 416 struct drm_gem_object **obj);
414int radeon_gem_object_pin(struct drm_gem_object *obj, uint32_t pin_domain,
415 uint64_t *gpu_addr);
416void radeon_gem_object_unpin(struct drm_gem_object *obj);
417 417
418int radeon_mode_dumb_create(struct drm_file *file_priv, 418int radeon_mode_dumb_create(struct drm_file *file_priv,
419 struct drm_device *dev, 419 struct drm_device *dev,
@@ -632,6 +632,7 @@ struct radeon_ib {
632 uint32_t *ptr; 632 uint32_t *ptr;
633 struct radeon_fence *fence; 633 struct radeon_fence *fence;
634 unsigned vm_id; 634 unsigned vm_id;
635 bool is_const_ib;
635}; 636};
636 637
637/* 638/*
@@ -771,6 +772,18 @@ struct r600_blit {
771 772
772void r600_blit_suspend(struct radeon_device *rdev); 773void r600_blit_suspend(struct radeon_device *rdev);
773 774
775/*
776 * SI RLC stuff
777 */
778struct si_rlc {
779 /* for power gating */
780 struct radeon_bo *save_restore_obj;
781 uint64_t save_restore_gpu_addr;
782 /* for clear state */
783 struct radeon_bo *clear_state_obj;
784 uint64_t clear_state_gpu_addr;
785};
786
774int radeon_ib_get(struct radeon_device *rdev, int ring, 787int radeon_ib_get(struct radeon_device *rdev, int ring,
775 struct radeon_ib **ib, unsigned size); 788 struct radeon_ib **ib, unsigned size);
776void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib **ib); 789void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib **ib);
@@ -780,7 +793,6 @@ int radeon_ib_pool_init(struct radeon_device *rdev);
780void radeon_ib_pool_fini(struct radeon_device *rdev); 793void radeon_ib_pool_fini(struct radeon_device *rdev);
781int radeon_ib_pool_start(struct radeon_device *rdev); 794int radeon_ib_pool_start(struct radeon_device *rdev);
782int radeon_ib_pool_suspend(struct radeon_device *rdev); 795int radeon_ib_pool_suspend(struct radeon_device *rdev);
783int radeon_ib_test(struct radeon_device *rdev);
784/* Ring access between begin & end cannot sleep */ 796/* Ring access between begin & end cannot sleep */
785int radeon_ring_index(struct radeon_device *rdev, struct radeon_ring *cp); 797int radeon_ring_index(struct radeon_device *rdev, struct radeon_ring *cp);
786void radeon_ring_free_size(struct radeon_device *rdev, struct radeon_ring *cp); 798void radeon_ring_free_size(struct radeon_device *rdev, struct radeon_ring *cp);
@@ -833,12 +845,13 @@ struct radeon_cs_parser {
833 struct radeon_cs_reloc *relocs; 845 struct radeon_cs_reloc *relocs;
834 struct radeon_cs_reloc **relocs_ptr; 846 struct radeon_cs_reloc **relocs_ptr;
835 struct list_head validated; 847 struct list_head validated;
836 bool sync_to_ring[RADEON_NUM_RINGS];
837 /* indices of various chunks */ 848 /* indices of various chunks */
838 int chunk_ib_idx; 849 int chunk_ib_idx;
839 int chunk_relocs_idx; 850 int chunk_relocs_idx;
840 int chunk_flags_idx; 851 int chunk_flags_idx;
852 int chunk_const_ib_idx;
841 struct radeon_ib *ib; 853 struct radeon_ib *ib;
854 struct radeon_ib *const_ib;
842 void *track; 855 void *track;
843 unsigned family; 856 unsigned family;
844 int parser_error; 857 int parser_error;
@@ -980,6 +993,7 @@ enum radeon_int_thermal_type {
980 THERMAL_TYPE_EVERGREEN, 993 THERMAL_TYPE_EVERGREEN,
981 THERMAL_TYPE_SUMO, 994 THERMAL_TYPE_SUMO,
982 THERMAL_TYPE_NI, 995 THERMAL_TYPE_NI,
996 THERMAL_TYPE_SI,
983}; 997};
984 998
985struct radeon_voltage { 999struct radeon_voltage {
@@ -1132,57 +1146,6 @@ struct radeon_asic {
1132 void (*vga_set_state)(struct radeon_device *rdev, bool state); 1146 void (*vga_set_state)(struct radeon_device *rdev, bool state);
1133 bool (*gpu_is_lockup)(struct radeon_device *rdev, struct radeon_ring *cp); 1147 bool (*gpu_is_lockup)(struct radeon_device *rdev, struct radeon_ring *cp);
1134 int (*asic_reset)(struct radeon_device *rdev); 1148 int (*asic_reset)(struct radeon_device *rdev);
1135 void (*gart_tlb_flush)(struct radeon_device *rdev);
1136 int (*gart_set_page)(struct radeon_device *rdev, int i, uint64_t addr);
1137 int (*cp_init)(struct radeon_device *rdev, unsigned ring_size);
1138 void (*cp_fini)(struct radeon_device *rdev);
1139 void (*cp_disable)(struct radeon_device *rdev);
1140 void (*ring_start)(struct radeon_device *rdev);
1141
1142 struct {
1143 void (*ib_execute)(struct radeon_device *rdev, struct radeon_ib *ib);
1144 int (*ib_parse)(struct radeon_device *rdev, struct radeon_ib *ib);
1145 void (*emit_fence)(struct radeon_device *rdev, struct radeon_fence *fence);
1146 void (*emit_semaphore)(struct radeon_device *rdev, struct radeon_ring *cp,
1147 struct radeon_semaphore *semaphore, bool emit_wait);
1148 } ring[RADEON_NUM_RINGS];
1149
1150 int (*ring_test)(struct radeon_device *rdev, struct radeon_ring *cp);
1151 int (*irq_set)(struct radeon_device *rdev);
1152 int (*irq_process)(struct radeon_device *rdev);
1153 u32 (*get_vblank_counter)(struct radeon_device *rdev, int crtc);
1154 int (*cs_parse)(struct radeon_cs_parser *p);
1155 int (*copy_blit)(struct radeon_device *rdev,
1156 uint64_t src_offset,
1157 uint64_t dst_offset,
1158 unsigned num_gpu_pages,
1159 struct radeon_fence *fence);
1160 int (*copy_dma)(struct radeon_device *rdev,
1161 uint64_t src_offset,
1162 uint64_t dst_offset,
1163 unsigned num_gpu_pages,
1164 struct radeon_fence *fence);
1165 int (*copy)(struct radeon_device *rdev,
1166 uint64_t src_offset,
1167 uint64_t dst_offset,
1168 unsigned num_gpu_pages,
1169 struct radeon_fence *fence);
1170 uint32_t (*get_engine_clock)(struct radeon_device *rdev);
1171 void (*set_engine_clock)(struct radeon_device *rdev, uint32_t eng_clock);
1172 uint32_t (*get_memory_clock)(struct radeon_device *rdev);
1173 void (*set_memory_clock)(struct radeon_device *rdev, uint32_t mem_clock);
1174 int (*get_pcie_lanes)(struct radeon_device *rdev);
1175 void (*set_pcie_lanes)(struct radeon_device *rdev, int lanes);
1176 void (*set_clock_gating)(struct radeon_device *rdev, int enable);
1177 int (*set_surface_reg)(struct radeon_device *rdev, int reg,
1178 uint32_t tiling_flags, uint32_t pitch,
1179 uint32_t offset, uint32_t obj_size);
1180 void (*clear_surface_reg)(struct radeon_device *rdev, int reg);
1181 void (*bandwidth_update)(struct radeon_device *rdev);
1182 void (*hpd_init)(struct radeon_device *rdev);
1183 void (*hpd_fini)(struct radeon_device *rdev);
1184 bool (*hpd_sense)(struct radeon_device *rdev, enum radeon_hpd_id hpd);
1185 void (*hpd_set_polarity)(struct radeon_device *rdev, enum radeon_hpd_id hpd);
1186 /* ioctl hw specific callback. Some hw might want to perform special 1149 /* ioctl hw specific callback. Some hw might want to perform special
1187 * operation on specific ioctl. For instance on wait idle some hw 1150 * operation on specific ioctl. For instance on wait idle some hw
1188 * might want to perform and HDP flush through MMIO as it seems that 1151 * might want to perform and HDP flush through MMIO as it seems that
@@ -1190,17 +1153,99 @@ struct radeon_asic {
1190 * through ring. 1153 * through ring.
1191 */ 1154 */
1192 void (*ioctl_wait_idle)(struct radeon_device *rdev, struct radeon_bo *bo); 1155 void (*ioctl_wait_idle)(struct radeon_device *rdev, struct radeon_bo *bo);
1156 /* check if 3D engine is idle */
1193 bool (*gui_idle)(struct radeon_device *rdev); 1157 bool (*gui_idle)(struct radeon_device *rdev);
1158 /* wait for mc_idle */
1159 int (*mc_wait_for_idle)(struct radeon_device *rdev);
1160 /* gart */
1161 struct {
1162 void (*tlb_flush)(struct radeon_device *rdev);
1163 int (*set_page)(struct radeon_device *rdev, int i, uint64_t addr);
1164 } gart;
1165 /* ring specific callbacks */
1166 struct {
1167 void (*ib_execute)(struct radeon_device *rdev, struct radeon_ib *ib);
1168 int (*ib_parse)(struct radeon_device *rdev, struct radeon_ib *ib);
1169 void (*emit_fence)(struct radeon_device *rdev, struct radeon_fence *fence);
1170 void (*emit_semaphore)(struct radeon_device *rdev, struct radeon_ring *cp,
1171 struct radeon_semaphore *semaphore, bool emit_wait);
1172 int (*cs_parse)(struct radeon_cs_parser *p);
1173 void (*ring_start)(struct radeon_device *rdev, struct radeon_ring *cp);
1174 int (*ring_test)(struct radeon_device *rdev, struct radeon_ring *cp);
1175 int (*ib_test)(struct radeon_device *rdev, struct radeon_ring *cp);
1176 } ring[RADEON_NUM_RINGS];
1177 /* irqs */
1178 struct {
1179 int (*set)(struct radeon_device *rdev);
1180 int (*process)(struct radeon_device *rdev);
1181 } irq;
1182 /* displays */
1183 struct {
1184 /* display watermarks */
1185 void (*bandwidth_update)(struct radeon_device *rdev);
1186 /* get frame count */
1187 u32 (*get_vblank_counter)(struct radeon_device *rdev, int crtc);
1188 /* wait for vblank */
1189 void (*wait_for_vblank)(struct radeon_device *rdev, int crtc);
1190 } display;
1191 /* copy functions for bo handling */
1192 struct {
1193 int (*blit)(struct radeon_device *rdev,
1194 uint64_t src_offset,
1195 uint64_t dst_offset,
1196 unsigned num_gpu_pages,
1197 struct radeon_fence *fence);
1198 u32 blit_ring_index;
1199 int (*dma)(struct radeon_device *rdev,
1200 uint64_t src_offset,
1201 uint64_t dst_offset,
1202 unsigned num_gpu_pages,
1203 struct radeon_fence *fence);
1204 u32 dma_ring_index;
1205 /* method used for bo copy */
1206 int (*copy)(struct radeon_device *rdev,
1207 uint64_t src_offset,
1208 uint64_t dst_offset,
1209 unsigned num_gpu_pages,
1210 struct radeon_fence *fence);
1211 /* ring used for bo copies */
1212 u32 copy_ring_index;
1213 } copy;
1214 /* surfaces */
1215 struct {
1216 int (*set_reg)(struct radeon_device *rdev, int reg,
1217 uint32_t tiling_flags, uint32_t pitch,
1218 uint32_t offset, uint32_t obj_size);
1219 void (*clear_reg)(struct radeon_device *rdev, int reg);
1220 } surface;
1221 /* hotplug detect */
1222 struct {
1223 void (*init)(struct radeon_device *rdev);
1224 void (*fini)(struct radeon_device *rdev);
1225 bool (*sense)(struct radeon_device *rdev, enum radeon_hpd_id hpd);
1226 void (*set_polarity)(struct radeon_device *rdev, enum radeon_hpd_id hpd);
1227 } hpd;
1194 /* power management */ 1228 /* power management */
1195 void (*pm_misc)(struct radeon_device *rdev); 1229 struct {
1196 void (*pm_prepare)(struct radeon_device *rdev); 1230 void (*misc)(struct radeon_device *rdev);
1197 void (*pm_finish)(struct radeon_device *rdev); 1231 void (*prepare)(struct radeon_device *rdev);
1198 void (*pm_init_profile)(struct radeon_device *rdev); 1232 void (*finish)(struct radeon_device *rdev);
1199 void (*pm_get_dynpm_state)(struct radeon_device *rdev); 1233 void (*init_profile)(struct radeon_device *rdev);
1234 void (*get_dynpm_state)(struct radeon_device *rdev);
1235 uint32_t (*get_engine_clock)(struct radeon_device *rdev);
1236 void (*set_engine_clock)(struct radeon_device *rdev, uint32_t eng_clock);
1237 uint32_t (*get_memory_clock)(struct radeon_device *rdev);
1238 void (*set_memory_clock)(struct radeon_device *rdev, uint32_t mem_clock);
1239 int (*get_pcie_lanes)(struct radeon_device *rdev);
1240 void (*set_pcie_lanes)(struct radeon_device *rdev, int lanes);
1241 void (*set_clock_gating)(struct radeon_device *rdev, int enable);
1242 } pm;
1200 /* pageflipping */ 1243 /* pageflipping */
1201 void (*pre_page_flip)(struct radeon_device *rdev, int crtc); 1244 struct {
1202 u32 (*page_flip)(struct radeon_device *rdev, int crtc, u64 crtc_base); 1245 void (*pre_page_flip)(struct radeon_device *rdev, int crtc);
1203 void (*post_page_flip)(struct radeon_device *rdev, int crtc); 1246 u32 (*page_flip)(struct radeon_device *rdev, int crtc, u64 crtc_base);
1247 void (*post_page_flip)(struct radeon_device *rdev, int crtc);
1248 } pflip;
1204}; 1249};
1205 1250
1206/* 1251/*
@@ -1340,6 +1385,37 @@ struct cayman_asic {
1340 struct r100_gpu_lockup lockup; 1385 struct r100_gpu_lockup lockup;
1341}; 1386};
1342 1387
1388struct si_asic {
1389 unsigned max_shader_engines;
1390 unsigned max_pipes_per_simd;
1391 unsigned max_tile_pipes;
1392 unsigned max_simds_per_se;
1393 unsigned max_backends_per_se;
1394 unsigned max_texture_channel_caches;
1395 unsigned max_gprs;
1396 unsigned max_gs_threads;
1397 unsigned max_hw_contexts;
1398 unsigned sc_prim_fifo_size_frontend;
1399 unsigned sc_prim_fifo_size_backend;
1400 unsigned sc_hiz_tile_fifo_size;
1401 unsigned sc_earlyz_tile_fifo_size;
1402
1403 unsigned num_shader_engines;
1404 unsigned num_tile_pipes;
1405 unsigned num_backends_per_se;
1406 unsigned backend_disable_mask_per_asic;
1407 unsigned backend_map;
1408 unsigned num_texture_channel_caches;
1409 unsigned mem_max_burst_length_bytes;
1410 unsigned mem_row_size_in_kb;
1411 unsigned shader_engine_tile_size;
1412 unsigned num_gpus;
1413 unsigned multi_gpu_tile_size;
1414
1415 unsigned tile_config;
1416 struct r100_gpu_lockup lockup;
1417};
1418
1343union radeon_asic_config { 1419union radeon_asic_config {
1344 struct r300_asic r300; 1420 struct r300_asic r300;
1345 struct r100_asic r100; 1421 struct r100_asic r100;
@@ -1347,6 +1423,7 @@ union radeon_asic_config {
1347 struct rv770_asic rv770; 1423 struct rv770_asic rv770;
1348 struct evergreen_asic evergreen; 1424 struct evergreen_asic evergreen;
1349 struct cayman_asic cayman; 1425 struct cayman_asic cayman;
1426 struct si_asic si;
1350}; 1427};
1351 1428
1352/* 1429/*
@@ -1462,10 +1539,12 @@ struct radeon_device {
1462 const struct firmware *pfp_fw; /* r6/700 PFP firmware */ 1539 const struct firmware *pfp_fw; /* r6/700 PFP firmware */
1463 const struct firmware *rlc_fw; /* r6/700 RLC firmware */ 1540 const struct firmware *rlc_fw; /* r6/700 RLC firmware */
1464 const struct firmware *mc_fw; /* NI MC firmware */ 1541 const struct firmware *mc_fw; /* NI MC firmware */
1542 const struct firmware *ce_fw; /* SI CE firmware */
1465 struct r600_blit r600_blit; 1543 struct r600_blit r600_blit;
1466 struct r600_vram_scratch vram_scratch; 1544 struct r600_vram_scratch vram_scratch;
1467 int msi_enabled; /* msi enabled */ 1545 int msi_enabled; /* msi enabled */
1468 struct r600_ih ih; /* r6/700 interrupt ring */ 1546 struct r600_ih ih; /* r6/700 interrupt ring */
1547 struct si_rlc rlc;
1469 struct work_struct hotplug_work; 1548 struct work_struct hotplug_work;
1470 int num_crtc; /* number of crtcs */ 1549 int num_crtc; /* number of crtcs */
1471 struct mutex dc_hw_i2c_mutex; /* display controller hw i2c mutex */ 1550 struct mutex dc_hw_i2c_mutex; /* display controller hw i2c mutex */
@@ -1491,8 +1570,6 @@ struct radeon_device {
1491 unsigned debugfs_count; 1570 unsigned debugfs_count;
1492 /* virtual memory */ 1571 /* virtual memory */
1493 struct radeon_vm_manager vm_manager; 1572 struct radeon_vm_manager vm_manager;
1494 /* ring used for bo copies */
1495 u32 copy_ring;
1496}; 1573};
1497 1574
1498int radeon_device_init(struct radeon_device *rdev, 1575int radeon_device_init(struct radeon_device *rdev,
@@ -1611,6 +1688,9 @@ void r100_pll_errata_after_index(struct radeon_device *rdev);
1611#define ASIC_IS_DCE41(rdev) ((rdev->family >= CHIP_PALM) && \ 1688#define ASIC_IS_DCE41(rdev) ((rdev->family >= CHIP_PALM) && \
1612 (rdev->flags & RADEON_IS_IGP)) 1689 (rdev->flags & RADEON_IS_IGP))
1613#define ASIC_IS_DCE5(rdev) ((rdev->family >= CHIP_BARTS)) 1690#define ASIC_IS_DCE5(rdev) ((rdev->family >= CHIP_BARTS))
1691#define ASIC_IS_DCE6(rdev) ((rdev->family >= CHIP_ARUBA))
1692#define ASIC_IS_DCE61(rdev) ((rdev->family >= CHIP_ARUBA) && \
1693 (rdev->flags & RADEON_IS_IGP))
1614 1694
1615/* 1695/*
1616 * BIOS helpers. 1696 * BIOS helpers.
@@ -1648,47 +1728,53 @@ void radeon_ring_write(struct radeon_ring *ring, uint32_t v);
1648#define radeon_fini(rdev) (rdev)->asic->fini((rdev)) 1728#define radeon_fini(rdev) (rdev)->asic->fini((rdev))
1649#define radeon_resume(rdev) (rdev)->asic->resume((rdev)) 1729#define radeon_resume(rdev) (rdev)->asic->resume((rdev))
1650#define radeon_suspend(rdev) (rdev)->asic->suspend((rdev)) 1730#define radeon_suspend(rdev) (rdev)->asic->suspend((rdev))
1651#define radeon_cs_parse(p) rdev->asic->cs_parse((p)) 1731#define radeon_cs_parse(rdev, r, p) (rdev)->asic->ring[(r)].cs_parse((p))
1652#define radeon_vga_set_state(rdev, state) (rdev)->asic->vga_set_state((rdev), (state)) 1732#define radeon_vga_set_state(rdev, state) (rdev)->asic->vga_set_state((rdev), (state))
1653#define radeon_gpu_is_lockup(rdev, cp) (rdev)->asic->gpu_is_lockup((rdev), (cp)) 1733#define radeon_gpu_is_lockup(rdev, cp) (rdev)->asic->gpu_is_lockup((rdev), (cp))
1654#define radeon_asic_reset(rdev) (rdev)->asic->asic_reset((rdev)) 1734#define radeon_asic_reset(rdev) (rdev)->asic->asic_reset((rdev))
1655#define radeon_gart_tlb_flush(rdev) (rdev)->asic->gart_tlb_flush((rdev)) 1735#define radeon_gart_tlb_flush(rdev) (rdev)->asic->gart.tlb_flush((rdev))
1656#define radeon_gart_set_page(rdev, i, p) (rdev)->asic->gart_set_page((rdev), (i), (p)) 1736#define radeon_gart_set_page(rdev, i, p) (rdev)->asic->gart.set_page((rdev), (i), (p))
1657#define radeon_ring_start(rdev) (rdev)->asic->ring_start((rdev)) 1737#define radeon_ring_start(rdev, r, cp) (rdev)->asic->ring[(r)].ring_start((rdev), (cp))
1658#define radeon_ring_test(rdev, cp) (rdev)->asic->ring_test((rdev), (cp)) 1738#define radeon_ring_test(rdev, r, cp) (rdev)->asic->ring[(r)].ring_test((rdev), (cp))
1739#define radeon_ib_test(rdev, r, cp) (rdev)->asic->ring[(r)].ib_test((rdev), (cp))
1659#define radeon_ring_ib_execute(rdev, r, ib) (rdev)->asic->ring[(r)].ib_execute((rdev), (ib)) 1740#define radeon_ring_ib_execute(rdev, r, ib) (rdev)->asic->ring[(r)].ib_execute((rdev), (ib))
1660#define radeon_ring_ib_parse(rdev, r, ib) (rdev)->asic->ring[(r)].ib_parse((rdev), (ib)) 1741#define radeon_ring_ib_parse(rdev, r, ib) (rdev)->asic->ring[(r)].ib_parse((rdev), (ib))
1661#define radeon_irq_set(rdev) (rdev)->asic->irq_set((rdev)) 1742#define radeon_irq_set(rdev) (rdev)->asic->irq.set((rdev))
1662#define radeon_irq_process(rdev) (rdev)->asic->irq_process((rdev)) 1743#define radeon_irq_process(rdev) (rdev)->asic->irq.process((rdev))
1663#define radeon_get_vblank_counter(rdev, crtc) (rdev)->asic->get_vblank_counter((rdev), (crtc)) 1744#define radeon_get_vblank_counter(rdev, crtc) (rdev)->asic->display.get_vblank_counter((rdev), (crtc))
1664#define radeon_fence_ring_emit(rdev, r, fence) (rdev)->asic->ring[(r)].emit_fence((rdev), (fence)) 1745#define radeon_fence_ring_emit(rdev, r, fence) (rdev)->asic->ring[(r)].emit_fence((rdev), (fence))
1665#define radeon_semaphore_ring_emit(rdev, r, cp, semaphore, emit_wait) (rdev)->asic->ring[(r)].emit_semaphore((rdev), (cp), (semaphore), (emit_wait)) 1746#define radeon_semaphore_ring_emit(rdev, r, cp, semaphore, emit_wait) (rdev)->asic->ring[(r)].emit_semaphore((rdev), (cp), (semaphore), (emit_wait))
1666#define radeon_copy_blit(rdev, s, d, np, f) (rdev)->asic->copy_blit((rdev), (s), (d), (np), (f)) 1747#define radeon_copy_blit(rdev, s, d, np, f) (rdev)->asic->copy.blit((rdev), (s), (d), (np), (f))
1667#define radeon_copy_dma(rdev, s, d, np, f) (rdev)->asic->copy_dma((rdev), (s), (d), (np), (f)) 1748#define radeon_copy_dma(rdev, s, d, np, f) (rdev)->asic->copy.dma((rdev), (s), (d), (np), (f))
1668#define radeon_copy(rdev, s, d, np, f) (rdev)->asic->copy((rdev), (s), (d), (np), (f)) 1749#define radeon_copy(rdev, s, d, np, f) (rdev)->asic->copy.copy((rdev), (s), (d), (np), (f))
1669#define radeon_get_engine_clock(rdev) (rdev)->asic->get_engine_clock((rdev)) 1750#define radeon_copy_blit_ring_index(rdev) (rdev)->asic->copy.blit_ring_index
1670#define radeon_set_engine_clock(rdev, e) (rdev)->asic->set_engine_clock((rdev), (e)) 1751#define radeon_copy_dma_ring_index(rdev) (rdev)->asic->copy.dma_ring_index
1671#define radeon_get_memory_clock(rdev) (rdev)->asic->get_memory_clock((rdev)) 1752#define radeon_copy_ring_index(rdev) (rdev)->asic->copy.copy_ring_index
1672#define radeon_set_memory_clock(rdev, e) (rdev)->asic->set_memory_clock((rdev), (e)) 1753#define radeon_get_engine_clock(rdev) (rdev)->asic->pm.get_engine_clock((rdev))
1673#define radeon_get_pcie_lanes(rdev) (rdev)->asic->get_pcie_lanes((rdev)) 1754#define radeon_set_engine_clock(rdev, e) (rdev)->asic->pm.set_engine_clock((rdev), (e))
1674#define radeon_set_pcie_lanes(rdev, l) (rdev)->asic->set_pcie_lanes((rdev), (l)) 1755#define radeon_get_memory_clock(rdev) (rdev)->asic->pm.get_memory_clock((rdev))
1675#define radeon_set_clock_gating(rdev, e) (rdev)->asic->set_clock_gating((rdev), (e)) 1756#define radeon_set_memory_clock(rdev, e) (rdev)->asic->pm.set_memory_clock((rdev), (e))
1676#define radeon_set_surface_reg(rdev, r, f, p, o, s) ((rdev)->asic->set_surface_reg((rdev), (r), (f), (p), (o), (s))) 1757#define radeon_get_pcie_lanes(rdev) (rdev)->asic->pm.get_pcie_lanes((rdev))
1677#define radeon_clear_surface_reg(rdev, r) ((rdev)->asic->clear_surface_reg((rdev), (r))) 1758#define radeon_set_pcie_lanes(rdev, l) (rdev)->asic->pm.set_pcie_lanes((rdev), (l))
1678#define radeon_bandwidth_update(rdev) (rdev)->asic->bandwidth_update((rdev)) 1759#define radeon_set_clock_gating(rdev, e) (rdev)->asic->pm.set_clock_gating((rdev), (e))
1679#define radeon_hpd_init(rdev) (rdev)->asic->hpd_init((rdev)) 1760#define radeon_set_surface_reg(rdev, r, f, p, o, s) ((rdev)->asic->surface.set_reg((rdev), (r), (f), (p), (o), (s)))
1680#define radeon_hpd_fini(rdev) (rdev)->asic->hpd_fini((rdev)) 1761#define radeon_clear_surface_reg(rdev, r) ((rdev)->asic->surface.clear_reg((rdev), (r)))
1681#define radeon_hpd_sense(rdev, hpd) (rdev)->asic->hpd_sense((rdev), (hpd)) 1762#define radeon_bandwidth_update(rdev) (rdev)->asic->display.bandwidth_update((rdev))
1682#define radeon_hpd_set_polarity(rdev, hpd) (rdev)->asic->hpd_set_polarity((rdev), (hpd)) 1763#define radeon_hpd_init(rdev) (rdev)->asic->hpd.init((rdev))
1764#define radeon_hpd_fini(rdev) (rdev)->asic->hpd.fini((rdev))
1765#define radeon_hpd_sense(rdev, h) (rdev)->asic->hpd.sense((rdev), (h))
1766#define radeon_hpd_set_polarity(rdev, h) (rdev)->asic->hpd.set_polarity((rdev), (h))
1683#define radeon_gui_idle(rdev) (rdev)->asic->gui_idle((rdev)) 1767#define radeon_gui_idle(rdev) (rdev)->asic->gui_idle((rdev))
1684#define radeon_pm_misc(rdev) (rdev)->asic->pm_misc((rdev)) 1768#define radeon_pm_misc(rdev) (rdev)->asic->pm.misc((rdev))
1685#define radeon_pm_prepare(rdev) (rdev)->asic->pm_prepare((rdev)) 1769#define radeon_pm_prepare(rdev) (rdev)->asic->pm.prepare((rdev))
1686#define radeon_pm_finish(rdev) (rdev)->asic->pm_finish((rdev)) 1770#define radeon_pm_finish(rdev) (rdev)->asic->pm.finish((rdev))
1687#define radeon_pm_init_profile(rdev) (rdev)->asic->pm_init_profile((rdev)) 1771#define radeon_pm_init_profile(rdev) (rdev)->asic->pm.init_profile((rdev))
1688#define radeon_pm_get_dynpm_state(rdev) (rdev)->asic->pm_get_dynpm_state((rdev)) 1772#define radeon_pm_get_dynpm_state(rdev) (rdev)->asic->pm.get_dynpm_state((rdev))
1689#define radeon_pre_page_flip(rdev, crtc) rdev->asic->pre_page_flip((rdev), (crtc)) 1773#define radeon_pre_page_flip(rdev, crtc) rdev->asic->pflip.pre_page_flip((rdev), (crtc))
1690#define radeon_page_flip(rdev, crtc, base) rdev->asic->page_flip((rdev), (crtc), (base)) 1774#define radeon_page_flip(rdev, crtc, base) rdev->asic->pflip.page_flip((rdev), (crtc), (base))
1691#define radeon_post_page_flip(rdev, crtc) rdev->asic->post_page_flip((rdev), (crtc)) 1775#define radeon_post_page_flip(rdev, crtc) rdev->asic->pflip.post_page_flip((rdev), (crtc))
1776#define radeon_wait_for_vblank(rdev, crtc) rdev->asic->display.wait_for_vblank((rdev), (crtc))
1777#define radeon_mc_wait_for_idle(rdev) rdev->asic->mc_wait_for_idle((rdev))
1692 1778
1693/* Common functions */ 1779/* Common functions */
1694/* AGP */ 1780/* AGP */
@@ -1750,6 +1836,16 @@ int r600_vram_scratch_init(struct radeon_device *rdev);
1750void r600_vram_scratch_fini(struct radeon_device *rdev); 1836void r600_vram_scratch_fini(struct radeon_device *rdev);
1751 1837
1752/* 1838/*
1839 * r600 cs checking helper
1840 */
1841unsigned r600_mip_minify(unsigned size, unsigned level);
1842bool r600_fmt_is_valid_color(u32 format);
1843bool r600_fmt_is_valid_texture(u32 format, enum radeon_family family);
1844int r600_fmt_get_blocksize(u32 format);
1845int r600_fmt_get_nblocksx(u32 format, u32 w);
1846int r600_fmt_get_nblocksy(u32 format, u32 h);
1847
1848/*
1753 * r600 functions used by radeon_encoder.c 1849 * r600 functions used by radeon_encoder.c
1754 */ 1850 */
1755extern void r600_hdmi_enable(struct drm_encoder *encoder); 1851extern void r600_hdmi_enable(struct drm_encoder *encoder);