X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fbregs.h;h=577effc0e5b76b2164cada64091dcac02aa0d2fe;hb=9eb210023718c65a1300cb0b768ba478b0a2b211;hp=8da6c524943a6336b32b85bcdefbb753feabdd61;hpb=9521e26a164eb4689b34d82a5de0d998bdd4c4dc;p=seabios.git diff --git a/src/bregs.h b/src/bregs.h index 8da6c52..577effc 100644 --- a/src/bregs.h +++ b/src/bregs.h @@ -2,16 +2,34 @@ // // Copyright (C) 2008 Kevin O'Connor // -// This file may be distributed under the terms of the GNU GPLv3 license. +// This file may be distributed under the terms of the GNU LGPLv3 license. #ifndef __BREGS_H #define __BREGS_H +// CPU flag bitdefs +#define F_CF (1<<0) +#define F_ZF (1<<6) +#define F_IF (1<<9) +#define F_ID (1<<21) + +// CR0 flags +#define CR0_PG (1<<31) // Paging +#define CR0_CD (1<<30) // Cache disable +#define CR0_NW (1<<29) // Not Write-through +#define CR0_PE (1<<0) // Protection enable + + +#ifndef __ASSEMBLY__ + +#include "farptr.h" // struct segoff_s /**************************************************************** * Registers saved/restored in romlayout.S ****************************************************************/ +#include "types.h" // u16 + #define UREG(ER, R, RH, RL) union { u32 ER; struct { u16 R; u16 R ## _hi; }; struct { u8 RL; u8 RH; u8 R ## _hilo; u8 R ## _hihi; }; } // Layout of registers passed in to irq handlers. Note that this @@ -20,14 +38,14 @@ struct bregs { u16 ds; u16 es; - UREG(edi, di, di_hi, di_lo); - UREG(esi, si, si_hi, si_lo); + UREG(edi, di, di8u, di8l); + UREG(esi, si, si8u, si8l); + UREG(ebp, bp, bp8u, bp8l); UREG(ebx, bx, bh, bl); UREG(edx, dx, dh, dl); UREG(ecx, cx, ch, cl); UREG(eax, ax, ah, al); - u16 ip; - u16 cs; + struct segoff_s code; u16 flags; } PACKED; @@ -36,10 +54,6 @@ struct bregs { * Helper functions ****************************************************************/ -// bregs flags bitdefs -#define F_ZF (1<<6) -#define F_CF (1<<0) - static inline void set_cf(struct bregs *regs, int cond) { @@ -66,25 +80,18 @@ set_code_success(struct bregs *regs) } static inline void -set_fail_silent(struct bregs *regs) +set_invalid_silent(struct bregs *regs) { set_cf(regs, 1); } static inline void -set_code_fail_silent(struct bregs *regs, u8 code) +set_code_invalid_silent(struct bregs *regs, u8 code) { regs->ah = code; set_cf(regs, 1); } -#define set_fail(regs) \ - __set_fail(__func__, (regs)) -#define set_code_fail(regs, code) \ - __set_code_fail(__func__, (regs), (code)) - -// util.c -void __set_fail(const char *fname, struct bregs *regs); -void __set_code_fail(const char *fname, struct bregs *regs, u8 code); +#endif // !__ASSEMBLY__ #endif // bregs.h