1/*****************************************************************************\ 2 * Tseng Labs ET6000, ET6100 and ET6300 graphics driver for BeOS 5. 3 * Copyright (c) 2003-2004, Evgeniy Vladimirovich Bobkov. 4\*****************************************************************************/ 5 6#include "GlobalData.h" 7#include "generic.h" 8#include <sys/ioctl.h> 9 10 11/*****************************************************************************/ 12/* 13 * The code to actually configure the display. 14 */ 15static status_t doSetDisplayMode(display_mode *dm) { 16ET6000DisplayMode mode; 17 18 mode.magic = ET6000_PRIVATE_DATA_MAGIC; 19 mode.mode = *dm; 20 mode.pciConfigSpace = si->pciConfigSpace; 21 22 return ioctl(fd, ET6000_SET_DISPLAY_MODE, &mode, sizeof(mode)); 23} 24/*****************************************************************************/ 25/* 26 * The exported mode setting routine. First validate the mode, 27 * then call our private routine to hammer the registers. 28 */ 29status_t SET_DISPLAY_MODE(display_mode *mode_to_set) { 30display_mode bounds, target; 31status_t result; 32uint8 bpp; 33 34 /* ask for the specific mode */ 35 target = bounds = *mode_to_set; 36 if (PROPOSE_DISPLAY_MODE(&target, &bounds, &bounds) != B_OK) /* ==B_ERROR???/// */ 37 return B_ERROR; 38 39 result = doSetDisplayMode(&target); 40 41 if (result == B_OK) { 42 switch (target.space) { 43 case B_RGB24_LITTLE: 44 case B_RGB24_BIG: 45 bpp = 3; 46 break; 47 case B_RGB16_LITTLE: 48 case B_RGB16_BIG: 49 case B_RGB15_LITTLE: 50 case B_RGB15_BIG: 51 bpp = 2; 52 break; 53 default: 54 return B_BAD_VALUE; 55 } 56 si->fbc.bytes_per_row = target.virtual_width * bpp; 57 si->dm = target; 58 si->bytesPerPixel = bpp; 59 et6000aclInit(bpp); 60 } 61 62 return result; 63} 64/*****************************************************************************/ 65