diff options
Diffstat (limited to 'drivers/staging/epl/edrv.h')
-rw-r--r-- | drivers/staging/epl/edrv.h | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/drivers/staging/epl/edrv.h b/drivers/staging/epl/edrv.h new file mode 100644 index 0000000..139523c --- /dev/null +++ b/drivers/staging/epl/edrv.h @@ -0,0 +1,183 @@ +/**************************************************************************** + + (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29 + www.systec-electronic.com + + Project: openPOWERLINK + + Description: interface for ethernetdriver + + License: + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. Neither the name of SYSTEC electronic GmbH nor the names of its + contributors may be used to endorse or promote products derived + from this software without prior written permission. For written + permission, please contact info@systec-electronic.com. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + + Severability Clause: + + If a provision of this License is or becomes illegal, invalid or + unenforceable in any jurisdiction, that shall not affect: + 1. the validity or enforceability in that jurisdiction of any other + provision of this License; or + 2. the validity or enforceability in other jurisdictions of that or + any other provision of this License. + + ------------------------------------------------------------------------- + + $RCSfile: edrv.h,v $ + + $Author: D.Krueger $ + + $Revision: 1.6 $ $Date: 2008/04/17 21:36:32 $ + + $State: Exp $ + + Build Environment: + Dev C++ and GNU-Compiler for m68k + + ------------------------------------------------------------------------- + + Revision History: + + 2005/08/01 m.b.: start of implementation + +****************************************************************************/ + +#ifndef _EDRV_H_ +#define _EDRV_H_ + +#include "EplInc.h" +#include "EplFrame.h" + +//--------------------------------------------------------------------------- +// const defines +//--------------------------------------------------------------------------- +// -------------------------------------------------------------------------- +#define MAX_ETH_DATA_SIZE 1500 +#define MIN_ETH_DATA_SIZE 46 + +#define ETH_HDR_OFFSET 0 // Ethernet header at the top of the frame +#define ETH_HDR_SIZE 14 // size of Ethernet header +#define MIN_ETH_SIZE (MIN_ETH_DATA_SIZE + ETH_HDR_SIZE) // without CRC + +#define ETH_CRC_SIZE 4 // size of Ethernet CRC, i.e. FCS + + + +//--------------------------------------------------------------------------- +// types +//--------------------------------------------------------------------------- + +// position of a buffer in an ethernet-frame +typedef enum +{ + kEdrvBufferFirstInFrame = 0x01, // first data buffer in an ethernet frame + kEdrvBufferMiddleInFrame = 0x02, // a middle data buffer in an ethernet frame + kEdrvBufferLastInFrame = 0x04 // last data buffer in an ethernet frame +} tEdrvBufferInFrame; + + +// format of a tx-buffer +typedef struct _tEdrvTxBuffer +{ + tEplMsgType m_EplMsgType; // IN: type of EPL message, set by calling function + unsigned int m_uiTxMsgLen; // IN: length of message to be send (set for each transmit call) + // ---------------------- + unsigned int m_uiBufferNumber; // OUT: number of the buffer, set by ethernetdriver + BYTE * m_pbBuffer; // OUT: pointer to the buffer, set by ethernetdriver + tEplNetTime m_NetTime; // OUT: Timestamp of end of transmission, set by ethernetdriver + // ---------------------- + unsigned int m_uiMaxBufferLen; // IN/OUT: maximum length of the buffer +} tEdrvTxBuffer; + +// format of a rx-buffer +typedef struct _tEdrvRxBuffer +{ + tEdrvBufferInFrame m_BufferInFrame; // OUT position of received buffer in an ethernet-frame + unsigned int m_uiRxMsgLen; // OUT: length of received buffer (without CRC) + BYTE * m_pbBuffer; // OUT: pointer to the buffer, set by ethernetdriver + tEplNetTime m_NetTime; // OUT: Timestamp of end of receiption + +} tEdrvRxBuffer; + + + +//typedef void (*tEdrvRxHandler) (BYTE bBufferInFrame_p, tBufferDescr * pbBuffer_p); +//typedef void (*tEdrvRxHandler) (BYTE bBufferInFrame_p, BYTE * pbEthernetData_p, WORD wDataLen_p); +typedef void (*tEdrvRxHandler) (tEdrvRxBuffer * pRxBuffer_p); +typedef void (*tEdrvTxHandler) (tEdrvTxBuffer * pTxBuffer_p); + + +// format of init structure +typedef struct +{ + BYTE m_abMyMacAddr[6]; // the own MAC address + +// BYTE m_bNoOfRxBuffDescr; // number of entries in rx bufferdescriptor table +// tBufferDescr * m_pRxBuffDescrTable; // rx bufferdescriptor table +// WORD m_wRxBufferSize; // size of the whole rx buffer + + tEdrvRxHandler m_pfnRxHandler; + tEdrvTxHandler m_pfnTxHandler; + +} tEdrvInitParam; + + +//--------------------------------------------------------------------------- +// function prototypes +//--------------------------------------------------------------------------- + + +tEplKernel EdrvInit (tEdrvInitParam* pEdrvInitParam_p); + +tEplKernel EdrvShutdown (void); + +tEplKernel EdrvDefineRxMacAddrEntry (BYTE * pbMacAddr_p); +tEplKernel EdrvUndefineRxMacAddrEntry (BYTE * pbMacAddr_p); + +//tEplKernel EdrvDefineUnicastEntry (BYTE * pbUCEntry_p); +//tEplKernel EdrvUndfineUnicastEntry (BYTE * pbUCEntry_p); + +tEplKernel EdrvAllocTxMsgBuffer (tEdrvTxBuffer * pBuffer_p); +tEplKernel EdrvReleaseTxMsgBuffer (tEdrvTxBuffer * pBuffer_p); + +//tEplKernel EdrvWriteMsg (tBufferDescr * pbBuffer_p); +tEplKernel EdrvSendTxMsg (tEdrvTxBuffer * pBuffer_p); +tEplKernel EdrvTxMsgReady (tEdrvTxBuffer * pBuffer_p); +tEplKernel EdrvTxMsgStart (tEdrvTxBuffer * pBuffer_p); + +//tEplKernel EdrvReadMsg (void); + +// interrupt handler called by target specific interrupt handler +void EdrvInterruptHandler (void); + + + +#endif // #ifndef _EDRV_H_ + + |