blob: 26a7c54af5cece7d6a7f683b837ec0241f4a8896 [file] [log] [blame]
/*
* Author: Max Lingua <sunmax@libero.it>
*/
#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 */