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

📄 agplib.c

📁 gumstiz u-boot loader in linux
💻 C
字号:
/******************************************************************************                   SciTech Nucleus Graphics Architecture**               Copyright (C) 1991-1998 SciTech Software, Inc.*                            All rights reserved.**  ======================================================================*  |REMOVAL OR MODIFICATION OF THIS HEADER IS STRICTLY PROHIBITED BY LAW|*  |                                                                    |*  |This copyrighted computer code contains proprietary technology      |*  |owned by SciTech Software, Inc., located at 505 Wall Street,        |*  |Chico, CA 95928 USA (http://www.scitechsoft.com).                   |*  |                                                                    |*  |The contents of this file are subject to the SciTech Nucleus        |*  |License; you may *not* use this file or related software except in  |*  |compliance with the License. You may obtain a copy of the License   |*  |at http://www.scitechsoft.com/nucleus-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.                           |*  |                                                                    |*  |REMOVAL OR MODIFICATION OF THIS HEADER IS STRICTLY PROHIBITED BY LAW|*  ======================================================================** Language:     ANSI C* Environment:  Any 32-bit protected mode environment** Description:  C module for the Graphics Accelerator Driver API. Uses*               the SciTech PM library for interfacing with DOS*               extender specific functions.*****************************************************************************/#include "nucleus/graphics.h"#include "nucleus/agp.h"/*---------------------------- Global Variables ---------------------------*/#ifndef DEBUG_AGP_DRIVERstatic AGP_exports  _AGP_exports;static int          loaded = false;static PE_MODULE    *hModBPD = NULL;static N_imports _N_imports = {    sizeof(N_imports),    _OS_delay,    };static AGP_imports _AGP_imports = {    sizeof(AGP_imports),    };#endif#include "pmimp.h"/*----------------------------- Implementation ----------------------------*/#define DLL_NAME        "agp.bpd"#ifndef DEBUG_AGP_DRIVER/****************************************************************************REMARKS:Fatal error handler for non-exported GA_exports.****************************************************************************/static void _AGP_fatalErrorHandler(void){    PM_fatalError("Unsupported AGP export function called! Please upgrade your copy of AGP!\n");}/****************************************************************************PARAMETERS:shared  - True to load the driver into shared memory.REMARKS:Loads the Nucleus binary portable DLL into memory and initilises it.****************************************************************************/static ibool LoadDriver(void){    AGP_initLibrary_t   AGP_initLibrary;    AGP_exports         *agpExp;    char                filename[PM_MAX_PATH];    char                bpdpath[PM_MAX_PATH];    int                 i,max;    ulong               *p;    /* Check if we have already loaded the driver */    if (loaded)	return true;    PM_init();    /* Open the BPD file */    if (!PM_findBPD(DLL_NAME,bpdpath))	return false;    strcpy(filename,bpdpath);    strcat(filename,DLL_NAME);    if ((hModBPD = PE_loadLibrary(filename,false)) == NULL)	return false;    if ((AGP_initLibrary = (AGP_initLibrary_t)PE_getProcAddress(hModBPD,"_AGP_initLibrary")) == NULL)	return false;    bpdpath[strlen(bpdpath)-1] = 0;    if (strcmp(bpdpath,PM_getNucleusPath()) == 0)	strcpy(bpdpath,PM_getNucleusConfigPath());    else {	PM_backslash(bpdpath);	strcat(bpdpath,"config");	}    if ((agpExp = AGP_initLibrary(bpdpath,filename,GA_getSystemPMImports(),&_N_imports,&_AGP_imports)) == NULL)	PM_fatalError("AGP_initLibrary failed!\n");    _AGP_exports.dwSize = sizeof(_AGP_exports);    max = sizeof(_AGP_exports)/sizeof(AGP_initLibrary_t);    for (i = 0,p = (ulong*)&_AGP_exports; i < max; i++)	*p++ = (ulong)_AGP_fatalErrorHandler;    memcpy(&_AGP_exports,agpExp,MIN(sizeof(_AGP_exports),agpExp->dwSize));    loaded = true;    return true;}/* The following are stub entry points that the application calls to * initialise the Nucleus loader library, and we use this to load our * driver DLL from disk and initialise the library using it. *//* {secret} */int NAPI AGP_status(void){    if (!loaded)	return nDriverNotFound;    return _AGP_exports.AGP_status();}/* {secret} */const char * NAPI AGP_errorMsg(    N_int32 status){    if (!loaded)	return "Unable to load Nucleus device driver!";    return _AGP_exports.AGP_errorMsg(status);}/* {secret} */AGP_devCtx * NAPI AGP_loadDriver(N_int32 deviceIndex){    if (!LoadDriver())	return NULL;    return _AGP_exports.AGP_loadDriver(deviceIndex);}/* {secret} */void NAPI AGP_unloadDriver(    AGP_devCtx *dc){    if (loaded)	_AGP_exports.AGP_unloadDriver(dc);}/* {secret} */void NAPI AGP_getGlobalOptions(    AGP_globalOptions *options){    if (LoadDriver())	_AGP_exports.AGP_getGlobalOptions(options);}/* {secret} */void NAPI AGP_setGlobalOptions(    AGP_globalOptions *options){    if (LoadDriver())	_AGP_exports.AGP_setGlobalOptions(options);}/* {secret} */void NAPI AGP_saveGlobalOptions(    AGP_globalOptions *options){    if (loaded)	_AGP_exports.AGP_saveGlobalOptions(options);}#endif/* {secret} */void NAPI _OS_delay8253(N_uint32 microSeconds);/****************************************************************************REMARKS:This function delays for the specified number of microseconds****************************************************************************/void NAPI _OS_delay(    N_uint32 microSeconds){    static ibool    inited = false;    static ibool    haveRDTSC;    LZTimerObject   tm;    if (!inited) {#ifndef __WIN32_VXD__	/* This has been causing problems in VxD's for some reason, so for now */	/* we avoid using it. */	if (_GA_haveCPUID() && (_GA_getCPUIDFeatures() & CPU_HaveRDTSC) != 0) {	    ZTimerInit();	    haveRDTSC = true;	    }	else#endif	    haveRDTSC = false;	inited = true;	}    if (haveRDTSC) {	LZTimerOnExt(&tm);	while (LZTimerLapExt(&tm) < microSeconds)	    ;	LZTimerOnExt(&tm);	}    else	_OS_delay8253(microSeconds);}

⌨️ 快捷键说明

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