|
|
/*++
Copyright (c) 1993 Weitek Corporation
Module Name:
Bt485.h
Abstract:
This module contains the Bt485 specific DAC definitions for the Weitek P9 miniport device driver.
Environment:
Kernel mode
Revision History may be found at the end of this file.
--*/
//
// Define the relative offset of each of the Bt485 registers in the
// DACRegisters array found in the Device Extension.
//
typedef enum { RS_0, RS_1, RS_2, RS_3, RS_4, RS_5, RS_6, RS_7, RS_8, RS_9, RS_A, RS_B, RS_C, RS_D, RS_E, RS_F, NUM_DAC_REGS } DAC_REG_INDEX;
//
// The following definitions provide a readable means of referencing the
// Bt485 registers via their virtual addresses found in the
// HwDeviceExtension.
//
#define PAL_WR_ADDR_REG HwDeviceExtension->pDACRegs[RS_0]
#define PAL_DATA_REG HwDeviceExtension->pDACRegs[RS_1]
#define PIXEL_MSK_REG HwDeviceExtension->pDACRegs[RS_2]
#define PAL_RD_ADDR_REG HwDeviceExtension->pDACRegs[RS_3]
#define CURS_CLR_ADDR HwDeviceExtension->pDACRegs[RS_4]
#define CURS_CLR_DATA HwDeviceExtension->pDACRegs[RS_5]
#define CMD_REG_0 HwDeviceExtension->pDACRegs[RS_6]
#define CLR_RD_ADDR_REG HwDeviceExtension->pDACRegs[RS_7]
#define CMD_REG_1 HwDeviceExtension->pDACRegs[RS_8]
#define CMD_REG_2 HwDeviceExtension->pDACRegs[RS_9]
#define CMD_REG_3 HwDeviceExtension->pDACRegs[RS_A]
#define CURS_DATA_REG HwDeviceExtension->pDACRegs[RS_B]
#define CURS_X HwDeviceExtension->pDACRegs[RS_C]
#define CURS_X_HI HwDeviceExtension->pDACRegs[RS_D]
#define CURS_Y HwDeviceExtension->pDACRegs[RS_E]
#define CURS_Y_HI HwDeviceExtension->pDACRegs[RS_F]
//
// Bit definitions for CMD_REG_0.
//
#define ENB_CMD_REG_3 0x80
#define DIS_CMD_REG_3 0x00
#define MODE_8_BIT 0x02
//
// Bit definitions for CMD_REG_1.
//
#define PIX_PORT_24 0x60
#define PIX_PORT_8 0x40
#define PIX_PORT_16 0x30
#define PIX_PORT_32 0x10
//
// Bit definitions for CMD_REG_2.
//
#define SCLK_INV 0x40 // Bt489 - invert SCLK if in forbidden region
#define SCLK_NORM ~SCLK_INV
#define PORTSEL_MSKD 0x20
#define PCLK1_SEL 0x10
#define PCLK0_SEL ~PCLK1_SEL
#define CURS_ACTIVE 0x03
#define ENB_CURS 0x02
#define DIS_CURS ~CURS_ACTIVE
//
// Bit definitions for CMD_REG_3.
//
#define CUR_MODE_64 0x04
#define CUR_MODE_32 ~CUR_MODE_64
#define DAC_CLK_2X 0x08
#define DAC_CLK_2X_489 0x80 // per os2 driver code - undocumented for Bt489
#define CUR_REG_IND_MSK ~0x03
//
// Bit definitions for CMD_REG_4 on Bt489.
//
#define MUX_485_COMPAT (0x00<<4) // 485 compatible value - set at reset
#define CR4_MUX_81 (0x02<<4) // 489 8:1 mux mode (8 bpp)
#define CR4_MUX_41 (0x03<<4) // 489 4:1 mux mode (16 bpp)
#define CR4_MUX_21 (0x04<<4) // 489 2:1 mux mode (32 bpp)
#define CR4_MUX_24BPP (0x07<<4) // 489 24 bpp mux mode (24 bpp)
#define CR4_MUX_BITS (0x07<<4)
//
// Bit definitions for PAL_WR_ADDR to enable CMD_REG_3.
//
#define CMD_REG_3_ENB 0x01
#define CMD_REG_3_DIS 0x00
//
// Bit definitions for PAL_WR_ADDR to enable CMD_REG_4 on Bt489.
//
#define CMD_REG_4_ENB 0x02
#define CMD_REG_4_DIS 0x00
//
// Max clock frequency supported w/o clock doubling.
//
//
#define CLK_MAX_FREQ 6750
#define CLK489_MAX_FREQ 8500
//
// General purpose macros for accessing the DAC registers.
//
//
// Macros for accessing the palette registers.
//
extern VOID WriteDAC( PHW_DEVICE_EXTENSION HwDeviceExtension, ULONG ulIndex, UCHAR ucValue );
extern UCHAR ReadDAC( PHW_DEVICE_EXTENSION HwDeviceExtension, ULONG ulIndex );
#define RD_DAC(addr) \
ReadDAC(HwDeviceExtension, (ULONG) addr)
#define WR_DAC(addr, data) \
WriteDAC(HwDeviceExtension, (ULONG) addr, (UCHAR) (data))
#define PAL_WR_ADDR(data) \
WriteDAC(HwDeviceExtension, PAL_WR_ADDR_REG, (data))
#define PAL_WR_DATA(data) \
WriteDAC(HwDeviceExtension, PAL_DATA_REG, (data))
//
// Macros for accessing the command register 3.
//
#define WR_CMD_REG_3(data) \
WR_DAC(CMD_REG_0, RD_DAC(CMD_REG_0) | ENB_CMD_REG_3); \ PAL_WR_ADDR(CMD_REG_3_ENB); \ WR_DAC(CMD_REG_3, (data)); \ PAL_WR_ADDR(CMD_REG_3_DIS)
#define RD_CMD_REG_3(data) \
WR_DAC(CMD_REG_0, RD_DAC(CMD_REG_0) | ENB_CMD_REG_3); \ PAL_WR_ADDR(CMD_REG_3_ENB); \ data = RD_DAC(CMD_REG_3); \ PAL_WR_ADDR(CMD_REG_3_DIS)
//
// Macros for accessing the command register 4 on Bt489 DAC.
//
#define WR_CMD_REG_4(data) \
WR_DAC(CMD_REG_0, RD_DAC(CMD_REG_0) | ENB_CMD_REG_3); \ PAL_WR_ADDR(CMD_REG_4_ENB); \ WR_DAC(CMD_REG_3, (data)); \ PAL_WR_ADDR(CMD_REG_4_DIS)
#define RD_CMD_REG_4(data) \
WR_DAC(CMD_REG_0, RD_DAC(CMD_REG_0) | ENB_CMD_REG_3); \ PAL_WR_ADDR(CMD_REG_4_ENB); \ data = RD_DAC(CMD_REG_3); \ PAL_WR_ADDR(CMD_REG_4_DIS)
//
// Macros for accessing the hardware cursor registers.
//
#define WR_CURS_POS_X(pos) \
WR_DAC(CURS_X, (UCHAR) pos); \ WR_DAC(CURS_X_HI, (UCHAR) (pos >> 8))
#define WR_CURS_POS_Y(pos) \
WR_DAC(CURS_Y, (UCHAR) pos); \ WR_DAC(CURS_Y_HI, (UCHAR) (pos >> 8))
#define WR_CURS_DATA(data) \
WR_DAC(CURS_DATA_REG, (data))
#define CURS_IS_ON() \
(RD_DAC(CMD_REG_2) & CURS_ACTIVE)
#define CURS_ON() \
WR_DAC(CMD_REG_2, RD_DAC(CMD_REG_2) | ENB_CURS)
#define CURS_OFF() \
WR_DAC(CMD_REG_2, RD_DAC(CMD_REG_2) & DIS_CURS)
//
// Function Prototypes for the Bt485 DAC which are defined in BT485.C.
//
//
// Bt485 function prototypes.
//
VOID Bt485SetPalette( PHW_DEVICE_EXTENSION HwDeviceExtension, ULONG *pPal, ULONG StartIndex, ULONG Count );
VOID Bt485SetPointerPos( PHW_DEVICE_EXTENSION HwDeviceExtension, ULONG ptlX, ULONG ptlY );
VOID Bt485SetPointerShape( PHW_DEVICE_EXTENSION HwDeviceExtension, PUCHAR pHWCursorShape );
VOID Bt485PointerOn( PHW_DEVICE_EXTENSION HwDeviceExtension );
VOID Bt485PointerOff( PHW_DEVICE_EXTENSION HwDeviceExtension );
VOID Bt485ClearPalette( PHW_DEVICE_EXTENSION HwDeviceExtension );
BOOLEAN Bt485SetMode( PHW_DEVICE_EXTENSION HwDeviceExtension );
VOID Bt485RestoreMode( PHW_DEVICE_EXTENSION HwDeviceExtension );
VOID Bt485SetClkDoubler( PHW_DEVICE_EXTENSION HwDeviceExtension );
VOID Bt485ClrClkDoubler( PHW_DEVICE_EXTENSION HwDeviceExtension );
//
// Function Prototypes for the Bt489 DAC which are defined in P91BT489.C.
//
//
// Bt489 function prototypes.
//
VOID Bt489SetPalette( PHW_DEVICE_EXTENSION HwDeviceExtension, ULONG *pPal, ULONG StartIndex, ULONG Count );
VOID Bt489SetPointerPos( PHW_DEVICE_EXTENSION HwDeviceExtension, ULONG ptlX, ULONG ptlY );
VOID Bt489SetPointerShape( PHW_DEVICE_EXTENSION HwDeviceExtension, PUCHAR pHWCursorShape );
VOID Bt489PointerOn( PHW_DEVICE_EXTENSION HwDeviceExtension );
VOID Bt489PointerOff( PHW_DEVICE_EXTENSION HwDeviceExtension );
VOID Bt489ClearPalette( PHW_DEVICE_EXTENSION HwDeviceExtension );
BOOLEAN Bt489SetMode( PHW_DEVICE_EXTENSION HwDeviceExtension );
VOID Bt489RestoreMode( PHW_DEVICE_EXTENSION HwDeviceExtension );
VOID Bt489SetClkDoubler( PHW_DEVICE_EXTENSION HwDeviceExtension );
VOID Bt489ClrClkDoubler( PHW_DEVICE_EXTENSION HwDeviceExtension );
|