Subversion Repositories Kolibri OS

Rev

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

  1. #include "pci.h"
  2. #include "rhd_regs.h"
  3.  
  4. enum RHD_CHIPSETS {
  5.     RHD_UNKNOWN = 0,
  6.     /* R500 */
  7.     RHD_RV505,
  8.     RHD_RV515,
  9.     RHD_RV516,
  10.     RHD_R520,
  11.     RHD_RV530,
  12.     RHD_RV535,
  13.     RHD_RV550,
  14.     RHD_RV560,
  15.     RHD_RV570,
  16.     RHD_R580,
  17.     /* R500 Mobility */
  18.     RHD_M52,
  19.     RHD_M54,
  20.     RHD_M56,
  21.     RHD_M58,
  22.     RHD_M62,
  23.     RHD_M64,
  24.     RHD_M66,
  25.     RHD_M68,
  26.     RHD_M71,
  27.     /* R500 integrated */
  28.     RHD_RS600,
  29.     RHD_RS690,
  30.     RHD_RS740,
  31.     /* R600 */
  32.     RHD_R600,
  33.     RHD_RV610,
  34.     RHD_RV630,
  35.     /* R600 Mobility */
  36.     RHD_M72,
  37.     RHD_M74,
  38.     RHD_M76,
  39.     /* RV670 came into existence after RV6x0 and M7x */
  40.     RHD_RV670,
  41.     RHD_R680,
  42.     RHD_RV620,
  43.     RHD_M82,
  44.     RHD_RV635,
  45.     RHD_M86,
  46.     RHD_CHIP_END
  47. };
  48.  
  49. enum RHD_FAMILIES {
  50.     RHD_FAMILY_UNKNOWN = 0,
  51.     RHD_FAMILY_RV515,
  52.     RHD_FAMILY_R520,
  53.     RHD_FAMILY_RV530,
  54.     RHD_FAMILY_RV560,
  55.     RHD_FAMILY_RV570,
  56.     RHD_FAMILY_R580,
  57.     RHD_FAMILY_RS690,
  58.     RHD_FAMILY_R600,
  59.     RHD_FAMILY_RV610,
  60.     RHD_FAMILY_RV630,
  61.     RHD_FAMILY_RV670,
  62.     RHD_FAMILY_RV620,
  63.     RHD_FAMILY_RV635
  64. };
  65.  
  66. #define RHD_FB_BAR         0
  67. #define RHD_MMIO_BAR       2
  68.  
  69. #define RHD_MEM_GART       1
  70. #define RHD_MEM_FB         2
  71.  
  72. typedef struct RHDRec
  73. {
  74.   CARD32            MMIOBase;
  75.   CARD32            MMIOMapSize;
  76.   CARD32            videoRam;
  77.  
  78.   CARD32            FbBase;            /* map base of fb   */
  79.   CARD32            PhisBase;
  80.   CARD32            FbIntAddress;      /* card internal address of FB */
  81.   CARD32            FbMapSize;
  82.  
  83.   CARD32            FbFreeStart;
  84.   CARD32            FbFreeSize;
  85.  
  86.   /* visible part of the framebuffer */
  87.   unsigned int      FbScanoutStart;
  88.   unsigned int      FbScanoutSize;
  89.  
  90.   enum RHD_CHIPSETS ChipSet;
  91.   char              *ChipName;
  92.  
  93.   Bool              IsIGP;
  94.  
  95.   CARD32            bus;
  96.   CARD32            devfn;
  97.  
  98.   PCITAG            PciTag;
  99.   CARD16            PciDeviceID;
  100.  
  101.   CARD16            subvendor_id;
  102.   CARD16            subdevice_id;
  103.  
  104.   CARD32            memBase[6];
  105.   CARD32            ioBase[6];
  106.   CARD32            memtype[6];
  107.   CARD32            memsize[6];
  108.  
  109.   struct mem_block  *fb_heap;
  110.   struct mem_block  *gart_heap;
  111.  
  112.   CARD32            displayWidth;
  113.   CARD32            displayHeight;
  114.  
  115.   CARD32            __xmin;
  116.   CARD32            __ymin;
  117.   CARD32            __xmax;
  118.   CARD32            __ymax;
  119.  
  120.   CARD32            gui_control;
  121.   CARD32            dst_pitch_offset;
  122.   CARD32            surface_cntl;
  123.  
  124.   u32               *ring_base;
  125.   u32               ring_rp;
  126.   u32               ring_wp;
  127.  
  128. }RHD_t, *RHDPtr;
  129.  
  130. extern RHD_t rhd;
  131.  
  132. typedef struct
  133. {
  134.   int xmin;
  135.   int ymin;
  136.   int xmax;
  137.   int ymax;
  138. }clip_t, *PTRclip;
  139.  
  140. typedef struct {
  141.     int                 token;          /* id of the token */
  142.     const char *        name;           /* token name */
  143. } SymTabRec, *SymTabPtr;
  144.  
  145. extern inline CARD32 INREG(CARD16 offset)
  146. {
  147.   return *(volatile CARD32 *)((CARD8*)(rhd.MMIOBase + offset));
  148. }
  149.  
  150. //#define INREG(offset) *(volatile CARD32 *)((CARD8*)(rhd.MMIOBase + (offset)))
  151.  
  152. extern inline void
  153. OUTREG(CARD16 offset, CARD32 value)
  154. {
  155.   *(volatile CARD32 *)((CARD8 *)(rhd.MMIOBase + offset)) = value;
  156. }
  157.  
  158. extern inline CARD32 _RHDRegRead(RHDPtr rhdPtr, CARD16 offset)
  159. {
  160.   return *(volatile CARD32 *)((CARD8*)(rhdPtr->MMIOBase + offset));
  161. }
  162.  
  163. extern inline void
  164. MASKREG(CARD16 offset, CARD32 value, CARD32 mask)
  165. {
  166.   CARD32 tmp;
  167.  
  168.   tmp = INREG(offset);
  169.   tmp &= ~mask;
  170.   tmp |= (value & mask);
  171.   OUTREG(offset, tmp);
  172. };
  173.  
  174. extern inline void
  175. _RHDRegWrite(RHDPtr rhdPtr, CARD16 offset, CARD32 value)
  176. {
  177.   *(volatile CARD32 *)((CARD8 *)(rhdPtr->MMIOBase + offset)) = value;
  178. }
  179.  
  180. extern inline void
  181. _RHDRegMask(RHDPtr rhdPtr, CARD16 offset, CARD32 value, CARD32 mask)
  182. {
  183.   CARD32 tmp;
  184.  
  185.   tmp = _RHDRegRead(rhdPtr, offset);
  186.   tmp &= ~mask;
  187.   tmp |= (value & mask);
  188.   _RHDRegWrite(rhdPtr, offset, tmp);
  189. };
  190.  
  191. enum RHD_FAMILIES RHDFamily(enum RHD_CHIPSETS chipset);
  192.  
  193. #define RHDRegRead(ptr, offset) _RHDRegRead((ptr)->rhdPtr, (offset))
  194. #define RHDRegWrite(ptr, offset, value) _RHDRegWrite((ptr)->rhdPtr, (offset), (value))
  195. #define RHDRegMask(ptr, offset, value, mask) _RHDRegMask((ptr)->rhdPtr, (offset), (value), (mask))
  196.  
  197.  
  198. RHDPtr FindPciDevice();
  199.  
  200. Bool RHDPreInit();
  201. int rhdInitHeap(RHDPtr rhdPtr);
  202.  
  203. #define RHDFUNC(ptr)
  204.  
  205. #define DBG(x) x
  206. //  #define DBG(x)
  207.  
  208. #pragma pack (push,1)
  209. typedef struct s_cursor
  210. {
  211.    u32   magic;                           // 'CURS'
  212.    void  (*destroy)(struct s_cursor*);    // destructor
  213.    u32   fd;                              // next object in list
  214.    u32   bk;                              // prev object in list
  215.    u32   pid;                             // owner id
  216.  
  217.    void *base;                            // allocated memory
  218.    u32   hot_x;                           // hotspot coords
  219.    u32   hot_y;
  220. }cursor_t;
  221. #pragma pack (pop)
  222.  
  223. #define LOAD_FROM_FILE   0
  224. #define LOAD_FROM_MEM    1
  225. #define LOAD_INDIRECT    2
  226.  
  227. cursor_t *create_cursor(u32 pid, void *src, u32 flags);
  228. void __stdcall copy_cursor(void *img, void *src);
  229. void destroy_cursor(cursor_t *cursor);
  230. void __destroy_cursor(cursor_t *cursor);                // wrap
  231.  
  232. void __stdcall r500_SelectCursor(cursor_t *cursor);
  233. void __stdcall r500_SetCursor(cursor_t *cursor, int x, int y);
  234. void __stdcall r500_CursorRestore(int x, int y);
  235.  
  236. void  R5xx2DInit();
  237.