#ifndef __MACH64_H__
#define __MACH64_H__
#define CURSOR_BYTES 1024
enum Mach64_MemoryType
{
MEM_NONE,
MEM_DRAM,
MEM_EDO,
MEM_PSEUDO_EDO,
MEM_SDRAM,
MEM_SGRAM,
MEM_SGRAM32,
MEM_TYPE_7
};
#define UnitOf(___Value) (((((___Value) ^ ((___Value) - 1)) + 1) >> 1) \
| ((((___Value) ^ ((___Value) - 1)) >> 1) + 1))
#define GetBits(__Value, _Mask) (((__Value) & (_Mask)) / UnitOf(_Mask))
#define SetBits(__Value, _Mask) (((__Value) * UnitOf(_Mask)) & (_Mask))
#define CRTC_H_TOTAL_DISP (0x0c00 + 0x0000)
#define CRTC_H_SYNC_STRT_WID (0x0c00 + 0x0004)
#define CRTC_V_TOTAL_DISP (0x0c00 + 0x0008)
#define CRTC_V_SYNC_STRT_WID (0x0c00 + 0x000C)
#define CRTC_VLINE_CRNT_VLINE (0x0c00 + 0x0010)
#define CRTC_OFF_PITCH (0x0c00 + 0x0014)
#define CRTC_INT_CNTL (0x0c00 + 0x0018)
#define CRTC_GEN_CNTL (0x0c00 + 0x001C)
#define DSP_CONFIG (0x0c00 + 0x0020)
#define DSP_ON_OFF (0x0c00 + 0x0024)
#define SHARED_CNTL (0x0c00 + 0x0038)
#define OVR_CLR (0x0c00 + 0x0040)
#define OVR_WID_LEFT_RIGHT (0x0c00 + 0x0044)
#define OVR_WID_TOP_BOTTOM (0x0c00 + 0x0048)
#define CUR_CLR0 (0x0c00 + 0x0060)
#define CUR_CLR1 (0x0c00 + 0x0064)
#define CUR_OFFSET (0x0c00 + 0x0068)
#define CUR_HORZ_VERT_POSN (0x0c00 + 0x006C)
#define CUR_HORZ_VERT_OFF (0x0c00 + 0x0070)
#define HW_DEBUG (0x0c00 + 0x007C)
#define SCRATCH_REG0 (0x0c00 + 0x0080)
#define SCRATCH_REG1 (0x0c00 + 0x0084)
#define CLOCK_CNTL (0x0c00 + 0x0090)
#define BUS_CNTL (0x0c00 + 0x00A0)
#define LCD_INDEX (0x0c00 + 0x00A4)
#define LCD_DATA (0x0c00 + 0x00A8)
#define MEM_CNTL (0x0c00 + 0x00B0)
#define MEM_VGA_WP_SEL (0x0c00 + 0x00B4)
#define MEM_VGA_RP_SEL (0x0c00 + 0x00B8)
#define DAC_REGS (0x0c00 + 0x00C0)
#define DAC_W_INDEX (DAC_REGS + 0)
#define DAC_DATA (DAC_REGS + 1)
#define DAC_MASK (DAC_REGS + 2)
#define DAC_R_INDEX (DAC_REGS + 3)
#define DAC_CNTL (0x0c00 + 0x00C4)
#define GEN_TEST_CNTL (0x0c00 + 0x00D0)
#define CONFIG_CNTL (0x0c00 + 0x00DC
#define CONFIG_CHIP_ID (0x0c00 + 0x00E0)
#define CONFIG_STAT0 (0x0c00 + 0x00E4)
#define CONFIG_STAT1 (0x0c00 + 0x00E8)
#define DST_OFF_PITCH (0x0c00 + 0x0100)
#define DST_X (0x0c00 + 0x0104)
#define DST_Y (0x0c00 + 0x0108)
#define DST_Y_X (0x0c00 + 0x010C)
#define DST_WIDTH (0x0c00 + 0x0110)
#define DST_HEIGHT (0x0c00 + 0x0114)
#define DST_HEIGHT_WIDTH (0x0c00 + 0x0118)
#define DST_X_WIDTH (0x0c00 + 0x011C)
#define DST_BRES_LNTH (0x0c00 + 0x0120)
#define DST_BRES_ERR (0x0c00 + 0x0124)
#define DST_BRES_INC (0x0c00 + 0x0128)
#define DST_BRES_DEC (0x0c00 + 0x012C)
#define DST_CNTL (0x0c00 + 0x0130)
#define SRC_OFF_PITCH (0x0c00 + 0x0180)
#define SRC_X (0x0c00 + 0x0184)
#define SRC_Y (0x0c00 + 0x0188)
#define SRC_Y_X (0x0c00 + 0x018C)
#define SRC_WIDTH1 (0x0c00 + 0x0190)
#define SRC_HEIGHT1 (0x0c00 + 0x0194)
#define SRC_HEIGHT1_WIDTH1 (0x0c00 + 0x0198)
#define SRC_X_START (0x0c00 + 0x019C)
#define SRC_Y_START (0x0c00 + 0x01A0)
#define SRC_Y_X_START (0x0c00 + 0x01A4)
#define SRC_WIDTH2 (0x0c00 + 0x01A8)
#define SRC_HEIGHT2 (0x0c00 + 0x01AC)
#define SRC_HEIGHT2_WIDTH2 (0x0c00 + 0x01B0)
#define SRC_CNTL (0x0c00 + 0x01B4)
#define HOST_DATA0 (0x0c00 + 0x0200)
#define HOST_DATA1 (0x0c00 + 0x0204)
#define HOST_DATA2 (0x0c00 + 0x0208)
#define HOST_DATA3 (0x0c00 + 0x020C)
#define HOST_DATA4 (0x0c00 + 0x0210)
#define HOST_DATA5 (0x0c00 + 0x0214)
#define HOST_DATA6 (0x0c00 + 0x0218)
#define HOST_DATA7 (0x0c00 + 0x021C)
#define HOST_DATA8 (0x0c00 + 0x0220)
#define HOST_DATA9 (0x0c00 + 0x0224)
#define HOST_DATAA (0x0c00 + 0x0228)
#define HOST_DATAB (0x0c00 + 0x022C)
#define HOST_DATAC (0x0c00 + 0x0230)
#define HOST_DATAD (0x0c00 + 0x0234)
#define HOST_DATAE (0x0c00 + 0x0238)
#define HOST_DATAF (0x0c00 + 0x023C)
#define HOST_CNTL (0x0c00 + 0x0240)
#define PAT_REG0 (0x0c00 + 0x0280)
#define PAT_REG1 (0x0c00 + 0x0284)
#define PAT_CNTL (0x0c00 + 0x0288)
#define SC_LEFT (0x0c00 + 0x02A0)
#define SC_RIGHT (0x0c00 + 0x02A4)
#define SC_LEFT_RIGHT (0x0c00 + 0x02A8)
#define SC_TOP (0x0c00 + 0x02AC)
#define SC_BOTTOM (0x0c00 + 0x02B0)
#define SC_TOP_BOTTOM (0x0c00 + 0x02B4)
#define DP_BKGD_CLR (0x0c00 + 0x02C0)
#define DP_FRGD_CLR (0x0c00 + 0x02C4)
#define DP_WRITE_MASK (0x0c00 + 0x02C8)
#define DP_CHAIN_MASK (0x0c00 + 0x02CC)
#define DP_PIX_WIDTH (0x0c00 + 0x02D0)
#define DP_MIX (0x0c00 + 0x02D4)
#define DP_SRC (0x0c00 + 0x02D8)
#define CLR_CMP_CLR (0x0c00 + 0x0300)
#define CLR_CMP_MASK (0x0c00 + 0x0304)
#define CLR_CMP_CNTL (0x0c00 + 0x0308)
#define FIFO_STAT (0x0c00 + 0x0310)
#define CONTEXT_MASK (0x0c00 + 0x0320)
#define CONTEXT_LOAD_CNTL (0x0c00 + 0x032C)
#define GUI_TRAJ_CNTL (0x0c00 + 0x0330)
#define GUI_STAT (0x0c00 + 0x0338)
#define REG_BLOCK_1 0x0800
#define OVERLAY_Y_X_START (REG_BLOCK_1 + 0x0000)
#define OVERLAY_LOCK_START 0x80000000ul
#define OVERLAY_Y_X_END (REG_BLOCK_1 + 0x0004)
#define OVERLAY_GRAPHICS_KEY_CLR (REG_BLOCK_1 + 0x0010)
#define OVERLAY_GRAPHICS_KEY_MSK (REG_BLOCK_1 + 0x0014)
#define OVERLAY_KEY_CNTL (REG_BLOCK_1 + 0x0018)
#define OVERLAY_MIX_FALSE 0x00
#define OVERLAY_MIX_EQUAL 0x50
#define OVERLAY_SCALE_INC (REG_BLOCK_1 + 0x0020)
#define OVERLAY_SCALE_CNTL (REG_BLOCK_1 + 0x0024)
#define SCALE_PIX_EXPAND 0x00000001
#define OVERLAY_EN 0x40000000
#define SCALE_EN 0x80000000
#define SCALER_HEIGHT_WIDTH (REG_BLOCK_1 + 0x0028)
#define SCALER_BUF0_OFFSET (REG_BLOCK_1 + 0x0034)
#define SCALER_BUF0_PITCH (REG_BLOCK_1 + 0x003c)
#define VIDEO_FORMAT (REG_BLOCK_1 + 0x0048)
#define SCALE_IN_VYUY422 0x000b0000
#define BUF0_OFFSET (REG_BLOCK_1 + 0x0080)
#define BUF0_PITCH (REG_BLOCK_1 + 0x008c)
#define SCALER_COLOUR_CNTL (REG_BLOCK_1 + 0x0150)
#define SCALER_H_COEFF0 (REG_BLOCK_1 + 0x0154)
#define SCALER_H_COEFF1 (REG_BLOCK_1 + 0x0158)
#define SCALER_H_COEFF2 (REG_BLOCK_1 + 0x015c)
#define SCALER_H_COEFF3 (REG_BLOCK_1 + 0x0160)
#define SCALER_H_COEFF4 (REG_BLOCK_1 + 0x0164)
#define CRTC_H_SYNC_NEG 0x00200000
#define CRTC_V_SYNC_NEG 0x00200000
#define CRTC_DBL_SCAN_EN 0x00000001
#define CRTC_INTERLACE_EN 0x00000002
#define CRTC_HSYNC_DIS 0x00000004
#define CRTC_VSYNC_DIS 0x00000008
#define CRTC_CSYNC_EN 0x00000010
#define CRTC_PIX_BY_2_EN 0x00000020
#define CRTC_DISPLAY_DIS 0x00000040
#define CRTC_VGA_XOVERSCAN 0x00000080
#define CRTC_PIX_WIDTH 0x00000700
#define CRTC_PIX_WIDTH_4BPP 0x00000100
#define CRTC_PIX_WIDTH_8BPP 0x00000200
#define CRTC_PIX_WIDTH_15BPP 0x00000300
#define CRTC_PIX_WIDTH_16BPP 0x00000400
#define CRTC_PIX_WIDTH_24BPP 0x00000500
#define CRTC_PIX_WIDTH_32BPP 0x00000600
#define CRTC_BYTE_PIX_ORDER 0x00000800
#define CRTC_PIX_ORDER_MSN_LSN 0x00000000
#define CRTC_PIX_ORDER_LSN_MSN 0x00000800
#define CRTC_FIFO_LWM 0x000f0000
#define CRTC2_PIX_WIDTH 0x000e0000
#define CRTC_VGA_128KAP_PAGING 0x00100000
#define CRTC_VFC_SYNC_TRISTATE 0x00200000
#define CRTC2_EN 0x00200000
#define CRTC_LOCK_REGS 0x00400000
#define CRTC_SYNC_TRISTATE 0x00800000
#define CRTC_EXT_DISP_EN 0x01000000
#define CRTC_EN 0x02000000
#define CRTC_DISP_REQ_EN 0x04000000
#define CRTC_VGA_LINEAR 0x08000000
#define CRTC_VGA_TEXT_132 0x20000000
#define CRTC_CNT_EN 0x40000000
#define CRTC_CUR_B_TEST 0x80000000
#define CRTC_CRNT_VLINE 0x07f00000
#define CRTC_VBLANK 0x00000001
#define CRTC_PITCH 0xffc00000
#define DAC_8BIT_EN 0x00000100
#define MIX_NOT_DST 0x0000
#define MIX_0 0x0001
#define MIX_1 0x0002
#define MIX_DST 0x0003
#define MIX_NOT_SRC 0x0004
#define MIX_XOR 0x0005
#define MIX_XNOR 0x0006
#define MIX_SRC 0x0007
#define MIX_NAND 0x0008
#define MIX_NOT_SRC_OR_DST 0x0009
#define MIX_SRC_OR_NOT_DST 0x000a
#define MIX_OR 0x000b
#define MIX_AND 0x000c
#define MIX_SRC_AND_NOT_DST 0x000d
#define MIX_NOT_SRC_AND_DST 0x000e
#define MIX_NOR 0x000f
#define BUS_FIFO_ERR_ACK 0x00200000
#define BUS_HOST_ERR_ACK 0x00800000
#define BUS_EXT_REG_EN 0x08000000
#define GEN_OVR_OUTPUT_EN 0x20
#define HWCURSOR_ENABLE 0x80
#define GUI_ENGINE_ENABLE 0x100
#define DSP_XCLKS_PER_QW 0x00003fff
#define DSP_LOOP_LATENCY 0x000f0000
#define DSP_PRECISION 0x00700000
#define DSP_OFF 0x000007ff
#define DSP_ON 0x07ff0000
#define CLOCK_SEL 0x0f
#define CLOCK_DIV 0x30
#define CLOCK_DIV1 0x00
#define CLOCK_DIV2 0x10
#define CLOCK_DIV4 0x20
#define CLOCK_STROBE 0x40
#define PLL_WR_EN 0x02
#define PLL_ADDR 0xfc
#define PLL_MACRO_CNTL 0x01
#define PLL_REF_DIV 0x02
#define PLL_GEN_CNTL 0x03
#define PLL_MCLK_FB_DIV 0x04
#define PLL_VCLK_CNTL 0x05
#define PLL_VCLK_POST_DIV 0x06
#define PLL_VCLK0_FB_DIV 0x07
#define PLL_VCLK1_FB_DIV 0x08
#define PLL_VCLK2_FB_DIV 0x09
#define PLL_VCLK3_FB_DIV 0x0A
#define PLL_XCLK_CNTL 0x0B
#define PLL_TEST_CTRL 0x0E
#define PLL_TEST_COUNT 0x0F
#define PLL_PC_GAIN 0x07
#define PLL_VC_GAIN 0x18
#define PLL_DUTY_CYC 0xE0
#define PLL_MFB_TIMES_4_2B 0x08
#define PLL_VCLK0_XDIV 0x10
#define PLL_OVERRIDE 0x01
#define PLL_MCLK_RST 0x02
#define OSC_EN 0x04
#define EXT_CLK_EN 0x08
#define MCLK_SRC_SEL 0x70
#define EXT_CLK_CNTL 0x80
#define PLL_VCLK_SRC_SEL 0x03
#define PLL_VCLK_RESET 0x04
#define VCLK_INVERT 0x08
#define VCLK0_POST 0x03
#define VCLK1_POST 0x0C
#define VCLK2_POST 0x30
#define VCLK3_POST 0xC0
#define CTL_MEM_TRP 0x00000300
#define CTL_MEM_TRCD 0x00000C00
#define CTL_MEM_TCRD 0x00001000
#define CTL_MEM_TRAS 0x00070000
#define DST_X_LEFT_TO_RIGHT 1
#define DST_Y_TOP_TO_BOTTOM 2
#define DST_LAST_PEL 0x20
#define SRC_LINE_X_LEFT_TO_RIGHT 0x10
#define HOST_BYTE_ALIGN 1
#define DP_CHAIN_4BPP 0x8888
#define DP_CHAIN_7BPP 0xD2D2
#define DP_CHAIN_8BPP 0x8080
#define DP_CHAIN_8BPP_RGB 0x9292
#define DP_CHAIN_15BPP 0x4210
#define DP_CHAIN_16BPP 0x8410
#define DP_CHAIN_24BPP 0x8080
#define DP_CHAIN_32BPP 0x8080
#define DST_1BPP 0
#define DST_4BPP 1
#define DST_8BPP 2
#define DST_15BPP 3
#define DST_16BPP 4
#define DST_32BPP 6
#define SRC_1BPP 0
#define SRC_4BPP 0x100
#define SRC_8BPP 0x200
#define SRC_15BPP 0x300
#define SRC_16BPP 0x400
#define SRC_32BPP 0x600
#define HOST_1BPP 0
#define HOST_4BPP 0x10000
#define HOST_8BPP 0x20000
#define HOST_15BPP 0x30000
#define HOST_16BPP 0x40000
#define HOST_32BPP 0x60000
#define BYTE_ORDER_MSB_TO_LSB 0
#define BYTE_ORDER_LSB_TO_MSB 0x1000000
#define BKGD_SRC_BKGD_CLR 0
#define FRGD_SRC_FRGD_CLR 0x100
#define FRGD_SRC_BLIT 0x300
#define MONO_SRC_ONE 0
#define ENGINE_BUSY 1
#define LCD_REG_INDEX 0x0000003F
#define LCD_DISPLAY_DIS 0x00000100
#define LCD_SRC_SEL 0x00000200
#define CRTC2_DISPLAY_DIS 0x00000400
#define LCD_CONFIG_PANEL 0x00
#define LCD_GEN_CNTL 0x01
#define LCD_DSTN_CONTROL 0x02
#define LCD_HFB_PITCH_ADDR 0x03
#define LCD_HORZ_STRETCHING 0x04
#define LCD_VERT_STRETCHING 0x05
#define LCD_EXT_VERT_STRETCH 0x06
#define LCD_LT_GIO 0x07
#define LCD_POWER_MANAGEMENT 0x08
#define DONT_SHADOW_HEND 0x00004000
#define CRT_ON 0x00000001
#define LCD_ON 0x00000002
#define HORZ_DIVBY2_EN 0x00000004
#define LOCK_8DOT 0x00000010
#define DONT_SHADOW_VPAR 0x00000040
#define DIS_HOR_CRT_DIVBY2 0x00000400
#define MCLK_PM_EN 0x00010000
#define VCLK_DAC_PM_EN 0x00020000
#define CRTC_RW_SELECT 0x08000000
#define USE_SHADOWED_VEND 0x10000000
#define USE_SHADOWED_ROWCUR 0x20000000
#define SHADOW_EN 0x40000000
#define SHADOW_RW_EN 0x80000000
#define HORZ_STRETCH_BLEND 0x00000fff
#define HORZ_STRETCH_RATIO 0x0000ffff
#define HORZ_STRETCH_LOOP 0x00070000
#define HORZ_PANEL_SIZE 0x0ff00000
#define AUTO_HORZ_RATIO 0x20000000
#define HORZ_STRETCH_MODE 0x40000000
#define HORZ_STRETCH_EN 0x80000000
#define VERT_STRETCH_RATIO0 0x000003ff
#define VERT_STRETCH_RATIO1 0x000ffc00
#define VERT_STRETCH_RATIO2 0x3ff00000
#define VERT_STRETCH_USE0 0x40000000
#define VERT_STRETCH_EN 0x80000000
#define VERT_STRETCH_RATIO3 0x000003ff
#define FORCE_DAC_DATA 0x000000ff
#define FORCE_DAC_DATA_SEL 0x00000300
#define VERT_STRETCH_MODE 0x00000400
#define VERT_PANEL_SIZE 0x003ff800
#define AUTO_VERT_RATIO 0x00400000
#define USE_AUTO_FP_POS 0x00800000
#define USE_AUTO_LCD_VSYNC 0x01000000
#define AUTO_POWER_UP 0x00000008
#define POWER_BLON 0x02000000
#define STANDBY_NOW 0x10000000
#define SUSPEND_NOW 0x20000000
static inline uint8
Mach64_GetPLLReg(uint8 index)
{
OUTREG8(CLOCK_CNTL + 1, (index << 2) & PLL_ADDR);
return INREG8(CLOCK_CNTL + 2);
}
static inline void
Mach64_SetPLLReg(uint8 index, uint8 value)
{
OUTREG8(CLOCK_CNTL + 1, ((index << 2) & PLL_ADDR) | PLL_WR_EN);
OUTREG8(CLOCK_CNTL + 2, value);
}
static inline uint32
Mach64_GetLCDReg(int index)
{
OUTREG8(LCD_INDEX, index & LCD_REG_INDEX);
return INREG(LCD_DATA);
}
static inline void
Mach64_PutLCDReg(int index, uint32 value)
{
OUTREG8(LCD_INDEX, index & LCD_REG_INDEX);
OUTREG(LCD_DATA, value);
}
#endif