|
@@ -106,9 +106,9 @@ void nic_return_rfd(struct et131x_adapter *etdev, PMP_RFD pMpRfd);
|
|
|
*/
|
|
|
int et131x_rx_dma_memory_alloc(struct et131x_adapter *adapter)
|
|
|
{
|
|
|
- uint32_t OuterLoop, InnerLoop;
|
|
|
- uint32_t bufsize;
|
|
|
- uint32_t pktStatRingSize, FBRChunkSize;
|
|
|
+ u32 i, j;
|
|
|
+ u32 bufsize;
|
|
|
+ u32 pktStatRingSize, FBRChunkSize;
|
|
|
RX_RING_t *rx_ring;
|
|
|
|
|
|
/* Setup some convenience pointers */
|
|
@@ -227,11 +227,11 @@ int et131x_rx_dma_memory_alloc(struct et131x_adapter *adapter)
|
|
|
rx_ring->Fbr0offset);
|
|
|
#endif
|
|
|
|
|
|
- for (OuterLoop = 0; OuterLoop < (rx_ring->Fbr1NumEntries / FBR_CHUNKS);
|
|
|
- OuterLoop++) {
|
|
|
- uint64_t Fbr1Offset;
|
|
|
- uint64_t Fbr1TempPa;
|
|
|
- uint32_t Fbr1Align;
|
|
|
+ for (i = 0; i < (rx_ring->Fbr1NumEntries / FBR_CHUNKS);
|
|
|
+ i++) {
|
|
|
+ u64 Fbr1Offset;
|
|
|
+ u64 Fbr1TempPa;
|
|
|
+ u32 Fbr1Align;
|
|
|
|
|
|
/* This code allocates an area of memory big enough for N
|
|
|
* free buffers + (buffer_size - 1) so that the buffers can
|
|
@@ -247,39 +247,39 @@ int et131x_rx_dma_memory_alloc(struct et131x_adapter *adapter)
|
|
|
|
|
|
FBRChunkSize =
|
|
|
(FBR_CHUNKS * rx_ring->Fbr1BufferSize) + Fbr1Align - 1;
|
|
|
- rx_ring->Fbr1MemVa[OuterLoop] =
|
|
|
+ rx_ring->Fbr1MemVa[i] =
|
|
|
pci_alloc_consistent(adapter->pdev, FBRChunkSize,
|
|
|
- &rx_ring->Fbr1MemPa[OuterLoop]);
|
|
|
+ &rx_ring->Fbr1MemPa[i]);
|
|
|
|
|
|
- if (!rx_ring->Fbr1MemVa[OuterLoop]) {
|
|
|
+ if (!rx_ring->Fbr1MemVa[i]) {
|
|
|
dev_err(&adapter->pdev->dev,
|
|
|
"Could not alloc memory\n");
|
|
|
return -ENOMEM;
|
|
|
}
|
|
|
|
|
|
/* See NOTE in "Save Physical Address" comment above */
|
|
|
- Fbr1TempPa = rx_ring->Fbr1MemPa[OuterLoop];
|
|
|
+ Fbr1TempPa = rx_ring->Fbr1MemPa[i];
|
|
|
|
|
|
et131x_align_allocated_memory(adapter,
|
|
|
&Fbr1TempPa,
|
|
|
&Fbr1Offset, (Fbr1Align - 1));
|
|
|
|
|
|
- for (InnerLoop = 0; InnerLoop < FBR_CHUNKS; InnerLoop++) {
|
|
|
- uint32_t index = (OuterLoop * FBR_CHUNKS) + InnerLoop;
|
|
|
+ for (j = 0; j < FBR_CHUNKS; j++) {
|
|
|
+ u32 index = (i * FBR_CHUNKS) + j;
|
|
|
|
|
|
/* Save the Virtual address of this index for quick
|
|
|
* access later
|
|
|
*/
|
|
|
rx_ring->Fbr[1]->Va[index] =
|
|
|
- (uint8_t *) rx_ring->Fbr1MemVa[OuterLoop] +
|
|
|
- (InnerLoop * rx_ring->Fbr1BufferSize) + Fbr1Offset;
|
|
|
+ (uint8_t *) rx_ring->Fbr1MemVa[i] +
|
|
|
+ (j * rx_ring->Fbr1BufferSize) + Fbr1Offset;
|
|
|
|
|
|
/* now store the physical address in the descriptor
|
|
|
* so the device can access it
|
|
|
*/
|
|
|
rx_ring->Fbr[1]->PAHigh[index] =
|
|
|
- (uint32_t) (Fbr1TempPa >> 32);
|
|
|
- rx_ring->Fbr[1]->PALow[index] = (uint32_t) Fbr1TempPa;
|
|
|
+ (u32) (Fbr1TempPa >> 32);
|
|
|
+ rx_ring->Fbr[1]->PALow[index] = (u32) Fbr1TempPa;
|
|
|
|
|
|
Fbr1TempPa += rx_ring->Fbr1BufferSize;
|
|
|
|
|
@@ -292,40 +292,40 @@ int et131x_rx_dma_memory_alloc(struct et131x_adapter *adapter)
|
|
|
|
|
|
#ifdef USE_FBR0
|
|
|
/* Same for FBR0 (if in use) */
|
|
|
- for (OuterLoop = 0; OuterLoop < (rx_ring->Fbr0NumEntries / FBR_CHUNKS);
|
|
|
- OuterLoop++) {
|
|
|
- uint64_t Fbr0Offset;
|
|
|
- uint64_t Fbr0TempPa;
|
|
|
+ for (i = 0; i < (rx_ring->Fbr0NumEntries / FBR_CHUNKS);
|
|
|
+ i++) {
|
|
|
+ u64 Fbr0Offset;
|
|
|
+ u64 Fbr0TempPa;
|
|
|
|
|
|
FBRChunkSize = ((FBR_CHUNKS + 1) * rx_ring->Fbr0BufferSize) - 1;
|
|
|
- rx_ring->Fbr0MemVa[OuterLoop] =
|
|
|
+ rx_ring->Fbr0MemVa[i] =
|
|
|
pci_alloc_consistent(adapter->pdev, FBRChunkSize,
|
|
|
- &rx_ring->Fbr0MemPa[OuterLoop]);
|
|
|
+ &rx_ring->Fbr0MemPa[i]);
|
|
|
|
|
|
- if (!rx_ring->Fbr0MemVa[OuterLoop]) {
|
|
|
+ if (!rx_ring->Fbr0MemVa[i]) {
|
|
|
dev_err(&adapter->pdev->dev,
|
|
|
"Could not alloc memory\n");
|
|
|
return -ENOMEM;
|
|
|
}
|
|
|
|
|
|
/* See NOTE in "Save Physical Address" comment above */
|
|
|
- Fbr0TempPa = rx_ring->Fbr0MemPa[OuterLoop];
|
|
|
+ Fbr0TempPa = rx_ring->Fbr0MemPa[i];
|
|
|
|
|
|
et131x_align_allocated_memory(adapter,
|
|
|
&Fbr0TempPa,
|
|
|
&Fbr0Offset,
|
|
|
rx_ring->Fbr0BufferSize - 1);
|
|
|
|
|
|
- for (InnerLoop = 0; InnerLoop < FBR_CHUNKS; InnerLoop++) {
|
|
|
- uint32_t index = (OuterLoop * FBR_CHUNKS) + InnerLoop;
|
|
|
+ for (j = 0; j < FBR_CHUNKS; j++) {
|
|
|
+ u32 index = (i * FBR_CHUNKS) + j;
|
|
|
|
|
|
rx_ring->Fbr[0]->Va[index] =
|
|
|
- (uint8_t *) rx_ring->Fbr0MemVa[OuterLoop] +
|
|
|
- (InnerLoop * rx_ring->Fbr0BufferSize) + Fbr0Offset;
|
|
|
+ (uint8_t *) rx_ring->Fbr0MemVa[i] +
|
|
|
+ (j * rx_ring->Fbr0BufferSize) + Fbr0Offset;
|
|
|
|
|
|
rx_ring->Fbr[0]->PAHigh[index] =
|
|
|
- (uint32_t) (Fbr0TempPa >> 32);
|
|
|
- rx_ring->Fbr[0]->PALow[index] = (uint32_t) Fbr0TempPa;
|
|
|
+ (u32) (Fbr0TempPa >> 32);
|
|
|
+ rx_ring->Fbr[0]->PALow[index] = (u32) Fbr0TempPa;
|
|
|
|
|
|
Fbr0TempPa += rx_ring->Fbr0BufferSize;
|
|
|
|
|
@@ -400,10 +400,10 @@ int et131x_rx_dma_memory_alloc(struct et131x_adapter *adapter)
|
|
|
*/
|
|
|
void et131x_rx_dma_memory_free(struct et131x_adapter *adapter)
|
|
|
{
|
|
|
- uint32_t index;
|
|
|
- uint32_t bufsize;
|
|
|
- uint32_t pktStatRingSize;
|
|
|
- PMP_RFD pMpRfd;
|
|
|
+ u32 index;
|
|
|
+ u32 bufsize;
|
|
|
+ u32 pktStatRingSize;
|
|
|
+ PMP_RFD rfd;
|
|
|
RX_RING_t *rx_ring;
|
|
|
|
|
|
/* Setup some convenience pointers */
|
|
@@ -413,18 +413,18 @@ void et131x_rx_dma_memory_free(struct et131x_adapter *adapter)
|
|
|
WARN_ON(rx_ring->nReadyRecv != rx_ring->NumRfd);
|
|
|
|
|
|
while (!list_empty(&rx_ring->RecvList)) {
|
|
|
- pMpRfd = (MP_RFD *) list_entry(rx_ring->RecvList.next,
|
|
|
+ rfd = (MP_RFD *) list_entry(rx_ring->RecvList.next,
|
|
|
MP_RFD, list_node);
|
|
|
|
|
|
- list_del(&pMpRfd->list_node);
|
|
|
- et131x_rfd_resources_free(adapter, pMpRfd);
|
|
|
+ list_del(&rfd->list_node);
|
|
|
+ et131x_rfd_resources_free(adapter, rfd);
|
|
|
}
|
|
|
|
|
|
while (!list_empty(&rx_ring->RecvPendingList)) {
|
|
|
- pMpRfd = (MP_RFD *) list_entry(rx_ring->RecvPendingList.next,
|
|
|
+ rfd = (MP_RFD *) list_entry(rx_ring->RecvPendingList.next,
|
|
|
MP_RFD, list_node);
|
|
|
- list_del(&pMpRfd->list_node);
|
|
|
- et131x_rfd_resources_free(adapter, pMpRfd);
|
|
|
+ list_del(&rfd->list_node);
|
|
|
+ et131x_rfd_resources_free(adapter, rfd);
|
|
|
}
|
|
|
|
|
|
/* Free Free Buffer Ring 1 */
|
|
@@ -433,7 +433,7 @@ void et131x_rx_dma_memory_free(struct et131x_adapter *adapter)
|
|
|
for (index = 0; index <
|
|
|
(rx_ring->Fbr1NumEntries / FBR_CHUNKS); index++) {
|
|
|
if (rx_ring->Fbr1MemVa[index]) {
|
|
|
- uint32_t Fbr1Align;
|
|
|
+ u32 Fbr1Align;
|
|
|
|
|
|
if (rx_ring->Fbr1BufferSize > 4096)
|
|
|
Fbr1Align = 4096;
|
|
@@ -552,49 +552,49 @@ void et131x_rx_dma_memory_free(struct et131x_adapter *adapter)
|
|
|
int et131x_init_recv(struct et131x_adapter *adapter)
|
|
|
{
|
|
|
int status = -ENOMEM;
|
|
|
- PMP_RFD pMpRfd = NULL;
|
|
|
- uint32_t RfdCount;
|
|
|
- uint32_t TotalNumRfd = 0;
|
|
|
+ PMP_RFD rfd = NULL;
|
|
|
+ u32 rfdct;
|
|
|
+ u32 numrfd = 0;
|
|
|
RX_RING_t *rx_ring = NULL;
|
|
|
|
|
|
/* Setup some convenience pointers */
|
|
|
rx_ring = (RX_RING_t *) &adapter->RxRing;
|
|
|
|
|
|
/* Setup each RFD */
|
|
|
- for (RfdCount = 0; RfdCount < rx_ring->NumRfd; RfdCount++) {
|
|
|
- pMpRfd = (MP_RFD *) kmem_cache_alloc(rx_ring->RecvLookaside,
|
|
|
+ for (rfdct = 0; rfdct < rx_ring->NumRfd; rfdct++) {
|
|
|
+ rfd = (MP_RFD *) kmem_cache_alloc(rx_ring->RecvLookaside,
|
|
|
GFP_ATOMIC | GFP_DMA);
|
|
|
|
|
|
- if (!pMpRfd) {
|
|
|
+ if (!rfd) {
|
|
|
dev_err(&adapter->pdev->dev,
|
|
|
"Couldn't alloc RFD out of kmem_cache\n");
|
|
|
status = -ENOMEM;
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- status = et131x_rfd_resources_alloc(adapter, pMpRfd);
|
|
|
+ status = et131x_rfd_resources_alloc(adapter, rfd);
|
|
|
if (status != 0) {
|
|
|
dev_err(&adapter->pdev->dev,
|
|
|
"Couldn't alloc packet for RFD\n");
|
|
|
- kmem_cache_free(rx_ring->RecvLookaside, pMpRfd);
|
|
|
+ kmem_cache_free(rx_ring->RecvLookaside, rfd);
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
/* Add this RFD to the RecvList */
|
|
|
- list_add_tail(&pMpRfd->list_node, &rx_ring->RecvList);
|
|
|
+ list_add_tail(&rfd->list_node, &rx_ring->RecvList);
|
|
|
|
|
|
/* Increment both the available RFD's, and the total RFD's. */
|
|
|
rx_ring->nReadyRecv++;
|
|
|
- TotalNumRfd++;
|
|
|
+ numrfd++;
|
|
|
}
|
|
|
|
|
|
- if (TotalNumRfd > NIC_MIN_NUM_RFD)
|
|
|
+ if (numrfd > NIC_MIN_NUM_RFD)
|
|
|
status = 0;
|
|
|
|
|
|
- rx_ring->NumRfd = TotalNumRfd;
|
|
|
+ rx_ring->NumRfd = numrfd;
|
|
|
|
|
|
if (status != 0) {
|
|
|
- kmem_cache_free(rx_ring->RecvLookaside, pMpRfd);
|
|
|
+ kmem_cache_free(rx_ring->RecvLookaside, rfd);
|
|
|
dev_err(&adapter->pdev->dev,
|
|
|
"Allocation problems in et131x_init_recv\n");
|
|
|
}
|
|
@@ -604,13 +604,13 @@ int et131x_init_recv(struct et131x_adapter *adapter)
|
|
|
/**
|
|
|
* et131x_rfd_resources_alloc
|
|
|
* @adapter: pointer to our private adapter structure
|
|
|
- * @pMpRfd: pointer to a RFD
|
|
|
+ * @rfd: pointer to a RFD
|
|
|
*
|
|
|
* Returns 0 on success and errno on failure (as defined in errno.h)
|
|
|
*/
|
|
|
-int et131x_rfd_resources_alloc(struct et131x_adapter *adapter, MP_RFD *pMpRfd)
|
|
|
+int et131x_rfd_resources_alloc(struct et131x_adapter *adapter, MP_RFD *rfd)
|
|
|
{
|
|
|
- pMpRfd->Packet = NULL;
|
|
|
+ rfd->Packet = NULL;
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -618,12 +618,12 @@ int et131x_rfd_resources_alloc(struct et131x_adapter *adapter, MP_RFD *pMpRfd)
|
|
|
/**
|
|
|
* et131x_rfd_resources_free - Free the packet allocated for the given RFD
|
|
|
* @adapter: pointer to our private adapter structure
|
|
|
- * @pMpRfd: pointer to a RFD
|
|
|
+ * @rfd: pointer to a RFD
|
|
|
*/
|
|
|
-void et131x_rfd_resources_free(struct et131x_adapter *adapter, MP_RFD *pMpRfd)
|
|
|
+void et131x_rfd_resources_free(struct et131x_adapter *adapter, MP_RFD *rfd)
|
|
|
{
|
|
|
- pMpRfd->Packet = NULL;
|
|
|
- kmem_cache_free(adapter->RxRing.RecvLookaside, pMpRfd);
|
|
|
+ rfd->Packet = NULL;
|
|
|
+ kmem_cache_free(adapter->RxRing.RecvLookaside, rfd);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -633,9 +633,9 @@ void et131x_rfd_resources_free(struct et131x_adapter *adapter, MP_RFD *pMpRfd)
|
|
|
void ConfigRxDmaRegs(struct et131x_adapter *etdev)
|
|
|
{
|
|
|
struct _RXDMA_t __iomem *rx_dma = &etdev->regs->rxdma;
|
|
|
- struct _rx_ring_t *pRxLocal = &etdev->RxRing;
|
|
|
+ struct _rx_ring_t *rx_local = &etdev->RxRing;
|
|
|
PFBR_DESC_t fbr_entry;
|
|
|
- uint32_t entry;
|
|
|
+ u32 entry;
|
|
|
RXDMA_PSR_NUM_DES_t psr_num_des;
|
|
|
unsigned long flags;
|
|
|
|
|
@@ -649,19 +649,19 @@ void ConfigRxDmaRegs(struct et131x_adapter *etdev)
|
|
|
* are ever returned, make sure the high part is retrieved here
|
|
|
* before storing the adjusted address.
|
|
|
*/
|
|
|
- writel((uint32_t) ((u64)pRxLocal->pRxStatusPa >> 32),
|
|
|
+ writel((u32) ((u64)rx_local->pRxStatusPa >> 32),
|
|
|
&rx_dma->dma_wb_base_hi);
|
|
|
- writel((uint32_t) pRxLocal->pRxStatusPa, &rx_dma->dma_wb_base_lo);
|
|
|
+ writel((u32) rx_local->pRxStatusPa, &rx_dma->dma_wb_base_lo);
|
|
|
|
|
|
- memset(pRxLocal->pRxStatusVa, 0, sizeof(RX_STATUS_BLOCK_t));
|
|
|
+ memset(rx_local->pRxStatusVa, 0, sizeof(RX_STATUS_BLOCK_t));
|
|
|
|
|
|
/* Set the address and parameters of the packet status ring into the
|
|
|
* 1310's registers
|
|
|
*/
|
|
|
- writel((uint32_t) ((u64)pRxLocal->pPSRingPa >> 32),
|
|
|
+ writel((u32) ((u64)rx_local->pPSRingPa >> 32),
|
|
|
&rx_dma->psr_base_hi);
|
|
|
- writel((uint32_t) pRxLocal->pPSRingPa, &rx_dma->psr_base_lo);
|
|
|
- writel(pRxLocal->PsrNumEntries - 1, &rx_dma->psr_num_des.value);
|
|
|
+ writel((u32) rx_local->pPSRingPa, &rx_dma->psr_base_lo);
|
|
|
+ writel(rx_local->PsrNumEntries - 1, &rx_dma->psr_num_des.value);
|
|
|
writel(0, &rx_dma->psr_full_offset.value);
|
|
|
|
|
|
psr_num_des.value = readl(&rx_dma->psr_num_des.value);
|
|
@@ -671,14 +671,14 @@ void ConfigRxDmaRegs(struct et131x_adapter *etdev)
|
|
|
spin_lock_irqsave(&etdev->RcvLock, flags);
|
|
|
|
|
|
/* These local variables track the PSR in the adapter structure */
|
|
|
- pRxLocal->local_psr_full.bits.psr_full = 0;
|
|
|
- pRxLocal->local_psr_full.bits.psr_full_wrap = 0;
|
|
|
+ rx_local->local_psr_full.bits.psr_full = 0;
|
|
|
+ rx_local->local_psr_full.bits.psr_full_wrap = 0;
|
|
|
|
|
|
/* Now's the best time to initialize FBR1 contents */
|
|
|
- fbr_entry = (PFBR_DESC_t) pRxLocal->pFbr1RingVa;
|
|
|
- for (entry = 0; entry < pRxLocal->Fbr1NumEntries; entry++) {
|
|
|
- fbr_entry->addr_hi = pRxLocal->Fbr[1]->PAHigh[entry];
|
|
|
- fbr_entry->addr_lo = pRxLocal->Fbr[1]->PALow[entry];
|
|
|
+ fbr_entry = (PFBR_DESC_t) rx_local->pFbr1RingVa;
|
|
|
+ for (entry = 0; entry < rx_local->Fbr1NumEntries; entry++) {
|
|
|
+ fbr_entry->addr_hi = rx_local->Fbr[1]->PAHigh[entry];
|
|
|
+ fbr_entry->addr_lo = rx_local->Fbr[1]->PALow[entry];
|
|
|
fbr_entry->word2.bits.bi = entry;
|
|
|
fbr_entry++;
|
|
|
}
|
|
@@ -686,38 +686,38 @@ void ConfigRxDmaRegs(struct et131x_adapter *etdev)
|
|
|
/* Set the address and parameters of Free buffer ring 1 (and 0 if
|
|
|
* required) into the 1310's registers
|
|
|
*/
|
|
|
- writel((uint32_t) (pRxLocal->Fbr1Realpa >> 32), &rx_dma->fbr1_base_hi);
|
|
|
- writel((uint32_t) pRxLocal->Fbr1Realpa, &rx_dma->fbr1_base_lo);
|
|
|
- writel(pRxLocal->Fbr1NumEntries - 1, &rx_dma->fbr1_num_des.value);
|
|
|
+ writel((u32) (rx_local->Fbr1Realpa >> 32), &rx_dma->fbr1_base_hi);
|
|
|
+ writel((u32) rx_local->Fbr1Realpa, &rx_dma->fbr1_base_lo);
|
|
|
+ writel(rx_local->Fbr1NumEntries - 1, &rx_dma->fbr1_num_des.value);
|
|
|
writel(ET_DMA10_WRAP, &rx_dma->fbr1_full_offset);
|
|
|
|
|
|
/* This variable tracks the free buffer ring 1 full position, so it
|
|
|
* has to match the above.
|
|
|
*/
|
|
|
- pRxLocal->local_Fbr1_full = ET_DMA10_WRAP;
|
|
|
- writel(((pRxLocal->Fbr1NumEntries * LO_MARK_PERCENT_FOR_RX) / 100) - 1,
|
|
|
+ rx_local->local_Fbr1_full = ET_DMA10_WRAP;
|
|
|
+ writel(((rx_local->Fbr1NumEntries * LO_MARK_PERCENT_FOR_RX) / 100) - 1,
|
|
|
&rx_dma->fbr1_min_des.value);
|
|
|
|
|
|
#ifdef USE_FBR0
|
|
|
/* Now's the best time to initialize FBR0 contents */
|
|
|
- fbr_entry = (PFBR_DESC_t) pRxLocal->pFbr0RingVa;
|
|
|
- for (entry = 0; entry < pRxLocal->Fbr0NumEntries; entry++) {
|
|
|
- fbr_entry->addr_hi = pRxLocal->Fbr[0]->PAHigh[entry];
|
|
|
- fbr_entry->addr_lo = pRxLocal->Fbr[0]->PALow[entry];
|
|
|
+ fbr_entry = (PFBR_DESC_t) rx_local->pFbr0RingVa;
|
|
|
+ for (entry = 0; entry < rx_local->Fbr0NumEntries; entry++) {
|
|
|
+ fbr_entry->addr_hi = rx_local->Fbr[0]->PAHigh[entry];
|
|
|
+ fbr_entry->addr_lo = rx_local->Fbr[0]->PALow[entry];
|
|
|
fbr_entry->word2.bits.bi = entry;
|
|
|
fbr_entry++;
|
|
|
}
|
|
|
|
|
|
- writel((uint32_t) (pRxLocal->Fbr0Realpa >> 32), &rx_dma->fbr0_base_hi);
|
|
|
- writel((uint32_t) pRxLocal->Fbr0Realpa, &rx_dma->fbr0_base_lo);
|
|
|
- writel(pRxLocal->Fbr0NumEntries - 1, &rx_dma->fbr0_num_des.value);
|
|
|
+ writel((u32) (rx_local->Fbr0Realpa >> 32), &rx_dma->fbr0_base_hi);
|
|
|
+ writel((u32) rx_local->Fbr0Realpa, &rx_dma->fbr0_base_lo);
|
|
|
+ writel(rx_local->Fbr0NumEntries - 1, &rx_dma->fbr0_num_des.value);
|
|
|
writel(ET_DMA10_WRAP, &rx_dma->fbr0_full_offset);
|
|
|
|
|
|
/* This variable tracks the free buffer ring 0 full position, so it
|
|
|
* has to match the above.
|
|
|
*/
|
|
|
- pRxLocal->local_Fbr0_full = ET_DMA10_WRAP;
|
|
|
- writel(((pRxLocal->Fbr0NumEntries * LO_MARK_PERCENT_FOR_RX) / 100) - 1,
|
|
|
+ rx_local->local_Fbr0_full = ET_DMA10_WRAP;
|
|
|
+ writel(((rx_local->Fbr0NumEntries * LO_MARK_PERCENT_FOR_RX) / 100) - 1,
|
|
|
&rx_dma->fbr0_min_des.value);
|
|
|
#endif
|
|
|
|
|
@@ -818,7 +818,7 @@ void et131x_rx_dma_enable(struct et131x_adapter *etdev)
|
|
|
* nic_rx_pkts - Checks the hardware for available packets
|
|
|
* @etdev: pointer to our adapter
|
|
|
*
|
|
|
- * Returns pMpRfd, a pointer to our MPRFD.
|
|
|
+ * Returns rfd, a pointer to our MPRFD.
|
|
|
*
|
|
|
* Checks the hardware for available packets, using completion ring
|
|
|
* If packets are available, it gets an RFD from the RecvList, attaches
|
|
@@ -827,119 +827,119 @@ void et131x_rx_dma_enable(struct et131x_adapter *etdev)
|
|
|
*/
|
|
|
PMP_RFD nic_rx_pkts(struct et131x_adapter *etdev)
|
|
|
{
|
|
|
- struct _rx_ring_t *pRxLocal = &etdev->RxRing;
|
|
|
- PRX_STATUS_BLOCK_t pRxStatusBlock;
|
|
|
- PPKT_STAT_DESC_t pPSREntry;
|
|
|
- PMP_RFD pMpRfd;
|
|
|
- uint32_t nIndex;
|
|
|
- uint8_t *pBufVa;
|
|
|
+ struct _rx_ring_t *rx_local = &etdev->RxRing;
|
|
|
+ PRX_STATUS_BLOCK_t status;
|
|
|
+ PPKT_STAT_DESC_t psr;
|
|
|
+ PMP_RFD rfd;
|
|
|
+ u32 i;
|
|
|
+ uint8_t *buf;
|
|
|
unsigned long flags;
|
|
|
struct list_head *element;
|
|
|
- uint8_t ringIndex;
|
|
|
- uint16_t bufferIndex;
|
|
|
- uint32_t localLen;
|
|
|
+ uint8_t rindex;
|
|
|
+ uint16_t bindex;
|
|
|
+ u32 len;
|
|
|
PKT_STAT_DESC_WORD0_t Word0;
|
|
|
|
|
|
/* RX Status block is written by the DMA engine prior to every
|
|
|
* interrupt. It contains the next to be used entry in the Packet
|
|
|
* Status Ring, and also the two Free Buffer rings.
|
|
|
*/
|
|
|
- pRxStatusBlock = (PRX_STATUS_BLOCK_t) pRxLocal->pRxStatusVa;
|
|
|
+ status = (PRX_STATUS_BLOCK_t) rx_local->pRxStatusVa;
|
|
|
|
|
|
- if (pRxStatusBlock->Word1.bits.PSRoffset ==
|
|
|
- pRxLocal->local_psr_full.bits.psr_full &&
|
|
|
- pRxStatusBlock->Word1.bits.PSRwrap ==
|
|
|
- pRxLocal->local_psr_full.bits.psr_full_wrap) {
|
|
|
+ if (status->Word1.bits.PSRoffset ==
|
|
|
+ rx_local->local_psr_full.bits.psr_full &&
|
|
|
+ status->Word1.bits.PSRwrap ==
|
|
|
+ rx_local->local_psr_full.bits.psr_full_wrap) {
|
|
|
/* Looks like this ring is not updated yet */
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
|
/* The packet status ring indicates that data is available. */
|
|
|
- pPSREntry = (PPKT_STAT_DESC_t) (pRxLocal->pPSRingVa) +
|
|
|
- pRxLocal->local_psr_full.bits.psr_full;
|
|
|
+ psr = (PPKT_STAT_DESC_t) (rx_local->pPSRingVa) +
|
|
|
+ rx_local->local_psr_full.bits.psr_full;
|
|
|
|
|
|
/* Grab any information that is required once the PSR is
|
|
|
* advanced, since we can no longer rely on the memory being
|
|
|
* accurate
|
|
|
*/
|
|
|
- localLen = pPSREntry->word1.bits.length;
|
|
|
- ringIndex = (uint8_t) pPSREntry->word1.bits.ri;
|
|
|
- bufferIndex = (uint16_t) pPSREntry->word1.bits.bi;
|
|
|
- Word0 = pPSREntry->word0;
|
|
|
+ len = psr->word1.bits.length;
|
|
|
+ rindex = (uint8_t) psr->word1.bits.ri;
|
|
|
+ bindex = (uint16_t) psr->word1.bits.bi;
|
|
|
+ Word0 = psr->word0;
|
|
|
|
|
|
/* Indicate that we have used this PSR entry. */
|
|
|
- if (++pRxLocal->local_psr_full.bits.psr_full >
|
|
|
- pRxLocal->PsrNumEntries - 1) {
|
|
|
- pRxLocal->local_psr_full.bits.psr_full = 0;
|
|
|
- pRxLocal->local_psr_full.bits.psr_full_wrap ^= 1;
|
|
|
+ if (++rx_local->local_psr_full.bits.psr_full >
|
|
|
+ rx_local->PsrNumEntries - 1) {
|
|
|
+ rx_local->local_psr_full.bits.psr_full = 0;
|
|
|
+ rx_local->local_psr_full.bits.psr_full_wrap ^= 1;
|
|
|
}
|
|
|
|
|
|
- writel(pRxLocal->local_psr_full.value,
|
|
|
+ writel(rx_local->local_psr_full.value,
|
|
|
&etdev->regs->rxdma.psr_full_offset.value);
|
|
|
|
|
|
#ifndef USE_FBR0
|
|
|
- if (ringIndex != 1) {
|
|
|
+ if (rindex != 1) {
|
|
|
return NULL;
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
#ifdef USE_FBR0
|
|
|
- if (ringIndex > 1 ||
|
|
|
- (ringIndex == 0 &&
|
|
|
- bufferIndex > pRxLocal->Fbr0NumEntries - 1) ||
|
|
|
- (ringIndex == 1 &&
|
|
|
- bufferIndex > pRxLocal->Fbr1NumEntries - 1))
|
|
|
+ if (rindex > 1 ||
|
|
|
+ (rindex == 0 &&
|
|
|
+ bindex > rx_local->Fbr0NumEntries - 1) ||
|
|
|
+ (rindex == 1 &&
|
|
|
+ bindex > rx_local->Fbr1NumEntries - 1))
|
|
|
#else
|
|
|
- if (ringIndex != 1 ||
|
|
|
- bufferIndex > pRxLocal->Fbr1NumEntries - 1)
|
|
|
+ if (rindex != 1 ||
|
|
|
+ bindex > rx_local->Fbr1NumEntries - 1)
|
|
|
#endif
|
|
|
{
|
|
|
/* Illegal buffer or ring index cannot be used by S/W*/
|
|
|
dev_err(&etdev->pdev->dev,
|
|
|
"NICRxPkts PSR Entry %d indicates "
|
|
|
"length of %d and/or bad bi(%d)\n",
|
|
|
- pRxLocal->local_psr_full.bits.psr_full,
|
|
|
- localLen, bufferIndex);
|
|
|
+ rx_local->local_psr_full.bits.psr_full,
|
|
|
+ len, bindex);
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
|
/* Get and fill the RFD. */
|
|
|
spin_lock_irqsave(&etdev->RcvLock, flags);
|
|
|
|
|
|
- pMpRfd = NULL;
|
|
|
- element = pRxLocal->RecvList.next;
|
|
|
- pMpRfd = (PMP_RFD) list_entry(element, MP_RFD, list_node);
|
|
|
+ rfd = NULL;
|
|
|
+ element = rx_local->RecvList.next;
|
|
|
+ rfd = (PMP_RFD) list_entry(element, MP_RFD, list_node);
|
|
|
|
|
|
- if (pMpRfd == NULL) {
|
|
|
+ if (rfd == NULL) {
|
|
|
spin_unlock_irqrestore(&etdev->RcvLock, flags);
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
|
- list_del(&pMpRfd->list_node);
|
|
|
- pRxLocal->nReadyRecv--;
|
|
|
+ list_del(&rfd->list_node);
|
|
|
+ rx_local->nReadyRecv--;
|
|
|
|
|
|
spin_unlock_irqrestore(&etdev->RcvLock, flags);
|
|
|
|
|
|
- pMpRfd->bufferindex = bufferIndex;
|
|
|
- pMpRfd->ringindex = ringIndex;
|
|
|
+ rfd->bufferindex = bindex;
|
|
|
+ rfd->ringindex = rindex;
|
|
|
|
|
|
/* In V1 silicon, there is a bug which screws up filtering of
|
|
|
* runt packets. Therefore runt packet filtering is disabled
|
|
|
* in the MAC and the packets are dropped here. They are
|
|
|
* also counted here.
|
|
|
*/
|
|
|
- if (localLen < (NIC_MIN_PACKET_SIZE + 4)) {
|
|
|
+ if (len < (NIC_MIN_PACKET_SIZE + 4)) {
|
|
|
etdev->Stats.other_errors++;
|
|
|
- localLen = 0;
|
|
|
+ len = 0;
|
|
|
}
|
|
|
|
|
|
- if (localLen) {
|
|
|
+ if (len) {
|
|
|
if (etdev->ReplicaPhyLoopbk == 1) {
|
|
|
- pBufVa = pRxLocal->Fbr[ringIndex]->Va[bufferIndex];
|
|
|
+ buf = rx_local->Fbr[rindex]->Va[bindex];
|
|
|
|
|
|
- if (memcmp(&pBufVa[6], &etdev->CurrentAddress[0],
|
|
|
+ if (memcmp(&buf[6], &etdev->CurrentAddress[0],
|
|
|
ETH_ALEN) == 0) {
|
|
|
- if (memcmp(&pBufVa[42], "Replica packet",
|
|
|
+ if (memcmp(&buf[42], "Replica packet",
|
|
|
ETH_HLEN)) {
|
|
|
etdev->ReplicaPhyLoopbkPF = 1;
|
|
|
}
|
|
@@ -959,28 +959,28 @@ PMP_RFD nic_rx_pkts(struct et131x_adapter *etdev)
|
|
|
if ((etdev->PacketFilter & ET131X_PACKET_TYPE_MULTICAST)
|
|
|
&& !(etdev->PacketFilter & ET131X_PACKET_TYPE_PROMISCUOUS)
|
|
|
&& !(etdev->PacketFilter & ET131X_PACKET_TYPE_ALL_MULTICAST)) {
|
|
|
- pBufVa = pRxLocal->Fbr[ringIndex]->
|
|
|
- Va[bufferIndex];
|
|
|
+ buf = rx_local->Fbr[rindex]->
|
|
|
+ Va[bindex];
|
|
|
|
|
|
/* Loop through our list to see if the
|
|
|
* destination address of this packet
|
|
|
* matches one in our list.
|
|
|
*/
|
|
|
- for (nIndex = 0;
|
|
|
- nIndex < etdev->MCAddressCount;
|
|
|
- nIndex++) {
|
|
|
- if (pBufVa[0] ==
|
|
|
- etdev->MCList[nIndex][0]
|
|
|
- && pBufVa[1] ==
|
|
|
- etdev->MCList[nIndex][1]
|
|
|
- && pBufVa[2] ==
|
|
|
- etdev->MCList[nIndex][2]
|
|
|
- && pBufVa[3] ==
|
|
|
- etdev->MCList[nIndex][3]
|
|
|
- && pBufVa[4] ==
|
|
|
- etdev->MCList[nIndex][4]
|
|
|
- && pBufVa[5] ==
|
|
|
- etdev->MCList[nIndex][5]) {
|
|
|
+ for (i = 0;
|
|
|
+ i < etdev->MCAddressCount;
|
|
|
+ i++) {
|
|
|
+ if (buf[0] ==
|
|
|
+ etdev->MCList[i][0]
|
|
|
+ && buf[1] ==
|
|
|
+ etdev->MCList[i][1]
|
|
|
+ && buf[2] ==
|
|
|
+ etdev->MCList[i][2]
|
|
|
+ && buf[3] ==
|
|
|
+ etdev->MCList[i][3]
|
|
|
+ && buf[4] ==
|
|
|
+ etdev->MCList[i][4]
|
|
|
+ && buf[5] ==
|
|
|
+ etdev->MCList[i][5]) {
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -993,11 +993,11 @@ PMP_RFD nic_rx_pkts(struct et131x_adapter *etdev)
|
|
|
* so we free our RFD when we return
|
|
|
* from this function.
|
|
|
*/
|
|
|
- if (nIndex == etdev->MCAddressCount)
|
|
|
- localLen = 0;
|
|
|
+ if (i == etdev->MCAddressCount)
|
|
|
+ len = 0;
|
|
|
}
|
|
|
|
|
|
- if (localLen > 0)
|
|
|
+ if (len > 0)
|
|
|
etdev->Stats.multircv++;
|
|
|
} else if (Word0.value & ALCATEL_BROADCAST_PKT)
|
|
|
etdev->Stats.brdcstrcv++;
|
|
@@ -1010,24 +1010,24 @@ PMP_RFD nic_rx_pkts(struct et131x_adapter *etdev)
|
|
|
etdev->Stats.unircv++;
|
|
|
}
|
|
|
|
|
|
- if (localLen > 0) {
|
|
|
+ if (len > 0) {
|
|
|
struct sk_buff *skb = NULL;
|
|
|
|
|
|
- /* pMpRfd->PacketSize = localLen - 4; */
|
|
|
- pMpRfd->PacketSize = localLen;
|
|
|
+ /* rfd->PacketSize = len - 4; */
|
|
|
+ rfd->PacketSize = len;
|
|
|
|
|
|
- skb = dev_alloc_skb(pMpRfd->PacketSize + 2);
|
|
|
+ skb = dev_alloc_skb(rfd->PacketSize + 2);
|
|
|
if (!skb) {
|
|
|
dev_err(&etdev->pdev->dev,
|
|
|
"Couldn't alloc an SKB for Rx\n");
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
|
- etdev->net_stats.rx_bytes += pMpRfd->PacketSize;
|
|
|
+ etdev->net_stats.rx_bytes += rfd->PacketSize;
|
|
|
|
|
|
- memcpy(skb_put(skb, pMpRfd->PacketSize),
|
|
|
- pRxLocal->Fbr[ringIndex]->Va[bufferIndex],
|
|
|
- pMpRfd->PacketSize);
|
|
|
+ memcpy(skb_put(skb, rfd->PacketSize),
|
|
|
+ rx_local->Fbr[rindex]->Va[bindex],
|
|
|
+ rfd->PacketSize);
|
|
|
|
|
|
skb->dev = etdev->netdev;
|
|
|
skb->protocol = eth_type_trans(skb, etdev->netdev);
|
|
@@ -1035,11 +1035,11 @@ PMP_RFD nic_rx_pkts(struct et131x_adapter *etdev)
|
|
|
|
|
|
netif_rx(skb);
|
|
|
} else {
|
|
|
- pMpRfd->PacketSize = 0;
|
|
|
+ rfd->PacketSize = 0;
|
|
|
}
|
|
|
|
|
|
- nic_return_rfd(etdev, pMpRfd);
|
|
|
- return pMpRfd;
|
|
|
+ nic_return_rfd(etdev, rfd);
|
|
|
+ return rfd;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -1050,7 +1050,7 @@ PMP_RFD nic_rx_pkts(struct et131x_adapter *etdev)
|
|
|
*/
|
|
|
void et131x_reset_recv(struct et131x_adapter *etdev)
|
|
|
{
|
|
|
- PMP_RFD pMpRfd;
|
|
|
+ PMP_RFD rfd;
|
|
|
struct list_head *element;
|
|
|
|
|
|
WARN_ON(list_empty(&etdev->RxRing.RecvList));
|
|
@@ -1061,9 +1061,9 @@ void et131x_reset_recv(struct et131x_adapter *etdev)
|
|
|
while (!list_empty(&etdev->RxRing.RecvPendingList)) {
|
|
|
element = etdev->RxRing.RecvPendingList.next;
|
|
|
|
|
|
- pMpRfd = (PMP_RFD) list_entry(element, MP_RFD, list_node);
|
|
|
+ rfd = (PMP_RFD) list_entry(element, MP_RFD, list_node);
|
|
|
|
|
|
- list_move_tail(&pMpRfd->list_node, &etdev->RxRing.RecvList);
|
|
|
+ list_move_tail(&rfd->list_node, &etdev->RxRing.RecvList);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1075,27 +1075,24 @@ void et131x_reset_recv(struct et131x_adapter *etdev)
|
|
|
*/
|
|
|
void et131x_handle_recv_interrupt(struct et131x_adapter *etdev)
|
|
|
{
|
|
|
- PMP_RFD pMpRfd = NULL;
|
|
|
- struct sk_buff *PacketArray[NUM_PACKETS_HANDLED];
|
|
|
- PMP_RFD RFDFreeArray[NUM_PACKETS_HANDLED];
|
|
|
- uint32_t PacketArrayCount = 0;
|
|
|
- uint32_t PacketsToHandle;
|
|
|
- uint32_t PacketFreeCount = 0;
|
|
|
- bool TempUnfinishedRec = false;
|
|
|
-
|
|
|
- PacketsToHandle = NUM_PACKETS_HANDLED;
|
|
|
+ PMP_RFD rfd = NULL;
|
|
|
+ struct sk_buff *packets[NUM_PACKETS_HANDLED];
|
|
|
+ PMP_RFD freed[NUM_PACKETS_HANDLED];
|
|
|
+ u32 count = 0;
|
|
|
+ u32 nfree = 0;
|
|
|
+ bool done = true;
|
|
|
|
|
|
/* Process up to available RFD's */
|
|
|
- while (PacketArrayCount < PacketsToHandle) {
|
|
|
+ while (count < NUM_PACKETS_HANDLED) {
|
|
|
if (list_empty(&etdev->RxRing.RecvList)) {
|
|
|
WARN_ON(etdev->RxRing.nReadyRecv != 0);
|
|
|
- TempUnfinishedRec = true;
|
|
|
+ done = false;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- pMpRfd = nic_rx_pkts(etdev);
|
|
|
+ rfd = nic_rx_pkts(etdev);
|
|
|
|
|
|
- if (pMpRfd == NULL)
|
|
|
+ if (rfd == NULL)
|
|
|
break;
|
|
|
|
|
|
/* Do not receive any packets until a filter has been set.
|
|
@@ -1105,7 +1102,7 @@ void et131x_handle_recv_interrupt(struct et131x_adapter *etdev)
|
|
|
*/
|
|
|
if (!etdev->PacketFilter ||
|
|
|
!(etdev->Flags & fMP_ADAPTER_LINK_DETECTION) ||
|
|
|
- pMpRfd->PacketSize == 0) {
|
|
|
+ rfd->PacketSize == 0) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
@@ -1123,25 +1120,24 @@ void et131x_handle_recv_interrupt(struct et131x_adapter *etdev)
|
|
|
* pending list anyway.
|
|
|
*/
|
|
|
} else {
|
|
|
- RFDFreeArray[PacketFreeCount] = pMpRfd;
|
|
|
- PacketFreeCount++;
|
|
|
+ freed[nfree] = rfd;
|
|
|
+ nfree++;
|
|
|
|
|
|
dev_warn(&etdev->pdev->dev,
|
|
|
"RFD's are running out\n");
|
|
|
}
|
|
|
|
|
|
- PacketArray[PacketArrayCount] = pMpRfd->Packet;
|
|
|
- PacketArrayCount++;
|
|
|
+ packets[count] = rfd->Packet;
|
|
|
+ count++;
|
|
|
}
|
|
|
|
|
|
- if ((PacketArrayCount == NUM_PACKETS_HANDLED) || TempUnfinishedRec) {
|
|
|
+ if (count == NUM_PACKETS_HANDLED || !done) {
|
|
|
etdev->RxRing.UnfinishedReceives = true;
|
|
|
writel(PARM_TX_TIME_INT_DEF * NANO_IN_A_MICRO,
|
|
|
&etdev->regs->global.watchdog_timer);
|
|
|
- } else {
|
|
|
+ } else
|
|
|
/* Watchdog timer will disable itself if appropriate. */
|
|
|
etdev->RxRing.UnfinishedReceives = false;
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
static inline u32 bump_fbr(u32 *fbr, u32 limit)
|
|
@@ -1165,14 +1161,14 @@ static inline u32 bump_fbr(u32 *fbr, u32 limit)
|
|
|
/**
|
|
|
* NICReturnRFD - Recycle a RFD and put it back onto the receive list
|
|
|
* @etdev: pointer to our adapter
|
|
|
- * @pMpRfd: pointer to the RFD
|
|
|
+ * @rfd: pointer to the RFD
|
|
|
*/
|
|
|
-void nic_return_rfd(struct et131x_adapter *etdev, PMP_RFD pMpRfd)
|
|
|
+void nic_return_rfd(struct et131x_adapter *etdev, PMP_RFD rfd)
|
|
|
{
|
|
|
struct _rx_ring_t *rx_local = &etdev->RxRing;
|
|
|
struct _RXDMA_t __iomem *rx_dma = &etdev->regs->rxdma;
|
|
|
- uint16_t bi = pMpRfd->bufferindex;
|
|
|
- uint8_t ri = pMpRfd->ringindex;
|
|
|
+ uint16_t bi = rfd->bufferindex;
|
|
|
+ uint8_t ri = rfd->ringindex;
|
|
|
unsigned long flags;
|
|
|
|
|
|
/* We don't use any of the OOB data besides status. Otherwise, we
|
|
@@ -1186,7 +1182,7 @@ void nic_return_rfd(struct et131x_adapter *etdev, PMP_RFD pMpRfd)
|
|
|
spin_lock_irqsave(&etdev->FbrLock, flags);
|
|
|
|
|
|
if (ri == 1) {
|
|
|
- PFBR_DESC_t pNextDesc =
|
|
|
+ PFBR_DESC_t next =
|
|
|
(PFBR_DESC_t) (rx_local->pFbr1RingVa) +
|
|
|
INDEX10(rx_local->local_Fbr1_full);
|
|
|
|
|
@@ -1194,9 +1190,9 @@ void nic_return_rfd(struct et131x_adapter *etdev, PMP_RFD pMpRfd)
|
|
|
* the PA / Buffer Index for the returned buffer into
|
|
|
* the oldest (next to be freed)FBR entry
|
|
|
*/
|
|
|
- pNextDesc->addr_hi = rx_local->Fbr[1]->PAHigh[bi];
|
|
|
- pNextDesc->addr_lo = rx_local->Fbr[1]->PALow[bi];
|
|
|
- pNextDesc->word2.value = bi;
|
|
|
+ next->addr_hi = rx_local->Fbr[1]->PAHigh[bi];
|
|
|
+ next->addr_lo = rx_local->Fbr[1]->PALow[bi];
|
|
|
+ next->word2.value = bi;
|
|
|
|
|
|
writel(bump_fbr(&rx_local->local_Fbr1_full,
|
|
|
rx_local->Fbr1NumEntries - 1),
|
|
@@ -1204,7 +1200,7 @@ void nic_return_rfd(struct et131x_adapter *etdev, PMP_RFD pMpRfd)
|
|
|
}
|
|
|
#ifdef USE_FBR0
|
|
|
else {
|
|
|
- PFBR_DESC_t pNextDesc =
|
|
|
+ PFBR_DESC_t next =
|
|
|
(PFBR_DESC_t) rx_local->pFbr0RingVa +
|
|
|
INDEX10(rx_local->local_Fbr0_full);
|
|
|
|
|
@@ -1212,9 +1208,9 @@ void nic_return_rfd(struct et131x_adapter *etdev, PMP_RFD pMpRfd)
|
|
|
* the PA / Buffer Index for the returned buffer into
|
|
|
* the oldest (next to be freed) FBR entry
|
|
|
*/
|
|
|
- pNextDesc->addr_hi = rx_local->Fbr[0]->PAHigh[bi];
|
|
|
- pNextDesc->addr_lo = rx_local->Fbr[0]->PALow[bi];
|
|
|
- pNextDesc->word2.value = bi;
|
|
|
+ next->addr_hi = rx_local->Fbr[0]->PAHigh[bi];
|
|
|
+ next->addr_lo = rx_local->Fbr[0]->PALow[bi];
|
|
|
+ next->word2.value = bi;
|
|
|
|
|
|
writel(bump_fbr(&rx_local->local_Fbr0_full,
|
|
|
rx_local->Fbr0NumEntries - 1),
|
|
@@ -1231,7 +1227,7 @@ void nic_return_rfd(struct et131x_adapter *etdev, PMP_RFD pMpRfd)
|
|
|
* our list
|
|
|
*/
|
|
|
spin_lock_irqsave(&etdev->RcvLock, flags);
|
|
|
- list_add_tail(&pMpRfd->list_node, &rx_local->RecvList);
|
|
|
+ list_add_tail(&rfd->list_node, &rx_local->RecvList);
|
|
|
rx_local->nReadyRecv++;
|
|
|
spin_unlock_irqrestore(&etdev->RcvLock, flags);
|
|
|
|