Subversion Repositories shark

Compare Revisions

Regard whitespace Rev 160 → Rev 161

/shark/trunk/drivers/svga/vesa.c
42,41 → 42,6
 
static int SVGALIB_VESA[__GLASTMODE+1];
 
char VideoModeNames [96][40] = {
"100 - 640x400 256 colors", "101 - 640x480 256 colors", "102 - 800x600 16 colors",
"103 - 800x600 256 colors", "104 - 1024x768 16 colors", "105 - 1024x768 256 colors",
"106 - 1280x1024 16 colors", "107 - 1280x1024 256 colors", "108 - 80x60 Text Mode",
"109 - 132x25 Text Mode", "10A - 132x43 Text Mode", "10B - 132x50 Text Mode",
"10C - 132x60 Text Mode", "10D - 320x200 32,768 colors", "10E - 320x200 65,536 colors",
"10F - 320x200 16m colors", "110 - 640x480 32,768 colors", "111 - 640x480 65,536 colors",
"112 - 640x480 16m colors", "113 - 800x600 32,768 colors", "114 - 800x600 65,536 colors",
"115 - 800x600 16m colors", "116 - 1024x768 32,768 colors", "117 - 1024x768 65,536 colors",
"118 - 1024x768 16m colors", "119 - 1280x1024 32,768 colors", "11A - 1280x1024 65,536 colors",
"11B - 1280x1024 16m colors", "11C - 640x350 256 colors", "11D - 640x350 32,768 colors",
"11E - 640x400 32,768 colors", "11F - 640x350 65,536 colors", "120 - 640x400 65,536 colors",
"121 - 640x350 16m colors", "122 - 640x400 16m colors", "123 - 1600x1200 16 colors",
"124 - 1600x1200 256 colors", "125 - 1600x1200 32,768 colors", "126 - 1600x1200 65,536 colors",
"127 - 1600x1200 16m colors", "128 - 640x480 16m colors(*)", "129 - 800x600 16m colors(*)",
"12A - 1024x768 16m colors(*)", "12B - 1280x1024 16m colors(*)", "12C - 1600x1200 16m colors(*)",
"12D - 320x240 32,768 colors", "12E - 320x400 32,768 colors", "12F - 360x200 32,768 colors",
"130 - 360x240 32,768 colors", "131 - 360x400 32,768 colors", "132 - 320x240 65,536 colors",
"133 - 320x400 65,536 colors", "134 - 360x200 65,536 colors", "135 - 360x240 65,536 colors",
"136 - 360x400 65,536 colors", "137 - 320x240 16m colors", "138 - 320x400 16m colors",
"139 - name n/a", "13A - name n/a", "13B - name n/a",
"13C - name n/a", "13D - name n/a", "13E - name n/a",
"13F - name n/a", "140 - name n/a", "141 - name n/a",
"142 - 640x350 16m colors(*)", "143 - 640x400 16m colors(*)", "144 - name n/a",
"145 - name n/a", "146 - name n/a", "147 - name n/a",
"148 - name n/a", "149 - name n/a", "14A - name n/a",
"14B - name n/a", "14C - name n/a", "14D - name n/a",
"14E - name n/a", "14F - name n/a", "150 - 640x350 16 colors",
"151 - 640x400 16 colors", "152 - 640x480 16 colors", "153 - 320x200 256 colors",
"154 - 320x240 256 colors", "155 - 320x400 256 colors", "156 - 360x200 256 colors",
"157 - 360x240 256 colors", "158 - 360x400 256 colors", "159 - name n/a",
"15A - name n/a", "15B - name n/a", "15C - name n/a",
"15D - name n/a", "15E - name n/a", "15F - name n/a"
};
 
static void vesa_setpage(int page)
{
vesa_r.eax=0x4f05;
270,15 → 235,11
vesa_data.mode = (struct vbe_mode_info_block *)(vesa_data.info + 1);
vesa_r.eax = 0x4f00;
vesa_r.es = (unsigned int)vesa_data.info >> 4;
vesa_r.ds = (unsigned int)vesa_data.info >> 4;
vesa_r.edi = 0;
 
__svgalib_LRMI_free_real(LRMI_mem2,sizeof(struct vbe_info_block) + sizeof(struct vbe_mode_info_block));
__svgalib_LRMI_free_real(LRMI_mem2,sizeof(void *));
 
__svgalib_LRMI_int(0x10, &vesa_r);
 
printk(KERN_INFO "Int 0x10 result ax=%2x\n",vesa_r.eax);
 
if (vesa_r.eax!=0x4f) return 0;
return !vesa_init(0,0,0);
}
394,7 → 355,19
{
short int *mode_list;
int i;
#if 0
uint8_t *m;
int address;
m=mmap(0,0x502,PROT_READ,MAP_SHARED,__svgalib_mem_fd,0);
address=((long)*(unsigned short *)(m+64))+(((long)*(unsigned short *)(m+66))<<4);
if((address<0xa0000)||(address>0xfffff)) {
fprintf(stderr, "Real mode int 0x10 at 0x%08x handler not in ROM.\n",address);
fprintf(stderr, "Try running vga_reset.\n");
return 1;
};
#endif
__svgalib_textprog|=1;
 
/* Get I/O priviledge */
406,12 → 379,14
vesa_memory=4096;
};
 
__svgalib_LRMI_init();
for(i=0;i<__GLASTMODE;i++)SVGALIB_VESA[i]=IS_IN_STANDARD_VGA_DRIVER(i);
 
vesa_data.info = __svgalib_LRMI_alloc_real(sizeof(struct vbe_info_block)
+ sizeof(struct vbe_mode_info_block));
vesa_data.mode = (struct vbe_mode_info_block *)(vesa_data.info + 1);
vesa_r.eax = 0x4f00;
vesa_r.es = (unsigned int)vesa_data.info >> 4;
vesa_r.ds = (unsigned int)vesa_data.info >> 4;
vesa_r.edi = 0;
memcpy(vesa_data.info->vbe_signature, "VBE2", 4);
429,8 → 404,6
 
vesa_memory = vesa_data.info->total_memory*64;
 
for(i=0;i<__GLASTMODE;i++)SVGALIB_VESA[i]=IS_IN_STANDARD_VGA_DRIVER(i);
 
mode_list = (short int *)(vesa_data.info->video_mode_list_seg * 16 + vesa_data.info->video_mode_list_off);
 
while (*mode_list != -1) {
439,7 → 412,6
vesa_r.eax = 0x4f01;
vesa_r.ecx = *mode_list;
vesa_r.es = (unsigned int)vesa_data.mode >> 4;
vesa_r.ds = (unsigned int)vesa_data.mode >> 4;
vesa_r.edi = (unsigned int)vesa_data.mode & 0xf;
 
if((vesa_chiptype>=1)&&(vesa_data.mode->mode_attributes&0x80))
448,7 → 420,7
printk(KERN_ERR "Can't get mode info (vm86 failure)\n");
return 1;
}
 
#if 1
for(i=0;i<=__GLASTMODE;i++)
if((infotable[i].xdim==vesa_data.mode->x_resolution)&&
(infotable[i].ydim==vesa_data.mode->y_resolution)&&
465,10 → 437,105
i=__GLASTMODE+1;
};
 
#else
if (vesa_data.mode->memory_model == VBE_MODEL_RGB) {
if((vesa_data.mode->rsvd_mask_size==8)||(vesa_data.mode->bits_per_pixel==32)) {
switch(vesa_data.mode->y_resolution){
case 200: if(vesa_data.mode->x_resolution==320)
SVGALIB_VESA[G320x200x16M32]=*mode_list; break;
case 240: if(vesa_data.mode->x_resolution==320)
SVGALIB_VESA[G320x240x16M32]=*mode_list; break;
case 300: if(vesa_data.mode->x_resolution==400)
SVGALIB_VESA[G400x300x16M32]=*mode_list; break;
case 384: if(vesa_data.mode->x_resolution==512)
SVGALIB_VESA[G512x384x16M32]=*mode_list; break;
case 480: if(vesa_data.mode->x_resolution==640)
SVGALIB_VESA[G640x480x16M32]=*mode_list; break;
case 600: if(vesa_data.mode->x_resolution==800)
SVGALIB_VESA[G800x600x16M32]=*mode_list; break;
case 720: if(vesa_data.mode->x_resolution==960)
SVGALIB_VESA[G960x720x16M32]=*mode_list; break;
case 768: if(vesa_data.mode->x_resolution==1024)
SVGALIB_VESA[G1024x768x16M32]=*mode_list; break;
case 864: if(vesa_data.mode->x_resolution==1152)
SVGALIB_VESA[G1152x864x16M32]=*mode_list; break;
case 1024: if(vesa_data.mode->x_resolution==1280)
SVGALIB_VESA[G1280x1024x16M32]=*mode_list; break;
case 1200: if(vesa_data.mode->x_resolution==1600)
SVGALIB_VESA[G1600x1200x16M32]=*mode_list; break;
case 1440: if(vesa_data.mode->x_resolution==1920)
SVGALIB_VESA[G1920x1440x16M32]=*mode_list; break;
}
} else {
i=0;
switch(vesa_data.mode->y_resolution){
case 200: if(vesa_data.mode->x_resolution==320)
i=G320x200x32K; break;
case 240: if(vesa_data.mode->x_resolution==320)
i=G320x240x32K; break;
case 300: if(vesa_data.mode->x_resolution==400)
i=G400x300x32K; break;
case 384: if(vesa_data.mode->x_resolution==512)
i=G512x384x32K; break;
case 480: if(vesa_data.mode->x_resolution==640)
i=G640x480x32K; break;
case 600: if(vesa_data.mode->x_resolution==800)
i=G800x600x32K; break;
case 720: if(vesa_data.mode->x_resolution==960)
i=G960x720x32K; break;
case 768: if(vesa_data.mode->x_resolution==1024)
i=G1024x768x32K; break;
case 864: if(vesa_data.mode->x_resolution==1152)
i=G1152x864x32K; break;
case 1024: if(vesa_data.mode->x_resolution==1280)
i=G1280x1024x32K; break;
case 1200: if(vesa_data.mode->x_resolution==1600)
i=G1600x1200x32K; break;
case 1440: if(vesa_data.mode->x_resolution==1920)
i=G1920x1440x32K; break;
};
if(i>0)switch(vesa_data.mode->green_mask_size){
case 5:SVGALIB_VESA[i]=*mode_list; break;
case 6:SVGALIB_VESA[i+1]=*mode_list; break;
case 8:if(vesa_data.mode->rsvd_mask_size==0)SVGALIB_VESA[i+2]=*mode_list; break;
};
};
} else if ((vesa_data.mode->memory_model == VBE_MODEL_256) ||
(vesa_data.mode->memory_model == VBE_MODEL_PACKED)){
switch(vesa_data.mode->y_resolution){
case 200: if(vesa_data.mode->x_resolution==320)
SVGALIB_VESA[G320x200x256]=*mode_list; break;
case 240: if(vesa_data.mode->x_resolution==320) {
if(vesa_data.mode->number_of_planes==8)
SVGALIB_VESA[G320x240x256]=*mode_list;
else SVGALIB_VESA[G320x240x256V]=*mode_list;
};
break;
case 300: if(vesa_data.mode->x_resolution==400)
SVGALIB_VESA[G400x300x256]=*mode_list; break;
case 384: if(vesa_data.mode->x_resolution==512)
SVGALIB_VESA[G512x384x256]=*mode_list; break;
case 480: if(vesa_data.mode->x_resolution==640)
SVGALIB_VESA[G640x480x256]=*mode_list; break;
case 600: if(vesa_data.mode->x_resolution==800)
SVGALIB_VESA[G800x600x256]=*mode_list; break;
case 720: if(vesa_data.mode->x_resolution==960)
SVGALIB_VESA[G960x720x256]=*mode_list; break;
case 768: if(vesa_data.mode->x_resolution==1024)
SVGALIB_VESA[G1024x768x256]=*mode_list; break;
case 864: if(vesa_data.mode->x_resolution==1152)
SVGALIB_VESA[G1152x864x256]=*mode_list; break;
case 1024: if(vesa_data.mode->x_resolution==1280)
SVGALIB_VESA[G1280x1024x256]=*mode_list; break;
case 1200: if(vesa_data.mode->x_resolution==1600)
SVGALIB_VESA[G1600x1200x256]=*mode_list; break;
case 1440: if(vesa_data.mode->x_resolution==1920)
SVGALIB_VESA[G1920x1440x256]=*mode_list; break;
}
}
#endif
mode_list++;
};
 
vesa_r.eax=0x4f04;
vesa_r.edx=0;
vesa_r.ecx=__svgalib_VESA_savebitmap;
475,7 → 542,7
vesa_r.ebx=0;
__svgalib_LRMI_int(0x10,&vesa_r);
vesa_regs_size=vesa_r.ebx*64;
__svgalib_LRMI_free_real(vesa_data.info,sizeof(vesa_data.info));
__svgalib_LRMI_free_real(vesa_data.info,sizeof(struct vbe_info_block) + sizeof(struct vbe_mode_info_block));
 
SVGALIB_VESA[TEXT]=3;
 
514,5 → 581,5
sleep(4);
return 0;
}
 
}