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
nexedi
linux
Commits
3869f806
Commit
3869f806
authored
Sep 29, 2011
by
David S. Miller
Browse files
Options
Browse Files
Download
Plain Diff
Merge
git://github.com/Jkirsher/net-next
parents
f9b491ec
0ccb974d
Changes
12
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
358 additions
and
227 deletions
+358
-227
drivers/net/ethernet/intel/e1000/e1000_main.c
drivers/net/ethernet/intel/e1000/e1000_main.c
+3
-3
drivers/net/ethernet/intel/ixgbe/ixgbe.h
drivers/net/ethernet/intel/ixgbe/ixgbe.h
+14
-11
drivers/net/ethernet/intel/ixgbe/ixgbe_82598.c
drivers/net/ethernet/intel/ixgbe/ixgbe_82598.c
+2
-6
drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
+5
-7
drivers/net/ethernet/intel/ixgbe/ixgbe_dcb.h
drivers/net/ethernet/intel/ixgbe/ixgbe_dcb.h
+0
-1
drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.c
drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.c
+4
-5
drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82599.c
drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82599.c
+3
-5
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
+47
-106
drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c
drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c
+1
-3
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+220
-69
drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
+57
-7
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
+2
-4
No files found.
drivers/net/ethernet/intel/e1000/e1000_main.c
View file @
3869f806
...
@@ -1814,8 +1814,8 @@ static void e1000_setup_rctl(struct e1000_adapter *adapter)
...
@@ -1814,8 +1814,8 @@ static void e1000_setup_rctl(struct e1000_adapter *adapter)
rctl
&=
~
(
3
<<
E1000_RCTL_MO_SHIFT
);
rctl
&=
~
(
3
<<
E1000_RCTL_MO_SHIFT
);
rctl
|=
E1000_RCTL_
EN
|
E1000_RCTL_BAM
|
rctl
|=
E1000_RCTL_
BAM
|
E1000_RCTL_LBM_NO
|
E1000_RCTL_
LBM_NO
|
E1000_RCTL_
RDMTS_HALF
|
E1000_RCTL_RDMTS_HALF
|
(
hw
->
mc_filter_type
<<
E1000_RCTL_MO_SHIFT
);
(
hw
->
mc_filter_type
<<
E1000_RCTL_MO_SHIFT
);
if
(
hw
->
tbi_compatibility_on
==
1
)
if
(
hw
->
tbi_compatibility_on
==
1
)
...
@@ -1917,7 +1917,7 @@ static void e1000_configure_rx(struct e1000_adapter *adapter)
...
@@ -1917,7 +1917,7 @@ static void e1000_configure_rx(struct e1000_adapter *adapter)
}
}
/* Enable Receives */
/* Enable Receives */
ew32
(
RCTL
,
rctl
);
ew32
(
RCTL
,
rctl
|
E1000_RCTL_EN
);
}
}
/**
/**
...
...
drivers/net/ethernet/intel/ixgbe/ixgbe.h
View file @
3869f806
...
@@ -301,26 +301,29 @@ struct ixgbe_ring_container {
...
@@ -301,26 +301,29 @@ struct ixgbe_ring_container {
*/
*/
struct
ixgbe_q_vector
{
struct
ixgbe_q_vector
{
struct
ixgbe_adapter
*
adapter
;
struct
ixgbe_adapter
*
adapter
;
unsigned
int
v_idx
;
/* index of q_vector within array, also used for
* finding the bit in EICR and friends that
* represents the vector for this ring */
#ifdef CONFIG_IXGBE_DCA
#ifdef CONFIG_IXGBE_DCA
int
cpu
;
/* CPU for DCA */
int
cpu
;
/* CPU for DCA */
#endif
#endif
struct
napi_struct
napi
;
u16
v_idx
;
/* index of q_vector within array, also used for
* finding the bit in EICR and friends that
* represents the vector for this ring */
u16
itr
;
/* Interrupt throttle rate written to EITR */
struct
ixgbe_ring_container
rx
,
tx
;
struct
ixgbe_ring_container
rx
,
tx
;
u32
eitr
;
struct
napi_struct
napi
;
cpumask_var_t
affinity_mask
;
cpumask_var_t
affinity_mask
;
char
name
[
IFNAMSIZ
+
9
];
char
name
[
IFNAMSIZ
+
9
];
};
};
/*
Helper macros to switch between ints/sec and what the register uses.
/*
*
And yes, it's the same math going both ways. The lowest value
*
microsecond values for various ITR rates shifted by 2 to fit itr register
*
supported by all of the ixgbe hardware is 8.
*
with the first 3 bits reserved 0
*/
*/
#define EITR_INTS_PER_SEC_TO_REG(_eitr) \
#define IXGBE_MIN_RSC_ITR 24
((_eitr) ? (1000000000 / ((_eitr) * 256)) : 8)
#define IXGBE_100K_ITR 40
#define EITR_REG_TO_INTS_PER_SEC EITR_INTS_PER_SEC_TO_REG
#define IXGBE_20K_ITR 200
#define IXGBE_10K_ITR 400
#define IXGBE_8K_ITR 500
static
inline
u16
ixgbe_desc_unused
(
struct
ixgbe_ring
*
ring
)
static
inline
u16
ixgbe_desc_unused
(
struct
ixgbe_ring
*
ring
)
{
{
...
...
drivers/net/ethernet/intel/ixgbe/ixgbe_82598.c
View file @
3869f806
...
@@ -358,7 +358,6 @@ static s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num)
...
@@ -358,7 +358,6 @@ static s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num)
u32
fctrl_reg
;
u32
fctrl_reg
;
u32
rmcs_reg
;
u32
rmcs_reg
;
u32
reg
;
u32
reg
;
u32
rx_pba_size
;
u32
link_speed
=
0
;
u32
link_speed
=
0
;
bool
link_up
;
bool
link_up
;
...
@@ -461,16 +460,13 @@ static s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num)
...
@@ -461,16 +460,13 @@ static s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num)
/* Set up and enable Rx high/low water mark thresholds, enable XON. */
/* Set up and enable Rx high/low water mark thresholds, enable XON. */
if
(
hw
->
fc
.
current_mode
&
ixgbe_fc_tx_pause
)
{
if
(
hw
->
fc
.
current_mode
&
ixgbe_fc_tx_pause
)
{
rx_pba_size
=
IXGBE_READ_REG
(
hw
,
IXGBE_RXPBSIZE
(
packetbuf_num
));
reg
=
hw
->
fc
.
low_water
<<
6
;
rx_pba_size
>>=
IXGBE_RXPBSIZE_SHIFT
;
reg
=
(
rx_pba_size
-
hw
->
fc
.
low_water
)
<<
6
;
if
(
hw
->
fc
.
send_xon
)
if
(
hw
->
fc
.
send_xon
)
reg
|=
IXGBE_FCRTL_XONE
;
reg
|=
IXGBE_FCRTL_XONE
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTL
(
packetbuf_num
),
reg
);
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTL
(
packetbuf_num
),
reg
);
reg
=
(
rx_pba_size
-
hw
->
fc
.
high_water
)
<<
6
;
reg
=
hw
->
fc
.
high_water
[
packetbuf_num
]
<<
6
;
reg
|=
IXGBE_FCRTH_FCEN
;
reg
|=
IXGBE_FCRTH_FCEN
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTH
(
packetbuf_num
),
reg
);
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTH
(
packetbuf_num
),
reg
);
...
...
drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
View file @
3869f806
...
@@ -1932,7 +1932,6 @@ s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw, s32 packetbuf_num)
...
@@ -1932,7 +1932,6 @@ s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw, s32 packetbuf_num)
s32
ret_val
=
0
;
s32
ret_val
=
0
;
u32
mflcn_reg
,
fccfg_reg
;
u32
mflcn_reg
,
fccfg_reg
;
u32
reg
;
u32
reg
;
u32
rx_pba_size
;
u32
fcrtl
,
fcrth
;
u32
fcrtl
,
fcrth
;
#ifdef CONFIG_DCB
#ifdef CONFIG_DCB
...
@@ -2012,11 +2011,8 @@ s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw, s32 packetbuf_num)
...
@@ -2012,11 +2011,8 @@ s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw, s32 packetbuf_num)
IXGBE_WRITE_REG
(
hw
,
IXGBE_MFLCN
,
mflcn_reg
);
IXGBE_WRITE_REG
(
hw
,
IXGBE_MFLCN
,
mflcn_reg
);
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCCFG
,
fccfg_reg
);
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCCFG
,
fccfg_reg
);
rx_pba_size
=
IXGBE_READ_REG
(
hw
,
IXGBE_RXPBSIZE
(
packetbuf_num
));
fcrth
=
hw
->
fc
.
high_water
[
packetbuf_num
]
<<
10
;
rx_pba_size
>>=
IXGBE_RXPBSIZE_SHIFT
;
fcrtl
=
hw
->
fc
.
low_water
<<
10
;
fcrth
=
(
rx_pba_size
-
hw
->
fc
.
high_water
)
<<
10
;
fcrtl
=
(
rx_pba_size
-
hw
->
fc
.
low_water
)
<<
10
;
if
(
hw
->
fc
.
current_mode
&
ixgbe_fc_tx_pause
)
{
if
(
hw
->
fc
.
current_mode
&
ixgbe_fc_tx_pause
)
{
fcrth
|=
IXGBE_FCRTH_FCEN
;
fcrth
|=
IXGBE_FCRTH_FCEN
;
...
@@ -2293,7 +2289,9 @@ static s32 ixgbe_setup_fc(struct ixgbe_hw *hw, s32 packetbuf_num)
...
@@ -2293,7 +2289,9 @@ static s32 ixgbe_setup_fc(struct ixgbe_hw *hw, s32 packetbuf_num)
* Validate the water mark configuration. Zero water marks are invalid
* Validate the water mark configuration. Zero water marks are invalid
* because it causes the controller to just blast out fc packets.
* because it causes the controller to just blast out fc packets.
*/
*/
if
(
!
hw
->
fc
.
low_water
||
!
hw
->
fc
.
high_water
||
!
hw
->
fc
.
pause_time
)
{
if
(
!
hw
->
fc
.
low_water
||
!
hw
->
fc
.
high_water
[
packetbuf_num
]
||
!
hw
->
fc
.
pause_time
)
{
hw_dbg
(
hw
,
"Invalid water mark configuration
\n
"
);
hw_dbg
(
hw
,
"Invalid water mark configuration
\n
"
);
ret_val
=
IXGBE_ERR_INVALID_LINK_SETTINGS
;
ret_val
=
IXGBE_ERR_INVALID_LINK_SETTINGS
;
goto
out
;
goto
out
;
...
...
drivers/net/ethernet/intel/ixgbe/ixgbe_dcb.h
View file @
3869f806
...
@@ -36,7 +36,6 @@
...
@@ -36,7 +36,6 @@
#define IXGBE_MAX_PACKET_BUFFERS 8
#define IXGBE_MAX_PACKET_BUFFERS 8
#define MAX_USER_PRIORITY 8
#define MAX_USER_PRIORITY 8
#define MAX_TRAFFIC_CLASS 8
#define MAX_BW_GROUP 8
#define MAX_BW_GROUP 8
#define BW_PERCENT 100
#define BW_PERCENT 100
...
...
drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.c
View file @
3869f806
...
@@ -191,7 +191,7 @@ s32 ixgbe_dcb_config_tx_data_arbiter_82598(struct ixgbe_hw *hw,
...
@@ -191,7 +191,7 @@ s32 ixgbe_dcb_config_tx_data_arbiter_82598(struct ixgbe_hw *hw,
*/
*/
s32
ixgbe_dcb_config_pfc_82598
(
struct
ixgbe_hw
*
hw
,
u8
pfc_en
)
s32
ixgbe_dcb_config_pfc_82598
(
struct
ixgbe_hw
*
hw
,
u8
pfc_en
)
{
{
u32
reg
,
rx_pba_size
;
u32
reg
;
u8
i
;
u8
i
;
if
(
pfc_en
)
{
if
(
pfc_en
)
{
...
@@ -222,9 +222,8 @@ s32 ixgbe_dcb_config_pfc_82598(struct ixgbe_hw *hw, u8 pfc_en)
...
@@ -222,9 +222,8 @@ s32 ixgbe_dcb_config_pfc_82598(struct ixgbe_hw *hw, u8 pfc_en)
*/
*/
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
int
enabled
=
pfc_en
&
(
1
<<
i
);
int
enabled
=
pfc_en
&
(
1
<<
i
);
rx_pba_size
=
IXGBE_READ_REG
(
hw
,
IXGBE_RXPBSIZE
(
i
));
rx_pba_size
>>=
IXGBE_RXPBSIZE_SHIFT
;
reg
=
hw
->
fc
.
low_water
<<
10
;
reg
=
(
rx_pba_size
-
hw
->
fc
.
low_water
)
<<
10
;
if
(
enabled
==
pfc_enabled_tx
||
if
(
enabled
==
pfc_enabled_tx
||
enabled
==
pfc_enabled_full
)
enabled
==
pfc_enabled_full
)
...
@@ -232,7 +231,7 @@ s32 ixgbe_dcb_config_pfc_82598(struct ixgbe_hw *hw, u8 pfc_en)
...
@@ -232,7 +231,7 @@ s32 ixgbe_dcb_config_pfc_82598(struct ixgbe_hw *hw, u8 pfc_en)
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTL
(
i
),
reg
);
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTL
(
i
),
reg
);
reg
=
(
rx_pba_size
-
hw
->
fc
.
high_water
)
<<
10
;
reg
=
hw
->
fc
.
high_water
[
i
]
<<
10
;
if
(
enabled
==
pfc_enabled_tx
||
if
(
enabled
==
pfc_enabled_tx
||
enabled
==
pfc_enabled_full
)
enabled
==
pfc_enabled_full
)
reg
|=
IXGBE_FCRTH_FCEN
;
reg
|=
IXGBE_FCRTH_FCEN
;
...
...
drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82599.c
View file @
3869f806
...
@@ -210,21 +210,19 @@ s32 ixgbe_dcb_config_tx_data_arbiter_82599(struct ixgbe_hw *hw,
...
@@ -210,21 +210,19 @@ s32 ixgbe_dcb_config_tx_data_arbiter_82599(struct ixgbe_hw *hw,
*/
*/
s32
ixgbe_dcb_config_pfc_82599
(
struct
ixgbe_hw
*
hw
,
u8
pfc_en
)
s32
ixgbe_dcb_config_pfc_82599
(
struct
ixgbe_hw
*
hw
,
u8
pfc_en
)
{
{
u32
i
,
reg
,
rx_pba_size
;
u32
i
,
reg
;
/* Configure PFC Tx thresholds per TC */
/* Configure PFC Tx thresholds per TC */
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
int
enabled
=
pfc_en
&
(
1
<<
i
);
int
enabled
=
pfc_en
&
(
1
<<
i
);
rx_pba_size
=
IXGBE_READ_REG
(
hw
,
IXGBE_RXPBSIZE
(
i
));
rx_pba_size
>>=
IXGBE_RXPBSIZE_SHIFT
;
reg
=
(
rx_pba_size
-
hw
->
fc
.
low_water
)
<<
10
;
reg
=
hw
->
fc
.
low_water
<<
10
;
if
(
enabled
)
if
(
enabled
)
reg
|=
IXGBE_FCRTL_XONE
;
reg
|=
IXGBE_FCRTL_XONE
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTL_82599
(
i
),
reg
);
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTL_82599
(
i
),
reg
);
reg
=
(
rx_pba_size
-
hw
->
fc
.
high_water
)
<<
10
;
reg
=
hw
->
fc
.
high_water
[
i
]
<<
10
;
if
(
enabled
)
if
(
enabled
)
reg
|=
IXGBE_FCRTH_FCEN
;
reg
|=
IXGBE_FCRTH_FCEN
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTH_82599
(
i
),
reg
);
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTH_82599
(
i
),
reg
);
...
...
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
View file @
3869f806
...
@@ -2026,39 +2026,20 @@ static int ixgbe_get_coalesce(struct net_device *netdev,
...
@@ -2026,39 +2026,20 @@ static int ixgbe_get_coalesce(struct net_device *netdev,
ec
->
tx_max_coalesced_frames_irq
=
adapter
->
tx_work_limit
;
ec
->
tx_max_coalesced_frames_irq
=
adapter
->
tx_work_limit
;
/* only valid if in constant ITR mode */
/* only valid if in constant ITR mode */
switch
(
adapter
->
rx_itr_setting
)
{
if
(
adapter
->
rx_itr_setting
<=
1
)
case
0
:
ec
->
rx_coalesce_usecs
=
adapter
->
rx_itr_setting
;
/* throttling disabled */
else
ec
->
rx_coalesce_usecs
=
0
;
ec
->
rx_coalesce_usecs
=
adapter
->
rx_itr_setting
>>
2
;
break
;
case
1
:
/* dynamic ITR mode */
ec
->
rx_coalesce_usecs
=
1
;
break
;
default:
/* fixed interrupt rate mode */
ec
->
rx_coalesce_usecs
=
1000000
/
adapter
->
rx_eitr_param
;
break
;
}
/* if in mixed tx/rx queues per vector mode, report only rx settings */
/* if in mixed tx/rx queues per vector mode, report only rx settings */
if
(
adapter
->
q_vector
[
0
]
->
tx
.
count
&&
adapter
->
q_vector
[
0
]
->
rx
.
count
)
if
(
adapter
->
q_vector
[
0
]
->
tx
.
count
&&
adapter
->
q_vector
[
0
]
->
rx
.
count
)
return
0
;
return
0
;
/* only valid if in constant ITR mode */
/* only valid if in constant ITR mode */
switch
(
adapter
->
tx_itr_setting
)
{
if
(
adapter
->
tx_itr_setting
<=
1
)
case
0
:
ec
->
tx_coalesce_usecs
=
adapter
->
tx_itr_setting
;
/* throttling disabled */
else
ec
->
tx_coalesce_usecs
=
0
;
ec
->
tx_coalesce_usecs
=
adapter
->
tx_itr_setting
>>
2
;
break
;
case
1
:
/* dynamic ITR mode */
ec
->
tx_coalesce_usecs
=
1
;
break
;
default:
ec
->
tx_coalesce_usecs
=
1000000
/
adapter
->
tx_eitr_param
;
break
;
}
return
0
;
return
0
;
}
}
...
@@ -2077,10 +2058,9 @@ static bool ixgbe_update_rsc(struct ixgbe_adapter *adapter,
...
@@ -2077,10 +2058,9 @@ static bool ixgbe_update_rsc(struct ixgbe_adapter *adapter,
/* if interrupt rate is too high then disable RSC */
/* if interrupt rate is too high then disable RSC */
if
(
ec
->
rx_coalesce_usecs
!=
1
&&
if
(
ec
->
rx_coalesce_usecs
!=
1
&&
ec
->
rx_coalesce_usecs
<=
1000000
/
IXGBE_MAX_RSC_INT_RATE
)
{
ec
->
rx_coalesce_usecs
<=
(
IXGBE_MIN_RSC_ITR
>>
2
)
)
{
if
(
adapter
->
flags2
&
IXGBE_FLAG2_RSC_ENABLED
)
{
if
(
adapter
->
flags2
&
IXGBE_FLAG2_RSC_ENABLED
)
{
e_info
(
probe
,
"rx-usecs set too low, "
e_info
(
probe
,
"rx-usecs set too low, disabling RSC
\n
"
);
"disabling RSC
\n
"
);
adapter
->
flags2
&=
~
IXGBE_FLAG2_RSC_ENABLED
;
adapter
->
flags2
&=
~
IXGBE_FLAG2_RSC_ENABLED
;
return
true
;
return
true
;
}
}
...
@@ -2088,8 +2068,7 @@ static bool ixgbe_update_rsc(struct ixgbe_adapter *adapter,
...
@@ -2088,8 +2068,7 @@ static bool ixgbe_update_rsc(struct ixgbe_adapter *adapter,
/* check the feature flag value and enable RSC if necessary */
/* check the feature flag value and enable RSC if necessary */
if
((
netdev
->
features
&
NETIF_F_LRO
)
&&
if
((
netdev
->
features
&
NETIF_F_LRO
)
&&
!
(
adapter
->
flags2
&
IXGBE_FLAG2_RSC_ENABLED
))
{
!
(
adapter
->
flags2
&
IXGBE_FLAG2_RSC_ENABLED
))
{
e_info
(
probe
,
"rx-usecs set to %d, "
e_info
(
probe
,
"rx-usecs set to %d, re-enabling RSC
\n
"
,
"re-enabling RSC
\n
"
,
ec
->
rx_coalesce_usecs
);
ec
->
rx_coalesce_usecs
);
adapter
->
flags2
|=
IXGBE_FLAG2_RSC_ENABLED
;
adapter
->
flags2
|=
IXGBE_FLAG2_RSC_ENABLED
;
return
true
;
return
true
;
...
@@ -2104,6 +2083,8 @@ static int ixgbe_set_coalesce(struct net_device *netdev,
...
@@ -2104,6 +2083,8 @@ static int ixgbe_set_coalesce(struct net_device *netdev,
struct
ixgbe_adapter
*
adapter
=
netdev_priv
(
netdev
);
struct
ixgbe_adapter
*
adapter
=
netdev_priv
(
netdev
);
struct
ixgbe_q_vector
*
q_vector
;
struct
ixgbe_q_vector
*
q_vector
;
int
i
;
int
i
;
int
num_vectors
;
u16
tx_itr_param
,
rx_itr_param
;
bool
need_reset
=
false
;
bool
need_reset
=
false
;
/* don't accept tx specific changes if we've got mixed RxTx vectors */
/* don't accept tx specific changes if we've got mixed RxTx vectors */
...
@@ -2114,87 +2095,47 @@ static int ixgbe_set_coalesce(struct net_device *netdev,
...
@@ -2114,87 +2095,47 @@ static int ixgbe_set_coalesce(struct net_device *netdev,
if
(
ec
->
tx_max_coalesced_frames_irq
)
if
(
ec
->
tx_max_coalesced_frames_irq
)
adapter
->
tx_work_limit
=
ec
->
tx_max_coalesced_frames_irq
;
adapter
->
tx_work_limit
=
ec
->
tx_max_coalesced_frames_irq
;
if
(
ec
->
rx_coalesce_usecs
>
1
)
{
if
((
ec
->
rx_coalesce_usecs
>
(
IXGBE_MAX_EITR
>>
2
))
||
/* check the limits */
(
ec
->
tx_coalesce_usecs
>
(
IXGBE_MAX_EITR
>>
2
)))
if
((
1000000
/
ec
->
rx_coalesce_usecs
>
IXGBE_MAX_INT_RATE
)
||
(
1000000
/
ec
->
rx_coalesce_usecs
<
IXGBE_MIN_INT_RATE
))
return
-
EINVAL
;
return
-
EINVAL
;
/* check the old value and enable RSC if necessary */
/* check the old value and enable RSC if necessary */
need_reset
=
ixgbe_update_rsc
(
adapter
,
ec
);
need_reset
=
ixgbe_update_rsc
(
adapter
,
ec
);
/* store the value in ints/second */
if
(
ec
->
rx_coalesce_usecs
>
1
)
adapter
->
rx_eitr_param
=
1000000
/
ec
->
rx_coalesce_usecs
;
adapter
->
rx_itr_setting
=
ec
->
rx_coalesce_usecs
<<
2
;
else
/* static value of interrupt rate */
adapter
->
rx_itr_setting
=
ec
->
rx_coalesce_usecs
;
adapter
->
rx_itr_setting
=
adapter
->
rx_eitr_param
;
/* clear the lower bit as its used for dynamic state */
adapter
->
rx_itr_setting
&=
~
1
;
}
else
if
(
ec
->
rx_coalesce_usecs
==
1
)
{
/* check the old value and enable RSC if necessary */
need_reset
=
ixgbe_update_rsc
(
adapter
,
ec
);
/* 1 means dynamic mode */
adapter
->
rx_eitr_param
=
20000
;
adapter
->
rx_itr_setting
=
1
;
}
else
{
/* check the old value and enable RSC if necessary */
need_reset
=
ixgbe_update_rsc
(
adapter
,
ec
);
/*
* any other value means disable eitr, which is best
* served by setting the interrupt rate very high
*/
adapter
->
rx_eitr_param
=
IXGBE_MAX_INT_RATE
;
adapter
->
rx_itr_setting
=
0
;
}
if
(
ec
->
tx_coalesce_usecs
>
1
)
{
if
(
adapter
->
rx_itr_setting
==
1
)
/*
rx_itr_param
=
IXGBE_20K_ITR
;
* don't have to worry about max_int as above because
else
* tx vectors don't do hardware RSC (an rx function)
rx_itr_param
=
adapter
->
rx_itr_setting
;
*/
/* check the limits */
if
((
1000000
/
ec
->
tx_coalesce_usecs
>
IXGBE_MAX_INT_RATE
)
||
(
1000000
/
ec
->
tx_coalesce_usecs
<
IXGBE_MIN_INT_RATE
))
return
-
EINVAL
;
/* store the value in ints/second */
if
(
ec
->
tx_coalesce_usecs
>
1
)
adapter
->
tx_eitr_param
=
1000000
/
ec
->
tx_coalesce_usecs
;
adapter
->
tx_itr_setting
=
ec
->
tx_coalesce_usecs
<<
2
;
else
adapter
->
tx_itr_setting
=
ec
->
tx_coalesce_usecs
;
/* static value of interrupt rate */
if
(
adapter
->
tx_itr_setting
==
1
)
adapter
->
tx_itr_setting
=
adapter
->
tx_eitr_param
;
tx_itr_param
=
IXGBE_10K_ITR
;
else
tx_itr_param
=
adapter
->
tx_itr_setting
;
/* clear the lower bit as its used for dynamic state */
if
(
adapter
->
flags
&
IXGBE_FLAG_MSIX_ENABLED
)
adapter
->
tx_itr_setting
&=
~
1
;
num_vectors
=
adapter
->
num_msix_vectors
-
NON_Q_VECTORS
;
}
else
if
(
ec
->
tx_coalesce_usecs
==
1
)
{
else
/* 1 means dynamic mode */
num_vectors
=
1
;
adapter
->
tx_eitr_param
=
10000
;
adapter
->
tx_itr_setting
=
1
;
}
else
{
adapter
->
tx_eitr_param
=
IXGBE_MAX_INT_RATE
;
adapter
->
tx_itr_setting
=
0
;
}
/* MSI/MSIx Interrupt Mode */
if
(
adapter
->
flags
&
(
IXGBE_FLAG_MSIX_ENABLED
|
IXGBE_FLAG_MSI_ENABLED
))
{
int
num_vectors
=
adapter
->
num_msix_vectors
-
NON_Q_VECTORS
;
for
(
i
=
0
;
i
<
num_vectors
;
i
++
)
{
for
(
i
=
0
;
i
<
num_vectors
;
i
++
)
{
q_vector
=
adapter
->
q_vector
[
i
];
q_vector
=
adapter
->
q_vector
[
i
];
q_vector
->
tx
.
work_limit
=
adapter
->
tx_work_limit
;
if
(
q_vector
->
tx
.
count
&&
!
q_vector
->
rx
.
count
)
if
(
q_vector
->
tx
.
count
&&
!
q_vector
->
rx
.
count
)
/* tx only */
/* tx only */
q_vector
->
eitr
=
adapter
->
tx_e
itr_param
;
q_vector
->
itr
=
tx_
itr_param
;
else
else
/* rx only or mixed */
/* rx only or mixed */
q_vector
->
eitr
=
adapter
->
rx_eitr_param
;
q_vector
->
itr
=
rx_itr_param
;
q_vector
->
tx
.
work_limit
=
adapter
->
tx_work_limit
;
ixgbe_write_eitr
(
q_vector
);
}
/* Legacy Interrupt Mode */
}
else
{
q_vector
=
adapter
->
q_vector
[
0
];
q_vector
->
eitr
=
adapter
->
rx_eitr_param
;
q_vector
->
tx
.
work_limit
=
adapter
->
tx_work_limit
;
ixgbe_write_eitr
(
q_vector
);
ixgbe_write_eitr
(
q_vector
);
}
}
...
...
drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c
View file @
3869f806
...
@@ -661,9 +661,7 @@ void ixgbe_configure_fcoe(struct ixgbe_adapter *adapter)
...
@@ -661,9 +661,7 @@ void ixgbe_configure_fcoe(struct ixgbe_adapter *adapter)
IXGBE_ETQS_QUEUE_EN
|
IXGBE_ETQS_QUEUE_EN
|
(
fcoe_q
<<
IXGBE_ETQS_RX_QUEUE_SHIFT
));
(
fcoe_q
<<
IXGBE_ETQS_RX_QUEUE_SHIFT
));
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRXCTRL
,
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRXCTRL
,
IXGBE_FCRXCTRL_FCCRCBO
|
IXGBE_FCRXCTRL_FCOELLI
|
IXGBE_FCRXCTRL_FCCRCBO
|
(
FC_FCOE_VER
<<
IXGBE_FCRXCTRL_FCOEVER_SHIFT
));
(
FC_FCOE_VER
<<
IXGBE_FCRXCTRL_FCOEVER_SHIFT
));
return
;
return
;
...
...
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
View file @
3869f806
This diff is collapsed.
Click to expand it.
drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
View file @
3869f806
...
@@ -404,6 +404,7 @@
...
@@ -404,6 +404,7 @@
#define IXGBE_WUPL_LENGTH_MASK 0xFFFF
#define IXGBE_WUPL_LENGTH_MASK 0xFFFF
/* DCB registers */
/* DCB registers */
#define MAX_TRAFFIC_CLASS 8
#define IXGBE_RMCS 0x03D00
#define IXGBE_RMCS 0x03D00
#define IXGBE_DPMCS 0x07F40
#define IXGBE_DPMCS 0x07F40
#define IXGBE_PDPMCS 0x0CD00
#define IXGBE_PDPMCS 0x0CD00
...
@@ -1279,6 +1280,7 @@ enum {
...
@@ -1279,6 +1280,7 @@ enum {
#define IXGBE_EICR_LSC 0x00100000
/* Link Status Change */
#define IXGBE_EICR_LSC 0x00100000
/* Link Status Change */
#define IXGBE_EICR_LINKSEC 0x00200000
/* PN Threshold */
#define IXGBE_EICR_LINKSEC 0x00200000
/* PN Threshold */
#define IXGBE_EICR_MNG 0x00400000
/* Manageability Event Interrupt */
#define IXGBE_EICR_MNG 0x00400000
/* Manageability Event Interrupt */
#define IXGBE_EICR_TS 0x00800000
/* Thermal Sensor Event */
#define IXGBE_EICR_GPI_SDP0 0x01000000
/* Gen Purpose Interrupt on SDP0 */
#define IXGBE_EICR_GPI_SDP0 0x01000000
/* Gen Purpose Interrupt on SDP0 */
#define IXGBE_EICR_GPI_SDP1 0x02000000
/* Gen Purpose Interrupt on SDP1 */
#define IXGBE_EICR_GPI_SDP1 0x02000000
/* Gen Purpose Interrupt on SDP1 */
#define IXGBE_EICR_GPI_SDP2 0x04000000
/* Gen Purpose Interrupt on SDP2 */
#define IXGBE_EICR_GPI_SDP2 0x04000000
/* Gen Purpose Interrupt on SDP2 */
...
@@ -1313,6 +1315,7 @@ enum {
...
@@ -1313,6 +1315,7 @@ enum {
#define IXGBE_EIMS_MAILBOX IXGBE_EICR_MAILBOX
/* VF to PF Mailbox Int */
#define IXGBE_EIMS_MAILBOX IXGBE_EICR_MAILBOX
/* VF to PF Mailbox Int */
#define IXGBE_EIMS_LSC IXGBE_EICR_LSC
/* Link Status Change */
#define IXGBE_EIMS_LSC IXGBE_EICR_LSC
/* Link Status Change */
#define IXGBE_EIMS_MNG IXGBE_EICR_MNG
/* MNG Event Interrupt */
#define IXGBE_EIMS_MNG IXGBE_EICR_MNG
/* MNG Event Interrupt */
#define IXGBE_EIMS_TS IXGBE_EICR_TS
/* Thermel Sensor Event */
#define IXGBE_EIMS_GPI_SDP0 IXGBE_EICR_GPI_SDP0
/* SDP0 Gen Purpose Int */
#define IXGBE_EIMS_GPI_SDP0 IXGBE_EICR_GPI_SDP0
/* SDP0 Gen Purpose Int */
#define IXGBE_EIMS_GPI_SDP1 IXGBE_EICR_GPI_SDP1
/* SDP1 Gen Purpose Int */
#define IXGBE_EIMS_GPI_SDP1 IXGBE_EICR_GPI_SDP1
/* SDP1 Gen Purpose Int */
#define IXGBE_EIMS_GPI_SDP2 IXGBE_EICR_GPI_SDP2
/* SDP2 Gen Purpose Int */
#define IXGBE_EIMS_GPI_SDP2 IXGBE_EICR_GPI_SDP2
/* SDP2 Gen Purpose Int */
...
@@ -2323,13 +2326,60 @@ typedef u32 ixgbe_physical_layer;
...
@@ -2323,13 +2326,60 @@ typedef u32 ixgbe_physical_layer;
#define IXGBE_PHYSICAL_LAYER_10GBASE_XAUI 0x1000
#define IXGBE_PHYSICAL_LAYER_10GBASE_XAUI 0x1000
#define IXGBE_PHYSICAL_LAYER_SFP_ACTIVE_DA 0x2000
#define IXGBE_PHYSICAL_LAYER_SFP_ACTIVE_DA 0x2000
/* Flow Control Macros */
/* Flow Control Data Sheet defined values
#define PAUSE_RTT 8
* Calculation and defines taken from 802.1bb Annex O
#define PAUSE_MTU(MTU) ((MTU + 1024 - 1) / 1024)
*/
/* BitTimes (BT) conversion */
#define IXGBE_BT2KB(BT) ((BT + 1023) / (8 * 1024))
#define IXGBE_B2BT(BT) (BT * 8)
/* Calculate Delay to respond to PFC */
#define IXGBE_PFC_D 672
/* Calculate Cable Delay */
#define IXGBE_CABLE_DC 5556
/* Delay Copper */
#define IXGBE_CABLE_DO 5000
/* Delay Optical */
/* Calculate Interface Delay X540 */
#define IXGBE_PHY_DC 25600
/* Delay 10G BASET */
#define IXGBE_MAC_DC 8192
/* Delay Copper XAUI interface */
#define IXGBE_XAUI_DC (2 * 2048)
/* Delay Copper Phy */
#define IXGBE_ID_X540 (IXGBE_MAC_DC + IXGBE_XAUI_DC + IXGBE_PHY_DC)
/* Calculate Interface Delay 82598, 82599 */
#define IXGBE_PHY_D 12800
#define IXGBE_MAC_D 4096
#define IXGBE_XAUI_D (2 * 1024)
#define IXGBE_ID (IXGBE_MAC_D + IXGBE_XAUI_D + IXGBE_PHY_D)
/* Calculate Delay incurred from higher layer */
#define IXGBE_HD 6144
/* Calculate PCI Bus delay for low thresholds */
#define IXGBE_PCI_DELAY 10000
/* Calculate X540 delay value in bit times */
#define IXGBE_FILL_RATE (36 / 25)
#define IXGBE_DV_X540(LINK, TC) (IXGBE_FILL_RATE * \
(IXGBE_B2BT(LINK) + IXGBE_PFC_D + \
(2 * IXGBE_CABLE_DC) + \
(2 * IXGBE_ID_X540) + \
IXGBE_HD + IXGBE_B2BT(TC)))
/* Calculate 82599, 82598 delay value in bit times */
#define IXGBE_DV(LINK, TC) (IXGBE_FILL_RATE * \
(IXGBE_B2BT(LINK) + IXGBE_PFC_D + \
(2 * IXGBE_CABLE_DC) + (2 * IXGBE_ID) + \
IXGBE_HD + IXGBE_B2BT(TC)))
#define FC_HIGH_WATER(MTU) ((((PAUSE_RTT + PAUSE_MTU(MTU)) * 144) + 99) / 100 +\
/* Calculate low threshold delay values */
PAUSE_MTU(MTU))
#define IXGBE_LOW_DV_X540(TC) (2 * IXGBE_B2BT(TC) + \
#define FC_LOW_WATER(MTU) (2 * (2 * PAUSE_MTU(MTU) + PAUSE_RTT))
(IXGBE_FILL_RATE * IXGBE_PCI_DELAY))
#define IXGBE_LOW_DV(TC) (2 * IXGBE_LOW_DV_X540(TC))
/* Software ATR hash keys */
/* Software ATR hash keys */
#define IXGBE_ATR_BUCKET_HASH_KEY 0x3DAD14E2
#define IXGBE_ATR_BUCKET_HASH_KEY 0x3DAD14E2
...
@@ -2548,7 +2598,7 @@ struct ixgbe_bus_info {
...
@@ -2548,7 +2598,7 @@ struct ixgbe_bus_info {
/* Flow control parameters */
/* Flow control parameters */
struct
ixgbe_fc_info
{
struct
ixgbe_fc_info
{
u32
high_water
;
/* Flow Control High-water */
u32
high_water
[
MAX_TRAFFIC_CLASS
]
;
/* Flow Control High-water */
u32
low_water
;
/* Flow Control Low-water */
u32
low_water
;
/* Flow Control Low-water */
u16
pause_time
;
/* Flow Control Pause timer */
u16
pause_time
;
/* Flow Control Pause timer */
bool
send_xon
;
/* Flow control send XON */
bool
send_xon
;
/* Flow control send XON */
...
...
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
View file @
3869f806
...
@@ -293,12 +293,10 @@ static void ixgbevf_receive_skb(struct ixgbevf_q_vector *q_vector,
...
@@ -293,12 +293,10 @@ static void ixgbevf_receive_skb(struct ixgbevf_q_vector *q_vector,
{
{
struct
ixgbevf_adapter
*
adapter
=
q_vector
->
adapter
;
struct
ixgbevf_adapter
*
adapter
=
q_vector
->
adapter
;
bool
is_vlan
=
(
status
&
IXGBE_RXD_STAT_VP
);
bool
is_vlan
=
(
status
&
IXGBE_RXD_STAT_VP
);
if
(
is_vlan
)
{
u16
tag
=
le16_to_cpu
(
rx_desc
->
wb
.
upper
.
vlan
);
u16
tag
=
le16_to_cpu
(
rx_desc
->
wb
.
upper
.
vlan
);
if
(
is_vlan
&&
test_bit
(
tag
,
adapter
->
active_vlans
))
__vlan_hwaccel_put_tag
(
skb
,
tag
);
__vlan_hwaccel_put_tag
(
skb
,
tag
);
}
if
(
!
(
adapter
->
flags
&
IXGBE_FLAG_IN_NETPOLL
))
if
(
!
(
adapter
->
flags
&
IXGBE_FLAG_IN_NETPOLL
))
napi_gro_receive
(
&
q_vector
->
napi
,
skb
);
napi_gro_receive
(
&
q_vector
->
napi
,
skb
);
...
...
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