IBM561ramdac.c revision 7706df26
17706df26Smrg/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/tga/IBM561ramdac.c,v 1.3 2001/02/15 11:03:58 alanh Exp $ */ 27706df26Smrg 37706df26Smrg#ifdef HAVE_CONFIG_H 47706df26Smrg#include "config.h" 57706df26Smrg#endif 67706df26Smrg 77706df26Smrg#include "xf86.h" 87706df26Smrg#include "xf86_OSproc.h" 97706df26Smrg 107706df26Smrg#include "xf86PciInfo.h" 117706df26Smrg#include "xf86Pci.h" 127706df26Smrg 137706df26Smrg#include "tga_regs.h" 147706df26Smrg#include "tga.h" 157706df26Smrg 167706df26Smrg/* 177706df26Smrg * useful defines for managing the IBM561 on the 24-plane TGA2s 187706df26Smrg */ 197706df26Smrg 207706df26Smrg#define IBM561_HEAD_MASK 0x01 217706df26Smrg#define IBM561_READ 0x02 227706df26Smrg#define IBM561_WRITE 0x00 237706df26Smrg 247706df26Smrg#define RAMDAC_ONE_BYTE 0x0E000 257706df26Smrg#define RAMDAC_TWO_BYTES 0x0c000 267706df26Smrg#define RAMDAC_THREE_BYTES 0x08000 277706df26Smrg#define RAMDAC_FOUR_BYTES 0x00000 287706df26Smrg 297706df26Smrg#define IBM561_ADDR_LOW 0x0000 307706df26Smrg#define IBM561_ADDR_HIGH 0x0100 317706df26Smrg#define IBM561_CMD_REGS 0x0200 327706df26Smrg 337706df26Smrg#define IBM561_CMD_CURS_PIX 0x0200 347706df26Smrg#define IBM561_CMD_CURS_LUT 0x0300 357706df26Smrg#define IBM561_CMD_FB_WAT 0x0300 367706df26Smrg#define IBM561_CMD_AUXFB_WAT 0x0200 377706df26Smrg#define IBM561_CMD_OL_WAT 0x0300 387706df26Smrg#define IBM561_CMD_AUXOL_WAT 0x0200 397706df26Smrg#define IBM561_CMD_GAMMA 0x0300 407706df26Smrg#define IBM561_CMD_CMAP 0x0300 417706df26Smrg 427706df26Smrg#define IBM561_ADDR_EPSR_SHIFT 0 437706df26Smrg#define IBM561_ADDR_EPDR_SHIFT 8 447706df26Smrg 457706df26Smrg#define IBM561_CONFIG_REG_1 0x0001 467706df26Smrg#define IBM561_CONFIG_REG_2 0x0002 477706df26Smrg#define IBM561_CONFIG_REG_1 0x0001 487706df26Smrg#define IBM561_CONFIG_REG_2 0x0002 497706df26Smrg#define IBM561_CONFIG_REG_3 0x0003 507706df26Smrg#define IBM561_CONFIG_REG_4 0x0004 517706df26Smrg#define IBM561_WAT_SEG_REG 0x0006 527706df26Smrg#define IBM561_OL_SEG_REG 0x0007 537706df26Smrg#define IBM561_CHROMA_KEY_REG0 0x0010 547706df26Smrg#define IBM561_CHROMA_KEY_REG1 0x0011 557706df26Smrg#define IBM561_CHROMA_MASK_REG0 0x0012 567706df26Smrg#define IBM561_CHROMA_MASK_REG1 0x0013 577706df26Smrg#define IBM561_SYNC_CONTROL 0x0020 587706df26Smrg#define IBM561_PLL_VCO_DIV_REG 0x0021 597706df26Smrg#define IBM561_PLL_REF_REG 0x0022 607706df26Smrg#define IBM561_CURSOR_CTRL_REG 0x0030 617706df26Smrg#define IBM561_CURSOR_HS_REG 0x0034 627706df26Smrg#define IBM561_VRAM_MASK_REG 0x0050 637706df26Smrg#define IBM561_DAC_CTRL 0x005f 647706df26Smrg#define IBM561_DIV_DOT_CLK_REG 0x0082 657706df26Smrg 667706df26Smrg#define IBM561_READ_MASK 0x0205 677706df26Smrg#define IBM561_BLINK_MASK 0x0209 687706df26Smrg#define IBM561_FB_WINDOW_TYPE_TABLE 0x1000 697706df26Smrg#define IBM561_AUXFB_WINDOW_TYPE_TABLE 0x0E00 707706df26Smrg#define IBM561_OL_WINDOW_TYPE_TABLE 0x1400 717706df26Smrg#define IBM561_AUXOL_WINDOW_TYPE_TABLE 0x0F00 727706df26Smrg#define IBM561_RED_GAMMA_TABLE 0x3000 737706df26Smrg#define IBM561_GREEN_GAMMA_TABLE 0x3400 747706df26Smrg#define IBM561_BLUE_GAMMA_TABLE 0x3800 757706df26Smrg#define IBM561_COLOR_LOOKUP_TABLE 0x4000 767706df26Smrg#define IBM561_CURSOR_LOOKUP_TABLE 0x0a11 777706df26Smrg#define IBM561_CURSOR_BLINK_TABLE 0x0a15 787706df26Smrg#define IBM561_CROSS_LOOKUP_TABLE 0x0a19 797706df26Smrg#define IBM561_CROSS_BLINK_TABLE 0x0a1d 807706df26Smrg#define IBM561_CURSOR_PIXMAP 0x2000 817706df26Smrg#define IBM561_CURSOR_X_LOW 0x0036 827706df26Smrg#define IBM561_CURSOR_X_HIGH 0x0037 837706df26Smrg#define IBM561_CURSOR_Y_LOW 0x0038 847706df26Smrg#define IBM561_CURSOR_Y_HIGH 0x0039 857706df26Smrg 867706df26Smrg#define LO_ADDR (IBM561_ADDR_LOW | RAMDAC_ONE_BYTE) 877706df26Smrg#define HI_ADDR (IBM561_ADDR_HIGH | RAMDAC_ONE_BYTE) 887706df26Smrg 897706df26Smrg#define REGS_ADDR (IBM561_CMD_REGS | RAMDAC_ONE_BYTE) 907706df26Smrg#define FBWAT_ADDR (IBM561_CMD_FB_WAT | RAMDAC_ONE_BYTE) 917706df26Smrg#define AUXFBWAT_ADDR (IBM561_CMD_AUXFB_WAT | RAMDAC_ONE_BYTE) 927706df26Smrg#define OLWAT_ADDR (IBM561_CMD_OL_WAT | RAMDAC_ONE_BYTE) 937706df26Smrg#define AUXOLWAT_ADDR (IBM561_CMD_AUXOL_WAT | RAMDAC_ONE_BYTE) 947706df26Smrg#define CMAP_ADDR (IBM561_CMD_CMAP | RAMDAC_ONE_BYTE) 957706df26Smrg#define GAMMA_ADDR (IBM561_CMD_GAMMA | RAMDAC_ONE_BYTE) 967706df26Smrg 977706df26Smrg#define IBM561LoadAddr(reg) \ 987706df26Smrgdo { \ 997706df26Smrg TGA2_WRITE_RAMDAC_REG((reg), LO_ADDR); \ 1007706df26Smrg TGA2_WRITE_RAMDAC_REG((reg) >> 8, HI_ADDR); \ 1017706df26Smrg} while (0) 1027706df26Smrg 1037706df26Smrgunsigned char 1047706df26SmrgIBM561ReadReg(ScrnInfoPtr pScrn, CARD32 reg) 1057706df26Smrg{ 1067706df26Smrg TGAPtr pTga; 1077706df26Smrg unsigned char ret; 1087706df26Smrg 1097706df26Smrg pTga = TGAPTR(pScrn); 1107706df26Smrg 1117706df26Smrg TGA2_WRITE_RAMDAC_REG(reg, LO_ADDR); 1127706df26Smrg TGA2_WRITE_RAMDAC_REG(reg >> 8, HI_ADDR); 1137706df26Smrg 1147706df26Smrg ret = TGA2_READ_RAMDAC_REG(REGS_ADDR); 1157706df26Smrg 1167706df26Smrg#if 1 1177706df26Smrg xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "IBM561ReadReg: reg 0x%lx data 0x%x\n", 1187706df26Smrg (unsigned long)reg, ret); 1197706df26Smrg#endif 1207706df26Smrg return (ret); 1217706df26Smrg} 1227706df26Smrg 1237706df26Smrgvoid 1247706df26SmrgIBM561WriteReg(ScrnInfoPtr pScrn, CARD32 reg, 1257706df26Smrg#if 0 1267706df26Smrg unsigned char mask, unsigned char data) 1277706df26Smrg#else 1287706df26Smrg unsigned char data) 1297706df26Smrg#endif 1307706df26Smrg{ 1317706df26Smrg TGAPtr pTga; 1327706df26Smrg unsigned char tmp = 0x00; 1337706df26Smrg 1347706df26Smrg pTga = TGAPTR(pScrn); 1357706df26Smrg 1367706df26Smrg#if 0 1377706df26Smrg if (mask != 0x00) { 1387706df26Smrg TGA2_WRITE_RAMDAC_REG(reg, LO_ADDR); 1397706df26Smrg TGA2_WRITE_RAMDAC_REG(reg >> 8, HI_ADDR); 1407706df26Smrg tmp = TGA2_READ_RAMDAC_REG(REGS_ADDR) & mask; 1417706df26Smrg } 1427706df26Smrg#endif 1437706df26Smrg 1447706df26Smrg#if 1 1457706df26Smrg xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "IBM561WriteReg: reg 0x%lx data 0x%x\n", 1467706df26Smrg (unsigned long)reg, tmp | data); 1477706df26Smrg#endif 1487706df26Smrg 1497706df26Smrg TGA2_WRITE_RAMDAC_REG(reg, LO_ADDR); 1507706df26Smrg TGA2_WRITE_RAMDAC_REG(reg >> 8, HI_ADDR); 1517706df26Smrg TGA2_WRITE_RAMDAC_REG ((tmp | data), REGS_ADDR); 1527706df26Smrg} 1537706df26Smrg 1547706df26Smrgvoid 1557706df26SmrgIBM561ramdacSave(ScrnInfoPtr pScrn, unsigned char *Ibm561) 1567706df26Smrg{ 1577706df26Smrg#if 0 1587706df26Smrg TGAPtr pTga = TGAPTR(pScrn); 1597706df26Smrg int i, j; 1607706df26Smrg 1617706df26Smrg /* ?? FIXME OR NOT this is from BT463ramdacSave ?? */ 1627706df26Smrg Ibm561[0] = IBM561_READ(pTga, IBM561_REG_ACC, IBM561_CMD_REG_0); 1637706df26Smrg Ibm561[1] = IBM561_READ(pTga, IBM561_REG_ACC, IBM561_CMD_REG_1); 1647706df26Smrg Ibm561[2] = IBM561_READ(pTga, IBM561_REG_ACC, IBM561_CMD_REG_2); 1657706df26Smrg 1667706df26Smrg Ibm561[3] = IBM561_READ(pTga, IBM561_REG_ACC, IBM561_READ_MASK_0); 1677706df26Smrg Ibm561[4] = IBM561_READ(pTga, IBM561_REG_ACC, IBM561_READ_MASK_1); 1687706df26Smrg Ibm561[5] = IBM561_READ(pTga, IBM561_REG_ACC, IBM561_READ_MASK_2); 1697706df26Smrg Ibm561[6] = IBM561_READ(pTga, IBM561_REG_ACC, IBM561_READ_MASK_3); 1707706df26Smrg 1717706df26Smrg Ibm561[7] = IBM561_READ(pTga, IBM561_REG_ACC, IBM561_BLINK_MASK_0); 1727706df26Smrg Ibm561[8] = IBM561_READ(pTga, IBM561_REG_ACC, IBM561_BLINK_MASK_1); 1737706df26Smrg Ibm561[9] = IBM561_READ(pTga, IBM561_REG_ACC, IBM561_BLINK_MASK_2); 1747706df26Smrg Ibm561[10] = IBM561_READ(pTga, IBM561_REG_ACC, IBM561_BLINK_MASK_3); 1757706df26Smrg 1767706df26Smrg IBM561_LOAD_ADDR(IBM561_WINDOW_TYPE_BASE); 1777706df26Smrg TGA_WRITE_REG((IBM561_REG_ACC<<2)|0x2, TGA_RAMDAC_SETUP_REG); 1787706df26Smrg 1797706df26Smrg for (i = 0, j = 11; i < 16; i++) { 1807706df26Smrg Ibm561[j++] = (TGA_READ_REG(TGA_RAMDAC_REG)>>16)&0xff; 1817706df26Smrg Ibm561[j++] = (TGA_READ_REG(TGA_RAMDAC_REG)>>16)&0xff; 1827706df26Smrg Ibm561[j++] = (TGA_READ_REG(TGA_RAMDAC_REG)>>16)&0xff; 1837706df26Smrg } 1847706df26Smrg#endif 1857706df26Smrg 1867706df26Smrg/* 1877706df26Smrg fprintf(stderr, "IBM561ramdacSave (%p)\n", Ibm561); 1887706df26Smrg for (i=0; i<58; i++) 1897706df26Smrg fprintf(stderr, "%2d: 0x%02x\n", i, (unsigned)Ibm561[i]); 1907706df26Smrg*/ 1917706df26Smrg} 1927706df26Smrg 1937706df26Smrgstatic void 1947706df26SmrgIBM561WindowTagsInit(ScrnInfoPtr pScrn) 1957706df26Smrg{ 1967706df26Smrg TGAPtr pTga = TGAPTR(pScrn); 1977706df26Smrg unsigned char low, high; 1987706df26Smrg int i; 1997706df26Smrg 2007706df26Smrg/* 2017706df26Smrg tga.h defines fb_wid_cell_t as a structure containing two bytes, 2027706df26Smrg low and high in order. The 561 has 10 bit window tags so only 2037706df26Smrg part of the high byte is used (actually only 2 bits). Pixel C for 2047706df26Smrg 8-plane indexes uses 16bpp indexing per IBM's application notes 2057706df26Smrg which describe quad bufering. Note, this array is arranged as 2067706df26Smrg low byte followed by high byte which will apppear backwards 2077706df26Smrg relative to the 561 spec( a value of 0x01 in the high byte 2087706df26Smrg really represents a color table starting address of 256). 2097706df26Smrg ex (entry 4): 2107706df26Smrg {0x28, 0x01}, *4 8-plane index (PIXEL C 561 H/W screw-up) * 2117706df26Smrg low byte = 0x28 2127706df26Smrg high byte = 0x01 2137706df26Smrg wat entry = 0x0128 2147706df26Smrg 2157706df26Smrg from the spec: 8 in the low nibble selects buffer 1 2167706df26Smrg 2 in the next nibble selects pixformat of 16 bpp 2177706df26Smrg 1 in the next nibble indicates a start addr of 256 2187706df26Smrg*/ 2197706df26Smrgtypedef struct { 2207706df26Smrg unsigned char low_byte; 2217706df26Smrg unsigned char high_byte; 2227706df26Smrg}fb_wid_cell_t; 2237706df26Smrg 2247706df26Smrgtypedef struct { 2257706df26Smrg unsigned char aux_fbwat; 2267706df26Smrg} aux_fb_wid_cell_t; 2277706df26Smrg 2287706df26Smrgtypedef struct { 2297706df26Smrg unsigned char low_byte; 2307706df26Smrg unsigned char high_byte; 2317706df26Smrg} ol_wid_cell_t; 2327706df26Smrg 2337706df26Smrgtypedef struct { 2347706df26Smrg unsigned char aux_olwat; 2357706df26Smrg} aux_ol_wid_cell_t; 2367706df26Smrg 2377706df26Smrg/* 2387706df26Smrg * There are actually 256 window tag entries in the FB and OL WAT tables. 2397706df26Smrg * We will use only 16 for compatability with the BT463 and more importantly 2407706df26Smrg * to implement the virtual ramdac interface. This requires us to only 2417706df26Smrg * report the smallest WAT table size, in this case its the auxillary wat 2427706df26Smrg * tables which are 16 entries. 2437706df26Smrg */ 2447706df26Smrg 2457706df26Smrg#define TGA_RAMDAC_561_FB_WINDOW_TAG_COUNT 256 2467706df26Smrg#define TGA_RAMDAC_561_FB_WINDOW_TAG_MAX_COUNT 16 2477706df26Smrg#define TGA_RAMDAC_561_AUXFB_WINDOW_TAG_COUNT 16 2487706df26Smrg#define TGA_RAMDAC_561_OL_WINDOW_TAG_COUNT 256 2497706df26Smrg#define TGA_RAMDAC_561_OL_WINDOW_TAG_MAX_COUNT 16 2507706df26Smrg#define TGA_RAMDAC_561_AUXOL_WINDOW_TAG_COUNT 16 2517706df26Smrg#define TGA_RAMDAC_561_CMAP_ENTRY_COUNT 1024 2527706df26Smrg#define TGA_RAMDAC_561_GAM_ENTRY_COUNT 256 2537706df26Smrg 2547706df26Smrg static fb_wid_cell_t 2557706df26Smrg fb_wids_561[TGA_RAMDAC_561_FB_WINDOW_TAG_COUNT] = { 2567706df26Smrg#if 0 2577706df26Smrg {0x28, 0x00}, /*0 8-plane index (PIXEL C 561 H/W screw-up) */ 2587706df26Smrg#else 2597706df26Smrg {0x36, 0x00}, /*c 24-plane true */ 2607706df26Smrg#endif 2617706df26Smrg {0x08, 0x00}, /*1 8-plane index (PIXEL B) */ 2627706df26Smrg {0x00, 0x00}, /*2 8-plane index (PIXEL A) */ 2637706df26Smrg {0x34, 0x00}, /*3 24-plane direct, cmap 0 */ 2647706df26Smrg {0x28, 0x01}, /*4 8-plane index (PIXEL C 561 H/W screw-up) */ 2657706df26Smrg {0x08, 0x01}, /*5 8-plane index (PIXEL B) */ 2667706df26Smrg {0x00, 0x01}, /*6 8-plane index (PIXLE A) */ 2677706df26Smrg {0x34, 0x01}, /*7 24-plane direct, cmap 1 */ 2687706df26Smrg {0x1e, 0x00}, /*8 12-plane true */ 2697706df26Smrg /*{0x16, 0x00}, 9 12-plane true */ 2707706df26Smrg {0x14, 0x00}, /*9 12-plane true(direct) */ 2717706df26Smrg {0x1e, 0x01}, /*a 12-plane true */ 2727706df26Smrg {0x16, 0x01}, /*b 12-plane true */ 2737706df26Smrg {0x36, 0x00}, /*c 24-plane true */ 2747706df26Smrg {0x36, 0x00}, /*d 24-plane true */ 2757706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 2767706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 2777706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 2787706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 2797706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 2807706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 2817706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 2827706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 2837706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 2847706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 2857706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 2867706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 2877706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 2887706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 2897706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 2907706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 2917706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 2927706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 2937706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 2947706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 2957706df26Smrg {0,0},{0,0} 2967706df26Smrg }; 2977706df26Smrg 2987706df26Smrg static aux_fb_wid_cell_t 2997706df26Smrg auxfb_wids_561[TGA_RAMDAC_561_AUXFB_WINDOW_TAG_COUNT] = { 3007706df26Smrg {0x04}, /*0 GMA=bypass, XH=disable, PT=dc */ 3017706df26Smrg {0x04}, /*1 GMA=bypass, XH=disable, PT=dc */ 3027706df26Smrg {0x04}, /*2 GMA=bypass, XH=disable, PT=dc */ 3037706df26Smrg {0x04}, /*3 GMA=bypass, XH=disable, PT=dc */ 3047706df26Smrg {0x04}, /*4 GMA=bypass, XH=disable, PT=dc */ 3057706df26Smrg {0x04}, /*5 GMA=bypass, XH=disable, PT=dc */ 3067706df26Smrg {0x04}, /*6 GMA=bypass, XH=disable, PT=dc */ 3077706df26Smrg {0x04}, /*7 GMA=bypass, XH=disable, PT=dc */ 3087706df26Smrg {0x04}, /*8 GMA=bypass, XH=disable, PT=dc */ 3097706df26Smrg {0x04}, /*9 GMA=bypass, XH=disable, PT=dc */ 3107706df26Smrg {0x04}, /*a GMA=bypass, XH=disable, PT=dc */ 3117706df26Smrg {0x04}, /*b GMA=bypass, XH=disable, PT=dc */ 3127706df26Smrg {0x04}, /*c GMA=bypass, XH=disable, PT=dc */ 3137706df26Smrg {0x04}, /*d GMA=bypass, XH=disable, PT=dc */ 3147706df26Smrg {0x04}, /*e old cursor colors for 463 don't use*/ 3157706df26Smrg {0x04}, /*f old cursor colors for 463 don't use*/ 3167706df26Smrg }; 3177706df26Smrg 3187706df26Smrg static ol_wid_cell_t 3197706df26Smrg ol_wids_561[TGA_RAMDAC_561_OL_WINDOW_TAG_COUNT] = { 3207706df26Smrg {0x31, 0x02}, /*0 PX=4bpp, BS=0, MODE=index, TR=OPAQ */ 3217706df26Smrg {0x31, 0x02}, /*1 PX=4bpp, BS=0, MODE=index, TR=OPAQ */ 3227706df26Smrg {0x31, 0x02}, /*2 PX=4bpp, BS=0, MODE=index, TR=OPAQ */ 3237706df26Smrg {0x31, 0x02}, /*3 PX=4bpp, BS=0, MODE=index, TR=OPAQ */ 3247706df26Smrg {0x31, 0x02}, /*4 PX=4bpp, BS=0, MODE=index, TR=OPAQ */ 3257706df26Smrg {0x31, 0x02}, /*5 PX=4bpp, BS=0, MODE=index, TR=OPAQ */ 3267706df26Smrg {0x31, 0x02}, /*6 PX=4bpp, BS=0, MODE=index, TR=OPAQ */ 3277706df26Smrg {0x31, 0x02}, /*7 PX=4bpp, BS=0, MODE=index, TR=OPAQ */ 3287706df26Smrg {0x31, 0x02}, /*8 PX=4bpp, BS=0, MODE=index, TR=OPAQ */ 3297706df26Smrg {0x31, 0x02}, /*9 PX=4bpp, BS=0, MODE=index, TR=OPAQ */ 3307706df26Smrg {0x31, 0x02}, /*a PX=4bpp, BS=0, MODE=index, TR=OPAQ */ 3317706df26Smrg {0x31, 0x02}, /*b PX=4bpp, BS=0, MODE=index, TR=OPAQ */ 3327706df26Smrg {0x31, 0x02}, /*c PX=4bpp, BS=0, MODE=index, TR=OPAQ */ 3337706df26Smrg {0x31, 0x02}, /*d PX=4bpp, BS=0, MODE=index, TR=OPAQ */ 3347706df26Smrg {0x31, 0x02}, /*e PX=4bpp, BS=0, MODE=index, TR=OPAQ */ 3357706df26Smrg {0x31, 0x02}, /*f PX=4bpp, BS=0, MODE=index, TR=OPAQ */ 3367706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 3377706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 3387706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 3397706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 3407706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 3417706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 3427706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 3437706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 3447706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 3457706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 3467706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 3477706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 3487706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 3497706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 3507706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 3517706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 3527706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 3537706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 3547706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, 3557706df26Smrg {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0} 3567706df26Smrg }; 3577706df26Smrg 3587706df26Smrg static aux_ol_wid_cell_t 3597706df26Smrg auxol_wids_561[TGA_RAMDAC_561_AUXOL_WINDOW_TAG_COUNT] = { 3607706df26Smrg {0x0c}, /*0 CK/OT=dc, UL=disabled, OL=enabled, GB=bypass */ 3617706df26Smrg {0x0c}, /*1 CK/OT=dc, UL=disabled, OL=enabled, GB=bypass */ 3627706df26Smrg {0x0c}, /*2 CK/OT=dc, UL=disabled, OL=enabled, GB=bypass */ 3637706df26Smrg {0x0c}, /*3 CK/OT=dc, UL=disabled, OL=enabled, GB=use */ 3647706df26Smrg {0x0c}, /*4 CK/OT=dc, UL=disabled, OL=enabled, GB=bypass */ 3657706df26Smrg {0x0c}, /*5 CK/OT=dc, UL=disabled, OL=enabled, GB=bypass */ 3667706df26Smrg {0x0c}, /*6 CK/OT=dc, UL=disabled, OL=enabled, GB=bypass */ 3677706df26Smrg {0x0c}, /*7 CK/OT=dc, UL=disabled, OL=enabled, GB=use */ 3687706df26Smrg {0x0c}, /*8 CK/OT=dc, UL=disabled, OL=disabled, GB=use */ 3697706df26Smrg {0x0c}, /*9 CK/OT=dc, UL=disabled, OL=enabled, GB=use */ 3707706df26Smrg {0x0c}, /*a CK/OT=dc, UL=disabled, OL=enabled, GB=use */ 3717706df26Smrg {0x0c}, /*b CK/OT=dc, UL=disabled, OL=enabled, GB=use */ 3727706df26Smrg {0x0c}, /*c CK/OT=dc, UL=disabled, OL=enabled, GB=bypass */ 3737706df26Smrg {0x0c}, /*d CK/OT=dc, UL=disabled, OL=disabled, GB=bypass */ 3747706df26Smrg {0x0c}, /*e old cursor color for 463, don't use */ 3757706df26Smrg {0x0c}, /*f old cursor color for 463, don't use */ 3767706df26Smrg }; 3777706df26Smrg 3787706df26Smrg /* ibm561 so init the window tags's via interrupt. It must be 3797706df26Smrg * done either during the vsync interrupt or by blanking, We will 3807706df26Smrg * actually do both. ??????? 3817706df26Smrg */ 3827706df26Smrg 3837706df26Smrg IBM561LoadAddr(IBM561_FB_WINDOW_TYPE_TABLE); 3847706df26Smrg for ( i = 0; i < TGA_RAMDAC_561_FB_WINDOW_TAG_COUNT; i++ ) { 3857706df26Smrg low = ((fb_wids_561[i].low_byte & 0xfc) >> 2); 3867706df26Smrg high =((fb_wids_561[i].high_byte & 0x03) << 6) & 0xff; 3877706df26Smrg TGA2_WRITE_RAMDAC_REG (low | high, FBWAT_ADDR); 3887706df26Smrg 3897706df26Smrg low = (fb_wids_561[i].low_byte & 0x03) << 6; 3907706df26Smrg TGA2_WRITE_RAMDAC_REG (low, FBWAT_ADDR); 3917706df26Smrg } 3927706df26Smrg 3937706df26Smrg IBM561LoadAddr(IBM561_AUXFB_WINDOW_TYPE_TABLE); 3947706df26Smrg for ( i = 0; i < TGA_RAMDAC_561_AUXFB_WINDOW_TAG_COUNT; i++ ) { 3957706df26Smrg TGA2_WRITE_RAMDAC_REG (auxfb_wids_561[i].aux_fbwat, AUXFBWAT_ADDR); 3967706df26Smrg } 3977706df26Smrg 3987706df26Smrg 3997706df26Smrg IBM561LoadAddr(IBM561_OL_WINDOW_TYPE_TABLE); 4007706df26Smrg for ( i = 0; i < TGA_RAMDAC_561_OL_WINDOW_TAG_COUNT; i++ ) { 4017706df26Smrg low = ((ol_wids_561[i].low_byte & 0xfc) >> 2); 4027706df26Smrg high =((ol_wids_561[i].high_byte & 0x03) << 6) & 0xff; 4037706df26Smrg TGA2_WRITE_RAMDAC_REG (low | high, OLWAT_ADDR); 4047706df26Smrg 4057706df26Smrg low = (ol_wids_561[i].low_byte & 0x03) << 6; 4067706df26Smrg TGA2_WRITE_RAMDAC_REG (low, OLWAT_ADDR); 4077706df26Smrg } 4087706df26Smrg 4097706df26Smrg 4107706df26Smrg IBM561LoadAddr(IBM561_AUXOL_WINDOW_TYPE_TABLE); 4117706df26Smrg for ( i = 0; i < TGA_RAMDAC_561_AUXOL_WINDOW_TAG_COUNT; i++ ) { 4127706df26Smrg TGA2_WRITE_RAMDAC_REG (auxol_wids_561[i].aux_olwat, AUXOLWAT_ADDR); 4137706df26Smrg } 4147706df26Smrg} 4157706df26Smrg 4167706df26Smrg/* 4177706df26Smrg * ibm561_init_color_map 4187706df26Smrg * 4197706df26Smrg * Initialize color map in 561. Note the entire 4207706df26Smrg * color map is initialized, both the 8-bit and the 24-bit 4217706df26Smrg * portions. 4227706df26Smrg */ 4237706df26Smrgstatic int 4247706df26SmrgIBM561InitColormap(ScrnInfoPtr pScrn) 4257706df26Smrg{ 4267706df26Smrg TGAPtr pTga = TGAPTR(pScrn); 4277706df26Smrg#if 0 4287706df26Smrg tga_ibm561_info_t *bti = (tga_ibm561_info_t *) closure; 4297706df26Smrg tga_info_t *tgap = tga_softc[bti->unit]; 4307706df26Smrg#endif 4317706df26Smrg int i; 4327706df26Smrg 4337706df26Smrg TGA2_WRITE_RAMDAC_REG(IBM561_COLOR_LOOKUP_TABLE, LO_ADDR); 4347706df26Smrg TGA2_WRITE_RAMDAC_REG(IBM561_COLOR_LOOKUP_TABLE >> 8, HI_ADDR); 4357706df26Smrg 4367706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, CMAP_ADDR); 4377706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, CMAP_ADDR); 4387706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, CMAP_ADDR); 4397706df26Smrg 4407706df26Smrg for ( i = 1; i <256; i++ ) { 4417706df26Smrg TGA2_WRITE_RAMDAC_REG (i, CMAP_ADDR); 4427706df26Smrg TGA2_WRITE_RAMDAC_REG (i, CMAP_ADDR); 4437706df26Smrg TGA2_WRITE_RAMDAC_REG (i, CMAP_ADDR); 4447706df26Smrg } 4457706df26Smrg 4467706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, CMAP_ADDR); 4477706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, CMAP_ADDR); 4487706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, CMAP_ADDR); 4497706df26Smrg 4507706df26Smrg for ( i = 1; i <256; i++ ) { 4517706df26Smrg TGA2_WRITE_RAMDAC_REG (i, CMAP_ADDR); 4527706df26Smrg TGA2_WRITE_RAMDAC_REG (i, CMAP_ADDR); 4537706df26Smrg TGA2_WRITE_RAMDAC_REG (i, CMAP_ADDR); 4547706df26Smrg } 4557706df26Smrg 4567706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, CMAP_ADDR); 4577706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, CMAP_ADDR); 4587706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, CMAP_ADDR); 4597706df26Smrg 4607706df26Smrg for ( i = 1; i <256; i++ ) { 4617706df26Smrg TGA2_WRITE_RAMDAC_REG (i, CMAP_ADDR); 4627706df26Smrg TGA2_WRITE_RAMDAC_REG (i, CMAP_ADDR); 4637706df26Smrg TGA2_WRITE_RAMDAC_REG (i, CMAP_ADDR); 4647706df26Smrg } 4657706df26Smrg 4667706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, CMAP_ADDR); 4677706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, CMAP_ADDR); 4687706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, CMAP_ADDR); 4697706df26Smrg 4707706df26Smrg for ( i = 1; i <256; i++ ) { 4717706df26Smrg TGA2_WRITE_RAMDAC_REG (i, CMAP_ADDR); 4727706df26Smrg TGA2_WRITE_RAMDAC_REG (i, CMAP_ADDR); 4737706df26Smrg TGA2_WRITE_RAMDAC_REG (i, CMAP_ADDR); 4747706df26Smrg } 4757706df26Smrg 4767706df26Smrg /* 4777706df26Smrg * The ddx layer views the gamma table as an extension of the 4787706df26Smrg * color pallettes, therefore the gamma table is initialized here. 4797706df26Smrg * Note, each entry in the table is 10 bits, requiring two writes 4807706df26Smrg * per entry!! The table are initialized the same way as color tables, 4817706df26Smrg * a zero entry followed by mulitple ff's. NOTE, the gamma tables are 4827706df26Smrg * loaded in a strange manner, DO NOT use this code as a guide (we are 4837706df26Smrg * writing all zero's or all ones). See the tga_ibm561_load_color_map 4847706df26Smrg * _entry code above. 4857706df26Smrg */ 4867706df26Smrg 4877706df26Smrg TGA2_WRITE_RAMDAC_REG(IBM561_RED_GAMMA_TABLE, LO_ADDR); 4887706df26Smrg TGA2_WRITE_RAMDAC_REG(IBM561_RED_GAMMA_TABLE >> 8, HI_ADDR); 4897706df26Smrg 4907706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, GAMMA_ADDR); 4917706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, GAMMA_ADDR); 4927706df26Smrg 4937706df26Smrg for ( i = 1; i <256; i++ ) { 4947706df26Smrg TGA2_WRITE_RAMDAC_REG (0xff, GAMMA_ADDR); 4957706df26Smrg TGA2_WRITE_RAMDAC_REG (0xff, GAMMA_ADDR); 4967706df26Smrg } 4977706df26Smrg 4987706df26Smrg TGA2_WRITE_RAMDAC_REG(IBM561_GREEN_GAMMA_TABLE, LO_ADDR); 4997706df26Smrg TGA2_WRITE_RAMDAC_REG(IBM561_GREEN_GAMMA_TABLE >> 8, HI_ADDR); 5007706df26Smrg 5017706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, GAMMA_ADDR); 5027706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, GAMMA_ADDR); 5037706df26Smrg 5047706df26Smrg for ( i = 1; i <256; i++ ) { 5057706df26Smrg TGA2_WRITE_RAMDAC_REG (0xff, GAMMA_ADDR); 5067706df26Smrg TGA2_WRITE_RAMDAC_REG (0xff, GAMMA_ADDR); 5077706df26Smrg } 5087706df26Smrg 5097706df26Smrg TGA2_WRITE_RAMDAC_REG(IBM561_BLUE_GAMMA_TABLE, LO_ADDR); 5107706df26Smrg TGA2_WRITE_RAMDAC_REG(IBM561_BLUE_GAMMA_TABLE >> 8, HI_ADDR); 5117706df26Smrg 5127706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, GAMMA_ADDR); 5137706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, GAMMA_ADDR); 5147706df26Smrg 5157706df26Smrg for ( i = 1; i <256; i++ ) { 5167706df26Smrg TGA2_WRITE_RAMDAC_REG (0xff, GAMMA_ADDR); 5177706df26Smrg TGA2_WRITE_RAMDAC_REG (0xff, GAMMA_ADDR); 5187706df26Smrg } 5197706df26Smrg 5207706df26Smrg 5217706df26Smrg#if 0 5227706df26Smrg /* ?? no cursor support yet */ 5237706df26Smrg bti->cursor_fg.red = bti->cursor_fg.green = bti->cursor_fg.blue 5247706df26Smrg = 0xffff; 5257706df26Smrg bti->cursor_bg.red = bti->cursor_bg.green = bti->cursor_bg.blue 5267706df26Smrg = 0x0000; 5277706df26Smrg tga_ibm561_restore_cursor_color( closure, 0 ); 5287706df26Smrg#endif 5297706df26Smrg 5307706df26Smrg return 0; 5317706df26Smrg} 5327706df26Smrg 5337706df26Smrgvoid 5347706df26SmrgIBM561ramdacHWInit(ScrnInfoPtr pScrn) 5357706df26Smrg{ 5367706df26Smrg TGAPtr pTga = TGAPTR(pScrn); 5377706df26Smrg 5387706df26Smrg unsigned int temp1[6] = {0,0,0,0,0,0}; 5397706df26Smrg 5407706df26Smrg /* 5417706df26Smrg * Set-up av9110 to 14.3 Mhz as reference for 561's PLL 5427706df26Smrg */ 5437706df26Smrg temp1[0] = 0x00000101; 5447706df26Smrg temp1[1] = 0x01000000; 5457706df26Smrg temp1[2] = 0x00000001; 5467706df26Smrg temp1[3] = 0x00010000; 5477706df26Smrg temp1[4] = 0x01010100; 5487706df26Smrg temp1[5] = 0x01000000; 5497706df26Smrg 5507706df26Smrg write_av9110(pScrn, temp1); 5517706df26Smrg 5527706df26Smrg /* 5537706df26Smrg * Initialize IBM561 RAMDAC 5547706df26Smrg */ 5557706df26Smrg IBM561WriteReg(pScrn, IBM561_CONFIG_REG_1, 0x2a ); 5567706df26Smrg IBM561WriteReg(pScrn, IBM561_CONFIG_REG_3, 0x41 ); 5577706df26Smrg IBM561WriteReg(pScrn, IBM561_CONFIG_REG_4, 0x20 ); 5587706df26Smrg 5597706df26Smrg/* IBM561WriteReg(pScrn, IBM561_PLL_VCO_DIV_REG, 0xc8 ); */ 5607706df26Smrg IBM561WriteReg(pScrn, IBM561_PLL_VCO_DIV_REG, tga_c_table->ibm561_vco_div); 5617706df26Smrg 5627706df26Smrg/* IBM561WriteReg(pScrn, IBM561_PLL_REF_REG, 0x08 ); */ 5637706df26Smrg IBM561WriteReg(pScrn, IBM561_PLL_REF_REG, tga_c_table->ibm561_ref ); 5647706df26Smrg 5657706df26Smrg IBM561WriteReg(pScrn, IBM561_DIV_DOT_CLK_REG, 0xb0 ); 5667706df26Smrg 5677706df26Smrg IBM561WriteReg(pScrn, IBM561_SYNC_CONTROL, 0x01 ); 5687706df26Smrg 5697706df26Smrg IBM561WriteReg(pScrn, IBM561_CONFIG_REG_2, 0x19 ); 5707706df26Smrg 5717706df26Smrg TGA_WRITE_REG(0xFFFFFFFF, TGA_PLANEMASK_REG); 5727706df26Smrg 5737706df26Smrg /* Configure the RAMDAC, note registers not set either depend on the 5747706df26Smrg * previous setting (ie what firmaware programmed to be) or what the 5757706df26Smrg * X-server will set them to 5767706df26Smrg */ 5777706df26Smrg 5787706df26Smrg 5797706df26Smrg /* 5807706df26Smrg * Config Register 1: MUX=4:1 BASIC, OVLY=8 bits, WID=8 bits (bits 4-7 of the 5817706df26Smrg * overlay and window ID's are tied to ground in the hardware). 5827706df26Smrg */ 5837706df26Smrg IBM561WriteReg(pScrn, IBM561_CONFIG_REG_1, 0x2a ); 5847706df26Smrg 5857706df26Smrg /* SKIP Config Register 2-3 (use Diag settings at least for now) */ 5867706df26Smrg 5877706df26Smrg /* 5887706df26Smrg * Config Register 4: FB_WID=4 bits, SWE=Common, AOW=LSB, AFW=LSB 5897706df26Smrg */ 5907706df26Smrg IBM561WriteReg(pScrn, IBM561_CONFIG_REG_4, 0x20 ); 5917706df26Smrg 5927706df26Smrg /* 5937706df26Smrg * SKIP Interleave Register (use Diag settings at least for now) 5947706df26Smrg */ 5957706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, REGS_ADDR); 5967706df26Smrg 5977706df26Smrg /* 5987706df26Smrg * WAT/OL Segement Registers 5997706df26Smrg */ 6007706df26Smrg /* ?? we setup the address registers first, then stream the data out ?? */ 6017706df26Smrg TGA2_WRITE_RAMDAC_REG(IBM561_WAT_SEG_REG, LO_ADDR); 6027706df26Smrg TGA2_WRITE_RAMDAC_REG(IBM561_WAT_SEG_REG >> 8, HI_ADDR); 6037706df26Smrg 6047706df26Smrg /* WAT Segment Register */ 6057706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, REGS_ADDR); 6067706df26Smrg 6077706df26Smrg /* OL Segment Register */ 6087706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, REGS_ADDR); 6097706df26Smrg 6107706df26Smrg /* AUX WAT Segment Register */ 6117706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, REGS_ADDR); 6127706df26Smrg 6137706df26Smrg /* AUX OL Segment Register */ 6147706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, REGS_ADDR); 6157706df26Smrg 6167706df26Smrg /* 6177706df26Smrg * Chroma Key Registers and Masks 6187706df26Smrg */ 6197706df26Smrg /* ?? we setup the address registers first, then stream the data out ?? */ 6207706df26Smrg TGA2_WRITE_RAMDAC_REG(IBM561_CHROMA_KEY_REG0, LO_ADDR); 6217706df26Smrg TGA2_WRITE_RAMDAC_REG(IBM561_CHROMA_KEY_REG0 >> 8, HI_ADDR); 6227706df26Smrg 6237706df26Smrg /* Chroma key register 0 */ 6247706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, REGS_ADDR); 6257706df26Smrg 6267706df26Smrg /* Chroma key register 1 */ 6277706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, REGS_ADDR); 6287706df26Smrg 6297706df26Smrg /* Chroma key mask register 0 */ 6307706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, REGS_ADDR); 6317706df26Smrg 6327706df26Smrg /* Chroma key mask register 1 */ 6337706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, REGS_ADDR); 6347706df26Smrg 6357706df26Smrg /* 6367706df26Smrg * Cursor Control Register 6377706df26Smrg */ 6387706df26Smrg IBM561WriteReg(pScrn, IBM561_CURSOR_CTRL_REG, /*pScrn->cursor_on_off*/0); 6397706df26Smrg 6407706df26Smrg /* 6417706df26Smrg * Cursor Hot Spot X/Y Registers 6427706df26Smrg */ 6437706df26Smrg TGA2_WRITE_RAMDAC_REG(IBM561_CURSOR_HS_REG, LO_ADDR); 6447706df26Smrg TGA2_WRITE_RAMDAC_REG(IBM561_CURSOR_HS_REG >> 8, HI_ADDR); 6457706df26Smrg 6467706df26Smrg /* Cursor "x" Hot Spot Register */ 6477706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, REGS_ADDR); 6487706df26Smrg 6497706df26Smrg /* Cursor "y" Hot Spot Register */ 6507706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, REGS_ADDR); 6517706df26Smrg 6527706df26Smrg /* Cursor "x" Location Register (low byte) */ 6537706df26Smrg TGA2_WRITE_RAMDAC_REG (0xff, REGS_ADDR); 6547706df26Smrg 6557706df26Smrg /* Cursor "x" Location Register (high byte) */ 6567706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, REGS_ADDR); 6577706df26Smrg 6587706df26Smrg /* Cursor "y" Location Register (low byte) */ 6597706df26Smrg TGA2_WRITE_RAMDAC_REG (0xff, REGS_ADDR); 6607706df26Smrg 6617706df26Smrg /* Cursor "y" Location Register (high byte) */ 6627706df26Smrg TGA2_WRITE_RAMDAC_REG (0x00, REGS_ADDR); 6637706df26Smrg 6647706df26Smrg /* 6657706df26Smrg * VRAM Mask regs (used for diag purposes, reset them just in case) 6667706df26Smrg */ 6677706df26Smrg TGA2_WRITE_RAMDAC_REG(IBM561_VRAM_MASK_REG, LO_ADDR); 6687706df26Smrg TGA2_WRITE_RAMDAC_REG(IBM561_VRAM_MASK_REG >> 8, HI_ADDR); 6697706df26Smrg 6707706df26Smrg /* VRAM mask register 1 */ 6717706df26Smrg TGA2_WRITE_RAMDAC_REG (0xff, REGS_ADDR); 6727706df26Smrg 6737706df26Smrg /* VRAM mask register 2 */ 6747706df26Smrg TGA2_WRITE_RAMDAC_REG (0xff, REGS_ADDR); 6757706df26Smrg 6767706df26Smrg /* VRAM mask register 3 */ 6777706df26Smrg TGA2_WRITE_RAMDAC_REG (0xff, REGS_ADDR); 6787706df26Smrg 6797706df26Smrg /* VRAM mask register 4 */ 6807706df26Smrg TGA2_WRITE_RAMDAC_REG (0xff, REGS_ADDR); 6817706df26Smrg 6827706df26Smrg /* VRAM mask register 5 */ 6837706df26Smrg TGA2_WRITE_RAMDAC_REG (0xff, REGS_ADDR); 6847706df26Smrg 6857706df26Smrg /* VRAM mask register 6 */ 6867706df26Smrg TGA2_WRITE_RAMDAC_REG (0xff, REGS_ADDR); 6877706df26Smrg 6887706df26Smrg /* VRAM mask register 7 */ 6897706df26Smrg TGA2_WRITE_RAMDAC_REG (0xff, REGS_ADDR); 6907706df26Smrg 6917706df26Smrg /* Finally, do colormaps and windowtags */ 6927706df26Smrg IBM561InitColormap(pScrn); 6937706df26Smrg IBM561WindowTagsInit(pScrn); 6947706df26Smrg} 6957706df26Smrg 6967706df26Smrgvoid 6977706df26SmrgIBM561ramdacRestore(ScrnInfoPtr pScrn, unsigned char *Ibm561) 6987706df26Smrg{ 6997706df26Smrg#if 0 7007706df26Smrg TGAPtr pTga = TGAPTR(pScrn); 7017706df26Smrg#endif 7027706df26Smrg 7037706df26Smrg#if 0 7047706df26Smrg /* ?? finally the stock stuff ?? */ 7057706df26Smrg int i, j; 7067706df26Smrg /* ?? FIXME OR NOT this is currently copied from the BT463 */ 7077706df26Smrg IBM561_WRITE(IBM561_REG_ACC, IBM561_CMD_REG_0, Ibm561[0]); 7087706df26Smrg IBM561_WRITE(IBM561_REG_ACC, IBM561_CMD_REG_1, Ibm561[1]); 7097706df26Smrg IBM561_WRITE(IBM561_REG_ACC, IBM561_CMD_REG_2, Ibm561[2]); 7107706df26Smrg 7117706df26Smrg IBM561_WRITE(IBM561_REG_ACC, IBM561_READ_MASK_0, Ibm561[3]); 7127706df26Smrg IBM561_WRITE(IBM561_REG_ACC, IBM561_READ_MASK_1, Ibm561[4]); 7137706df26Smrg IBM561_WRITE(IBM561_REG_ACC, IBM561_READ_MASK_2, Ibm561[5]); 7147706df26Smrg IBM561_WRITE(IBM561_REG_ACC, IBM561_READ_MASK_3, Ibm561[6]); 7157706df26Smrg 7167706df26Smrg IBM561_WRITE(IBM561_REG_ACC, IBM561_BLINK_MASK_0, Ibm561[7]); 7177706df26Smrg IBM561_WRITE(IBM561_REG_ACC, IBM561_BLINK_MASK_1, Ibm561[8]); 7187706df26Smrg IBM561_WRITE(IBM561_REG_ACC, IBM561_BLINK_MASK_2, Ibm561[9]); 7197706df26Smrg IBM561_WRITE(IBM561_REG_ACC, IBM561_BLINK_MASK_3, Ibm561[10]); 7207706df26Smrg 7217706df26Smrg IBM561_LOAD_ADDR(IBM561_WINDOW_TYPE_BASE); 7227706df26Smrg TGA_WRITE_REG((IBM561_REG_ACC<<2), TGA_RAMDAC_SETUP_REG); 7237706df26Smrg 7247706df26Smrg for (i = 0, j = 11; i < 16; i++) { 7257706df26Smrg TGA_WRITE_REG(Ibm561[j++]|(IBM561_REG_ACC<<10), TGA_RAMDAC_REG); 7267706df26Smrg TGA_WRITE_REG(Ibm561[j++]|(IBM561_REG_ACC<<10), TGA_RAMDAC_REG); 7277706df26Smrg TGA_WRITE_REG(Ibm561[j++]|(IBM561_REG_ACC<<10), TGA_RAMDAC_REG); 7287706df26Smrg } 7297706df26Smrg#endif 7307706df26Smrg 7317706df26Smrg/* 7327706df26Smrg fprintf(stderr, "IBM561ramdacRestore (%p)\n", Ibm561); 7337706df26Smrg for (i=0; i<58; i++) 7347706df26Smrg fprintf(stderr, "%2d: 0x%02x\n", i, (unsigned)Ibm561[i]); 7357706df26Smrg*/ 7367706df26Smrg 7377706df26Smrg} 7387706df26Smrg 739