Example #1
0
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;
}
Example #2
0
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];
}
Example #4
0
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;
}