/* * Author: Max Lingua */ #ifndef _S3V_REG_H #define _S3V_REG_H #define S3V_REGS_NUM 256 /************ * DMA REGS * ************/ #define S3V_DMA_ID 0 #define S3V_DMA_REG 0x8590 #define S3V_DMA_WRITEP_ID 1 #define S3V_DMA_WRITEP_REG 0x8594 #define S3V_DMA_READP_ID 2 #define S3V_DMA_READP_REG 0x8598 #define S3V_DMA_ENABLE_ID 3 #define S3V_DMA_ENABLE_REG 0x859C #define S3V_DMA_UPDATE_ID 4 #define S3V_DMA_UPDATE_REG 0x10000 /*************** * STATUS REGS * ***************/ #define S3V_STAT_ID 10 #define S3V_STAT_REG 0x8504 #define S3V_STAT_VSYNC_ID 11 #define S3V_STAT_VSYNC_REG 0x8505 #define S3V_STAT_3D_DONE_ID 12 #define S3V_STAT_3D_DONE_REG 0x8506 #define S3V_STAT_FIFO_OVER_ID 13 #define S3V_STAT_FIFO_OVER_REG 0x8508 #define S3V_STAT_FIFO_EMPTY_ID 14 #define S3V_STAT_FIFO_EMPTY_REG 0x850C #define S3V_STAT_HDMA_DONE_ID 15 #define S3V_STAT_HDMA_DONE_REG 0x8514 #define S3V_STAT_CDMA_DONE_ID 16 #define S3V_STAT_CDMA_DONE_REG 0x8524 #define S3V_STAT_3D_FIFO_EMPTY_ID 17 #define S3V_STAT_3D_FIFO_EMPTY_REG 0x8544 #define S3V_STAT_LPB_ID 18 #define S3V_STAT_LPB_REG 0x8584 #define S3V_STAT_3D_BUSY_ID 19 #define S3V_STAT_3D_BUSY_REG 0x8704 /*********** * 2D REGS * ***********/ #define S3V_BITBLT_ID 30 #define S3V_BITBLT_REG 0xA400 #define S3V_BITBLT_SRC_BASE_ID 31 #define S3V_BITBLT_SRC_BASE_REG 0xA4D4 #define S3V_BITBLT_DEST_BASE_ID 32 #define S3V_BITBLT_DEST_BASE_REG 0xA4D8 #define S3V_BITBLT_CLIP_L_R_ID 33 #define S3V_BITBLT_CLIP_L_R_REG 0xA4DC #define S3V_BITBLT_CLIP_T_B_ID 34 #define S3V_BITBLT_CLIP_T_B_REG 0xA4E0 #define S3V_BITBLT_DEST_SRC_STRIDE_ID 35 #define S3V_BITBLT_DEST_SRC_STRIDE_REG 0xA4E4 #define S3V_BITBLT_MONO_PAT0_ID 36 #define S3V_BITBLT_MONO_PAT0_REG 0xA4E8 #define S3V_BITBLT_MONO_PAT1_ID 37 #define S3V_BITBLT_MONO_PAT1_REG 0xA4EC #define S3V_BITBLT_PAT_BG_COLOR_ID 38 #define S3V_BITBLT_PAT_BG_COLOR_REG 0xA4F0 #define S3V_BITBLT_PAT_FG_COLOR_ID 39 #define S3V_BITBLT_PAT_FG_COLOR_REG 0xA4F4 #define S3V_BITBLT_CMDSET_ID 40 #define S3V_BITBLT_CMDSET_REG 0xA500 #define S3V_BITBLT_WIDTH_HEIGHT_ID 41 #define S3V_BITBLT_WIDTH_HEIGHT_REG 0xA504 #define S3V_BITBLT_SRC_X_Y_ID 42 #define S3V_BITBLT_SRC_X_Y_REG 0xA508 #define S3V_BITBLT_DEST_X_Y_ID 43 #define S3V_BITBLT_DEST_X_Y_REG 0xA50C #define S3V_2DLINE_ID 44 #define S3V_2DLINE_REG 0xA800 #define S3V_2DPOLY_ID 45 #define S3V_2DPOLY_REG 0xAC00 /*************** * 3DLINE REGS * ***************/ /* base regs */ #define S3V_3DLINE_ID 50 #define S3V_3DLINE_REG 0xB000 #define S3V_3DLINE_Z_BASE_ID 51 #define S3V_3DLINE_Z_BASE_REG 0xB0D4 #define S3V_3DLINE_SRC_BASE_ID 52 /* it is the same reg */ #define S3V_3DLINE_SRC_BASE_REG 0xB0D4 #define S3V_3DLINE_DEST_BASE_ID 53 #define S3V_3DLINE_DEST_BASE_REG 0xB0D8 #define S3V_3DLINE_CLIP_L_R_ID 54 #define S3V_3DLINE_CLIP_L_R_REG 0xB0DC #define S3V_3DLINE_CLIP_T_B_ID 55 #define S3V_3DLINE_CLIP_T_B_REG 0xB0E0 #define S3V_3DLINE_DEST_SRC_STRIDE_ID 56 #define S3V_3DLINE_DEST_SRC_STRIDE_REG 0xB0E4 #define S3V_3DLINE_Z_STRIDE_ID 57 #define S3V_3DLINE_Z_STRIDE_REG 0xB0E8 #define S3V_3DLINE_TEX_BASE_ID 58 #define S3V_3DLINE_TEX_BASE_REG 0xB0EC #define S3V_3DLINE_TEX_B_COLOR_ID 59 #define S3V_3DLINE_TEX_B_COLOR_REG 0xB0F0 #define S3V_3DLINE_FOG_COLOR_ID 60 #define S3V_3DLINE_FOG_COLOR_REG 0xB0F4 #define S3V_3DLINE_COLOR0_ID 61 #define S3V_3DLINE_COLOR0_REG 0xB0F8 #define S3V_3DLINE_COLOR1_ID 62 #define S3V_3DLINE_COLOR1_REG 0xB0FC #define S3V_3DLINE_CMDSET_ID 63 #define S3V_3DLINE_CMDSET_REG 0xB100 /* special */ /* tex regs */ /* FIXME: shouldn't it be a 1D tex for lines? */ #define S3V_3DLINE_BASEV_ID 64 #define S3V_3DLINE_BASEV_REG 0xB104 #define S3V_3DLINE_BASEU_ID 65 #define S3V_3DLINE_BASEU_REG 0xB108 #define S3V_3DLINE_WXD_ID 66 #define S3V_3DLINE_WXD_REG 0xB10C #define S3V_3DLINE_WYD_ID 67 #define S3V_3DLINE_WYD_REG 0xB110 #define S3V_3DLINE_WSTART_ID 68 #define S3V_3DLINE_WSTART_REG 0xB114 #define S3V_3DLINE_DXD_ID 69 #define S3V_3DLINE_DXD_REG 0xB118 #define S3V_3DLINE_VXD_ID 70 #define S3V_3DLINE_VXD_REG 0xB11C #define S3V_3DLINE_UXD_ID 71 #define S3V_3DLINE_UXD_REG 0xB120 #define S3V_3DLINE_DYD_ID 72 #define S3V_3DLINE_DYD_REG 0xB124 #define S3V_3DLINE_VYD_ID 73 #define S3V_3DLINE_VYD_REG 0xB128 #define S3V_3DLINE_UYD_ID 74 #define S3V_3DLINE_UYD_REG 0xB12C #define S3V_3DLINE_DSTART_ID 75 #define S3V_3DLINE_DSTART_REG 0xB130 #define S3V_3DLINE_VSTART_ID 76 #define S3V_3DLINE_VSTART_REG 0xB134 #define S3V_3DLINE_USTART_ID 77 #define S3V_3DLINE_USTART_REG 0xB138 /* gourad regs */ #define S3V_3DLINE_GBD_ID 78 #define S3V_3DLINE_GBD_REG 0xB144 #define S3V_3DLINE_ARD_ID 79 #define S3V_3DLINE_ARD_REG 0xB148 #define S3V_3DLINE_GS_BS_ID 80 #define S3V_3DLINE_GS_BS_REG 0xB14C #define S3V_3DLINE_AS_RS_ID 81 #define S3V_3DLINE_AS_RS_REG 0xB150 /* vertex regs */ #define S3V_3DLINE_DZ_ID 82 #define S3V_3DLINE_DZ_REG 0xB158 #define S3V_3DLINE_ZSTART_ID 83 #define S3V_3DLINE_ZSTART_REG 0xB15C #define S3V_3DLINE_XEND0_END1_ID 84 #define S3V_3DLINE_XEND0_END1_REG 0xB16C #define S3V_3DLINE_DX_ID 85 #define S3V_3DLINE_DX_REG 0xB170 #define S3V_3DLINE_XSTART_ID 86 #define S3V_3DLINE_XSTART_REG 0xB174 #define S3V_3DLINE_YSTART_ID 87 #define S3V_3DLINE_YSTART_REG 0xB178 #define S3V_3DLINE_YCNT_ID 88 #define S3V_3DLINE_YCNT_REG 0xB17C /************** * 3DTRI REGS * **************/ /* base regs */ #define S3V_3DTRI_ID 100 #define S3V_3DTRI_REG 0xB400 #define S3V_3DTRI_Z_BASE_ID 101 #define S3V_3DTRI_Z_BASE_REG 0xB4D4 #define S3V_3DTRI_SRC_BASE_ID 102 /* it is the same reg */ #define S3V_3DTRI_SRC_BASE_REG 0xB4D4 #define S3V_3DTRI_DEST_BASE_ID 103 #define S3V_3DTRI_DEST_BASE_REG 0xB4D8 #define S3V_3DTRI_CLIP_L_R_ID 104 #define S3V_3DTRI_CLIP_L_R_REG 0xB4DC #define S3V_3DTRI_CLIP_T_B_ID 105 #define S3V_3DTRI_CLIP_T_B_REG 0xB4E0 #define S3V_3DTRI_DEST_SRC_STRIDE_ID 106 #define S3V_3DTRI_DEST_SRC_STRIDE_REG 0xB4E4 #define S3V_3DTRI_Z_STRIDE_ID 107 #define S3V_3DTRI_Z_STRIDE_REG 0xB4E8 #define S3V_3DTRI_TEX_BASE_ID 108 #define S3V_3DTRI_TEX_BASE_REG 0xB4EC #define S3V_3DTRI_TEX_B_COLOR_ID 109 #define S3V_3DTRI_TEX_B_COLOR_REG 0xB4F0 #define S3V_3DTRI_FOG_COLOR_ID 110 #define S3V_3DTRI_FOG_COLOR_REG 0xB4F4 #define S3V_3DTRI_COLOR0_ID 111 #define S3V_3DTRI_COLOR0_REG 0xB4F8 #define S3V_3DTRI_COLOR1_ID 112 #define S3V_3DTRI_COLOR1_REG 0xB4FC #define S3V_3DTRI_CMDSET_ID 113 /* special */ #define S3V_3DTRI_CMDSET_REG 0xB500 /* tex regs */ #define S3V_3DTRI_BASEV_ID 114 #define S3V_3DTRI_BASEV_REG 0xB504 #define S3V_3DTRI_BASEU_ID 115 #define S3V_3DTRI_BASEU_REG 0xB508 #define S3V_3DTRI_WXD_ID 116 #define S3V_3DTRI_WXD_REG 0xB50C #define S3V_3DTRI_WYD_ID 117 #define S3V_3DTRI_WYD_REG 0xB510 #define S3V_3DTRI_WSTART_ID 118 #define S3V_3DTRI_WSTART_REG 0xB514 #define S3V_3DTRI_DXD_ID 119 #define S3V_3DTRI_DXD_REG 0xB518 #define S3V_3DTRI_VXD_ID 120 #define S3V_3DTRI_VXD_REG 0xB51C #define S3V_3DTRI_UXD_ID 121 #define S3V_3DTRI_UXD_REG 0xB520 #define S3V_3DTRI_DYD_ID 122 #define S3V_3DTRI_DYD_REG 0xB524 #define S3V_3DTRI_VYD_ID 123 #define S3V_3DTRI_VYD_REG 0xB528 #define S3V_3DTRI_UYD_ID 124 #define S3V_3DTRI_UYD_REG 0xB52C #define S3V_3DTRI_DSTART_ID 125 #define S3V_3DTRI_DSTART_REG 0xB530 #define S3V_3DTRI_VSTART_ID 126 #define S3V_3DTRI_VSTART_REG 0xB534 #define S3V_3DTRI_USTART_ID 127 #define S3V_3DTRI_USTART_REG 0xB538 /* gourad regs */ #define S3V_3DTRI_GBX_ID 128 #define S3V_3DTRI_GBX_REG 0xB53C #define S3V_3DTRI_ARX_ID 129 #define S3V_3DTRI_ARX_REG 0xB540 #define S3V_3DTRI_GBY_ID 130 #define S3V_3DTRI_GBY_REG 0xB544 #define S3V_3DTRI_ARY_ID 131 #define S3V_3DTRI_ARY_REG 0xB548 #define S3V_3DTRI_GS_BS_ID 132 #define S3V_3DTRI_GS_BS_REG 0xB54C #define S3V_3DTRI_AS_RS_ID 133 #define S3V_3DTRI_AS_RS_REG 0xB550 /* vertex regs */ #define S3V_3DTRI_ZXD_ID 134 #define S3V_3DTRI_ZXD_REG 0xB554 #define S3V_3DTRI_ZYD_ID 135 #define S3V_3DTRI_ZYD_REG 0xB558 #define S3V_3DTRI_ZSTART_ID 136 #define S3V_3DTRI_ZSTART_REG 0xB55C #define S3V_3DTRI_TXDELTA12_ID 137 #define S3V_3DTRI_TXDELTA12_REG 0xB560 #define S3V_3DTRI_TXEND12_ID 138 #define S3V_3DTRI_TXEND12_REG 0xB564 #define S3V_3DTRI_TXDELTA01_ID 139 #define S3V_3DTRI_TXDELTA01_REG 0xB568 #define S3V_3DTRI_TXEND01_ID 140 #define S3V_3DTRI_TXEND01_REG 0xB56C #define S3V_3DTRI_TXDELTA02_ID 141 #define S3V_3DTRI_TXDELTA02_REG 0xB570 #define S3V_3DTRI_TXSTART02_ID 142 #define S3V_3DTRI_TXSTART02_REG 0xB574 #define S3V_3DTRI_TYS_ID 143 #define S3V_3DTRI_TYS_REG 0xB578 #define S3V_3DTRI_TY01_Y12_ID 144 #define S3V_3DTRI_TY01_Y12_REG 0xB57C /* COMMANDS (to 0xB100 [lines] or 0xB500 [tris]) */ /* Auto execute */ #define AUTO_EXEC_MASK 0x00000001 #define AUTO_EXEC_OFF (0x0) #define AUTO_EXEC_ON (0x1) /* HW clipping */ #define HW_CLIP_MASK 0x00000002 #define HW_CLIP_OFF (0x0 << 1) #define HW_CLIP_ON (0x1 << 1) /* Destination color */ #define DEST_COL_MASK 0x0000001c #define DEST_COL_PAL (0x0 << 2) /* 8 bpp - palettized */ #define DEST_COL_1555 (0x1 << 2) /* 16 bpp - ZRGB */ #define DEST_COL_888 (0x2 << 2) /* 24 bpp - RGB */ /* Texture color */ #define TEX_COL_MASK 0x000000e0 #define TEX_COL_ARGB8888 (0x0 << 5) /* 32 bpp - ARGB */ #define TEX_COL_ARGB4444 (0x1 << 5) /* 16 bpp - ARGB */ #define TEX_COL_ARGB1555 (0x2 << 5) /* 16 bpp - ARGB */ #define TEX_COL_ALPHA4 (0x3 << 5) /* 8 bpp - ALPHA4 */ #define TEX_COL_BLEND4_LOW (0x4 << 5) /* 4 bpp - BLEND4 low nibble */ #define TEX_COL_BLEND4_HIGH (0x5 << 5) /* 4 bpp - BLEND4 high nibble */ #define TEX_COL_PAL (0x6 << 5) /* 8 bpp - palettized */ #define TEX_COL_YUV (0x7 << 5) /* 16 bpp - YUV */ /* Mipmap level */ #define MIP_MASK 0x00000f00 #define MIPMAP_LEVEL(s) (s << 8) /* 8 -> 11 bits */ /* Texture filtering */ #define TEX_FILTER_MASK 0x00007000 #define MIP_NEAREST (0x0 << 12) #define LINEAR_MIP_NEAREST (0x1 << 12) #define MIP_LINEAR (0x2 << 12) #define LINEAR_MIP_LINEAR (0x3 << 12) #define NEAREST (0x4 << 12) #define FAST_BILINEAR (0x5 << 12) #define LINEAR (0x6 << 12) /* Texture blending */ #define TEX_BLEND_MAKS 0x00018000 #define TEX_REFLECT (0x0 << 15) #define TEX_MODULATE (0x1 << 15) #define TEX_DECAL (0x2 << 15) /* Fog */ #define FOG_MASK 0x00020000 #define FOG_OFF (0x0 << 17) #define FOG_ON (0x1 << 17) /* Alpha blending */ #define ALPHA_BLEND_MASK 0x000c0000 #define ALPHA_OFF (0x0 << 18) | (0x0 << 19) #define ALPHA_TEX (0x2 << 18) #define ALPHA_SRC (0x3 << 18) /* Depth compare mode */ #define Z_MODE_MASK 0x00700000 #define Z_NEVER (0x0 << 20) #define Z_GREATER (0x1 << 20) #define Z_EQUAL (0x2 << 20) #define Z_GEQUAL (0x3 << 20) #define Z_LESS (0x4 << 20) #define Z_NOTEQUAL (0x5 << 20) #define Z_LEQUAL (0x6 << 20) #define Z_ALWAYS (0x7 << 20) /* Depth update */ #define Z_UPDATE_MASK 0x00800000 #define Z_UPDATE_OFF (0x0 << 23) /* disable z update */ #define Z_UPDATE_ON (0x1 << 23) /* Depth buffering mode */ #define Z_BUFFER_MASK 0x03000000 #define Z_BUFFER (0x0 << 24) | (0x0 << 25) #define Z_MUX_BUF (0x1 << 24) | (0x0 << 25) #define Z_MUX_DRAW (0x2 << 24) #define Z_OFF (0x3 << 24) /* no z buffering */ /* Texture wrapping */ #define TEX_WRAP_MASK 0x04000000 #define TEX_WRAP_OFF (0x0 << 26) #define TEX_WRAP_ON (0x1 << 26) /* 3d command */ #define DO_MASK 0x78000000 #define DO_GOURAUD_TRI (0x0 << 27) #define DO_TEX_LIT_TRI_OLD (0x1 << 27) #define DO_TEX_UNLIT_TRI_OLD (0x2 << 27) #define DO_TEX_LIT_TRI (0x5 << 27) #define DO_TEX_UNLIT_TRI (0x6 << 27) #define DO_3D_LINE (0x8 << 27) #define DO_NOP (0xf << 27) /* turn on autoexec */ /* status */ #define CMD_MASK 0x80000000 #define CMD_2D (0x0 << 31) /* execute a 2d cmd */ #define CMD_3D (0x1 << 31) /* execute a 3d cmd */ /* global masks */ #define TEX_MASK ( TEX_COL_MASK | TEX_WRAP_MASK | MIP_MASK \ | TEX_FILTER_MASK | TEX_BLEND_MAKS \ | TEX_WRAP_MASK ) #define Z_MASK ( Z_MODE_MASK | Z_UPDATE_MASK | Z_BUFFER_MASK ) #endif /* _S3V_REG_H */