105 lines
2.9 KiB
C
105 lines
2.9 KiB
C
/*************************************************************************\
|
|
* Copyright (c) 2010 Brookhaven Science Associates, as Operator of
|
|
* Brookhaven National Laboratory.
|
|
* Copyright (c) 2008 UChicago Argonne LLC, as Operator of Argonne
|
|
* National Laboratory.
|
|
* Copyright (c) 2002 The Regents of the University of California, as
|
|
* Operator of Los Alamos National Laboratory.
|
|
* EPICS BASE is distributed subject to a Software License Agreement found
|
|
* in file LICENSE that is included with this distribution.
|
|
\*************************************************************************/
|
|
/* devLibImpl.h */
|
|
/* */
|
|
|
|
/*
|
|
* Original Author: Marty Kraimer
|
|
* Author: Jeff Hill
|
|
* Date: 03-10-93
|
|
*/
|
|
|
|
#ifndef INCdevLibImplh
|
|
#define INCdevLibImplh 1
|
|
|
|
#include "dbDefs.h"
|
|
#include "shareLib.h"
|
|
#include "devLib.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*
|
|
* virtual OS layer for devLib.c
|
|
*
|
|
* The global virtual OS table pdevLibVME controls
|
|
* the behaviour of the functions defined in devLib.h.
|
|
* All of which call into the functions found in this table
|
|
* to perform system specific tasks.
|
|
*/
|
|
typedef struct devLibVME {
|
|
/*
|
|
* maps logical address to physical address, but does not detect
|
|
* two device drivers that are using the same address range
|
|
*/
|
|
long (*pDevMapAddr) (epicsAddressType addrType, unsigned options,
|
|
size_t logicalAddress, size_t size, volatile void **ppPhysicalAddress);
|
|
|
|
/*
|
|
* a bus error safe "wordSize" read at the specified address which returns
|
|
* unsuccessful status if the device isnt present
|
|
*/
|
|
long (*pDevReadProbe) (unsigned wordSize, volatile const void *ptr, void *pValueRead);
|
|
|
|
/*
|
|
* a bus error safe "wordSize" write at the specified address which returns
|
|
* unsuccessful status if the device isnt present
|
|
*/
|
|
long (*pDevWriteProbe) (unsigned wordSize, volatile void *ptr, const void *pValueWritten);
|
|
|
|
/*
|
|
* connect ISR to a VME interrupt vector
|
|
* (required for backwards compatibility)
|
|
*/
|
|
long (*pDevConnectInterruptVME) (unsigned vectorNumber,
|
|
void (*pFunction)(void *), void *parameter);
|
|
|
|
/*
|
|
* disconnect ISR from a VME interrupt vector
|
|
* (required for backwards compatibility)
|
|
*/
|
|
long (*pDevDisconnectInterruptVME) (unsigned vectorNumber,
|
|
void (*pFunction)(void *));
|
|
|
|
/*
|
|
* enable VME interrupt level
|
|
*/
|
|
long (*pDevEnableInterruptLevelVME) (unsigned level);
|
|
|
|
/*
|
|
* disable VME interrupt level
|
|
*/
|
|
long (*pDevDisableInterruptLevelVME) (unsigned level);
|
|
/* malloc/free A24 address space */
|
|
void *(*pDevA24Malloc)(size_t nbytes);
|
|
void (*pDevA24Free)(void *pBlock);
|
|
long (*pDevInit)(void);
|
|
|
|
/*
|
|
* test if VME interrupt has an ISR connected
|
|
*/
|
|
int (*pDevInterruptInUseVME) (unsigned vectorNumber);
|
|
}devLibVME;
|
|
|
|
epicsShareExtern devLibVME *pdevLibVME;
|
|
|
|
#ifndef NO_DEVLIB_COMPAT
|
|
# define pdevLibVirtualOS pdevLibVME
|
|
#endif
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* INCdevLibImplh */
|