Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
b1106618
Commit
b1106618
authored
Jul 29, 2004
by
Jeff Garzik
Browse files
Options
Browse Files
Download
Plain Diff
Merge pobox.com:/spare/repo/netdev-2.6/e1000
into pobox.com:/spare/repo/netdev-2.6/ALL
parents
edf609bc
fa88c854
Changes
6
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
369 additions
and
352 deletions
+369
-352
drivers/net/e1000/e1000.h
drivers/net/e1000/e1000.h
+13
-11
drivers/net/e1000/e1000_ethtool.c
drivers/net/e1000/e1000_ethtool.c
+81
-65
drivers/net/e1000/e1000_hw.c
drivers/net/e1000/e1000_hw.c
+4
-12
drivers/net/e1000/e1000_hw.h
drivers/net/e1000/e1000_hw.h
+1
-2
drivers/net/e1000/e1000_main.c
drivers/net/e1000/e1000_main.c
+246
-240
drivers/net/e1000/e1000_param.c
drivers/net/e1000/e1000_param.c
+24
-22
No files found.
drivers/net/e1000/e1000.h
View file @
b1106618
...
@@ -49,6 +49,7 @@
...
@@ -49,6 +49,7 @@
#include <linux/delay.h>
#include <linux/delay.h>
#include <linux/timer.h>
#include <linux/timer.h>
#include <linux/slab.h>
#include <linux/slab.h>
#include <linux/vmalloc.h>
#include <linux/interrupt.h>
#include <linux/interrupt.h>
#include <linux/string.h>
#include <linux/string.h>
#include <linux/pagemap.h>
#include <linux/pagemap.h>
...
@@ -63,6 +64,7 @@
...
@@ -63,6 +64,7 @@
#include <linux/udp.h>
#include <linux/udp.h>
#include <net/pkt_sched.h>
#include <net/pkt_sched.h>
#include <linux/list.h>
#include <linux/list.h>
#include <linux/rtnetlink.h>
#include <linux/reboot.h>
#include <linux/reboot.h>
#ifdef NETIF_F_TSO
#ifdef NETIF_F_TSO
#include <net/checksum.h>
#include <net/checksum.h>
...
@@ -77,6 +79,8 @@
...
@@ -77,6 +79,8 @@
#define BAR_1 1
#define BAR_1 1
#define BAR_5 5
#define BAR_5 5
#define INTEL_E1000_ETHERNET_DEVICE(device_id) {\
PCI_DEVICE(PCI_VENDOR_ID_INTEL, device_id)}
struct
e1000_adapter
;
struct
e1000_adapter
;
...
@@ -98,11 +102,12 @@ struct e1000_adapter;
...
@@ -98,11 +102,12 @@ struct e1000_adapter;
#define E1000_MAX_INTR 10
#define E1000_MAX_INTR 10
/*
How many descriptors for TX and RX ?
*/
/*
TX/RX descriptor defines
*/
#define E1000_DEFAULT_TXD 256
#define E1000_DEFAULT_TXD 256
#define E1000_MAX_TXD 256
#define E1000_MAX_TXD 256
#define E1000_MIN_TXD 80
#define E1000_MIN_TXD 80
#define E1000_MAX_82544_TXD 4096
#define E1000_MAX_82544_TXD 4096
#define E1000_DEFAULT_RXD 256
#define E1000_DEFAULT_RXD 256
#define E1000_MAX_RXD 256
#define E1000_MAX_RXD 256
#define E1000_MIN_RXD 80
#define E1000_MIN_RXD 80
...
@@ -123,14 +128,11 @@ struct e1000_adapter;
...
@@ -123,14 +128,11 @@ struct e1000_adapter;
#define E1000_TX_HEAD_ADDR_SHIFT 7
#define E1000_TX_HEAD_ADDR_SHIFT 7
#define E1000_PBA_TX_MASK 0xFFFF0000
#define E1000_PBA_TX_MASK 0xFFFF0000
/* Flow Control High-Watermark: 5688 bytes below Rx FIFO size */
/* Flow Control Watermarks */
#define E1000_FC_HIGH_DIFF 0x1638
#define E1000_FC_HIGH_DIFF 0x1638
/* High: 5688 bytes below Rx FIFO size */
#define E1000_FC_LOW_DIFF 0x1640
/* Low: 5696 bytes below Rx FIFO size */
/* Flow Control Low-Watermark: 5696 bytes below Rx FIFO size */
#define E1000_FC_LOW_DIFF 0x1640
/* Flow Control Pause Time: 858 usec */
#define E1000_FC_PAUSE_TIME 0x0680
/* 858 usec */
#define E1000_FC_PAUSE_TIME 0x0680
/* How many Tx Descriptors do we need to call netif_wake_queue ? */
/* How many Tx Descriptors do we need to call netif_wake_queue ? */
#define E1000_TX_QUEUE_WAKE 16
#define E1000_TX_QUEUE_WAKE 16
...
@@ -153,9 +155,9 @@ struct e1000_adapter;
...
@@ -153,9 +155,9 @@ struct e1000_adapter;
struct
e1000_buffer
{
struct
e1000_buffer
{
struct
sk_buff
*
skb
;
struct
sk_buff
*
skb
;
uint64_t
dma
;
uint64_t
dma
;
unsigned
long
length
;
unsigned
long
time_stamp
;
unsigned
long
time_stamp
;
unsigned
int
next_to_watch
;
uint16_t
length
;
uint16_t
next_to_watch
;
};
};
struct
e1000_desc_ring
{
struct
e1000_desc_ring
{
...
...
drivers/net/e1000/e1000_ethtool.c
View file @
b1106618
...
@@ -88,9 +88,9 @@ static const struct e1000_stats e1000_gstrings_stats[] = {
...
@@ -88,9 +88,9 @@ static const struct e1000_stats e1000_gstrings_stats[] = {
{
"rx_flow_control_xoff"
,
E1000_STAT
(
stats
.
xoffrxc
)
},
{
"rx_flow_control_xoff"
,
E1000_STAT
(
stats
.
xoffrxc
)
},
{
"tx_flow_control_xon"
,
E1000_STAT
(
stats
.
xontxc
)
},
{
"tx_flow_control_xon"
,
E1000_STAT
(
stats
.
xontxc
)
},
{
"tx_flow_control_xoff"
,
E1000_STAT
(
stats
.
xofftxc
)
},
{
"tx_flow_control_xoff"
,
E1000_STAT
(
stats
.
xofftxc
)
},
{
"rx_long_byte_count"
,
E1000_STAT
(
stats
.
gorcl
)
},
{
"rx_csum_offload_good"
,
E1000_STAT
(
hw_csum_good
)
},
{
"rx_csum_offload_good"
,
E1000_STAT
(
hw_csum_good
)
},
{
"rx_csum_offload_errors"
,
E1000_STAT
(
hw_csum_err
)
},
{
"rx_csum_offload_errors"
,
E1000_STAT
(
hw_csum_err
)
}
{
"rx_long_byte_count"
,
E1000_STAT
(
stats
.
gorcl
)
}
};
};
#define E1000_STATS_LEN \
#define E1000_STATS_LEN \
sizeof(e1000_gstrings_stats) / sizeof(struct e1000_stats)
sizeof(e1000_gstrings_stats) / sizeof(struct e1000_stats)
...
@@ -170,7 +170,8 @@ e1000_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
...
@@ -170,7 +170,8 @@ e1000_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
ecmd
->
duplex
=
-
1
;
ecmd
->
duplex
=
-
1
;
}
}
ecmd
->
autoneg
=
(
hw
->
autoneg
?
AUTONEG_ENABLE
:
AUTONEG_DISABLE
);
ecmd
->
autoneg
=
((
hw
->
media_type
==
e1000_media_type_fiber
)
||
hw
->
autoneg
)
?
AUTONEG_ENABLE
:
AUTONEG_DISABLE
;
return
0
;
return
0
;
}
}
...
@@ -192,6 +193,7 @@ e1000_set_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
...
@@ -192,6 +193,7 @@ e1000_set_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
if
(
netif_running
(
adapter
->
netdev
))
{
if
(
netif_running
(
adapter
->
netdev
))
{
e1000_down
(
adapter
);
e1000_down
(
adapter
);
e1000_reset
(
adapter
);
e1000_up
(
adapter
);
e1000_up
(
adapter
);
}
else
}
else
e1000_reset
(
adapter
);
e1000_reset
(
adapter
);
...
@@ -205,6 +207,7 @@ e1000_get_pauseparam(struct net_device *netdev,
...
@@ -205,6 +207,7 @@ e1000_get_pauseparam(struct net_device *netdev,
{
{
struct
e1000_adapter
*
adapter
=
netdev
->
priv
;
struct
e1000_adapter
*
adapter
=
netdev
->
priv
;
struct
e1000_hw
*
hw
=
&
adapter
->
hw
;
struct
e1000_hw
*
hw
=
&
adapter
->
hw
;
pause
->
autoneg
=
pause
->
autoneg
=
(
adapter
->
fc_autoneg
?
AUTONEG_ENABLE
:
AUTONEG_DISABLE
);
(
adapter
->
fc_autoneg
?
AUTONEG_ENABLE
:
AUTONEG_DISABLE
);
...
@@ -418,6 +421,10 @@ e1000_get_regs(struct net_device *netdev,
...
@@ -418,6 +421,10 @@ e1000_get_regs(struct net_device *netdev,
e1000_read_phy_reg
(
hw
,
PHY_1000T_STATUS
,
&
phy_data
);
e1000_read_phy_reg
(
hw
,
PHY_1000T_STATUS
,
&
phy_data
);
regs_buff
[
24
]
=
(
uint32_t
)
phy_data
;
/* phy local receiver status */
regs_buff
[
24
]
=
(
uint32_t
)
phy_data
;
/* phy local receiver status */
regs_buff
[
25
]
=
regs_buff
[
24
];
/* phy remote receiver status */
regs_buff
[
25
]
=
regs_buff
[
24
];
/* phy remote receiver status */
if
(
hw
->
mac_type
>=
e1000_82540
&&
hw
->
media_type
==
e1000_media_type_copper
)
{
regs_buff
[
26
]
=
E1000_READ_REG
(
hw
,
MANC
);
}
}
}
static
int
static
int
...
@@ -448,7 +455,7 @@ e1000_get_eeprom(struct net_device *netdev,
...
@@ -448,7 +455,7 @@ e1000_get_eeprom(struct net_device *netdev,
eeprom_buff
=
kmalloc
(
sizeof
(
uint16_t
)
*
eeprom_buff
=
kmalloc
(
sizeof
(
uint16_t
)
*
(
last_word
-
first_word
+
1
),
GFP_KERNEL
);
(
last_word
-
first_word
+
1
),
GFP_KERNEL
);
if
(
!
eeprom_buff
)
if
(
!
eeprom_buff
)
return
-
ENOMEM
;
return
-
ENOMEM
;
if
(
hw
->
eeprom
.
type
==
e1000_eeprom_spi
)
if
(
hw
->
eeprom
.
type
==
e1000_eeprom_spi
)
...
@@ -466,8 +473,7 @@ e1000_get_eeprom(struct net_device *netdev,
...
@@ -466,8 +473,7 @@ e1000_get_eeprom(struct net_device *netdev,
for
(
i
=
0
;
i
<
last_word
-
first_word
+
1
;
i
++
)
for
(
i
=
0
;
i
<
last_word
-
first_word
+
1
;
i
++
)
le16_to_cpus
(
&
eeprom_buff
[
i
]);
le16_to_cpus
(
&
eeprom_buff
[
i
]);
memcpy
(
bytes
,
(
uint8_t
*
)
eeprom_buff
+
(
eeprom
->
offset
&
1
),
memcpy
(
bytes
,
(
uint8_t
*
)
eeprom_buff
+
(
eeprom
->
offset
%
2
),
eeprom
->
len
);
eeprom
->
len
);
kfree
(
eeprom_buff
);
kfree
(
eeprom_buff
);
...
@@ -520,6 +526,7 @@ e1000_set_eeprom(struct net_device *netdev,
...
@@ -520,6 +526,7 @@ e1000_set_eeprom(struct net_device *netdev,
le16_to_cpus
(
&
eeprom_buff
[
i
]);
le16_to_cpus
(
&
eeprom_buff
[
i
]);
memcpy
(
ptr
,
bytes
,
eeprom
->
len
);
memcpy
(
ptr
,
bytes
,
eeprom
->
len
);
for
(
i
=
0
;
i
<
last_word
-
first_word
+
1
;
i
++
)
for
(
i
=
0
;
i
<
last_word
-
first_word
+
1
;
i
++
)
eeprom_buff
[
i
]
=
cpu_to_le16
(
eeprom_buff
[
i
]);
eeprom_buff
[
i
]
=
cpu_to_le16
(
eeprom_buff
[
i
]);
...
@@ -575,13 +582,12 @@ static int
...
@@ -575,13 +582,12 @@ static int
e1000_set_ringparam
(
struct
net_device
*
netdev
,
e1000_set_ringparam
(
struct
net_device
*
netdev
,
struct
ethtool_ringparam
*
ring
)
struct
ethtool_ringparam
*
ring
)
{
{
int
err
;
struct
e1000_adapter
*
adapter
=
netdev
->
priv
;
struct
e1000_adapter
*
adapter
=
netdev
->
priv
;
e1000_mac_type
mac_type
=
adapter
->
hw
.
mac_type
;
e1000_mac_type
mac_type
=
adapter
->
hw
.
mac_type
;
struct
e1000_desc_ring
*
txdr
=
&
adapter
->
tx_ring
;
struct
e1000_desc_ring
*
txdr
=
&
adapter
->
tx_ring
;
struct
e1000_desc_ring
*
rxdr
=
&
adapter
->
rx_ring
;
struct
e1000_desc_ring
*
rxdr
=
&
adapter
->
rx_ring
;
struct
e1000_desc_ring
tx_old
,
tx_new
;
struct
e1000_desc_ring
tx_old
,
tx_new
,
rx_old
,
rx_new
;
struct
e1000_desc_ring
rx_old
,
rx_new
;
int
err
;
tx_old
=
adapter
->
tx_ring
;
tx_old
=
adapter
->
tx_ring
;
rx_old
=
adapter
->
rx_ring
;
rx_old
=
adapter
->
rx_ring
;
...
@@ -600,7 +606,7 @@ e1000_set_ringparam(struct net_device *netdev,
...
@@ -600,7 +606,7 @@ e1000_set_ringparam(struct net_device *netdev,
E1000_ROUNDUP
(
txdr
->
count
,
REQ_TX_DESCRIPTOR_MULTIPLE
);
E1000_ROUNDUP
(
txdr
->
count
,
REQ_TX_DESCRIPTOR_MULTIPLE
);
if
(
netif_running
(
adapter
->
netdev
))
{
if
(
netif_running
(
adapter
->
netdev
))
{
/*
t
ry to get new resources before deleting old */
/*
T
ry to get new resources before deleting old */
if
((
err
=
e1000_setup_rx_resources
(
adapter
)))
if
((
err
=
e1000_setup_rx_resources
(
adapter
)))
goto
err_setup_rx
;
goto
err_setup_rx
;
if
((
err
=
e1000_setup_tx_resources
(
adapter
)))
if
((
err
=
e1000_setup_tx_resources
(
adapter
)))
...
@@ -620,6 +626,7 @@ e1000_set_ringparam(struct net_device *netdev,
...
@@ -620,6 +626,7 @@ e1000_set_ringparam(struct net_device *netdev,
if
((
err
=
e1000_up
(
adapter
)))
if
((
err
=
e1000_up
(
adapter
)))
return
err
;
return
err
;
}
}
return
0
;
return
0
;
err_setup_tx:
err_setup_tx:
e1000_free_rx_resources
(
adapter
);
e1000_free_rx_resources
(
adapter
);
...
@@ -766,13 +773,15 @@ static int
...
@@ -766,13 +773,15 @@ static int
e1000_intr_test
(
struct
e1000_adapter
*
adapter
,
uint64_t
*
data
)
e1000_intr_test
(
struct
e1000_adapter
*
adapter
,
uint64_t
*
data
)
{
{
struct
net_device
*
netdev
=
adapter
->
netdev
;
struct
net_device
*
netdev
=
adapter
->
netdev
;
uint32_t
icr
,
mask
,
i
=
0
;
uint32_t
icr
,
mask
,
i
=
0
,
shared_int
=
TRUE
;
uint32_t
irq
=
adapter
->
pdev
->
irq
;
*
data
=
0
;
*
data
=
0
;
/* Hook up test interrupt handler just for this test */
/* Hook up test interrupt handler just for this test */
if
(
request_irq
(
adapter
->
pdev
->
irq
,
&
e1000_test_intr
,
SA_SHIRQ
,
if
(
!
request_irq
(
irq
,
&
e1000_test_intr
,
0
,
netdev
->
name
,
netdev
))
{
netdev
->
name
,
netdev
))
{
shared_int
=
FALSE
;
}
else
if
(
request_irq
(
irq
,
&
e1000_test_intr
,
SA_SHIRQ
,
netdev
->
name
,
netdev
)){
*
data
=
1
;
*
data
=
1
;
return
-
1
;
return
-
1
;
}
}
...
@@ -802,6 +811,7 @@ e1000_intr_test(struct e1000_adapter *adapter, uint64_t *data)
...
@@ -802,6 +811,7 @@ e1000_intr_test(struct e1000_adapter *adapter, uint64_t *data)
/* Interrupt to test */
/* Interrupt to test */
mask
=
1
<<
i
;
mask
=
1
<<
i
;
if
(
!
shared_int
)
{
/* Disable the interrupt to be reported in
/* Disable the interrupt to be reported in
* the cause register and then force the same
* the cause register and then force the same
* interrupt and see if one gets posted. If
* interrupt and see if one gets posted. If
...
@@ -817,6 +827,7 @@ e1000_intr_test(struct e1000_adapter *adapter, uint64_t *data)
...
@@ -817,6 +827,7 @@ e1000_intr_test(struct e1000_adapter *adapter, uint64_t *data)
*
data
=
3
;
*
data
=
3
;
break
;
break
;
}
}
}
/* Enable the interrupt to be reported in
/* Enable the interrupt to be reported in
* the cause register and then force the same
* the cause register and then force the same
...
@@ -834,6 +845,7 @@ e1000_intr_test(struct e1000_adapter *adapter, uint64_t *data)
...
@@ -834,6 +845,7 @@ e1000_intr_test(struct e1000_adapter *adapter, uint64_t *data)
break
;
break
;
}
}
if
(
!
shared_int
)
{
/* Disable the other interrupts to be reported in
/* Disable the other interrupts to be reported in
* the cause register and then force the other
* the cause register and then force the other
* interrupts and see if any get posted. If
* interrupts and see if any get posted. If
...
@@ -850,13 +862,14 @@ e1000_intr_test(struct e1000_adapter *adapter, uint64_t *data)
...
@@ -850,13 +862,14 @@ e1000_intr_test(struct e1000_adapter *adapter, uint64_t *data)
break
;
break
;
}
}
}
}
}
/* Disable all the interrupts */
/* Disable all the interrupts */
E1000_WRITE_REG
(
&
adapter
->
hw
,
IMC
,
0xFFFFFFFF
);
E1000_WRITE_REG
(
&
adapter
->
hw
,
IMC
,
0xFFFFFFFF
);
msec_delay
(
10
);
msec_delay
(
10
);
/* Unhook test interrupt handler */
/* Unhook test interrupt handler */
free_irq
(
adapter
->
pdev
->
irq
,
netdev
);
free_irq
(
irq
,
netdev
);
return
*
data
;
return
*
data
;
}
}
...
@@ -1021,7 +1034,7 @@ e1000_setup_desc_rings(struct e1000_adapter *adapter)
...
@@ -1021,7 +1034,7 @@ e1000_setup_desc_rings(struct e1000_adapter *adapter)
return
0
;
return
0
;
err_nomem:
err_nomem:
e1000_free_desc_rings
(
adapter
);
e1000_free_desc_rings
(
adapter
);
return
ret_val
;
return
ret_val
;
}
}
...
@@ -1312,7 +1325,7 @@ e1000_run_loopback_test(struct e1000_adapter *adapter)
...
@@ -1312,7 +1325,7 @@ e1000_run_loopback_test(struct e1000_adapter *adapter)
for
(
i
=
0
;
i
<
64
;
i
++
)
{
for
(
i
=
0
;
i
<
64
;
i
++
)
{
e1000_create_lbtest_frame
(
txdr
->
buffer_info
[
i
].
skb
,
1024
);
e1000_create_lbtest_frame
(
txdr
->
buffer_info
[
i
].
skb
,
1024
);
pci_dma_sync_single
(
pdev
,
txdr
->
buffer_info
[
i
].
dma
,
pci_dma_sync_single
_for_device
(
pdev
,
txdr
->
buffer_info
[
i
].
dma
,
txdr
->
buffer_info
[
i
].
length
,
txdr
->
buffer_info
[
i
].
length
,
PCI_DMA_TODEVICE
);
PCI_DMA_TODEVICE
);
}
}
...
@@ -1320,7 +1333,7 @@ e1000_run_loopback_test(struct e1000_adapter *adapter)
...
@@ -1320,7 +1333,7 @@ e1000_run_loopback_test(struct e1000_adapter *adapter)
msec_delay
(
200
);
msec_delay
(
200
);
pci_dma_sync_single
(
pdev
,
rxdr
->
buffer_info
[
0
].
dma
,
pci_dma_sync_single
_for_cpu
(
pdev
,
rxdr
->
buffer_info
[
0
].
dma
,
rxdr
->
buffer_info
[
0
].
length
,
PCI_DMA_FROMDEVICE
);
rxdr
->
buffer_info
[
0
].
length
,
PCI_DMA_FROMDEVICE
);
return
e1000_check_lbtest_frame
(
rxdr
->
buffer_info
[
0
].
skb
,
1024
);
return
e1000_check_lbtest_frame
(
rxdr
->
buffer_info
[
0
].
skb
,
1024
);
...
@@ -1396,10 +1409,11 @@ e1000_diag_test(struct net_device *netdev,
...
@@ -1396,10 +1409,11 @@ e1000_diag_test(struct net_device *netdev,
if
(
e1000_loopback_test
(
adapter
,
&
data
[
3
]))
if
(
e1000_loopback_test
(
adapter
,
&
data
[
3
]))
eth_test
->
flags
|=
ETH_TEST_FL_FAILED
;
eth_test
->
flags
|=
ETH_TEST_FL_FAILED
;
/* restore
Autoneg/speed/duplex
settings */
/* restore
speed, duplex, autoneg
settings */
adapter
->
hw
.
autoneg_advertised
=
autoneg_advertised
;
adapter
->
hw
.
autoneg_advertised
=
autoneg_advertised
;
adapter
->
hw
.
forced_speed_duplex
=
forced_speed_duplex
;
adapter
->
hw
.
forced_speed_duplex
=
forced_speed_duplex
;
adapter
->
hw
.
autoneg
=
autoneg
;
adapter
->
hw
.
autoneg
=
autoneg
;
e1000_reset
(
adapter
);
e1000_reset
(
adapter
);
if
(
if_running
)
if
(
if_running
)
e1000_up
(
adapter
);
e1000_up
(
adapter
);
...
@@ -1427,6 +1441,7 @@ e1000_get_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
...
@@ -1427,6 +1441,7 @@ e1000_get_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
case
E1000_DEV_ID_82543GC_FIBER
:
case
E1000_DEV_ID_82543GC_FIBER
:
case
E1000_DEV_ID_82543GC_COPPER
:
case
E1000_DEV_ID_82543GC_COPPER
:
case
E1000_DEV_ID_82544EI_FIBER
:
case
E1000_DEV_ID_82544EI_FIBER
:
case
E1000_DEV_ID_82546EB_QUAD_COPPER
:
wol
->
supported
=
0
;
wol
->
supported
=
0
;
wol
->
wolopts
=
0
;
wol
->
wolopts
=
0
;
return
;
return
;
...
@@ -1469,6 +1484,7 @@ e1000_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
...
@@ -1469,6 +1484,7 @@ e1000_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
case
E1000_DEV_ID_82543GC_FIBER
:
case
E1000_DEV_ID_82543GC_FIBER
:
case
E1000_DEV_ID_82543GC_COPPER
:
case
E1000_DEV_ID_82543GC_COPPER
:
case
E1000_DEV_ID_82544EI_FIBER
:
case
E1000_DEV_ID_82544EI_FIBER
:
case
E1000_DEV_ID_82546EB_QUAD_COPPER
:
return
wol
->
wolopts
?
-
EOPNOTSUPP
:
0
;
return
wol
->
wolopts
?
-
EOPNOTSUPP
:
0
;
case
E1000_DEV_ID_82546EB_FIBER
:
case
E1000_DEV_ID_82546EB_FIBER
:
...
@@ -1571,8 +1587,8 @@ e1000_get_ethtool_stats(struct net_device *netdev,
...
@@ -1571,8 +1587,8 @@ e1000_get_ethtool_stats(struct net_device *netdev,
e1000_update_stats
(
adapter
);
e1000_update_stats
(
adapter
);
for
(
i
=
0
;
i
<
E1000_STATS_LEN
;
i
++
)
{
for
(
i
=
0
;
i
<
E1000_STATS_LEN
;
i
++
)
{
char
*
p
=
(
char
*
)
adapter
+
e1000_gstrings_stats
[
i
].
stat_offset
;
char
*
p
=
(
char
*
)
adapter
+
e1000_gstrings_stats
[
i
].
stat_offset
;
data
[
i
]
=
(
e1000_gstrings_stats
[
i
].
sizeof_stat
==
sizeof
(
uint64_t
))
data
[
i
]
=
(
e1000_gstrings_stats
[
i
].
sizeof_stat
==
?
*
(
uint64_t
*
)
p
:
*
(
uint32_t
*
)
p
;
sizeof
(
uint64_t
))
?
*
(
uint64_t
*
)
p
:
*
(
uint32_t
*
)
p
;
}
}
}
}
...
...
drivers/net/e1000/e1000_hw.c
View file @
b1106618
...
@@ -251,6 +251,7 @@ e1000_set_mac_type(struct e1000_hw *hw)
...
@@ -251,6 +251,7 @@ e1000_set_mac_type(struct e1000_hw *hw)
break
;
break
;
case
E1000_DEV_ID_82541ER
:
case
E1000_DEV_ID_82541ER
:
case
E1000_DEV_ID_82541GI
:
case
E1000_DEV_ID_82541GI
:
case
E1000_DEV_ID_82541GI_LF
:
case
E1000_DEV_ID_82541GI_MOBILE
:
case
E1000_DEV_ID_82541GI_MOBILE
:
hw
->
mac_type
=
e1000_82541_rev_2
;
hw
->
mac_type
=
e1000_82541_rev_2
;
break
;
break
;
...
@@ -920,7 +921,8 @@ e1000_setup_copper_link(struct e1000_hw *hw)
...
@@ -920,7 +921,8 @@ e1000_setup_copper_link(struct e1000_hw *hw)
if
(
ret_val
)
if
(
ret_val
)
return
ret_val
;
return
ret_val
;
if
(
hw
->
mac_type
==
e1000_82545_rev_3
)
{
if
((
hw
->
mac_type
==
e1000_82545_rev_3
)
||
(
hw
->
mac_type
==
e1000_82546_rev_3
))
{
ret_val
=
e1000_read_phy_reg
(
hw
,
M88E1000_PHY_SPEC_CTRL
,
&
phy_data
);
ret_val
=
e1000_read_phy_reg
(
hw
,
M88E1000_PHY_SPEC_CTRL
,
&
phy_data
);
phy_data
|=
0x00000008
;
phy_data
|=
0x00000008
;
ret_val
=
e1000_write_phy_reg
(
hw
,
M88E1000_PHY_SPEC_CTRL
,
phy_data
);
ret_val
=
e1000_write_phy_reg
(
hw
,
M88E1000_PHY_SPEC_CTRL
,
phy_data
);
...
@@ -3057,16 +3059,6 @@ e1000_init_eeprom_params(struct e1000_hw *hw)
...
@@ -3057,16 +3059,6 @@ e1000_init_eeprom_params(struct e1000_hw *hw)
}
}
break
;
break
;
default:
default:
eeprom
->
type
=
e1000_eeprom_spi
;
eeprom
->
opcode_bits
=
8
;
eeprom
->
delay_usec
=
1
;
if
(
eecd
&
E1000_EECD_ADDR_BITS
)
{
eeprom
->
page_size
=
32
;
eeprom
->
address_bits
=
16
;
}
else
{
eeprom
->
page_size
=
8
;
eeprom
->
address_bits
=
8
;
}
break
;
break
;
}
}
...
@@ -3453,7 +3445,6 @@ e1000_read_eeprom(struct e1000_hw *hw,
...
@@ -3453,7 +3445,6 @@ e1000_read_eeprom(struct e1000_hw *hw,
uint32_t
i
=
0
;
uint32_t
i
=
0
;
DEBUGFUNC
(
"e1000_read_eeprom"
);
DEBUGFUNC
(
"e1000_read_eeprom"
);
/* A check for invalid values: offset too large, too many words, and not
/* A check for invalid values: offset too large, too many words, and not
* enough words.
* enough words.
*/
*/
...
@@ -5224,3 +5215,4 @@ e1000_enable_mng_pass_thru(struct e1000_hw *hw)
...
@@ -5224,3 +5215,4 @@ e1000_enable_mng_pass_thru(struct e1000_hw *hw)
}
}
return
FALSE
;
return
FALSE
;
}
}
drivers/net/e1000/e1000_hw.h
View file @
b1106618
...
@@ -357,11 +357,11 @@ int32_t e1000_set_d3_lplu_state(struct e1000_hw *hw, boolean_t active);
...
@@ -357,11 +357,11 @@ int32_t e1000_set_d3_lplu_state(struct e1000_hw *hw, boolean_t active);
#define E1000_DEV_ID_82547GI 0x1075
#define E1000_DEV_ID_82547GI 0x1075
#define E1000_DEV_ID_82541GI 0x1076
#define E1000_DEV_ID_82541GI 0x1076
#define E1000_DEV_ID_82541GI_MOBILE 0x1077
#define E1000_DEV_ID_82541GI_MOBILE 0x1077
#define E1000_DEV_ID_82541GI_LF 0x107C
#define E1000_DEV_ID_82546GB_COPPER 0x1079
#define E1000_DEV_ID_82546GB_COPPER 0x1079
#define E1000_DEV_ID_82546GB_FIBER 0x107A
#define E1000_DEV_ID_82546GB_FIBER 0x107A
#define E1000_DEV_ID_82546GB_SERDES 0x107B
#define E1000_DEV_ID_82546GB_SERDES 0x107B
#define E1000_DEV_ID_82547EI 0x1019
#define E1000_DEV_ID_82547EI 0x1019
#define NODE_ADDRESS_SIZE 6
#define NODE_ADDRESS_SIZE 6
#define ETH_LENGTH_OF_ADDRESS 6
#define ETH_LENGTH_OF_ADDRESS 6
...
@@ -1043,7 +1043,6 @@ struct e1000_hw {
...
@@ -1043,7 +1043,6 @@ struct e1000_hw {
#define E1000_EEPROM_SWDPIN0 0x0001
/* SWDPIN 0 EEPROM Value */
#define E1000_EEPROM_SWDPIN0 0x0001
/* SWDPIN 0 EEPROM Value */
#define E1000_EEPROM_LED_LOGIC 0x0020
/* Led Logic Word */
#define E1000_EEPROM_LED_LOGIC 0x0020
/* Led Logic Word */
/* Register Bit Masks */
/* Register Bit Masks */
/* Device Control */
/* Device Control */
#define E1000_CTRL_FD 0x00000001
/* Full duplex.0=half; 1=full */
#define E1000_CTRL_FD 0x00000001
/* Full duplex.0=half; 1=full */
...
...
drivers/net/e1000/e1000_main.c
View file @
b1106618
This diff is collapsed.
Click to expand it.
drivers/net/e1000/e1000_param.c
View file @
b1106618
...
@@ -449,8 +449,7 @@ e1000_check_options(struct e1000_adapter *adapter)
...
@@ -449,8 +449,7 @@ e1000_check_options(struct e1000_adapter *adapter)
DPRINTK
(
PROBE
,
INFO
,
"%s turned off
\n
"
,
opt
.
name
);
DPRINTK
(
PROBE
,
INFO
,
"%s turned off
\n
"
,
opt
.
name
);
break
;
break
;
case
1
:
case
1
:
DPRINTK
(
PROBE
,
INFO
,
DPRINTK
(
PROBE
,
INFO
,
"%s set to dynamic mode
\n
"
,
opt
.
name
);
"%s set to dynamic mode
\n
"
,
opt
.
name
);
break
;
break
;
default:
default:
e1000_validate_option
(
&
adapter
->
itr
,
&
opt
,
adapter
);
e1000_validate_option
(
&
adapter
->
itr
,
&
opt
,
adapter
);
...
@@ -493,8 +492,9 @@ e1000_check_fiber_options(struct e1000_adapter *adapter)
...
@@ -493,8 +492,9 @@ e1000_check_fiber_options(struct e1000_adapter *adapter)
"parameter ignored
\n
"
);
"parameter ignored
\n
"
);
}
}
if
((
AutoNeg
[
bd
]
!=
OPTION_UNSET
)
&&
(
AutoNeg
[
bd
]
!=
0x20
))
{
if
((
AutoNeg
[
bd
]
!=
OPTION_UNSET
)
&&
(
AutoNeg
[
bd
]
!=
0x20
))
{
DPRINTK
(
PROBE
,
INFO
,
"AutoNeg other than Full/1000 is "
DPRINTK
(
PROBE
,
INFO
,
"AutoNeg other than 1000/Full is "
"not valid for fiber adapters, parameter ignored
\n
"
);
"not valid for fiber adapters, "
"parameter ignored
\n
"
);
}
}
}
}
...
@@ -611,24 +611,24 @@ e1000_check_copper_options(struct e1000_adapter *adapter)
...
@@ -611,24 +611,24 @@ e1000_check_copper_options(struct e1000_adapter *adapter)
break
;
break
;
case
HALF_DUPLEX
:
case
HALF_DUPLEX
:
DPRINTK
(
PROBE
,
INFO
,
"Half Duplex specified without Speed
\n
"
);
DPRINTK
(
PROBE
,
INFO
,
"Half Duplex specified without Speed
\n
"
);
DPRINTK
(
PROBE
,
INFO
,
DPRINTK
(
PROBE
,
INFO
,
"Using Autonegotiation at "
"
Using Autonegotiation at
Half Duplex only
\n
"
);
"Half Duplex only
\n
"
);
adapter
->
hw
.
autoneg
=
adapter
->
fc_autoneg
=
1
;
adapter
->
hw
.
autoneg
=
adapter
->
fc_autoneg
=
1
;
adapter
->
hw
.
autoneg_advertised
=
ADVERTISE_10_HALF
|
adapter
->
hw
.
autoneg_advertised
=
ADVERTISE_10_HALF
|
ADVERTISE_100_HALF
;
ADVERTISE_100_HALF
;
break
;
break
;
case
FULL_DUPLEX
:
case
FULL_DUPLEX
:
DPRINTK
(
PROBE
,
INFO
,
"Full Duplex specified without Speed
\n
"
);
DPRINTK
(
PROBE
,
INFO
,
"Full Duplex specified without Speed
\n
"
);
DPRINTK
(
PROBE
,
INFO
,
DPRINTK
(
PROBE
,
INFO
,
"Using Autonegotiation at "
"
Using Autonegotiation at
Full Duplex only
\n
"
);
"Full Duplex only
\n
"
);
adapter
->
hw
.
autoneg
=
adapter
->
fc_autoneg
=
1
;
adapter
->
hw
.
autoneg
=
adapter
->
fc_autoneg
=
1
;
adapter
->
hw
.
autoneg_advertised
=
ADVERTISE_10_FULL
|
adapter
->
hw
.
autoneg_advertised
=
ADVERTISE_10_FULL
|
ADVERTISE_100_FULL
|
ADVERTISE_100_FULL
|
ADVERTISE_1000_FULL
;
ADVERTISE_1000_FULL
;
break
;
break
;
case
SPEED_10
:
case
SPEED_10
:
DPRINTK
(
PROBE
,
INFO
,
DPRINTK
(
PROBE
,
INFO
,
"10 Mbps Speed specified "
"
10 Mbps Speed specified
without Duplex
\n
"
);
"without Duplex
\n
"
);
DPRINTK
(
PROBE
,
INFO
,
"Using Autonegotiation at 10 Mbps only
\n
"
);
DPRINTK
(
PROBE
,
INFO
,
"Using Autonegotiation at 10 Mbps only
\n
"
);
adapter
->
hw
.
autoneg
=
adapter
->
fc_autoneg
=
1
;
adapter
->
hw
.
autoneg
=
adapter
->
fc_autoneg
=
1
;
adapter
->
hw
.
autoneg_advertised
=
ADVERTISE_10_HALF
|
adapter
->
hw
.
autoneg_advertised
=
ADVERTISE_10_HALF
|
...
@@ -647,10 +647,10 @@ e1000_check_copper_options(struct e1000_adapter *adapter)
...
@@ -647,10 +647,10 @@ e1000_check_copper_options(struct e1000_adapter *adapter)
adapter
->
hw
.
autoneg_advertised
=
0
;
adapter
->
hw
.
autoneg_advertised
=
0
;
break
;
break
;
case
SPEED_100
:
case
SPEED_100
:
DPRINTK
(
PROBE
,
INFO
,
DPRINTK
(
PROBE
,
INFO
,
"100 Mbps Speed specified "
"
100 Mbps Speed specified
without Duplex
\n
"
);
"without Duplex
\n
"
);
DPRINTK
(
PROBE
,
INFO
,
DPRINTK
(
PROBE
,
INFO
,
"Using Autonegotiation at "
"
Using Autonegotiation at
100 Mbps only
\n
"
);
"100 Mbps only
\n
"
);
adapter
->
hw
.
autoneg
=
adapter
->
fc_autoneg
=
1
;
adapter
->
hw
.
autoneg
=
adapter
->
fc_autoneg
=
1
;
adapter
->
hw
.
autoneg_advertised
=
ADVERTISE_100_HALF
|
adapter
->
hw
.
autoneg_advertised
=
ADVERTISE_100_HALF
|
ADVERTISE_100_FULL
;
ADVERTISE_100_FULL
;
...
@@ -668,10 +668,11 @@ e1000_check_copper_options(struct e1000_adapter *adapter)
...
@@ -668,10 +668,11 @@ e1000_check_copper_options(struct e1000_adapter *adapter)
adapter
->
hw
.
autoneg_advertised
=
0
;
adapter
->
hw
.
autoneg_advertised
=
0
;
break
;
break
;
case
SPEED_1000
:
case
SPEED_1000
:
DPRINTK
(
PROBE
,
INFO
,
"1000 Mbps Speed specified without "
"Duplex
\n
"
);
DPRINTK
(
PROBE
,
INFO
,
DPRINTK
(
PROBE
,
INFO
,
"1000 Mbps Speed specified without Duplex
\n
"
);
"Using Autonegotiation at 1000 Mbps "
DPRINTK
(
PROBE
,
INFO
,
"Full Duplex only
\n
"
);
"Using Autonegotiation at 1000 Mbps Full Duplex only
\n
"
);
adapter
->
hw
.
autoneg
=
adapter
->
fc_autoneg
=
1
;
adapter
->
hw
.
autoneg
=
adapter
->
fc_autoneg
=
1
;
adapter
->
hw
.
autoneg_advertised
=
ADVERTISE_1000_FULL
;
adapter
->
hw
.
autoneg_advertised
=
ADVERTISE_1000_FULL
;
break
;
break
;
...
@@ -679,7 +680,8 @@ e1000_check_copper_options(struct e1000_adapter *adapter)
...
@@ -679,7 +680,8 @@ e1000_check_copper_options(struct e1000_adapter *adapter)
DPRINTK
(
PROBE
,
INFO
,
DPRINTK
(
PROBE
,
INFO
,
"Half Duplex is not supported at 1000 Mbps
\n
"
);
"Half Duplex is not supported at 1000 Mbps
\n
"
);
DPRINTK
(
PROBE
,
INFO
,
DPRINTK
(
PROBE
,
INFO
,
"Using Autonegotiation at 1000 Mbps Full Duplex only
\n
"
);
"Using Autonegotiation at 1000 Mbps "
"Full Duplex only
\n
"
);
adapter
->
hw
.
autoneg
=
adapter
->
fc_autoneg
=
1
;
adapter
->
hw
.
autoneg
=
adapter
->
fc_autoneg
=
1
;
adapter
->
hw
.
autoneg_advertised
=
ADVERTISE_1000_FULL
;
adapter
->
hw
.
autoneg_advertised
=
ADVERTISE_1000_FULL
;
break
;
break
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment