Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 188 → Rev 189

/shark/trunk/drivers/svga/vesa.c
1,6 → 1,3
/*
*/
 
#include <stdlib.h>
#include <stdio.h> /* for printf */
#include <string.h> /* for memset */
28,10 → 25,12
 
static int vesa_memory,vesa_chiptype;
static int vesa_is_linear, vesa_logical_width, vesa_bpp, vesa_granularity;
static int vesa_regs_size, vesa_linear_base, vesa_last_mode_set;
//static int vesa_regs_size;
static int vesa_linear_base, vesa_last_mode_set;
static struct LRMI_regs vesa_r;
static int vesa_read_write, vesa_read_window, vesa_write_window;
static void * LRMI_mem1, * LRMI_mem2;
//static void * LRMI_mem1;
static void * LRMI_mem2;
 
static CardSpecs *cardspecs;
static struct
44,35 → 43,34
 
static void vesa_setpage(int page)
{
vesa_r.eax=0x4f05;
vesa_r.ebx=0;
vesa_r.edx=page*64/vesa_granularity;
__svgalib_LRMI_int(0x10,&vesa_r);
 
if(vesa_read_write){
vesa_r.eax=0x4f05;
vesa_r.ebx=1;
vesa_r.edx=page*64/vesa_granularity;
__svgalib_LRMI_int(0x10,&vesa_r);
};
vesa_r.eax=0x4f05;
vesa_r.ebx=0;
vesa_r.edx=page*64/vesa_granularity;
__svgalib_LRMI_int(0x10,&vesa_r);
 
if(vesa_read_write){
vesa_r.eax=0x4f05;
vesa_r.ebx=1;
vesa_r.edx=page*64/vesa_granularity;
__svgalib_LRMI_int(0x10,&vesa_r);
};
 
}
 
 
static int __svgalib_vesa_inlinearmode(void)
{
return vesa_is_linear;
return vesa_is_linear;
}
 
 
/* Fill in chipset specific mode information */
 
static void vesa_getmodeinfo(int mode, vga_modeinfo *modeinfo)
{
if (IS_IN_STANDARD_VGA_DRIVER(mode))
return __svgalib_vga_driverspecs.getmodeinfo(mode, modeinfo);
if (IS_IN_STANDARD_VGA_DRIVER(mode)) return __svgalib_vga_driverspecs.getmodeinfo(mode, modeinfo);
if(modeinfo->colors==16) return;
 
if(modeinfo->colors==16)return;
 
modeinfo->maxpixels = vesa_memory*1024/modeinfo->bytesperpixel;
modeinfo->maxlogicalwidth = 4088; /* just a guess, */
modeinfo->startaddressrange = vesa_memory * 1024 - 1;
94,6 → 92,7
vesa_r.eax = 0x4f01;
vesa_r.ecx = SVGALIB_VESA[mode];
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 (!__svgalib_LRMI_int(0x10, &vesa_r)) {
101,6 → 100,7
return;
}
modeinfo->linewidth = vesa_data.mode->bytes_per_scanline;
 
}
 
/* Read and save chipset-specific registers */
111,11 → 111,12
vesa_r.eax=0x4f04;
vesa_r.ebx=0;
vesa_r.es=((long)buf)>>4;
vesa_r.ds=((long)buf)>>4;
vesa_r.edx=1;
vesa_r.ecx=__svgalib_VESA_savebitmap;
__svgalib_LRMI_int(0x10,&vesa_r);
memcpy(&regs[VGA_TOTAL_REGS],buf,vesa_regs_size);
return vesa_regs_size;*/
memcpy(&regs[VGA_TOTAL_REGS],buf,vesa_regs_size); */
return 0;
}
 
/* Set chipset-specific registers */
129,6 → 130,7
vesa_r.eax=0x4f04;
vesa_r.ebx=0;
vesa_r.es=((long)buf)>>4;
vesa_r.ds=((long)buf)>>4;
vesa_r.edx=2;
vesa_r.ecx=__svgalib_VESA_savebitmap;
__svgalib_LRMI_int(0x10,&vesa_r);*/
168,26 → 170,14
{
vesa_bpp=1;
vesa_granularity=1;
if (IS_IN_STANDARD_VGA_DRIVER(mode)) {
vesa_is_linear=1;
 
if(__svgalib_vesatext){
vesa_r.eax=0x4f02; /* make sure we are in a regular VGA mode before we start */
vesa_r.ebx=__svgalib_VESA_textmode; /* without this, if we start in SVGA mode the result might */
__svgalib_LRMI_int(0x10,&vesa_r); /* be something weird */
};
return __svgalib_vga_driverspecs.setmode(mode, prv_mode);
}
if (!vesa_modeavailable(mode)) return 1;
vesa_r.eax=0x4f02;
vesa_r.ebx=SVGALIB_VESA[mode]|0x8000|(vesa_is_linear*0x4000);
vesa_last_mode_set=vesa_r.ebx;
__svgalib_LRMI_int(0x10,&vesa_r);
 
vesa_data.info = LRMI_mem2 ;
vesa_data.mode = (struct vbe_mode_info_block *)(vesa_data.info + 1);
vesa_r.eax = 0x4f01;
vesa_r.ecx=SVGALIB_VESA[mode];
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;
__svgalib_LRMI_int(0x10, &vesa_r);
vesa_logical_width=vesa_data.mode->bytes_per_scanline;
205,7 → 195,17
if ((vesa_data.mode->win_b_attributes&2) == 2) vesa_read_window=1;
if ((vesa_data.mode->win_b_attributes&4) == 4) vesa_write_window=1;
}
if (!vesa_modeavailable(mode)) {
return 1;
}
vesa_r.eax=0x4f02;
vesa_r.ebx=SVGALIB_VESA[mode]|0x8000|(vesa_is_linear*0x4000);
vesa_last_mode_set=vesa_r.ebx;
__svgalib_LRMI_int(0x10,&vesa_r);
 
return 0;
 
}
 
 
235,6 → 235,7
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(void *));
289,7 → 290,8
 
static int vesa_linear(int op, int param)
{
if (op==LINEAR_ENABLE) {
if (op==LINEAR_ENABLE) {
if(vesa_is_linear == 1) return vesa_linear_base;
vesa_r.eax=0x4f02;
vesa_r.ebx=vesa_last_mode_set|0x4000;
__svgalib_LRMI_int(0x10,&vesa_r);
368,6 → 370,7
return 1;
};
#endif
__svgalib_textprog|=1;
 
/* Get I/O priviledge */
387,6 → 390,7
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);
412,6 → 416,7
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))
418,7 → 423,7
vesa_linear_base=vesa_data.mode->phys_base_ptr;
if (!__svgalib_LRMI_int(0x10, &vesa_r)) {
printk(KERN_ERR "Can't get mode info (vm86 failure)\n");
return 1;
return 1;
}
#if 1
for(i=0;i<=__GLASTMODE;i++)
/shark/trunk/drivers/svga/lrmi.c
60,6 → 60,7
inregs.x.cx = r->ecx;
inregs.x.dx = r->edx;
sregs.es = r->es;
sregs.es = r->ds;
inregs.x.di = r->edi;
#ifndef VM86
/shark/trunk/drivers/svga/vgapci.c
60,11 → 60,7
}
}
 
pcibios_read_config_dword(bus,dv,PCI_COMMAND,&dw);
dw |= (PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER);
pcibios_write_config_dword(bus,dv,PCI_COMMAND,dw);
//vga_init_vsync(&graph_dev);
vga_init_vsync(&graph_dev);
}