Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1.  
  2. typedef void *pointer;
  3.  
  4. typedef unsigned int memType;
  5.  
  6. typedef struct { float hi, lo; } range;
  7.  
  8.  
  9. typedef enum
  10. {
  11.     CHIP_FAMILY_UNKNOW,
  12.     CHIP_FAMILY_LEGACY,
  13.     CHIP_FAMILY_RADEON,
  14.     CHIP_FAMILY_RV100,
  15.     CHIP_FAMILY_RS100,    /* U1 (IGP320M) or A3 (IGP320)*/
  16.     CHIP_FAMILY_RV200,
  17.     CHIP_FAMILY_RS200,    /* U2 (IGP330M/340M/350M) or A4 (IGP330/340/345/350), RS250 (IGP 7000) */
  18.     CHIP_FAMILY_R200,
  19.     CHIP_FAMILY_RV250,
  20.     CHIP_FAMILY_RS300,    /* RS300/RS350 */
  21.     CHIP_FAMILY_RV280,
  22.     CHIP_FAMILY_R300,
  23.     CHIP_FAMILY_R350,
  24.     CHIP_FAMILY_RV350,
  25.     CHIP_FAMILY_RV380,    /* RV370/RV380/M22/M24 */
  26.     CHIP_FAMILY_R420,     /* R420/R423/M18 */
  27.     CHIP_FAMILY_RV410,    /* RV410, M26 */
  28.     CHIP_FAMILY_RS400,    /* xpress 200, 200m (RS400) Intel */
  29.     CHIP_FAMILY_RS480,    /* xpress 200, 200m (RS410/480/482/485) AMD */
  30.     CHIP_FAMILY_RV515,    /* rv515 */
  31.     CHIP_FAMILY_R520,     /* r520 */
  32.     CHIP_FAMILY_RV530,    /* rv530 */
  33.     CHIP_FAMILY_R580,     /* r580 */
  34.     CHIP_FAMILY_RV560,    /* rv560 */
  35.     CHIP_FAMILY_RV570,    /* rv570 */
  36.     CHIP_FAMILY_RS600,
  37.     CHIP_FAMILY_RS690,
  38.     CHIP_FAMILY_RS740,
  39.     CHIP_FAMILY_R600,     /* r600 */
  40.     CHIP_FAMILY_R630,
  41.     CHIP_FAMILY_RV610,
  42.     CHIP_FAMILY_RV630,
  43.     CHIP_FAMILY_RV670,
  44.     CHIP_FAMILY_RV620,
  45.     CHIP_FAMILY_RV635,
  46.     CHIP_FAMILY_RS780,
  47.     CHIP_FAMILY_RV770,
  48.     CHIP_FAMILY_LAST
  49. } RADEONChipFamily;
  50.  
  51. #define IS_RV100_VARIANT ((rhdPtr->ChipFamily == CHIP_FAMILY_RV100)  ||  \
  52.         (rhdPtr->ChipFamily == CHIP_FAMILY_RV200)  ||  \
  53.         (rhdPtr->ChipFamily == CHIP_FAMILY_RS100)  ||  \
  54.         (rhdPtr->ChipFamily == CHIP_FAMILY_RS200)  ||  \
  55.         (rhdPtr->ChipFamily == CHIP_FAMILY_RV250)  ||  \
  56.         (rhdPtr->ChipFamily == CHIP_FAMILY_RV280)  ||  \
  57.         (rhdPtr->ChipFamily == CHIP_FAMILY_RS300))
  58.  
  59.  
  60. #define IS_R300_VARIANT ((info->ChipFamily == CHIP_FAMILY_R300)  ||  \
  61.         (info->ChipFamily == CHIP_FAMILY_RV350) ||  \
  62.         (info->ChipFamily == CHIP_FAMILY_R350)  ||  \
  63.         (info->ChipFamily == CHIP_FAMILY_RV380) ||  \
  64.         (info->ChipFamily == CHIP_FAMILY_R420)  ||  \
  65.         (info->ChipFamily == CHIP_FAMILY_RV410) ||  \
  66.         (info->ChipFamily == CHIP_FAMILY_RS400) ||  \
  67.         (info->ChipFamily == CHIP_FAMILY_RS480))
  68.  
  69. #define IS_AVIVO_VARIANT ((info->ChipFamily >= CHIP_FAMILY_RV515))
  70.  
  71. #define IS_DCE3_VARIANT ((info->ChipFamily >= CHIP_FAMILY_RV620))
  72.  
  73. #define IS_R500_3D ((info->ChipFamily == CHIP_FAMILY_RV515)  ||  \
  74.         (info->ChipFamily == CHIP_FAMILY_R520)   ||  \
  75.         (info->ChipFamily == CHIP_FAMILY_RV530)  ||  \
  76.         (info->ChipFamily == CHIP_FAMILY_R580)   ||  \
  77.         (info->ChipFamily == CHIP_FAMILY_RV560)  ||  \
  78.         (info->ChipFamily == CHIP_FAMILY_RV570))
  79.  
  80. #define IS_R300_3D ((info->ChipFamily == CHIP_FAMILY_R300)  ||  \
  81.         (info->ChipFamily == CHIP_FAMILY_RV350) ||  \
  82.         (info->ChipFamily == CHIP_FAMILY_R350)  ||  \
  83.         (info->ChipFamily == CHIP_FAMILY_RV380) ||  \
  84.         (info->ChipFamily == CHIP_FAMILY_R420)  ||  \
  85.         (info->ChipFamily == CHIP_FAMILY_RV410) ||  \
  86.         (info->ChipFamily == CHIP_FAMILY_RS690) ||  \
  87.         (info->ChipFamily == CHIP_FAMILY_RS600) ||  \
  88.         (info->ChipFamily == CHIP_FAMILY_RS740) ||  \
  89.         (info->ChipFamily == CHIP_FAMILY_RS400) ||  \
  90.     (info->ChipFamily == CHIP_FAMILY_RS480))
  91.  
  92.  
  93. typedef enum {
  94.         CARD_PCI,
  95.         CARD_AGP,
  96.         CARD_PCIE
  97. } RADEONCardType;
  98.  
  99. /*
  100.  * Errata workarounds
  101.  */
  102. typedef enum {
  103.        CHIP_ERRATA_R300_CG             = 0x00000001,
  104.        CHIP_ERRATA_PLL_DUMMYREADS      = 0x00000002,
  105.        CHIP_ERRATA_PLL_DELAY           = 0x00000004
  106. } RADEONErrata;
  107.  
  108. typedef struct
  109. {
  110.     u32_t pci_device_id;
  111.     RADEONChipFamily chip_family;
  112.     int mobility;
  113.     int igp;
  114.     int nocrtc2;
  115.     int nointtvout;
  116.     int singledac;
  117. } RADEONCardInfo;
  118.  
  119.  
  120. #define RHD_FB_BAR         0
  121. #define RHD_MMIO_BAR       2
  122.  
  123. #define RHD_MEM_GART       1
  124. #define RHD_MEM_FB         2
  125.  
  126. #define RADEON_DEFAULT_GART_SIZE         8       /* MB (must be 2^n and > 4MB) */
  127. #define R300_DEFAULT_GART_SIZE           32      /* MB (for R300 and above) */
  128. #define RADEON_DEFAULT_RING_SIZE         1       /* MB (must be page aligned) */
  129. #define RADEON_DEFAULT_BUFFER_SIZE       2       /* MB (must be page aligned) */
  130. #define RADEON_DEFAULT_GART_TEX_SIZE     1       /* MB (must be page aligned) */
  131.  
  132. #define RADEON_DEFAULT_CP_TIMEOUT        100000  /* usecs */
  133.  
  134. #define RADEON_DEFAULT_PCI_APER_SIZE     32      /* in MB */
  135.  
  136. #define RADEON_PCIGART_TABLE_SIZE      (32*1024)
  137.  
  138. typedef struct RHDRec
  139. {
  140.   addr_t           MMIOBase;
  141.   size_t           MMIOMapSize;
  142.  
  143.   addr_t           FbFreeStart;
  144.   addr_t           FbFreeSize;
  145.  
  146.  /* visible part of the framebuffer */
  147. //  unsigned int      FbScanoutStart;
  148. //  unsigned int      FbScanoutSize;
  149.  
  150. //  u32_t            LinearAddr;           /* Frame buffer physical address     */
  151.  
  152.   addr_t           fbLocation;           /* Frame buffer physical address */
  153.   u32_t            mc_fb_location;
  154.   u32_t            mc_agp_location;
  155.   u32_t            mc_agp_location_hi;
  156.  
  157.   size_t           videoRam;
  158.  
  159.   u32_t            MemCntl;
  160.   u32_t            BusCntl;
  161.   unsigned long    FbMapSize;            /* Size of frame buffer, in bytes    */
  162.   unsigned long    FbSecureSize;         /* Size of secured fb area at end of
  163.                                             framebuffer */
  164.  
  165.   RADEONChipFamily ChipFamily;
  166.   RADEONErrata     ChipErrata;
  167.  
  168.   char             *chipset;
  169.  
  170.   Bool              IsIGP;
  171.   Bool              IsMobility;
  172.   Bool              HasCRTC2;
  173.  
  174.   u32_t            bus;
  175.   u32_t            devfn;
  176.  
  177.   PCITAG           PciTag;
  178.   u16_t            PciDeviceID;
  179.  
  180.   u16_t            subvendor_id;
  181.   u16_t            subdevice_id;
  182.  
  183.   RADEONCardType   cardType;            /* Current card is a PCI card */
  184.  
  185.   u32_t            memBase[6];
  186.   u32_t            ioBase[6];
  187.   u32_t            memtype[6];
  188.   u32_t            memsize[6];
  189.  
  190.   struct mem_block  *fb_heap;
  191.   struct mem_block  *gart_heap;
  192.  
  193.   u32_t            displayWidth;
  194.   u32_t            displayHeight;
  195.  
  196.   u32_t           *gart_table;
  197.   addr_t           gart_table_dma;
  198.   addr_t           gart_vm_start;
  199.   size_t           gart_size;
  200.  
  201.   u32_t*           ringBase;
  202.   u32_t            ring_rp;
  203.   u32_t            ring_wp;
  204.   u32_t            ringSize;
  205.   u32_t            ring_avail;
  206.  
  207.   u32_t            bufSize;
  208.   u32_t            pciAperSize;
  209.   u32_t            CPusecTimeout;
  210.  
  211.   int              __xmin;
  212.   int              __ymin;
  213.   int              __xmax;
  214.   int              __ymax;
  215.  
  216.   u32_t            gui_control;
  217.   u32_t            dst_pitch_offset;
  218.   u32_t            surface_cntl;
  219.  
  220.  
  221.   volatile u32_t   host_rp   __attribute__ ((aligned (128)));
  222.  
  223.   volatile u32_t   scratch0  __attribute__ ((aligned (128)));
  224.   volatile u32_t   scratch1;
  225.   volatile u32_t   scratch2;
  226.   volatile u32_t   scratch3;
  227.   volatile u32_t   scratch4;
  228.   volatile u32_t   scratch5;
  229.   volatile u32_t   scratch6;
  230.   volatile u32_t   scratch7;
  231.  
  232.   int              RamWidth  __attribute__ ((aligned (128)));
  233.   Bool             IsDDR;
  234.  
  235.   int              num_gb_pipes;
  236.   int              has_tcl;
  237.  
  238. }RHD_t, *RHDPtr;
  239.  
  240. extern RHD_t rhd;
  241.  
  242.  
  243.  
  244. #define CP_PACKET0(reg, n)            \
  245.     (RADEON_CP_PACKET0 | ((n - 1 ) << 16) | ((reg) >> 2))
  246.  
  247. #define CP_PACKET1(reg0, reg1)            \
  248.         (RADEON_CP_PACKET1 | (((reg1) >> 2) << 11) | ((reg0) >> 2))
  249.  
  250. #define CP_PACKET2()                     \
  251.   (RADEON_CP_PACKET2)
  252.  
  253. #define CP_PACKET3( pkt, n )             \
  254.         (RADEON_CP_PACKET3 | (pkt) | ((n) << 16))
  255.  
  256.  
  257. #define BEGIN_RING( req ) do {                                     \
  258.      int avail = rhd.ring_rp-rhd.ring_wp;                          \
  259.      if (avail <=0 ) avail+= 0x4000;                               \
  260.      if( (req)+128 > avail)                                        \
  261.      {                                                             \
  262.         rhd.ring_rp = INREG(RADEON_CP_RB_RPTR);                    \
  263.         avail = rhd.ring_rp-rhd.ring_wp;                           \
  264.         if (avail <= 0) avail+= 0x4000;                            \
  265.         if( (req)+128 > avail){                                    \
  266.            safe_sti(ifl);                                          \
  267.            return 0;                                               \
  268.         };                                                         \
  269.      }                                                             \
  270.      ring = &rhd.ringBase[rhd.ring_wp];                            \
  271. }while(0);
  272.  
  273. #define ADVANCE_RING()
  274.  
  275. #define OUT_RING( x )        *ring++ = (x)
  276.  
  277. #define CP_REG(reg, val)                 \
  278. do {                                     \
  279.     ring[0]  = CP_PACKET0((reg), 1);     \
  280.     ring[1]  = (val);                    \
  281.     ring+=  2;                           \
  282. } while (0)
  283.  
  284. #define DRM_MEMORYBARRIER()  __asm__ volatile("lock; addl $0,0(%%esp)" : : : "memory");
  285.  
  286. #define COMMIT_RING() do {                             \
  287.   rhd.ring_wp = (ring - rhd.ringBase) & 0x3FFF;        \
  288.   /* Flush writes to ring */                           \
  289.     DRM_MEMORYBARRIER();                               \
  290.   /*GET_RING_HEAD( dev_priv );          */             \
  291.   OUTREG( RADEON_CP_RB_WPTR, rhd.ring_wp);             \
  292.     /* read from PCI bus to ensure correct posting */  \
  293. /*  INREG( RADEON_CP_RB_RPTR );    */                  \
  294. } while (0)
  295.  
  296. #define BEGIN_ACCEL(n)          BEGIN_RING(2*(n))
  297. #define FINISH_ACCEL()          COMMIT_RING()
  298.  
  299. #define OUT_ACCEL_REG(reg, val) CP_REG((reg), (val))
  300.  
  301.  
  302. typedef struct {
  303.     int                 token;          /* id of the token */
  304.     const char *        name;           /* token name */
  305. } SymTabRec, *SymTabPtr;
  306.  
  307.  
  308.  
  309. extern inline void
  310. OUTREG8(u16_t offset, u8_t value)
  311. {
  312.   *(volatile u8_t *)((u8_t *)(rhd.MMIOBase + offset)) = value;
  313. }
  314.  
  315.  
  316. extern inline u32_t INREG(u16_t offset)
  317. {
  318.   return *(volatile u32_t *)((u8_t*)(rhd.MMIOBase + offset));
  319. }
  320.  
  321.  
  322. extern inline void OUTREG(u16_t offset, u32_t value)
  323. {
  324.   *(volatile u32_t *)((u8_t *)(rhd.MMIOBase + offset)) = value;
  325. }
  326.  
  327. //#define OUTREG( offset, value) \
  328. //  *(volatile u32_t *)((u8_t *)(rhd.MMIOBase + (u32_t)(offset))) = (u32_t)value
  329.  
  330.  
  331. extern inline u32_t _RHDRegRead(RHDPtr rhdPtr, u16_t offset)
  332. {
  333.   return *(volatile u32_t *)((u8_t*)(rhdPtr->MMIOBase + offset));
  334. }
  335.  
  336. extern inline void
  337. MASKREG(u16_t offset, u32_t value, u32_t mask)
  338. {
  339.   u32_t tmp;
  340.  
  341.   tmp = INREG(offset);
  342.   tmp &= ~mask;
  343.   tmp |= (value & mask);
  344.   OUTREG(offset, tmp);
  345. };
  346.  
  347.  
  348. #define INPLL( addr) RADEONINPLL( addr)
  349.  
  350. #define OUTPLL( addr, val) RADEONOUTPLL( addr, val)
  351.  
  352.  
  353. extern inline void
  354. _RHDRegWrite(RHDPtr rhdPtr, u16_t offset, u32_t value)
  355. {
  356.   *(volatile u32_t *)((u8_t *)(rhdPtr->MMIOBase + offset)) = value;
  357. }
  358.  
  359. extern inline void
  360. _RHDRegMask(RHDPtr rhdPtr, u16_t offset, u32_t value, u32_t mask)
  361. {
  362.   u32_t tmp;
  363.  
  364.   tmp = _RHDRegRead(rhdPtr, offset);
  365.   tmp &= ~mask;
  366.   tmp |= (value & mask);
  367.   _RHDRegWrite(rhdPtr, offset, tmp);
  368. };
  369.  
  370. #define RHDRegRead(ptr, offset) _RHDRegRead((ptr)->rhdPtr, (offset))
  371. #define RHDRegWrite(ptr, offset, value) _RHDRegWrite((ptr)->rhdPtr, (offset), (value))
  372. #define RHDRegMask(ptr, offset, value, mask) _RHDRegMask((ptr)->rhdPtr, (offset), (value), (mask))
  373.  
  374.  
  375.  
  376.  
  377. #define RHDFUNC(ptr)
  378.  
  379. #define DBG(x) x
  380. //  #define DBG(x)
  381.  
  382. #pragma pack (push,1)
  383. typedef struct s_cursor
  384. {
  385.    u32_t   magic;                           // 'CURS'
  386.    void  (*destroy)(struct s_cursor*);    // destructor
  387.    u32_t   fd;                              // next object in list
  388.    u32_t   bk;                              // prev object in list
  389.    u32_t   pid;                             // owner id
  390.  
  391.    void *base;                            // allocated memory
  392.    u32_t   hot_x;                           // hotspot coords
  393.    u32_t   hot_y;
  394. }cursor_t;
  395. #pragma pack (pop)
  396.  
  397. #define LOAD_FROM_FILE   0
  398. #define LOAD_FROM_MEM    1
  399. #define LOAD_INDIRECT    2
  400.  
  401. cursor_t *create_cursor(u32_t pid, void *src, u32_t flags);
  402. void __stdcall copy_cursor(void *img, void *src);
  403. void destroy_cursor(cursor_t *cursor);
  404. void __destroy_cursor(cursor_t *cursor);                // wrap
  405.  
  406. void __stdcall r500_SelectCursor(cursor_t *cursor);
  407. void __stdcall r500_SetCursor(cursor_t *cursor, int x, int y);
  408. void __stdcall r500_CursorRestore(int x, int y);
  409.  
  410.  
  411.  
  412. typedef struct {
  413.     u32_t x ;
  414.     u32_t y ;
  415. } xPointFixed;
  416.  
  417. typedef u32_t   xFixed_16_16;
  418.  
  419. typedef xFixed_16_16  xFixed;
  420.  
  421. #define XFIXED_BITS 16
  422.  
  423. #define xFixedToInt(f)  (int) ((f) >> XFIXED_BITS)
  424. #define IntToxFixed(i)  ((xFixed) (i) << XFIXED_BITS)
  425.  
  426. #define xFixedToFloat(f) (((float) (f)) / 65536)
  427.  
  428. #define PICT_FORMAT(bpp,type,a,r,g,b) (((bpp) << 24) |  \
  429.                                          ((type) << 16) | \
  430.                                          ((a) << 12) | \
  431.                                          ((r) << 8) | \
  432.                                          ((g) << 4) | \
  433.                                          ((b)))
  434.  
  435. #define PICT_FORMAT_A(f)  (((f) >> 12) & 0x0f)
  436. #define PICT_FORMAT_RGB(f)  (((f)      ) & 0xfff)
  437.  
  438. #define PICT_TYPE_OTHER 0
  439. #define PICT_TYPE_A     1
  440. #define PICT_TYPE_ARGB  2
  441. #define PICT_TYPE_ABGR  3
  442. #define PICT_TYPE_COLOR 4
  443. #define PICT_TYPE_GRAY  5
  444.  
  445. typedef enum _PictFormatShort {
  446.    PICT_a8r8g8b8 =      PICT_FORMAT(32,PICT_TYPE_ARGB,8,8,8,8),
  447.    PICT_x8r8g8b8 =      PICT_FORMAT(32,PICT_TYPE_ARGB,0,8,8,8),
  448.    PICT_a8b8g8r8 =      PICT_FORMAT(32,PICT_TYPE_ABGR,8,8,8,8),
  449.    PICT_x8b8g8r8 =      PICT_FORMAT(32,PICT_TYPE_ABGR,0,8,8,8),
  450.  
  451. /* 24bpp formats */
  452.    PICT_r8g8b8 =        PICT_FORMAT(24,PICT_TYPE_ARGB,0,8,8,8),
  453.    PICT_b8g8r8 =        PICT_FORMAT(24,PICT_TYPE_ABGR,0,8,8,8),
  454.  
  455. /* 16bpp formats */
  456.    PICT_r5g6b5 =        PICT_FORMAT(16,PICT_TYPE_ARGB,0,5,6,5),
  457.    PICT_b5g6r5 =        PICT_FORMAT(16,PICT_TYPE_ABGR,0,5,6,5),
  458.  
  459.    PICT_a1r5g5b5 =      PICT_FORMAT(16,PICT_TYPE_ARGB,1,5,5,5),
  460.    PICT_x1r5g5b5 =      PICT_FORMAT(16,PICT_TYPE_ARGB,0,5,5,5),
  461.    PICT_a1b5g5r5 =      PICT_FORMAT(16,PICT_TYPE_ABGR,1,5,5,5),
  462.    PICT_x1b5g5r5 =      PICT_FORMAT(16,PICT_TYPE_ABGR,0,5,5,5),
  463.    PICT_a4r4g4b4 =      PICT_FORMAT(16,PICT_TYPE_ARGB,4,4,4,4),
  464.    PICT_x4r4g4b4 =      PICT_FORMAT(16,PICT_TYPE_ARGB,0,4,4,4),
  465.    PICT_a4b4g4r4 =      PICT_FORMAT(16,PICT_TYPE_ABGR,4,4,4,4),
  466.    PICT_x4b4g4r4 =      PICT_FORMAT(16,PICT_TYPE_ABGR,0,4,4,4),
  467.  
  468. /* 8bpp formats */
  469.    PICT_a8 =            PICT_FORMAT(8,PICT_TYPE_A,8,0,0,0),
  470.    PICT_r3g3b2 =        PICT_FORMAT(8,PICT_TYPE_ARGB,0,3,3,2),
  471.    PICT_b2g3r3 =        PICT_FORMAT(8,PICT_TYPE_ABGR,0,3,3,2),
  472.    PICT_a2r2g2b2 =      PICT_FORMAT(8,PICT_TYPE_ARGB,2,2,2,2),
  473.    PICT_a2b2g2r2 =      PICT_FORMAT(8,PICT_TYPE_ABGR,2,2,2,2),
  474.  
  475.    PICT_c8 =            PICT_FORMAT(8,PICT_TYPE_COLOR,0,0,0,0),
  476.    PICT_g8 =            PICT_FORMAT(8,PICT_TYPE_GRAY,0,0,0,0),
  477.  
  478.    PICT_x4a4 =          PICT_FORMAT(8,PICT_TYPE_A,4,0,0,0),
  479.  
  480.    PICT_x4c4 =          PICT_FORMAT(8,PICT_TYPE_COLOR,0,0,0,0),
  481.    PICT_x4g4 =          PICT_FORMAT(8,PICT_TYPE_GRAY,0,0,0,0),
  482.  
  483. /* 4bpp formats */
  484.    PICT_a4 =            PICT_FORMAT(4,PICT_TYPE_A,4,0,0,0),
  485.    PICT_r1g2b1 =        PICT_FORMAT(4,PICT_TYPE_ARGB,0,1,2,1),
  486.    PICT_b1g2r1 =        PICT_FORMAT(4,PICT_TYPE_ABGR,0,1,2,1),
  487.    PICT_a1r1g1b1 =      PICT_FORMAT(4,PICT_TYPE_ARGB,1,1,1,1),
  488.    PICT_a1b1g1r1 =      PICT_FORMAT(4,PICT_TYPE_ABGR,1,1,1,1),
  489.  
  490.    PICT_c4 =            PICT_FORMAT(4,PICT_TYPE_COLOR,0,0,0,0),
  491.    PICT_g4 =            PICT_FORMAT(4,PICT_TYPE_GRAY,0,0,0,0),
  492.  
  493. /* 1bpp formats */
  494.    PICT_a1 =            PICT_FORMAT(1,PICT_TYPE_A,1,0,0,0),
  495.  
  496.    PICT_g1 =            PICT_FORMAT(1,PICT_TYPE_GRAY,0,0,0,0),
  497. } PictFormatShort;
  498.  
  499. void dump_mem();
  500.  
  501.  
  502.  
  503. RHDPtr  FindPciDevice();
  504.  
  505. Bool    RHDPreInit();
  506.  
  507. void    R5xx2DInit();
  508.  
  509. int     Init3DEngine(RHDPtr info);
  510.  
  511. void    init_gart(RHDPtr info);
  512.  
  513. int     rhdInitHeap(RHDPtr rhdPtr);
  514.  
  515.  
  516.