#include "GlobalData.h"
#include "generic.h"
#include <sys/ioctl.h>
static status_t doSetDisplayMode(display_mode *dm) {
ET6000DisplayMode mode;
mode.magic = ET6000_PRIVATE_DATA_MAGIC;
mode.mode = *dm;
mode.pciConfigSpace = si->pciConfigSpace;
return ioctl(fd, ET6000_SET_DISPLAY_MODE, &mode, sizeof(mode));
}
status_t SET_DISPLAY_MODE(display_mode *mode_to_set) {
display_mode bounds, target;
status_t result;
uint8 bpp;
target = bounds = *mode_to_set;
if (PROPOSE_DISPLAY_MODE(&target, &bounds, &bounds) != B_OK)
return B_ERROR;
result = doSetDisplayMode(&target);
if (result == B_OK) {
switch (target.space) {
case B_RGB24_LITTLE:
case B_RGB24_BIG:
bpp = 3;
break;
case B_RGB16_LITTLE:
case B_RGB16_BIG:
case B_RGB15_LITTLE:
case B_RGB15_BIG:
bpp = 2;
break;
default:
return B_BAD_VALUE;
}
si->fbc.bytes_per_row = target.virtual_width * bpp;
si->dm = target;
si->bytesPerPixel = bpp;
et6000aclInit(bpp);
}
return result;
}