diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon.h')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon.h | 445 |
1 files changed, 324 insertions, 121 deletions
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index 224506a2f7b1..034218c3dbbb 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h | |||
@@ -28,8 +28,6 @@ | |||
28 | #ifndef __RADEON_H__ | 28 | #ifndef __RADEON_H__ |
29 | #define __RADEON_H__ | 29 | #define __RADEON_H__ |
30 | 30 | ||
31 | #include "radeon_object.h" | ||
32 | |||
33 | /* TODO: Here are things that needs to be done : | 31 | /* TODO: Here are things that needs to be done : |
34 | * - surface allocator & initializer : (bit like scratch reg) should | 32 | * - surface allocator & initializer : (bit like scratch reg) should |
35 | * initialize HDP_ stuff on RS600, R600, R700 hw, well anythings | 33 | * initialize HDP_ stuff on RS600, R600, R700 hw, well anythings |
@@ -67,6 +65,11 @@ | |||
67 | #include <linux/list.h> | 65 | #include <linux/list.h> |
68 | #include <linux/kref.h> | 66 | #include <linux/kref.h> |
69 | 67 | ||
68 | #include <ttm/ttm_bo_api.h> | ||
69 | #include <ttm/ttm_bo_driver.h> | ||
70 | #include <ttm/ttm_placement.h> | ||
71 | #include <ttm/ttm_module.h> | ||
72 | |||
70 | #include "radeon_family.h" | 73 | #include "radeon_family.h" |
71 | #include "radeon_mode.h" | 74 | #include "radeon_mode.h" |
72 | #include "radeon_reg.h" | 75 | #include "radeon_reg.h" |
@@ -85,12 +88,18 @@ extern int radeon_benchmarking; | |||
85 | extern int radeon_testing; | 88 | extern int radeon_testing; |
86 | extern int radeon_connector_table; | 89 | extern int radeon_connector_table; |
87 | extern int radeon_tv; | 90 | extern int radeon_tv; |
91 | extern int radeon_new_pll; | ||
92 | extern int radeon_dynpm; | ||
93 | extern int radeon_audio; | ||
94 | extern int radeon_disp_priority; | ||
95 | extern int radeon_hw_i2c; | ||
88 | 96 | ||
89 | /* | 97 | /* |
90 | * Copy from radeon_drv.h so we don't have to include both and have conflicting | 98 | * Copy from radeon_drv.h so we don't have to include both and have conflicting |
91 | * symbol; | 99 | * symbol; |
92 | */ | 100 | */ |
93 | #define RADEON_MAX_USEC_TIMEOUT 100000 /* 100 ms */ | 101 | #define RADEON_MAX_USEC_TIMEOUT 100000 /* 100 ms */ |
102 | /* RADEON_IB_POOL_SIZE must be a power of 2 */ | ||
94 | #define RADEON_IB_POOL_SIZE 16 | 103 | #define RADEON_IB_POOL_SIZE 16 |
95 | #define RADEON_DEBUGFS_MAX_NUM_FILES 32 | 104 | #define RADEON_DEBUGFS_MAX_NUM_FILES 32 |
96 | #define RADEONFB_CONN_LIMIT 4 | 105 | #define RADEONFB_CONN_LIMIT 4 |
@@ -112,6 +121,21 @@ struct radeon_device; | |||
112 | /* | 121 | /* |
113 | * BIOS. | 122 | * BIOS. |
114 | */ | 123 | */ |
124 | #define ATRM_BIOS_PAGE 4096 | ||
125 | |||
126 | #if defined(CONFIG_VGA_SWITCHEROO) | ||
127 | bool radeon_atrm_supported(struct pci_dev *pdev); | ||
128 | int radeon_atrm_get_bios_chunk(uint8_t *bios, int offset, int len); | ||
129 | #else | ||
130 | static inline bool radeon_atrm_supported(struct pci_dev *pdev) | ||
131 | { | ||
132 | return false; | ||
133 | } | ||
134 | |||
135 | static inline int radeon_atrm_get_bios_chunk(uint8_t *bios, int offset, int len){ | ||
136 | return -EINVAL; | ||
137 | } | ||
138 | #endif | ||
115 | bool radeon_get_bios(struct radeon_device *rdev); | 139 | bool radeon_get_bios(struct radeon_device *rdev); |
116 | 140 | ||
117 | 141 | ||
@@ -132,17 +156,24 @@ void radeon_dummy_page_fini(struct radeon_device *rdev); | |||
132 | struct radeon_clock { | 156 | struct radeon_clock { |
133 | struct radeon_pll p1pll; | 157 | struct radeon_pll p1pll; |
134 | struct radeon_pll p2pll; | 158 | struct radeon_pll p2pll; |
159 | struct radeon_pll dcpll; | ||
135 | struct radeon_pll spll; | 160 | struct radeon_pll spll; |
136 | struct radeon_pll mpll; | 161 | struct radeon_pll mpll; |
137 | /* 10 Khz units */ | 162 | /* 10 Khz units */ |
138 | uint32_t default_mclk; | 163 | uint32_t default_mclk; |
139 | uint32_t default_sclk; | 164 | uint32_t default_sclk; |
165 | uint32_t default_dispclk; | ||
166 | uint32_t dp_extclk; | ||
140 | }; | 167 | }; |
141 | 168 | ||
142 | /* | 169 | /* |
143 | * Power management | 170 | * Power management |
144 | */ | 171 | */ |
145 | int radeon_pm_init(struct radeon_device *rdev); | 172 | int radeon_pm_init(struct radeon_device *rdev); |
173 | void radeon_pm_fini(struct radeon_device *rdev); | ||
174 | void radeon_pm_compute_clocks(struct radeon_device *rdev); | ||
175 | void radeon_combios_get_power_modes(struct radeon_device *rdev); | ||
176 | void radeon_atombios_get_power_modes(struct radeon_device *rdev); | ||
146 | 177 | ||
147 | /* | 178 | /* |
148 | * Fences. | 179 | * Fences. |
@@ -157,6 +188,7 @@ struct radeon_fence_driver { | |||
157 | struct list_head created; | 188 | struct list_head created; |
158 | struct list_head emited; | 189 | struct list_head emited; |
159 | struct list_head signaled; | 190 | struct list_head signaled; |
191 | bool initialized; | ||
160 | }; | 192 | }; |
161 | 193 | ||
162 | struct radeon_fence { | 194 | struct radeon_fence { |
@@ -186,76 +218,63 @@ void radeon_fence_unref(struct radeon_fence **fence); | |||
186 | * Tiling registers | 218 | * Tiling registers |
187 | */ | 219 | */ |
188 | struct radeon_surface_reg { | 220 | struct radeon_surface_reg { |
189 | struct radeon_object *robj; | 221 | struct radeon_bo *bo; |
190 | }; | 222 | }; |
191 | 223 | ||
192 | #define RADEON_GEM_MAX_SURFACES 8 | 224 | #define RADEON_GEM_MAX_SURFACES 8 |
193 | 225 | ||
194 | /* | 226 | /* |
195 | * Radeon buffer. | 227 | * TTM. |
196 | */ | 228 | */ |
197 | struct radeon_object; | 229 | struct radeon_mman { |
230 | struct ttm_bo_global_ref bo_global_ref; | ||
231 | struct ttm_global_reference mem_global_ref; | ||
232 | struct ttm_bo_device bdev; | ||
233 | bool mem_global_referenced; | ||
234 | bool initialized; | ||
235 | }; | ||
236 | |||
237 | struct radeon_bo { | ||
238 | /* Protected by gem.mutex */ | ||
239 | struct list_head list; | ||
240 | /* Protected by tbo.reserved */ | ||
241 | u32 placements[3]; | ||
242 | struct ttm_placement placement; | ||
243 | struct ttm_buffer_object tbo; | ||
244 | struct ttm_bo_kmap_obj kmap; | ||
245 | unsigned pin_count; | ||
246 | void *kptr; | ||
247 | u32 tiling_flags; | ||
248 | u32 pitch; | ||
249 | int surface_reg; | ||
250 | /* Constant after initialization */ | ||
251 | struct radeon_device *rdev; | ||
252 | struct drm_gem_object *gobj; | ||
253 | }; | ||
198 | 254 | ||
199 | struct radeon_object_list { | 255 | struct radeon_bo_list { |
200 | struct list_head list; | 256 | struct list_head list; |
201 | struct radeon_object *robj; | 257 | struct radeon_bo *bo; |
202 | uint64_t gpu_offset; | 258 | uint64_t gpu_offset; |
203 | unsigned rdomain; | 259 | unsigned rdomain; |
204 | unsigned wdomain; | 260 | unsigned wdomain; |
205 | uint32_t tiling_flags; | 261 | u32 tiling_flags; |
206 | }; | 262 | }; |
207 | 263 | ||
208 | int radeon_object_init(struct radeon_device *rdev); | ||
209 | void radeon_object_fini(struct radeon_device *rdev); | ||
210 | int radeon_object_create(struct radeon_device *rdev, | ||
211 | struct drm_gem_object *gobj, | ||
212 | unsigned long size, | ||
213 | bool kernel, | ||
214 | uint32_t domain, | ||
215 | bool interruptible, | ||
216 | struct radeon_object **robj_ptr); | ||
217 | int radeon_object_kmap(struct radeon_object *robj, void **ptr); | ||
218 | void radeon_object_kunmap(struct radeon_object *robj); | ||
219 | void radeon_object_unref(struct radeon_object **robj); | ||
220 | int radeon_object_pin(struct radeon_object *robj, uint32_t domain, | ||
221 | uint64_t *gpu_addr); | ||
222 | void radeon_object_unpin(struct radeon_object *robj); | ||
223 | int radeon_object_wait(struct radeon_object *robj); | ||
224 | int radeon_object_busy_domain(struct radeon_object *robj, uint32_t *cur_placement); | ||
225 | int radeon_object_evict_vram(struct radeon_device *rdev); | ||
226 | int radeon_object_mmap(struct radeon_object *robj, uint64_t *offset); | ||
227 | void radeon_object_force_delete(struct radeon_device *rdev); | ||
228 | void radeon_object_list_add_object(struct radeon_object_list *lobj, | ||
229 | struct list_head *head); | ||
230 | int radeon_object_list_validate(struct list_head *head, void *fence); | ||
231 | void radeon_object_list_unvalidate(struct list_head *head); | ||
232 | void radeon_object_list_clean(struct list_head *head); | ||
233 | int radeon_object_fbdev_mmap(struct radeon_object *robj, | ||
234 | struct vm_area_struct *vma); | ||
235 | unsigned long radeon_object_size(struct radeon_object *robj); | ||
236 | void radeon_object_clear_surface_reg(struct radeon_object *robj); | ||
237 | int radeon_object_check_tiling(struct radeon_object *robj, bool has_moved, | ||
238 | bool force_drop); | ||
239 | void radeon_object_set_tiling_flags(struct radeon_object *robj, | ||
240 | uint32_t tiling_flags, uint32_t pitch); | ||
241 | void radeon_object_get_tiling_flags(struct radeon_object *robj, uint32_t *tiling_flags, uint32_t *pitch); | ||
242 | void radeon_bo_move_notify(struct ttm_buffer_object *bo, | ||
243 | struct ttm_mem_reg *mem); | ||
244 | void radeon_bo_fault_reserve_notify(struct ttm_buffer_object *bo); | ||
245 | /* | 264 | /* |
246 | * GEM objects. | 265 | * GEM objects. |
247 | */ | 266 | */ |
248 | struct radeon_gem { | 267 | struct radeon_gem { |
268 | struct mutex mutex; | ||
249 | struct list_head objects; | 269 | struct list_head objects; |
250 | }; | 270 | }; |
251 | 271 | ||
252 | int radeon_gem_init(struct radeon_device *rdev); | 272 | int radeon_gem_init(struct radeon_device *rdev); |
253 | void radeon_gem_fini(struct radeon_device *rdev); | 273 | void radeon_gem_fini(struct radeon_device *rdev); |
254 | int radeon_gem_object_create(struct radeon_device *rdev, int size, | 274 | int radeon_gem_object_create(struct radeon_device *rdev, int size, |
255 | int alignment, int initial_domain, | 275 | int alignment, int initial_domain, |
256 | bool discardable, bool kernel, | 276 | bool discardable, bool kernel, |
257 | bool interruptible, | 277 | struct drm_gem_object **obj); |
258 | struct drm_gem_object **obj); | ||
259 | int radeon_gem_object_pin(struct drm_gem_object *obj, uint32_t pin_domain, | 278 | int radeon_gem_object_pin(struct drm_gem_object *obj, uint32_t pin_domain, |
260 | uint64_t *gpu_addr); | 279 | uint64_t *gpu_addr); |
261 | void radeon_gem_object_unpin(struct drm_gem_object *obj); | 280 | void radeon_gem_object_unpin(struct drm_gem_object *obj); |
@@ -271,7 +290,7 @@ struct radeon_gart_table_ram { | |||
271 | }; | 290 | }; |
272 | 291 | ||
273 | struct radeon_gart_table_vram { | 292 | struct radeon_gart_table_vram { |
274 | struct radeon_object *robj; | 293 | struct radeon_bo *robj; |
275 | volatile uint32_t *ptr; | 294 | volatile uint32_t *ptr; |
276 | }; | 295 | }; |
277 | 296 | ||
@@ -281,6 +300,7 @@ union radeon_gart_table { | |||
281 | }; | 300 | }; |
282 | 301 | ||
283 | #define RADEON_GPU_PAGE_SIZE 4096 | 302 | #define RADEON_GPU_PAGE_SIZE 4096 |
303 | #define RADEON_GPU_PAGE_MASK (RADEON_GPU_PAGE_SIZE - 1) | ||
284 | 304 | ||
285 | struct radeon_gart { | 305 | struct radeon_gart { |
286 | dma_addr_t table_addr; | 306 | dma_addr_t table_addr; |
@@ -315,21 +335,21 @@ struct radeon_mc { | |||
315 | /* for some chips with <= 32MB we need to lie | 335 | /* for some chips with <= 32MB we need to lie |
316 | * about vram size near mc fb location */ | 336 | * about vram size near mc fb location */ |
317 | u64 mc_vram_size; | 337 | u64 mc_vram_size; |
318 | u64 gtt_location; | 338 | u64 visible_vram_size; |
319 | u64 gtt_size; | 339 | u64 gtt_size; |
320 | u64 gtt_start; | 340 | u64 gtt_start; |
321 | u64 gtt_end; | 341 | u64 gtt_end; |
322 | u64 vram_location; | ||
323 | u64 vram_start; | 342 | u64 vram_start; |
324 | u64 vram_end; | 343 | u64 vram_end; |
325 | unsigned vram_width; | 344 | unsigned vram_width; |
326 | u64 real_vram_size; | 345 | u64 real_vram_size; |
327 | int vram_mtrr; | 346 | int vram_mtrr; |
328 | bool vram_is_ddr; | 347 | bool vram_is_ddr; |
348 | bool igp_sideport_enabled; | ||
329 | }; | 349 | }; |
330 | 350 | ||
331 | int radeon_mc_setup(struct radeon_device *rdev); | 351 | bool radeon_combios_sideport_present(struct radeon_device *rdev); |
332 | 352 | bool radeon_atombios_sideport_present(struct radeon_device *rdev); | |
333 | 353 | ||
334 | /* | 354 | /* |
335 | * GPU scratch registers structures, functions & helpers | 355 | * GPU scratch registers structures, functions & helpers |
@@ -352,22 +372,29 @@ struct radeon_irq { | |||
352 | bool sw_int; | 372 | bool sw_int; |
353 | /* FIXME: use a define max crtc rather than hardcode it */ | 373 | /* FIXME: use a define max crtc rather than hardcode it */ |
354 | bool crtc_vblank_int[2]; | 374 | bool crtc_vblank_int[2]; |
375 | wait_queue_head_t vblank_queue; | ||
376 | /* FIXME: use defines for max hpd/dacs */ | ||
377 | bool hpd[6]; | ||
378 | spinlock_t sw_lock; | ||
379 | int sw_refcount; | ||
355 | }; | 380 | }; |
356 | 381 | ||
357 | int radeon_irq_kms_init(struct radeon_device *rdev); | 382 | int radeon_irq_kms_init(struct radeon_device *rdev); |
358 | void radeon_irq_kms_fini(struct radeon_device *rdev); | 383 | void radeon_irq_kms_fini(struct radeon_device *rdev); |
359 | 384 | void radeon_irq_kms_sw_irq_get(struct radeon_device *rdev); | |
385 | void radeon_irq_kms_sw_irq_put(struct radeon_device *rdev); | ||
360 | 386 | ||
361 | /* | 387 | /* |
362 | * CP & ring. | 388 | * CP & ring. |
363 | */ | 389 | */ |
364 | struct radeon_ib { | 390 | struct radeon_ib { |
365 | struct list_head list; | 391 | struct list_head list; |
366 | unsigned long idx; | 392 | unsigned idx; |
367 | uint64_t gpu_addr; | 393 | uint64_t gpu_addr; |
368 | struct radeon_fence *fence; | 394 | struct radeon_fence *fence; |
369 | uint32_t *ptr; | 395 | uint32_t *ptr; |
370 | uint32_t length_dw; | 396 | uint32_t length_dw; |
397 | bool free; | ||
371 | }; | 398 | }; |
372 | 399 | ||
373 | /* | 400 | /* |
@@ -376,15 +403,15 @@ struct radeon_ib { | |||
376 | */ | 403 | */ |
377 | struct radeon_ib_pool { | 404 | struct radeon_ib_pool { |
378 | struct mutex mutex; | 405 | struct mutex mutex; |
379 | struct radeon_object *robj; | 406 | struct radeon_bo *robj; |
380 | struct list_head scheduled_ibs; | 407 | struct list_head bogus_ib; |
381 | struct radeon_ib ibs[RADEON_IB_POOL_SIZE]; | 408 | struct radeon_ib ibs[RADEON_IB_POOL_SIZE]; |
382 | bool ready; | 409 | bool ready; |
383 | DECLARE_BITMAP(alloc_bm, RADEON_IB_POOL_SIZE); | 410 | unsigned head_id; |
384 | }; | 411 | }; |
385 | 412 | ||
386 | struct radeon_cp { | 413 | struct radeon_cp { |
387 | struct radeon_object *ring_obj; | 414 | struct radeon_bo *ring_obj; |
388 | volatile uint32_t *ring; | 415 | volatile uint32_t *ring; |
389 | unsigned rptr; | 416 | unsigned rptr; |
390 | unsigned wptr; | 417 | unsigned wptr; |
@@ -399,8 +426,25 @@ struct radeon_cp { | |||
399 | bool ready; | 426 | bool ready; |
400 | }; | 427 | }; |
401 | 428 | ||
429 | /* | ||
430 | * R6xx+ IH ring | ||
431 | */ | ||
432 | struct r600_ih { | ||
433 | struct radeon_bo *ring_obj; | ||
434 | volatile uint32_t *ring; | ||
435 | unsigned rptr; | ||
436 | unsigned wptr; | ||
437 | unsigned wptr_old; | ||
438 | unsigned ring_size; | ||
439 | uint64_t gpu_addr; | ||
440 | uint32_t ptr_mask; | ||
441 | spinlock_t lock; | ||
442 | bool enabled; | ||
443 | }; | ||
444 | |||
402 | struct r600_blit { | 445 | struct r600_blit { |
403 | struct radeon_object *shader_obj; | 446 | struct mutex mutex; |
447 | struct radeon_bo *shader_obj; | ||
404 | u64 shader_gpu_addr; | 448 | u64 shader_gpu_addr; |
405 | u32 vs_offset, ps_offset; | 449 | u32 vs_offset, ps_offset; |
406 | u32 state_offset; | 450 | u32 state_offset; |
@@ -415,6 +459,7 @@ int radeon_ib_schedule(struct radeon_device *rdev, struct radeon_ib *ib); | |||
415 | int radeon_ib_pool_init(struct radeon_device *rdev); | 459 | int radeon_ib_pool_init(struct radeon_device *rdev); |
416 | void radeon_ib_pool_fini(struct radeon_device *rdev); | 460 | void radeon_ib_pool_fini(struct radeon_device *rdev); |
417 | int radeon_ib_test(struct radeon_device *rdev); | 461 | int radeon_ib_test(struct radeon_device *rdev); |
462 | extern void radeon_ib_bogus_add(struct radeon_device *rdev, struct radeon_ib *ib); | ||
418 | /* Ring access between begin & end cannot sleep */ | 463 | /* Ring access between begin & end cannot sleep */ |
419 | void radeon_ring_free_size(struct radeon_device *rdev); | 464 | void radeon_ring_free_size(struct radeon_device *rdev); |
420 | int radeon_ring_lock(struct radeon_device *rdev, unsigned ndw); | 465 | int radeon_ring_lock(struct radeon_device *rdev, unsigned ndw); |
@@ -430,8 +475,8 @@ void radeon_ring_fini(struct radeon_device *rdev); | |||
430 | */ | 475 | */ |
431 | struct radeon_cs_reloc { | 476 | struct radeon_cs_reloc { |
432 | struct drm_gem_object *gobj; | 477 | struct drm_gem_object *gobj; |
433 | struct radeon_object *robj; | 478 | struct radeon_bo *robj; |
434 | struct radeon_object_list lobj; | 479 | struct radeon_bo_list lobj; |
435 | uint32_t handle; | 480 | uint32_t handle; |
436 | uint32_t flags; | 481 | uint32_t flags; |
437 | }; | 482 | }; |
@@ -448,6 +493,7 @@ struct radeon_cs_chunk { | |||
448 | }; | 493 | }; |
449 | 494 | ||
450 | struct radeon_cs_parser { | 495 | struct radeon_cs_parser { |
496 | struct device *dev; | ||
451 | struct radeon_device *rdev; | 497 | struct radeon_device *rdev; |
452 | struct drm_file *filp; | 498 | struct drm_file *filp; |
453 | /* chunks */ | 499 | /* chunks */ |
@@ -527,7 +573,7 @@ void radeon_agp_fini(struct radeon_device *rdev); | |||
527 | * Writeback | 573 | * Writeback |
528 | */ | 574 | */ |
529 | struct radeon_wb { | 575 | struct radeon_wb { |
530 | struct radeon_object *wb_obj; | 576 | struct radeon_bo *wb_obj; |
531 | volatile uint32_t *wb; | 577 | volatile uint32_t *wb; |
532 | uint64_t gpu_addr; | 578 | uint64_t gpu_addr; |
533 | }; | 579 | }; |
@@ -551,7 +597,100 @@ struct radeon_wb { | |||
551 | * Equation between gpu/memory clock and available bandwidth is hw dependent | 597 | * Equation between gpu/memory clock and available bandwidth is hw dependent |
552 | * (type of memory, bus size, efficiency, ...) | 598 | * (type of memory, bus size, efficiency, ...) |
553 | */ | 599 | */ |
600 | enum radeon_pm_state { | ||
601 | PM_STATE_DISABLED, | ||
602 | PM_STATE_MINIMUM, | ||
603 | PM_STATE_PAUSED, | ||
604 | PM_STATE_ACTIVE | ||
605 | }; | ||
606 | enum radeon_pm_action { | ||
607 | PM_ACTION_NONE, | ||
608 | PM_ACTION_MINIMUM, | ||
609 | PM_ACTION_DOWNCLOCK, | ||
610 | PM_ACTION_UPCLOCK | ||
611 | }; | ||
612 | |||
613 | enum radeon_voltage_type { | ||
614 | VOLTAGE_NONE = 0, | ||
615 | VOLTAGE_GPIO, | ||
616 | VOLTAGE_VDDC, | ||
617 | VOLTAGE_SW | ||
618 | }; | ||
619 | |||
620 | enum radeon_pm_state_type { | ||
621 | POWER_STATE_TYPE_DEFAULT, | ||
622 | POWER_STATE_TYPE_POWERSAVE, | ||
623 | POWER_STATE_TYPE_BATTERY, | ||
624 | POWER_STATE_TYPE_BALANCED, | ||
625 | POWER_STATE_TYPE_PERFORMANCE, | ||
626 | }; | ||
627 | |||
628 | enum radeon_pm_clock_mode_type { | ||
629 | POWER_MODE_TYPE_DEFAULT, | ||
630 | POWER_MODE_TYPE_LOW, | ||
631 | POWER_MODE_TYPE_MID, | ||
632 | POWER_MODE_TYPE_HIGH, | ||
633 | }; | ||
634 | |||
635 | struct radeon_voltage { | ||
636 | enum radeon_voltage_type type; | ||
637 | /* gpio voltage */ | ||
638 | struct radeon_gpio_rec gpio; | ||
639 | u32 delay; /* delay in usec from voltage drop to sclk change */ | ||
640 | bool active_high; /* voltage drop is active when bit is high */ | ||
641 | /* VDDC voltage */ | ||
642 | u8 vddc_id; /* index into vddc voltage table */ | ||
643 | u8 vddci_id; /* index into vddci voltage table */ | ||
644 | bool vddci_enabled; | ||
645 | /* r6xx+ sw */ | ||
646 | u32 voltage; | ||
647 | }; | ||
648 | |||
649 | struct radeon_pm_non_clock_info { | ||
650 | /* pcie lanes */ | ||
651 | int pcie_lanes; | ||
652 | /* standardized non-clock flags */ | ||
653 | u32 flags; | ||
654 | }; | ||
655 | |||
656 | struct radeon_pm_clock_info { | ||
657 | /* memory clock */ | ||
658 | u32 mclk; | ||
659 | /* engine clock */ | ||
660 | u32 sclk; | ||
661 | /* voltage info */ | ||
662 | struct radeon_voltage voltage; | ||
663 | /* standardized clock flags - not sure we'll need these */ | ||
664 | u32 flags; | ||
665 | }; | ||
666 | |||
667 | struct radeon_power_state { | ||
668 | enum radeon_pm_state_type type; | ||
669 | /* XXX: use a define for num clock modes */ | ||
670 | struct radeon_pm_clock_info clock_info[8]; | ||
671 | /* number of valid clock modes in this power state */ | ||
672 | int num_clock_modes; | ||
673 | struct radeon_pm_clock_info *default_clock_mode; | ||
674 | /* non clock info about this state */ | ||
675 | struct radeon_pm_non_clock_info non_clock_info; | ||
676 | bool voltage_drop_active; | ||
677 | }; | ||
678 | |||
679 | /* | ||
680 | * Some modes are overclocked by very low value, accept them | ||
681 | */ | ||
682 | #define RADEON_MODE_OVERCLOCK_MARGIN 500 /* 5 MHz */ | ||
683 | |||
554 | struct radeon_pm { | 684 | struct radeon_pm { |
685 | struct mutex mutex; | ||
686 | struct delayed_work idle_work; | ||
687 | enum radeon_pm_state state; | ||
688 | enum radeon_pm_action planned_action; | ||
689 | unsigned long action_timeout; | ||
690 | bool downclocked; | ||
691 | int active_crtcs; | ||
692 | int req_vblank; | ||
693 | bool vblank_sync; | ||
555 | fixed20_12 max_bandwidth; | 694 | fixed20_12 max_bandwidth; |
556 | fixed20_12 igp_sideport_mclk; | 695 | fixed20_12 igp_sideport_mclk; |
557 | fixed20_12 igp_system_mclk; | 696 | fixed20_12 igp_system_mclk; |
@@ -562,7 +701,18 @@ struct radeon_pm { | |||
562 | fixed20_12 ht_bandwidth; | 701 | fixed20_12 ht_bandwidth; |
563 | fixed20_12 core_bandwidth; | 702 | fixed20_12 core_bandwidth; |
564 | fixed20_12 sclk; | 703 | fixed20_12 sclk; |
704 | fixed20_12 mclk; | ||
565 | fixed20_12 needed_bandwidth; | 705 | fixed20_12 needed_bandwidth; |
706 | /* XXX: use a define for num power modes */ | ||
707 | struct radeon_power_state power_state[8]; | ||
708 | /* number of valid power states */ | ||
709 | int num_power_states; | ||
710 | struct radeon_power_state *current_power_state; | ||
711 | struct radeon_pm_clock_info *current_clock_mode; | ||
712 | struct radeon_power_state *requested_power_state; | ||
713 | struct radeon_pm_clock_info *requested_clock_mode; | ||
714 | struct radeon_power_state *default_power_state; | ||
715 | struct radeon_i2c_chan *i2c_bus; | ||
566 | }; | 716 | }; |
567 | 717 | ||
568 | 718 | ||
@@ -585,8 +735,6 @@ int radeon_debugfs_add_files(struct radeon_device *rdev, | |||
585 | struct drm_info_list *files, | 735 | struct drm_info_list *files, |
586 | unsigned nfiles); | 736 | unsigned nfiles); |
587 | int radeon_debugfs_fence_init(struct radeon_device *rdev); | 737 | int radeon_debugfs_fence_init(struct radeon_device *rdev); |
588 | int r100_debugfs_rbbm_init(struct radeon_device *rdev); | ||
589 | int r100_debugfs_cp_init(struct radeon_device *rdev); | ||
590 | 738 | ||
591 | 739 | ||
592 | /* | 740 | /* |
@@ -632,13 +780,25 @@ struct radeon_asic { | |||
632 | void (*set_engine_clock)(struct radeon_device *rdev, uint32_t eng_clock); | 780 | void (*set_engine_clock)(struct radeon_device *rdev, uint32_t eng_clock); |
633 | uint32_t (*get_memory_clock)(struct radeon_device *rdev); | 781 | uint32_t (*get_memory_clock)(struct radeon_device *rdev); |
634 | void (*set_memory_clock)(struct radeon_device *rdev, uint32_t mem_clock); | 782 | void (*set_memory_clock)(struct radeon_device *rdev, uint32_t mem_clock); |
783 | int (*get_pcie_lanes)(struct radeon_device *rdev); | ||
635 | void (*set_pcie_lanes)(struct radeon_device *rdev, int lanes); | 784 | void (*set_pcie_lanes)(struct radeon_device *rdev, int lanes); |
636 | void (*set_clock_gating)(struct radeon_device *rdev, int enable); | 785 | void (*set_clock_gating)(struct radeon_device *rdev, int enable); |
637 | int (*set_surface_reg)(struct radeon_device *rdev, int reg, | 786 | int (*set_surface_reg)(struct radeon_device *rdev, int reg, |
638 | uint32_t tiling_flags, uint32_t pitch, | 787 | uint32_t tiling_flags, uint32_t pitch, |
639 | uint32_t offset, uint32_t obj_size); | 788 | uint32_t offset, uint32_t obj_size); |
640 | int (*clear_surface_reg)(struct radeon_device *rdev, int reg); | 789 | void (*clear_surface_reg)(struct radeon_device *rdev, int reg); |
641 | void (*bandwidth_update)(struct radeon_device *rdev); | 790 | void (*bandwidth_update)(struct radeon_device *rdev); |
791 | void (*hpd_init)(struct radeon_device *rdev); | ||
792 | void (*hpd_fini)(struct radeon_device *rdev); | ||
793 | bool (*hpd_sense)(struct radeon_device *rdev, enum radeon_hpd_id hpd); | ||
794 | void (*hpd_set_polarity)(struct radeon_device *rdev, enum radeon_hpd_id hpd); | ||
795 | /* ioctl hw specific callback. Some hw might want to perform special | ||
796 | * operation on specific ioctl. For instance on wait idle some hw | ||
797 | * might want to perform and HDP flush through MMIO as it seems that | ||
798 | * some R6XX/R7XX hw doesn't take HDP flush into account if programmed | ||
799 | * through ring. | ||
800 | */ | ||
801 | void (*ioctl_wait_idle)(struct radeon_device *rdev, struct radeon_bo *bo); | ||
642 | }; | 802 | }; |
643 | 803 | ||
644 | /* | 804 | /* |
@@ -647,11 +807,14 @@ struct radeon_asic { | |||
647 | struct r100_asic { | 807 | struct r100_asic { |
648 | const unsigned *reg_safe_bm; | 808 | const unsigned *reg_safe_bm; |
649 | unsigned reg_safe_bm_size; | 809 | unsigned reg_safe_bm_size; |
810 | u32 hdp_cntl; | ||
650 | }; | 811 | }; |
651 | 812 | ||
652 | struct r300_asic { | 813 | struct r300_asic { |
653 | const unsigned *reg_safe_bm; | 814 | const unsigned *reg_safe_bm; |
654 | unsigned reg_safe_bm_size; | 815 | unsigned reg_safe_bm_size; |
816 | u32 resync_scratch; | ||
817 | u32 hdp_cntl; | ||
655 | }; | 818 | }; |
656 | 819 | ||
657 | struct r600_asic { | 820 | struct r600_asic { |
@@ -668,6 +831,9 @@ struct r600_asic { | |||
668 | unsigned sx_max_export_pos_size; | 831 | unsigned sx_max_export_pos_size; |
669 | unsigned sx_max_export_smx_size; | 832 | unsigned sx_max_export_smx_size; |
670 | unsigned sq_num_cf_insts; | 833 | unsigned sq_num_cf_insts; |
834 | unsigned tiling_nbanks; | ||
835 | unsigned tiling_npipes; | ||
836 | unsigned tiling_group_size; | ||
671 | }; | 837 | }; |
672 | 838 | ||
673 | struct rv770_asic { | 839 | struct rv770_asic { |
@@ -688,6 +854,9 @@ struct rv770_asic { | |||
688 | unsigned sc_prim_fifo_size; | 854 | unsigned sc_prim_fifo_size; |
689 | unsigned sc_hiz_tile_fifo_size; | 855 | unsigned sc_hiz_tile_fifo_size; |
690 | unsigned sc_earlyz_tile_fifo_fize; | 856 | unsigned sc_earlyz_tile_fifo_fize; |
857 | unsigned tiling_nbanks; | ||
858 | unsigned tiling_npipes; | ||
859 | unsigned tiling_group_size; | ||
691 | }; | 860 | }; |
692 | 861 | ||
693 | union radeon_asic_config { | 862 | union radeon_asic_config { |
@@ -697,6 +866,12 @@ union radeon_asic_config { | |||
697 | struct rv770_asic rv770; | 866 | struct rv770_asic rv770; |
698 | }; | 867 | }; |
699 | 868 | ||
869 | /* | ||
870 | * asic initizalization from radeon_asic.c | ||
871 | */ | ||
872 | void radeon_agp_disable(struct radeon_device *rdev); | ||
873 | int radeon_asic_init(struct radeon_device *rdev); | ||
874 | |||
700 | 875 | ||
701 | /* | 876 | /* |
702 | * IOCTL. | 877 | * IOCTL. |
@@ -751,9 +926,9 @@ struct radeon_device { | |||
751 | uint8_t *bios; | 926 | uint8_t *bios; |
752 | bool is_atom_bios; | 927 | bool is_atom_bios; |
753 | uint16_t bios_header_start; | 928 | uint16_t bios_header_start; |
754 | struct radeon_object *stollen_vga_memory; | 929 | struct radeon_bo *stollen_vga_memory; |
755 | struct fb_info *fbdev_info; | 930 | struct fb_info *fbdev_info; |
756 | struct radeon_object *fbdev_robj; | 931 | struct radeon_bo *fbdev_rbo; |
757 | struct radeon_framebuffer *fbdev_rfb; | 932 | struct radeon_framebuffer *fbdev_rfb; |
758 | /* Register mmio */ | 933 | /* Register mmio */ |
759 | resource_size_t rmmio_base; | 934 | resource_size_t rmmio_base; |
@@ -791,8 +966,24 @@ struct radeon_device { | |||
791 | struct radeon_surface_reg surface_regs[RADEON_GEM_MAX_SURFACES]; | 966 | struct radeon_surface_reg surface_regs[RADEON_GEM_MAX_SURFACES]; |
792 | const struct firmware *me_fw; /* all family ME firmware */ | 967 | const struct firmware *me_fw; /* all family ME firmware */ |
793 | const struct firmware *pfp_fw; /* r6/700 PFP firmware */ | 968 | const struct firmware *pfp_fw; /* r6/700 PFP firmware */ |
969 | const struct firmware *rlc_fw; /* r6/700 RLC firmware */ | ||
794 | struct r600_blit r600_blit; | 970 | struct r600_blit r600_blit; |
795 | int msi_enabled; /* msi enabled */ | 971 | int msi_enabled; /* msi enabled */ |
972 | struct r600_ih ih; /* r6/700 interrupt ring */ | ||
973 | struct workqueue_struct *wq; | ||
974 | struct work_struct hotplug_work; | ||
975 | int num_crtc; /* number of crtcs */ | ||
976 | struct mutex dc_hw_i2c_mutex; /* display controller hw i2c mutex */ | ||
977 | |||
978 | /* audio stuff */ | ||
979 | struct timer_list audio_timer; | ||
980 | int audio_channels; | ||
981 | int audio_rate; | ||
982 | int audio_bits_per_sample; | ||
983 | uint8_t audio_status_bits; | ||
984 | uint8_t audio_category_code; | ||
985 | |||
986 | bool powered_down; | ||
796 | }; | 987 | }; |
797 | 988 | ||
798 | int radeon_device_init(struct radeon_device *rdev, | 989 | int radeon_device_init(struct radeon_device *rdev, |
@@ -811,7 +1002,7 @@ void r600_kms_blit_copy(struct radeon_device *rdev, | |||
811 | 1002 | ||
812 | static inline uint32_t r100_mm_rreg(struct radeon_device *rdev, uint32_t reg) | 1003 | static inline uint32_t r100_mm_rreg(struct radeon_device *rdev, uint32_t reg) |
813 | { | 1004 | { |
814 | if (reg < 0x10000) | 1005 | if (reg < rdev->rmmio_size) |
815 | return readl(((void __iomem *)rdev->rmmio) + reg); | 1006 | return readl(((void __iomem *)rdev->rmmio) + reg); |
816 | else { | 1007 | else { |
817 | writel(reg, ((void __iomem *)rdev->rmmio) + RADEON_MM_INDEX); | 1008 | writel(reg, ((void __iomem *)rdev->rmmio) + RADEON_MM_INDEX); |
@@ -821,7 +1012,7 @@ static inline uint32_t r100_mm_rreg(struct radeon_device *rdev, uint32_t reg) | |||
821 | 1012 | ||
822 | static inline void r100_mm_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v) | 1013 | static inline void r100_mm_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v) |
823 | { | 1014 | { |
824 | if (reg < 0x10000) | 1015 | if (reg < rdev->rmmio_size) |
825 | writel(v, ((void __iomem *)rdev->rmmio) + reg); | 1016 | writel(v, ((void __iomem *)rdev->rmmio) + reg); |
826 | else { | 1017 | else { |
827 | writel(reg, ((void __iomem *)rdev->rmmio) + RADEON_MM_INDEX); | 1018 | writel(reg, ((void __iomem *)rdev->rmmio) + RADEON_MM_INDEX); |
@@ -829,6 +1020,10 @@ static inline void r100_mm_wreg(struct radeon_device *rdev, uint32_t reg, uint32 | |||
829 | } | 1020 | } |
830 | } | 1021 | } |
831 | 1022 | ||
1023 | /* | ||
1024 | * Cast helper | ||
1025 | */ | ||
1026 | #define to_radeon_fence(p) ((struct radeon_fence *)(p)) | ||
832 | 1027 | ||
833 | /* | 1028 | /* |
834 | * Registers read & write functions. | 1029 | * Registers read & write functions. |
@@ -846,6 +1041,8 @@ static inline void r100_mm_wreg(struct radeon_device *rdev, uint32_t reg, uint32 | |||
846 | #define WREG32_MC(reg, v) rdev->mc_wreg(rdev, (reg), (v)) | 1041 | #define WREG32_MC(reg, v) rdev->mc_wreg(rdev, (reg), (v)) |
847 | #define RREG32_PCIE(reg) rv370_pcie_rreg(rdev, (reg)) | 1042 | #define RREG32_PCIE(reg) rv370_pcie_rreg(rdev, (reg)) |
848 | #define WREG32_PCIE(reg, v) rv370_pcie_wreg(rdev, (reg), (v)) | 1043 | #define WREG32_PCIE(reg, v) rv370_pcie_wreg(rdev, (reg), (v)) |
1044 | #define RREG32_PCIE_P(reg) rdev->pciep_rreg(rdev, (reg)) | ||
1045 | #define WREG32_PCIE_P(reg, v) rdev->pciep_wreg(rdev, (reg), (v)) | ||
849 | #define WREG32_P(reg, val, mask) \ | 1046 | #define WREG32_P(reg, val, mask) \ |
850 | do { \ | 1047 | do { \ |
851 | uint32_t tmp_ = RREG32(reg); \ | 1048 | uint32_t tmp_ = RREG32(reg); \ |
@@ -907,7 +1104,7 @@ void r100_pll_errata_after_index(struct radeon_device *rdev); | |||
907 | #define ASIC_IS_AVIVO(rdev) ((rdev->family >= CHIP_RS600)) | 1104 | #define ASIC_IS_AVIVO(rdev) ((rdev->family >= CHIP_RS600)) |
908 | #define ASIC_IS_DCE3(rdev) ((rdev->family >= CHIP_RV620)) | 1105 | #define ASIC_IS_DCE3(rdev) ((rdev->family >= CHIP_RV620)) |
909 | #define ASIC_IS_DCE32(rdev) ((rdev->family >= CHIP_RV730)) | 1106 | #define ASIC_IS_DCE32(rdev) ((rdev->family >= CHIP_RV730)) |
910 | 1107 | #define ASIC_IS_DCE4(rdev) ((rdev->family >= CHIP_CEDAR)) | |
911 | 1108 | ||
912 | /* | 1109 | /* |
913 | * BIOS helpers. | 1110 | * BIOS helpers. |
@@ -965,18 +1162,29 @@ static inline void radeon_ring_write(struct radeon_device *rdev, uint32_t v) | |||
965 | #define radeon_get_engine_clock(rdev) (rdev)->asic->get_engine_clock((rdev)) | 1162 | #define radeon_get_engine_clock(rdev) (rdev)->asic->get_engine_clock((rdev)) |
966 | #define radeon_set_engine_clock(rdev, e) (rdev)->asic->set_engine_clock((rdev), (e)) | 1163 | #define radeon_set_engine_clock(rdev, e) (rdev)->asic->set_engine_clock((rdev), (e)) |
967 | #define radeon_get_memory_clock(rdev) (rdev)->asic->get_memory_clock((rdev)) | 1164 | #define radeon_get_memory_clock(rdev) (rdev)->asic->get_memory_clock((rdev)) |
968 | #define radeon_set_memory_clock(rdev, e) (rdev)->asic->set_engine_clock((rdev), (e)) | 1165 | #define radeon_set_memory_clock(rdev, e) (rdev)->asic->set_memory_clock((rdev), (e)) |
1166 | #define radeon_get_pcie_lanes(rdev) (rdev)->asic->get_pcie_lanes((rdev)) | ||
969 | #define radeon_set_pcie_lanes(rdev, l) (rdev)->asic->set_pcie_lanes((rdev), (l)) | 1167 | #define radeon_set_pcie_lanes(rdev, l) (rdev)->asic->set_pcie_lanes((rdev), (l)) |
970 | #define radeon_set_clock_gating(rdev, e) (rdev)->asic->set_clock_gating((rdev), (e)) | 1168 | #define radeon_set_clock_gating(rdev, e) (rdev)->asic->set_clock_gating((rdev), (e)) |
971 | #define radeon_set_surface_reg(rdev, r, f, p, o, s) ((rdev)->asic->set_surface_reg((rdev), (r), (f), (p), (o), (s))) | 1169 | #define radeon_set_surface_reg(rdev, r, f, p, o, s) ((rdev)->asic->set_surface_reg((rdev), (r), (f), (p), (o), (s))) |
972 | #define radeon_clear_surface_reg(rdev, r) ((rdev)->asic->clear_surface_reg((rdev), (r))) | 1170 | #define radeon_clear_surface_reg(rdev, r) ((rdev)->asic->clear_surface_reg((rdev), (r))) |
973 | #define radeon_bandwidth_update(rdev) (rdev)->asic->bandwidth_update((rdev)) | 1171 | #define radeon_bandwidth_update(rdev) (rdev)->asic->bandwidth_update((rdev)) |
1172 | #define radeon_hpd_init(rdev) (rdev)->asic->hpd_init((rdev)) | ||
1173 | #define radeon_hpd_fini(rdev) (rdev)->asic->hpd_fini((rdev)) | ||
1174 | #define radeon_hpd_sense(rdev, hpd) (rdev)->asic->hpd_sense((rdev), (hpd)) | ||
1175 | #define radeon_hpd_set_polarity(rdev, hpd) (rdev)->asic->hpd_set_polarity((rdev), (hpd)) | ||
974 | 1176 | ||
975 | /* Common functions */ | 1177 | /* Common functions */ |
1178 | /* AGP */ | ||
1179 | extern void radeon_agp_disable(struct radeon_device *rdev); | ||
976 | extern int radeon_gart_table_vram_pin(struct radeon_device *rdev); | 1180 | extern int radeon_gart_table_vram_pin(struct radeon_device *rdev); |
1181 | extern void radeon_gart_restore(struct radeon_device *rdev); | ||
977 | extern int radeon_modeset_init(struct radeon_device *rdev); | 1182 | extern int radeon_modeset_init(struct radeon_device *rdev); |
978 | extern void radeon_modeset_fini(struct radeon_device *rdev); | 1183 | extern void radeon_modeset_fini(struct radeon_device *rdev); |
979 | extern bool radeon_card_posted(struct radeon_device *rdev); | 1184 | extern bool radeon_card_posted(struct radeon_device *rdev); |
1185 | extern void radeon_update_bandwidth_info(struct radeon_device *rdev); | ||
1186 | extern void radeon_update_display_priority(struct radeon_device *rdev); | ||
1187 | extern bool radeon_boot_test_post_card(struct radeon_device *rdev); | ||
980 | extern int radeon_clocks_init(struct radeon_device *rdev); | 1188 | extern int radeon_clocks_init(struct radeon_device *rdev); |
981 | extern void radeon_clocks_fini(struct radeon_device *rdev); | 1189 | extern void radeon_clocks_fini(struct radeon_device *rdev); |
982 | extern void radeon_scratch_init(struct radeon_device *rdev); | 1190 | extern void radeon_scratch_init(struct radeon_device *rdev); |
@@ -984,51 +1192,14 @@ extern void radeon_surface_init(struct radeon_device *rdev); | |||
984 | extern int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data); | 1192 | extern int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data); |
985 | extern void radeon_legacy_set_clock_gating(struct radeon_device *rdev, int enable); | 1193 | extern void radeon_legacy_set_clock_gating(struct radeon_device *rdev, int enable); |
986 | extern void radeon_atom_set_clock_gating(struct radeon_device *rdev, int enable); | 1194 | extern void radeon_atom_set_clock_gating(struct radeon_device *rdev, int enable); |
1195 | extern void radeon_ttm_placement_from_domain(struct radeon_bo *rbo, u32 domain); | ||
1196 | extern bool radeon_ttm_bo_is_radeon_bo(struct ttm_buffer_object *bo); | ||
1197 | extern void radeon_vram_location(struct radeon_device *rdev, struct radeon_mc *mc, u64 base); | ||
1198 | extern void radeon_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc); | ||
1199 | extern int radeon_resume_kms(struct drm_device *dev); | ||
1200 | extern int radeon_suspend_kms(struct drm_device *dev, pm_message_t state); | ||
987 | 1201 | ||
988 | /* r100,rv100,rs100,rv200,rs200,r200,rv250,rs300,rv280 */ | 1202 | /* r100,rv100,rs100,rv200,rs200,r200,rv250,rs300,rv280 */ |
989 | struct r100_mc_save { | ||
990 | u32 GENMO_WT; | ||
991 | u32 CRTC_EXT_CNTL; | ||
992 | u32 CRTC_GEN_CNTL; | ||
993 | u32 CRTC2_GEN_CNTL; | ||
994 | u32 CUR_OFFSET; | ||
995 | u32 CUR2_OFFSET; | ||
996 | }; | ||
997 | extern void r100_cp_disable(struct radeon_device *rdev); | ||
998 | extern int r100_cp_init(struct radeon_device *rdev, unsigned ring_size); | ||
999 | extern void r100_cp_fini(struct radeon_device *rdev); | ||
1000 | extern void r100_pci_gart_tlb_flush(struct radeon_device *rdev); | ||
1001 | extern int r100_pci_gart_init(struct radeon_device *rdev); | ||
1002 | extern void r100_pci_gart_fini(struct radeon_device *rdev); | ||
1003 | extern int r100_pci_gart_enable(struct radeon_device *rdev); | ||
1004 | extern void r100_pci_gart_disable(struct radeon_device *rdev); | ||
1005 | extern int r100_pci_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr); | ||
1006 | extern int r100_debugfs_mc_info_init(struct radeon_device *rdev); | ||
1007 | extern int r100_gui_wait_for_idle(struct radeon_device *rdev); | ||
1008 | extern void r100_ib_fini(struct radeon_device *rdev); | ||
1009 | extern int r100_ib_init(struct radeon_device *rdev); | ||
1010 | extern void r100_irq_disable(struct radeon_device *rdev); | ||
1011 | extern int r100_irq_set(struct radeon_device *rdev); | ||
1012 | extern void r100_mc_stop(struct radeon_device *rdev, struct r100_mc_save *save); | ||
1013 | extern void r100_mc_resume(struct radeon_device *rdev, struct r100_mc_save *save); | ||
1014 | extern void r100_vram_init_sizes(struct radeon_device *rdev); | ||
1015 | extern void r100_wb_disable(struct radeon_device *rdev); | ||
1016 | extern void r100_wb_fini(struct radeon_device *rdev); | ||
1017 | extern int r100_wb_init(struct radeon_device *rdev); | ||
1018 | extern void r100_hdp_reset(struct radeon_device *rdev); | ||
1019 | extern int r100_rb2d_reset(struct radeon_device *rdev); | ||
1020 | extern int r100_cp_reset(struct radeon_device *rdev); | ||
1021 | extern void r100_vga_render_disable(struct radeon_device *rdev); | ||
1022 | extern int r100_cs_track_check_pkt3_indx_buffer(struct radeon_cs_parser *p, | ||
1023 | struct radeon_cs_packet *pkt, | ||
1024 | struct radeon_object *robj); | ||
1025 | extern int r100_cs_parse_packet0(struct radeon_cs_parser *p, | ||
1026 | struct radeon_cs_packet *pkt, | ||
1027 | const unsigned *auth, unsigned n, | ||
1028 | radeon_packet0_check_t check); | ||
1029 | extern int r100_cs_packet_parse(struct radeon_cs_parser *p, | ||
1030 | struct radeon_cs_packet *pkt, | ||
1031 | unsigned idx); | ||
1032 | 1203 | ||
1033 | /* rv200,rv250,rv280 */ | 1204 | /* rv200,rv250,rv280 */ |
1034 | extern void r200_set_safe_registers(struct radeon_device *rdev); | 1205 | extern void r200_set_safe_registers(struct radeon_device *rdev); |
@@ -1036,7 +1207,7 @@ extern void r200_set_safe_registers(struct radeon_device *rdev); | |||
1036 | /* r300,r350,rv350,rv370,rv380 */ | 1207 | /* r300,r350,rv350,rv370,rv380 */ |
1037 | extern void r300_set_reg_safe(struct radeon_device *rdev); | 1208 | extern void r300_set_reg_safe(struct radeon_device *rdev); |
1038 | extern void r300_mc_program(struct radeon_device *rdev); | 1209 | extern void r300_mc_program(struct radeon_device *rdev); |
1039 | extern void r300_vram_info(struct radeon_device *rdev); | 1210 | extern void r300_mc_init(struct radeon_device *rdev); |
1040 | extern void r300_clock_startup(struct radeon_device *rdev); | 1211 | extern void r300_clock_startup(struct radeon_device *rdev); |
1041 | extern int r300_mc_wait_for_idle(struct radeon_device *rdev); | 1212 | extern int r300_mc_wait_for_idle(struct radeon_device *rdev); |
1042 | extern int rv370_pcie_gart_init(struct radeon_device *rdev); | 1213 | extern int rv370_pcie_gart_init(struct radeon_device *rdev); |
@@ -1045,7 +1216,6 @@ extern int rv370_pcie_gart_enable(struct radeon_device *rdev); | |||
1045 | extern void rv370_pcie_gart_disable(struct radeon_device *rdev); | 1216 | extern void rv370_pcie_gart_disable(struct radeon_device *rdev); |
1046 | 1217 | ||
1047 | /* r420,r423,rv410 */ | 1218 | /* r420,r423,rv410 */ |
1048 | extern int r420_mc_init(struct radeon_device *rdev); | ||
1049 | extern u32 r420_mc_rreg(struct radeon_device *rdev, u32 reg); | 1219 | extern u32 r420_mc_rreg(struct radeon_device *rdev, u32 reg); |
1050 | extern void r420_mc_wreg(struct radeon_device *rdev, u32 reg, u32 v); | 1220 | extern void r420_mc_wreg(struct radeon_device *rdev, u32 reg, u32 v); |
1051 | extern int r420_debugfs_pipes_info_init(struct radeon_device *rdev); | 1221 | extern int r420_debugfs_pipes_info_init(struct radeon_device *rdev); |
@@ -1087,12 +1257,13 @@ extern void rs690_line_buffer_adjust(struct radeon_device *rdev, | |||
1087 | struct drm_display_mode *mode2); | 1257 | struct drm_display_mode *mode2); |
1088 | 1258 | ||
1089 | /* r600, rv610, rv630, rv620, rv635, rv670, rs780, rs880 */ | 1259 | /* r600, rv610, rv630, rv620, rv635, rv670, rs780, rs880 */ |
1260 | extern void r600_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc); | ||
1090 | extern bool r600_card_posted(struct radeon_device *rdev); | 1261 | extern bool r600_card_posted(struct radeon_device *rdev); |
1091 | extern void r600_cp_stop(struct radeon_device *rdev); | 1262 | extern void r600_cp_stop(struct radeon_device *rdev); |
1092 | extern void r600_ring_init(struct radeon_device *rdev, unsigned ring_size); | 1263 | extern void r600_ring_init(struct radeon_device *rdev, unsigned ring_size); |
1093 | extern int r600_cp_resume(struct radeon_device *rdev); | 1264 | extern int r600_cp_resume(struct radeon_device *rdev); |
1265 | extern void r600_cp_fini(struct radeon_device *rdev); | ||
1094 | extern int r600_count_pipe_bits(uint32_t val); | 1266 | extern int r600_count_pipe_bits(uint32_t val); |
1095 | extern int r600_gart_clear_page(struct radeon_device *rdev, int i); | ||
1096 | extern int r600_mc_wait_for_idle(struct radeon_device *rdev); | 1267 | extern int r600_mc_wait_for_idle(struct radeon_device *rdev); |
1097 | extern int r600_pcie_gart_init(struct radeon_device *rdev); | 1268 | extern int r600_pcie_gart_init(struct radeon_device *rdev); |
1098 | extern void r600_pcie_gart_tlb_flush(struct radeon_device *rdev); | 1269 | extern void r600_pcie_gart_tlb_flush(struct radeon_device *rdev); |
@@ -1104,7 +1275,39 @@ extern void r600_wb_disable(struct radeon_device *rdev); | |||
1104 | extern void r600_scratch_init(struct radeon_device *rdev); | 1275 | extern void r600_scratch_init(struct radeon_device *rdev); |
1105 | extern int r600_blit_init(struct radeon_device *rdev); | 1276 | extern int r600_blit_init(struct radeon_device *rdev); |
1106 | extern void r600_blit_fini(struct radeon_device *rdev); | 1277 | extern void r600_blit_fini(struct radeon_device *rdev); |
1107 | extern int r600_cp_init_microcode(struct radeon_device *rdev); | 1278 | extern int r600_init_microcode(struct radeon_device *rdev); |
1108 | extern int r600_gpu_reset(struct radeon_device *rdev); | 1279 | extern int r600_gpu_reset(struct radeon_device *rdev); |
1280 | /* r600 irq */ | ||
1281 | extern int r600_irq_init(struct radeon_device *rdev); | ||
1282 | extern void r600_irq_fini(struct radeon_device *rdev); | ||
1283 | extern void r600_ih_ring_init(struct radeon_device *rdev, unsigned ring_size); | ||
1284 | extern int r600_irq_set(struct radeon_device *rdev); | ||
1285 | extern void r600_irq_suspend(struct radeon_device *rdev); | ||
1286 | /* r600 audio */ | ||
1287 | extern int r600_audio_init(struct radeon_device *rdev); | ||
1288 | extern int r600_audio_tmds_index(struct drm_encoder *encoder); | ||
1289 | extern void r600_audio_set_clock(struct drm_encoder *encoder, int clock); | ||
1290 | extern void r600_audio_fini(struct radeon_device *rdev); | ||
1291 | extern void r600_hdmi_init(struct drm_encoder *encoder); | ||
1292 | extern void r600_hdmi_enable(struct drm_encoder *encoder); | ||
1293 | extern void r600_hdmi_disable(struct drm_encoder *encoder); | ||
1294 | extern void r600_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode *mode); | ||
1295 | extern int r600_hdmi_buffer_status_changed(struct drm_encoder *encoder); | ||
1296 | extern void r600_hdmi_update_audio_settings(struct drm_encoder *encoder, | ||
1297 | int channels, | ||
1298 | int rate, | ||
1299 | int bps, | ||
1300 | uint8_t status_bits, | ||
1301 | uint8_t category_code); | ||
1302 | |||
1303 | /* evergreen */ | ||
1304 | struct evergreen_mc_save { | ||
1305 | u32 vga_control[6]; | ||
1306 | u32 vga_render_control; | ||
1307 | u32 vga_hdp_control; | ||
1308 | u32 crtc_control[6]; | ||
1309 | }; | ||
1310 | |||
1311 | #include "radeon_object.h" | ||
1109 | 1312 | ||
1110 | #endif | 1313 | #endif |