Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 478 → Rev 479

/shark/trunk/drivers/fb/vesafb.c
188,17 → 188,6
 
}
 
static struct fb_ops vesafb_ops = {
.owner = THIS_MODULE,
.fb_setcolreg = vesafb_setcolreg,
.fb_pan_display = vesafb_pan_display,
.fb_fillrect = cfb_fillrect,
.fb_copyarea = cfb_copyarea,
.fb_imageblit = cfb_imageblit,
.fb_cursor = soft_cursor,
.fb_release = vesafb_release,
};
 
int __init vesafb_setup(char *options)
{
char *this_opt;
233,6 → 222,116
extern int vbe_getifo(void);
extern void vm86_init(void);
 
static int vesafb_set_par(struct fb_info *info)
{
 
ModeInfoBlock ModeInfo;
int wx,wy,bpp,mode;
int video_cmap_len;
 
wx = info->var.xres;
wy = info->var.yres;
bpp = info->var.bits_per_pixel;
mode = vbe_modenum(wx,wy,bpp);
if (mode == -1) return -1;
screen_info.lfb_base = vbe_getmodeinfo(&ModeInfo,mode);
screen_info.orig_video_isVGA = VIDEO_TYPE_VLFB;
if (screen_info.orig_video_isVGA != VIDEO_TYPE_VLFB)
return -ENXIO;
screen_info.lfb_depth = ModeInfo.BitsPerPixel;
screen_info.lfb_width = ModeInfo.XResolution;
screen_info.lfb_height = ModeInfo.YResolution;
screen_info.lfb_linelength = ModeInfo.BytesPerScanLine;
screen_info.lfb_size = VbeInfo.TotalMemory;
screen_info.pages = ModeInfo.NumberOfImagePages;
screen_info.vesapm_seg = 0;
screen_info.vesapm_off = 0;
screen_info.red_pos = ModeInfo.RedFieldPosition;
screen_info.red_size = ModeInfo.RedMaskSize;
screen_info.green_pos = ModeInfo.GreenFieldPosition;
screen_info.green_size = ModeInfo.GreenMaskSize;
screen_info.blue_pos = ModeInfo.BlueFieldPosition;
screen_info.blue_size = ModeInfo.BlueMaskSize;
screen_info.rsvd_pos = ModeInfo.RsvdFieldPosition;
screen_info.rsvd_size = ModeInfo.RsvdMaskSize;
vbe_setmode(mode);
 
info->fix.smem_start = screen_info.lfb_base;
info->var.bits_per_pixel = screen_info.lfb_depth;
if (15 == info->var.bits_per_pixel)
info->var.bits_per_pixel = 16;
info->var.xres = screen_info.lfb_width;
info->var.yres = screen_info.lfb_height;
info->fix.line_length = screen_info.lfb_linelength;
info->fix.smem_len = screen_info.lfb_size;
info->fix.visual = (info->var.bits_per_pixel == 8) ?
FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_TRUECOLOR;
 
/* limit framebuffer size to 16 MB. Otherwise we'll eat tons of
* kernel address space for nothing if the gfx card has alot of
* memory (>= 128 MB isn't uncommon these days ...) */
if (info->fix.smem_len > 16 * 1024 * 1024)
info->fix.smem_len = 16 * 1024 * 1024;
 
/* some dummy values for timing to make fbset happy */
info->var.pixclock = 10000000 / info->var.xres * 1000 / info->var.yres;
info->var.left_margin = (info->var.xres / 8) & 0xf8;
info->var.hsync_len = (info->var.xres / 8) & 0xf8;
if (info->var.bits_per_pixel > 8) {
info->var.red.offset = screen_info.red_pos;
info->var.red.length = screen_info.red_size;
info->var.green.offset = screen_info.green_pos;
info->var.green.length = screen_info.green_size;
info->var.blue.offset = screen_info.blue_pos;
info->var.blue.length = screen_info.blue_size;
info->var.transp.offset = screen_info.rsvd_pos;
info->var.transp.length = screen_info.rsvd_size;
video_cmap_len = 16;
} else {
info->var.red.length = 6;
info->var.green.length = 6;
info->var.blue.length = 6;
video_cmap_len = 256;
}
 
info->fix.ypanstep = ypan ? 1 : 0;
info->fix.ywrapstep = (ypan>1) ? 1 : 0;
return 0;
 
}
 
static int vesafb_check_var(struct fb_var_screeninfo *var,
struct fb_info *info)
{
 
return 0;
 
}
 
static struct fb_ops vesafb_ops = {
.owner = THIS_MODULE,
.fb_setcolreg = vesafb_setcolreg,
.fb_pan_display = vesafb_pan_display,
.fb_set_par = vesafb_set_par,
.fb_check_var = vesafb_check_var,
.fb_fillrect = cfb_fillrect,
.fb_copyarea = cfb_copyarea,
.fb_imageblit = cfb_imageblit,
.fb_cursor = soft_cursor,
.fb_release = vesafb_release,
};
 
 
int __init vesafb_init(void)
{
ModeInfoBlock ModeInfo;