Files
epics-base/modules/libcom/src/osi/devLibVMEImpl.h
2020-05-19 18:04:26 -05:00

89 lines
3.0 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.
\*************************************************************************/
/**
* \file devLibVMEImpl.h
* \author Marty Kraimer, Jeff Hill
* \brief An interface from devLibVME.c to its OS-specific implementations.
*/
#ifndef INCdevLibImplh
#define INCdevLibImplh 1
#include "dbDefs.h"
#include "shareLib.h"
#include "devLib.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* \brief A table of function pointers for devLibVME implementations
*
* The global virtual OS table \ref 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 {
/** \brief Map a bus address to the CPU's address space. */
long (*pDevMapAddr) (epicsAddressType addrType, unsigned options,
size_t logicalAddress, size_t size, volatile void **ppPhysicalAddress);
/** \brief Read a word, detect and protect against bus errors. */
long (*pDevReadProbe) (unsigned wordSize, volatile const void *ptr,
void *pValueRead);
/** \brief Write a word, detect and protect against bus errors. */
long (*pDevWriteProbe) (unsigned wordSize, volatile void *ptr,
const void *pValueWritten);
/** \brief Connect ISR to a VME interrupt vector. */
long (*pDevConnectInterruptVME) (unsigned vectorNumber,
void (*pFunction)(void *), void *parameter);
/** \brief Disconnect ISR from a VME interrupt vector. */
long (*pDevDisconnectInterruptVME) (unsigned vectorNumber,
void (*pFunction)(void *));
/** \brief Enable VME interrupt level to CPU. */
long (*pDevEnableInterruptLevelVME) (unsigned level);
/** \brief Disable VME interrupt level to CPU. */
long (*pDevDisableInterruptLevelVME) (unsigned level);
/** \brief Malloc a block accessible from the VME A24 address space. */
void *(*pDevA24Malloc)(size_t nbytes);
/** \brief Free a block allocated for the VME A24 address space. */
void (*pDevA24Free)(void *pBlock);
/** \brief Init devLib */
long (*pDevInit)(void);
/** \brief Check if interrupt vector has an ISR connected. */
int (*pDevInterruptInUseVME)(unsigned vectorNumber);
}devLibVME;
/** \brief Pointer to the entry table used by devLibVME routines. */
epicsShareExtern devLibVME *pdevLibVME;
#ifndef NO_DEVLIB_COMPAT
/** \brief An alias for pdevLibVME */
# define pdevLibVirtualOS pdevLibVME
/** \brief A type definition for devLibVME */
typedef devLibVME devLibVirtualOS;
#endif
#ifdef __cplusplus
}
#endif
#endif /* INCdevLibImplh */