aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Hemminger <shemminger@vyatta.com>2008-05-30 12:49:52 -0400
committerJeff Garzik <jgarzik@redhat.com>2008-05-30 22:17:56 -0400
commit41873e9aff0632d80c74380d58a89e8d420151bd (patch)
treed34b8add6a9446441b6f320ed3cfd307c4fc9fb0
parent981813d8e0a16946f511f4eda17bb4ee4fa2769c (diff)
tlan: get rid of padding buffer
Use skb_padto to pad frames, this avoid allocation of separate buffer just for dma of the extra bytes. Compile tested only. Signed-off-by: Stephen Hemminger <shemminger@vyatta.com> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
-rw-r--r--drivers/net/tlan.c37
1 files changed, 7 insertions, 30 deletions
diff --git a/drivers/net/tlan.c b/drivers/net/tlan.c
index 0166407d7061..d1633fbf46ce 100644
--- a/drivers/net/tlan.c
+++ b/drivers/net/tlan.c
@@ -218,8 +218,6 @@ static int bbuf;
218module_param(bbuf, int, 0); 218module_param(bbuf, int, 0);
219MODULE_PARM_DESC(bbuf, "ThunderLAN use big buffer (0-1)"); 219MODULE_PARM_DESC(bbuf, "ThunderLAN use big buffer (0-1)");
220 220
221static u8 *TLanPadBuffer;
222static dma_addr_t TLanPadBufferDMA;
223static char TLanSignature[] = "TLAN"; 221static char TLanSignature[] = "TLAN";
224static const char tlan_banner[] = "ThunderLAN driver v1.15\n"; 222static const char tlan_banner[] = "ThunderLAN driver v1.15\n";
225static int tlan_have_pci; 223static int tlan_have_pci;
@@ -469,16 +467,6 @@ static int __init tlan_probe(void)
469 467
470 printk(KERN_INFO "%s", tlan_banner); 468 printk(KERN_INFO "%s", tlan_banner);
471 469
472 TLanPadBuffer = (u8 *) pci_alloc_consistent(NULL, TLAN_MIN_FRAME_SIZE, &TLanPadBufferDMA);
473
474 if (TLanPadBuffer == NULL) {
475 printk(KERN_ERR "TLAN: Could not allocate memory for pad buffer.\n");
476 rc = -ENOMEM;
477 goto err_out;
478 }
479
480 memset(TLanPadBuffer, 0, TLAN_MIN_FRAME_SIZE);
481
482 TLAN_DBG(TLAN_DEBUG_PROBE, "Starting PCI Probe....\n"); 470 TLAN_DBG(TLAN_DEBUG_PROBE, "Starting PCI Probe....\n");
483 471
484 /* Use new style PCI probing. Now the kernel will 472 /* Use new style PCI probing. Now the kernel will
@@ -506,8 +494,6 @@ static int __init tlan_probe(void)
506err_out_pci_unreg: 494err_out_pci_unreg:
507 pci_unregister_driver(&tlan_driver); 495 pci_unregister_driver(&tlan_driver);
508err_out_pci_free: 496err_out_pci_free:
509 pci_free_consistent(NULL, TLAN_MIN_FRAME_SIZE, TLanPadBuffer, TLanPadBufferDMA);
510err_out:
511 return rc; 497 return rc;
512} 498}
513 499
@@ -724,8 +710,6 @@ static void __exit tlan_exit(void)
724 if (tlan_have_eisa) 710 if (tlan_have_eisa)
725 TLan_Eisa_Cleanup(); 711 TLan_Eisa_Cleanup();
726 712
727 pci_free_consistent(NULL, TLAN_MIN_FRAME_SIZE, TLanPadBuffer, TLanPadBufferDMA);
728
729} 713}
730 714
731 715
@@ -1096,7 +1080,6 @@ static int TLan_StartTx( struct sk_buff *skb, struct net_device *dev )
1096 TLanList *tail_list; 1080 TLanList *tail_list;
1097 dma_addr_t tail_list_phys; 1081 dma_addr_t tail_list_phys;
1098 u8 *tail_buffer; 1082 u8 *tail_buffer;
1099 int pad;
1100 unsigned long flags; 1083 unsigned long flags;
1101 1084
1102 if ( ! priv->phyOnline ) { 1085 if ( ! priv->phyOnline ) {
@@ -1105,6 +1088,9 @@ static int TLan_StartTx( struct sk_buff *skb, struct net_device *dev )
1105 return 0; 1088 return 0;
1106 } 1089 }
1107 1090
1091 if (skb_padto(skb, TLAN_MIN_FRAME_SIZE))
1092 return 0;
1093
1108 tail_list = priv->txList + priv->txTail; 1094 tail_list = priv->txList + priv->txTail;
1109 tail_list_phys = priv->txListDMA + sizeof(TLanList) * priv->txTail; 1095 tail_list_phys = priv->txListDMA + sizeof(TLanList) * priv->txTail;
1110 1096
@@ -1125,19 +1111,10 @@ static int TLan_StartTx( struct sk_buff *skb, struct net_device *dev )
1125 TLan_StoreSKB(tail_list, skb); 1111 TLan_StoreSKB(tail_list, skb);
1126 } 1112 }
1127 1113
1128 pad = TLAN_MIN_FRAME_SIZE - skb->len; 1114 tail_list->frameSize = (u16) skb->len;
1129 1115 tail_list->buffer[0].count = TLAN_LAST_BUFFER | (u32) skb->len;
1130 if ( pad > 0 ) { 1116 tail_list->buffer[1].count = 0;
1131 tail_list->frameSize = (u16) skb->len + pad; 1117 tail_list->buffer[1].address = 0;
1132 tail_list->buffer[0].count = (u32) skb->len;
1133 tail_list->buffer[1].count = TLAN_LAST_BUFFER | (u32) pad;
1134 tail_list->buffer[1].address = TLanPadBufferDMA;
1135 } else {
1136 tail_list->frameSize = (u16) skb->len;
1137 tail_list->buffer[0].count = TLAN_LAST_BUFFER | (u32) skb->len;
1138 tail_list->buffer[1].count = 0;
1139 tail_list->buffer[1].address = 0;
1140 }
1141 1118
1142 spin_lock_irqsave(&priv->lock, flags); 1119 spin_lock_irqsave(&priv->lock, flags);
1143 tail_list->cStat = TLAN_CSTAT_READY; 1120 tail_list->cStat = TLAN_CSTAT_READY;