Subversion Repositories Kolibri OS

Rev

Rev 1120 | Rev 1126 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  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. //#include "radeon_object.h"
  32.  
  33. /* TODO: Here are things that needs to be done :
  34.  *      - surface allocator & initializer : (bit like scratch reg) should
  35.  *        initialize HDP_ stuff on RS600, R600, R700 hw, well anythings
  36.  *        related to surface
  37.  *      - WB : write back stuff (do it bit like scratch reg things)
  38.  *      - Vblank : look at Jesse's rework and what we should do
  39.  *      - r600/r700: gart & cp
  40.  *      - cs : clean cs ioctl use bitmap & things like that.
  41.  *      - power management stuff
  42.  *      - Barrier in gart code
  43.  *      - Unmappabled vram ?
  44.  *      - TESTING, TESTING, TESTING
  45.  */
  46.  
  47. #include <types.h>
  48. #include <list.h>
  49.  
  50. #include <pci.h>
  51.  
  52. #include <errno-base.h>
  53. #include "drm_edid.h"
  54. #include "radeon_mode.h"
  55. #include "radeon_reg.h"
  56. #include "r300.h"
  57.  
  58. #include <syscall.h>
  59.  
  60. extern int radeon_modeset;
  61. extern int radeon_dynclks;
  62. extern int radeon_r4xx_atom;
  63. extern int radeon_gart_size;
  64. extern int radeon_connector_table;
  65.  
  66. /*
  67.  * Copy from radeon_drv.h so we don't have to include both and have conflicting
  68.  * symbol;
  69.  */
  70. #define RADEON_MAX_USEC_TIMEOUT         100000  /* 100 ms */
  71. #define RADEON_IB_POOL_SIZE             16
  72. #define RADEON_DEBUGFS_MAX_NUM_FILES    32
  73. #define RADEONFB_CONN_LIMIT             4
  74.  
  75. enum radeon_family {
  76.     CHIP_R100,
  77.     CHIP_RV100,
  78.     CHIP_RS100,
  79.     CHIP_RV200,
  80.     CHIP_RS200,
  81.     CHIP_R200,
  82.     CHIP_RV250,
  83.     CHIP_RS300,
  84.     CHIP_RV280,
  85.     CHIP_R300,
  86.     CHIP_R350,
  87.     CHIP_RV350,
  88.     CHIP_RV380,
  89.     CHIP_R420,
  90.     CHIP_R423,
  91.     CHIP_RV410,
  92.     CHIP_RS400,
  93.     CHIP_RS480,
  94.     CHIP_RS600,
  95.     CHIP_RS690,
  96.     CHIP_RS740,
  97.     CHIP_RV515,
  98.     CHIP_R520,
  99.     CHIP_RV530,
  100.     CHIP_RV560,
  101.     CHIP_RV570,
  102.     CHIP_R580,
  103.     CHIP_R600,
  104.     CHIP_RV610,
  105.     CHIP_RV630,
  106.     CHIP_RV620,
  107.     CHIP_RV635,
  108.     CHIP_RV670,
  109.     CHIP_RS780,
  110.     CHIP_RV770,
  111.     CHIP_RV730,
  112.     CHIP_RV710,
  113.     CHIP_RV740,
  114.     CHIP_LAST,
  115. };
  116.  
  117. enum radeon_chip_flags {
  118.     RADEON_FAMILY_MASK = 0x0000ffffUL,
  119.     RADEON_FLAGS_MASK = 0xffff0000UL,
  120.     RADEON_IS_MOBILITY = 0x00010000UL,
  121.     RADEON_IS_IGP = 0x00020000UL,
  122.     RADEON_SINGLE_CRTC = 0x00040000UL,
  123.     RADEON_IS_AGP = 0x00080000UL,
  124.     RADEON_HAS_HIERZ = 0x00100000UL,
  125.     RADEON_IS_PCIE = 0x00200000UL,
  126.     RADEON_NEW_MEMMAP = 0x00400000UL,
  127.     RADEON_IS_PCI = 0x00800000UL,
  128.     RADEON_IS_IGPGART = 0x01000000UL,
  129. };
  130.  
  131.  
  132. /*
  133.  * Errata workarounds.
  134.  */
  135. enum radeon_pll_errata {
  136.     CHIP_ERRATA_R300_CG             = 0x00000001,
  137.     CHIP_ERRATA_PLL_DUMMYREADS      = 0x00000002,
  138.     CHIP_ERRATA_PLL_DELAY           = 0x00000004
  139. };
  140.  
  141.  
  142. struct radeon_device;
  143.  
  144.  
  145. /*
  146.  * BIOS.
  147.  */
  148. bool radeon_get_bios(struct radeon_device *rdev);
  149.  
  150. /*
  151.  * Clocks
  152.  */
  153.  
  154. struct radeon_clock {
  155.         struct radeon_pll p1pll;
  156.         struct radeon_pll p2pll;
  157.         struct radeon_pll spll;
  158.         struct radeon_pll mpll;
  159.         /* 10 Khz units */
  160.         uint32_t default_mclk;
  161.         uint32_t default_sclk;
  162. };
  163.  
  164. /*
  165.  * Fences.
  166.  */
  167. struct radeon_fence_driver {
  168.         uint32_t                        scratch_reg;
  169. //      atomic_t                        seq;
  170.         uint32_t                        last_seq;
  171.         unsigned long                   count_timeout;
  172. //      wait_queue_head_t               queue;
  173. //      rwlock_t                        lock;
  174.         struct list_head                created;
  175.         struct list_head                emited;
  176.         struct list_head                signaled;
  177. };
  178.  
  179. struct radeon_fence {
  180.         struct radeon_device            *rdev;
  181. //      struct kref                     kref;
  182.         struct list_head                list;
  183.         /* protected by radeon_fence.lock */
  184.         uint32_t                        seq;
  185.         unsigned long                   timeout;
  186.         bool                            emited;
  187.         bool                            signaled;
  188. };
  189.  
  190. int radeon_fence_driver_init(struct radeon_device *rdev);
  191. void radeon_fence_driver_fini(struct radeon_device *rdev);
  192. int radeon_fence_create(struct radeon_device *rdev, struct radeon_fence **fence);
  193. int radeon_fence_emit(struct radeon_device *rdev, struct radeon_fence *fence);
  194. void radeon_fence_process(struct radeon_device *rdev);
  195. bool radeon_fence_signaled(struct radeon_fence *fence);
  196. int radeon_fence_wait(struct radeon_fence *fence, bool interruptible);
  197. int radeon_fence_wait_next(struct radeon_device *rdev);
  198. int radeon_fence_wait_last(struct radeon_device *rdev);
  199. struct radeon_fence *radeon_fence_ref(struct radeon_fence *fence);
  200. void radeon_fence_unref(struct radeon_fence **fence);
  201.  
  202.  
  203. /*
  204.  * Radeon buffer.
  205.  */
  206. struct radeon_object;
  207.  
  208. struct radeon_object_list {
  209.         struct list_head        list;
  210.         struct radeon_object    *robj;
  211.         uint64_t                gpu_offset;
  212.         unsigned                rdomain;
  213.         unsigned                wdomain;
  214. };
  215.  
  216. int radeon_object_init(struct radeon_device *rdev);
  217. void radeon_object_fini(struct radeon_device *rdev);
  218. int radeon_object_create(struct radeon_device *rdev,
  219.                          struct drm_gem_object *gobj,
  220.                          unsigned long size,
  221.                          bool kernel,
  222.                          uint32_t domain,
  223.                          bool interruptible,
  224.                          struct radeon_object **robj_ptr);
  225.  
  226.  
  227. /*
  228.  * GEM objects.
  229.  */
  230. struct radeon_gem {
  231.         struct list_head        objects;
  232. };
  233.  
  234.  
  235.  
  236. /*
  237.  * GART structures, functions & helpers
  238.  */
  239. struct radeon_mc;
  240.  
  241. struct radeon_gart_table_ram {
  242.     volatile uint32_t       *ptr;
  243. };
  244.  
  245. struct radeon_gart_table_vram {
  246.     struct radeon_object        *robj;
  247.     volatile uint32_t       *ptr;
  248. };
  249.  
  250. union radeon_gart_table {
  251.     struct radeon_gart_table_ram    ram;
  252.     struct radeon_gart_table_vram   vram;
  253. };
  254.  
  255. struct radeon_gart {
  256.     dma_addr_t          table_addr;
  257.     unsigned            num_gpu_pages;
  258.     unsigned            num_cpu_pages;
  259.     unsigned            table_size;
  260.     union radeon_gart_table     table;
  261.     struct page         **pages;
  262.     dma_addr_t          *pages_addr;
  263.     bool                ready;
  264. };
  265.  
  266. int radeon_gart_table_ram_alloc(struct radeon_device *rdev);
  267. void radeon_gart_table_ram_free(struct radeon_device *rdev);
  268. int radeon_gart_table_vram_alloc(struct radeon_device *rdev);
  269. void radeon_gart_table_vram_free(struct radeon_device *rdev);
  270. int radeon_gart_init(struct radeon_device *rdev);
  271. void radeon_gart_fini(struct radeon_device *rdev);
  272. void radeon_gart_unbind(struct radeon_device *rdev, unsigned offset,
  273.                         int pages);
  274. int radeon_gart_bind(struct radeon_device *rdev, unsigned offset,
  275.             int pages, u32_t *pagelist);
  276.  
  277.  
  278. /*
  279.  * GPU MC structures, functions & helpers
  280.  */
  281. struct radeon_mc {
  282.     resource_size_t     aper_size;
  283.     resource_size_t     aper_base;
  284.     resource_size_t     agp_base;
  285.     unsigned            gtt_location;
  286.     unsigned            gtt_size;
  287.     unsigned            vram_location;
  288.     unsigned            vram_size;
  289.     unsigned            vram_width;
  290.     int                 vram_mtrr;
  291.     bool                vram_is_ddr;
  292. };
  293.  
  294. int radeon_mc_setup(struct radeon_device *rdev);
  295.  
  296.  
  297. /*
  298.  * GPU scratch registers structures, functions & helpers
  299.  */
  300. struct radeon_scratch {
  301.     unsigned        num_reg;
  302.     bool            free[32];
  303.     uint32_t        reg[32];
  304. };
  305.  
  306. int radeon_scratch_get(struct radeon_device *rdev, uint32_t *reg);
  307. void radeon_scratch_free(struct radeon_device *rdev, uint32_t reg);
  308.  
  309.  
  310. /*
  311.  * IRQS.
  312.  */
  313. struct radeon_irq {
  314.         bool            installed;
  315.         bool            sw_int;
  316.         /* FIXME: use a define max crtc rather than hardcode it */
  317.         bool            crtc_vblank_int[2];
  318. };
  319.  
  320. int radeon_irq_kms_init(struct radeon_device *rdev);
  321. void radeon_irq_kms_fini(struct radeon_device *rdev);
  322.  
  323.  
  324. /*
  325.  * CP & ring.
  326.  */
  327. struct radeon_ib {
  328.         struct list_head        list;
  329.         unsigned long           idx;
  330.         uint64_t                gpu_addr;
  331.         struct radeon_fence     *fence;
  332.         volatile uint32_t       *ptr;
  333.         uint32_t                length_dw;
  334. };
  335.  
  336. struct radeon_ib_pool {
  337. //      struct mutex            mutex;
  338.         struct radeon_object    *robj;
  339.         struct list_head        scheduled_ibs;
  340.         struct radeon_ib        ibs[RADEON_IB_POOL_SIZE];
  341.         bool                    ready;
  342.         DECLARE_BITMAP(alloc_bm, RADEON_IB_POOL_SIZE);
  343. };
  344.  
  345. struct radeon_cp {
  346.         struct radeon_object    *ring_obj;
  347.         volatile uint32_t       *ring;
  348.         unsigned                rptr;
  349.         unsigned                wptr;
  350.         unsigned                wptr_old;
  351.         unsigned                ring_size;
  352.         unsigned                ring_free_dw;
  353.         int                     count_dw;
  354.         uint64_t                gpu_addr;
  355.         uint32_t                align_mask;
  356.         uint32_t                ptr_mask;
  357. //      struct mutex            mutex;
  358.         bool                    ready;
  359. };
  360.  
  361. int radeon_ib_get(struct radeon_device *rdev, struct radeon_ib **ib);
  362. void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib **ib);
  363. int radeon_ib_schedule(struct radeon_device *rdev, struct radeon_ib *ib);
  364. int radeon_ib_pool_init(struct radeon_device *rdev);
  365. void radeon_ib_pool_fini(struct radeon_device *rdev);
  366. int radeon_ib_test(struct radeon_device *rdev);
  367. /* Ring access between begin & end cannot sleep */
  368. void radeon_ring_free_size(struct radeon_device *rdev);
  369. int radeon_ring_lock(struct radeon_device *rdev, unsigned ndw);
  370. void radeon_ring_unlock_commit(struct radeon_device *rdev);
  371. void radeon_ring_unlock_undo(struct radeon_device *rdev);
  372. int radeon_ring_test(struct radeon_device *rdev);
  373. int radeon_ring_init(struct radeon_device *rdev, unsigned ring_size);
  374. void radeon_ring_fini(struct radeon_device *rdev);
  375.  
  376.  
  377. /*
  378.  * CS.
  379.  */
  380. struct radeon_cs_reloc {
  381. //      struct drm_gem_object           *gobj;
  382.         struct radeon_object            *robj;
  383.         struct radeon_object_list       lobj;
  384.         uint32_t                        handle;
  385.         uint32_t                        flags;
  386. };
  387.  
  388. struct radeon_cs_chunk {
  389.         uint32_t                chunk_id;
  390.         uint32_t                length_dw;
  391.         uint32_t                *kdata;
  392. };
  393.  
  394. struct radeon_cs_parser {
  395.         struct radeon_device    *rdev;
  396. //      struct drm_file         *filp;
  397.         /* chunks */
  398.         unsigned                nchunks;
  399.         struct radeon_cs_chunk  *chunks;
  400.         uint64_t                *chunks_array;
  401.         /* IB */
  402.         unsigned                idx;
  403.         /* relocations */
  404.         unsigned                nrelocs;
  405.         struct radeon_cs_reloc  *relocs;
  406.         struct radeon_cs_reloc  **relocs_ptr;
  407.         struct list_head        validated;
  408.         /* indices of various chunks */
  409.         int                     chunk_ib_idx;
  410.         int                     chunk_relocs_idx;
  411.         struct radeon_ib        *ib;
  412.         void                    *track;
  413. };
  414.  
  415. struct radeon_cs_packet {
  416.         unsigned        idx;
  417.         unsigned        type;
  418.         unsigned        reg;
  419.         unsigned        opcode;
  420.         int             count;
  421.         unsigned        one_reg_wr;
  422. };
  423.  
  424. typedef int (*radeon_packet0_check_t)(struct radeon_cs_parser *p,
  425.                                       struct radeon_cs_packet *pkt,
  426.                                       unsigned idx, unsigned reg);
  427. typedef int (*radeon_packet3_check_t)(struct radeon_cs_parser *p,
  428.                                       struct radeon_cs_packet *pkt);
  429.  
  430.  
  431. /*
  432.  * AGP
  433.  */
  434. int radeon_agp_init(struct radeon_device *rdev);
  435. void radeon_agp_fini(struct radeon_device *rdev);
  436.  
  437.  
  438. /*
  439.  * Writeback
  440.  */
  441. struct radeon_wb {
  442.         struct radeon_object    *wb_obj;
  443.         volatile uint32_t       *wb;
  444.         uint64_t                gpu_addr;
  445. };
  446.  
  447.  
  448. /*
  449.  * ASIC specific functions.
  450.  */
  451. struct radeon_asic {
  452.         int (*init)(struct radeon_device *rdev);
  453.         void (*errata)(struct radeon_device *rdev);
  454.         void (*vram_info)(struct radeon_device *rdev);
  455.         int (*gpu_reset)(struct radeon_device *rdev);
  456.         int (*mc_init)(struct radeon_device *rdev);
  457.         void (*mc_fini)(struct radeon_device *rdev);
  458.         int (*wb_init)(struct radeon_device *rdev);
  459.         void (*wb_fini)(struct radeon_device *rdev);
  460.         int (*gart_enable)(struct radeon_device *rdev);
  461.         void (*gart_disable)(struct radeon_device *rdev);
  462.         void (*gart_tlb_flush)(struct radeon_device *rdev);
  463.         int (*gart_set_page)(struct radeon_device *rdev, int i, uint64_t addr);
  464.         int (*cp_init)(struct radeon_device *rdev, unsigned ring_size);
  465.         void (*cp_fini)(struct radeon_device *rdev);
  466.         void (*cp_disable)(struct radeon_device *rdev);
  467.         void (*ring_start)(struct radeon_device *rdev);
  468.         int (*irq_set)(struct radeon_device *rdev);
  469.         int (*irq_process)(struct radeon_device *rdev);
  470.         void (*fence_ring_emit)(struct radeon_device *rdev, struct radeon_fence *fence);
  471.         int (*cs_parse)(struct radeon_cs_parser *p);
  472.         int (*copy_blit)(struct radeon_device *rdev,
  473.                          uint64_t src_offset,
  474.                          uint64_t dst_offset,
  475.                          unsigned num_pages,
  476.                          struct radeon_fence *fence);
  477.         int (*copy_dma)(struct radeon_device *rdev,
  478.                         uint64_t src_offset,
  479.                         uint64_t dst_offset,
  480.                         unsigned num_pages,
  481.                         struct radeon_fence *fence);
  482.         int (*copy)(struct radeon_device *rdev,
  483.                     uint64_t src_offset,
  484.                     uint64_t dst_offset,
  485.                     unsigned num_pages,
  486.                     struct radeon_fence *fence);
  487.         void (*set_engine_clock)(struct radeon_device *rdev, uint32_t eng_clock);
  488.         void (*set_memory_clock)(struct radeon_device *rdev, uint32_t mem_clock);
  489.         void (*set_pcie_lanes)(struct radeon_device *rdev, int lanes);
  490.         void (*set_clock_gating)(struct radeon_device *rdev, int enable);
  491. };
  492.  
  493. union radeon_asic_config {
  494.         struct r300_asic        r300;
  495. };
  496.  
  497.  
  498. /*
  499. /*
  500.  * Core structure, functions and helpers.
  501.  */
  502. typedef uint32_t (*radeon_rreg_t)(struct radeon_device*, uint32_t);
  503. typedef void (*radeon_wreg_t)(struct radeon_device*, uint32_t, uint32_t);
  504.  
  505. struct radeon_device {
  506.     struct drm_device          *ddev;
  507.     struct pci_dev             *pdev;
  508.     /* ASIC */
  509.     union radeon_asic_config    config;
  510.     enum radeon_family          family;
  511.     unsigned long               flags;
  512.     int                         usec_timeout;
  513.     enum radeon_pll_errata      pll_errata;
  514.     int                         num_gb_pipes;
  515.     int                         disp_priority;
  516.     /* BIOS */
  517.     uint8_t                     *bios;
  518.     bool                        is_atom_bios;
  519.     uint16_t                    bios_header_start;
  520.  
  521. //    struct radeon_object        *stollen_vga_memory;
  522. //    struct fb_info              *fbdev_info;
  523.     struct radeon_object        *fbdev_robj;
  524.     struct radeon_framebuffer   *fbdev_rfb;
  525.  
  526.     /* Register mmio */
  527.     unsigned long               rmmio_base;
  528.     unsigned long               rmmio_size;
  529.     void                       *rmmio;
  530.  
  531.     radeon_rreg_t               mm_rreg;
  532.     radeon_wreg_t               mm_wreg;
  533.     radeon_rreg_t               mc_rreg;
  534.     radeon_wreg_t               mc_wreg;
  535.     radeon_rreg_t               pll_rreg;
  536.     radeon_wreg_t               pll_wreg;
  537.     radeon_rreg_t               pcie_rreg;
  538.     radeon_wreg_t               pcie_wreg;
  539.     radeon_rreg_t               pciep_rreg;
  540.     radeon_wreg_t               pciep_wreg;
  541.     struct radeon_clock         clock;
  542.     struct radeon_mc            mc;
  543.     struct radeon_gart          gart;
  544.         struct radeon_mode_info         mode_info;
  545.     struct radeon_scratch       scratch;
  546. //    struct radeon_mman          mman;
  547.         struct radeon_fence_driver      fence_drv;
  548.     struct radeon_cp            cp;
  549.     struct radeon_ib_pool       ib_pool;
  550. //    struct radeon_irq       irq;
  551.     struct radeon_asic         *asic;
  552. //    struct radeon_gem       gem;
  553. //    struct mutex            cs_mutex;
  554.     struct radeon_wb        wb;
  555.     bool                gpu_lockup;
  556.     bool                shutdown;
  557.     bool                suspend;
  558. };
  559.  
  560. int radeon_device_init(struct radeon_device *rdev,
  561.                        struct drm_device *ddev,
  562.                        struct pci_dev *pdev,
  563.                        uint32_t flags);
  564. void radeon_device_fini(struct radeon_device *rdev);
  565. int radeon_gpu_wait_for_idle(struct radeon_device *rdev);
  566.  
  567. #define __iomem
  568. #define __force
  569.  
  570.  
  571.  
  572. static inline uint8_t __raw_readb(const volatile void __iomem *addr)
  573. {
  574.     return *(const volatile uint8_t __force *) addr;
  575. }
  576.  
  577. static inline uint16_t __raw_readw(const volatile void __iomem *addr)
  578. {
  579.     return *(const volatile uint16_t __force *) addr;
  580. }
  581.  
  582. static inline uint32_t __raw_readl(const volatile void __iomem *addr)
  583. {
  584.     return *(const volatile uint32_t __force *) addr;
  585. }
  586.  
  587. #define readb __raw_readb
  588. #define readw __raw_readw
  589. #define readl __raw_readl
  590.  
  591.  
  592.  
  593. static inline void __raw_writeb(uint8_t b, volatile void __iomem *addr)
  594. {
  595.     *(volatile uint8_t __force *) addr = b;
  596. }
  597.  
  598. static inline void __raw_writew(uint16_t b, volatile void __iomem *addr)
  599. {
  600.     *(volatile uint16_t __force *) addr = b;
  601. }
  602.  
  603. static inline void __raw_writel(uint32_t b, volatile void __iomem *addr)
  604. {
  605.     *(volatile uint32_t __force *) addr = b;
  606. }
  607.  
  608. #define writeb __raw_writeb
  609. #define writew __raw_writew
  610. #define writel __raw_writel
  611.  
  612. //#define writeb(b,addr) *(volatile uint8_t* ) addr = (uint8_t)b
  613. //#define writew(b,addr) *(volatile uint16_t*) addr = (uint16_t)b
  614. //#define writel(b,addr) *(volatile uint32_t*) addr = (uint32_t)b
  615.  
  616.  
  617.  
  618. /*
  619.  * Registers read & write functions.
  620.  */
  621. #define RREG8(reg) readb(((void __iomem *)rdev->rmmio) + (reg))
  622. #define WREG8(reg, v) writeb(v, ((void __iomem *)rdev->rmmio) + (reg))
  623. #define RREG32(reg) rdev->mm_rreg(rdev, (reg))
  624. #define WREG32(reg, v) rdev->mm_wreg(rdev, (reg), (v))
  625. #define REG_SET(FIELD, v) (((v) << FIELD##_SHIFT) & FIELD##_MASK)
  626. #define REG_GET(FIELD, v) (((v) << FIELD##_SHIFT) & FIELD##_MASK)
  627. #define RREG32_PLL(reg) rdev->pll_rreg(rdev, (reg))
  628. #define WREG32_PLL(reg, v) rdev->pll_wreg(rdev, (reg), (v))
  629. #define RREG32_MC(reg) rdev->mc_rreg(rdev, (reg))
  630. #define WREG32_MC(reg, v) rdev->mc_wreg(rdev, (reg), (v))
  631. #define RREG32_PCIE(reg) rdev->pcie_rreg(rdev, (reg))
  632. #define WREG32_PCIE(reg, v) rdev->pcie_wreg(rdev, (reg), (v))
  633. #define WREG32_P(reg, val, mask)                                \
  634.         do {                                                    \
  635.                 uint32_t tmp_ = RREG32(reg);                    \
  636.                 tmp_ &= (mask);                                 \
  637.                 tmp_ |= ((val) & ~(mask));                      \
  638.                 WREG32(reg, tmp_);                              \
  639.         } while (0)
  640. #define WREG32_PLL_P(reg, val, mask)                            \
  641.         do {                                                    \
  642.                 uint32_t tmp_ = RREG32_PLL(reg);                \
  643.                 tmp_ &= (mask);                                 \
  644.                 tmp_ |= ((val) & ~(mask));                      \
  645.                 WREG32_PLL(reg, tmp_);                          \
  646.         } while (0)
  647.  
  648.  
  649. #define radeon_PCI_IDS \
  650.     {0x1002, 0x3150, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \
  651.     {0x1002, 0x3152, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  652.     {0x1002, 0x3154, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  653.     {0x1002, 0x3E50, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_NEW_MEMMAP}, \
  654.     {0x1002, 0x3E54, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_NEW_MEMMAP}, \
  655.     {0x1002, 0x4136, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS100|RADEON_IS_IGP}, \
  656.     {0x1002, 0x4137, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS200|RADEON_IS_IGP}, \
  657.     {0x1002, 0x4144, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \
  658.     {0x1002, 0x4145, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \
  659.     {0x1002, 0x4146, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \
  660.     {0x1002, 0x4147, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \
  661.     {0x1002, 0x4148, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R350}, \
  662.     {0x1002, 0x4149, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R350}, \
  663.     {0x1002, 0x414A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R350}, \
  664.     {0x1002, 0x414B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R350}, \
  665.     {0x1002, 0x4150, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV350}, \
  666.     {0x1002, 0x4151, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV350}, \
  667.     {0x1002, 0x4152, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV350}, \
  668.     {0x1002, 0x4153, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV350}, \
  669.     {0x1002, 0x4154, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV350}, \
  670.     {0x1002, 0x4155, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV350}, \
  671.     {0x1002, 0x4156, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV350}, \
  672.     {0x1002, 0x4237, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS200|RADEON_IS_IGP}, \
  673.     {0x1002, 0x4242, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R200}, \
  674.     {0x1002, 0x4243, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R200}, \
  675.     {0x1002, 0x4336, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS100|RADEON_IS_IGP|RADEON_IS_MOBILITY}, \
  676.     {0x1002, 0x4337, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS200|RADEON_IS_IGP|RADEON_IS_MOBILITY}, \
  677.     {0x1002, 0x4437, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS200|RADEON_IS_IGP|RADEON_IS_MOBILITY}, \
  678.     {0x1002, 0x4966, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250}, \
  679.     {0x1002, 0x4967, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250}, \
  680.     {0x1002, 0x4A48, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \
  681.     {0x1002, 0x4A49, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \
  682.     {0x1002, 0x4A4A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \
  683.     {0x1002, 0x4A4B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \
  684.     {0x1002, 0x4A4C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \
  685.     {0x1002, 0x4A4D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \
  686.     {0x1002, 0x4A4E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  687.     {0x1002, 0x4A4F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \
  688.     {0x1002, 0x4A50, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \
  689.     {0x1002, 0x4A54, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \
  690.     {0x1002, 0x4B49, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \
  691.     {0x1002, 0x4B4A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \
  692.     {0x1002, 0x4B4B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \
  693.     {0x1002, 0x4B4C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \
  694.     {0x1002, 0x4C57, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV200|RADEON_IS_MOBILITY}, \
  695.     {0x1002, 0x4C58, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV200|RADEON_IS_MOBILITY}, \
  696.     {0x1002, 0x4C59, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV100|RADEON_IS_MOBILITY}, \
  697.     {0x1002, 0x4C5A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV100|RADEON_IS_MOBILITY}, \
  698.     {0x1002, 0x4C64, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250|RADEON_IS_MOBILITY}, \
  699.     {0x1002, 0x4C66, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250|RADEON_IS_MOBILITY}, \
  700.     {0x1002, 0x4C67, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250|RADEON_IS_MOBILITY}, \
  701.     {0x1002, 0x4E44, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \
  702.     {0x1002, 0x4E45, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \
  703.     {0x1002, 0x4E46, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \
  704.     {0x1002, 0x4E47, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \
  705.     {0x1002, 0x4E48, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R350}, \
  706.     {0x1002, 0x4E49, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R350}, \
  707.     {0x1002, 0x4E4A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R350}, \
  708.     {0x1002, 0x4E4B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R350}, \
  709.     {0x1002, 0x4E50, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV350|RADEON_IS_MOBILITY}, \
  710.     {0x1002, 0x4E51, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV350|RADEON_IS_MOBILITY}, \
  711.     {0x1002, 0x4E52, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV350|RADEON_IS_MOBILITY}, \
  712.     {0x1002, 0x4E53, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV350|RADEON_IS_MOBILITY}, \
  713.     {0x1002, 0x4E54, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV350|RADEON_IS_MOBILITY}, \
  714.     {0x1002, 0x4E56, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV350|RADEON_IS_MOBILITY}, \
  715.     {0x1002, 0x5144, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R100|RADEON_SINGLE_CRTC}, \
  716.     {0x1002, 0x5145, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R100|RADEON_SINGLE_CRTC}, \
  717.     {0x1002, 0x5146, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R100|RADEON_SINGLE_CRTC}, \
  718.     {0x1002, 0x5147, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R100|RADEON_SINGLE_CRTC}, \
  719.     {0x1002, 0x5148, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R200}, \
  720.     {0x1002, 0x514C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R200}, \
  721.     {0x1002, 0x514D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R200}, \
  722.     {0x1002, 0x5157, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV200}, \
  723.     {0x1002, 0x5158, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV200}, \
  724.     {0x1002, 0x5159, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV100}, \
  725.     {0x1002, 0x515A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV100}, \
  726.     {0x1002, 0x515E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV100}, \
  727.     {0x1002, 0x5460, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \
  728.     {0x1002, 0x5462, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \
  729.     {0x1002, 0x5464, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \
  730.     {0x1002, 0x5657, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_NEW_MEMMAP}, \
  731.     {0x1002, 0x5548, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R423|RADEON_NEW_MEMMAP}, \
  732.     {0x1002, 0x5549, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R423|RADEON_NEW_MEMMAP}, \
  733.     {0x1002, 0x554A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R423|RADEON_NEW_MEMMAP}, \
  734.     {0x1002, 0x554B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R423|RADEON_NEW_MEMMAP}, \
  735.     {0x1002, 0x554C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R423|RADEON_NEW_MEMMAP}, \
  736.     {0x1002, 0x554D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R423|RADEON_NEW_MEMMAP}, \
  737.     {0x1002, 0x554E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R423|RADEON_NEW_MEMMAP}, \
  738.     {0x1002, 0x554F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R423|RADEON_NEW_MEMMAP}, \
  739.     {0x1002, 0x5550, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R423|RADEON_NEW_MEMMAP}, \
  740.     {0x1002, 0x5551, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R423|RADEON_NEW_MEMMAP}, \
  741.     {0x1002, 0x5552, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R423|RADEON_NEW_MEMMAP}, \
  742.     {0x1002, 0x5554, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R423|RADEON_NEW_MEMMAP}, \
  743.     {0x1002, 0x564A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  744.     {0x1002, 0x564B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  745.     {0x1002, 0x564F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  746.     {0x1002, 0x5652, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  747.     {0x1002, 0x5653, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  748.     {0x1002, 0x5834, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS300|RADEON_IS_IGP}, \
  749.     {0x1002, 0x5835, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS300|RADEON_IS_IGP|RADEON_IS_MOBILITY}, \
  750.     {0x1002, 0x5954, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS480|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_IS_IGPGART}, \
  751.     {0x1002, 0x5955, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS480|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_IS_IGPGART}, \
  752.     {0x1002, 0x5974, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS480|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_IS_IGPGART}, \
  753.     {0x1002, 0x5975, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS480|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_IS_IGPGART}, \
  754.     {0x1002, 0x5960, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV280}, \
  755.     {0x1002, 0x5961, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV280}, \
  756.     {0x1002, 0x5962, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV280}, \
  757.     {0x1002, 0x5964, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV280}, \
  758.     {0x1002, 0x5965, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV280}, \
  759.     {0x1002, 0x5969, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV100}, \
  760.     {0x1002, 0x5a41, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS400|RADEON_IS_IGP|RADEON_IS_IGPGART}, \
  761.     {0x1002, 0x5a42, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS400|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_IS_IGPGART}, \
  762.     {0x1002, 0x5a61, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS400|RADEON_IS_IGP|RADEON_IS_IGPGART}, \
  763.     {0x1002, 0x5a62, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS400|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_IS_IGPGART}, \
  764.     {0x1002, 0x5b60, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_NEW_MEMMAP}, \
  765.     {0x1002, 0x5b62, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_NEW_MEMMAP}, \
  766.     {0x1002, 0x5b63, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_NEW_MEMMAP}, \
  767.     {0x1002, 0x5b64, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_NEW_MEMMAP}, \
  768.     {0x1002, 0x5b65, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_NEW_MEMMAP}, \
  769.     {0x1002, 0x5c61, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV280|RADEON_IS_MOBILITY}, \
  770.     {0x1002, 0x5c63, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV280|RADEON_IS_MOBILITY}, \
  771.     {0x1002, 0x5d48, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R423|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  772.     {0x1002, 0x5d49, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R423|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  773.     {0x1002, 0x5d4a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R423|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  774.     {0x1002, 0x5d4c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R423|RADEON_NEW_MEMMAP}, \
  775.     {0x1002, 0x5d4d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R423|RADEON_NEW_MEMMAP}, \
  776.     {0x1002, 0x5d4e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R423|RADEON_NEW_MEMMAP}, \
  777.     {0x1002, 0x5d4f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R423|RADEON_NEW_MEMMAP}, \
  778.     {0x1002, 0x5d50, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R423|RADEON_NEW_MEMMAP}, \
  779.     {0x1002, 0x5d52, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R423|RADEON_NEW_MEMMAP}, \
  780.     {0x1002, 0x5d57, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R423|RADEON_NEW_MEMMAP}, \
  781.     {0x1002, 0x5e48, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_NEW_MEMMAP}, \
  782.     {0x1002, 0x5e4a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_NEW_MEMMAP}, \
  783.     {0x1002, 0x5e4b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_NEW_MEMMAP}, \
  784.     {0x1002, 0x5e4c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_NEW_MEMMAP}, \
  785.     {0x1002, 0x5e4d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_NEW_MEMMAP}, \
  786.     {0x1002, 0x5e4f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_NEW_MEMMAP}, \
  787.     {0x1002, 0x7100, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \
  788.     {0x1002, 0x7101, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  789.     {0x1002, 0x7102, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  790.     {0x1002, 0x7103, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  791.     {0x1002, 0x7104, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \
  792.     {0x1002, 0x7105, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \
  793.     {0x1002, 0x7106, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  794.     {0x1002, 0x7108, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \
  795.     {0x1002, 0x7109, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \
  796.     {0x1002, 0x710A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \
  797.     {0x1002, 0x710B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \
  798.     {0x1002, 0x710C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \
  799.     {0x1002, 0x710E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \
  800.     {0x1002, 0x710F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \
  801.     {0x1002, 0x7140, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
  802.     {0x1002, 0x7141, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
  803.     {0x1002, 0x7142, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
  804.     {0x1002, 0x7143, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
  805.     {0x1002, 0x7144, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  806.     {0x1002, 0x7145, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  807.     {0x1002, 0x7146, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
  808.     {0x1002, 0x7147, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
  809.     {0x1002, 0x7149, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  810.     {0x1002, 0x714A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  811.     {0x1002, 0x714B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  812.     {0x1002, 0x714C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  813.     {0x1002, 0x714D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
  814.     {0x1002, 0x714E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
  815.     {0x1002, 0x714F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
  816.     {0x1002, 0x7151, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
  817.     {0x1002, 0x7152, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
  818.     {0x1002, 0x7153, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
  819.     {0x1002, 0x715E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
  820.     {0x1002, 0x715F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
  821.     {0x1002, 0x7180, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
  822.     {0x1002, 0x7181, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
  823.     {0x1002, 0x7183, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
  824.     {0x1002, 0x7186, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  825.     {0x1002, 0x7187, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
  826.     {0x1002, 0x7188, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  827.     {0x1002, 0x718A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  828.     {0x1002, 0x718B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  829.     {0x1002, 0x718C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  830.     {0x1002, 0x718D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  831.     {0x1002, 0x718F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
  832.     {0x1002, 0x7193, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
  833.     {0x1002, 0x7196, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  834.     {0x1002, 0x719B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
  835.     {0x1002, 0x719F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
  836.     {0x1002, 0x71C0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \
  837.     {0x1002, 0x71C1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \
  838.     {0x1002, 0x71C2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \
  839.     {0x1002, 0x71C3, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \
  840.     {0x1002, 0x71C4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  841.     {0x1002, 0x71C5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  842.     {0x1002, 0x71C6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \
  843.     {0x1002, 0x71C7, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \
  844.     {0x1002, 0x71CD, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \
  845.     {0x1002, 0x71CE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \
  846.     {0x1002, 0x71D2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \
  847.     {0x1002, 0x71D4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  848.     {0x1002, 0x71D5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  849.     {0x1002, 0x71D6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  850.     {0x1002, 0x71DA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \
  851.     {0x1002, 0x71DE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  852.     {0x1002, 0x7200, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
  853.     {0x1002, 0x7210, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  854.     {0x1002, 0x7211, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  855.     {0x1002, 0x7240, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
  856.     {0x1002, 0x7243, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
  857.     {0x1002, 0x7244, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
  858.     {0x1002, 0x7245, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
  859.     {0x1002, 0x7246, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
  860.     {0x1002, 0x7247, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
  861.     {0x1002, 0x7248, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
  862.     {0x1002, 0x7249, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
  863.     {0x1002, 0x724A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
  864.     {0x1002, 0x724B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
  865.     {0x1002, 0x724C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
  866.     {0x1002, 0x724D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
  867.     {0x1002, 0x724E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
  868.     {0x1002, 0x724F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
  869.     {0x1002, 0x7280, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV570|RADEON_NEW_MEMMAP}, \
  870.     {0x1002, 0x7281, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV560|RADEON_NEW_MEMMAP}, \
  871.     {0x1002, 0x7283, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV560|RADEON_NEW_MEMMAP}, \
  872.     {0x1002, 0x7284, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  873.     {0x1002, 0x7287, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV560|RADEON_NEW_MEMMAP}, \
  874.     {0x1002, 0x7288, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV570|RADEON_NEW_MEMMAP}, \
  875.     {0x1002, 0x7289, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV570|RADEON_NEW_MEMMAP}, \
  876.     {0x1002, 0x728B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV570|RADEON_NEW_MEMMAP}, \
  877.     {0x1002, 0x728C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV570|RADEON_NEW_MEMMAP}, \
  878.     {0x1002, 0x7290, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV560|RADEON_NEW_MEMMAP}, \
  879.     {0x1002, 0x7291, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV560|RADEON_NEW_MEMMAP}, \
  880.     {0x1002, 0x7293, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV560|RADEON_NEW_MEMMAP}, \
  881.     {0x1002, 0x7297, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV560|RADEON_NEW_MEMMAP}, \
  882.     {0x1002, 0x7834, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS300|RADEON_IS_IGP|RADEON_NEW_MEMMAP}, \
  883.     {0x1002, 0x7835, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS300|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  884.     {0x1002, 0x791e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS690|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \
  885.     {0x1002, 0x791f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS690|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \
  886.     {0x1002, 0x793f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS600|RADEON_IS_IGP|RADEON_NEW_MEMMAP}, \
  887.     {0x1002, 0x7941, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS600|RADEON_IS_IGP|RADEON_NEW_MEMMAP}, \
  888.     {0x1002, 0x7942, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS600|RADEON_IS_IGP|RADEON_NEW_MEMMAP}, \
  889.     {0x1002, 0x796c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS740|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \
  890.     {0x1002, 0x796d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS740|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \
  891.     {0x1002, 0x796e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS740|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \
  892.     {0x1002, 0x796f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS740|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \
  893.     {0x1002, 0x9400, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R600|RADEON_NEW_MEMMAP}, \
  894.     {0x1002, 0x9401, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R600|RADEON_NEW_MEMMAP}, \
  895.     {0x1002, 0x9402, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R600|RADEON_NEW_MEMMAP}, \
  896.     {0x1002, 0x9403, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R600|RADEON_NEW_MEMMAP}, \
  897.     {0x1002, 0x9405, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R600|RADEON_NEW_MEMMAP}, \
  898.     {0x1002, 0x940A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R600|RADEON_NEW_MEMMAP}, \
  899.     {0x1002, 0x940B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R600|RADEON_NEW_MEMMAP}, \
  900.     {0x1002, 0x940F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R600|RADEON_NEW_MEMMAP}, \
  901.     {0x1002, 0x94A0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  902.     {0x1002, 0x94A1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  903.     {0x1002, 0x94B1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_NEW_MEMMAP}, \
  904.     {0x1002, 0x94B3, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_NEW_MEMMAP}, \
  905.     {0x1002, 0x94B5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_NEW_MEMMAP}, \
  906.     {0x1002, 0x9440, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \
  907.     {0x1002, 0x9441, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \
  908.     {0x1002, 0x9442, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \
  909.     {0x1002, 0x9444, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \
  910.     {0x1002, 0x9446, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \
  911.     {0x1002, 0x944A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  912.     {0x1002, 0x944B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  913.     {0x1002, 0x944C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \
  914.     {0x1002, 0x944E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \
  915.     {0x1002, 0x9450, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \
  916.     {0x1002, 0x9452, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \
  917.     {0x1002, 0x9456, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \
  918.     {0x1002, 0x945A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  919.     {0x1002, 0x945B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  920.     {0x1002, 0x9460, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \
  921.     {0x1002, 0x9462, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \
  922.     {0x1002, 0x946A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  923.     {0x1002, 0x946B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  924.     {0x1002, 0x947A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  925.     {0x1002, 0x947B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  926.     {0x1002, 0x9480, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  927.     {0x1002, 0x9487, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \
  928.     {0x1002, 0x9488, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  929.     {0x1002, 0x9489, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  930.     {0x1002, 0x948F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \
  931.     {0x1002, 0x9490, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \
  932.     {0x1002, 0x9491, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  933.     {0x1002, 0x9498, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \
  934.     {0x1002, 0x949C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \
  935.     {0x1002, 0x949E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \
  936.     {0x1002, 0x949F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \
  937.     {0x1002, 0x94C0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_NEW_MEMMAP}, \
  938.     {0x1002, 0x94C1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_NEW_MEMMAP}, \
  939.     {0x1002, 0x94C3, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_NEW_MEMMAP}, \
  940.     {0x1002, 0x94C4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_NEW_MEMMAP}, \
  941.     {0x1002, 0x94C5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_NEW_MEMMAP}, \
  942.     {0x1002, 0x94C6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_NEW_MEMMAP}, \
  943.     {0x1002, 0x94C7, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_NEW_MEMMAP}, \
  944.     {0x1002, 0x94C8, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  945.     {0x1002, 0x94C9, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  946.     {0x1002, 0x94CB, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  947.     {0x1002, 0x94CC, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_NEW_MEMMAP}, \
  948.     {0x1002, 0x94CD, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_NEW_MEMMAP}, \
  949.     {0x1002, 0x9500, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_NEW_MEMMAP}, \
  950.     {0x1002, 0x9501, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_NEW_MEMMAP}, \
  951.     {0x1002, 0x9504, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  952.     {0x1002, 0x9505, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_NEW_MEMMAP}, \
  953.     {0x1002, 0x9506, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  954.     {0x1002, 0x9507, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_NEW_MEMMAP}, \
  955.     {0x1002, 0x9508, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  956.     {0x1002, 0x9509, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  957.     {0x1002, 0x950F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_NEW_MEMMAP}, \
  958.     {0x1002, 0x9511, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_NEW_MEMMAP}, \
  959.     {0x1002, 0x9515, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_NEW_MEMMAP}, \
  960.     {0x1002, 0x9517, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_NEW_MEMMAP}, \
  961.     {0x1002, 0x9519, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_NEW_MEMMAP}, \
  962.     {0x1002, 0x9540, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_NEW_MEMMAP}, \
  963.     {0x1002, 0x9541, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_NEW_MEMMAP}, \
  964.     {0x1002, 0x9542, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_NEW_MEMMAP}, \
  965.     {0x1002, 0x954E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_NEW_MEMMAP}, \
  966.     {0x1002, 0x954F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_NEW_MEMMAP}, \
  967.     {0x1002, 0x9552, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  968.     {0x1002, 0x9553, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  969.     {0x1002, 0x9555, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  970.     {0x1002, 0x9580, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \
  971.     {0x1002, 0x9581, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  972.     {0x1002, 0x9583, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  973.     {0x1002, 0x9586, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \
  974.     {0x1002, 0x9587, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \
  975.     {0x1002, 0x9588, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \
  976.     {0x1002, 0x9589, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \
  977.     {0x1002, 0x958A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \
  978.     {0x1002, 0x958B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  979.     {0x1002, 0x958C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \
  980.     {0x1002, 0x958D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \
  981.     {0x1002, 0x958E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \
  982.     {0x1002, 0x958F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  983.     {0x1002, 0x9590, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_NEW_MEMMAP}, \
  984.     {0x1002, 0x9591, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  985.     {0x1002, 0x9593, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  986.     {0x1002, 0x9595, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  987.     {0x1002, 0x9596, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_NEW_MEMMAP}, \
  988.     {0x1002, 0x9597, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_NEW_MEMMAP}, \
  989.     {0x1002, 0x9598, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_NEW_MEMMAP}, \
  990.     {0x1002, 0x9599, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_NEW_MEMMAP}, \
  991.     {0x1002, 0x959B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  992.     {0x1002, 0x95C0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \
  993.     {0x1002, 0x95C5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \
  994.     {0x1002, 0x95C6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \
  995.     {0x1002, 0x95C7, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \
  996.     {0x1002, 0x95C9, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \
  997.     {0x1002, 0x95C2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  998.     {0x1002, 0x95C4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
  999.     {0x1002, 0x95CC, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \
  1000.     {0x1002, 0x95CD, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \
  1001.     {0x1002, 0x95CE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \
  1002.     {0x1002, 0x95CF, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \
  1003.     {0x1002, 0x9610, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
  1004.     {0x1002, 0x9611, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
  1005.     {0x1002, 0x9612, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
  1006.     {0x1002, 0x9613, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
  1007.     {0x1002, 0x9614, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
  1008.     {0x1002, 0x9615, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
  1009.     {0x1002, 0x9616, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
  1010.     {0, 0, 0}
  1011.  
  1012.  
  1013. enum chipset_type {
  1014.     NOT_SUPPORTED,
  1015.     SUPPORTED,
  1016. };
  1017.  
  1018. struct agp_version {
  1019.     u16_t major;
  1020.     u16_t minor;
  1021. };
  1022.  
  1023. struct agp_bridge_data;
  1024.  
  1025. struct agp_kern_info {
  1026.     struct agp_version version;
  1027.     struct pci_dev *device;
  1028.     enum chipset_type chipset;
  1029.     unsigned long mode;
  1030.     unsigned long aper_base;
  1031.     size_t aper_size;
  1032.     int max_memory;     /* In pages */
  1033.     int current_memory;
  1034.     bool cant_use_aperture;
  1035.     unsigned long page_mask;
  1036. //    struct vm_operations_struct *vm_ops;
  1037. };
  1038.  
  1039.  
  1040. /**
  1041.  * AGP data.
  1042.  *
  1043.  * \sa drm_agp_init() and drm_device::agp.
  1044.  */
  1045. struct drm_agp_head {
  1046.     struct agp_kern_info agp_info;      /**< AGP device information */
  1047. //    struct list_head memory;
  1048.     unsigned long mode;     /**< AGP mode */
  1049.     struct agp_bridge_data *bridge;
  1050.     int enabled;            /**< whether the AGP bus as been enabled */
  1051.     int acquired;           /**< whether the AGP device has been acquired */
  1052.     unsigned long base;
  1053.     int agp_mtrr;
  1054.     int cant_use_aperture;
  1055.     unsigned long page_mask;
  1056. };
  1057.  
  1058.  
  1059. #define radeon_errata(rdev) (rdev)->asic->errata((rdev))
  1060.  
  1061.  
  1062. /*
  1063.  * ASICs helpers.
  1064.  */
  1065. #define ASIC_IS_RV100(rdev) ((rdev->family == CHIP_RV100) || \
  1066.         (rdev->family == CHIP_RV200) || \
  1067.         (rdev->family == CHIP_RS100) || \
  1068.         (rdev->family == CHIP_RS200) || \
  1069.         (rdev->family == CHIP_RV250) || \
  1070.         (rdev->family == CHIP_RV280) || \
  1071.         (rdev->family == CHIP_RS300))
  1072. #define ASIC_IS_R300(rdev) ((rdev->family == CHIP_R300)  || \
  1073.         (rdev->family == CHIP_RV350) ||         \
  1074.         (rdev->family == CHIP_R350)  ||         \
  1075.         (rdev->family == CHIP_RV380) ||         \
  1076.         (rdev->family == CHIP_R420)  ||         \
  1077.         (rdev->family == CHIP_R423)  ||         \
  1078.         (rdev->family == CHIP_RV410) ||         \
  1079.         (rdev->family == CHIP_RS400) ||         \
  1080.         (rdev->family == CHIP_RS480))
  1081. #define ASIC_IS_AVIVO(rdev) ((rdev->family >= CHIP_RS600))
  1082. #define ASIC_IS_DCE3(rdev) ((rdev->family >= CHIP_RV620))
  1083. #define ASIC_IS_DCE32(rdev) ((rdev->family >= CHIP_RV730))
  1084.  
  1085.  
  1086. /*
  1087.  * BIOS helpers.
  1088.  */
  1089. #define RBIOS8(i) (rdev->bios[i])
  1090. #define RBIOS16(i) (RBIOS8(i) | (RBIOS8((i)+1) << 8))
  1091. #define RBIOS32(i) ((RBIOS16(i)) | (RBIOS16((i)+2) << 16))
  1092.  
  1093. int radeon_combios_init(struct radeon_device *rdev);
  1094. void radeon_combios_fini(struct radeon_device *rdev);
  1095. int radeon_atombios_init(struct radeon_device *rdev);
  1096. void radeon_atombios_fini(struct radeon_device *rdev);
  1097.  
  1098.  
  1099. /*
  1100.  * RING helpers.
  1101.  */
  1102. #define CP_PACKET0                      0x00000000
  1103. #define         PACKET0_BASE_INDEX_SHIFT        0
  1104. #define         PACKET0_BASE_INDEX_MASK         (0x1ffff << 0)
  1105. #define         PACKET0_COUNT_SHIFT             16
  1106. #define         PACKET0_COUNT_MASK              (0x3fff << 16)
  1107. #define CP_PACKET1                      0x40000000
  1108. #define CP_PACKET2                      0x80000000
  1109. #define         PACKET2_PAD_SHIFT               0
  1110. #define         PACKET2_PAD_MASK                (0x3fffffff << 0)
  1111. #define CP_PACKET3                      0xC0000000
  1112. #define         PACKET3_IT_OPCODE_SHIFT         8
  1113. #define         PACKET3_IT_OPCODE_MASK          (0xff << 8)
  1114. #define         PACKET3_COUNT_SHIFT             16
  1115. #define         PACKET3_COUNT_MASK              (0x3fff << 16)
  1116. /* PACKET3 op code */
  1117. #define         PACKET3_NOP                     0x10
  1118. #define         PACKET3_3D_DRAW_VBUF            0x28
  1119. #define         PACKET3_3D_DRAW_IMMD            0x29
  1120. #define         PACKET3_3D_DRAW_INDX            0x2A
  1121. #define         PACKET3_3D_LOAD_VBPNTR          0x2F
  1122. #define         PACKET3_INDX_BUFFER             0x33
  1123. #define         PACKET3_3D_DRAW_VBUF_2          0x34
  1124. #define         PACKET3_3D_DRAW_IMMD_2          0x35
  1125. #define         PACKET3_3D_DRAW_INDX_2          0x36
  1126. #define         PACKET3_BITBLT_MULTI            0x9B
  1127.  
  1128. #define PACKET0(reg, n) (CP_PACKET0 |                                   \
  1129.                          REG_SET(PACKET0_BASE_INDEX, (reg) >> 2) |      \
  1130.                          REG_SET(PACKET0_COUNT, (n)))
  1131. #define PACKET2(v)      (CP_PACKET2 | REG_SET(PACKET2_PAD, (v)))
  1132. #define PACKET3(op, n)  (CP_PACKET3 |                                   \
  1133.                          REG_SET(PACKET3_IT_OPCODE, (op)) |             \
  1134.                          REG_SET(PACKET3_COUNT, (n)))
  1135.  
  1136. #define PACKET_TYPE0    0
  1137. #define PACKET_TYPE1    1
  1138. #define PACKET_TYPE2    2
  1139. #define PACKET_TYPE3    3
  1140.  
  1141. #define CP_PACKET_GET_TYPE(h) (((h) >> 30) & 3)
  1142. #define CP_PACKET_GET_COUNT(h) (((h) >> 16) & 0x3FFF)
  1143. #define CP_PACKET0_GET_REG(h) (((h) & 0x1FFF) << 2)
  1144. #define CP_PACKET0_GET_ONE_REG_WR(h) (((h) >> 15) & 1)
  1145. #define CP_PACKET3_GET_OPCODE(h) (((h) >> 8) & 0xFF)
  1146.  
  1147. static inline void radeon_ring_write(struct radeon_device *rdev, uint32_t v)
  1148. {
  1149. #if DRM_DEBUG_CODE
  1150.         if (rdev->cp.count_dw <= 0) {
  1151.                 DRM_ERROR("radeon: writting more dword to ring than expected !\n");
  1152.         }
  1153. #endif
  1154.         rdev->cp.ring[rdev->cp.wptr++] = v;
  1155.         rdev->cp.wptr &= rdev->cp.ptr_mask;
  1156.         rdev->cp.count_dw--;
  1157.         rdev->cp.ring_free_dw--;
  1158. }
  1159.  
  1160.  
  1161. /*
  1162.  * ASICs macro.
  1163.  */
  1164. #define radeon_init(rdev) (rdev)->asic->init((rdev))
  1165. #define radeon_cs_parse(p) rdev->asic->cs_parse((p))
  1166. #define radeon_errata(rdev) (rdev)->asic->errata((rdev))
  1167. #define radeon_vram_info(rdev) (rdev)->asic->vram_info((rdev))
  1168. #define radeon_gpu_reset(rdev) (rdev)->asic->gpu_reset((rdev))
  1169. #define radeon_mc_init(rdev) (rdev)->asic->mc_init((rdev))
  1170. #define radeon_mc_fini(rdev) (rdev)->asic->mc_fini((rdev))
  1171. #define radeon_wb_init(rdev) (rdev)->asic->wb_init((rdev))
  1172. #define radeon_wb_fini(rdev) (rdev)->asic->wb_fini((rdev))
  1173. #define radeon_gart_enable(rdev) (rdev)->asic->gart_enable((rdev))
  1174. #define radeon_gart_disable(rdev) (rdev)->asic->gart_disable((rdev))
  1175. #define radeon_gart_tlb_flush(rdev) (rdev)->asic->gart_tlb_flush((rdev))
  1176. #define radeon_gart_set_page(rdev, i, p) (rdev)->asic->gart_set_page((rdev), (i), (p))
  1177. #define radeon_cp_init(rdev,rsize) (rdev)->asic->cp_init((rdev), (rsize))
  1178. #define radeon_cp_fini(rdev) (rdev)->asic->cp_fini((rdev))
  1179. #define radeon_cp_disable(rdev) (rdev)->asic->cp_disable((rdev))
  1180. #define radeon_ring_start(rdev) (rdev)->asic->ring_start((rdev))
  1181. #define radeon_irq_set(rdev) (rdev)->asic->irq_set((rdev))
  1182. #define radeon_irq_process(rdev) (rdev)->asic->irq_process((rdev))
  1183. #define radeon_fence_ring_emit(rdev, fence) (rdev)->asic->fence_ring_emit((rdev), (fence))
  1184. #define radeon_copy_blit(rdev, s, d, np, f) (rdev)->asic->copy_blit((rdev), (s), (d), (np), (f))
  1185. #define radeon_copy_dma(rdev, s, d, np, f) (rdev)->asic->copy_dma((rdev), (s), (d), (np), (f))
  1186. #define radeon_copy(rdev, s, d, np, f) (rdev)->asic->copy((rdev), (s), (d), (np), (f))
  1187. #define radeon_set_engine_clock(rdev, e) (rdev)->asic->set_engine_clock((rdev), (e))
  1188. #define radeon_set_memory_clock(rdev, e) (rdev)->asic->set_engine_clock((rdev), (e))
  1189. #define radeon_set_pcie_lanes(rdev, l) (rdev)->asic->set_pcie_lanes((rdev), (l))
  1190. #define radeon_set_clock_gating(rdev, e) (rdev)->asic->set_clock_gating((rdev), (e))
  1191.  
  1192.  
  1193. #define DRM_UDELAY(d)           udelay(d)
  1194.  
  1195. resource_size_t
  1196. drm_get_resource_start(struct drm_device *dev, unsigned int resource);
  1197. resource_size_t
  1198. drm_get_resource_len(struct drm_device *dev, unsigned int resource);
  1199.  
  1200.  
  1201. #endif
  1202.