30,6 → 30,10 |
#define dac_reg (0x3c8) |
#define dac_val (0x3c9) |
|
#include <vesa.h> |
|
#define INIT_MODE 0x4101 |
|
/* --------------------------------------------------------------------- */ |
|
static struct fb_var_screeninfo vesafb_defined __initdata = { |
216,14 → 220,51 |
return 0; |
} |
|
extern VbeInfoBlock VbeInfo; |
extern int vbe_getifo(void); |
extern void vm86_init(void); |
|
int __init vesafb_init(void) |
{ |
ModeInfoBlock ModeInfo; |
int video_cmap_len; |
int i; |
|
vm86_init(); |
|
if (vbe_getinfo()) |
return -EIO; |
|
printk(KERN_INFO "VBE Extension Found.\n"); |
|
screen_info.lfb_base = vbe_getmodeinfo(&ModeInfo,INIT_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(INIT_MODE); |
|
vesafb_fix.smem_start = screen_info.lfb_base; |
vesafb_defined.bits_per_pixel = screen_info.lfb_depth; |
if (15 == vesafb_defined.bits_per_pixel) |
231,7 → 272,7 |
vesafb_defined.xres = screen_info.lfb_width; |
vesafb_defined.yres = screen_info.lfb_height; |
vesafb_fix.line_length = screen_info.lfb_linelength; |
vesafb_fix.smem_len = screen_info.lfb_size * 65536; |
vesafb_fix.smem_len = screen_info.lfb_size; |
vesafb_fix.visual = (vesafb_defined.bits_per_pixel == 8) ? |
FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_TRUECOLOR; |
|
285,6 → 326,7 |
for (i = pmi_base[3]/2; pmi_base[i] != 0xffff; i++) |
printk("%x ",pmi_base[i]); |
printk("\n"); |
|
if (pmi_base[i] != 0xffff) { |
/* |
* memory areas not supported (yet?) |