1bdcaa8d0Smrg/* 2bdcaa8d0Smrg * includes 3bdcaa8d0Smrg */ 4bdcaa8d0Smrg 5bdcaa8d0Smrg#ifdef HAVE_CONFIG_H 6bdcaa8d0Smrg#include "config.h" 7bdcaa8d0Smrg#endif 8bdcaa8d0Smrg 9bdcaa8d0Smrg#include "rendition.h" 10bdcaa8d0Smrg#include "vtypes.h" 11bdcaa8d0Smrg#include "vramdac.h" 12bdcaa8d0Smrg 13bdcaa8d0Smrg#include "hwcursor.h" 14bdcaa8d0Smrg 15bdcaa8d0Smrg/* 16bdcaa8d0Smrg * defines 17bdcaa8d0Smrg */ 18bdcaa8d0Smrg 19bdcaa8d0Smrg#undef DEBUG 20bdcaa8d0Smrg 21bdcaa8d0Smrg/* use a 64x64 cursor, 32x32 otherwise */ 22bdcaa8d0Smrg/* note that V2K supports only 64x64 size */ 23bdcaa8d0Smrg#define BIGCURSOR 1 24bdcaa8d0Smrg 25bdcaa8d0Smrg/* 26bdcaa8d0Smrg * local function prototypes 27bdcaa8d0Smrg */ 28bdcaa8d0Smrg 29bdcaa8d0Smrgstatic Bool RENDITIONUseHWCursor(ScreenPtr pScreen, CursorPtr pCurs); 30bdcaa8d0Smrgstatic void RENDITIONSetCursorColors(ScrnInfoPtr pScreenInfo, int bg, int fg); 31bdcaa8d0Smrgstatic void RENDITIONSetCursorPosition(ScrnInfoPtr pScreenInfo, int x, int y); 32bdcaa8d0Smrgstatic void RENDITIONHideCursor(ScrnInfoPtr pScreenInfo); 33bdcaa8d0Smrgstatic void RENDITIONShowCursor(ScrnInfoPtr pScreenInfo); 34bdcaa8d0Smrgstatic void RENDITIONLoadCursorImage(ScrnInfoPtr pScreenInfo, unsigned char* src); 35bdcaa8d0Smrg 36bdcaa8d0Smrg 37bdcaa8d0Smrg/* 38bdcaa8d0Smrg * This is top-level initialization funtion 39bdcaa8d0Smrg */ 40bdcaa8d0Smrgvoid 41bdcaa8d0SmrgRenditionHWCursorPreInit (ScrnInfoPtr pScreenInfo) 42bdcaa8d0Smrg{ 43bdcaa8d0Smrg renditionPtr pRendition = RENDITIONPTR(pScreenInfo); 44bdcaa8d0Smrg 45bdcaa8d0Smrg#ifdef DEBUG 46bdcaa8d0Smrg ErrorF ("Rendition: Debug RenditionHWCursorPreInit called\n"); 47bdcaa8d0Smrg#endif 48bdcaa8d0Smrg 49bdcaa8d0Smrg pRendition->board.hwcursor_used = TRUE; 50bdcaa8d0Smrg if (pRendition->board.chip==V1000_DEVICE){ 51bdcaa8d0Smrg /* V1K uses special space on BT-485 RAMDAC */ 52bdcaa8d0Smrg pRendition->board.hwcursor_vmemsize = 0; 53bdcaa8d0Smrg pRendition->board.hwcursor_membase = 0 ; /* Not used on V1K */ 54bdcaa8d0Smrg } 55bdcaa8d0Smrg else{ 56bdcaa8d0Smrg pRendition->board.hwcursor_vmemsize = 64*64*2/8 /* 1024 bytes used */; 57bdcaa8d0Smrg pRendition->board.hwcursor_membase = (pRendition->board.fbOffset >> 10); 58bdcaa8d0Smrg /* Last but not least, update offset-adress */ 59bdcaa8d0Smrg pRendition->board.fbOffset += pRendition->board.hwcursor_vmemsize; 60bdcaa8d0Smrg } 61bdcaa8d0Smrg} 62bdcaa8d0Smrg 63bdcaa8d0Smrgvoid 64bdcaa8d0SmrgRenditionHWCursorRelease (ScrnInfoPtr pScreenInfo) 65bdcaa8d0Smrg{ 66bdcaa8d0Smrg renditionPtr pRendition = RENDITIONPTR(pScreenInfo); 67bdcaa8d0Smrg 68bdcaa8d0Smrg#ifdef DEBUG 69bdcaa8d0Smrg ErrorF ("Rendition: Debug RenditionHWCursorRelease called\n"); 70bdcaa8d0Smrg#endif 71bdcaa8d0Smrg 72bdcaa8d0Smrg xf86DestroyCursorInfoRec(pRendition->CursorInfoRec); 73bdcaa8d0Smrg pRendition->CursorInfoRec=NULL; 74bdcaa8d0Smrg} 75bdcaa8d0Smrg 76bdcaa8d0Smrg 77bdcaa8d0SmrgBool 78880c7e28SmrgRenditionHWCursorInit(ScreenPtr pScreen) 79bdcaa8d0Smrg{ 80880c7e28Smrg ScrnInfoPtr pScreenInfo = xf86ScreenToScrn(pScreen); 81bdcaa8d0Smrg renditionPtr pRendition = RENDITIONPTR(pScreenInfo); 82bdcaa8d0Smrg xf86CursorInfoPtr infoPtr; 83bdcaa8d0Smrg 84bdcaa8d0Smrg#ifdef DEBUG 85bdcaa8d0Smrg ErrorF ("Rendition: Debug RenditionHWCursorInit called\n"); 86bdcaa8d0Smrg#endif 87bdcaa8d0Smrg 88bdcaa8d0Smrg infoPtr = xf86CreateCursorInfoRec(); 89bdcaa8d0Smrg if(!infoPtr) return FALSE; 90bdcaa8d0Smrg 91bdcaa8d0Smrg pRendition->CursorInfoRec = infoPtr; 92bdcaa8d0Smrg 93bdcaa8d0Smrg#ifdef BIGCURSOR 94bdcaa8d0Smrg infoPtr->MaxWidth=64; 95bdcaa8d0Smrg infoPtr->MaxHeight=64; 96bdcaa8d0Smrg#else 97bdcaa8d0Smrg infoPtr->MaxWidth=32; 98bdcaa8d0Smrg infoPtr->MaxHeight=32; 99bdcaa8d0Smrg#endif 100bdcaa8d0Smrg 101bdcaa8d0Smrg infoPtr->Flags = HARDWARE_CURSOR_BIT_ORDER_MSBFIRST | 102bdcaa8d0Smrg HARDWARE_CURSOR_TRUECOLOR_AT_8BPP | 103bdcaa8d0Smrg HARDWARE_CURSOR_AND_SOURCE_WITH_MASK| 104bdcaa8d0Smrg HARDWARE_CURSOR_SOURCE_MASK_INTERLEAVE_8; 105bdcaa8d0Smrg 106bdcaa8d0Smrg 107bdcaa8d0Smrg infoPtr->SetCursorColors = RENDITIONSetCursorColors; 108bdcaa8d0Smrg infoPtr->SetCursorPosition = RENDITIONSetCursorPosition; 109bdcaa8d0Smrg infoPtr->LoadCursorImage = RENDITIONLoadCursorImage; 110bdcaa8d0Smrg infoPtr->HideCursor = RENDITIONHideCursor; 111bdcaa8d0Smrg infoPtr->ShowCursor = RENDITIONShowCursor; 112bdcaa8d0Smrg infoPtr->UseHWCursor = RENDITIONUseHWCursor; 113bdcaa8d0Smrg 114bdcaa8d0Smrg return xf86InitCursor(pScreen, infoPtr); 115bdcaa8d0Smrg} 116bdcaa8d0Smrg 117bdcaa8d0Smrg 118bdcaa8d0Smrg/* 119bdcaa8d0Smrg * local functions 120bdcaa8d0Smrg */ 121bdcaa8d0Smrg 122bdcaa8d0Smrgstatic Bool 123bdcaa8d0SmrgRENDITIONUseHWCursor(ScreenPtr pScreen, CursorPtr pCurs) 124bdcaa8d0Smrg{ 125bdcaa8d0Smrg#ifdef DEBUG 126bdcaa8d0Smrg ErrorF ("Rendition: Debug RENDITIONUseHWCursor called\n"); 127bdcaa8d0Smrg#endif 128bdcaa8d0Smrg 129bdcaa8d0Smrg /* have this return false for DoubleScan and Interlaced ? */ 130bdcaa8d0Smrg return TRUE; 131bdcaa8d0Smrg} 132bdcaa8d0Smrg 133bdcaa8d0Smrg 134bdcaa8d0Smrgstatic void 135bdcaa8d0SmrgRENDITIONShowCursor(ScrnInfoPtr pScreenInfo) 136bdcaa8d0Smrg{ 137bdcaa8d0Smrg /* renditionPtr pRendition = RENDITIONPTR(pScreenInfo); */ 138bdcaa8d0Smrg 139bdcaa8d0Smrg#ifdef DEBUG 140bdcaa8d0Smrg ErrorF( "RENDITION: ShowCursor called\n"); 141bdcaa8d0Smrg#endif 142bdcaa8d0Smrg 143bdcaa8d0Smrg /* enable cursor - X11 mode */ 144bdcaa8d0Smrg verite_enablecursor(pScreenInfo, VERITE_3COLORS, 145bdcaa8d0Smrg#ifdef BIGCURSOR 146bdcaa8d0Smrg VERITE_CURSOR64 147bdcaa8d0Smrg#else 148bdcaa8d0Smrg VERITE_CURSOR32 149bdcaa8d0Smrg#endif 150bdcaa8d0Smrg ); 151bdcaa8d0Smrg} 152bdcaa8d0Smrg 153bdcaa8d0Smrg 154bdcaa8d0Smrg 155bdcaa8d0Smrgstatic void 156bdcaa8d0SmrgRENDITIONHideCursor(ScrnInfoPtr pScreenInfo) 157bdcaa8d0Smrg{ 158bdcaa8d0Smrg#ifdef DEBUG 159bdcaa8d0Smrg ErrorF( "RENDITION: HideCursor called\n"); 160bdcaa8d0Smrg#endif 161bdcaa8d0Smrg 162bdcaa8d0Smrg /* Disable cursor */ 163bdcaa8d0Smrg verite_enablecursor(pScreenInfo, VERITE_NOCURSOR, 0); 164bdcaa8d0Smrg} 165bdcaa8d0Smrg 166bdcaa8d0Smrg 167bdcaa8d0Smrg 168bdcaa8d0Smrgstatic void 169bdcaa8d0SmrgRENDITIONSetCursorPosition(ScrnInfoPtr pScreenInfo, int x, int y) 170bdcaa8d0Smrg{ 171bdcaa8d0Smrg#ifdef DEBUG 172bdcaa8d0Smrg ErrorF( "RENDITION: SetCursorPosition(%d, %d) called\n", x, y); 173bdcaa8d0Smrg#endif 174bdcaa8d0Smrg 175bdcaa8d0Smrg verite_movecursor(pScreenInfo, x, y, 1 /* xorigin */, 1 /* yorigin */); 176bdcaa8d0Smrg} 177bdcaa8d0Smrg 178bdcaa8d0Smrg 179bdcaa8d0Smrg 180bdcaa8d0Smrgstatic void 181bdcaa8d0SmrgRENDITIONSetCursorColors(ScrnInfoPtr pScreenInfo, int bg, int fg) 182bdcaa8d0Smrg{ 183bdcaa8d0Smrg#ifdef DEBUG 184bdcaa8d0Smrg ErrorF( "RENDITION: SetCursorColors(%x, %x) called\n", fg, bg); 185bdcaa8d0Smrg#endif 186bdcaa8d0Smrg 187bdcaa8d0Smrg verite_setcursorcolor(pScreenInfo, bg, fg); 188bdcaa8d0Smrg} 189bdcaa8d0Smrg 190bdcaa8d0Smrg 191bdcaa8d0Smrg 192bdcaa8d0Smrgstatic void 193bdcaa8d0SmrgRENDITIONLoadCursorImage(ScrnInfoPtr pScreenInfo, unsigned char* src) 194bdcaa8d0Smrg{ 195bdcaa8d0Smrg#ifdef DEBUG 196bdcaa8d0Smrg ErrorF( "RENDITION: loadcursor called\n"); 197bdcaa8d0Smrg#endif 198bdcaa8d0Smrg verite_loadcursor(pScreenInfo, 199bdcaa8d0Smrg#ifdef BIGCURSOR 200bdcaa8d0Smrg VERITE_CURSOR64, 201bdcaa8d0Smrg#else 202bdcaa8d0Smrg VERITE_CURSOR32, 203bdcaa8d0Smrg#endif 204bdcaa8d0Smrg (vu8 *)src); 205bdcaa8d0Smrg} 206bdcaa8d0Smrg 207bdcaa8d0Smrg 208bdcaa8d0Smrg/* 209bdcaa8d0Smrg * end of file hwcursor.c 210bdcaa8d0Smrg */ 211