static int bochs_video_stop()
{
    bochs_map_video(0);
    vbe_write(VBE_DISPI_INDEX_ENABLE, VBE_DISPI_DISABLED);
    video_drv_basic_vga_set_text_mode();
    return 0;
}
Exemplo n.º 2
0
static int bochs_set_par(struct fb_info *info) {
	info->screen_size = info->var.xres * info->var.yres
			* (info->var.bits_per_pixel / 8);
	vbe_write(VBE_DISPI_INDEX_ENABLE, VBE_DISPI_DISABLED);
	vbe_write(VBE_DISPI_INDEX_XRES, info->var.xres);
	vbe_write(VBE_DISPI_INDEX_YRES, info->var.yres);
	vbe_write(VBE_DISPI_INDEX_BPP, info->var.bits_per_pixel);
	vbe_write(VBE_DISPI_INDEX_VIRT_WIDTH, info->var.xres_virtual);
	vbe_write(VBE_DISPI_INDEX_VIRT_HEIGHT, info->var.yres_virtual);
	vbe_write(VBE_DISPI_INDEX_X_OFFSET, info->var.xoffset);
	vbe_write(VBE_DISPI_INDEX_Y_OFFSET, info->var.yoffset);
	vbe_write(VBE_DISPI_INDEX_ENABLE, VBE_DISPI_ENABLED | VBE_DISPI_LFB_ENABLED);

	return 0;
}
Exemplo n.º 3
0
static int bochs_set_var(struct fb_info *info, const struct fb_var_screeninfo *var) {

	if (var->xres > VBE_DISPI_MAX_XRES 
			|| var->yres > VBE_DISPI_MAX_YRES 
			|| var->bits_per_pixel > VBE_DISPI_MAX_BPP) {
		return -EINVAL;
	}

	vbe_write(VBE_DISPI_INDEX_ENABLE, VBE_DISPI_DISABLED);
	vbe_write(VBE_DISPI_INDEX_XRES, var->xres);
	vbe_write(VBE_DISPI_INDEX_YRES, var->yres);
	vbe_write(VBE_DISPI_INDEX_BPP, var->bits_per_pixel);
	vbe_write(VBE_DISPI_INDEX_VIRT_WIDTH, var->xres_virtual);
	vbe_write(VBE_DISPI_INDEX_VIRT_HEIGHT, var->yres_virtual);
	vbe_write(VBE_DISPI_INDEX_X_OFFSET, var->xoffset);
	vbe_write(VBE_DISPI_INDEX_Y_OFFSET, var->yoffset);
	vbe_write(VBE_DISPI_INDEX_ENABLE, VBE_DISPI_ENABLED | VBE_DISPI_LFB_ENABLED);

	return 0;
}
static int bochs_video_probe()
{
    //printf("Probing for ");
    vbe_write(VBE_DISPI_INDEX_ID, VBE_DISPI_ID2);
    int id = vbe_read(VBE_DISPI_INDEX_ID);

    if( id < VBE_DISPI_ID2 || id > VBE_DISPI_ID3 )
        return VIDEO_PROBE_FAIL;

    if( hal_alloc_vaddress((void **)&video_driver_bochs_vesa_emulator.screen, n_pages) )
        panic("Can't alloc vaddress for %d videmem pages", n_pages);

    SHOW_FLOW( 7, "vmem va 0x%X", video_driver_bochs_vesa_emulator.screen);


    printf("Bochs VBE emulator ver 0x%x found\n", id);
    return VIDEO_PROBE_SUCCESS;
}
// Return nonzero on err
int vbe_set(unsigned short xres, unsigned short yres, unsigned short bpp)
{
    vbe_write(VBE_DISPI_INDEX_ID, VBE_DISPI_ID2);
    int id = vbe_read(VBE_DISPI_INDEX_ID);

    printf("VBE ver 0x%x... ", id);
    //getchar();

    if( id < VBE_DISPI_ID2 || id > VBE_DISPI_ID3 )
        return 1;

    vbe_write(VBE_DISPI_INDEX_ENABLE, VBE_DISPI_DISABLED);
    vbe_write(VBE_DISPI_INDEX_XRES, xres);
    vbe_write(VBE_DISPI_INDEX_YRES, yres);
    vbe_write(VBE_DISPI_INDEX_BPP, bpp);
    vbe_write(VBE_DISPI_INDEX_ENABLE, VBE_DISPI_ENABLED | VBE_DISPI_LFB_ENABLED);

    return 0;
}