Lines Matching refs:tp

124 static void	tms380tr_cancel_tx_queue(struct net_local* tp);
129 static unsigned char tms380tr_chk_ssb(struct net_local *tp, unsigned short IrqType);
149 static void tms380tr_init_ipb(struct net_local *tp);
175 static void tms380tr_update_rcv_stats(struct net_local *tp,
248 struct net_local *tp = netdev_priv(dev);
252 spin_lock_init(&tp->lock);
253 init_timer(&tp->timer);
276 tp->timer.expires = jiffies + 30*HZ;
277 tp->timer.function = tms380tr_timer_end_wait;
278 tp->timer.data = (unsigned long)dev;
279 add_timer(&tp->timer);
292 tp->Sleeping = 1;
293 interruptible_sleep_on(&tp->wait_for_tok_int);
294 del_timer(&tp->timer);
297 if(tp->AdapterVirtOpenFlag == 0)
303 tp->StartTime = jiffies;
306 tp->timer.expires = jiffies + 2*HZ;
307 tp->timer.function = tms380tr_timer_chk;
308 tp->timer.data = (unsigned long)dev;
309 add_timer(&tp->timer);
320 struct net_local *tp = netdev_priv(dev);
322 if(tp->Sleeping)
324 tp->Sleeping = 0;
325 wake_up_interruptible(&tp->wait_for_tok_int);
334 struct net_local *tp = netdev_priv(dev);
337 tms380tr_init_ipb(tp);
369 struct net_local *tp = netdev_priv(dev);
373 tp->scb.CMD = 0;
374 tp->scb.Parm[0] = 0;
375 tp->scb.Parm[1] = 0;
377 tp->ssb.STS = 0;
378 tp->ssb.Parm[0] = 0;
379 tp->ssb.Parm[1] = 0;
380 tp->ssb.Parm[2] = 0;
382 tp->CMDqueue = 0;
384 tp->AdapterOpenFlag = 0;
385 tp->AdapterVirtOpenFlag = 0;
386 tp->ScbInUse = 0;
387 tp->OpenCommandIssued = 0;
388 tp->ReOpenInProgress = 0;
389 tp->HaltInProgress = 0;
390 tp->TransmitHaltScheduled = 0;
391 tp->LobeWireFaultLogged = 0;
392 tp->LastOpenStatus = 0;
393 tp->MaxPacketSize = DEFAULT_PACKET_SIZE;
398 tp->Tpl[i].NextTPLAddr = htonl(((char *)(&tp->Tpl[(i+1) % TPL_NUM]) - (char *)tp) + tp->dmabuffer); /* DMA buffer may be MMU driven */
399 tp->Tpl[i].Status = 0;
400 tp->Tpl[i].FrameSize = 0;
401 tp->Tpl[i].FragList[0].DataCount = 0;
402 tp->Tpl[i].FragList[0].DataAddr = 0;
403 tp->Tpl[i].NextTPLPtr = &tp->Tpl[(i+1) % TPL_NUM];
404 tp->Tpl[i].MData = NULL;
405 tp->Tpl[i].TPLIndex = i;
406 tp->Tpl[i].DMABuff = 0;
407 tp->Tpl[i].BusyFlag = 0;
410 tp->TplFree = tp->TplBusy = &tp->Tpl[0];
415 tp->Rpl[i].NextRPLAddr = htonl(((char *)(&tp->Rpl[(i+1) % RPL_NUM]) - (char *)tp) + tp->dmabuffer); /* DMA buffer may be MMU driven */
416 tp->Rpl[i].Status = (RX_VALID | RX_START_FRAME | RX_END_FRAME | RX_FRAME_IRQ);
417 tp->Rpl[i].FrameSize = 0;
418 tp->Rpl[i].FragList[0].DataCount = cpu_to_be16((unsigned short)tp->MaxPacketSize);
421 tp->Rpl[i].Skb = dev_alloc_skb(tp->MaxPacketSize);
422 tp->Rpl[i].DMABuff = 0;
425 if(tp->Rpl[i].Skb == NULL)
427 tp->Rpl[i].SkbStat = SKB_UNAVAILABLE;
428 tp->Rpl[i].FragList[0].DataAddr = htonl(((char *)tp->LocalRxBuffers[i] - (char *)tp) + tp->dmabuffer);
429 tp->Rpl[i].MData = tp->LocalRxBuffers[i];
433 tp->Rpl[i].Skb->dev = dev;
434 skb_put(tp->Rpl[i].Skb, tp->MaxPacketSize);
437 dmabuf = dma_map_single(tp->pdev, tp->Rpl[i].Skb->data, tp->MaxPacketSize, DMA_FROM_DEVICE);
438 if(tp->dmalimit && (dmabuf + tp->MaxPacketSize > tp->dmalimit))
440 tp->Rpl[i].SkbStat = SKB_DATA_COPY;
441 tp->Rpl[i].FragList[0].DataAddr = htonl(((char *)tp->LocalRxBuffers[i] - (char *)tp) + tp->dmabuffer);
442 tp->Rpl[i].MData = tp->LocalRxBuffers[i];
446 tp->Rpl[i].SkbStat = SKB_DMA_DIRECT;
447 tp->Rpl[i].FragList[0].DataAddr = htonl(dmabuf);
448 tp->Rpl[i].MData = tp->Rpl[i].Skb->data;
449 tp->Rpl[i].DMABuff = dmabuf;
453 tp->Rpl[i].NextRPLPtr = &tp->Rpl[(i+1) % RPL_NUM];
454 tp->Rpl[i].RPLIndex = i;
457 tp->RplHead = &tp->Rpl[0];
458 tp->RplTail = &tp->Rpl[RPL_NUM-1];
459 tp->RplTail->Status = (RX_START_FRAME | RX_END_FRAME | RX_FRAME_IRQ);
465 static void tms380tr_init_ipb(struct net_local *tp)
467 tp->ipb.Init_Options = BURST_MODE;
468 tp->ipb.CMD_Status_IV = 0;
469 tp->ipb.TX_IV = 0;
470 tp->ipb.RX_IV = 0;
471 tp->ipb.Ring_Status_IV = 0;
472 tp->ipb.SCB_Clear_IV = 0;
473 tp->ipb.Adapter_CHK_IV = 0;
474 tp->ipb.RX_Burst_Size = BURST_SIZE;
475 tp->ipb.TX_Burst_Size = BURST_SIZE;
476 tp->ipb.DMA_Abort_Thrhld = DMA_RETRIES;
477 tp->ipb.SCB_Addr = 0;
478 tp->ipb.SSB_Addr = 0;
486 struct net_local *tp;
493 tp = netdev_priv(dev);
495 tp->ocpl.OPENOptions = 0;
496 tp->ocpl.OPENOptions |= ENABLE_FULL_DUPLEX_SELECTION;
497 tp->ocpl.FullDuplex = 0;
498 tp->ocpl.FullDuplex |= OPEN_FULL_DUPLEX_OFF;
508 tp->ocpl.NodeAddr[i] = ((unsigned char *)dev->dev_addr)[i];
510 tp->ocpl.GroupAddr = 0;
511 tp->ocpl.FunctAddr = 0;
512 tp->ocpl.RxListSize = cpu_to_be16((unsigned short)RplSize);
513 tp->ocpl.TxListSize = cpu_to_be16((unsigned short)TplSize);
514 tp->ocpl.BufSize = cpu_to_be16((unsigned short)BufferSize);
515 tp->ocpl.Reserved = 0;
516 tp->ocpl.TXBufMin = TX_BUF_MIN;
517 tp->ocpl.TXBufMax = TX_BUF_MAX;
519 Addr = htonl(((char *)tp->ProductID - (char *)tp) + tp->dmabuffer);
521 tp->ocpl.ProdIDAddr[0] = LOWORD(Addr);
522 tp->ocpl.ProdIDAddr[1] = HIWORD(Addr);
530 struct net_local *tp = netdev_priv(dev);
532 if(tp->OpenCommandIssued)
535 tp->OpenCommandIssued = 1;
562 struct net_local *tp = netdev_priv(dev);
564 tp->CMDqueue |= Command;
588 struct net_local *tp = netdev_priv(dev);
592 if(tp->TplFree->NextTPLPtr->BusyFlag)
609 struct net_local *tp = netdev_priv(dev);
616 spin_lock_irqsave(&tp->lock, flags);
617 if(tp->TplFree->NextTPLPtr->BusyFlag) { /* No free TPL */
620 spin_unlock_irqrestore(&tp->lock, flags);
629 dmabuf = dma_map_single(tp->pdev, skb->data, length, DMA_TO_DEVICE);
630 if(tp->dmalimit && (dmabuf + length > tp->dmalimit)) {
632 dma_unmap_single(tp->pdev, dmabuf, length, DMA_TO_DEVICE);
634 i = tp->TplFree->TPLIndex;
635 buf = tp->LocalTxBuffers[i];
637 newbuf = ((char *)buf - (char *)tp) + tp->dmabuffer;
646 tp->LastSendTime = jiffies;
647 tpl = tp->TplFree; /* Get the "free" TPL */
649 tp->TplFree = tpl->NextTPLPtr;
668 spin_unlock_irqrestore(&tp->lock, flags);
706 struct net_local *tp = netdev_priv(dev);
708 if(tp->HaltInProgress)
712 if(time_before(tp->LastSendTime + SEND_TIMEOUT, jiffies) &&
713 (tp->TplFree != tp->TplBusy))
716 tp->LastSendTime = jiffies;
720 tp->timer.expires = jiffies + 2*HZ;
721 add_timer(&tp->timer);
723 if(tp->AdapterOpenFlag || tp->ReOpenInProgress)
725 tp->ReOpenInProgress = 1;
735 struct net_local *tp;
739 tp = netdev_priv(dev);
747 if(!tms380tr_chk_ssb(tp, irq_type)) {
760 if(tp->ssb.Parm[0] & COMMAND_COMPLETE) {
761 tp->TransmitCommandActive = 0;
762 tp->TransmitHaltScheduled = 0;
781 tp->ScbInUse = 0;
827 struct net_local *tp = netdev_priv(dev);
828 SSB *ssb = &tp->ssb;
850 static unsigned char tms380tr_chk_ssb(struct net_local *tp, unsigned short IrqType)
852 SSB *ssb = &tp->ssb; /* The address of the SSB. */
911 struct net_local *tp = netdev_priv(dev);
918 ssb_cmd = tp->ssb.STS;
919 ssb_parm_0 = tp->ssb.Parm[0];
920 ssb_parm_1 = tp->ssb.Parm[1];
924 tp->Sleeping = 0;
925 if(!tp->ReOpenInProgress)
926 wake_up_interruptible(&tp->wait_for_tok_int);
928 tp->OpenCommandIssued = 0;
929 tp->ScbInUse = 0;
934 tp->LobeWireFaultLogged = 0;
935 tp->AdapterOpenFlag = 1;
936 tp->AdapterVirtOpenFlag = 1;
937 tp->TransmitCommandActive = 0;
941 if(tp->ReOpenInProgress)
942 tp->ReOpenInProgress = 0;
969 if(!tp->LobeWireFaultLogged)
971 tp->LobeWireFaultLogged = 1;
974 tp->ReOpenInProgress = 1;
975 tp->AdapterOpenFlag = 0;
976 tp->AdapterVirtOpenFlag = 1;
1010 tp->LastOpenStatus =
1016 tp->LastOpenStatus =
1022 tp->LastOpenStatus =
1028 tp->LastOpenStatus =
1034 tp->LastOpenStatus =
1040 tp->LastOpenStatus =
1046 tp->LastOpenStatus =
1052 tp->LastOpenStatus =
1058 tp->LastOpenStatus =
1064 tp->LastOpenStatus =
1070 tp->AdapterOpenFlag = 0;
1071 tp->AdapterVirtOpenFlag = 0;
1085 tp->MacStat.line_errors += tp->errorlogtable.Line_Error;
1086 tp->MacStat.burst_errors += tp->errorlogtable.Burst_Error;
1087 tp->MacStat.A_C_errors += tp->errorlogtable.ARI_FCI_Error;
1088 tp->MacStat.lost_frames += tp->errorlogtable.Lost_Frame_Error;
1089 tp->MacStat.recv_congest_count += tp->errorlogtable.Rx_Congest_Error;
1090 tp->MacStat.rx_errors += tp->errorlogtable.Rx_Congest_Error;
1091 tp->MacStat.frame_copied_errors += tp->errorlogtable.Frame_Copied_Error;
1092 tp->MacStat.token_errors += tp->errorlogtable.Token_Error;
1093 tp->MacStat.dummy1 += tp->errorlogtable.DMA_Bus_Error;
1094 tp->MacStat.dummy1 += tp->errorlogtable.DMA_Parity_Error;
1095 tp->MacStat.abort_delimiters += tp->errorlogtable.AbortDelimeters;
1096 tp->MacStat.frequency_errors += tp->errorlogtable.Frequency_Error;
1097 tp->MacStat.internal_errors += tp->errorlogtable.Internal_Error;
1106 struct net_local *tp = netdev_priv(dev);
1109 del_timer(&tp->timer);
1113 tp->HaltInProgress = 1;
1115 tp->timer.expires = jiffies + 1*HZ;
1116 tp->timer.function = tms380tr_timer_end_wait;
1117 tp->timer.data = (unsigned long)dev;
1118 add_timer(&tp->timer);
1122 tp->Sleeping = 1;
1123 interruptible_sleep_on(&tp->wait_for_tok_int);
1124 tp->TransmitCommandActive = 0;
1126 del_timer(&tp->timer);
1143 tms380tr_cancel_tx_queue(tp);
1154 struct net_local *tp = netdev_priv(dev);
1156 return (struct net_device_stats *)&tp->MacStat;
1164 struct net_local *tp = netdev_priv(dev);
1167 OpenOptions = tp->ocpl.OPENOptions &
1174 tp->ocpl.FunctAddr = 0;
1185 tp->ocpl.FunctAddr = 0xFFFFFFFF;
1192 ((char *)(&tp->ocpl.FunctAddr))[0] |=
1194 ((char *)(&tp->ocpl.FunctAddr))[1] |=
1196 ((char *)(&tp->ocpl.FunctAddr))[2] |=
1198 ((char *)(&tp->ocpl.FunctAddr))[3] |=
1205 tp->ocpl.OPENOptions = OpenOptions;
1250 struct net_local *tp = netdev_priv(dev);
1255 if (request_firmware(&fw_entry, "tms380tr.bin", tp->pdev) != 0) {
1274 if(tp->setnselout)
1275 c |= (*tp->setnselout)(dev);
1279 tp->ScbInUse = 0;
1401 struct net_local *tp = netdev_priv(dev);
1406 void *ptr = (void *)&tp->ipb;
1408 unsigned char *cb_ptr = (unsigned char *) &tp->scb;
1409 unsigned char *sb_ptr = (unsigned char *) &tp->ssb;
1414 tp->ipb.SCB_Addr = SWAPW(((char *)&tp->scb - (char *)tp) + tp->dmabuffer);
1415 tp->ipb.SSB_Addr = SWAPW(((char *)&tp->ssb - (char *)tp) + tp->dmabuffer);
1419 printk(KERN_DEBUG "%s: buffer (real): %lx\n", dev->name, (long) &tp->scb);
1420 printk(KERN_DEBUG "%s: buffer (virt): %lx\n", dev->name, (long) ((char *)&tp->scb - (char *)tp) + (long) tp->dmabuffer);
1421 printk(KERN_DEBUG "%s: buffer (DMA) : %lx\n", dev->name, (long) tp->dmabuffer);
1422 printk(KERN_DEBUG "%s: buffer (tp) : %lx\n", dev->name, (long) tp);
1514 struct net_local *tp = netdev_priv(dev);
1517 if(tp->CMDqueue == 0)
1521 if(tp->ScbInUse == 1)
1527 if (tp->AdapterOpenFlag == 0) {
1528 if (tp->CMDqueue & OC_OPEN) {
1530 tp->CMDqueue ^= OC_OPEN;
1532 Addr = htonl(((char *)&tp->ocpl - (char *)tp) + tp->dmabuffer);
1533 tp->scb.Parm[0] = LOWORD(Addr);
1534 tp->scb.Parm[1] = HIWORD(Addr);
1535 tp->scb.CMD = OPEN;
1546 if (tp->CMDqueue & OC_CLOSE) {
1547 tp->CMDqueue ^= OC_CLOSE;
1548 tp->AdapterOpenFlag = 0;
1549 tp->scb.Parm[0] = 0; /* Parm[0], Parm[1] are ignored */
1550 tp->scb.Parm[1] = 0; /* but should be set to zero! */
1551 tp->scb.CMD = CLOSE;
1552 if(!tp->HaltInProgress)
1553 tp->CMDqueue |= OC_OPEN; /* re-open adapter */
1555 tp->CMDqueue = 0; /* no more commands */
1556 } else if (tp->CMDqueue & OC_RECEIVE) {
1557 tp->CMDqueue ^= OC_RECEIVE;
1558 Addr = htonl(((char *)tp->RplHead - (char *)tp) + tp->dmabuffer);
1559 tp->scb.Parm[0] = LOWORD(Addr);
1560 tp->scb.Parm[1] = HIWORD(Addr);
1561 tp->scb.CMD = RECEIVE;
1562 } else if (tp->CMDqueue & OC_TRANSMIT_HALT) {
1566 tp->CMDqueue ^= OC_TRANSMIT_HALT;
1567 tp->scb.CMD = TRANSMIT_HALT;
1572 tp->scb.Parm[0] = 0;
1573 tp->scb.Parm[1] = 0;
1574 } else if (tp->CMDqueue & OC_TRANSMIT) {
1578 if (tp->TransmitCommandActive) {
1579 if (!tp->TransmitHaltScheduled) {
1580 tp->TransmitHaltScheduled = 1;
1583 tp->TransmitCommandActive = 0;
1587 tp->CMDqueue ^= OC_TRANSMIT;
1588 tms380tr_cancel_tx_queue(tp);
1589 Addr = htonl(((char *)tp->TplBusy - (char *)tp) + tp->dmabuffer);
1590 tp->scb.Parm[0] = LOWORD(Addr);
1591 tp->scb.Parm[1] = HIWORD(Addr);
1592 tp->scb.CMD = TRANSMIT;
1593 tp->TransmitCommandActive = 1;
1594 } else if (tp->CMDqueue & OC_MODIFY_OPEN_PARMS) {
1595 tp->CMDqueue ^= OC_MODIFY_OPEN_PARMS;
1596 tp->scb.Parm[0] = tp->ocpl.OPENOptions; /* new OPEN options*/
1597 tp->scb.Parm[0] |= ENABLE_FULL_DUPLEX_SELECTION;
1598 tp->scb.Parm[1] = 0; /* is ignored but should be zero */
1599 tp->scb.CMD = MODIFY_OPEN_PARMS;
1600 } else if (tp->CMDqueue & OC_SET_FUNCT_ADDR) {
1601 tp->CMDqueue ^= OC_SET_FUNCT_ADDR;
1602 tp->scb.Parm[0] = LOWORD(tp->ocpl.FunctAddr);
1603 tp->scb.Parm[1] = HIWORD(tp->ocpl.FunctAddr);
1604 tp->scb.CMD = SET_FUNCT_ADDR;
1605 } else if (tp->CMDqueue & OC_SET_GROUP_ADDR) {
1606 tp->CMDqueue ^= OC_SET_GROUP_ADDR;
1607 tp->scb.Parm[0] = LOWORD(tp->ocpl.GroupAddr);
1608 tp->scb.Parm[1] = HIWORD(tp->ocpl.GroupAddr);
1609 tp->scb.CMD = SET_GROUP_ADDR;
1610 } else if (tp->CMDqueue & OC_READ_ERROR_LOG) {
1611 tp->CMDqueue ^= OC_READ_ERROR_LOG;
1612 Addr = htonl(((char *)&tp->errorlogtable - (char *)tp) + tp->dmabuffer);
1613 tp->scb.Parm[0] = LOWORD(Addr);
1614 tp->scb.Parm[1] = HIWORD(Addr);
1615 tp->scb.CMD = READ_ERROR_LOG;
1618 tp->CMDqueue = 0;
1623 tp->ScbInUse = 1; /* Set semaphore: SCB in use. */
1639 struct net_local *tp = netdev_priv(dev);
1641 tp->CurrentRingStatus = be16_to_cpu((unsigned short)tp->ssb.Parm[0]);
1644 if(tp->ssb.Parm[0] & SIGNAL_LOSS)
1647 tp->MacStat.line_errors++;
1651 if(tp->ssb.Parm[0] & LOBE_WIRE_FAULT)
1655 tp->MacStat.line_errors++;
1658 if(tp->ssb.Parm[0] & RING_RECOVERY)
1662 if(tp->ssb.Parm[0] & COUNTER_OVERFLOW)
1669 if(tp->ssb.Parm[0] & REMOVE_RECEIVED)
1674 if(tp->ssb.Parm[0] & AUTO_REMOVAL_ERROR)
1678 if(tp->ssb.Parm[0] & HARD_ERROR)
1681 if(tp->ssb.Parm[0] & SOFT_ERROR)
1684 if(tp->ssb.Parm[0] & TRANSMIT_BEACON)
1687 if(tp->ssb.Parm[0] & SINGLE_STATION)
1691 if(tp->ssb.Parm[0] & ADAPTER_CLOSED)
1695 dev->name, tp->CurrentRingStatus);
1696 tp->AdapterOpenFlag = 0;
1709 struct net_local *tp = netdev_priv(dev);
1711 tp->AdapterOpenFlag = 0; /* Adapter closed now */
1853 tp->AdapterOpenFlag = 1;
1863 struct net_local *tp = netdev_priv(dev);
1866 tms380tr_read_ram(dev, (unsigned char *)&tp->intptrs.BurnedInAddrPtr,
1869 cpu_to_be16((unsigned short)tp->intptrs.AdapterRAMPtr), 2);
1914 static void tms380tr_cancel_tx_queue(struct net_local* tp)
1922 if(tp->TransmitCommandActive)
1927 tpl = tp->TplBusy;
1931 tp->TplBusy = tpl->NextTPLPtr;
1937 dma_unmap_single(tp->pdev, tpl->DMABuff, tpl->Skb->len, DMA_TO_DEVICE);
1949 struct net_local *tp = netdev_priv(dev);
1961 tpl = tp->TplBusy;
1970 tp->TplBusy = tpl->NextTPLPtr ;
2002 tp->MacStat.tx_packets++;
2004 dma_unmap_single(tp->pdev, tpl->DMABuff, tpl->Skb->len, DMA_TO_DEVICE);
2009 if(!tp->TplFree->NextTPLPtr->BusyFlag)
2019 struct net_local *tp = netdev_priv(dev);
2035 rpl = tp->RplHead;
2040 SaveHead = tp->RplHead;
2041 tp->RplHead = rpl->NextRPLPtr;
2066 tp->RplHead = SaveHead;
2069 tms380tr_update_rcv_stats(tp,ReceiveDataPtr,Length);
2083 skb = dev_alloc_skb(tp->MaxPacketSize);
2090 skb_put(skb, tp->MaxPacketSize);
2118 tp->MacStat.rx_errors++;
2121 dma_unmap_single(tp->pdev, rpl->DMABuff, tp->MaxPacketSize, DMA_TO_DEVICE);
2125 rpl->Skb = dev_alloc_skb(tp->MaxPacketSize);
2130 rpl->FragList[0].DataAddr = htonl(((char *)tp->LocalRxBuffers[rpl->RPLIndex] - (char *)tp) + tp->dmabuffer);
2131 rpl->MData = tp->LocalRxBuffers[rpl->RPLIndex];
2136 skb_put(rpl->Skb, tp->MaxPacketSize);
2139 dmabuf = dma_map_single(tp->pdev, rpl->Skb->data, tp->MaxPacketSize, DMA_FROM_DEVICE);
2140 if(tp->dmalimit && (dmabuf + tp->MaxPacketSize > tp->dmalimit))
2143 rpl->FragList[0].DataAddr = htonl(((char *)tp->LocalRxBuffers[rpl->RPLIndex] - (char *)tp) + tp->dmabuffer);
2144 rpl->MData = tp->LocalRxBuffers[rpl->RPLIndex];
2156 rpl->FragList[0].DataCount = cpu_to_be16((unsigned short)tp->MaxPacketSize);
2160 tp->RplTail->FrameSize = 0;
2163 tms380tr_write_rpl_status(tp->RplTail, RX_VALID | RX_FRAME_IRQ);
2166 tp->RplTail = tp->RplTail->NextRPLPtr;
2190 static void tms380tr_update_rcv_stats(struct net_local *tp, unsigned char DataPtr[],
2193 tp->MacStat.rx_packets++;
2194 tp->MacStat.rx_bytes += Length;
2198 tp->MacStat.multicast++;
2203 struct net_local *tp = netdev_priv(dev);
2206 if (tp->AdapterOpenFlag || tp->AdapterVirtOpenFlag) {
2233 struct net_local *tp;
2235 tp = netdev_priv(dev);
2236 dma_unmap_single(tp->pdev, tp->dmabuffer, sizeof(struct net_local),