static int modeavailable(int mode) { struct vgainfo *info; ModeTiming *modetiming; ModeInfo *modeinfo; if (IS_IN_STANDARD_VGA_DRIVER(mode)) return __svgalib_vga_driverspecs.modeavailable(mode); info = &__svgalib_infotable[mode]; if (memory * 1024 < info->ydim * info->xbytes) return 0; modeinfo = __svgalib_createModeInfoStructureForSvgalibMode(mode); if(modeinfo->bitsPerPixel==24) { free(modeinfo); return 0; } modetiming = malloc(sizeof(ModeTiming)); if (__svgalib_getmodetiming(modetiming, modeinfo, cardspecs)) { free(modetiming); free(modeinfo); return 0; } free(modetiming); free(modeinfo); return SVGADRV; }
static int setmode(int mode, int prv_mode) { unsigned char *moderegs; ModeTiming *modetiming; ModeInfo *modeinfo; int i; if (!modeavailable(mode)) return 1; modeinfo = __svgalib_createModeInfoStructureForSvgalibMode(mode); modetiming = malloc(sizeof(ModeTiming)); if (__svgalib_getmodetiming(modetiming, modeinfo, cardspecs)) { free(modetiming); free(modeinfo); return 1; } moderegs = malloc(TOTAL_REGS); initializemode(moderegs, modetiming, modeinfo, mode); free(modetiming); __svgalib_setregs(moderegs); /* Set standard regs. */ setregs(moderegs, mode); /* Set extended regs. */ free(moderegs); free(modeinfo); return 0; }
static int vesa_modeavailable(int mode) { struct info *info; ModeTiming *modetiming; ModeInfo *modeinfo; if ((mode < G640x480x256 ) || mode == G720x348x2) return __svgalib_vga_driverspecs.modeavailable(mode); info = &__svgalib_infotable[mode]; modeinfo = __svgalib_createModeInfoStructureForSvgalibMode(mode); modetiming = malloc(sizeof(ModeTiming)); if (__svgalib_getmodetiming(modetiming, modeinfo, cardspecs)) { free(modetiming); free(modeinfo); return 0; } free(modetiming); free(modeinfo); return SVGALIB_VESA[mode]; }
static void ark_getmodeinfo(int mode, vga_modeinfo * modeinfo) { #ifdef SVGA_STYLE_320x200x256 if (IS_IN_STANDARD_VGA_DRIVER(mode)) && mode != G320x200x256) { #else if (IS_IN_STANDARD_VGA_DRIVER(mode)) { #endif __svgalib_vga_driverspecs.getmodeinfo(mode, modeinfo); return; } switch (modeinfo->colors) { case 16: /* 4-plane 16 color mode */ modeinfo->maxpixels = 65536 * 8; break; default: modeinfo->maxpixels = ark_memory * 1024 / modeinfo->bytesperpixel; break; } modeinfo->maxlogicalwidth = 4088; modeinfo->startaddressrange = 0x1fffff; modeinfo->haveblit = 0; modeinfo->flags &= ~HAVE_RWPAGE; modeinfo->flags |= CAPABLE_LINEAR; if ((__svgalib_inSR(0x12) & 0x03) != 0) modeinfo->flags |= IS_LINEAR | LINEAR_MODE; } /* Return non-zero if mode is available */ static int ark_modeavailable(int mode) { struct vgainfo *info; ModeInfo *modeinfo; ModeTiming *modetiming; #ifdef SVGA_STYLE_320x200x256 if (IS_IN_STANDARD_VGA_DRIVER(mode)) && mode != G320x200x256) #else if (IS_IN_STANDARD_VGA_DRIVER(mode)) #endif return __svgalib_vga_driverspecs.modeavailable(mode); /* Enough memory? */ info = &__svgalib_infotable[mode]; if (ark_memory * 1024 < info->ydim * info->xbytes) return 0; modeinfo = __svgalib_createModeInfoStructureForSvgalibMode(mode); modetiming = malloc(sizeof(ModeTiming)); if (__svgalib_getmodetiming(modetiming, modeinfo, cardspecs)) { free(modetiming); free(modeinfo); return 0; } free(modetiming); free(modeinfo); return SVGADRV; } static int ark_saveregs(unsigned char regs[]) { ark_unlock(); /* Save extended registers. */ regs[ARK_SR10] = __svgalib_inSR(0x10); regs[ARK_SR11] = __svgalib_inSR(0x11); regs[ARK_SR12] = __svgalib_inSR(0x12); regs[ARK_SR13] = __svgalib_inSR(0x13); regs[ARK_SR14] = __svgalib_inSR(0x14); regs[ARK_SR15] = __svgalib_inSR(0x15); regs[ARK_SR16] = __svgalib_inSR(0x16); regs[ARK_SR18] = __svgalib_inSR(0x18); regs[ARK_SR19] = __svgalib_inSR(0x19); regs[ARK_SR1C] = __svgalib_inSR(0x1C); regs[ARK_SR1D] = __svgalib_inSR(0x1D); regs[ARK_CR40] = __svgalib_inCR(0x40); regs[ARK_CR41] = __svgalib_inCR(0x41); regs[ARK_CR42] = __svgalib_inCR(0x42); regs[ARK_CR44] = __svgalib_inCR(0x44); regs[ARK_CR46] = __svgalib_inCR(0x46); regs[ARK_CR50] = __svgalib_inCR(0x50); port_in(0x3C8); regs[ARK_PELMASK] = port_in(0x3C6); dac_used->saveState(regs + ARK_DAC_OFFSET); return ARK_DAC_OFFSET - VGA_TOTAL_REGS + dac_used->stateSize; }