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

📄 pm.c

📁 AT91RM9200-U-Boot at91rm9200u-boot移植源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
void PMAPI PM_setCRTStart(    int x,    int y,    int waitVRT){    INTCRF  rmregs;    if (!InitInt10())        return;    memset(&rmregs, 0, sizeof(rmregs));    rmregs.ulBIOSIntNo = 0x10;    rmregs.aCRF.reg_eax = 0x4F07;    rmregs.aCRF.reg_ebx = waitVRT;    rmregs.aCRF.reg_ecx = x;    rmregs.aCRF.reg_edx = y;    PM_VIDEOPMI32Request(&Adapter,PMIREQUEST_SOFTWAREINT,&rmregs,NULL);}/****************************************************************************REMARKS:Execute the POST on the secondary BIOS for a controller.****************************************************************************/ibool PMAPI PM_doBIOSPOST(    ushort axVal,    ulong BIOSPhysAddr,    void *mappedBIOS,    ulong BIOSLen){    (void)axVal;    (void)BIOSPhysAddr;    (void)mappedBIOS;    (void)BIOSLen;    return false;}/****************************************************************************PARAMETERS:base    - The starting physical base address of the regionsize    - The size in bytes of the regiontype    - Type to place into the MTRR registerRETURNS:Error code describing the result.REMARKS:Function to enable write combining for the specified region of memory.****************************************************************************/int PMAPI PM_enableWriteCombine(    ulong base,    ulong size,    uint type){    return MTRR_enableWriteCombine(base,size,type);}// TODO: Move the MTRR helper stuff into the call gate, or better yet//       entirely into the ring 0 helper driver!!/* MTRR helper functions. To make it easier to implement the MTRR support * under OS/2, we simply put our ring 0 helper functions into the * helper device driver rather than the entire MTRR module. This makes * it easier to maintain the MTRR support since we don't need to deal * with 16-bit ring 0 code in the MTRR library. *//****************************************************************************REMARKS:Flush the translation lookaside buffer.****************************************************************************/void PMAPI PM_flushTLB(void){    CallSDDHelp(PMHELP_FLUSHTLB);}/****************************************************************************REMARKS:Return true if ring 0 (or if we can call the helpers functions at ring 0)****************************************************************************/ibool _ASMAPI _MTRR_isRing0(void){    return true;}/****************************************************************************REMARKS:Read and return the value of the CR4 register****************************************************************************/ulong _ASMAPI _MTRR_saveCR4(void){    return CallSDDHelp(PMHELP_SAVECR4);}/****************************************************************************REMARKS:Restore the value of the CR4 register****************************************************************************/void _ASMAPI _MTRR_restoreCR4(ulong cr4Val){    parmsIn[0] = cr4Val;    CallSDDHelp(PMHELP_RESTORECR4);}/****************************************************************************REMARKS:Read a machine status register for the CPU.****************************************************************************/void _ASMAPI _MTRR_readMSR(    ulong reg,    ulong *eax,    ulong *edx){    parmsIn[0] = reg;    CallSDDHelp(PMHELP_READMSR);    *eax = parmsOut[0];    *edx = parmsOut[1];}/****************************************************************************REMARKS:Write a machine status register for the CPU.****************************************************************************/void _ASMAPI _MTRR_writeMSR(    ulong reg,    ulong eax,    ulong edx){    parmsIn[0] = reg;    parmsIn[1] = eax;    parmsIn[2] = edx;    CallSDDHelp(PMHELP_WRITEMSR);}PM_MODULE PMAPI PM_loadLibrary(    const char *szDLLName){    // TODO: Implement this to load shared libraries!    (void)szDLLName;    return NULL;}void * PMAPI PM_getProcAddress(    PM_MODULE hModule,    const char *szProcName){    // TODO: Implement this!    (void)hModule;    (void)szProcName;    return NULL;}void PMAPI PM_freeLibrary(    PM_MODULE hModule){    // TODO: Implement this!    (void)hModule;}/****************************************************************************REMARKS:Internal function to convert the find data to the generic interface.****************************************************************************/static void convertFindData(    PM_findData *findData,    FILEFINDBUF3 *blk){    ulong   dwSize = findData->dwSize;    memset(findData,0,findData->dwSize);    findData->dwSize = dwSize;    if (blk->attrFile & FILE_READONLY)        findData->attrib |= PM_FILE_READONLY;    if (blk->attrFile & FILE_DIRECTORY)        findData->attrib |= PM_FILE_DIRECTORY;    if (blk->attrFile & FILE_ARCHIVED)        findData->attrib |= PM_FILE_ARCHIVE;    if (blk->attrFile & FILE_HIDDEN)        findData->attrib |= PM_FILE_HIDDEN;    if (blk->attrFile & FILE_SYSTEM)        findData->attrib |= PM_FILE_SYSTEM;    findData->sizeLo = blk->cbFile;    findData->sizeHi = 0;    strncpy(findData->name,blk->achName,PM_MAX_PATH);    findData->name[PM_MAX_PATH-1] = 0;}#define FIND_MASK   (FILE_ARCHIVED | FILE_DIRECTORY | FILE_SYSTEM | FILE_HIDDEN | FILE_READONLY)/****************************************************************************REMARKS:Function to find the first file matching a search criteria in a directory.****************************************************************************/void *PMAPI PM_findFirstFile(    const char *filename,    PM_findData *findData){    FILEFINDBUF3    blk;    HDIR            hdir = HDIR_CREATE;    ulong           count = 1;    if (DosFindFirst((PSZ)filename,&hdir,FIND_MASK,&blk,sizeof(blk),&count,FIL_STANDARD) == NO_ERROR) {        convertFindData(findData,&blk);        return (void*)hdir;        }    return PM_FILE_INVALID;}/****************************************************************************REMARKS:Function to find the next file matching a search criteria in a directory.****************************************************************************/ibool PMAPI PM_findNextFile(    void *handle,    PM_findData *findData){    FILEFINDBUF3    blk;    ulong           count = 1;    if (DosFindNext((HDIR)handle,&blk,sizeof(blk),&count) == NO_ERROR) {        convertFindData(findData,&blk);        return true;        }    return false;}/****************************************************************************REMARKS:Function to close the find process****************************************************************************/void PMAPI PM_findClose(    void *handle){    DosFindClose((HDIR)handle);}/****************************************************************************REMARKS:Function to determine if a drive is a valid drive or not. Under Unix thisfunction will return false for anything except a value of 3 (consideredthe root drive, and equivalent to C: for non-Unix systems). The drivenumbering is:    0   - Current drive    1   - Drive A:    2   - Drive B:    3   - Drive C:    etc****************************************************************************/ibool PMAPI PM_driveValid(    char drive){    ulong   cntDisk,cntDriveMap;    ibool   valid;    DosQueryCurrentDisk(&cntDisk,&cntDriveMap);    valid = (DosSetDefaultDisk(drive) == NO_ERROR);    DosSetDefaultDisk(cntDisk);    return valid;}/****************************************************************************REMARKS:Function to get the current working directory for the specififed drive.Under Unix this will always return the current working directory regardlessof what the value of 'drive' is.****************************************************************************/void PMAPI PM_getdcwd(    int drive,    char *dir,    int len){    ulong length = len;    DosQueryCurrentDir(drive, (PSZ)dir, &length);}/****************************************************************************REMARKS:Function to change the file attributes for a specific file.****************************************************************************/void PMAPI PM_setFileAttr(    const char *filename,    uint attrib){    FILESTATUS3 s;    if (DosQueryPathInfo((PSZ)filename,FIL_STANDARD,(PVOID)&s,sizeof(s)))        return;    s.attrFile = 0;    if (attrib & PM_FILE_READONLY)        s.attrFile |= FILE_READONLY;    if (attrib & PM_FILE_ARCHIVE)        s.attrFile |= FILE_ARCHIVED;    if (attrib & PM_FILE_HIDDEN)        s.attrFile |= FILE_HIDDEN;    if (attrib & PM_FILE_SYSTEM)        s.attrFile |= FILE_SYSTEM;    DosSetPathInfo((PSZ)filename,FIL_STANDARD,(PVOID)&s,sizeof(s),0L);}/****************************************************************************REMARKS:Function to get the file attributes for a specific file.****************************************************************************/uint PMAPI PM_getFileAttr(    const char *filename){    FILESTATUS3 fs3;    uint        retval = 0;    if (DosQueryPathInfo((PSZ)filename, FIL_STANDARD, &fs3, sizeof(FILESTATUS3)))        return 0;    if (fs3.attrFile & FILE_READONLY)        retval |= PM_FILE_READONLY;    if (fs3.attrFile & FILE_ARCHIVED)        retval |= PM_FILE_ARCHIVE;    if (fs3.attrFile & FILE_HIDDEN)        retval |= PM_FILE_HIDDEN;    if (fs3.attrFile & FILE_SYSTEM)        retval |= PM_FILE_SYSTEM;    return retval;}/****************************************************************************REMARKS:Function to create a directory.****************************************************************************/ibool PMAPI PM_mkdir(    const char *filename){    return DosCreateDir((PSZ)filename,NULL) == NO_ERROR;}/****************************************************************************REMARKS:Function to remove a directory.****************************************************************************/ibool PMAPI PM_rmdir(    const char *filename){    return DosDeleteDir((PSZ)filename) == NO_ERROR;}/****************************************************************************REMARKS:Function to get the file time and date for a specific file.****************************************************************************/ibool PMAPI PM_getFileTime(    const char *filename,    ibool gmTime,    PM_time *time){    FILESTATUS3 fs3;    struct tm   tc;    struct tm   *ret;    time_t      tt;    if (DosQueryPathInfo((PSZ)filename, FIL_STANDARD, &fs3, sizeof(FILESTATUS3)))        return false;    if (gmTime) {        tc.tm_year = fs3.fdateLastWrite.year + 80;        tc.tm_mon = fs3.fdateLastWrite.month - 1;        tc.tm_mday = fs3.fdateLastWrite.day;        tc.tm_hour = fs3.ftimeLastWrite.hours;        tc.tm_min = fs3.ftimeLastWrite.minutes;        tc.tm_sec = fs3.ftimeLastWrite.twosecs * 2;        if((tt = mktime(&tc)) == -1)            return false;        if(!(ret = gmtime(&tt)))            return false;        time->sec = ret->tm_sec;        time->day = ret->tm_mday;        time->mon = ret->tm_mon + 1;        time->year = ret->tm_year - 80;        time->min = ret->tm_min;        time->hour = ret->tm_hour;        }    else {        time->sec = fs3.ftimeLastWrite.twosecs * 2;        time->day = fs3.fdateLastWrite.day;        time->mon = fs3.fdateLastWrite.month;        time->year = fs3.fdateLastWrite.year;        time->min = fs3.ftimeLastWrite.minutes;        time->hour = fs3.ftimeLastWrite.hours;        }    return true;}/*******************************************************************

⌨️ 快捷键说明

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