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
61a5978a
Commit
61a5978a
authored
Aug 27, 2002
by
Scott Feldman
Committed by
Jeff Garzik
Aug 27, 2002
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
e1000 net driver update 3/6:
o Feature: added new interrupt mitigation knobs.
parent
7ba8c2a7
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
147 additions
and
31 deletions
+147
-31
Documentation/networking/e1000.txt
Documentation/networking/e1000.txt
+55
-23
drivers/net/e1000/e1000.h
drivers/net/e1000/e1000.h
+3
-0
drivers/net/e1000/e1000_main.c
drivers/net/e1000/e1000_main.c
+5
-3
drivers/net/e1000/e1000_param.c
drivers/net/e1000/e1000_param.c
+84
-5
No files found.
Documentation/networking/e1000.txt
View file @
61a5978a
Linux* Base Driver for the Intel(R) PRO/1000 Family of Adapters
Linux* Base Driver for the Intel(R) PRO/1000 Family of Adapters
===============================================================
===============================================================
June 11
, 2002
August 6
, 2002
Contents
Contents
...
@@ -20,12 +20,12 @@ In This Release
...
@@ -20,12 +20,12 @@ In This Release
===============
===============
This file describes the Linux* Base Driver for the Intel(R) PRO/1000 Family
This file describes the Linux* Base Driver for the Intel(R) PRO/1000 Family
of Adapters, version 4.
2
.x. This driver includes support for
of Adapters, version 4.
3
.x. This driver includes support for
Itanium(TM)-based systems.
Itanium(TM)-based systems.
This release version includes the following:
This release version includes the following:
- Support for the ethtool 1.
5
interface. A third-party application can use
- Support for the ethtool 1.
6
interface. A third-party application can use
the ethtool interface to get and set driver parameters.
the ethtool interface to get and set driver parameters.
- Zero copy. This feature provides faster data throughput. Enabled by
- Zero copy. This feature provides faster data throughput. Enabled by
...
@@ -113,12 +113,12 @@ Valid Range: 0x01-0x0F, 0x20-0x2F
...
@@ -113,12 +113,12 @@ Valid Range: 0x01-0x0F, 0x20-0x2F
Default Value: 0x2F
Default Value: 0x2F
This parameter is a bit mask that specifies which speed and duplex
This parameter is a bit mask that specifies which speed and duplex
settings the board advertises. When this parameter is used, the Speed and
settings the board advertises. When this parameter is used, the Speed and
Duplex parameters must not be specified.
Duplex parameters must not be specified.
Duplex (adapters using copper connections only)
Duplex (adapters using copper connections only)
Valid Range: 0-2 (0=auto-negotiate, 1=half, 2=full)
Valid Range: 0-2 (0=auto-negotiate, 1=half, 2=full)
Default Value: 0
Default Value: 0
Defines the direction in which data is allowed to flow. Can by either one
Defines the direction in which data is allowed to flow. Can by either one
or two-directional. If both Duplex and the link partner are set to auto-
or two-directional. If both Duplex and the link partner are set to auto-
negotiate, the board auto-detects the correct duplex. If the link partner
negotiate, the board auto-detects the correct duplex. If the link partner
is forced (either full or half), Duplex defaults to half-duplex.
is forced (either full or half), Duplex defaults to half-duplex.
...
@@ -126,45 +126,58 @@ Default Value: 0
...
@@ -126,45 +126,58 @@ Default Value: 0
FlowControl
FlowControl
Valid Range: 0-3 (0=none, 1=Rx only, 2=Tx only, 3=Rx&Tx)
Valid Range: 0-3 (0=none, 1=Rx only, 2=Tx only, 3=Rx&Tx)
Default: Read flow control settings from the EEPROM
Default: Read flow control settings from the EEPROM
This parameter controls the automatic generation(Tx) and response(Rx) to
This parameter controls the automatic generation(Tx) and response(Rx) to
Ethernet PAUSE frames.
Ethernet PAUSE frames.
RxDescriptors
RxDescriptors
Valid Range: 80-256 for 82542 and 82543-based adapters
Valid Range: 80-256 for 82542 and 82543-based adapters
80-4096 for 82540, 82544, 82545, and 82546-based adapters
80-4096 for 82540, 82544, 82545, and 82546-based adapters
Default Value: 80
Default Value: 80
This value is the number of receive descriptors allocated by the driver.
This value is the number of receive descriptors allocated by the driver.
Increasing this value allows the driver to buffer more incoming packets.
Increasing this value allows the driver to buffer more incoming packets.
Each descriptor is 16 bytes. A receive buffer is also allocated for each
Each descriptor is 16 bytes. A receive buffer is also allocated for each
descriptor and can be either 2048, 4096, 8192, or 16384 bytes, depending
descriptor and can be either 2048, 4096, 8192, or 16384 bytes, depending
on the MTU setting. The maximum MTU size is 16110.
on the MTU setting. The maximum MTU size is 16110.
NOTE: MTU designates the frame size. It only needs to be set for Jumbo
Frames.
RxIntDelay
RxIntDelay
Valid Range: 0-65535 (0=off)
Valid Range: 0-65535 (0=off)
Default Value: 0 (82542, 82543, and 82544-based adapters)
Default Value: 0 (82542, 82543, and 82544-based adapters)
128 (82540, 82545, and 82546-based adapters)
128 (82540, 82545, and 82546-based adapters)
This value delays the generation of receive interrupts in units of 1.024
This value delays the generation of receive interrupts in units of 1.024
microseconds. Receive interrupt reduction can improve CPU efficiency if
microseconds. Receive interrupt reduction can improve CPU efficiency if
properly tuned for specific network traffic. Increasing this value adds
properly tuned for specific network traffic. Increasing this value adds
extra latency to frame reception and can end up decreasing the throughput
extra latency to frame reception and can end up decreasing the throughput
of TCP traffic. If the system is reporting dropped receives, this value
of TCP traffic. If the system is reporting dropped receives, this value
may be set too high, causing the driver to run out of available receive
may be set too high, causing the driver to run out of available receive
descriptors.
descriptors.
CAUTION: When setting RxIntDelay to a value other than 0, adapters based
CAUTION: When setting RxIntDelay to a value other than 0, adapters based
on the Intel 82543 and 82544 LAN controllers may hang (stop
on the Intel 82543 and 82544 LAN controllers may hang (stop
transmitting) under certain network conditions. If this occurs a
transmitting) under certain network conditions. If this occurs a
message is logged in the system event log. In addition, the
message is logged in the system event log. In addition, the
controller is automatically reset, restoring the network
controller is automatically reset, restoring the network
connection. To eliminate the potential for the hang ensure that
connection. To eliminate the potential for the hang ensure that
RxIntDelay is set to 0.
RxIntDelay is set to 0.
RxAbsIntDelay (82540, 82545, and 82546-based adapters only)
Valid Range: 0-65535 (0=off)
Default Value: 128
This value, in units of 1.024 microseconds, limits the delay in which a
transmit interrupt is generated. Useful only if RxIntDelay is non-zero,
this value ensures that an interrupt is generated after the initial
packet is received within the set amount of time. Proper tuning,
along with RxIntDelay, may improve traffic throughput in specific network
conditions.
Speed (adapters using copper connections only)
Speed (adapters using copper connections only)
Valid Settings: 0, 10, 100, 1000
Valid Settings: 0, 10, 100, 1000
Default Value: 0 (auto-negotiate at all supported speeds)
Default Value: 0 (auto-negotiate at all supported speeds)
Speed forces the line speed to the specified value in megabits per second
Speed forces the line speed to the specified value in megabits per second
(Mbps). If this parameter is not specified or is set to 0 and the link
(Mbps). If this parameter is not specified or is set to 0 and the link
partner is set to auto-negotiate, the board will auto-detect the correct
partner is set to auto-negotiate, the board will auto-detect the correct
speed. Duplex must also be set when Speed is set to either 10 or 100.
speed. Duplex must also be set when Speed is set to either 10 or 100.
TxDescriptors
TxDescriptors
...
@@ -172,9 +185,28 @@ Valid Range: 80-256 for 82542 and 82543-based adapters
...
@@ -172,9 +185,28 @@ Valid Range: 80-256 for 82542 and 82543-based adapters
80-4096 for 82540, 82544, 82545, and 82546-based adapters
80-4096 for 82540, 82544, 82545, and 82546-based adapters
Default Value: 256
Default Value: 256
This value is the number of transmit descriptors allocated by the driver.
This value is the number of transmit descriptors allocated by the driver.
Increasing this value allows the driver to queue more transmits. Each
Increasing this value allows the driver to queue more transmits. Each
descriptor is 16 bytes.
descriptor is 16 bytes.
TxIntDelay
Valid Range: 0-65535 (0=off)
Default Value: 64
This value delays the generation of transmit interrupts in units of
1.024 microseconds. Transmit interrupt reduction can improve CPU
efficiency if properly tuned for specific network traffic. If the
system is reporting dropped transmits, this value may be set too high
causing the driver to run out of available transmit descriptors.
TxAbsIntDelay (82540, 82545, and 82546-based adapters only)
Valid Range: 0-65535 (0=off)
Default Value: 64
This value, in units of 1.024 microseconds, limits the delay in which a
transmit interrupt is generated. Useful only if TxIntDelay is non-zero,
this value ensures that an interrupt is generated after the initial
packet is sent on the wire within the set amount of time. Proper tuning,
along with TxIntDelay, may improve traffic throughput in specific
network conditions.
XsumRX (not available on the PRO/1000 Gigabit Server Adapter)
XsumRX (not available on the PRO/1000 Gigabit Server Adapter)
Valid Range: 0-1
Valid Range: 0-1
Default Value: 1
Default Value: 1
...
...
drivers/net/e1000/e1000.h
View file @
61a5978a
...
@@ -169,6 +169,8 @@ struct e1000_adapter {
...
@@ -169,6 +169,8 @@ struct e1000_adapter {
/* TX */
/* TX */
struct
e1000_desc_ring
tx_ring
;
struct
e1000_desc_ring
tx_ring
;
uint32_t
txd_cmd
;
uint32_t
txd_cmd
;
uint32_t
tx_int_delay
;
uint32_t
tx_abs_int_delay
;
int
max_data_per_txd
;
int
max_data_per_txd
;
/* RX */
/* RX */
...
@@ -176,6 +178,7 @@ struct e1000_adapter {
...
@@ -176,6 +178,7 @@ struct e1000_adapter {
uint64_t
hw_csum_err
;
uint64_t
hw_csum_err
;
uint64_t
hw_csum_good
;
uint64_t
hw_csum_good
;
uint32_t
rx_int_delay
;
uint32_t
rx_int_delay
;
uint32_t
rx_abs_int_delay
;
boolean_t
rx_csum
;
boolean_t
rx_csum
;
/* OS defined structs */
/* OS defined structs */
...
...
drivers/net/e1000/e1000_main.c
View file @
61a5978a
...
@@ -777,7 +777,9 @@ e1000_configure_tx(struct e1000_adapter *adapter)
...
@@ -777,7 +777,9 @@ e1000_configure_tx(struct e1000_adapter *adapter)
/* Set the Tx Interrupt Delay register */
/* Set the Tx Interrupt Delay register */
E1000_WRITE_REG
(
&
adapter
->
hw
,
TIDV
,
64
);
E1000_WRITE_REG
(
&
adapter
->
hw
,
TIDV
,
adapter
->
tx_int_delay
);
if
(
adapter
->
hw
.
mac_type
>=
e1000_82540
)
E1000_WRITE_REG
(
&
adapter
->
hw
,
TADV
,
adapter
->
tx_abs_int_delay
);
/* Program the Transmit Control Register */
/* Program the Transmit Control Register */
...
@@ -907,8 +909,8 @@ e1000_configure_rx(struct e1000_adapter *adapter)
...
@@ -907,8 +909,8 @@ e1000_configure_rx(struct e1000_adapter *adapter)
/* set the Receive Delay Timer Register */
/* set the Receive Delay Timer Register */
if
(
adapter
->
hw
.
mac_type
>=
e1000_82540
)
{
if
(
adapter
->
hw
.
mac_type
>=
e1000_82540
)
{
E1000_WRITE_REG
(
&
adapter
->
hw
,
R
ADV
,
adapter
->
rx_int_delay
);
E1000_WRITE_REG
(
&
adapter
->
hw
,
R
DTR
,
adapter
->
rx_int_delay
);
E1000_WRITE_REG
(
&
adapter
->
hw
,
R
DTR
,
64
);
E1000_WRITE_REG
(
&
adapter
->
hw
,
R
ADV
,
adapter
->
rx_abs_int_delay
);
/* Set the interrupt throttling rate. Value is calculated
/* Set the interrupt throttling rate. Value is calculated
* as DEFAULT_ITR = 1/(MAX_INTS_PER_SEC * 256ns) */
* as DEFAULT_ITR = 1/(MAX_INTS_PER_SEC * 256ns) */
...
...
drivers/net/e1000/e1000_param.c
View file @
61a5978a
...
@@ -147,6 +147,24 @@ E1000_PARAM(FlowControl, "Flow Control setting");
...
@@ -147,6 +147,24 @@ E1000_PARAM(FlowControl, "Flow Control setting");
E1000_PARAM
(
XsumRX
,
"Disable or enable Receive Checksum offload"
);
E1000_PARAM
(
XsumRX
,
"Disable or enable Receive Checksum offload"
);
/* Transmit Interrupt Delay in units of 1.024 microseconds
*
* Valid Range: 0-65535
*
* Default Value: 64
*/
E1000_PARAM
(
TxIntDelay
,
"Transmit Interrupt Delay"
);
/* Transmit Absolute Interrupt Delay in units of 1.024 microseconds
*
* Valid Range: 0-65535
*
* Default Value: 0
*/
E1000_PARAM
(
TxAbsIntDelay
,
"Transmit Absolute Interrupt Delay"
);
/* Receive Interrupt Delay in units of 1.024 microseconds
/* Receive Interrupt Delay in units of 1.024 microseconds
*
*
* Valid Range: 0-65535
* Valid Range: 0-65535
...
@@ -156,6 +174,15 @@ E1000_PARAM(XsumRX, "Disable or enable Receive Checksum offload");
...
@@ -156,6 +174,15 @@ E1000_PARAM(XsumRX, "Disable or enable Receive Checksum offload");
E1000_PARAM
(
RxIntDelay
,
"Receive Interrupt Delay"
);
E1000_PARAM
(
RxIntDelay
,
"Receive Interrupt Delay"
);
/* Receive Absolute Interrupt Delay in units of 1.024 microseconds
*
* Valid Range: 0-65535
*
* Default Value: 128
*/
E1000_PARAM
(
RxAbsIntDelay
,
"Receive Absolute Interrupt Delay"
);
#define AUTONEG_ADV_DEFAULT 0x2F
#define AUTONEG_ADV_DEFAULT 0x2F
#define AUTONEG_ADV_MASK 0x2F
#define AUTONEG_ADV_MASK 0x2F
#define FLOW_CONTROL_DEFAULT FLOW_CONTROL_FULL
#define FLOW_CONTROL_DEFAULT FLOW_CONTROL_FULL
...
@@ -170,11 +197,23 @@ E1000_PARAM(RxIntDelay, "Receive Interrupt Delay");
...
@@ -170,11 +197,23 @@ E1000_PARAM(RxIntDelay, "Receive Interrupt Delay");
#define MIN_RXD 80
#define MIN_RXD 80
#define MAX_82544_RXD 4096
#define MAX_82544_RXD 4096
#define DEFAULT_RDTR
0
#define DEFAULT_RDTR
128
#define DEFAULT_R
ADV 128
#define DEFAULT_R
DTR_82544 0
#define MAX_RXDELAY 0xFFFF
#define MAX_RXDELAY 0xFFFF
#define MIN_RXDELAY 0
#define MIN_RXDELAY 0
#define DEFAULT_RADV 128
#define MAX_RXABSDELAY 0xFFFF
#define MIN_RXABSDELAY 0
#define DEFAULT_TIDV 64
#define MAX_TXDELAY 0xFFFF
#define MIN_TXDELAY 0
#define DEFAULT_TADV 64
#define MAX_TXABSDELAY 0xFFFF
#define MIN_TXABSDELAY 0
struct
e1000_option
{
struct
e1000_option
{
enum
{
enable_option
,
range_option
,
list_option
}
type
;
enum
{
enable_option
,
range_option
,
list_option
}
type
;
char
*
name
;
char
*
name
;
...
@@ -331,21 +370,61 @@ e1000_check_options(struct e1000_adapter *adapter)
...
@@ -331,21 +370,61 @@ e1000_check_options(struct e1000_adapter *adapter)
e1000_validate_option
(
&
fc
,
&
opt
);
e1000_validate_option
(
&
fc
,
&
opt
);
adapter
->
hw
.
fc
=
adapter
->
hw
.
original_fc
=
fc
;
adapter
->
hw
.
fc
=
adapter
->
hw
.
original_fc
=
fc
;
}
}
{
/* Transmit Interrupt Delay */
char
*
tidv
=
"using default of "
__MODULE_STRING
(
DEFAULT_TIDV
);
struct
e1000_option
opt
=
{
.
type
=
range_option
,
.
name
=
"Transmit Interrupt Delay"
,
.
arg
=
{
r
:
{
min
:
MIN_TXDELAY
,
max
:
MAX_TXDELAY
}}
};
opt
.
def
=
DEFAULT_TIDV
;
opt
.
err
=
tidv
;
adapter
->
tx_int_delay
=
TxIntDelay
[
bd
];
e1000_validate_option
(
&
adapter
->
tx_int_delay
,
&
opt
);
}
{
/* Transmit Absolute Interrupt Delay */
char
*
tadv
=
"using default of "
__MODULE_STRING
(
DEFAULT_TADV
);
struct
e1000_option
opt
=
{
.
type
=
range_option
,
.
name
=
"Transmit Absolute Interrupt Delay"
,
.
arg
=
{
r
:
{
min
:
MIN_TXABSDELAY
,
max
:
MAX_TXABSDELAY
}}
};
opt
.
def
=
DEFAULT_TADV
;
opt
.
err
=
tadv
;
adapter
->
tx_abs_int_delay
=
TxAbsIntDelay
[
bd
];
e1000_validate_option
(
&
adapter
->
tx_abs_int_delay
,
&
opt
);
}
{
/* Receive Interrupt Delay */
{
/* Receive Interrupt Delay */
char
*
rdtr
=
"using default of "
__MODULE_STRING
(
DEFAULT_RDTR
);
char
*
rdtr
=
"using default of "
__MODULE_STRING
(
DEFAULT_RDTR
);
char
*
radv
=
"using default of "
__MODULE_STRING
(
DEFAULT_RADV
);
char
*
rdtr_82544
=
"using default of "
__MODULE_STRING
(
DEFAULT_RDTR_82544
);
struct
e1000_option
opt
=
{
struct
e1000_option
opt
=
{
.
type
=
range_option
,
.
type
=
range_option
,
.
name
=
"Receive Interrupt Delay"
,
.
name
=
"Receive Interrupt Delay"
,
.
arg
=
{
r
:
{
min
:
MIN_RXDELAY
,
max
:
MAX_RXDELAY
}}
.
arg
=
{
r
:
{
min
:
MIN_RXDELAY
,
max
:
MAX_RXDELAY
}}
};
};
e1000_mac_type
mac_type
=
adapter
->
hw
.
mac_type
;
e1000_mac_type
mac_type
=
adapter
->
hw
.
mac_type
;
opt
.
def
=
mac_type
<
e1000_82540
?
DEFAULT_RDTR
:
DEFAULT_RADV
;
opt
.
def
=
mac_type
>
e1000_82544
?
DEFAULT_RDTR
:
0
;
opt
.
err
=
mac_type
<
e1000_82540
?
rdtr
:
radv
;
opt
.
err
=
mac_type
>
e1000_82544
?
rdtr
:
rdtr_82544
;
adapter
->
rx_int_delay
=
RxIntDelay
[
bd
];
adapter
->
rx_int_delay
=
RxIntDelay
[
bd
];
e1000_validate_option
(
&
adapter
->
rx_int_delay
,
&
opt
);
e1000_validate_option
(
&
adapter
->
rx_int_delay
,
&
opt
);
}
}
{
/* Receive Absolute Interrupt Delay */
char
*
radv
=
"using default of "
__MODULE_STRING
(
DEFAULT_RADV
);
struct
e1000_option
opt
=
{
.
type
=
range_option
,
.
name
=
"Receive Absolute Interrupt Delay"
,
.
arg
=
{
r
:
{
min
:
MIN_RXABSDELAY
,
max
:
MAX_RXABSDELAY
}}
};
opt
.
def
=
DEFAULT_RADV
;
opt
.
err
=
radv
;
adapter
->
rx_abs_int_delay
=
RxAbsIntDelay
[
bd
];
e1000_validate_option
(
&
adapter
->
rx_abs_int_delay
,
&
opt
);
}
switch
(
adapter
->
hw
.
media_type
)
{
switch
(
adapter
->
hw
.
media_type
)
{
case
e1000_media_type_fiber
:
case
e1000_media_type_fiber
:
...
...
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