00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "includes.h"
00010
00011 ETHBUFFER_CONTROL EthBufferCtrl;
00012 ETHBUFFER EthBuffer[ETHBUFFER_NUMBER];
00013
00014 void F_EthernetBufferInit(void);
00015 void F_EthernetBufferSvc(void);
00016 void F_EthernetBufferReset(ETHBUFFER *pBuffer);
00017 ETHBUFFER *F_EthernetBufferAllocate(void);
00018 void F_EthernetBufferRelease(ETHBUFFER *pBuffer);
00019 INT8U *F_EthernetBufferPut(ETHBUFFER *pBuffer,INT32U Length);
00020 INT8U *F_EthernetBufferPull(ETHBUFFER *pBuffer,INT32U Length);
00021 INT8U *F_EthernetBufferPush(ETHBUFFER *pBuffer,INT32U Length);
00022 void F_EthernetBufferReserve(ETHBUFFER *pBuffer,INT32U Length);
00023
00024 void F_EthernetBufferInit(void){
00025 EthBufferCtrl.BufferIndex=0;
00026 EthBufferCtrl.Status=0;
00027 EthBufferCtrl.State=0;
00028 }
00029 void F_EthernetBufferSvc(void){}
00030 void F_EthernetBufferReset(ETHBUFFER *pBuffer){
00031
00032 memset(pBuffer,0,5);
00033 pBuffer->Pad[0]=0x00;
00034 pBuffer->Pad[1]=0x00;
00035 pBuffer->TrueSize=ETHERNET_FRAME_LEN;
00036 pBuffer->pData=pBuffer->Data;
00037 pBuffer->Length=0;
00038 }
00039 ETHBUFFER *F_EthernetBufferAllocate(void){
00040 ETHBUFFER *pBuffer;
00041
00042 pBuffer=&EthBuffer[EthBufferCtrl.BufferIndex];
00043 EthBufferCtrl.BufferIndex++;
00044 if(EthBufferCtrl.BufferIndex>=5) EthBufferCtrl.BufferIndex=0;
00045 F_EthernetBufferReset(pBuffer);
00046 return pBuffer;
00047 }
00048 void F_EthernetBufferRelease(ETHBUFFER *pBuffer){}
00049 INT8U *F_EthernetBufferPut(ETHBUFFER *pBuffer,INT32U Length){
00050 pBuffer->Length+=Length;
00051 return pBuffer->pData;
00052 }
00053
00054
00055 INT8U *F_EthernetBufferPull(ETHBUFFER *pBuffer,INT32U Length){
00056 pBuffer->pData+=Length;
00057 pBuffer->Length-=Length;
00058 return pBuffer->pData;
00059 }
00060
00061
00062 INT8U *F_EthernetBufferPush(ETHBUFFER *pBuffer,INT32U Length){
00063 pBuffer->pData-=Length;
00064 pBuffer->Length+=Length;
00065 return pBuffer->pData;
00066 }
00067 void F_EthernetBufferReserve(ETHBUFFER *pBuffer,INT32U Length){
00068 pBuffer->pData+=Length;
00069 }
00070 void F_EthernetBufferDump(INT8U *pData,INT32U Length){
00071 INT32U i=0,j=0;
00072
00073 i=0;
00074 j=0;
00075 myprintf("\n Length=%4x ",Length);
00076 for(i=0;i<Length;i++){
00077 if(j==0) myprintf("\n %4x0h ",(i/16));
00078 #if(DEBUG_ETHERNET_BUFFER)
00079 myprintf("%2x ",*pData);
00080 #endif
00081 j++;
00082 pData++;
00083 if(j==16) j=0;
00084
00085 }
00086 #if(DEBUG_ETHERNET_BUFFER)
00087 myprintf("\n ");
00088 #endif
00089 }