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