Show
Ignore:
Timestamp:
05/17/09 10:39:07 (3 years ago)
Author:
mwhitworth
Message:

Start updating Xynth to use dynamic libraries for drivers, remove old configuration code and replace with registry equivalents.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • Whitix/trunk/user/xynth/src/server/video/bochs/server.c

    r1668 r2049  
    1313#define VBE_DISPI_DATA          0x01CF 
    1414 
     15#define VBE_DISPI_ID4           0xB0C4 
     16 
     17#define VBE_DISPI_ID            0x0 
    1518#define VBE_DISPI_XRES          0x1 
    1619#define VBE_DISPI_YRES          0x2 
     
    2427#define outw(port,data) asm volatile("outw %%ax,%%dx"::"d"(port),"a"(data)) 
    2528 
     29static unsigned short inw(unsigned short port) 
     30{ 
     31        unsigned short retVal; 
     32        asm volatile("inw %%dx,%%ax" : "=a"(retVal) : "d"(port)); 
     33        return retVal; 
     34} 
     35 
    2636extern int noGraphics; 
    2737 
    28 void VbeWrite(unsigned short index, unsigned short value) 
     38static unsigned short VbeRead(unsigned short index) 
     39{ 
     40        outw(VBE_DISPI_INDEX, index); 
     41         
     42        return inw(VBE_DISPI_DATA); 
     43} 
     44 
     45static void VbeWrite(unsigned short index, unsigned short value) 
    2946{ 
    3047        outw(VBE_DISPI_INDEX, index); 
     
    3249} 
    3350 
    34 void VbeSetMode(unsigned short width, unsigned short height, unsigned short bits) 
     51static int VbeSetMode(unsigned short width, unsigned short height, unsigned short bits) 
    3552{ 
    3653        VbeWrite(VBE_DISPI_ENABLE, VBE_DISPI_DISABLED); 
     
    3956        VbeWrite(VBE_DISPI_BPP, bits); 
    4057        VbeWrite(VBE_DISPI_ENABLE, VBE_DISPI_ENABLED | VBE_DISPI_LFB_ENABLED); 
     58         
     59        return 0; 
    4160} 
    4261 
    43 int s_video_bochs_server_init (s_server_conf_t *cfg) 
     62int s_video_bochs_server_init (s_server_t* server) 
    4463{ 
    45         SysIoAccess(1); 
     64        if (VbeSetMode(BOCHS_WIDTH, BOCHS_HEIGHT, BOCHS_BPP)) 
     65                        return -1; 
     66                         
     67        server->window->surface->width=BOCHS_WIDTH; 
    4668 
    47         if (!noGraphics) 
    48                 VbeSetMode(BOCHS_WIDTH, BOCHS_HEIGHT, BOCHS_BPP); 
    49  
    50         server->window->surface->width=BOCHS_WIDTH; 
    5169        server->window->surface->height=BOCHS_HEIGHT; 
    5270        server->window->surface->bytesperpixel=BOCHS_BPP/8; 
     
    6078        server->window->surface->redlength = 8; 
    6179 
    62         int memFd=SysOpen("/System/Devices/Special/Memory", _SYS_FILE_READ | _SYS_FILE_WRITE, 0); 
     80        int memFd = SysOpen("/System/Devices/Special/Memory", _SYS_FILE_READ | _SYS_FILE_WRITE, 0); 
    6381 
    6482        server->window->surface->linear_mem_size=server->window->surface->width*server->window->surface->height*server->window->surface->bytesperpixel; 
     
    8098} 
    8199 
    82 s_video_driver_t s_video_bochs = { 
     100int BochsProbe(s_server_t* server) 
     101{ 
     102        if (VbeRead(VBE_DISPI_ID) != VBE_DISPI_ID4) 
     103                return 0; 
     104                 
     105        return 1; 
     106} 
     107 
     108s_video_driver_t videoDriver = { 
    83109        "bochs", 
    84110        "/System/Devices/Special/Memory", 
    85111        s_video_bochs_server_init, 
    86112        s_video_bochs_server_uninit, 
     113        BochsProbe, 
    87114};