1 /**************************************************************************** 2 3 (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29 4 www.systec-electronic.com 5 6 Project: openPOWERLINK 7 8 Description: interface for ethernetdriver 9 10 License: 11 12 Redistribution and use in source and binary forms, with or without 13 modification, are permitted provided that the following conditions 14 are met: 15 16 1. Redistributions of source code must retain the above copyright 17 notice, this list of conditions and the following disclaimer. 18 19 2. Redistributions in binary form must reproduce the above copyright 20 notice, this list of conditions and the following disclaimer in the 21 documentation and/or other materials provided with the distribution. 22 23 3. Neither the name of SYSTEC electronic GmbH nor the names of its 24 contributors may be used to endorse or promote products derived 25 from this software without prior written permission. For written 26 permission, please contact info@systec-electronic.com. 27 28 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 29 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 30 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 31 FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 32 COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 33 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 34 BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 35 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 36 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 37 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 38 ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 39 POSSIBILITY OF SUCH DAMAGE. 40 41 Severability Clause: 42 43 If a provision of this License is or becomes illegal, invalid or 44 unenforceable in any jurisdiction, that shall not affect: 45 1. the validity or enforceability in that jurisdiction of any other 46 provision of this License; or 47 2. the validity or enforceability in other jurisdictions of that or 48 any other provision of this License. 49 50 ------------------------------------------------------------------------- 51 52 $RCSfile: edrv.h,v $ 53 54 $Author: D.Krueger $ 55 56 $Revision: 1.6 $ $Date: 2008/04/17 21:36:32 $ 57 58 $State: Exp $ 59 60 Build Environment: 61 Dev C++ and GNU-Compiler for m68k 62 63 ------------------------------------------------------------------------- 64 65 Revision History: 66 67 2005/08/01 m.b.: start of implementation 68 69 ****************************************************************************/ 70 71 #ifndef _EDRV_H_ 72 #define _EDRV_H_ 73 74 #include "EplInc.h" 75 #include "EplFrame.h" 76 77 //--------------------------------------------------------------------------- 78 // const defines 79 //--------------------------------------------------------------------------- 80 // -------------------------------------------------------------------------- 81 #define MAX_ETH_DATA_SIZE 1500 82 #define MIN_ETH_DATA_SIZE 46 83 84 #define ETH_HDR_OFFSET 0 // Ethernet header at the top of the frame 85 #define ETH_HDR_SIZE 14 // size of Ethernet header 86 #define MIN_ETH_SIZE (MIN_ETH_DATA_SIZE + ETH_HDR_SIZE) // without CRC 87 88 #define ETH_CRC_SIZE 4 // size of Ethernet CRC, i.e. FCS 89 90 //--------------------------------------------------------------------------- 91 // types 92 //--------------------------------------------------------------------------- 93 94 // position of a buffer in an ethernet-frame 95 typedef enum { 96 kEdrvBufferFirstInFrame = 0x01, // first data buffer in an ethernet frame 97 kEdrvBufferMiddleInFrame = 0x02, // a middle data buffer in an ethernet frame 98 kEdrvBufferLastInFrame = 0x04 // last data buffer in an ethernet frame 99 } tEdrvBufferInFrame; 100 101 // format of a tx-buffer 102 typedef struct _tEdrvTxBuffer { 103 tEplMsgType m_EplMsgType; // IN: type of EPL message, set by calling function 104 unsigned int m_uiTxMsgLen; // IN: length of message to be send (set for each transmit call) 105 // ---------------------- 106 unsigned int m_uiBufferNumber; // OUT: number of the buffer, set by ethernetdriver 107 BYTE *m_pbBuffer; // OUT: pointer to the buffer, set by ethernetdriver 108 tEplNetTime m_NetTime; // OUT: Timestamp of end of transmission, set by ethernetdriver 109 // ---------------------- 110 unsigned int m_uiMaxBufferLen; // IN/OUT: maximum length of the buffer 111 } tEdrvTxBuffer; 112 113 // format of a rx-buffer 114 typedef struct _tEdrvRxBuffer { 115 tEdrvBufferInFrame m_BufferInFrame; // OUT position of received buffer in an ethernet-frame 116 unsigned int m_uiRxMsgLen; // OUT: length of received buffer (without CRC) 117 BYTE *m_pbBuffer; // OUT: pointer to the buffer, set by ethernetdriver 118 tEplNetTime m_NetTime; // OUT: Timestamp of end of receiption 119 120 } tEdrvRxBuffer; 121 122 //typedef void (*tEdrvRxHandler) (BYTE bBufferInFrame_p, tBufferDescr * pbBuffer_p); 123 //typedef void (*tEdrvRxHandler) (BYTE bBufferInFrame_p, BYTE * pbEthernetData_p, WORD wDataLen_p); 124 typedef void (*tEdrvRxHandler) (tEdrvRxBuffer * pRxBuffer_p); 125 typedef void (*tEdrvTxHandler) (tEdrvTxBuffer * pTxBuffer_p); 126 127 // format of init structure 128 typedef struct { 129 BYTE m_abMyMacAddr[6]; // the own MAC address 130 131 // BYTE m_bNoOfRxBuffDescr; // number of entries in rx bufferdescriptor table 132 // tBufferDescr * m_pRxBuffDescrTable; // rx bufferdescriptor table 133 // WORD m_wRxBufferSize; // size of the whole rx buffer 134 135 tEdrvRxHandler m_pfnRxHandler; 136 tEdrvTxHandler m_pfnTxHandler; 137 138 } tEdrvInitParam; 139 140 //--------------------------------------------------------------------------- 141 // function prototypes 142 //--------------------------------------------------------------------------- 143 144 tEplKernel EdrvInit(tEdrvInitParam * pEdrvInitParam_p); 145 146 tEplKernel EdrvShutdown(void); 147 148 tEplKernel EdrvDefineRxMacAddrEntry(BYTE * pbMacAddr_p); 149 tEplKernel EdrvUndefineRxMacAddrEntry(BYTE * pbMacAddr_p); 150 151 //tEplKernel EdrvDefineUnicastEntry (BYTE * pbUCEntry_p); 152 //tEplKernel EdrvUndfineUnicastEntry (BYTE * pbUCEntry_p); 153 154 tEplKernel EdrvAllocTxMsgBuffer(tEdrvTxBuffer * pBuffer_p); 155 tEplKernel EdrvReleaseTxMsgBuffer(tEdrvTxBuffer * pBuffer_p); 156 157 //tEplKernel EdrvWriteMsg (tBufferDescr * pbBuffer_p); 158 tEplKernel EdrvSendTxMsg(tEdrvTxBuffer * pBuffer_p); 159 tEplKernel EdrvTxMsgReady(tEdrvTxBuffer * pBuffer_p); 160 tEplKernel EdrvTxMsgStart(tEdrvTxBuffer * pBuffer_p); 161 162 //tEplKernel EdrvReadMsg (void); 163 164 // interrupt handler called by target specific interrupt handler 165 void EdrvInterruptHandler(void); 166 167 #endif // #ifndef _EDRV_H_ 168