| /**************************************************************************** |
| * |
| * 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: QNX |
| * |
| * Description: OS specific Nucleus Graphics Architecture services for |
| * the QNX operating system. |
| * |
| ****************************************************************************/ |
| |
| #include "nucleus/graphics.h" |
| #include <time.h> |
| |
| /*---------------------------- Global Variables ---------------------------*/ |
| |
| static ibool haveRDTSC; |
| |
| /*-------------------------- Implementation -------------------------------*/ |
| |
| /**************************************************************************** |
| PARAMETERS: |
| path - Local path to the Nucleus driver files. |
| |
| REMARKS: |
| This function is used by the application program to override the location |
| of the Nucleus driver files that are loaded. Normally the loader code |
| will look in the system Nucleus directories first, then in the 'drivers' |
| directory relative to the current working directory, and finally relative |
| to the MGL_ROOT environment variable. |
| ****************************************************************************/ |
| void NAPI GA_setLocalPath( |
| const char *path) |
| { |
| PM_setLocalBPDPath(path); |
| } |
| |
| /**************************************************************************** |
| RETURNS: |
| Pointer to the system wide PM library imports, or the internal version if none |
| |
| REMARKS: |
| In order to support deploying new Nucleus drivers that may require updated |
| PM library functions, we check here to see if there is a system wide version |
| of the PM functions available. If so we return those functions for use with |
| the system wide Nucleus drivers, otherwise the compiled in version of the PM |
| library is used with the application local version of Nucleus. |
| ****************************************************************************/ |
| PM_imports * NAPI GA_getSystemPMImports(void) |
| { |
| // TODO: We may very well want to provide a system shared library |
| // that eports the PM functions required by the Nucleus library |
| // for QNX here. That will eliminate fatal errors loading new |
| // drivers on QNX! |
| return &_PM_imports; |
| } |
| |
| /**************************************************************************** |
| REMARKS: |
| Nothing special for this OS. |
| ****************************************************************************/ |
| ibool NAPI GA_getSharedExports( |
| GA_exports *gaExp, |
| ibool shared) |
| { |
| (void)gaExp; |
| (void)shared; |
| return false; |
| } |
| |
| #ifndef TEST_HARNESS |
| /**************************************************************************** |
| REMARKS: |
| Nothing special for this OS |
| ****************************************************************************/ |
| ibool NAPI GA_queryFunctions( |
| GA_devCtx *dc, |
| N_uint32 id, |
| void _FAR_ *funcs) |
| { |
| return __GA_exports.GA_queryFunctions(dc,id,funcs); |
| } |
| |
| /**************************************************************************** |
| REMARKS: |
| Nothing special for this OS |
| ****************************************************************************/ |
| ibool NAPI REF2D_queryFunctions( |
| REF2D_driver *ref2d, |
| N_uint32 id, |
| void _FAR_ *funcs) |
| { |
| return __GA_exports.REF2D_queryFunctions(ref2d,id,funcs); |
| } |
| #endif |
| |
| /**************************************************************************** |
| REMARKS: |
| This function initialises the high precision timing functions for the |
| Nucleus loader library. |
| ****************************************************************************/ |
| ibool NAPI GA_TimerInit(void) |
| { |
| if (_GA_haveCPUID() && (_GA_getCPUIDFeatures() & CPU_HaveRDTSC) != 0) |
| haveRDTSC = true; |
| return true; |
| } |
| |
| /**************************************************************************** |
| REMARKS: |
| This function reads the high resolution timer. |
| ****************************************************************************/ |
| void NAPI GA_TimerRead( |
| GA_largeInteger *value) |
| { |
| if (haveRDTSC) |
| _GA_readTimeStamp(value); |
| else { |
| struct timespec ts; |
| |
| clock_gettime(CLOCK_REALTIME, &ts); |
| value->low = (ts.tv_nsec / 1000 + ts.tv_sec * 1000000); |
| value->high = 0; |
| } |
| } |