Technical information

8-14
AIC-6915 Ethernet LAN Controller Programmer’s Manual
// If single queue, use the first queue only
// Initialize RxDescQueue1LowAddress
// Allocate memory for RxDescQueue1
AIC6915_ALLOC_MEMORY(&Status, &RxDescQ, 4 * 2048);
// 4 byte descriptor,
//2K fixed size queue
RxDescQueue1LowAddressvalue.Reserved = 0;
// assign the buffer address
RxDescQueue1LowAddrValue.RxDescQ1LowAddress =
NdisGetPhysicalAddressLow(RxDescQ);
// Write the value to AIC-6915
AIC6915_WRITE_REG(RxDescQueue1LowAddress, RxDescQLowAddrValue);
// Use default value for RxDescQueue2LowAddress
// Initialize RxDescQueueHighAddr
// set up the high 32 bits of address - it's 0 since we're not using
// 64 bit addresses
AIC6915_WRITE_REG(RxDescQueueHighAddr, 0);
// Initialize RxDescQueue1Ptrs. This initializes the Receive Buffer Descriptor
// Producer and Consumer indices to 0.
// NOTE: we're using polling model on the receive side.
AIC6915_WRITE_REG(RxDescQueue1Ptrs, 0);
// Use default value for RxDescQueue2Ptrs
// Initialize RxAddressFilteringCtrl
// read current value
AIC6915_READ_REG(Adapter->RegisterBaseVa->RxAddressFilteringCtrl,
&RxAddressFilteringCtrlValue);
// we’re using Perfect Address Mode
RxAddressFilteringCtrlValue.PerfectFilteringMode = 1;
AIC6915_WRITE_REG(Adapter->RegisterbaseVa->RxAddressFilteringCtrl,
RxAddressFilteringCtrlValue);
// Program the Current Network Address into the first Receive Address filter
// register
Address = CurrentNetworkAddress[4]<<8 | CurrentNetworkAddress[5];
AIC6915_WRITE_REG(PerfectAddressTable[0][0], Address);
Address = CurrentNetworkAddress[2]<<8 | CurrentNetworkAddress[3];
AIC6915_WRITE_REG(PerfectAddressTable[0][1], Address);
Address = CurrentNetworkAddress[0]<<8 | CurrentNetworkAddress[1];
AIC6915_WRITE_REG(PerfectAddressTable[0][2], Address);
AIC6915_WRITE_REG(PerfectAddressTable[0][3], 0);
// Receive is now initialized!