Deleted Added
full compact
x86bios.h (197571) x86bios.h (198251)
1/*-
2 * Copyright (c) 2009 Alex Keda <admin@lissyara.su>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 9 unchanged lines hidden (view full) ---

18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
1/*-
2 * Copyright (c) 2009 Alex Keda <admin@lissyara.su>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 9 unchanged lines hidden (view full) ---

18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
26 * $FreeBSD: head/sys/compat/x86bios/x86bios.h 198251 2009-10-19 20:58:10Z jkim $
26 */
27/*
28 * x86 registers were borrowed from x86emu.h x86emu_regs.h
29 * for compatability.
27 */
28/*
29 * x86 registers were borrowed from x86emu.h x86emu_regs.h
30 * for compatability.
30 *
31 * $FreeBSD: head/sys/compat/x86bios/x86bios.h 197571 2009-09-28 08:14:15Z delphij $
32 */
33
34#ifndef _X86BIOS_H_
31 */
32
33#ifndef _X86BIOS_H_
35#define _X86BIOS_H_
34#define _X86BIOS_H_
36
35
37#include <sys/types.h>
38#include <sys/endian.h>
39#include <sys/systm.h>
36#include <sys/endian.h>
37#include <sys/systm.h>
38#include <sys/types.h>
40
41#ifdef __BIG_ENDIAN__
42
43struct x86_register32 {
39
40#ifdef __BIG_ENDIAN__
41
42struct x86_register32 {
44 uint32_t e_reg;
43 uint32_t e_reg;
45};
46
47struct x86_register16 {
44};
45
46struct x86_register16 {
48 uint16_t filler0;
49 uint16_t x_reg;
47 uint16_t filler0;
48 uint16_t x_reg;
50};
51
52struct x86_register8 {
49};
50
51struct x86_register8 {
53 uint8_t filler0, filler1;
54 uint8_t h_reg, l_reg;
52 uint8_t filler0;
53 uint8_t filler1;
54 uint8_t h_reg;
55 uint8_t l_reg;
55};
56
57#else /* !__BIG_ENDIAN__ */
58
59struct x86_register32 {
56};
57
58#else /* !__BIG_ENDIAN__ */
59
60struct x86_register32 {
60 uint32_t e_reg;
61 uint32_t e_reg;
61};
62
63struct x86_register16 {
62};
63
64struct x86_register16 {
64 uint16_t x_reg;
65 uint16_t x_reg;
65};
66
67struct x86_register8 {
66};
67
68struct x86_register8 {
68 uint8_t l_reg, h_reg;
69 uint8_t l_reg;
70 uint8_t h_reg;
69};
70
71#endif /* __BIG_ENDIAN__ */
72
73union x86_register {
74 struct x86_register32 I32_reg;
75 struct x86_register16 I16_reg;
76 struct x86_register8 I8_reg;
77};
78
79struct x86regs {
71};
72
73#endif /* __BIG_ENDIAN__ */
74
75union x86_register {
76 struct x86_register32 I32_reg;
77 struct x86_register16 I16_reg;
78 struct x86_register8 I8_reg;
79};
80
81struct x86regs {
80 uint16_t padding; /* CS is unused. */
81 uint16_t register_ds;
82 uint16_t _pad0; /* CS */
83 uint16_t _pad1; /* DS */
82 uint16_t register_es;
83 uint16_t register_fs;
84 uint16_t register_gs;
84 uint16_t register_es;
85 uint16_t register_fs;
86 uint16_t register_gs;
85 uint16_t register_ss;
87 uint16_t _pad2; /* SS */
86 uint32_t register_flags;
87 union x86_register register_a;
88 union x86_register register_b;
89 union x86_register register_c;
90 union x86_register register_d;
91
88 uint32_t register_flags;
89 union x86_register register_a;
90 union x86_register register_b;
91 union x86_register register_c;
92 union x86_register register_d;
93
92 union x86_register register_sp;
94 union x86_register _pad3; /* SP */
93 union x86_register register_bp;
94 union x86_register register_si;
95 union x86_register register_di;
96};
97
98typedef struct x86regs x86regs_t;
99
100/* 8 bit registers */
95 union x86_register register_bp;
96 union x86_register register_si;
97 union x86_register register_di;
98};
99
100typedef struct x86regs x86regs_t;
101
102/* 8 bit registers */
101#define R_AH register_a.I8_reg.h_reg
102#define R_AL register_a.I8_reg.l_reg
103#define R_BH register_b.I8_reg.h_reg
104#define R_BL register_b.I8_reg.l_reg
105#define R_CH register_c.I8_reg.h_reg
106#define R_CL register_c.I8_reg.l_reg
107#define R_DH register_d.I8_reg.h_reg
108#define R_DL register_d.I8_reg.l_reg
103#define R_AH register_a.I8_reg.h_reg
104#define R_AL register_a.I8_reg.l_reg
105#define R_BH register_b.I8_reg.h_reg
106#define R_BL register_b.I8_reg.l_reg
107#define R_CH register_c.I8_reg.h_reg
108#define R_CL register_c.I8_reg.l_reg
109#define R_DH register_d.I8_reg.h_reg
110#define R_DL register_d.I8_reg.l_reg
109
110/* 16 bit registers */
111
112/* 16 bit registers */
111#define R_AX register_a.I16_reg.x_reg
112#define R_BX register_b.I16_reg.x_reg
113#define R_CX register_c.I16_reg.x_reg
114#define R_DX register_d.I16_reg.x_reg
113#define R_AX register_a.I16_reg.x_reg
114#define R_BX register_b.I16_reg.x_reg
115#define R_CX register_c.I16_reg.x_reg
116#define R_DX register_d.I16_reg.x_reg
115
116/* 32 bit extended registers */
117
118/* 32 bit extended registers */
117#define R_EAX register_a.I32_reg.e_reg
118#define R_EBX register_b.I32_reg.e_reg
119#define R_ECX register_c.I32_reg.e_reg
120#define R_EDX register_d.I32_reg.e_reg
119#define R_EAX register_a.I32_reg.e_reg
120#define R_EBX register_b.I32_reg.e_reg
121#define R_ECX register_c.I32_reg.e_reg
122#define R_EDX register_d.I32_reg.e_reg
121
122/* special registers */
123
124/* special registers */
123#define R_SP register_sp.I16_reg.x_reg
124#define R_BP register_bp.I16_reg.x_reg
125#define R_SI register_si.I16_reg.x_reg
126#define R_DI register_di.I16_reg.x_reg
127#define R_FLG register_flags
125#define R_BP register_bp.I16_reg.x_reg
126#define R_SI register_si.I16_reg.x_reg
127#define R_DI register_di.I16_reg.x_reg
128#define R_FLG register_flags
128
129/* special registers */
129
130/* special registers */
130#define R_ESP register_sp.I32_reg.e_reg
131#define R_EBP register_bp.I32_reg.e_reg
132#define R_ESI register_si.I32_reg.e_reg
133#define R_EDI register_di.I32_reg.e_reg
134#define R_EFLG register_flags
131#define R_EBP register_bp.I32_reg.e_reg
132#define R_ESI register_si.I32_reg.e_reg
133#define R_EDI register_di.I32_reg.e_reg
134#define R_EFLG register_flags
135
136/* segment registers */
135
136/* segment registers */
137#define R_DS register_ds
138#define R_SS register_ss
139#define R_ES register_es
140#define R_FS register_fs
141#define R_GS register_gs
137#define R_ES register_es
138#define R_FS register_fs
139#define R_GS register_gs
142
140
143#define SEG_ADDR(x) (((x) >> 4) & 0x00F000)
144#define SEG_OFF(x) ((x) & 0x0FFFF)
145#define FARP(x) ((le32toh(x) & 0xffff) + ((le32toh(x) >> 12) & 0xffff00))
141#define X86BIOS_PHYSTOSEG(x) (((x) >> 4) & 0xffff)
142#define X86BIOS_PHYSTOOFF(x) ((x) & 0x000f)
146
143
147#define MAPPED_MEMORY_SIZE (1024 * 1024)
148#define PAGE_RESERV (4096 * 5)
149
150__BEGIN_DECLS
144__BEGIN_DECLS
151void *x86bios_alloc(int count, int *segs);
152void x86bios_free(void *pbuf, int count);
153void x86bios_intr(struct x86regs *regs, int intno);
154void *x86bios_offset(uint32_t offs);
145void *x86bios_alloc(uint32_t *offset, size_t size);
146void x86bios_call(struct x86regs *regs, uint16_t seg, uint16_t off);
147void x86bios_free(void *addr, size_t size);
148uint32_t x86bios_get_intr(int intno);
149void *x86bios_get_orm(uint32_t offset);
150void x86bios_init_regs(struct x86regs *regs);
151void x86bios_intr(struct x86regs *regs, int intno);
152int x86bios_match_device(uint32_t offset, device_t dev);
153void *x86bios_offset(uint32_t offset);
155__END_DECLS
156
157#endif /* !_X86BIOS_H_ */
154__END_DECLS
155
156#endif /* !_X86BIOS_H_ */