#ifndef __ethernetCapable_h__ #define __ethernetCapable_h__ #include "ethernet.h" #include "type.h" struct EthernetCapable { virtual ~EthernetCapable(); int debugLevel; virtual bool init(); virtual void reset()=0; virtual Ethernet *receive(U32 *size)=0; virtual void receive(Ethernet *e)=0; virtual Ethernet *send()=0; virtual bool send(Ethernet *,U32 size)=0; }; /* static const U32 tdsCount=2; static const U32 rdsCount=2; U8 buf[32+sizeof(Dm9102::Td)*tdsCount+sizeof(Dm9102::Rd)*rdsCount+1500*(1+rdsCount)]; Dm9102::Td *tds; Dm9102::Rd *rds; Dm9102::Td *td; Dm9102::Rd *rd; Dm9102::NetworkControl nc; tds=(Dm9102::Td *)align(buf,32); rds=(Dm9102::Rd *)(tds+2); { U8 *b=(U8*)(rds+2); td=tds; for(int i=0;i<2;i++) { td->buffer=b; td->status->all=0; td->length->all=0; td->length->ed=1; td->length->bd=1; td->length->ce=1; td->next=++td; } td[-1].next=tds; b+=1500; rd=rds; for(int i=0;i<2;i++) { rd->buffer=b; b+=1500; rd->status->all=0; rd->status->own=1; rd->length->all=0; rd->length->length=1500; rd->length->ce=1; rd->next=++rd; } rd[-1].next=rds; } td=tds; rd=rds; dm->tds=tds; dm->rds=rds; nc.all=dm->networkControl->all; nc.txsc=1; nc.rxa=1; nc.rxsc=1; dm->networkControl->all=nc.all; send ... td->length->length=size; td->status->own=1; td=td->next; //com1<<"td is : "<<(U32)td<<", size is : "<dwords[i]<<"\r\n"; //com1<<"delay\r\n"; asm volatile("wbinvd"); dm->transmitDescriptorPoll=0; asm volatile("wbinvd"); while(1) { asm volatile("invd"); if(rd->status->own==0) break; } rece.ethernet=(Ethernet*)(U8*)rd->buffer; rd->status->own=1; rd=rd->next; asm volatile("wbinvd"); dm->receiveDescriptorPoll=0; td->length->length=size; td->status->all=0; td->status->own=1; td=td->next; asm volatile("wbinvd"); dm->transmitDescriptorPoll=0; */ #endif /* __ip_h__ */