]> bbs.cooldavid.org Git - net-next-2.6.git/blob - drivers/gpu/drm/radeon/radeon.h
drm/fbdev: fix cloning on fbcon
[net-next-2.6.git] / drivers / gpu / drm / radeon / radeon.h
1 /*
2  * Copyright 2008 Advanced Micro Devices, Inc.
3  * Copyright 2008 Red Hat Inc.
4  * Copyright 2009 Jerome Glisse.
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a
7  * copy of this software and associated documentation files (the "Software"),
8  * to deal in the Software without restriction, including without limitation
9  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10  * and/or sell copies of the Software, and to permit persons to whom the
11  * Software is furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
20  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22  * OTHER DEALINGS IN THE SOFTWARE.
23  *
24  * Authors: Dave Airlie
25  *          Alex Deucher
26  *          Jerome Glisse
27  */
28 #ifndef __RADEON_H__
29 #define __RADEON_H__
30
31 /* TODO: Here are things that needs to be done :
32  *      - surface allocator & initializer : (bit like scratch reg) should
33  *        initialize HDP_ stuff on RS600, R600, R700 hw, well anythings
34  *        related to surface
35  *      - WB : write back stuff (do it bit like scratch reg things)
36  *      - Vblank : look at Jesse's rework and what we should do
37  *      - r600/r700: gart & cp
38  *      - cs : clean cs ioctl use bitmap & things like that.
39  *      - power management stuff
40  *      - Barrier in gart code
41  *      - Unmappabled vram ?
42  *      - TESTING, TESTING, TESTING
43  */
44
45 /* Initialization path:
46  *  We expect that acceleration initialization might fail for various
47  *  reasons even thought we work hard to make it works on most
48  *  configurations. In order to still have a working userspace in such
49  *  situation the init path must succeed up to the memory controller
50  *  initialization point. Failure before this point are considered as
51  *  fatal error. Here is the init callchain :
52  *      radeon_device_init  perform common structure, mutex initialization
53  *      asic_init           setup the GPU memory layout and perform all
54  *                          one time initialization (failure in this
55  *                          function are considered fatal)
56  *      asic_startup        setup the GPU acceleration, in order to
57  *                          follow guideline the first thing this
58  *                          function should do is setting the GPU
59  *                          memory controller (only MC setup failure
60  *                          are considered as fatal)
61  */
62
63 #include <asm/atomic.h>
64 #include <linux/wait.h>
65 #include <linux/list.h>
66 #include <linux/kref.h>
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
73 #include "radeon_family.h"
74 #include "radeon_mode.h"
75 #include "radeon_reg.h"
76
77 /*
78  * Modules parameters.
79  */
80 extern int radeon_no_wb;
81 extern int radeon_modeset;
82 extern int radeon_dynclks;
83 extern int radeon_r4xx_atom;
84 extern int radeon_agpmode;
85 extern int radeon_vram_limit;
86 extern int radeon_gart_size;
87 extern int radeon_benchmarking;
88 extern int radeon_testing;
89 extern int radeon_connector_table;
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;
96
97 /*
98  * Copy from radeon_drv.h so we don't have to include both and have conflicting
99  * symbol;
100  */
101 #define RADEON_MAX_USEC_TIMEOUT         100000  /* 100 ms */
102 #define RADEON_FENCE_JIFFIES_TIMEOUT    (HZ / 2)
103 /* RADEON_IB_POOL_SIZE must be a power of 2 */
104 #define RADEON_IB_POOL_SIZE             16
105 #define RADEON_DEBUGFS_MAX_NUM_FILES    32
106 #define RADEONFB_CONN_LIMIT             4
107 #define RADEON_BIOS_NUM_SCRATCH         8
108
109 /*
110  * Errata workarounds.
111  */
112 enum radeon_pll_errata {
113         CHIP_ERRATA_R300_CG             = 0x00000001,
114         CHIP_ERRATA_PLL_DUMMYREADS      = 0x00000002,
115         CHIP_ERRATA_PLL_DELAY           = 0x00000004
116 };
117
118
119 struct radeon_device;
120
121
122 /*
123  * BIOS.
124  */
125 #define ATRM_BIOS_PAGE 4096
126
127 #if defined(CONFIG_VGA_SWITCHEROO)
128 bool radeon_atrm_supported(struct pci_dev *pdev);
129 int radeon_atrm_get_bios_chunk(uint8_t *bios, int offset, int len);
130 #else
131 static inline bool radeon_atrm_supported(struct pci_dev *pdev)
132 {
133         return false;
134 }
135
136 static inline int radeon_atrm_get_bios_chunk(uint8_t *bios, int offset, int len){
137         return -EINVAL;
138 }
139 #endif
140 bool radeon_get_bios(struct radeon_device *rdev);
141
142
143 /*
144  * Dummy page
145  */
146 struct radeon_dummy_page {
147         struct page     *page;
148         dma_addr_t      addr;
149 };
150 int radeon_dummy_page_init(struct radeon_device *rdev);
151 void radeon_dummy_page_fini(struct radeon_device *rdev);
152
153
154 /*
155  * Clocks
156  */
157 struct radeon_clock {
158         struct radeon_pll p1pll;
159         struct radeon_pll p2pll;
160         struct radeon_pll dcpll;
161         struct radeon_pll spll;
162         struct radeon_pll mpll;
163         /* 10 Khz units */
164         uint32_t default_mclk;
165         uint32_t default_sclk;
166         uint32_t default_dispclk;
167         uint32_t dp_extclk;
168 };
169
170 /*
171  * Power management
172  */
173 int radeon_pm_init(struct radeon_device *rdev);
174 void radeon_pm_fini(struct radeon_device *rdev);
175 void radeon_pm_compute_clocks(struct radeon_device *rdev);
176 void radeon_combios_get_power_modes(struct radeon_device *rdev);
177 void radeon_atombios_get_power_modes(struct radeon_device *rdev);
178
179 /*
180  * Fences.
181  */
182 struct radeon_fence_driver {
183         uint32_t                        scratch_reg;
184         atomic_t                        seq;
185         uint32_t                        last_seq;
186         unsigned long                   last_jiffies;
187         unsigned long                   last_timeout;
188         wait_queue_head_t               queue;
189         rwlock_t                        lock;
190         struct list_head                created;
191         struct list_head                emited;
192         struct list_head                signaled;
193         bool                            initialized;
194 };
195
196 struct radeon_fence {
197         struct radeon_device            *rdev;
198         struct kref                     kref;
199         struct list_head                list;
200         /* protected by radeon_fence.lock */
201         uint32_t                        seq;
202         bool                            emited;
203         bool                            signaled;
204 };
205
206 int radeon_fence_driver_init(struct radeon_device *rdev);
207 void radeon_fence_driver_fini(struct radeon_device *rdev);
208 int radeon_fence_create(struct radeon_device *rdev, struct radeon_fence **fence);
209 int radeon_fence_emit(struct radeon_device *rdev, struct radeon_fence *fence);
210 void radeon_fence_process(struct radeon_device *rdev);
211 bool radeon_fence_signaled(struct radeon_fence *fence);
212 int radeon_fence_wait(struct radeon_fence *fence, bool interruptible);
213 int radeon_fence_wait_next(struct radeon_device *rdev);
214 int radeon_fence_wait_last(struct radeon_device *rdev);
215 struct radeon_fence *radeon_fence_ref(struct radeon_fence *fence);
216 void radeon_fence_unref(struct radeon_fence **fence);
217
218 /*
219  * Tiling registers
220  */
221 struct radeon_surface_reg {
222         struct radeon_bo *bo;
223 };
224
225 #define RADEON_GEM_MAX_SURFACES 8
226
227 /*
228  * TTM.
229  */
230 struct radeon_mman {
231         struct ttm_bo_global_ref        bo_global_ref;
232         struct ttm_global_reference     mem_global_ref;
233         struct ttm_bo_device            bdev;
234         bool                            mem_global_referenced;
235         bool                            initialized;
236 };
237
238 struct radeon_bo {
239         /* Protected by gem.mutex */
240         struct list_head                list;
241         /* Protected by tbo.reserved */
242         u32                             placements[3];
243         struct ttm_placement            placement;
244         struct ttm_buffer_object        tbo;
245         struct ttm_bo_kmap_obj          kmap;
246         unsigned                        pin_count;
247         void                            *kptr;
248         u32                             tiling_flags;
249         u32                             pitch;
250         int                             surface_reg;
251         /* Constant after initialization */
252         struct radeon_device            *rdev;
253         struct drm_gem_object           *gobj;
254 };
255
256 struct radeon_bo_list {
257         struct list_head        list;
258         struct radeon_bo        *bo;
259         uint64_t                gpu_offset;
260         unsigned                rdomain;
261         unsigned                wdomain;
262         u32                     tiling_flags;
263 };
264
265 /*
266  * GEM objects.
267  */
268 struct radeon_gem {
269         struct mutex            mutex;
270         struct list_head        objects;
271 };
272
273 int radeon_gem_init(struct radeon_device *rdev);
274 void radeon_gem_fini(struct radeon_device *rdev);
275 int radeon_gem_object_create(struct radeon_device *rdev, int size,
276                                 int alignment, int initial_domain,
277                                 bool discardable, bool kernel,
278                                 struct drm_gem_object **obj);
279 int radeon_gem_object_pin(struct drm_gem_object *obj, uint32_t pin_domain,
280                           uint64_t *gpu_addr);
281 void radeon_gem_object_unpin(struct drm_gem_object *obj);
282
283
284 /*
285  * GART structures, functions & helpers
286  */
287 struct radeon_mc;
288
289 struct radeon_gart_table_ram {
290         volatile uint32_t               *ptr;
291 };
292
293 struct radeon_gart_table_vram {
294         struct radeon_bo                *robj;
295         volatile uint32_t               *ptr;
296 };
297
298 union radeon_gart_table {
299         struct radeon_gart_table_ram    ram;
300         struct radeon_gart_table_vram   vram;
301 };
302
303 #define RADEON_GPU_PAGE_SIZE 4096
304 #define RADEON_GPU_PAGE_MASK (RADEON_GPU_PAGE_SIZE - 1)
305
306 struct radeon_gart {
307         dma_addr_t                      table_addr;
308         unsigned                        num_gpu_pages;
309         unsigned                        num_cpu_pages;
310         unsigned                        table_size;
311         union radeon_gart_table         table;
312         struct page                     **pages;
313         dma_addr_t                      *pages_addr;
314         bool                            ready;
315 };
316
317 int radeon_gart_table_ram_alloc(struct radeon_device *rdev);
318 void radeon_gart_table_ram_free(struct radeon_device *rdev);
319 int radeon_gart_table_vram_alloc(struct radeon_device *rdev);
320 void radeon_gart_table_vram_free(struct radeon_device *rdev);
321 int radeon_gart_init(struct radeon_device *rdev);
322 void radeon_gart_fini(struct radeon_device *rdev);
323 void radeon_gart_unbind(struct radeon_device *rdev, unsigned offset,
324                         int pages);
325 int radeon_gart_bind(struct radeon_device *rdev, unsigned offset,
326                      int pages, struct page **pagelist);
327
328
329 /*
330  * GPU MC structures, functions & helpers
331  */
332 struct radeon_mc {
333         resource_size_t         aper_size;
334         resource_size_t         aper_base;
335         resource_size_t         agp_base;
336         /* for some chips with <= 32MB we need to lie
337          * about vram size near mc fb location */
338         u64                     mc_vram_size;
339         u64                     visible_vram_size;
340         u64                     gtt_size;
341         u64                     gtt_start;
342         u64                     gtt_end;
343         u64                     vram_start;
344         u64                     vram_end;
345         unsigned                vram_width;
346         u64                     real_vram_size;
347         int                     vram_mtrr;
348         bool                    vram_is_ddr;
349         bool                    igp_sideport_enabled;
350 };
351
352 bool radeon_combios_sideport_present(struct radeon_device *rdev);
353 bool radeon_atombios_sideport_present(struct radeon_device *rdev);
354
355 /*
356  * GPU scratch registers structures, functions & helpers
357  */
358 struct radeon_scratch {
359         unsigned                num_reg;
360         bool                    free[32];
361         uint32_t                reg[32];
362 };
363
364 int radeon_scratch_get(struct radeon_device *rdev, uint32_t *reg);
365 void radeon_scratch_free(struct radeon_device *rdev, uint32_t reg);
366
367
368 /*
369  * IRQS.
370  */
371 struct radeon_irq {
372         bool            installed;
373         bool            sw_int;
374         /* FIXME: use a define max crtc rather than hardcode it */
375         bool            crtc_vblank_int[6];
376         wait_queue_head_t       vblank_queue;
377         /* FIXME: use defines for max hpd/dacs */
378         bool            hpd[6];
379         /* FIXME: use defines for max HDMI blocks */
380         bool            hdmi[2];
381         spinlock_t sw_lock;
382         int sw_refcount;
383 };
384
385 int radeon_irq_kms_init(struct radeon_device *rdev);
386 void radeon_irq_kms_fini(struct radeon_device *rdev);
387 void radeon_irq_kms_sw_irq_get(struct radeon_device *rdev);
388 void radeon_irq_kms_sw_irq_put(struct radeon_device *rdev);
389
390 /*
391  * CP & ring.
392  */
393 struct radeon_ib {
394         struct list_head        list;
395         unsigned                idx;
396         uint64_t                gpu_addr;
397         struct radeon_fence     *fence;
398         uint32_t                *ptr;
399         uint32_t                length_dw;
400         bool                    free;
401 };
402
403 /*
404  * locking -
405  * mutex protects scheduled_ibs, ready, alloc_bm
406  */
407 struct radeon_ib_pool {
408         struct mutex            mutex;
409         struct radeon_bo        *robj;
410         struct list_head        bogus_ib;
411         struct radeon_ib        ibs[RADEON_IB_POOL_SIZE];
412         bool                    ready;
413         unsigned                head_id;
414 };
415
416 struct radeon_cp {
417         struct radeon_bo        *ring_obj;
418         volatile uint32_t       *ring;
419         unsigned                rptr;
420         unsigned                wptr;
421         unsigned                wptr_old;
422         unsigned                ring_size;
423         unsigned                ring_free_dw;
424         int                     count_dw;
425         uint64_t                gpu_addr;
426         uint32_t                align_mask;
427         uint32_t                ptr_mask;
428         struct mutex            mutex;
429         bool                    ready;
430 };
431
432 /*
433  * R6xx+ IH ring
434  */
435 struct r600_ih {
436         struct radeon_bo        *ring_obj;
437         volatile uint32_t       *ring;
438         unsigned                rptr;
439         unsigned                wptr;
440         unsigned                wptr_old;
441         unsigned                ring_size;
442         uint64_t                gpu_addr;
443         uint32_t                ptr_mask;
444         spinlock_t              lock;
445         bool                    enabled;
446 };
447
448 struct r600_blit {
449         struct mutex            mutex;
450         struct radeon_bo        *shader_obj;
451         u64 shader_gpu_addr;
452         u32 vs_offset, ps_offset;
453         u32 state_offset;
454         u32 state_len;
455         u32 vb_used, vb_total;
456         struct radeon_ib *vb_ib;
457 };
458
459 int radeon_ib_get(struct radeon_device *rdev, struct radeon_ib **ib);
460 void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib **ib);
461 int radeon_ib_schedule(struct radeon_device *rdev, struct radeon_ib *ib);
462 int radeon_ib_pool_init(struct radeon_device *rdev);
463 void radeon_ib_pool_fini(struct radeon_device *rdev);
464 int radeon_ib_test(struct radeon_device *rdev);
465 extern void radeon_ib_bogus_add(struct radeon_device *rdev, struct radeon_ib *ib);
466 /* Ring access between begin & end cannot sleep */
467 void radeon_ring_free_size(struct radeon_device *rdev);
468 int radeon_ring_lock(struct radeon_device *rdev, unsigned ndw);
469 void radeon_ring_unlock_commit(struct radeon_device *rdev);
470 void radeon_ring_unlock_undo(struct radeon_device *rdev);
471 int radeon_ring_test(struct radeon_device *rdev);
472 int radeon_ring_init(struct radeon_device *rdev, unsigned ring_size);
473 void radeon_ring_fini(struct radeon_device *rdev);
474
475
476 /*
477  * CS.
478  */
479 struct radeon_cs_reloc {
480         struct drm_gem_object           *gobj;
481         struct radeon_bo                *robj;
482         struct radeon_bo_list           lobj;
483         uint32_t                        handle;
484         uint32_t                        flags;
485 };
486
487 struct radeon_cs_chunk {
488         uint32_t                chunk_id;
489         uint32_t                length_dw;
490         int kpage_idx[2];
491         uint32_t                *kpage[2];
492         uint32_t                *kdata;
493         void __user *user_ptr;
494         int last_copied_page;
495         int last_page_index;
496 };
497
498 struct radeon_cs_parser {
499         struct device           *dev;
500         struct radeon_device    *rdev;
501         struct drm_file         *filp;
502         /* chunks */
503         unsigned                nchunks;
504         struct radeon_cs_chunk  *chunks;
505         uint64_t                *chunks_array;
506         /* IB */
507         unsigned                idx;
508         /* relocations */
509         unsigned                nrelocs;
510         struct radeon_cs_reloc  *relocs;
511         struct radeon_cs_reloc  **relocs_ptr;
512         struct list_head        validated;
513         /* indices of various chunks */
514         int                     chunk_ib_idx;
515         int                     chunk_relocs_idx;
516         struct radeon_ib        *ib;
517         void                    *track;
518         unsigned                family;
519         int parser_error;
520 };
521
522 extern int radeon_cs_update_pages(struct radeon_cs_parser *p, int pg_idx);
523 extern int radeon_cs_finish_pages(struct radeon_cs_parser *p);
524
525
526 static inline u32 radeon_get_ib_value(struct radeon_cs_parser *p, int idx)
527 {
528         struct radeon_cs_chunk *ibc = &p->chunks[p->chunk_ib_idx];
529         u32 pg_idx, pg_offset;
530         u32 idx_value = 0;
531         int new_page;
532
533         pg_idx = (idx * 4) / PAGE_SIZE;
534         pg_offset = (idx * 4) % PAGE_SIZE;
535
536         if (ibc->kpage_idx[0] == pg_idx)
537                 return ibc->kpage[0][pg_offset/4];
538         if (ibc->kpage_idx[1] == pg_idx)
539                 return ibc->kpage[1][pg_offset/4];
540
541         new_page = radeon_cs_update_pages(p, pg_idx);
542         if (new_page < 0) {
543                 p->parser_error = new_page;
544                 return 0;
545         }
546
547         idx_value = ibc->kpage[new_page][pg_offset/4];
548         return idx_value;
549 }
550
551 struct radeon_cs_packet {
552         unsigned        idx;
553         unsigned        type;
554         unsigned        reg;
555         unsigned        opcode;
556         int             count;
557         unsigned        one_reg_wr;
558 };
559
560 typedef int (*radeon_packet0_check_t)(struct radeon_cs_parser *p,
561                                       struct radeon_cs_packet *pkt,
562                                       unsigned idx, unsigned reg);
563 typedef int (*radeon_packet3_check_t)(struct radeon_cs_parser *p,
564                                       struct radeon_cs_packet *pkt);
565
566
567 /*
568  * AGP
569  */
570 int radeon_agp_init(struct radeon_device *rdev);
571 void radeon_agp_resume(struct radeon_device *rdev);
572 void radeon_agp_fini(struct radeon_device *rdev);
573
574
575 /*
576  * Writeback
577  */
578 struct radeon_wb {
579         struct radeon_bo        *wb_obj;
580         volatile uint32_t       *wb;
581         uint64_t                gpu_addr;
582 };
583
584 /**
585  * struct radeon_pm - power management datas
586  * @max_bandwidth:      maximum bandwidth the gpu has (MByte/s)
587  * @igp_sideport_mclk:  sideport memory clock Mhz (rs690,rs740,rs780,rs880)
588  * @igp_system_mclk:    system clock Mhz (rs690,rs740,rs780,rs880)
589  * @igp_ht_link_clk:    ht link clock Mhz (rs690,rs740,rs780,rs880)
590  * @igp_ht_link_width:  ht link width in bits (rs690,rs740,rs780,rs880)
591  * @k8_bandwidth:       k8 bandwidth the gpu has (MByte/s) (IGP)
592  * @sideport_bandwidth: sideport bandwidth the gpu has (MByte/s) (IGP)
593  * @ht_bandwidth:       ht bandwidth the gpu has (MByte/s) (IGP)
594  * @core_bandwidth:     core GPU bandwidth the gpu has (MByte/s) (IGP)
595  * @sclk:               GPU clock Mhz (core bandwith depends of this clock)
596  * @needed_bandwidth:   current bandwidth needs
597  *
598  * It keeps track of various data needed to take powermanagement decision.
599  * Bandwith need is used to determine minimun clock of the GPU and memory.
600  * Equation between gpu/memory clock and available bandwidth is hw dependent
601  * (type of memory, bus size, efficiency, ...)
602  */
603 enum radeon_pm_state {
604         PM_STATE_DISABLED,
605         PM_STATE_MINIMUM,
606         PM_STATE_PAUSED,
607         PM_STATE_ACTIVE
608 };
609 enum radeon_pm_action {
610         PM_ACTION_NONE,
611         PM_ACTION_MINIMUM,
612         PM_ACTION_DOWNCLOCK,
613         PM_ACTION_UPCLOCK
614 };
615
616 enum radeon_voltage_type {
617         VOLTAGE_NONE = 0,
618         VOLTAGE_GPIO,
619         VOLTAGE_VDDC,
620         VOLTAGE_SW
621 };
622
623 enum radeon_pm_state_type {
624         POWER_STATE_TYPE_DEFAULT,
625         POWER_STATE_TYPE_POWERSAVE,
626         POWER_STATE_TYPE_BATTERY,
627         POWER_STATE_TYPE_BALANCED,
628         POWER_STATE_TYPE_PERFORMANCE,
629 };
630
631 enum radeon_pm_clock_mode_type {
632         POWER_MODE_TYPE_DEFAULT,
633         POWER_MODE_TYPE_LOW,
634         POWER_MODE_TYPE_MID,
635         POWER_MODE_TYPE_HIGH,
636 };
637
638 struct radeon_voltage {
639         enum radeon_voltage_type type;
640         /* gpio voltage */
641         struct radeon_gpio_rec gpio;
642         u32 delay; /* delay in usec from voltage drop to sclk change */
643         bool active_high; /* voltage drop is active when bit is high */
644         /* VDDC voltage */
645         u8 vddc_id; /* index into vddc voltage table */
646         u8 vddci_id; /* index into vddci voltage table */
647         bool vddci_enabled;
648         /* r6xx+ sw */
649         u32 voltage;
650 };
651
652 struct radeon_pm_non_clock_info {
653         /* pcie lanes */
654         int pcie_lanes;
655         /* standardized non-clock flags */
656         u32 flags;
657 };
658
659 struct radeon_pm_clock_info {
660         /* memory clock */
661         u32 mclk;
662         /* engine clock */
663         u32 sclk;
664         /* voltage info */
665         struct radeon_voltage voltage;
666         /* standardized clock flags - not sure we'll need these */
667         u32 flags;
668 };
669
670 struct radeon_power_state {
671         enum radeon_pm_state_type type;
672         /* XXX: use a define for num clock modes */
673         struct radeon_pm_clock_info clock_info[8];
674         /* number of valid clock modes in this power state */
675         int num_clock_modes;
676         struct radeon_pm_clock_info *default_clock_mode;
677         /* non clock info about this state */
678         struct radeon_pm_non_clock_info non_clock_info;
679         bool voltage_drop_active;
680 };
681
682 /*
683  * Some modes are overclocked by very low value, accept them
684  */
685 #define RADEON_MODE_OVERCLOCK_MARGIN 500 /* 5 MHz */
686
687 struct radeon_pm {
688         struct mutex            mutex;
689         struct delayed_work     idle_work;
690         enum radeon_pm_state    state;
691         enum radeon_pm_action   planned_action;
692         unsigned long           action_timeout;
693         bool                    downclocked;
694         int                     active_crtcs;
695         int                     req_vblank;
696         bool                    vblank_sync;
697         fixed20_12              max_bandwidth;
698         fixed20_12              igp_sideport_mclk;
699         fixed20_12              igp_system_mclk;
700         fixed20_12              igp_ht_link_clk;
701         fixed20_12              igp_ht_link_width;
702         fixed20_12              k8_bandwidth;
703         fixed20_12              sideport_bandwidth;
704         fixed20_12              ht_bandwidth;
705         fixed20_12              core_bandwidth;
706         fixed20_12              sclk;
707         fixed20_12              mclk;
708         fixed20_12              needed_bandwidth;
709         /* XXX: use a define for num power modes */
710         struct radeon_power_state power_state[8];
711         /* number of valid power states */
712         int                     num_power_states;
713         struct radeon_power_state *current_power_state;
714         struct radeon_pm_clock_info *current_clock_mode;
715         struct radeon_power_state *requested_power_state;
716         struct radeon_pm_clock_info *requested_clock_mode;
717         struct radeon_power_state *default_power_state;
718         struct radeon_i2c_chan *i2c_bus;
719 };
720
721
722 /*
723  * Benchmarking
724  */
725 void radeon_benchmark(struct radeon_device *rdev);
726
727
728 /*
729  * Testing
730  */
731 void radeon_test_moves(struct radeon_device *rdev);
732
733
734 /*
735  * Debugfs
736  */
737 int radeon_debugfs_add_files(struct radeon_device *rdev,
738                              struct drm_info_list *files,
739                              unsigned nfiles);
740 int radeon_debugfs_fence_init(struct radeon_device *rdev);
741
742
743 /*
744  * ASIC specific functions.
745  */
746 struct radeon_asic {
747         int (*init)(struct radeon_device *rdev);
748         void (*fini)(struct radeon_device *rdev);
749         int (*resume)(struct radeon_device *rdev);
750         int (*suspend)(struct radeon_device *rdev);
751         void (*vga_set_state)(struct radeon_device *rdev, bool state);
752         bool (*gpu_is_lockup)(struct radeon_device *rdev);
753         int (*asic_reset)(struct radeon_device *rdev);
754         void (*gart_tlb_flush)(struct radeon_device *rdev);
755         int (*gart_set_page)(struct radeon_device *rdev, int i, uint64_t addr);
756         int (*cp_init)(struct radeon_device *rdev, unsigned ring_size);
757         void (*cp_fini)(struct radeon_device *rdev);
758         void (*cp_disable)(struct radeon_device *rdev);
759         void (*cp_commit)(struct radeon_device *rdev);
760         void (*ring_start)(struct radeon_device *rdev);
761         int (*ring_test)(struct radeon_device *rdev);
762         void (*ring_ib_execute)(struct radeon_device *rdev, struct radeon_ib *ib);
763         int (*irq_set)(struct radeon_device *rdev);
764         int (*irq_process)(struct radeon_device *rdev);
765         u32 (*get_vblank_counter)(struct radeon_device *rdev, int crtc);
766         void (*fence_ring_emit)(struct radeon_device *rdev, struct radeon_fence *fence);
767         int (*cs_parse)(struct radeon_cs_parser *p);
768         int (*copy_blit)(struct radeon_device *rdev,
769                          uint64_t src_offset,
770                          uint64_t dst_offset,
771                          unsigned num_pages,
772                          struct radeon_fence *fence);
773         int (*copy_dma)(struct radeon_device *rdev,
774                         uint64_t src_offset,
775                         uint64_t dst_offset,
776                         unsigned num_pages,
777                         struct radeon_fence *fence);
778         int (*copy)(struct radeon_device *rdev,
779                     uint64_t src_offset,
780                     uint64_t dst_offset,
781                     unsigned num_pages,
782                     struct radeon_fence *fence);
783         uint32_t (*get_engine_clock)(struct radeon_device *rdev);
784         void (*set_engine_clock)(struct radeon_device *rdev, uint32_t eng_clock);
785         uint32_t (*get_memory_clock)(struct radeon_device *rdev);
786         void (*set_memory_clock)(struct radeon_device *rdev, uint32_t mem_clock);
787         int (*get_pcie_lanes)(struct radeon_device *rdev);
788         void (*set_pcie_lanes)(struct radeon_device *rdev, int lanes);
789         void (*set_clock_gating)(struct radeon_device *rdev, int enable);
790         int (*set_surface_reg)(struct radeon_device *rdev, int reg,
791                                uint32_t tiling_flags, uint32_t pitch,
792                                uint32_t offset, uint32_t obj_size);
793         void (*clear_surface_reg)(struct radeon_device *rdev, int reg);
794         void (*bandwidth_update)(struct radeon_device *rdev);
795         void (*hpd_init)(struct radeon_device *rdev);
796         void (*hpd_fini)(struct radeon_device *rdev);
797         bool (*hpd_sense)(struct radeon_device *rdev, enum radeon_hpd_id hpd);
798         void (*hpd_set_polarity)(struct radeon_device *rdev, enum radeon_hpd_id hpd);
799         /* ioctl hw specific callback. Some hw might want to perform special
800          * operation on specific ioctl. For instance on wait idle some hw
801          * might want to perform and HDP flush through MMIO as it seems that
802          * some R6XX/R7XX hw doesn't take HDP flush into account if programmed
803          * through ring.
804          */
805         void (*ioctl_wait_idle)(struct radeon_device *rdev, struct radeon_bo *bo);
806 };
807
808 /*
809  * Asic structures
810  */
811 struct r100_gpu_lockup {
812         unsigned long   last_jiffies;
813         u32             last_cp_rptr;
814 };
815
816 struct r100_asic {
817         const unsigned          *reg_safe_bm;
818         unsigned                reg_safe_bm_size;
819         u32                     hdp_cntl;
820         struct r100_gpu_lockup  lockup;
821 };
822
823 struct r300_asic {
824         const unsigned          *reg_safe_bm;
825         unsigned                reg_safe_bm_size;
826         u32                     resync_scratch;
827         u32                     hdp_cntl;
828         struct r100_gpu_lockup  lockup;
829 };
830
831 struct r600_asic {
832         unsigned                max_pipes;
833         unsigned                max_tile_pipes;
834         unsigned                max_simds;
835         unsigned                max_backends;
836         unsigned                max_gprs;
837         unsigned                max_threads;
838         unsigned                max_stack_entries;
839         unsigned                max_hw_contexts;
840         unsigned                max_gs_threads;
841         unsigned                sx_max_export_size;
842         unsigned                sx_max_export_pos_size;
843         unsigned                sx_max_export_smx_size;
844         unsigned                sq_num_cf_insts;
845         unsigned                tiling_nbanks;
846         unsigned                tiling_npipes;
847         unsigned                tiling_group_size;
848         struct r100_gpu_lockup  lockup;
849 };
850
851 struct rv770_asic {
852         unsigned                max_pipes;
853         unsigned                max_tile_pipes;
854         unsigned                max_simds;
855         unsigned                max_backends;
856         unsigned                max_gprs;
857         unsigned                max_threads;
858         unsigned                max_stack_entries;
859         unsigned                max_hw_contexts;
860         unsigned                max_gs_threads;
861         unsigned                sx_max_export_size;
862         unsigned                sx_max_export_pos_size;
863         unsigned                sx_max_export_smx_size;
864         unsigned                sq_num_cf_insts;
865         unsigned                sx_num_of_sets;
866         unsigned                sc_prim_fifo_size;
867         unsigned                sc_hiz_tile_fifo_size;
868         unsigned                sc_earlyz_tile_fifo_fize;
869         unsigned                tiling_nbanks;
870         unsigned                tiling_npipes;
871         unsigned                tiling_group_size;
872         struct r100_gpu_lockup  lockup;
873 };
874
875 struct evergreen_asic {
876         unsigned num_ses;
877         unsigned max_pipes;
878         unsigned max_tile_pipes;
879         unsigned max_simds;
880         unsigned max_backends;
881         unsigned max_gprs;
882         unsigned max_threads;
883         unsigned max_stack_entries;
884         unsigned max_hw_contexts;
885         unsigned max_gs_threads;
886         unsigned sx_max_export_size;
887         unsigned sx_max_export_pos_size;
888         unsigned sx_max_export_smx_size;
889         unsigned sq_num_cf_insts;
890         unsigned sx_num_of_sets;
891         unsigned sc_prim_fifo_size;
892         unsigned sc_hiz_tile_fifo_size;
893         unsigned sc_earlyz_tile_fifo_size;
894         unsigned tiling_nbanks;
895         unsigned tiling_npipes;
896         unsigned tiling_group_size;
897 };
898
899 union radeon_asic_config {
900         struct r300_asic        r300;
901         struct r100_asic        r100;
902         struct r600_asic        r600;
903         struct rv770_asic       rv770;
904         struct evergreen_asic   evergreen;
905 };
906
907 /*
908  * asic initizalization from radeon_asic.c
909  */
910 void radeon_agp_disable(struct radeon_device *rdev);
911 int radeon_asic_init(struct radeon_device *rdev);
912
913
914 /*
915  * IOCTL.
916  */
917 int radeon_gem_info_ioctl(struct drm_device *dev, void *data,
918                           struct drm_file *filp);
919 int radeon_gem_create_ioctl(struct drm_device *dev, void *data,
920                             struct drm_file *filp);
921 int radeon_gem_pin_ioctl(struct drm_device *dev, void *data,
922                          struct drm_file *file_priv);
923 int radeon_gem_unpin_ioctl(struct drm_device *dev, void *data,
924                            struct drm_file *file_priv);
925 int radeon_gem_pwrite_ioctl(struct drm_device *dev, void *data,
926                             struct drm_file *file_priv);
927 int radeon_gem_pread_ioctl(struct drm_device *dev, void *data,
928                            struct drm_file *file_priv);
929 int radeon_gem_set_domain_ioctl(struct drm_device *dev, void *data,
930                                 struct drm_file *filp);
931 int radeon_gem_mmap_ioctl(struct drm_device *dev, void *data,
932                           struct drm_file *filp);
933 int radeon_gem_busy_ioctl(struct drm_device *dev, void *data,
934                           struct drm_file *filp);
935 int radeon_gem_wait_idle_ioctl(struct drm_device *dev, void *data,
936                               struct drm_file *filp);
937 int radeon_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp);
938 int radeon_gem_set_tiling_ioctl(struct drm_device *dev, void *data,
939                                 struct drm_file *filp);
940 int radeon_gem_get_tiling_ioctl(struct drm_device *dev, void *data,
941                                 struct drm_file *filp);
942
943
944 /*
945  * Core structure, functions and helpers.
946  */
947 typedef uint32_t (*radeon_rreg_t)(struct radeon_device*, uint32_t);
948 typedef void (*radeon_wreg_t)(struct radeon_device*, uint32_t, uint32_t);
949
950 struct radeon_device {
951         struct device                   *dev;
952         struct drm_device               *ddev;
953         struct pci_dev                  *pdev;
954         /* ASIC */
955         union radeon_asic_config        config;
956         enum radeon_family              family;
957         unsigned long                   flags;
958         int                             usec_timeout;
959         enum radeon_pll_errata          pll_errata;
960         int                             num_gb_pipes;
961         int                             num_z_pipes;
962         int                             disp_priority;
963         /* BIOS */
964         uint8_t                         *bios;
965         bool                            is_atom_bios;
966         uint16_t                        bios_header_start;
967         struct radeon_bo                *stollen_vga_memory;
968         /* Register mmio */
969         resource_size_t                 rmmio_base;
970         resource_size_t                 rmmio_size;
971         void                            *rmmio;
972         radeon_rreg_t                   mc_rreg;
973         radeon_wreg_t                   mc_wreg;
974         radeon_rreg_t                   pll_rreg;
975         radeon_wreg_t                   pll_wreg;
976         uint32_t                        pcie_reg_mask;
977         radeon_rreg_t                   pciep_rreg;
978         radeon_wreg_t                   pciep_wreg;
979         struct radeon_clock             clock;
980         struct radeon_mc                mc;
981         struct radeon_gart              gart;
982         struct radeon_mode_info         mode_info;
983         struct radeon_scratch           scratch;
984         struct radeon_mman              mman;
985         struct radeon_fence_driver      fence_drv;
986         struct radeon_cp                cp;
987         struct radeon_ib_pool           ib_pool;
988         struct radeon_irq               irq;
989         struct radeon_asic              *asic;
990         struct radeon_gem               gem;
991         struct radeon_pm                pm;
992         uint32_t                        bios_scratch[RADEON_BIOS_NUM_SCRATCH];
993         struct mutex                    cs_mutex;
994         struct radeon_wb                wb;
995         struct radeon_dummy_page        dummy_page;
996         bool                            gpu_lockup;
997         bool                            shutdown;
998         bool                            suspend;
999         bool                            need_dma32;
1000         bool                            accel_working;
1001         struct radeon_surface_reg surface_regs[RADEON_GEM_MAX_SURFACES];
1002         const struct firmware *me_fw;   /* all family ME firmware */
1003         const struct firmware *pfp_fw;  /* r6/700 PFP firmware */
1004         const struct firmware *rlc_fw;  /* r6/700 RLC firmware */
1005         struct r600_blit r600_blit;
1006         int msi_enabled; /* msi enabled */
1007         struct r600_ih ih; /* r6/700 interrupt ring */
1008         struct workqueue_struct *wq;
1009         struct work_struct hotplug_work;
1010         int num_crtc; /* number of crtcs */
1011         struct mutex dc_hw_i2c_mutex; /* display controller hw i2c mutex */
1012
1013         /* audio stuff */
1014         struct timer_list       audio_timer;
1015         int                     audio_channels;
1016         int                     audio_rate;
1017         int                     audio_bits_per_sample;
1018         uint8_t                 audio_status_bits;
1019         uint8_t                 audio_category_code;
1020
1021         bool powered_down;
1022 };
1023
1024 int radeon_device_init(struct radeon_device *rdev,
1025                        struct drm_device *ddev,
1026                        struct pci_dev *pdev,
1027                        uint32_t flags);
1028 void radeon_device_fini(struct radeon_device *rdev);
1029 int radeon_gpu_wait_for_idle(struct radeon_device *rdev);
1030
1031 /* r600 blit */
1032 int r600_blit_prepare_copy(struct radeon_device *rdev, int size_bytes);
1033 void r600_blit_done_copy(struct radeon_device *rdev, struct radeon_fence *fence);
1034 void r600_kms_blit_copy(struct radeon_device *rdev,
1035                         u64 src_gpu_addr, u64 dst_gpu_addr,
1036                         int size_bytes);
1037
1038 static inline uint32_t r100_mm_rreg(struct radeon_device *rdev, uint32_t reg)
1039 {
1040         if (reg < rdev->rmmio_size)
1041                 return readl(((void __iomem *)rdev->rmmio) + reg);
1042         else {
1043                 writel(reg, ((void __iomem *)rdev->rmmio) + RADEON_MM_INDEX);
1044                 return readl(((void __iomem *)rdev->rmmio) + RADEON_MM_DATA);
1045         }
1046 }
1047
1048 static inline void r100_mm_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v)
1049 {
1050         if (reg < rdev->rmmio_size)
1051                 writel(v, ((void __iomem *)rdev->rmmio) + reg);
1052         else {
1053                 writel(reg, ((void __iomem *)rdev->rmmio) + RADEON_MM_INDEX);
1054                 writel(v, ((void __iomem *)rdev->rmmio) + RADEON_MM_DATA);
1055         }
1056 }
1057
1058 /*
1059  * Cast helper
1060  */
1061 #define to_radeon_fence(p) ((struct radeon_fence *)(p))
1062
1063 /*
1064  * Registers read & write functions.
1065  */
1066 #define RREG8(reg) readb(((void __iomem *)rdev->rmmio) + (reg))
1067 #define WREG8(reg, v) writeb(v, ((void __iomem *)rdev->rmmio) + (reg))
1068 #define RREG32(reg) r100_mm_rreg(rdev, (reg))
1069 #define DREG32(reg) printk(KERN_INFO "REGISTER: " #reg " : 0x%08X\n", r100_mm_rreg(rdev, (reg)))
1070 #define WREG32(reg, v) r100_mm_wreg(rdev, (reg), (v))
1071 #define REG_SET(FIELD, v) (((v) << FIELD##_SHIFT) & FIELD##_MASK)
1072 #define REG_GET(FIELD, v) (((v) << FIELD##_SHIFT) & FIELD##_MASK)
1073 #define RREG32_PLL(reg) rdev->pll_rreg(rdev, (reg))
1074 #define WREG32_PLL(reg, v) rdev->pll_wreg(rdev, (reg), (v))
1075 #define RREG32_MC(reg) rdev->mc_rreg(rdev, (reg))
1076 #define WREG32_MC(reg, v) rdev->mc_wreg(rdev, (reg), (v))
1077 #define RREG32_PCIE(reg) rv370_pcie_rreg(rdev, (reg))
1078 #define WREG32_PCIE(reg, v) rv370_pcie_wreg(rdev, (reg), (v))
1079 #define RREG32_PCIE_P(reg) rdev->pciep_rreg(rdev, (reg))
1080 #define WREG32_PCIE_P(reg, v) rdev->pciep_wreg(rdev, (reg), (v))
1081 #define WREG32_P(reg, val, mask)                                \
1082         do {                                                    \
1083                 uint32_t tmp_ = RREG32(reg);                    \
1084                 tmp_ &= (mask);                                 \
1085                 tmp_ |= ((val) & ~(mask));                      \
1086                 WREG32(reg, tmp_);                              \
1087         } while (0)
1088 #define WREG32_PLL_P(reg, val, mask)                            \
1089         do {                                                    \
1090                 uint32_t tmp_ = RREG32_PLL(reg);                \
1091                 tmp_ &= (mask);                                 \
1092                 tmp_ |= ((val) & ~(mask));                      \
1093                 WREG32_PLL(reg, tmp_);                          \
1094         } while (0)
1095 #define DREG32_SYS(sqf, rdev, reg) seq_printf((sqf), #reg " : 0x%08X\n", r100_mm_rreg((rdev), (reg)))
1096
1097 /*
1098  * Indirect registers accessor
1099  */
1100 static inline uint32_t rv370_pcie_rreg(struct radeon_device *rdev, uint32_t reg)
1101 {
1102         uint32_t r;
1103
1104         WREG32(RADEON_PCIE_INDEX, ((reg) & rdev->pcie_reg_mask));
1105         r = RREG32(RADEON_PCIE_DATA);
1106         return r;
1107 }
1108
1109 static inline void rv370_pcie_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v)
1110 {
1111         WREG32(RADEON_PCIE_INDEX, ((reg) & rdev->pcie_reg_mask));
1112         WREG32(RADEON_PCIE_DATA, (v));
1113 }
1114
1115 void r100_pll_errata_after_index(struct radeon_device *rdev);
1116
1117
1118 /*
1119  * ASICs helpers.
1120  */
1121 #define ASIC_IS_RN50(rdev) ((rdev->pdev->device == 0x515e) || \
1122                             (rdev->pdev->device == 0x5969))
1123 #define ASIC_IS_RV100(rdev) ((rdev->family == CHIP_RV100) || \
1124                 (rdev->family == CHIP_RV200) || \
1125                 (rdev->family == CHIP_RS100) || \
1126                 (rdev->family == CHIP_RS200) || \
1127                 (rdev->family == CHIP_RV250) || \
1128                 (rdev->family == CHIP_RV280) || \
1129                 (rdev->family == CHIP_RS300))
1130 #define ASIC_IS_R300(rdev) ((rdev->family == CHIP_R300)  ||     \
1131                 (rdev->family == CHIP_RV350) ||                 \
1132                 (rdev->family == CHIP_R350)  ||                 \
1133                 (rdev->family == CHIP_RV380) ||                 \
1134                 (rdev->family == CHIP_R420)  ||                 \
1135                 (rdev->family == CHIP_R423)  ||                 \
1136                 (rdev->family == CHIP_RV410) ||                 \
1137                 (rdev->family == CHIP_RS400) ||                 \
1138                 (rdev->family == CHIP_RS480))
1139 #define ASIC_IS_AVIVO(rdev) ((rdev->family >= CHIP_RS600))
1140 #define ASIC_IS_DCE3(rdev) ((rdev->family >= CHIP_RV620))
1141 #define ASIC_IS_DCE32(rdev) ((rdev->family >= CHIP_RV730))
1142 #define ASIC_IS_DCE4(rdev) ((rdev->family >= CHIP_CEDAR))
1143
1144 /*
1145  * BIOS helpers.
1146  */
1147 #define RBIOS8(i) (rdev->bios[i])
1148 #define RBIOS16(i) (RBIOS8(i) | (RBIOS8((i)+1) << 8))
1149 #define RBIOS32(i) ((RBIOS16(i)) | (RBIOS16((i)+2) << 16))
1150
1151 int radeon_combios_init(struct radeon_device *rdev);
1152 void radeon_combios_fini(struct radeon_device *rdev);
1153 int radeon_atombios_init(struct radeon_device *rdev);
1154 void radeon_atombios_fini(struct radeon_device *rdev);
1155
1156
1157 /*
1158  * RING helpers.
1159  */
1160 static inline void radeon_ring_write(struct radeon_device *rdev, uint32_t v)
1161 {
1162 #if DRM_DEBUG_CODE
1163         if (rdev->cp.count_dw <= 0) {
1164                 DRM_ERROR("radeon: writting more dword to ring than expected !\n");
1165         }
1166 #endif
1167         rdev->cp.ring[rdev->cp.wptr++] = v;
1168         rdev->cp.wptr &= rdev->cp.ptr_mask;
1169         rdev->cp.count_dw--;
1170         rdev->cp.ring_free_dw--;
1171 }
1172
1173
1174 /*
1175  * ASICs macro.
1176  */
1177 #define radeon_init(rdev) (rdev)->asic->init((rdev))
1178 #define radeon_fini(rdev) (rdev)->asic->fini((rdev))
1179 #define radeon_resume(rdev) (rdev)->asic->resume((rdev))
1180 #define radeon_suspend(rdev) (rdev)->asic->suspend((rdev))
1181 #define radeon_cs_parse(p) rdev->asic->cs_parse((p))
1182 #define radeon_vga_set_state(rdev, state) (rdev)->asic->vga_set_state((rdev), (state))
1183 #define radeon_gpu_is_lockup(rdev) (rdev)->asic->gpu_is_lockup((rdev))
1184 #define radeon_asic_reset(rdev) (rdev)->asic->asic_reset((rdev))
1185 #define radeon_gart_tlb_flush(rdev) (rdev)->asic->gart_tlb_flush((rdev))
1186 #define radeon_gart_set_page(rdev, i, p) (rdev)->asic->gart_set_page((rdev), (i), (p))
1187 #define radeon_cp_commit(rdev) (rdev)->asic->cp_commit((rdev))
1188 #define radeon_ring_start(rdev) (rdev)->asic->ring_start((rdev))
1189 #define radeon_ring_test(rdev) (rdev)->asic->ring_test((rdev))
1190 #define radeon_ring_ib_execute(rdev, ib) (rdev)->asic->ring_ib_execute((rdev), (ib))
1191 #define radeon_irq_set(rdev) (rdev)->asic->irq_set((rdev))
1192 #define radeon_irq_process(rdev) (rdev)->asic->irq_process((rdev))
1193 #define radeon_get_vblank_counter(rdev, crtc) (rdev)->asic->get_vblank_counter((rdev), (crtc))
1194 #define radeon_fence_ring_emit(rdev, fence) (rdev)->asic->fence_ring_emit((rdev), (fence))
1195 #define radeon_copy_blit(rdev, s, d, np, f) (rdev)->asic->copy_blit((rdev), (s), (d), (np), (f))
1196 #define radeon_copy_dma(rdev, s, d, np, f) (rdev)->asic->copy_dma((rdev), (s), (d), (np), (f))
1197 #define radeon_copy(rdev, s, d, np, f) (rdev)->asic->copy((rdev), (s), (d), (np), (f))
1198 #define radeon_get_engine_clock(rdev) (rdev)->asic->get_engine_clock((rdev))
1199 #define radeon_set_engine_clock(rdev, e) (rdev)->asic->set_engine_clock((rdev), (e))
1200 #define radeon_get_memory_clock(rdev) (rdev)->asic->get_memory_clock((rdev))
1201 #define radeon_set_memory_clock(rdev, e) (rdev)->asic->set_memory_clock((rdev), (e))
1202 #define radeon_get_pcie_lanes(rdev) (rdev)->asic->get_pcie_lanes((rdev))
1203 #define radeon_set_pcie_lanes(rdev, l) (rdev)->asic->set_pcie_lanes((rdev), (l))
1204 #define radeon_set_clock_gating(rdev, e) (rdev)->asic->set_clock_gating((rdev), (e))
1205 #define radeon_set_surface_reg(rdev, r, f, p, o, s) ((rdev)->asic->set_surface_reg((rdev), (r), (f), (p), (o), (s)))
1206 #define radeon_clear_surface_reg(rdev, r) ((rdev)->asic->clear_surface_reg((rdev), (r)))
1207 #define radeon_bandwidth_update(rdev) (rdev)->asic->bandwidth_update((rdev))
1208 #define radeon_hpd_init(rdev) (rdev)->asic->hpd_init((rdev))
1209 #define radeon_hpd_fini(rdev) (rdev)->asic->hpd_fini((rdev))
1210 #define radeon_hpd_sense(rdev, hpd) (rdev)->asic->hpd_sense((rdev), (hpd))
1211 #define radeon_hpd_set_polarity(rdev, hpd) (rdev)->asic->hpd_set_polarity((rdev), (hpd))
1212
1213 /* Common functions */
1214 /* AGP */
1215 extern int radeon_gpu_reset(struct radeon_device *rdev);
1216 extern void radeon_agp_disable(struct radeon_device *rdev);
1217 extern int radeon_gart_table_vram_pin(struct radeon_device *rdev);
1218 extern void radeon_gart_restore(struct radeon_device *rdev);
1219 extern int radeon_modeset_init(struct radeon_device *rdev);
1220 extern void radeon_modeset_fini(struct radeon_device *rdev);
1221 extern bool radeon_card_posted(struct radeon_device *rdev);
1222 extern void radeon_update_bandwidth_info(struct radeon_device *rdev);
1223 extern void radeon_update_display_priority(struct radeon_device *rdev);
1224 extern bool radeon_boot_test_post_card(struct radeon_device *rdev);
1225 extern int radeon_clocks_init(struct radeon_device *rdev);
1226 extern void radeon_clocks_fini(struct radeon_device *rdev);
1227 extern void radeon_scratch_init(struct radeon_device *rdev);
1228 extern void radeon_surface_init(struct radeon_device *rdev);
1229 extern int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data);
1230 extern void radeon_legacy_set_clock_gating(struct radeon_device *rdev, int enable);
1231 extern void radeon_atom_set_clock_gating(struct radeon_device *rdev, int enable);
1232 extern void radeon_ttm_placement_from_domain(struct radeon_bo *rbo, u32 domain);
1233 extern bool radeon_ttm_bo_is_radeon_bo(struct ttm_buffer_object *bo);
1234 extern void radeon_vram_location(struct radeon_device *rdev, struct radeon_mc *mc, u64 base);
1235 extern void radeon_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc);
1236 extern int radeon_resume_kms(struct drm_device *dev);
1237 extern int radeon_suspend_kms(struct drm_device *dev, pm_message_t state);
1238
1239 /* r100,rv100,rs100,rv200,rs200,r200,rv250,rs300,rv280 */
1240 extern void r100_gpu_lockup_update(struct r100_gpu_lockup *lockup, struct radeon_cp *cp);
1241 extern bool r100_gpu_cp_is_lockup(struct radeon_device *rdev, struct r100_gpu_lockup *lockup, struct radeon_cp *cp);
1242
1243 /* rv200,rv250,rv280 */
1244 extern void r200_set_safe_registers(struct radeon_device *rdev);
1245
1246 /* r300,r350,rv350,rv370,rv380 */
1247 extern void r300_set_reg_safe(struct radeon_device *rdev);
1248 extern void r300_mc_program(struct radeon_device *rdev);
1249 extern void r300_mc_init(struct radeon_device *rdev);
1250 extern void r300_clock_startup(struct radeon_device *rdev);
1251 extern int r300_mc_wait_for_idle(struct radeon_device *rdev);
1252 extern int rv370_pcie_gart_init(struct radeon_device *rdev);
1253 extern void rv370_pcie_gart_fini(struct radeon_device *rdev);
1254 extern int rv370_pcie_gart_enable(struct radeon_device *rdev);
1255 extern void rv370_pcie_gart_disable(struct radeon_device *rdev);
1256
1257 /* r420,r423,rv410 */
1258 extern u32 r420_mc_rreg(struct radeon_device *rdev, u32 reg);
1259 extern void r420_mc_wreg(struct radeon_device *rdev, u32 reg, u32 v);
1260 extern int r420_debugfs_pipes_info_init(struct radeon_device *rdev);
1261 extern void r420_pipes_init(struct radeon_device *rdev);
1262
1263 /* rv515 */
1264 struct rv515_mc_save {
1265         u32 d1vga_control;
1266         u32 d2vga_control;
1267         u32 vga_render_control;
1268         u32 vga_hdp_control;
1269         u32 d1crtc_control;
1270         u32 d2crtc_control;
1271 };
1272 extern void rv515_bandwidth_avivo_update(struct radeon_device *rdev);
1273 extern void rv515_vga_render_disable(struct radeon_device *rdev);
1274 extern void rv515_set_safe_registers(struct radeon_device *rdev);
1275 extern void rv515_mc_stop(struct radeon_device *rdev, struct rv515_mc_save *save);
1276 extern void rv515_mc_resume(struct radeon_device *rdev, struct rv515_mc_save *save);
1277 extern void rv515_clock_startup(struct radeon_device *rdev);
1278 extern void rv515_debugfs(struct radeon_device *rdev);
1279 extern int rv515_suspend(struct radeon_device *rdev);
1280
1281 /* rs400 */
1282 extern int rs400_gart_init(struct radeon_device *rdev);
1283 extern int rs400_gart_enable(struct radeon_device *rdev);
1284 extern void rs400_gart_adjust_size(struct radeon_device *rdev);
1285 extern void rs400_gart_disable(struct radeon_device *rdev);
1286 extern void rs400_gart_fini(struct radeon_device *rdev);
1287
1288 /* rs600 */
1289 extern void rs600_set_safe_registers(struct radeon_device *rdev);
1290 extern int rs600_irq_set(struct radeon_device *rdev);
1291 extern void rs600_irq_disable(struct radeon_device *rdev);
1292
1293 /* rs690, rs740 */
1294 extern void rs690_line_buffer_adjust(struct radeon_device *rdev,
1295                                         struct drm_display_mode *mode1,
1296                                         struct drm_display_mode *mode2);
1297
1298 /* r600, rv610, rv630, rv620, rv635, rv670, rs780, rs880 */
1299 extern void r600_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc);
1300 extern bool r600_card_posted(struct radeon_device *rdev);
1301 extern void r600_cp_stop(struct radeon_device *rdev);
1302 extern int r600_cp_start(struct radeon_device *rdev);
1303 extern void r600_ring_init(struct radeon_device *rdev, unsigned ring_size);
1304 extern int r600_cp_resume(struct radeon_device *rdev);
1305 extern void r600_cp_fini(struct radeon_device *rdev);
1306 extern int r600_count_pipe_bits(uint32_t val);
1307 extern int r600_mc_wait_for_idle(struct radeon_device *rdev);
1308 extern int r600_pcie_gart_init(struct radeon_device *rdev);
1309 extern void r600_pcie_gart_tlb_flush(struct radeon_device *rdev);
1310 extern int r600_ib_test(struct radeon_device *rdev);
1311 extern int r600_ring_test(struct radeon_device *rdev);
1312 extern void r600_wb_fini(struct radeon_device *rdev);
1313 extern int r600_wb_enable(struct radeon_device *rdev);
1314 extern void r600_wb_disable(struct radeon_device *rdev);
1315 extern void r600_scratch_init(struct radeon_device *rdev);
1316 extern int r600_blit_init(struct radeon_device *rdev);
1317 extern void r600_blit_fini(struct radeon_device *rdev);
1318 extern int r600_init_microcode(struct radeon_device *rdev);
1319 extern int r600_asic_reset(struct radeon_device *rdev);
1320 /* r600 irq */
1321 extern int r600_irq_init(struct radeon_device *rdev);
1322 extern void r600_irq_fini(struct radeon_device *rdev);
1323 extern void r600_ih_ring_init(struct radeon_device *rdev, unsigned ring_size);
1324 extern int r600_irq_set(struct radeon_device *rdev);
1325 extern void r600_irq_suspend(struct radeon_device *rdev);
1326 extern void r600_disable_interrupts(struct radeon_device *rdev);
1327 extern void r600_rlc_stop(struct radeon_device *rdev);
1328 /* r600 audio */
1329 extern int r600_audio_init(struct radeon_device *rdev);
1330 extern int r600_audio_tmds_index(struct drm_encoder *encoder);
1331 extern void r600_audio_set_clock(struct drm_encoder *encoder, int clock);
1332 extern int r600_audio_channels(struct radeon_device *rdev);
1333 extern int r600_audio_bits_per_sample(struct radeon_device *rdev);
1334 extern int r600_audio_rate(struct radeon_device *rdev);
1335 extern uint8_t r600_audio_status_bits(struct radeon_device *rdev);
1336 extern uint8_t r600_audio_category_code(struct radeon_device *rdev);
1337 extern void r600_audio_schedule_polling(struct radeon_device *rdev);
1338 extern void r600_audio_enable_polling(struct drm_encoder *encoder);
1339 extern void r600_audio_disable_polling(struct drm_encoder *encoder);
1340 extern void r600_audio_fini(struct radeon_device *rdev);
1341 extern void r600_hdmi_init(struct drm_encoder *encoder);
1342 extern void r600_hdmi_enable(struct drm_encoder *encoder);
1343 extern void r600_hdmi_disable(struct drm_encoder *encoder);
1344 extern void r600_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode *mode);
1345 extern int r600_hdmi_buffer_status_changed(struct drm_encoder *encoder);
1346 extern void r600_hdmi_update_audio_settings(struct drm_encoder *encoder);
1347
1348 extern void r700_cp_stop(struct radeon_device *rdev);
1349 extern void r700_cp_fini(struct radeon_device *rdev);
1350 extern void evergreen_disable_interrupt_state(struct radeon_device *rdev);
1351 extern int evergreen_irq_set(struct radeon_device *rdev);
1352
1353 /* evergreen */
1354 struct evergreen_mc_save {
1355         u32 vga_control[6];
1356         u32 vga_render_control;
1357         u32 vga_hdp_control;
1358         u32 crtc_control[6];
1359 };
1360
1361 #include "radeon_object.h"
1362
1363 #endif