⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 int86.c

📁 uboot在arm处理器s3c2410的移植代码
💻 C
字号:
/******************************************************************************                   SciTech OS Portability Manager Library**  ========================================================================**    The contents of this file are subject to the SciTech MGL Public*    License Version 1.0 (the "License"); you may not use this file*    except in compliance with the License. You may obtain a copy of*    the License at http://www.scitechsoft.com/mgl-license.txt**    Software distributed under the License is distributed on an*    "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or*    implied. See the License for the specific language governing*    rights and limitations under the License.**    The Original Code is Copyright (C) 1991-1998 SciTech Software, Inc.**    The Initial Developer of the Original Code is SciTech Software, Inc.*    All Rights Reserved.**  ========================================================================** Language:     ANSI C* Environment:  32-bit Windows NT device drivers.** Description:  Implementation for the real mode software interrupt*               handling functions.*****************************************************************************/#include "pmapi.h"#include "drvlib/os/os.h"#include "sdd/sddhelp.h"#include "mtrr.h"#include "oshdr.h"/*----------------------------- Implementation ----------------------------*//****************************************************************************REMARKS:We do have limited BIOS access under Windows NT device drivers.****************************************************************************/ibool PMAPI PM_haveBIOSAccess(void){    /* Return false unless we have full buffer passing! */    return false;}/****************************************************************************PARAMETERS:len     - Place to store the length of the bufferrseg    - Place to store the real mode segment of the bufferroff    - Place to store the real mode offset of the bufferREMARKS:This function returns the address and length of the global VESA transferbuffer that is used for communicating with the VESA BIOS functions fromWin16 and Win32 programs under Windows.****************************************************************************/void * PMAPI PM_getVESABuf(    uint *len,    uint *rseg,    uint *roff){    /* No buffers supported under Windows NT (Windows XP has them however if */    /* we ever decide to support this!) */    return NULL;}/****************************************************************************REMARKS:Issue a protected mode software interrupt.****************************************************************************/int PMAPI PM_int386(    int intno,    PMREGS *in,    PMREGS *out){    PMSREGS sregs;    PM_segread(&sregs);    return PM_int386x(intno,in,out,&sregs);}/****************************************************************************REMARKS:Map a real mode pointer to a protected mode pointer.****************************************************************************/void * PMAPI PM_mapRealPointer(    uint r_seg,    uint r_off){    /* Not used for Windows NT drivers! */    return NULL;}/****************************************************************************REMARKS:Allocate a block of real mode memory****************************************************************************/void * PMAPI PM_allocRealSeg(    uint size,    uint *r_seg,    uint *r_off){    /* Not supported in NT drivers */    (void)size;    (void)r_seg;    (void)r_off;    return NULL;}/****************************************************************************REMARKS:Free a block of real mode memory.****************************************************************************/void PMAPI PM_freeRealSeg(    void *mem){    /* Not supported in NT drivers */    (void)mem;}/****************************************************************************REMARKS:Issue a real mode interrupt (parameters in DPMI compatible structure)****************************************************************************/void PMAPI DPMI_int86(    int intno,    DPMI_regs *regs){    /* Not used in NT drivers */}/****************************************************************************REMARKS:Call a V86 real mode function with the specified register valuesloaded before the call. The call returns with a far ret.****************************************************************************/void PMAPI PM_callRealMode(    uint seg,    uint off,    RMREGS *regs,    RMSREGS *sregs){    /* TODO!! */#if 0    CLIENT_STRUCT saveRegs;    /* Bail if we do not have BIOS access (ie: the VxD was dynamically     * loaded, and not statically loaded.     */    if (!_PM_haveBIOS)	return;    TRACE("SDDHELP: Entering PM_callRealMode()\n");    Begin_Nest_V86_Exec();    LoadV86Registers(&saveRegs,regs,sregs);    Simulate_Far_Call(seg, off);    Resume_Exec();    ReadV86Registers(&saveRegs,regs,sregs);    End_Nest_Exec();    TRACE("SDDHELP: Exiting PM_callRealMode()\n");#endif}/****************************************************************************REMARKS:Issue a V86 real mode interrupt with the specified register valuesloaded before the interrupt.****************************************************************************/int PMAPI PM_int86(    int intno,    RMREGS *in,    RMREGS *out){    /* TODO!! */#if 0    RMSREGS         sregs = {0};    CLIENT_STRUCT   saveRegs;    ushort          oldDisable;    /* Disable pass-up to our VxD handler so we directly call BIOS */    TRACE("SDDHELP: Entering PM_int86()\n");    if (disableTSRFlag) {	oldDisable = *disableTSRFlag;	*disableTSRFlag = 0;	}    Begin_Nest_V86_Exec();    LoadV86Registers(&saveRegs,in,&sregs);    Exec_Int(intno);    ReadV86Registers(&saveRegs,out,&sregs);    End_Nest_Exec();    /* Re-enable pass-up to our VxD handler if previously enabled */    if (disableTSRFlag)	*disableTSRFlag = oldDisable;    TRACE("SDDHELP: Exiting PM_int86()\n");#else    *out = *in;#endif    return out->x.ax;}/****************************************************************************REMARKS:Issue a V86 real mode interrupt with the specified register valuesloaded before the interrupt.****************************************************************************/int PMAPI PM_int86x(    int intno,    RMREGS *in,    RMREGS *out,    RMSREGS *sregs){    /* TODO!! */#if 0    CLIENT_STRUCT   saveRegs;    ushort          oldDisable;    /* Bail if we do not have BIOS access (ie: the VxD was dynamically     * loaded, and not statically loaded.     */    if (!_PM_haveBIOS) {	*out = *in;	return out->x.ax;	}    /* Disable pass-up to our VxD handler so we directly call BIOS */    TRACE("SDDHELP: Entering PM_int86x()\n");    if (disableTSRFlag) {	oldDisable = *disableTSRFlag;	*disableTSRFlag = 0;	}    Begin_Nest_V86_Exec();    LoadV86Registers(&saveRegs,in,sregs);    Exec_Int(intno);    ReadV86Registers(&saveRegs,out,sregs);    End_Nest_Exec();    /* Re-enable pass-up to our VxD handler if previously enabled */    if (disableTSRFlag)	*disableTSRFlag = oldDisable;    TRACE("SDDHELP: Exiting PM_int86x()\n");#else    *out = *in;#endif    return out->x.ax;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -