Sample Code - Realtek RTL8100 Programming Manual

Single chip fast ethernet controller with power management
Table of Contents

Advertisement

1.7 Sample Code

unsigned char
NextDesc(
unsigned char CurrentDescriptor
)
{
// (CurrentDescriptor == TX_SW_BUFFER_NUM-1) ? 0 : (1 + CurrentDescriptor);
if(CurrentDescriptor == TX_SW_BUFFER_NUM-1)
{
return 0;
}
else
{
return ( 1 + CurrentDescriptor);
}
}
unsigned char
CheckTSDStatus(
unsigned char
Desc
)
{
ULONG
Offset = Desc << 2;
ULONG
tmpTSD;
tmpTSD=inpdw(IOBase + TSD0 + Offset);
switch ( tmpTSD & (TSD_OWN | TSD_TOK) )
{
case (TSD_OWN | TSD_TOK):
case (TSD_TOK)
case (TSD_OWN)
case 0
:
}
return 0;
}
void
IssueCMD(unsigned char descriptor)
{
unsigned long offset = descriptor << 2;
outpdw(IOBase + TSAD0 + offset, TxDesc[TxHwSetupPtr].PhysicalAddress);
outpdw(IOBase + TSD0 + offset , TxDesc[TxHwSetupPtr].PacketLength);
}
int
SendPacket(
PPACKET pPacket
)
{
disable();
if( TxHwFreeDesc>0 )
{
TxDesc[TxHwSetupPtr].PacketLength=
CopyFromPacketToBuffer( pPacket , TxDesc[TxHwSetupPtr].buffer);
IssueCMD(TxHwSetupPtr);
TxHwSetupPtr = NextDesc(TxHwSetupPtr);
TxHwFreeDesc--;
enable();
return TRUE;//success
}
else
{
enable();
return FALSE;//out of resource
}
}
void
TxInterruptHandler()
{
while( (CheckTSDStatus(TxHwFinishPtr) == TSDSTATUS_BOTH ) &&
(TxHwFreeDesc < 4
{
//can Release this buffer now
TxHwFinishPtr = NextDesc(TxHwFinishPtr);
TxHwFreeDesc++;
}
}
2001/12/10
return TSDSTATUS_BOTH;
:
return TSDSTATUS_TOK;
:
return TSDSTATUS_OWN;
return TSDSTATUS_0;
) )
5
RTL8100
Rev.1.0

Hide quick links:

Advertisement

Table of Contents
loading

Table of Contents