diff options
Diffstat (limited to 'com32/lib')
-rw-r--r-- | com32/lib/Makefile | 6 | ||||
-rw-r--r-- | com32/lib/pci/bios.c (renamed from com32/lib/pci/readbios.c) | 4 | ||||
-rw-r--r-- | com32/lib/pci/pci.h | 3 | ||||
-rw-r--r-- | com32/lib/pci/readx.c | 6 | ||||
-rw-r--r-- | com32/lib/pci/writebios.c | 14 | ||||
-rw-r--r-- | com32/lib/pci/writex.c | 5 |
6 files changed, 13 insertions, 25 deletions
diff --git a/com32/lib/Makefile b/com32/lib/Makefile index 0daa157f..250c3962 100644 --- a/com32/lib/Makefile +++ b/com32/lib/Makefile @@ -66,9 +66,9 @@ LIBOBJS = \ sys/vesa/alphatbl.o sys/vesa/screencpy.o sys/vesa/fmtpixel.o \ sys/vesa/i915resolution.o \ \ - pci/cfgtype.o pci/scan.o \ - pci/readb.o pci/readw.o pci/readl.o pci/readbios.o \ - pci/writeb.o pci/writew.o pci/writel.o pci/writebios.o \ + pci/cfgtype.o pci/scan.o pci/bios.o \ + pci/readb.o pci/readw.o pci/readl.o \ + pci/writeb.o pci/writew.o pci/writel.o \ \ zlib/adler32.o zlib/compress.o zlib/crc32.o \ zlib/uncompr.o zlib/deflate.o zlib/trees.o zlib/zutil.o \ diff --git a/com32/lib/pci/readbios.c b/com32/lib/pci/bios.c index f8ff3bff..b3c2c57d 100644 --- a/com32/lib/pci/readbios.c +++ b/com32/lib/pci/bios.c @@ -2,13 +2,15 @@ #include <string.h> #include "pci/pci.h" -uint32_t __pci_read_bios(uint32_t call, pciaddr_t a) +uint32_t __pci_read_write_bios(uint32_t call, uint32_t v, pciaddr_t a) { com32sys_t rs; memset(&rs, 0, sizeof rs); rs.eax.w[0] = call; rs.ebx.w[0] = a >> 8; /* bus:device:function */ rs.edi.b[0] = a; /* address:reg */ + rs.ecx.l = v; + rs.eflags.l = EFLAGS_CF; __intcall(0x1a, &rs, &rs); return (rs.eflags.l & EFLAGS_CF) ? ~(uint32_t) 0 : rs.ecx.l; diff --git a/com32/lib/pci/pci.h b/com32/lib/pci/pci.h index 66a1eb50..8d81b0e4 100644 --- a/com32/lib/pci/pci.h +++ b/com32/lib/pci/pci.h @@ -10,7 +10,6 @@ #include <sys/cpu.h> extern enum pci_config_type __pci_cfg_type; -extern uint32_t __pci_read_bios(uint32_t call, pciaddr_t a); -extern void __pci_write_bios(uint32_t call, uint32_t v, pciaddr_t a); +extern uint32_t __pci_read_write_bios(uint32_t call, uint32_t v, pciaddr_t a); #endif /* PCI_PCI_H */ diff --git a/com32/lib/pci/readx.c b/com32/lib/pci/readx.c index f073eaa1..ed66d5b2 100644 --- a/com32/lib/pci/readx.c +++ b/com32/lib/pci/readx.c @@ -1,7 +1,7 @@ #include "pci/pci.h" -#include <string.h> -TYPE BWL(pci_read) (pciaddr_t a) { +TYPE BWL(pci_read) (pciaddr_t a) +{ TYPE r; for (;;) { @@ -42,7 +42,7 @@ TYPE BWL(pci_read) (pciaddr_t a) { return r; case PCI_CFG_BIOS: - return (TYPE) __pci_read_bios(BIOSCALL, a); + return (TYPE) __pci_read_write_bios(BIOSCALL, 0, a); default: return (TYPE) ~ 0; diff --git a/com32/lib/pci/writebios.c b/com32/lib/pci/writebios.c deleted file mode 100644 index d367eee7..00000000 --- a/com32/lib/pci/writebios.c +++ /dev/null @@ -1,14 +0,0 @@ -#include <com32.h> -#include <string.h> -#include "pci/pci.h" - -void __pci_write_bios(uint32_t call, uint32_t v, pciaddr_t a) -{ - com32sys_t rs; - memset(&rs, 0, sizeof rs); - rs.eax.w[0] = call; - rs.ebx.w[0] = a >> 8; /* bus:device:function */ - rs.edi.b[0] = a; /* address:reg */ - rs.ecx.l = v; - __intcall(0x1a, &rs, NULL); -} diff --git a/com32/lib/pci/writex.c b/com32/lib/pci/writex.c index 14b20380..d83a1eed 100644 --- a/com32/lib/pci/writex.c +++ b/com32/lib/pci/writex.c @@ -1,6 +1,7 @@ #include "pci/pci.h" -void BWL(pci_write) (TYPE v, pciaddr_t a) { +void BWL(pci_write)(TYPE v, pciaddr_t a) +{ for (;;) { switch (__pci_cfg_type) { case PCI_CFG_AUTO: @@ -39,7 +40,7 @@ void BWL(pci_write) (TYPE v, pciaddr_t a) { return; case PCI_CFG_BIOS: - __pci_write_bios(BIOSCALL, v, a); + __pci_read_write_bios(BIOSCALL, v, a); return; default: |