From 19de5df5e5ddb928640951dcb5cbac3b3bb6c62e Mon Sep 17 00:00:00 2001 From: Jung-uk Kim Date: Wed, 23 Sep 2009 20:49:14 +0000 Subject: Move sys/dev/x86bios to sys/compat/x86bios. It may not be optimal but it is clearly better than the old place. OK'ed by: delphij, paradox (ddkprog yahoo com) --- sys/compat/x86bios/x86bios.c | 184 +++++++++++++++++++++++++++++++++++++ sys/compat/x86bios/x86bios.h | 138 ++++++++++++++++++++++++++++ sys/compat/x86bios/x86bios_alloc.c | 81 ++++++++++++++++ sys/conf/files.amd64 | 5 +- sys/conf/files.i386 | 4 +- sys/dev/atkbdc/atkbd.c | 2 +- sys/dev/dpms/dpms.c | 2 +- sys/dev/fb/vesa.c | 2 +- sys/dev/x86bios/x86bios.c | 184 ------------------------------------- sys/dev/x86bios/x86bios.h | 138 ---------------------------- sys/dev/x86bios/x86bios_alloc.c | 81 ---------------- sys/modules/x86bios/Makefile | 2 +- 12 files changed, 411 insertions(+), 412 deletions(-) create mode 100644 sys/compat/x86bios/x86bios.c create mode 100644 sys/compat/x86bios/x86bios.h create mode 100644 sys/compat/x86bios/x86bios_alloc.c delete mode 100644 sys/dev/x86bios/x86bios.c delete mode 100644 sys/dev/x86bios/x86bios.h delete mode 100644 sys/dev/x86bios/x86bios_alloc.c diff --git a/sys/compat/x86bios/x86bios.c b/sys/compat/x86bios/x86bios.c new file mode 100644 index 000000000000..5cb6bdf6f557 --- /dev/null +++ b/sys/compat/x86bios/x86bios.c @@ -0,0 +1,184 @@ +/*- + * Written by paradox + * Public domain. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include "opt_x86bios.h" + +#include +#include +#include +#include +#include + +#include +#include + +#include + +#include +#include +#include + +u_char *pbiosMem = NULL; +static u_char *pbiosStack = NULL; + +int busySegMap[5]; + +static struct x86emu x86bios_emu; + +static struct mtx x86bios_lock; + +static uint8_t +x86bios_emu_inb(struct x86emu *emu, uint16_t port) +{ + + if (port == 0xb2) /* APM scratch register */ + return (0); + if (port >= 0x80 && port < 0x88) /* POST status register */ + return (0); + return (inb(port)); +} + +static uint16_t +x86bios_emu_inw(struct x86emu *emu, uint16_t port) +{ + + if (port >= 0x80 && port < 0x88) /* POST status register */ + return (0); + return (inw(port)); +} + +static uint32_t +x86bios_emu_inl(struct x86emu *emu, uint16_t port) +{ + + if (port >= 0x80 && port < 0x88) /* POST status register */ + return (0); + return (inl(port)); +} + +static void +x86bios_emu_outb(struct x86emu *emu, uint16_t port, uint8_t val) +{ + + if (port == 0xb2) /* APM scratch register */ + return; + if (port >= 0x80 && port < 0x88) /* POST status register */ + return; + outb(port, val); +} + +static void +x86bios_emu_outw(struct x86emu *emu, uint16_t port, uint16_t val) +{ + + if (port >= 0x80 && port < 0x88) /* POST status register */ + return; + outw(port, val); +} + +static void +x86bios_emu_outl(struct x86emu *emu, uint16_t port, uint32_t val) +{ + + if (port >= 0x80 && port < 0x88) /* POST status register */ + return; + outl(port, val); +} + +void +x86biosCall(struct x86regs *regs, int intno) +{ + + if (intno < 0 || intno > 255) + return; + + mtx_lock_spin(&x86bios_lock); + + memcpy(&x86bios_emu.x86, regs, sizeof(*regs)); + x86emu_exec_intr(&x86bios_emu, intno); + memcpy(regs, &x86bios_emu.x86, sizeof(*regs)); + + mtx_unlock_spin(&x86bios_lock); +} + +void * +x86biosOffs(uint32_t offs) +{ + + return (pbiosMem + offs); +} + +static void +x86bios_init(void *arg __unused) +{ + int offs; + + mtx_init(&x86bios_lock, "x86bios lock", NULL, MTX_SPIN); + + /* Can pbiosMem be NULL here? */ + pbiosMem = pmap_mapbios(0x0, MAPPED_MEMORY_SIZE); + + memset(&x86bios_emu, 0, sizeof(x86bios_emu)); + x86emu_init_default(&x86bios_emu); + + x86bios_emu.emu_inb = x86bios_emu_inb; + x86bios_emu.emu_inw = x86bios_emu_inw; + x86bios_emu.emu_inl = x86bios_emu_inl; + x86bios_emu.emu_outb = x86bios_emu_outb; + x86bios_emu.emu_outw = x86bios_emu_outw; + x86bios_emu.emu_outl = x86bios_emu_outl; + + x86bios_emu.mem_base = (char *)pbiosMem; + x86bios_emu.mem_size = 1024 * 1024; + + memset(busySegMap, 0, sizeof(busySegMap)); + + pbiosStack = x86biosAlloc(1, &offs); +} + +static void +x86bios_uninit(void *arg __unused) +{ + + x86biosFree(pbiosStack, 1); + + if (pbiosMem) + pmap_unmapdev((vm_offset_t)pbiosMem, + MAPPED_MEMORY_SIZE); + + mtx_destroy(&x86bios_lock); +} + +static int +x86bios_modevent(module_t mod __unused, int type, void *data __unused) +{ + int err = 0; + + switch (type) { + case MOD_LOAD: + x86bios_init(NULL); + break; + case MOD_UNLOAD: + x86bios_uninit(NULL); + break; + default: + err = ENOTSUP; + break; + } + + return (err); +} + +static moduledata_t x86bios_mod = { + "x86bios", + x86bios_modevent, + NULL, +}; + +DECLARE_MODULE(x86bios, x86bios_mod, SI_SUB_CPU, SI_ORDER_ANY); +MODULE_VERSION(x86bios, 1); diff --git a/sys/compat/x86bios/x86bios.h b/sys/compat/x86bios/x86bios.h new file mode 100644 index 000000000000..3785f3cb3b05 --- /dev/null +++ b/sys/compat/x86bios/x86bios.h @@ -0,0 +1,138 @@ +/*- + * Written by paradox + * Public domain. + * + * x86 registers were borrowed from x86emu.h x86emu_regs.h + * for compatability. + * + * $FreeBSD$ + */ + +#ifndef _X86BIOS_H_ +#define _X86BIOS_H_ + +#include +#include +#include + +#ifdef __BIG_ENDIAN__ + +struct x86_register32 { + uint32_t e_reg; +}; + +struct x86_register16 { + uint16_t filler0; + uint16_t x_reg; +}; + +struct x86_register8 { + uint8_t filler0, filler1; + uint8_t h_reg, l_reg; +}; + +#else /* !__BIG_ENDIAN__ */ + +struct x86_register32 { + uint32_t e_reg; +}; + +struct x86_register16 { + uint16_t x_reg; +}; + +struct x86_register8 { + uint8_t l_reg, h_reg; +}; + +#endif /* __BIG_ENDIAN__ */ + +union x86_register { + struct x86_register32 I32_reg; + struct x86_register16 I16_reg; + struct x86_register8 I8_reg; +}; + +struct x86regs { + uint16_t register_cs; + uint16_t register_ds; + uint16_t register_es; + uint16_t register_fs; + uint16_t register_gs; + uint16_t register_ss; + uint32_t register_flags; + union x86_register register_a; + union x86_register register_b; + union x86_register register_c; + union x86_register register_d; + + union x86_register register_sp; + union x86_register register_bp; + union x86_register register_si; + union x86_register register_di; + union x86_register register_ip; +}; + +typedef struct x86regs x86regs_t; + +/* 8 bit registers */ +#define R_AH register_a.I8_reg.h_reg +#define R_AL register_a.I8_reg.l_reg +#define R_BH register_b.I8_reg.h_reg +#define R_BL register_b.I8_reg.l_reg +#define R_CH register_c.I8_reg.h_reg +#define R_CL register_c.I8_reg.l_reg +#define R_DH register_d.I8_reg.h_reg +#define R_DL register_d.I8_reg.l_reg + +/* 16 bit registers */ +#define R_AX register_a.I16_reg.x_reg +#define R_BX register_b.I16_reg.x_reg +#define R_CX register_c.I16_reg.x_reg +#define R_DX register_d.I16_reg.x_reg + +/* 32 bit extended registers */ +#define R_EAX register_a.I32_reg.e_reg +#define R_EBX register_b.I32_reg.e_reg +#define R_ECX register_c.I32_reg.e_reg +#define R_EDX register_d.I32_reg.e_reg + +/* special registers */ +#define R_SP register_sp.I16_reg.x_reg +#define R_BP register_bp.I16_reg.x_reg +#define R_SI register_si.I16_reg.x_reg +#define R_DI register_di.I16_reg.x_reg +#define R_IP register_ip.I16_reg.x_reg +#define R_FLG register_flags + +/* special registers */ +#define R_ESP register_sp.I32_reg.e_reg +#define R_EBP register_bp.I32_reg.e_reg +#define R_ESI register_si.I32_reg.e_reg +#define R_EDI register_di.I32_reg.e_reg +#define R_EIP register_ip.I32_reg.e_reg +#define R_EFLG register_flags + +/* segment registers */ +#define R_CS register_cs +#define R_DS register_ds +#define R_SS register_ss +#define R_ES register_es +#define R_FS register_fs +#define R_GS register_gs + +#define SEG_ADDR(x) (((x) >> 4) & 0x00F000) +#define SEG_OFF(x) ((x) & 0x0FFFF) +#define FARP(x) ((le32toh(x) & 0xffff) + ((le32toh(x) >> 12) & 0xffff00)) + +#define MAPPED_MEMORY_SIZE 0xc00000 +#define PAGE_RESERV (4096*5) + +__BEGIN_DECLS +void x86biosCall(struct x86regs *regs, int intno); +void *x86biosAlloc(int count, int *segs); +void x86biosFree(void *pbuf, int count); +void *x86biosOffs(uint32_t offs); +__END_DECLS + +#endif /* !_X86BIOS_H_ */ diff --git a/sys/compat/x86bios/x86bios_alloc.c b/sys/compat/x86bios/x86bios_alloc.c new file mode 100644 index 000000000000..624a75ce0088 --- /dev/null +++ b/sys/compat/x86bios/x86bios_alloc.c @@ -0,0 +1,81 @@ +/*- + * Copyright (C) 1999 Egbert Eich + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and that + * both that copyright notice and this permission notice appear in + * supporting documentation, and that the name of the authors not be used + * in advertising or publicity pertaining to distribution of the software + * without specific, written prior permission. The authors makes no + * representations about the suitability of this software for any purpose. + * It is provided "as is" without express or implied warranty. + * + * THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + * + * xserver/hw/xfree86/int10/generic.c + */ + +#include +__FBSDID("$FreeBSD$"); + +#include + +#include + +extern u_char *pbiosMem; +extern int busySegMap[5]; + +void * +x86biosAlloc(int count, int *segs) +{ + int i; + int j; + + /* find the free segblock of page */ + for (i = 0; i < (PAGE_RESERV - count); i++) + { + if (busySegMap[i] == 0) + { + /* find the capacity of segblock */ + for (j = i; j < (i + count); j++) + { + if (busySegMap[j] == 1) + break; + } + + if (j == (i + count)) + break; + i += count; + } + } + + if (i == (PAGE_RESERV - count)) + return NULL; + + /* make the segblock is used */ + for (j = i; j < (i + count); j++) + busySegMap[i] = 1; + + *segs = i * 4096; + + return (pbiosMem + *segs); +} + +void +x86biosFree(void *pbuf, int count) +{ + int i; + int busySeg; + + busySeg = ((u_char *)pbuf - pbiosMem) / 4096; + + for (i = busySeg; i < (busySeg + count); i++) + busySegMap[i] = 0; +} diff --git a/sys/conf/files.amd64 b/sys/conf/files.amd64 index 244a9b784c7f..3231bb557bbf 100644 --- a/sys/conf/files.amd64 +++ b/sys/conf/files.amd64 @@ -297,8 +297,7 @@ libkern/memset.c standard # # x86 real mode BIOS emulator, required by atkbdc/dpms/vesa # -dev/x86bios/x86bios.c optional x86bios | atkbd | dpms | vesa -dev/x86bios/x86bios_alloc.c optional x86bios | atkbd | dpms | vesa contrib/x86emu/x86emu.c optional x86bios | atkbd | dpms | vesa contrib/x86emu/x86emu_util.c optional x86bios | atkbd | dpms | vesa - +compat/x86bios/x86bios.c optional x86bios | atkbd | dpms | vesa +compat/x86bios/x86bios_alloc.c optional x86bios | atkbd | dpms | vesa diff --git a/sys/conf/files.i386 b/sys/conf/files.i386 index b332f31ec0d2..3728fad1e67e 100644 --- a/sys/conf/files.i386 +++ b/sys/conf/files.i386 @@ -381,7 +381,7 @@ i386/xbox/pic16l.s optional xbox # # x86 real mode BIOS emulator, required by atkbdc/dpms/vesa # -dev/x86bios/x86bios.c optional x86bios | atkbd | dpms | vesa -dev/x86bios/x86bios_alloc.c optional x86bios | atkbd | dpms | vesa contrib/x86emu/x86emu.c optional x86bios | atkbd | dpms | vesa contrib/x86emu/x86emu_util.c optional x86bios | atkbd | dpms | vesa +compat/x86bios/x86bios.c optional x86bios | atkbd | dpms | vesa +compat/x86bios/x86bios_alloc.c optional x86bios | atkbd | dpms | vesa diff --git a/sys/dev/atkbdc/atkbd.c b/sys/dev/atkbdc/atkbd.c index bb6aed6e2899..54ea15632033 100644 --- a/sys/dev/atkbdc/atkbd.c +++ b/sys/dev/atkbdc/atkbd.c @@ -47,7 +47,7 @@ __FBSDID("$FreeBSD$"); #if 0 #include #include -#include +#include #include #include diff --git a/sys/dev/dpms/dpms.c b/sys/dev/dpms/dpms.c index d21839b74f94..17f68daa1d4b 100644 --- a/sys/dev/dpms/dpms.c +++ b/sys/dev/dpms/dpms.c @@ -67,7 +67,7 @@ __FBSDID("$FreeBSD$"); #include #include -#include +#include /* * VESA DPMS States diff --git a/sys/dev/fb/vesa.c b/sys/dev/fb/vesa.c index a91d1f011b02..f6c6d6a5c8b5 100644 --- a/sys/dev/fb/vesa.c +++ b/sys/dev/fb/vesa.c @@ -53,7 +53,7 @@ __FBSDID("$FreeBSD$"); #include -#include +#include #define VESA_VIA_CLE266 "VIA CLE266\r\n" diff --git a/sys/dev/x86bios/x86bios.c b/sys/dev/x86bios/x86bios.c deleted file mode 100644 index 1bb86e36b93c..000000000000 --- a/sys/dev/x86bios/x86bios.c +++ /dev/null @@ -1,184 +0,0 @@ -/*- - * Written by paradox - * Public domain. - */ - -#include -__FBSDID("$FreeBSD$"); - -#include "opt_x86bios.h" - -#include -#include -#include -#include -#include - -#include -#include - -#include - -#include -#include -#include - -u_char *pbiosMem = NULL; -static u_char *pbiosStack = NULL; - -int busySegMap[5]; - -static struct x86emu x86bios_emu; - -static struct mtx x86bios_lock; - -static uint8_t -x86bios_emu_inb(struct x86emu *emu, uint16_t port) -{ - - if (port == 0xb2) /* APM scratch register */ - return (0); - if (port >= 0x80 && port < 0x88) /* POST status register */ - return (0); - return (inb(port)); -} - -static uint16_t -x86bios_emu_inw(struct x86emu *emu, uint16_t port) -{ - - if (port >= 0x80 && port < 0x88) /* POST status register */ - return (0); - return (inw(port)); -} - -static uint32_t -x86bios_emu_inl(struct x86emu *emu, uint16_t port) -{ - - if (port >= 0x80 && port < 0x88) /* POST status register */ - return (0); - return (inl(port)); -} - -static void -x86bios_emu_outb(struct x86emu *emu, uint16_t port, uint8_t val) -{ - - if (port == 0xb2) /* APM scratch register */ - return; - if (port >= 0x80 && port < 0x88) /* POST status register */ - return; - outb(port, val); -} - -static void -x86bios_emu_outw(struct x86emu *emu, uint16_t port, uint16_t val) -{ - - if (port >= 0x80 && port < 0x88) /* POST status register */ - return; - outw(port, val); -} - -static void -x86bios_emu_outl(struct x86emu *emu, uint16_t port, uint32_t val) -{ - - if (port >= 0x80 && port < 0x88) /* POST status register */ - return; - outl(port, val); -} - -void -x86biosCall(struct x86regs *regs, int intno) -{ - - if (intno < 0 || intno > 255) - return; - - mtx_lock_spin(&x86bios_lock); - - memcpy(&x86bios_emu.x86, regs, sizeof(*regs)); - x86emu_exec_intr(&x86bios_emu, intno); - memcpy(regs, &x86bios_emu.x86, sizeof(*regs)); - - mtx_unlock_spin(&x86bios_lock); -} - -void * -x86biosOffs(uint32_t offs) -{ - - return (pbiosMem + offs); -} - -static void -x86bios_init(void *arg __unused) -{ - int offs; - - mtx_init(&x86bios_lock, "x86bios lock", NULL, MTX_SPIN); - - /* Can pbiosMem be NULL here? */ - pbiosMem = pmap_mapbios(0x0, MAPPED_MEMORY_SIZE); - - memset(&x86bios_emu, 0, sizeof(x86bios_emu)); - x86emu_init_default(&x86bios_emu); - - x86bios_emu.emu_inb = x86bios_emu_inb; - x86bios_emu.emu_inw = x86bios_emu_inw; - x86bios_emu.emu_inl = x86bios_emu_inl; - x86bios_emu.emu_outb = x86bios_emu_outb; - x86bios_emu.emu_outw = x86bios_emu_outw; - x86bios_emu.emu_outl = x86bios_emu_outl; - - x86bios_emu.mem_base = (char *)pbiosMem; - x86bios_emu.mem_size = 1024 * 1024; - - memset(busySegMap, 0, sizeof(busySegMap)); - - pbiosStack = x86biosAlloc(1, &offs); -} - -static void -x86bios_uninit(void *arg __unused) -{ - - x86biosFree(pbiosStack, 1); - - if (pbiosMem) - pmap_unmapdev((vm_offset_t)pbiosMem, - MAPPED_MEMORY_SIZE); - - mtx_destroy(&x86bios_lock); -} - -static int -x86bios_modevent(module_t mod __unused, int type, void *data __unused) -{ - int err = 0; - - switch (type) { - case MOD_LOAD: - x86bios_init(NULL); - break; - case MOD_UNLOAD: - x86bios_uninit(NULL); - break; - default: - err = ENOTSUP; - break; - } - - return (err); -} - -static moduledata_t x86bios_mod = { - "x86bios", - x86bios_modevent, - NULL, -}; - -DECLARE_MODULE(x86bios, x86bios_mod, SI_SUB_CPU, SI_ORDER_ANY); -MODULE_VERSION(x86bios, 1); diff --git a/sys/dev/x86bios/x86bios.h b/sys/dev/x86bios/x86bios.h deleted file mode 100644 index 3785f3cb3b05..000000000000 --- a/sys/dev/x86bios/x86bios.h +++ /dev/null @@ -1,138 +0,0 @@ -/*- - * Written by paradox - * Public domain. - * - * x86 registers were borrowed from x86emu.h x86emu_regs.h - * for compatability. - * - * $FreeBSD$ - */ - -#ifndef _X86BIOS_H_ -#define _X86BIOS_H_ - -#include -#include -#include - -#ifdef __BIG_ENDIAN__ - -struct x86_register32 { - uint32_t e_reg; -}; - -struct x86_register16 { - uint16_t filler0; - uint16_t x_reg; -}; - -struct x86_register8 { - uint8_t filler0, filler1; - uint8_t h_reg, l_reg; -}; - -#else /* !__BIG_ENDIAN__ */ - -struct x86_register32 { - uint32_t e_reg; -}; - -struct x86_register16 { - uint16_t x_reg; -}; - -struct x86_register8 { - uint8_t l_reg, h_reg; -}; - -#endif /* __BIG_ENDIAN__ */ - -union x86_register { - struct x86_register32 I32_reg; - struct x86_register16 I16_reg; - struct x86_register8 I8_reg; -}; - -struct x86regs { - uint16_t register_cs; - uint16_t register_ds; - uint16_t register_es; - uint16_t register_fs; - uint16_t register_gs; - uint16_t register_ss; - uint32_t register_flags; - union x86_register register_a; - union x86_register register_b; - union x86_register register_c; - union x86_register register_d; - - union x86_register register_sp; - union x86_register register_bp; - union x86_register register_si; - union x86_register register_di; - union x86_register register_ip; -}; - -typedef struct x86regs x86regs_t; - -/* 8 bit registers */ -#define R_AH register_a.I8_reg.h_reg -#define R_AL register_a.I8_reg.l_reg -#define R_BH register_b.I8_reg.h_reg -#define R_BL register_b.I8_reg.l_reg -#define R_CH register_c.I8_reg.h_reg -#define R_CL register_c.I8_reg.l_reg -#define R_DH register_d.I8_reg.h_reg -#define R_DL register_d.I8_reg.l_reg - -/* 16 bit registers */ -#define R_AX register_a.I16_reg.x_reg -#define R_BX register_b.I16_reg.x_reg -#define R_CX register_c.I16_reg.x_reg -#define R_DX register_d.I16_reg.x_reg - -/* 32 bit extended registers */ -#define R_EAX register_a.I32_reg.e_reg -#define R_EBX register_b.I32_reg.e_reg -#define R_ECX register_c.I32_reg.e_reg -#define R_EDX register_d.I32_reg.e_reg - -/* special registers */ -#define R_SP register_sp.I16_reg.x_reg -#define R_BP register_bp.I16_reg.x_reg -#define R_SI register_si.I16_reg.x_reg -#define R_DI register_di.I16_reg.x_reg -#define R_IP register_ip.I16_reg.x_reg -#define R_FLG register_flags - -/* special registers */ -#define R_ESP register_sp.I32_reg.e_reg -#define R_EBP register_bp.I32_reg.e_reg -#define R_ESI register_si.I32_reg.e_reg -#define R_EDI register_di.I32_reg.e_reg -#define R_EIP register_ip.I32_reg.e_reg -#define R_EFLG register_flags - -/* segment registers */ -#define R_CS register_cs -#define R_DS register_ds -#define R_SS register_ss -#define R_ES register_es -#define R_FS register_fs -#define R_GS register_gs - -#define SEG_ADDR(x) (((x) >> 4) & 0x00F000) -#define SEG_OFF(x) ((x) & 0x0FFFF) -#define FARP(x) ((le32toh(x) & 0xffff) + ((le32toh(x) >> 12) & 0xffff00)) - -#define MAPPED_MEMORY_SIZE 0xc00000 -#define PAGE_RESERV (4096*5) - -__BEGIN_DECLS -void x86biosCall(struct x86regs *regs, int intno); -void *x86biosAlloc(int count, int *segs); -void x86biosFree(void *pbuf, int count); -void *x86biosOffs(uint32_t offs); -__END_DECLS - -#endif /* !_X86BIOS_H_ */ diff --git a/sys/dev/x86bios/x86bios_alloc.c b/sys/dev/x86bios/x86bios_alloc.c deleted file mode 100644 index 38bb472d1c13..000000000000 --- a/sys/dev/x86bios/x86bios_alloc.c +++ /dev/null @@ -1,81 +0,0 @@ -/*- - * Copyright (C) 1999 Egbert Eich - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, - * provided that the above copyright notice appear in all copies and that - * both that copyright notice and this permission notice appear in - * supporting documentation, and that the name of the authors not be used - * in advertising or publicity pertaining to distribution of the software - * without specific, written prior permission. The authors makes no - * representations about the suitability of this software for any purpose. - * It is provided "as is" without express or implied warranty. - * - * THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF - * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - * - * xserver/hw/xfree86/int10/generic.c - */ - -#include -__FBSDID("$FreeBSD$"); - -#include - -#include - -extern u_char *pbiosMem; -extern int busySegMap[5]; - -void * -x86biosAlloc(int count, int *segs) -{ - int i; - int j; - - /* find the free segblock of page */ - for (i = 0; i < (PAGE_RESERV - count); i++) - { - if (busySegMap[i] == 0) - { - /* find the capacity of segblock */ - for (j = i; j < (i + count); j++) - { - if (busySegMap[j] == 1) - break; - } - - if (j == (i + count)) - break; - i += count; - } - } - - if (i == (PAGE_RESERV - count)) - return NULL; - - /* make the segblock is used */ - for (j = i; j < (i + count); j++) - busySegMap[i] = 1; - - *segs = i * 4096; - - return (pbiosMem + *segs); -} - -void -x86biosFree(void *pbuf, int count) -{ - int i; - int busySeg; - - busySeg = ((u_char *)pbuf - pbiosMem) / 4096; - - for (i = busySeg; i < (busySeg + count); i++) - busySegMap[i] = 0; -} diff --git a/sys/modules/x86bios/Makefile b/sys/modules/x86bios/Makefile index 5dc381187309..8b5fa302a78f 100644 --- a/sys/modules/x86bios/Makefile +++ b/sys/modules/x86bios/Makefile @@ -4,7 +4,7 @@ KMOD= x86bios SRCS= opt_x86bios.h .PATH: ${.CURDIR}/../../contrib/x86emu -.PATH: ${.CURDIR}/../../dev/x86bios +.PATH: ${.CURDIR}/../../compat/x86bios SRCS+= x86bios.c x86bios_alloc.c x86emu.c x86emu_util.c .include -- cgit v1.3