diff options
| author | Miguel <m.i@gmx.at> | 2018-08-18 16:20:26 +0200 |
|---|---|---|
| committer | Miguel <m.i@gmx.at> | 2018-08-18 16:20:26 +0200 |
| commit | 639c3d47b09114628f8e1f8817c27c10bf1fb28c (patch) | |
| tree | f0381de25cc8f2de96a87b47cc76f7d09548bf7e /xxx | |
| parent | 7b0d88b2dff9b635d9ff69f6d51b6832c1ca4c40 (diff) | |
reviving old drivers: mouse, pci, e1000
Diffstat (limited to 'xxx')
| -rw-r--r-- | xxx/inactive/e1000.c | 4 | ||||
| -rw-r--r-- | xxx/inactive/e1000.h | 1 | ||||
| -rw-r--r-- | xxx/inactive/floppy.c | 1 | ||||
| -rw-r--r-- | xxx/inactive/mouse.c | 175 | ||||
| -rw-r--r-- | xxx/inactive/pci.c | 133 | ||||
| -rw-r--r-- | xxx/video/vesa.c | 6 |
6 files changed, 1 insertions, 319 deletions
diff --git a/xxx/inactive/e1000.c b/xxx/inactive/e1000.c deleted file mode 100644 index 99194be..0000000 --- a/xxx/inactive/e1000.c +++ /dev/null @@ -1,4 +0,0 @@ - -void init_e1000() -{ -} diff --git a/xxx/inactive/e1000.h b/xxx/inactive/e1000.h deleted file mode 100644 index 5413fe1..0000000 --- a/xxx/inactive/e1000.h +++ /dev/null @@ -1 +0,0 @@ -void init_e1000(); diff --git a/xxx/inactive/floppy.c b/xxx/inactive/floppy.c index 1dbe137..ea9e76e 100644 --- a/xxx/inactive/floppy.c +++ b/xxx/inactive/floppy.c @@ -1,4 +1,3 @@ - /* * Fool OS Simple Floppy Driver. * diff --git a/xxx/inactive/mouse.c b/xxx/inactive/mouse.c deleted file mode 100644 index 910f0cf..0000000 --- a/xxx/inactive/mouse.c +++ /dev/null @@ -1,175 +0,0 @@ -//http://forum.osdev.org/viewtopic.php?t=10247 -//based on Mouse.inc by SANiK -//License: Use as you wish, except to cause damage - -#define FOOLOS_MODULE_NAME "mouse" - -#include "lib/logger/log.h" -#include "lib/int/stdint.h" - -#include "x86.h" - - -static volatile uint8_t mouse_cycle; -static volatile uint8_t mouse_byte[3]; -volatile int16_t mouse_x; -volatile int16_t mouse_y; -static volatile uint8_t mouse_a; - - -uint8_t mouse_read(); - -void mouse_wait(uint8_t a_type) //unsigned char -{ - uint32_t _time_out=100000; //unsigned int - if(a_type==0) - { - while(_time_out--) //Data - { - if((x86_inb(0x64) & 1)==1) - { - return; - } - } - return; - } - else - { - while(_time_out--) //Signal - { - if((x86_inb(0x64) & 2)==0) - { - return; - } - } - return; - } -} - -void mouse_write(uint8_t a_write) -{ - //Wait to be able to send a command - mouse_wait(1); - //Tell the mouse we are sending a command - x86_outb(0x64, 0xD4); - //Wait for the final part - mouse_wait(1); - //Finally write - x86_outb(0x60, a_write); -} - -int8_t mouse_get_x() -{ - return mouse_x; -} -int8_t mouse_get_y() -{ - return mouse_y; -} - -void mouse_init() -{ - mouse_x=mouse_y=0; - mouse_cycle=0; - - uint8_t _status; //unsigned char - - //Enable the auxiliary mouse device - mouse_wait(1); - x86_outb(0x64, 0xA8); - - //Enable the interrupts - mouse_wait(1); - x86_outb(0x64, 0x20); - mouse_wait(0); - _status=(x86_inb(0x60) | 2); - mouse_wait(1); - x86_outb(0x64, 0x60); - mouse_wait(1); - x86_outb(0x60, _status); - - //Tell the mouse to use default settings - mouse_write(0xF6); - mouse_read(); //Acknowledge - - //Enable the mouse - mouse_write(0xF4); - mouse_read(); //Acknowledge - - log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"Mouse Initialized"); - -} - -void mouse_log() -{ - //log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"%02x / %02x / %02x ",mouse_byte[0], mouse_byte[1],mouse_byte[2]); - - if(mouse_byte[0]&0x80||mouse_byte[0]&0x40)return; //skip packet on overflow - if(!(mouse_byte[0]&0x8))panic(FOOLOS_MODULE_NAME,"mouse packets out of sync!?"); // this bit is always 1, otherwise panic! - - - // - if(mouse_byte[1]>127){ - mouse_x-=256; - mouse_x+=mouse_byte[1]; - } - else - { - mouse_x+=mouse_byte[1]; - } - if(mouse_byte[2]>127){ - mouse_y-=256; - mouse_y+=mouse_byte[2]; - } - else - { - mouse_y+=mouse_byte[2]; - } - - - - - if(mouse_x<0)mouse_x=0; - if(mouse_y<0)mouse_y=0; - if(mouse_x>800)mouse_x=800; - if(mouse_y>600)mouse_y=600; - - - //log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"%d / %d / %02x ",mouse_x, mouse_y,mouse_byte[2]); - //PutFont('X', mouse_x,600-mouse_y, 0xffffff); - -} -//Mouse functions -void mouse_handler()//struct regs *a_r) //struct regs *a_r (not used but just there) -{ - X86_IRQ_BEGIN - - switch(mouse_cycle) - { - case 0: - mouse_byte[0]=x86_inb(0x60); - mouse_cycle++; - break; - case 1: - mouse_byte[1]=x86_inb(0x60); - mouse_cycle++; - break; - case 2: - mouse_byte[2]=x86_inb(0x60); - mouse_cycle=0; - mouse_log(); - break; - - } - - - X86_IRQ_END -} - -uint8_t mouse_read() -{ - //Get's response from mouse - mouse_wait(0); - return x86_inb(0x60); -} - diff --git a/xxx/inactive/pci.c b/xxx/inactive/pci.c deleted file mode 100644 index e5d9711..0000000 --- a/xxx/inactive/pci.c +++ /dev/null @@ -1,133 +0,0 @@ -#include "kernel.h" -#include "x86.h" -#include "e1000.h" -#include "../lib/logger/log.h" // logger facilities -#define FOOLOS_MODULE_NAME "pci" - -#define PCI_CONFIG_DATA 0xCFC -#define PCI_CONFIG_ADDRESS 0xCF8 - - void pciConfigSet (uint8_t bus, uint8_t slot, - uint8_t func, uint8_t offset, uint32_t data) - { - uint32_t address; - uint32_t lbus = (uint32_t)bus; - uint32_t lslot = (uint32_t)slot; - uint32_t lfunc = (uint32_t)func; - uint16_t tmp = 0; - - /* create configuration address as per Figure 1 */ - address = (uint32_t)((lbus << 16) | (lslot << 11) | - (lfunc << 8) | (offset & 0xfc) | ((uint32_t)0x80000000)); - - /* write out the address */ - x86_outl (0xCF8, address); - x86_outl (0xCFC,data); - - } - uint16_t pciConfigReadWord (uint8_t bus, uint8_t slot, - uint8_t func, uint8_t offset) - { - uint32_t address; - uint32_t lbus = (uint32_t)bus; - uint32_t lslot = (uint32_t)slot; - uint32_t lfunc = (uint32_t)func; - uint16_t tmp = 0; - - /* create configuration address as per Figure 1 */ - address = (uint32_t)((lbus << 16) | (lslot << 11) | - (lfunc << 8) | (offset & 0xfc) | ((uint32_t)0x80000000)); - - /* write out the address */ - x86_outl (0xCF8, address); - /* read in the data */ - /* (offset & 2) * 8) = 0 will choose the first word of the 32 bits register */ - tmp = (uint16_t)((x86_inl (0xCFC) >> ((offset & 2) * 8)) & 0xffff); - return (tmp); - } - -void test_bar(uint8_t bus, uint8_t slot, uint8_t offset) -{ - - uint16_t bar_low=pciConfigReadWord(bus,slot,0,offset); - uint16_t bar_high=pciConfigReadWord(bus,slot,0,offset+2); - - // check size - pciConfigSet(bus,slot,0,offset,0xffffffff); - uint16_t size_low=pciConfigReadWord(bus,slot,0,offset); - uint16_t size_high=pciConfigReadWord(bus,slot,0,offset+2); - uint32_t size=(size_high<<16)+size_low; - size=~size; - size++; - // - - // restore original values - pciConfigSet(bus,slot,0,offset,(bar_high<<16)+bar_low); - - - log("e1000",FOOLOS_LOG_INFO,"%s bar: (0x%x 0x%x) size: 0x%x" ,bar_low&1?"i/o":"mem",bar_high, bar_low, size); - -} - -uint16_t pciCheck(uint8_t bus, uint8_t slot) -{ - - uint16_t vendor, device; - - /* try and read the first configuration register. Since there are no */ - /* vendors that == 0xFFFF, it must be a non-existent device. */ - if ((vendor = pciConfigReadWord(bus,slot,0,0)) != 0xFFFF) - { - device = pciConfigReadWord(bus,slot,0,2); - log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"[%d,%d]: vendor: 0x%x / device: 0x%x",bus,slot,vendor,device); - - // check for: E1000 (82540EM). PCI Ethernet Controller - if(vendor==0x8086&&device==0x100e) - { - // uint16_t irq=pciConfigReadWord(bus,slot,0,0x3C); - // uint16_t irq2=pciConfigReadWord(bus,slot,0,0x3E); - // - init_e1000(); - - test_bar(bus,slot,0x10); - test_bar(bus,slot,0x14); - test_bar(bus,slot,0x18); - - // scr_put_hex(irq); - // scr_put_hex(irq2); - // scr_put_string_nl(";"); - - - } - - - - - } - - return (vendor); - -} - -void pci_init() -{ - log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"scanning bus"); - // todo: recurse on pci to pci bridges! - // todo: support multiple pci host controllers! - // (check more funcitons of device 0:0) - - uint16_t bus; - uint8_t device; - - for(bus = 0; bus < 256; bus++) - { - for(device = 0; device < 32; device++) - { - - pciCheck(bus, device); - - } - - } - -} diff --git a/xxx/video/vesa.c b/xxx/video/vesa.c index a5ee4e5..b43ca50 100644 --- a/xxx/video/vesa.c +++ b/xxx/video/vesa.c @@ -1,4 +1,5 @@ //http://wiki.osdev.org/GUI + #include <stdarg.h> #include "kernel/mem.h" #include "vesa.h" @@ -9,7 +10,6 @@ #define FOOLSOS_SHOW_VESAMODES - static foolfont *deffont; static vbemodeinfo *VbeModeInfoBlock; @@ -226,7 +226,6 @@ void vesa_render() if(boxx>VbeModeInfoBlock->Xres-100)boxx=100; // if(boxy>VbeModeInfoBlock->Yres-200)boxy=200; - vesa_switch_buffers(); } @@ -244,6 +243,3 @@ void vesa_init_doublebuff() VbeModeInfoBlock->physbase=buffer; } */ - - - |
