//--------------------------------------------------------------------------- // // Function: VEthApiXmit // // Description: Transmit a TX frame // // Parameters: pData_p = point to packet buffer // wDataSize = size of packet // // Returns: kEplApiInvalidParam - maximum MTU is reached // kEplDllAsyncTxBuffer - internal buffer is full // kEplInvalidOperation - Send not allowed in this state // kEplSuccessful - message sent successfully // // State: // //--------------------------------------------------------------------------- tEplKernel PUBLIC VEthApiXmit(BYTE *pData_p, WORD wDataSize) { tEplKernel Ret = kEplSuccessful; tEplFrameInfo FrameInfo; tEplNmtState NmtState; //check POWERLINK state NmtState = EplNmtuGetNmtState(); if(NmtState <= kEplNmtCsNotActive || NmtState == kEplNmtMsNotActive) { Ret = kEplInvalidOperation; EPL_DBGLVL_VETH_TRACE("VEthXmit: Error while transmitting! Invalid " "state: 0x%x!\n", NmtState); goto Exit; } //check MTU if(wDataSize > VEthInstance_g.m_wMtu) { Ret = kEplApiInvalidParam; EPL_DBGLVL_VETH_TRACE("VEthXmit: Error while transmitting! MTU is set to " "%d and frame has size %d!\n", VEthInstance_g.m_wMtu, wDataSize); goto Exit; } //save frame and size FrameInfo.m_pFrame = (tEplFrame *)pData_p; FrameInfo.m_uiFrameSize = wDataSize; //call send function on DLL Ret = EplDllkCalAsyncSend(&FrameInfo, kEplDllAsyncReqPrioGeneric, kEplDllAsyncBuffVeth); switch(Ret) { case kEplSuccessful: //set stats for the device VEthInstance_g.m_Statistics.m_dwMsgsent++; goto Exit; case kEplDllAsyncTxBufferFull: //buffer is full VEthInstance_g.m_Statistics.m_dwTxBufferFull++; goto Exit; default: EPL_DBGLVL_VETH_TRACE("VEthXmit: EplDllkCalAsyncSend returned 0x%02X\n", Ret); goto Exit; } Exit: return Ret; }
static int EplLinProcRead ( char* pcBuffer_p, char** ppcStart_p, off_t Offset_p, int nBufferSize_p, int* pEof_p, void* pData_p) { int nSize; int Eof; #if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLK)) != 0) tEplDllkCalStatistics* pDllkCalStats; #endif nSize = 0; Eof = 0; // count calls of this function #ifdef _DBG_TRACE_POINTS_ TgtDbgSignalTracePoint(0); #endif //--------------------------------------------------------------- // generate static information //--------------------------------------------------------------- // ---- Driver information ---- nSize += snprintf (pcBuffer_p + nSize, nBufferSize_p - nSize, "%s %s (c) 2006 %s\n", EPL_PRODUCT_NAME, EPL_PRODUCT_VERSION, EPL_PRODUCT_MANUFACTURER); //--------------------------------------------------------------- // generate process information //--------------------------------------------------------------- // ---- EPL state ---- #if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMTU)) != 0) nSize += snprintf (pcBuffer_p + nSize, nBufferSize_p - nSize, "NMT state: 0x%04X\n", (WORD) EplNmtuGetNmtState()); #endif #if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLK)) != 0) EplDllkCalGetStatistics(&pDllkCalStats); nSize += snprintf (pcBuffer_p + nSize, nBufferSize_p - nSize, "CurAsyncTxGen=%lu CurAsyncTxNmt=%lu CurAsyncRx=%lu\nMaxAsyncTxGen=%lu MaxAsyncTxNmt=%lu MaxAsyncRx=%lu\n", pDllkCalStats->m_ulCurTxFrameCountGen, pDllkCalStats->m_ulCurTxFrameCountNmt, pDllkCalStats->m_ulCurRxFrameCount, pDllkCalStats->m_ulMaxTxFrameCountGen, pDllkCalStats->m_ulMaxTxFrameCountNmt, pDllkCalStats->m_ulMaxRxFrameCount); #endif #if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0) // fetch running IdentRequests nSize += snprintf (pcBuffer_p + nSize, nBufferSize_p - nSize, "running IdentRequests: 0x%08lX\n", (ULONG) EplIdentuGetRunningRequests()); // fetch state of NmtMnu module { unsigned int uiMandatorySlaveCount; unsigned int uiSignalSlaveCount; WORD wFlags; EplNmtMnuGetDiagnosticInfo(&uiMandatorySlaveCount, &uiSignalSlaveCount, &wFlags); nSize += snprintf (pcBuffer_p + nSize, nBufferSize_p - nSize, "MN MandSlaveCount: %u SigSlaveCount: %u Flags: 0x%X\n", uiMandatorySlaveCount, uiSignalSlaveCount, wFlags); } #endif #if (EDRV_USE_DIAGNOSTICS != FALSE) nSize += EdrvGetDiagnostics(pcBuffer_p + nSize, nBufferSize_p - nSize); #endif // ---- FEC state ---- #ifdef CONFIG_COLDFIRE { // Receive the base address unsigned long base_addr; #if (EDRV_USED_ETH_CTRL == 0) // Set the base address of FEC0 base_addr = FEC_BASE_ADDR_FEC0; #else // Set the base address of FEC1 base_addr = FEC_BASE_ADDR_FEC1; #endif nSize += snprintf (pcBuffer_p + nSize, nBufferSize_p - nSize, "FEC_ECR = 0x%08X FEC_EIR = 0x%08X FEC_EIMR = 0x%08X\nFEC_TCR = 0x%08X FECTFSR = 0x%08X FECRFSR = 0x%08X\n", FEC_ECR(base_addr), FEC_EIR(base_addr), FEC_EIMR(base_addr), FEC_TCR(base_addr), FEC_FECTFSR(base_addr), FEC_FECRFSR(base_addr)); } #endif // ---- DBG: TracePoints ---- #ifdef _DBG_TRACE_POINTS_ { int nNum; nSize += snprintf (pcBuffer_p + nSize, nBufferSize_p - nSize, "DbgTracePoints:\n"); for (nNum=0; nNum<(sizeof(aatmDbgTracePoint_l)/sizeof(atomic_t)); nNum++) { nSize += snprintf (pcBuffer_p + nSize, nBufferSize_p - nSize, " TracePoint[%2d]: %d\n", (int)nNum, atomic_read(&aatmDbgTracePoint_l[nNum])); } nSize += snprintf (pcBuffer_p + nSize, nBufferSize_p - nSize, "DbgTraceValues:\n"); for (nNum=0; nNum<DBG_TRACE_VALUES; nNum++) { if (nNum == uiDbgTraceValuePos_l) { // next value will be stored at that position nSize += snprintf (pcBuffer_p + nSize, nBufferSize_p - nSize, "*%08lX", (ULONG) adwDbgTraceValue_l[nNum]); } else { nSize += snprintf (pcBuffer_p + nSize, nBufferSize_p - nSize, " %08lX", (ULONG) adwDbgTraceValue_l[nNum]); } if ((nNum & 0x00000007) == 0x00000007) { // 8 values printed -> end of line reached nSize += snprintf (pcBuffer_p + nSize, nBufferSize_p - nSize, "\n"); } } if ((nNum & 0x00000007) != 0x00000007) { // number of values printed is not a multiple of 8 -> print new line nSize += snprintf (pcBuffer_p + nSize, nBufferSize_p - nSize, "\n"); } } #endif Eof = 1; goto Exit; Exit: *pEof_p = Eof; return (nSize); }