#define N_TX_DESCS ((PAGE_SIZE/DESC_SIZE)-N_RX_DESCS)
#define CR0_BASEVAL (CR0_STRT|CR0_TXON|CR0_RXON)
#define N_TX_DESCS ((PAGE_SIZE/DESC_SIZE)-N_RX_DESCS)
#define CR0_BASEVAL (CR0_STRT|CR0_TXON|CR0_RXON)
{
Card->RXBuffers[i].Virt = (void*)MM_AllocDMA(1, 32, &phys);
Card->RXBuffers[i].Phys = phys;
{
Card->RXBuffers[i].Virt = (void*)MM_AllocDMA(1, 32, &phys);
Card->RXBuffers[i].Phys = phys;
- rxdescs[i].RXBufferStart = Card->RXBuffers[i/(PAGE_SIZE/RX_BUF_SIZE)].Phys
- + (i % (PAGE_SIZE/RX_BUF_SIZE)) * RX_BUF_SIZE;
+ rxdescs[i].RXBufferStart = Card->RXBuffers[i/N_RX_BUF_PER_PAGE].Phys
+ + (i % N_RX_BUF_PER_PAGE) * RX_BUF_SIZE;
rxdescs[i].RDBranchAddress = Card->DescTablePhys + (i+1) * DESC_SIZE;
rxdescs[i].Length = (1 << 15); // set OWN
rxdescs[i].RDBranchAddress = Card->DescTablePhys + (i+1) * DESC_SIZE;
rxdescs[i].Length = (1 << 15); // set OWN
Card->TXDescs = (void*)(rxdescs + N_RX_DESCS);
memset(Card->TXDescs, 0, sizeof(struct sTXDesc)*N_TX_DESCS);
Card->TXDescs = (void*)(rxdescs + N_RX_DESCS);
memset(Card->TXDescs, 0, sizeof(struct sTXDesc)*N_TX_DESCS);
while( !(desc->Length & (1 << 15)) )
{
// LOG("desc(%p) = {RSR:%04x,Length:%04x,BufferSize:%04x,RXBufferStart:%08x,RDBranchAddress:%08x}",
while( !(desc->Length & (1 << 15)) )
{
// LOG("desc(%p) = {RSR:%04x,Length:%04x,BufferSize:%04x,RXBufferStart:%08x,RDBranchAddress:%08x}",
LOG("%i descriptors in packet", nDesc);
ret = IPStack_Buffer_CreateBuffer(nDesc);
LOG("%i descriptors in packet", nDesc);
ret = IPStack_Buffer_CreateBuffer(nDesc);
while( !(desc->Length & (1 << 15)) )
{
void *data = Rhine2_int_GetBufferFromPhys(card, desc->RXBufferStart);
while( !(desc->Length & (1 << 15)) )
{
void *data = Rhine2_int_GetBufferFromPhys(card, desc->RXBufferStart);
{
if( Card->RXBuffers[i].Phys > Addr ) continue;
if( Card->RXBuffers[i].Phys + PAGE_SIZE <= Addr ) continue;
{
if( Card->RXBuffers[i].Phys > Addr ) continue;
if( Card->RXBuffers[i].Phys + PAGE_SIZE <= Addr ) continue;
void Rhine2_int_FreeRXDesc(void *Ptr, size_t u1, size_t u2, const void *u3)
{
struct sRXDesc *desc = Ptr;
void Rhine2_int_FreeRXDesc(void *Ptr, size_t u1, size_t u2, const void *u3)
{
struct sRXDesc *desc = Ptr;