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

📄 pm.c

📁 gumstiz u-boot loader in linux
💻 C
📖 第 1 页 / 共 5 页
字号:
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;}/****************************************************************************REMARKS:Function to set the file time and date for a specific file.****************************************************************************/ibool PMAPI PM_setFileTime(    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,(PVOID)&fs3,sizeof(fs3)))	return false;    if (gmTime) {	tc.tm_year = time->year + 80;	tc.tm_mon = time->mon - 1;	tc.tm_mday = time->day;	tc.tm_hour = time->hour;	tc.tm_min = time->min;	tc.tm_sec = time->sec;	if((tt = mktime(&tc)) == -1)	    return false;	ret = localtime(&tt);	fs3.ftimeLastWrite.twosecs = ret->tm_sec / 2;	fs3.fdateLastWrite.day = ret->tm_mday;	fs3.fdateLastWrite.month = ret->tm_mon + 1;	fs3.fdateLastWrite.year = ret->tm_year - 80;	fs3.ftimeLastWrite.minutes = ret->tm_min;	fs3.ftimeLastWrite.hours = ret->tm_hour;	}    else {	fs3.ftimeLastWrite.twosecs = time->sec / 2;	fs3.fdateLastWrite.day = time->day;	fs3.fdateLastWrite.month = time->mon;	fs3.fdateLastWrite.year = time->year;	fs3.ftimeLastWrite.minutes = time->min;	fs3.ftimeLastWrite.hours = time->hour;	}    memcpy(&fs3.fdateLastAccess, &fs3.fdateLastWrite, sizeof(FDATE));    memcpy(&fs3.fdateCreation, &fs3.fdateLastWrite, sizeof(FDATE));    memcpy(&fs3.ftimeLastAccess, &fs3.ftimeLastWrite, sizeof(FTIME));    memcpy(&fs3.ftimeCreation, &fs3.ftimeLastWrite, sizeof(FTIME));    DosSetPathInfo((PSZ)filename,FIL_STANDARD,(PVOID)&fs3,sizeof(FILESTATUS3),0L);    return true;}

⌨️ 快捷键说明

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