middleware/netware/ethernet.c File Reference

Go to the source code of this file.

Functions

void F_EthernetInit (void)
void F_EthernetSvc (void)
INT8U F_EthernetInUseCheck (void)
INT8U F_EthernetAllocate (INT16U UserId)
INT8U F_EthernetRelease (INT16U UserId)
INT8U F_EthernetMacAddressSet (INT16U UserId, INT8U *pMacAddress)
INT8U F_EthernetIpAddressSet (INT16U UserId, INT8U *pIpAddress)
INT8U F_EthernetSend (ETHBUFFER *pBuffer, INT8U *pDestination, INT16U Protocol)
INT8U F_EthernetReceive (ETHBUFFER *pBuffer)
INT8U F_EthernetPacketHandler (void)
INT8U F_EthernetBiosUpdate (INT8U *pBios, INT32U size)
INT8U F_EthernetSystemTableUpdate (INT8U *pSystemTable, INT32U Size)
INT8U F_EthernetPartitionTableUpdate (INT8U *pSystemTable, INT32U Size)
INT8U F_EthernetPartitionUpdate (INT8U *pSystemTable, INT32U Size)
INT8U F_EthernetFirmwareUpdate (INT8U *pSystemTable, INT32U Size)
INT16U F_EthernetUnsignedShortN2H (unsigned short s)
INT16U F_EthernetUnsignedShortH2N (unsigned short s)
INT32U F_EthernetUnsignedLongN2H (unsigned long l)
INT32U F_EthernetUnsignedLongH2N (unsigned long l)

Variables

ETHERNET_CONTROL EthernetCtrl


Function Documentation

INT8U F_EthernetAllocate ( INT16U  UserId  ) 

Definition at line 73 of file ethernet.c.

00073                                        {
00074     if(EthernetCtrl.InUse==FALSE){
00075         EthernetCtrl.InUse=TRUE;
00076         EthernetCtrl.UserId=UserId; 
00077         return TRUE;       
00078     }
00079     else return FALSE;
00080 }

INT8U F_EthernetBiosUpdate ( INT8U *  pBios,
INT32U  size 
)

Definition at line 209 of file ethernet.c.

00209                                                     {
00210     return TRUE;
00211 }

INT8U F_EthernetFirmwareUpdate ( INT8U *  pSystemTable,
INT32U  Size 
)

Definition at line 221 of file ethernet.c.

00221                                                                {
00222     return TRUE;
00223 }

void F_EthernetInit ( void   ) 

Definition at line 52 of file ethernet.c.

00052                          {
00053     EthernetCtrl.MacAddress[0]=0x00;
00054     EthernetCtrl.MacAddress[1]=0x00;
00055     EthernetCtrl.MacAddress[2]=0x00;
00056     EthernetCtrl.MacAddress[3]=0x00;
00057     EthernetCtrl.MacAddress[4]=0x00;
00058     EthernetCtrl.MacAddress[5]=0x00;
00059     EthernetCtrl.IpAddress[0]=0x00;
00060     EthernetCtrl.IpAddress[1]=0x00;
00061     EthernetCtrl.IpAddress[2]=0x00;
00062     EthernetCtrl.IpAddress[3]=0x00;
00063     //EthernetCtrl.Id=ID_ETHERNET;
00064     EthernetCtrl.InUse=FALSE;
00065     EthernetCtrl.Status=0;
00066     EthernetCtrl.State=EthernetIdleState;
00067 }

INT8U F_EthernetInUseCheck ( void   ) 

Definition at line 69 of file ethernet.c.

00069                                 {
00070     if(EthernetCtrl.InUse==TRUE) return TRUE;
00071     else return FALSE;
00072 }

INT8U F_EthernetIpAddressSet ( INT16U  UserId,
INT8U *  pIpAddress 
)

Definition at line 100 of file ethernet.c.

00100                                                              {
00101     if((EthernetCtrl.InUse==TRUE)&&(EthernetCtrl.UserId==UserId)){
00102         EthernetCtrl.IpAddress[0]=pIpAddress[0];
00103         EthernetCtrl.IpAddress[1]=pIpAddress[1];
00104         EthernetCtrl.IpAddress[2]=pIpAddress[2];
00105         EthernetCtrl.IpAddress[3]=pIpAddress[3];
00106         return TRUE;
00107     }
00108     else return FALSE;
00109 }

INT8U F_EthernetMacAddressSet ( INT16U  UserId,
INT8U *  pMacAddress 
)

Definition at line 88 of file ethernet.c.

00088                                                                {
00089     if((EthernetCtrl.InUse==TRUE)&&(EthernetCtrl.UserId==UserId)){
00090         EthernetCtrl.MacAddress[0]=pMacAddress[0];
00091         EthernetCtrl.MacAddress[1]=pMacAddress[1];
00092         EthernetCtrl.MacAddress[2]=pMacAddress[2];
00093         EthernetCtrl.MacAddress[3]=pMacAddress[3];
00094         EthernetCtrl.MacAddress[4]=pMacAddress[4];
00095         EthernetCtrl.MacAddress[5]=pMacAddress[5];
00096         return TRUE;
00097     }
00098     else return FALSE;
00099 }

INT8U F_EthernetPacketHandler ( void   ) 

Definition at line 137 of file ethernet.c.

00137                                    {
00138     ETHBUFFER     *pBuffer;
00139     ETHERNET_HEAD *pEthernetHead; // 6(destination)+6(source)+2(protocol)    
00140 
00141     pBuffer=F_EthernetBufferAllocate();
00142     if(F_EthernetReceive(pBuffer)==TRUE){ 
00143         // broadcast check??
00144         pEthernetHead=(ETHERNET_HEAD *)pBuffer->pData; // 8 bytes preamble data?? exclude by cs8900??
00145         #if(DEBUG_ETHERNET==1)
00146             /*printf("\n Destination %2x %2x %2x %2x %2x %2x ",pEthernetHead->Destination[0], 
00147                                                              pEthernetHead->Destination[1], 
00148                                                              pEthernetHead->Destination[2], 
00149                                                              pEthernetHead->Destination[3], 
00150                                                              pEthernetHead->Destination[4], 
00151                                                              pEthernetHead->Destination[5]);
00152             printf("\n Source      %2x %2x %2x %2x %2x %2x ",pEthernetHead->Source[0], 
00153                                                              pEthernetHead->Source[1], 
00154                                                              pEthernetHead->Source[2], 
00155                                                              pEthernetHead->Source[3], 
00156                                                              pEthernetHead->Source[4], 
00157                                                              pEthernetHead->Source[5]);
00158             printf("\n Protocol %4x",F_EthernetUnsignedShortN2H(pEthernetHead->Protocol)); 
00159             printf("\n RxEvent  %4x ",Cs8900Ctrl.RxEvent);*/
00160         #endif                                                                        
00161         if(Cs8900Ctrl.RxEvent&RX_EVENT_IND_ADDR){ 
00162             if(F_EthernetUnsignedShortN2H(pEthernetHead->Protocol)>0x05dc){ // ethernet II...ethertype
00163                 #if(DEBUG_ETHERNET==1)
00164                     printf("\n ethernet II ");
00165                 #endif  
00166                 F_EthernetBufferPull(pBuffer,ETHERNET_HEAD_LENGTH);
00167                 if(F_EthernetUnsignedShortN2H(pEthernetHead->Protocol)==ETHERNET_P_ARP){ // 0x0806
00168                     #if(DEBUG_ETHERNET==1)
00169                         printf(" ARP");
00170                     #endif    
00171                     F_EthernetArpPacketReceive(pBuffer);
00172                 }    
00173                 else if(F_EthernetUnsignedShortN2H(pEthernetHead->Protocol)==ETHERNET_P_IP){ // 0x0800
00174                     #if(DEBUG_ETHERNET==1)
00175                         printf(" IP ");
00176                     #endif 
00177                     F_EthernetIpPacketReceive(pBuffer);    
00178                 }    
00179             }
00180             else{ // IEEE 802.3...frame length (<=0x05dc...1500)
00181                 #if(DEBUG_ETHERNET==1)
00182                     printf("\n IEEE 802.3 no support now");
00183                 #endif                      
00184             }
00185         }
00186         else if(Cs8900Ctrl.RxEvent&RX_EVENT_BROADCAST){
00187             #if(DEBUG_ETHERNET==1)
00188                 printf("\n BROADCAST");
00189             #endif  
00190             F_EthernetBufferPull(pBuffer,ETHERNET_HEAD_LENGTH);             
00191             if(F_EthernetUnsignedShortN2H(pEthernetHead->Protocol)==ETHERNET_P_ARP){ // 0x0806                
00192                 #if(DEBUG_ETHERNET==1)
00193                     printf(" ARP");
00194                 #endif    
00195                 F_EthernetArpPacketReceive2(pBuffer);                       
00196             }    
00197             else if(F_EthernetUnsignedShortN2H(pEthernetHead->Protocol)==ETHERNET_P_IP){ // 0x0800
00198                 #if(DEBUG_ETHERNET==1)
00199                     printf(" IP ");
00200                 #endif                  
00201                 //F_EthernetIpPacketReceive2(pBuffer);  
00202                 //F_EthernetIpPacketReceive(pBuffer);                                
00203             }                 
00204         }
00205     }    
00206     //F_EthernetBufferRelease(pBuffer); // no need 
00207     return TRUE;
00208 }

INT8U F_EthernetPartitionTableUpdate ( INT8U *  pSystemTable,
INT32U  Size 
)

Definition at line 215 of file ethernet.c.

00215                                                                      {
00216     return TRUE;
00217 }

INT8U F_EthernetPartitionUpdate ( INT8U *  pSystemTable,
INT32U  Size 
)

Definition at line 218 of file ethernet.c.

00218                                                                 {
00219     return TRUE;
00220 }

INT8U F_EthernetReceive ( ETHBUFFER *  pBuffer  ) 

Definition at line 123 of file ethernet.c.

00123                                            {    
00124     INT32U Size;
00125     
00126     if(F_Cs8900PacketReceiveCheck()==TRUE){        
00127         Size=F_Cs8900PacketReceive(pBuffer->pData,1532); // 1532>8+6+6+2+1500+4=1526 ??
00128         pBuffer->Length=Size;
00129         #if(DEBUG_ETHERNET==1)
00130             printf("\n rx packet [%4x] ",Size);
00131             //F_EthernetBufferDump(pBuffer->Data,Size);
00132         #endif
00133         return TRUE;
00134     }
00135     else return FALSE;
00136 }

INT8U F_EthernetRelease ( INT16U  UserId  ) 

Definition at line 81 of file ethernet.c.

00081                                       {
00082     if(EthernetCtrl.InUse==TRUE){
00083         EthernetCtrl.InUse=FALSE;    
00084         return TRUE;    
00085     }
00086     else return FALSE;
00087 }

INT8U F_EthernetSend ( ETHBUFFER *  pBuffer,
INT8U *  pDestination,
INT16U  Protocol 
)

Definition at line 110 of file ethernet.c.

00110                                                                             {
00111     ETHERNET_HEAD *pEthernetHead;
00112         
00113     pEthernetHead=(ETHERNET_HEAD *)F_EthernetBufferPush(pBuffer,ETHERNET_HEAD_LENGTH);
00114     memcpy((INT8U *)pEthernetHead->Destination,pDestination,ETHERNET_MAC_LENGTH);    
00115     memcpy((INT8U *)pEthernetHead->Source,(INT8U *)EthernetCtrl.MacAddress,ETHERNET_MAC_LENGTH);
00116     pEthernetHead->Protocol=F_EthernetUnsignedShortH2N(Protocol);
00117     #if(DEBUG_ETHERNET==1)
00118         printf("\n tx packet [%4x] ",pBuffer->Length);
00119         //F_EthernetBufferDump(pBuffer->Data,pBuffer->Length);
00120     #endif
00121     return F_Cs8900PacketTransmit(pBuffer->Data,pBuffer->Length);
00122 }

void F_EthernetSvc ( void   ) 

Definition at line 68 of file ethernet.c.

00068 {}

INT8U F_EthernetSystemTableUpdate ( INT8U *  pSystemTable,
INT32U  Size 
)

Definition at line 212 of file ethernet.c.

00212                                                                   {
00213     return TRUE;
00214 }

INT32U F_EthernetUnsignedLongH2N ( unsigned long  l  ) 

Definition at line 236 of file ethernet.c.

00236                                                  {
00237     return (((l>>24)&0x000000ff)|
00238             ((l>> 8)&0x0000ff00)|
00239             ((l<< 8)&0x00ff0000)|
00240             ((l<<24)&0xff000000));
00241 }

INT32U F_EthernetUnsignedLongN2H ( unsigned long  l  ) 

Definition at line 230 of file ethernet.c.

00230                                                  {
00231     return (((l>>24)&0x000000ff)|
00232             ((l>> 8)&0x0000ff00)|
00233             ((l<< 8)&0x00ff0000)|
00234             ((l<<24)&0xff000000));
00235 }

INT16U F_EthernetUnsignedShortH2N ( unsigned short  s  ) 

Definition at line 227 of file ethernet.c.

00227                                                    {
00228     return ((s>>8)|(s<<8));
00229 }

INT16U F_EthernetUnsignedShortN2H ( unsigned short  s  ) 

Definition at line 224 of file ethernet.c.

00224                                                    {
00225     return ((s>>8)|(s<<8));
00226 }


Variable Documentation

ETHERNET_CONTROL EthernetCtrl

Definition at line 30 of file ethernet.c.


Generated on Tue Sep 2 08:45:41 2008 for A Simple operation System using S3C2410 by  doxygen 1.5.6