Commit 5ef85cff authored by Jeff Garzik's avatar Jeff Garzik

[netdrvr e1000] small cleanups and fixes:

* Update change log
* Whitespace cleanup
* Bug fix: protect against zero-length skb in hard_start
* Bug fix: validate MAC address using is_valid_ether_addr()

Contributed by Scott Feldman @ Intel
parent 941c84e0
...@@ -26,10 +26,20 @@ ...@@ -26,10 +26,20 @@
*******************************************************************************/ *******************************************************************************/
#define __E1000_MAIN__
#include "e1000.h" #include "e1000.h"
/* Change Log /* Change Log
*
* 4.4.19 11/27/02
* o Feature: Added user-settable knob for interrupt throttle rate (ITR).
* o Cleanup: removed large static array allocations.
* o Cleanup: C99 struct initializer format.
* o Bug fix: restore VLAN settings when interface is brought up.
* o Bug fix: return cleanly in probe if error in detecting MAC type.
* o Bug fix: Wake up on magic packet by default only if enabled in eeprom.
* o Bug fix: Validate MAC address in set_mac.
* o Bug fix: Throw away zero-length Tx skbs.
* o Bug fix: Make ethtool EEPROM acceses work on older versions of ethtool.
* *
* 4.4.12 10/15/02 * 4.4.12 10/15/02
* o Clean up: use members of pci_device rather than direct calls to * o Clean up: use members of pci_device rather than direct calls to
...@@ -44,29 +54,12 @@ ...@@ -44,29 +54,12 @@
* o Clean up: Moved tx_timeout from interrupt context to process context * o Clean up: Moved tx_timeout from interrupt context to process context
* using schedule_task. * using schedule_task.
* *
* o Feature: merged in modified NAPI patch from Robert Olsson
* <Robert.Olsson@its.uu.se> Uppsala Univeristy, Sweden.
*
* 4.3.15 8/9/02 * 4.3.15 8/9/02
* o Converted from Dual BSD/GPL license to GPL license.
* o Clean up: use pci_[clear|set]_mwi rather than direct calls to
* pci_write_config_word.
* o Bug fix: added read-behind-write calls to post writes before delays.
* o Bug fix: removed mdelay busy-waits in interrupt context.
* o Clean up: direct clear of descriptor bits rather than using memset.
* o Bug fix: added wmb() for ia-64 between descritor writes and advancing
* descriptor tail.
* o Feature: added locking mechanism for asf functionality.
* o Feature: exposed two Tx and one Rx interrupt delay knobs for finer
* control over interurpt rate tuning.
* o Misc ethtool bug fixes.
*
* 4.3.2 7/5/02
*/ */
char e1000_driver_name[] = "e1000"; char e1000_driver_name[] = "e1000";
char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver"; char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver";
char e1000_driver_version[] = "4.4.12-k1"; char e1000_driver_version[] = "4.4.19-k1";
char e1000_copyright[] = "Copyright (c) 1999-2002 Intel Corporation."; char e1000_copyright[] = "Copyright (c) 1999-2002 Intel Corporation.";
/* e1000_pci_tbl - PCI Device ID Table /* e1000_pci_tbl - PCI Device ID Table
...@@ -587,6 +580,7 @@ e1000_sw_init(struct e1000_adapter *adapter) ...@@ -587,6 +580,7 @@ e1000_sw_init(struct e1000_adapter *adapter)
hw->subsystem_id = pdev->subsystem_device; hw->subsystem_id = pdev->subsystem_device;
pci_read_config_byte(pdev, PCI_REVISION_ID, &hw->revision_id); pci_read_config_byte(pdev, PCI_REVISION_ID, &hw->revision_id);
pci_read_config_word(pdev, PCI_COMMAND, &hw->pci_cmd_word); pci_read_config_word(pdev, PCI_COMMAND, &hw->pci_cmd_word);
adapter->rx_buffer_len = E1000_RXBUFFER_2048; adapter->rx_buffer_len = E1000_RXBUFFER_2048;
...@@ -1148,6 +1142,9 @@ e1000_set_mac(struct net_device *netdev, void *p) ...@@ -1148,6 +1142,9 @@ e1000_set_mac(struct net_device *netdev, void *p)
struct e1000_adapter *adapter = netdev->priv; struct e1000_adapter *adapter = netdev->priv;
struct sockaddr *addr = p; struct sockaddr *addr = p;
if(!is_valid_ether_addr(addr->sa_data))
return -EADDRNOTAVAIL;
/* 82542 2.0 needs to be in reset to write receive address registers */ /* 82542 2.0 needs to be in reset to write receive address registers */
if(adapter->hw.mac_type == e1000_82542_rev2_0) if(adapter->hw.mac_type == e1000_82542_rev2_0)
...@@ -1404,7 +1401,6 @@ e1000_tx_map(struct e1000_adapter *adapter, struct sk_buff *skb) ...@@ -1404,7 +1401,6 @@ e1000_tx_map(struct e1000_adapter *adapter, struct sk_buff *skb)
int f; int f;
len = skb->len - skb->data_len; len = skb->len - skb->data_len;
i = (tx_ring->next_to_use + tx_ring->count - 1) % tx_ring->count; i = (tx_ring->next_to_use + tx_ring->count - 1) % tx_ring->count;
count = 0; count = 0;
...@@ -1511,11 +1507,16 @@ e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev) ...@@ -1511,11 +1507,16 @@ e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
{ {
struct e1000_adapter *adapter = netdev->priv; struct e1000_adapter *adapter = netdev->priv;
int tx_flags = 0, count; int tx_flags = 0, count;
int f; int f;
count = TXD_USE_COUNT(skb->len - skb->data_len, count = TXD_USE_COUNT(skb->len - skb->data_len,
adapter->max_data_per_txd); adapter->max_data_per_txd);
if(count == 0) {
dev_kfree_skb_any(skb);
return 0;
}
for(f = 0; f < skb_shinfo(skb)->nr_frags; f++) for(f = 0; f < skb_shinfo(skb)->nr_frags; f++)
count += TXD_USE_COUNT(skb_shinfo(skb)->frags[f].size, count += TXD_USE_COUNT(skb_shinfo(skb)->frags[f].size,
adapter->max_data_per_txd); adapter->max_data_per_txd);
......
...@@ -230,7 +230,6 @@ struct e1000_option { ...@@ -230,7 +230,6 @@ struct e1000_option {
} arg; } arg;
}; };
static int __devinit static int __devinit
e1000_validate_option(int *value, struct e1000_option *opt) e1000_validate_option(int *value, struct e1000_option *opt)
{ {
...@@ -481,6 +480,7 @@ e1000_check_copper_options(struct e1000_adapter *adapter) ...@@ -481,6 +480,7 @@ e1000_check_copper_options(struct e1000_adapter *adapter)
{ SPEED_10, "" }, { SPEED_10, "" },
{ SPEED_100, "" }, { SPEED_100, "" },
{ SPEED_1000, "" }}; { SPEED_1000, "" }};
struct e1000_option opt = { struct e1000_option opt = {
.type = list_option, .type = list_option,
.name = "Speed", .name = "Speed",
...@@ -496,6 +496,7 @@ e1000_check_copper_options(struct e1000_adapter *adapter) ...@@ -496,6 +496,7 @@ e1000_check_copper_options(struct e1000_adapter *adapter)
struct e1000_opt_list dplx_list[] = {{ 0, "" }, struct e1000_opt_list dplx_list[] = {{ 0, "" },
{ HALF_DUPLEX, "" }, { HALF_DUPLEX, "" },
{ FULL_DUPLEX, "" }}; { FULL_DUPLEX, "" }};
struct e1000_option opt = { struct e1000_option opt = {
.type = list_option, .type = list_option,
.name = "Duplex", .name = "Duplex",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment