亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? pm.c

?? uboot for K9 AT91RM9200 學(xué)習(xí)板
?? C
?? 第 1 頁 / 共 5 頁
字號:
/******************************************************************************                   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 OS/2** Description:  Implementation for the OS Portability Manager Library, which*               contains functions to implement OS specific services in a*               generic, cross platform API. Porting the OS Portability*               Manager library is the first step to porting any SciTech*               products to a new platform.*****************************************************************************/#include "pmapi.h"#include "drvlib/os/os.h"#include "pm_help.h"#include "mtrr.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include <process.h>#ifndef __EMX__#include <direct.h>#endif#define INCL_DOSERRORS#define INCL_DOS#define INCL_SUB#define INCL_VIO#define INCL_KBD#include <os2.h>/* Semaphore for communication with our background daemon */#define SHAREDSEM   ((PSZ)"\\SEM32\\SDD\\DAEMON")#define DAEMON_NAME "SDDDAEMN.EXE"/*--------------------------- Global variables ----------------------------*//* Public structures used to communicate with VIDEOPMI for implementing * the ability to call the real mode BIOS functions. */typedef struct _VIDEOMODEINFO {    ULONG   miModeId;    USHORT  usType;    USHORT  usInt10ModeSet;    USHORT  usXResolution;    USHORT  usYResolution;    ULONG   ulBufferAddress;    ULONG   ulApertureSize;    BYTE    bBitsPerPixel;    BYTE    bBitPlanes;    BYTE    bXCharSize;    BYTE    bYCharSize;    USHORT  usBytesPerScanLine;    USHORT  usTextRows;    ULONG   ulPageLength;    ULONG   ulSaveSize;    BYTE    bVrtRefresh;    BYTE    bHrtRefresh;    BYTE    bVrtPolPos;    BYTE    bHrtPolPos;    CHAR    bRedMaskSize;    CHAR    bRedFieldPosition;    CHAR    bGreenMaskSize;    CHAR    bGreenFieldPosition;    CHAR    bBlueMaskSize;    CHAR    bBlueFieldPosition;    CHAR    bRsvdMaskSize;    CHAR    bRsvdFieldPosition;    ULONG   ulColors;    ULONG   ulReserved[3];    } VIDEOMODEINFO, FAR *PVIDEOMODEINFO;typedef struct _ADAPTERINFO {    ULONG       ulAdapterID;    CHAR        szOEMString[128];    CHAR        szDACString[128];    CHAR        szRevision[128];    ULONG       ulTotalMemory;    ULONG       ulMMIOBaseAddress;    ULONG       ulPIOBaseAddress;    BYTE        bBusType;    BYTE        bEndian;    USHORT      usDeviceBusID;    USHORT      usVendorBusID;    USHORT      SlotID;    } ADAPTERINFO, FAR *PADAPTERINFO;typedef struct _VIDEO_ADAPTER {    void            *hvideo;    ADAPTERINFO     Adapter;    VIDEOMODEINFO   ModeInfo;    } VIDEO_ADAPTER, FAR *PVIDEO_ADAPTER;/* PMIREQUEST_SOFTWAREINT structures from OS/2 DDK */typedef struct {    ULONG ulFlags;                              /* VDM initialization type */#define VDM_POSTLOAD                    0x1     /* adapter just loaded, used internally for initialization */#define VDM_INITIALIZE                  0x2     /* force initialization of a permanently open VDM, even if previously initialized */#define VDM_TERMINATE_POSTINITIALIZE    0x6     /*start VDM with initialization, but close it afterwards (includes VDM_INITIALIZE) */#define VDM_QUERY_CAPABILITY            0x10    /* query the current int 10 capability */#define VDM_FULL_VDM_CREATED            0x20    /* a full VDM is created */#define VDM_MINI_VDM_CREATED            0x40    /* a mini VDM is created */#define VDM_MINI_VDM_SUPPORTED          0x80    /* mini VDM support is available */    PCHAR szName;                               /* VDM initialization program */    PCHAR szArgs;                               /* VDM initialization arguments */    }INITVDM;typedef struct {    BYTE bBufferType;#define BUFFER_NONE     0#define INPUT_BUFFER    1#define OUTPUT_BUFFER   2    BYTE bReserved;    BYTE bSelCRF;    BYTE bOffCRF;    PVOID pAddress;    ULONG ulSize;    } BUFFER, *PBUFFER;typedef struct vcrf_s {    ULONG reg_eax;    ULONG reg_ebx;    ULONG reg_ecx;    ULONG reg_edx;    ULONG reg_ebp;    ULONG reg_esi;    ULONG reg_edi;    ULONG reg_ds;    ULONG reg_es;    ULONG reg_fs;    ULONG reg_gs;    ULONG reg_cs;    ULONG reg_eip;    ULONG reg_eflag;    ULONG reg_ss;    ULONG reg_esp;    } VCRF;typedef struct {    ULONG   ulBIOSIntNo;    VCRF    aCRF;    BUFFER  pB[2];    } INTCRF;#define PMIREQUEST_LOADPMIFILE          21#define PMIREQUEST_IDENTIFYADAPTER      22#define PMIREQUEST_SOFTWAREINT          23#ifdef  PTR_DECL_IN_FRONT#define EXPENTRYP   * EXPENTRY#else#define EXPENTRYP   EXPENTRY *#endif/* Entry point to VIDEOPMI32Request. This may be overridden by external * code that has already loaded VIDEOPMI to avoid loading it twice. */APIRET (EXPENTRYP PM_VIDEOPMI32Request)(PVIDEO_ADAPTER, ULONG, PVOID, PVOID) = NULL;static ibool        haveInt10 = -1; /* True if we have Int 10 support   */static ibool        useVPMI = true; /* False if VIDEOPMI unavailable    */static VIDEO_ADAPTER Adapter;       /* Video adapter for VIDEOPMI       */static uchar        RMBuf[1024];    /* Fake real mode transfer buffer   */static uint         VESABuf_len = 1024;/* Length of the VESABuf buffer  */static void         *VESABuf_ptr = NULL;/* Near pointer to VESABuf      */static uint         VESABuf_rseg;   /* Real mode segment of VESABuf     */static uint         VESABuf_roff;   /* Real mode offset of VESABuf      */static uchar *      lowMem = NULL;static ibool        isSessionSwitching = false;static ulong        parmsIn[4];     /* Must not cross 64Kb boundary!    */static ulong        parmsOut[4];    /* Must not cross 64Kb boundary!    */extern ushort       _PM_gdt;static void (PMAPIP fatalErrorCleanup)(void) = NULL;/* DosSysCtl prototype. It is not declared in the headers but it is in the * standard import libraries (DOSCALLS.876). Funny. */APIRET APIENTRY DosSysCtl(ULONG ulFunction, PVOID pvData);/* This is the stack size for the threads that track the session switch event */#define SESSION_SWITCH_STACK_SIZE   32768typedef struct {    VIOMODEINFO     vmi;    USHORT          CursorX;    USHORT          CursorY;    UCHAR           FrameBuffer[1];    } CONSOLE_SAVE;typedef struct _SESWITCHREC {    /* The following variable is volatile because of PM_SUSPEND_APP         */    volatile int    Flags;          /* -1 or PM_DEACTIVATE or PM_REACTIVATE */    PM_saveState_cb Callback;       /* Save/restore context callback        */    HMTX            Mutex;          /* Exclusive access mutex               */    HEV             Event;          /* Posted after callback is called      */    } SESWITCHREC;/* Page sized block cache */#define PAGES_PER_BLOCK     32#define PAGE_BLOCK_SIZE     (PAGES_PER_BLOCK * PM_PAGE_SIZE + (PM_PAGE_SIZE-1) + sizeof(pageblock))#define FREELIST_NEXT(p)    (*(void**)(p))typedef struct pageblock {    struct pageblock    *next;    struct pageblock    *prev;    void                *freeListStart;    void                *freeList;    void                *freeListEnd;    int                 freeCount;    PM_lockHandle       lockHandle;    } pageblock;static pageblock    *pageBlocks = NULL;/*----------------------------- Implementation ----------------------------*//****************************************************************************PARAMETERS:func        - Helper device driver function to callRETURNS:First return value from the device driver in parmsOut[0]REMARKS:Function to open our helper device driver, call it and close the filehandle. Note that we have to open the device driver for every call becauseof two problems: 1. We cannot open a single file handle in a DLL that is shared amongst    programs, since every process must have it's own open file handle. 2. For some reason there appears to be a limit of about 12 open file    handles on a device driver in the system. Hence when we open more    than about 12 file handles things start to go very strange.Hence we simply open the file handle every time that we need to call thedevice driver to work around these problems.****************************************************************************/static ulong CallSDDHelp(    int func){    static ulong    inLen;          /* Must not cross 64Kb boundary!    */    static ulong    outLen;         /* Must not cross 64Kb boundary!    */    HFILE           hSDDHelp;    ULONG           rc;    ulong           result;    if ((rc = DosOpen(PMHELP_NAME,&hSDDHelp,&result,0,0,	    FILE_OPEN, OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE,	    NULL)) != 0) {	if (rc == 4) {  /* Did we run out of file handles? */	    ULONG   ulNewFHs;	    LONG    lAddFHs = 5;	    if (DosSetRelMaxFH(&lAddFHs, &ulNewFHs) != 0)		PM_fatalError("Failed to raise the file handles limit!");	    else {		if ((rc = DosOpen(PMHELP_NAME,&hSDDHelp,&result,0,0,			FILE_OPEN, OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE,			NULL)) != 0) {		    PM_fatalError("Unable to open SDDHELP$ helper device driver! (#2)");		    }		}	    }	else	    PM_fatalError("Unable to open SDDHELP$ helper device driver!");	}    if (DosDevIOCtl(hSDDHelp,PMHELP_IOCTL,func,	    &parmsIn, inLen = sizeof(parmsIn), &inLen,	    &parmsOut, outLen = sizeof(parmsOut), &outLen) != 0)	PM_fatalError("Failure calling SDDHELP$ helper device driver!");    DosClose(hSDDHelp);    return parmsOut[0];}/****************************************************************************REMARKS:Determine if we're running on a DBCS system.****************************************************************************/ibool __IsDBCSSystem(void){    CHAR        achDBCSInfo[12];    COUNTRYCODE ccStruct = {0, 0};    memset(achDBCSInfo, 0, 12);    /* Get the DBCS vector - if it's not empty, we're on DBCS */    DosQueryDBCSEnv(sizeof(achDBCSInfo), &ccStruct, achDBCSInfo);    if (achDBCSInfo[0] != 0)	return true;    else	return false;}/****************************************************************************REMARKS:Determine if PMSHELL is running - if it isn't, we can't use certain calls****************************************************************************/ibool __isShellLoaded(void){    PVOID   ptr;    if (DosGetNamedSharedMem(&ptr, (PSZ)"\\SHAREMEM\\PMGLOBAL.MEM", PAG_READ) == NO_ERROR) {	DosFreeMem(ptr);	return true;	}    return false;}/****************************************************************************REMARKS:Initialise the PM library and connect to our helper device driver. If wecannot connect to our helper device driver, we bail out with an errormessage.****************************************************************************/void PMAPI PM_init(void){    if (!lowMem) {	/* Obtain the 32->16 callgate from the device driver to enable IOPL */	if ((_PM_gdt = CallSDDHelp(PMHELP_GETGDT32)) == 0)	    PM_fatalError("Unable to obtain call gate selector!");	PM_setIOPL(3);	/* Map the first Mb of physical memory into lowMem */	if ((lowMem = PM_mapPhysicalAddr(0,0xFFFFF,true)) == NULL)	    PM_fatalError("Unable to map first Mb physical memory!");	/* Initialise the MTRR interface functions */	MTRR_init();	}}/****************************************************************************REMARKS:Initialise the PM library for BIOS access via VIDEOPMI. This should workwith any GRADD driver, including SDD/2.****************************************************************************/static ibool InitInt10(void){    HMODULE     hModGENPMI,hModSDDPMI,hModVideoPMI;    CHAR        buf[80],path[_MAX_PATH];    HEV         hevDaemon = NULLHANDLE;    RESULTCODES resCodes;    if (haveInt10 == -1) {	/* Connect to VIDEOPMI and get entry point. Note that we only	 * do this if GENPMI or SDDPMI are already loaded, since we need	 * a GRADD based driver for this to work.	 */	PM_init();	haveInt10 = false;	if (DosQueryModuleHandle((PSZ)"GENPMI.DLL",&hModGENPMI) != 0)	    hModGENPMI = NULLHANDLE;	if (DosQueryModuleHandle((PSZ)"SDDPMI.DLL",&hModSDDPMI) != 0)	    hModSDDPMI = NULLHANDLE;	if (hModGENPMI || hModSDDPMI) {	    if (DosLoadModule((PSZ)buf,sizeof(buf),(PSZ)"VIDEOPMI.DLL",&hModVideoPMI) == 0) {		if (DosQueryProcAddr(hModVideoPMI,0,(PSZ)"VIDEOPMI32Request",(void*)&PM_VIDEOPMI32Request) != 0)		    PM_fatalError("Unable to get VIDEOPMI32Request entry point!");		strcpy(path,"X:\\OS2\\SVGADATA.PMI");		path[0] = PM_getBootDrive();		if (PM_VIDEOPMI32Request(&Adapter,PMIREQUEST_LOADPMIFILE,path,NULL) != 0) {		    DosFreeModule(hModVideoPMI);		    PM_VIDEOPMI32Request = NULL;		    haveInt10 = false;		    }		else {		    /* Attempt to initialise the full VDM in the system. This will only		     * work if VPRPMI.SYS is loaded, but it provides support for passing		     * values in ES/DS/ESI/EDI between the BIOS which does not work with		     * kernel VDM's in fixpacks earlier than FP15. FP15 and later and		     * the new Warp 4.51 and Warp Server convenience packs should work		     * fine with the kernel mini-VDM.		     *		     * Also the full VDM is the only solution for really old kernels		     * (but GRADD won't run on them so this is superfluous ;-).		     */		    INITVDM InitVDM = {VDM_INITIALIZE,NULL,NULL};

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲自拍偷拍麻豆| 日韩电影在线一区二区| 欧美久久久久久久久| 国产一区二区视频在线| 亚洲精品国产精华液| 精品欧美一区二区三区精品久久 | 国产69精品一区二区亚洲孕妇| 国产精品天干天干在线综合| 欧美日本乱大交xxxxx| 丁香网亚洲国际| 免费高清不卡av| 亚洲精品成人天堂一二三| 久久久亚洲精华液精华液精华液| 欧美性一级生活| 波多野结衣视频一区| 久久国产欧美日韩精品| 婷婷综合在线观看| 亚洲精品免费在线播放| 国产精品理伦片| 久久影院午夜论| 日韩欧美你懂的| 欧美在线不卡视频| www.激情成人| 福利一区二区在线观看| 狠狠色狠狠色综合| 日本不卡视频一二三区| 亚洲成人精品一区| 亚洲激情av在线| 亚洲欧美区自拍先锋| 中文字幕久久午夜不卡| 国产午夜精品一区二区三区嫩草 | 久久综合久久久久88| 欧美精品久久天天躁| 欧美伊人久久大香线蕉综合69| 91在线视频网址| aaa欧美大片| 99麻豆久久久国产精品免费| 国产成人小视频| 国产凹凸在线观看一区二区| 激情文学综合插| 国产呦萝稀缺另类资源| 国产老妇另类xxxxx| 国产乱人伦偷精品视频免下载| 精品一区二区三区的国产在线播放| 日韩黄色片在线观看| 蜜桃在线一区二区三区| 青椒成人免费视频| 九色综合国产一区二区三区| 九九久久精品视频| 国产福利一区二区三区在线视频| 国产丶欧美丶日本不卡视频| 国产不卡在线视频| 精品伦理精品一区| 久久人人超碰精品| 国产精品久久久久婷婷| 亚洲欧美日韩一区| 亚洲一区二区在线视频| 亚洲sss视频在线视频| 日欧美一区二区| 美国一区二区三区在线播放| 国产综合色在线视频区| 成人久久久精品乱码一区二区三区| 国产成人精品免费在线| 91在线视频18| 欧美日韩亚洲国产综合| 日韩一区二区不卡| 国产午夜精品久久久久久免费视 | 91精品国产麻豆国产自产在线 | 国产日韩欧美电影| 国产精品福利av| 亚洲制服丝袜av| 麻豆精品在线播放| 国产iv一区二区三区| 色欧美日韩亚洲| 日韩免费在线观看| 国产精品久久久久影院亚瑟| 亚洲电影激情视频网站| 狠狠久久亚洲欧美| 91亚洲永久精品| 欧美v日韩v国产v| 欧美午夜精品理论片a级按摩| 国产乱色国产精品免费视频| 福利一区二区在线| 欧美日韩一区二区三区四区五区| 色婷婷精品久久二区二区蜜臀av | 欧美xxx久久| 亚洲综合视频在线观看| 成人av在线资源网站| 精品欧美乱码久久久久久1区2区 | 国产精品亚洲а∨天堂免在线| 欧美精品一二三| 亚洲综合色婷婷| 色综合激情久久| 亚洲欧洲日韩av| 成人精品视频一区| 久久精品一二三| 国产精品18久久久久久久久 | 久久日一线二线三线suv| 蜜桃精品在线观看| 日韩精品最新网址| 欧美96一区二区免费视频| 欧美日韩免费不卡视频一区二区三区| 亚洲免费av观看| 色婷婷综合久久久久中文一区二区| 国产精品欧美久久久久一区二区| 国产盗摄一区二区| 欧美激情一二三区| 成人av中文字幕| 日韩码欧中文字| 色综合久久99| 亚洲一区二区视频在线| 欧美久久久久久蜜桃| 琪琪久久久久日韩精品| 欧美成人性战久久| 国产精品亚洲综合一区在线观看| 久久久电影一区二区三区| 成人中文字幕电影| 中文字幕在线不卡视频| 色综合久久综合网欧美综合网 | 奇米777欧美一区二区| 日韩视频一区二区| 国产一区二区三区电影在线观看| 久久久久久久精| 波多野结衣精品在线| 一区二区三区视频在线看| 欧美日韩国产电影| 国内成人精品2018免费看| 日本一区二区视频在线观看| eeuss国产一区二区三区| 亚洲午夜在线观看视频在线| 91麻豆精品国产| 国产麻豆一精品一av一免费 | 亚洲影院在线观看| 91麻豆精品国产91久久久使用方法 | 精品国产一二三区| 岛国av在线一区| 亚洲一区二区三区视频在线 | 精品99999| a亚洲天堂av| 午夜久久久久久久久久一区二区| 欧美一级理论片| caoporn国产精品| 五月天婷婷综合| 久久影院视频免费| 91在线视频18| 毛片不卡一区二区| 亚洲欧洲精品一区二区精品久久久 | ...av二区三区久久精品| 欧美三级视频在线| 精品制服美女久久| 亚洲色图欧美偷拍| 日韩欧美国产小视频| 99国产精品99久久久久久| 亚洲成av人片一区二区三区| 久久久精品蜜桃| 欧美日韩黄色一区二区| 国产aⅴ综合色| 婷婷国产在线综合| 国产精品三级视频| 欧美一区二区观看视频| www.日韩大片| 久久精品国产一区二区三区免费看| 国产精品乱人伦中文| 日韩一区二区精品葵司在线| 91丨九色porny丨蝌蚪| 韩国欧美国产1区| 亚洲高清在线精品| 国产精品不卡在线观看| 日韩欧美国产wwwww| 欧美三级乱人伦电影| 成人av动漫在线| 国内精品久久久久影院色| 亚洲一卡二卡三卡四卡 | 韩国女主播一区| 性做久久久久久| 亚洲免费观看高清完整版在线| 久久久久久久久久久电影| 制服丝袜成人动漫| 在线亚洲欧美专区二区| 成人a免费在线看| 国产精品1区二区.| 轻轻草成人在线| 亚洲在线视频网站| 最好看的中文字幕久久| 国产片一区二区三区| 日韩你懂的在线播放| 欧美日韩午夜在线| 在线观看一区二区精品视频| 不卡电影一区二区三区| 国产夫妻精品视频| 国内精品国产成人| 久久精品久久综合| 美女视频网站久久| 日产欧产美韩系列久久99| 亚洲va欧美va人人爽午夜| 一片黄亚洲嫩模| 亚洲精品五月天| 亚洲视频免费观看| 亚洲人妖av一区二区| 中文字幕日韩一区|