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
58bb4bd0
Commit
58bb4bd0
authored
Feb 11, 2011
by
David S. Miller
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/jkirsher/net-next-2.6
parents
dd68153d
1b1c0a48
Changes
19
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
605 additions
and
201 deletions
+605
-201
drivers/net/e1000e/ethtool.c
drivers/net/e1000e/ethtool.c
+10
-3
drivers/net/e1000e/netdev.c
drivers/net/e1000e/netdev.c
+6
-2
drivers/net/igb/e1000_82575.c
drivers/net/igb/e1000_82575.c
+8
-2
drivers/net/igb/e1000_mbx.c
drivers/net/igb/e1000_mbx.c
+18
-20
drivers/net/igb/igb_main.c
drivers/net/igb/igb_main.c
+7
-2
drivers/net/ixgbe/ixgbe.h
drivers/net/ixgbe/ixgbe.h
+4
-1
drivers/net/ixgbe/ixgbe_common.h
drivers/net/ixgbe/ixgbe_common.h
+2
-2
drivers/net/ixgbe/ixgbe_dcb.c
drivers/net/ixgbe/ixgbe_dcb.c
+175
-2
drivers/net/ixgbe/ixgbe_dcb.h
drivers/net/ixgbe/ixgbe_dcb.h
+9
-1
drivers/net/ixgbe/ixgbe_dcb_82598.c
drivers/net/ixgbe/ixgbe_dcb_82598.c
+48
-46
drivers/net/ixgbe/ixgbe_dcb_82598.h
drivers/net/ixgbe/ixgbe_dcb_82598.h
+21
-2
drivers/net/ixgbe/ixgbe_dcb_82599.c
drivers/net/ixgbe/ixgbe_dcb_82599.c
+65
-50
drivers/net/ixgbe/ixgbe_dcb_82599.h
drivers/net/ixgbe/ixgbe_dcb_82599.h
+21
-3
drivers/net/ixgbe/ixgbe_dcb_nl.c
drivers/net/ixgbe/ixgbe_dcb_nl.c
+161
-50
drivers/net/ixgbe/ixgbe_ethtool.c
drivers/net/ixgbe/ixgbe_ethtool.c
+32
-2
drivers/net/ixgbe/ixgbe_main.c
drivers/net/ixgbe/ixgbe_main.c
+9
-13
drivers/net/ixgbe/ixgbe_mbx.c
drivers/net/ixgbe/ixgbe_mbx.c
+2
-0
drivers/net/ixgbe/ixgbe_mbx.h
drivers/net/ixgbe/ixgbe_mbx.h
+2
-0
include/linux/dcbnl.h
include/linux/dcbnl.h
+5
-0
No files found.
drivers/net/e1000e/ethtool.c
View file @
58bb4bd0
...
@@ -1963,8 +1963,15 @@ static int e1000_set_coalesce(struct net_device *netdev,
...
@@ -1963,8 +1963,15 @@ static int e1000_set_coalesce(struct net_device *netdev,
static
int
e1000_nway_reset
(
struct
net_device
*
netdev
)
static
int
e1000_nway_reset
(
struct
net_device
*
netdev
)
{
{
struct
e1000_adapter
*
adapter
=
netdev_priv
(
netdev
);
struct
e1000_adapter
*
adapter
=
netdev_priv
(
netdev
);
if
(
netif_running
(
netdev
))
e1000e_reinit_locked
(
adapter
);
if
(
!
netif_running
(
netdev
))
return
-
EAGAIN
;
if
(
!
adapter
->
hw
.
mac
.
autoneg
)
return
-
EINVAL
;
e1000e_reinit_locked
(
adapter
);
return
0
;
return
0
;
}
}
...
@@ -2006,7 +2013,7 @@ static void e1000_get_strings(struct net_device *netdev, u32 stringset,
...
@@ -2006,7 +2013,7 @@ static void e1000_get_strings(struct net_device *netdev, u32 stringset,
switch
(
stringset
)
{
switch
(
stringset
)
{
case
ETH_SS_TEST
:
case
ETH_SS_TEST
:
memcpy
(
data
,
*
e1000_gstrings_test
,
sizeof
(
e1000_gstrings_test
));
memcpy
(
data
,
e1000_gstrings_test
,
sizeof
(
e1000_gstrings_test
));
break
;
break
;
case
ETH_SS_STATS
:
case
ETH_SS_STATS
:
for
(
i
=
0
;
i
<
E1000_GLOBAL_STATS_LEN
;
i
++
)
{
for
(
i
=
0
;
i
<
E1000_GLOBAL_STATS_LEN
;
i
++
)
{
...
...
drivers/net/e1000e/netdev.c
View file @
58bb4bd0
...
@@ -1843,7 +1843,9 @@ static int e1000_request_msix(struct e1000_adapter *adapter)
...
@@ -1843,7 +1843,9 @@ static int e1000_request_msix(struct e1000_adapter *adapter)
int
err
=
0
,
vector
=
0
;
int
err
=
0
,
vector
=
0
;
if
(
strlen
(
netdev
->
name
)
<
(
IFNAMSIZ
-
5
))
if
(
strlen
(
netdev
->
name
)
<
(
IFNAMSIZ
-
5
))
sprintf
(
adapter
->
rx_ring
->
name
,
"%s-rx-0"
,
netdev
->
name
);
snprintf
(
adapter
->
rx_ring
->
name
,
sizeof
(
adapter
->
rx_ring
->
name
)
-
1
,
"%s-rx-0"
,
netdev
->
name
);
else
else
memcpy
(
adapter
->
rx_ring
->
name
,
netdev
->
name
,
IFNAMSIZ
);
memcpy
(
adapter
->
rx_ring
->
name
,
netdev
->
name
,
IFNAMSIZ
);
err
=
request_irq
(
adapter
->
msix_entries
[
vector
].
vector
,
err
=
request_irq
(
adapter
->
msix_entries
[
vector
].
vector
,
...
@@ -1856,7 +1858,9 @@ static int e1000_request_msix(struct e1000_adapter *adapter)
...
@@ -1856,7 +1858,9 @@ static int e1000_request_msix(struct e1000_adapter *adapter)
vector
++
;
vector
++
;
if
(
strlen
(
netdev
->
name
)
<
(
IFNAMSIZ
-
5
))
if
(
strlen
(
netdev
->
name
)
<
(
IFNAMSIZ
-
5
))
sprintf
(
adapter
->
tx_ring
->
name
,
"%s-tx-0"
,
netdev
->
name
);
snprintf
(
adapter
->
tx_ring
->
name
,
sizeof
(
adapter
->
tx_ring
->
name
)
-
1
,
"%s-tx-0"
,
netdev
->
name
);
else
else
memcpy
(
adapter
->
tx_ring
->
name
,
netdev
->
name
,
IFNAMSIZ
);
memcpy
(
adapter
->
tx_ring
->
name
,
netdev
->
name
,
IFNAMSIZ
);
err
=
request_irq
(
adapter
->
msix_entries
[
vector
].
vector
,
err
=
request_irq
(
adapter
->
msix_entries
[
vector
].
vector
,
...
...
drivers/net/igb/e1000_82575.c
View file @
58bb4bd0
...
@@ -238,9 +238,15 @@ static s32 igb_get_invariants_82575(struct e1000_hw *hw)
...
@@ -238,9 +238,15 @@ static s32 igb_get_invariants_82575(struct e1000_hw *hw)
size
=
14
;
size
=
14
;
nvm
->
word_size
=
1
<<
size
;
nvm
->
word_size
=
1
<<
size
;
/* if 82576 then initialize mailbox parameters */
/* if part supports SR-IOV then initialize mailbox parameters */
if
(
mac
->
type
==
e1000_82576
)
switch
(
mac
->
type
)
{
case
e1000_82576
:
case
e1000_i350
:
igb_init_mbx_params_pf
(
hw
);
igb_init_mbx_params_pf
(
hw
);
break
;
default:
break
;
}
/* setup PHY parameters */
/* setup PHY parameters */
if
(
phy
->
media_type
!=
e1000_media_type_copper
)
{
if
(
phy
->
media_type
!=
e1000_media_type_copper
)
{
...
...
drivers/net/igb/e1000_mbx.c
View file @
58bb4bd0
...
@@ -422,26 +422,24 @@ s32 igb_init_mbx_params_pf(struct e1000_hw *hw)
...
@@ -422,26 +422,24 @@ s32 igb_init_mbx_params_pf(struct e1000_hw *hw)
{
{
struct
e1000_mbx_info
*
mbx
=
&
hw
->
mbx
;
struct
e1000_mbx_info
*
mbx
=
&
hw
->
mbx
;
if
(
hw
->
mac
.
type
==
e1000_82576
)
{
mbx
->
timeout
=
0
;
mbx
->
timeout
=
0
;
mbx
->
usec_delay
=
0
;
mbx
->
usec_delay
=
0
;
mbx
->
size
=
E1000_VFMAILBOX_SIZE
;
mbx
->
size
=
E1000_VFMAILBOX_SIZE
;
mbx
->
ops
.
read
=
igb_read_mbx_pf
;
mbx
->
ops
.
read
=
igb_read_mbx_pf
;
mbx
->
ops
.
write
=
igb_write_mbx_pf
;
mbx
->
ops
.
write
=
igb_write_mbx_pf
;
mbx
->
ops
.
read_posted
=
igb_read_posted_mbx
;
mbx
->
ops
.
read_posted
=
igb_read_posted_mbx
;
mbx
->
ops
.
write_posted
=
igb_write_posted_mbx
;
mbx
->
ops
.
write_posted
=
igb_write_posted_mbx
;
mbx
->
ops
.
check_for_msg
=
igb_check_for_msg_pf
;
mbx
->
ops
.
check_for_msg
=
igb_check_for_msg_pf
;
mbx
->
ops
.
check_for_ack
=
igb_check_for_ack_pf
;
mbx
->
ops
.
check_for_ack
=
igb_check_for_ack_pf
;
mbx
->
ops
.
check_for_rst
=
igb_check_for_rst_pf
;
mbx
->
ops
.
check_for_rst
=
igb_check_for_rst_pf
;
mbx
->
stats
.
msgs_tx
=
0
;
mbx
->
stats
.
msgs_tx
=
0
;
mbx
->
stats
.
msgs_rx
=
0
;
mbx
->
stats
.
msgs_rx
=
0
;
mbx
->
stats
.
reqs
=
0
;
mbx
->
stats
.
reqs
=
0
;
mbx
->
stats
.
acks
=
0
;
mbx
->
stats
.
acks
=
0
;
mbx
->
stats
.
rsts
=
0
;
mbx
->
stats
.
rsts
=
0
;
}
return
0
;
return
0
;
}
}
...
...
drivers/net/igb/igb_main.c
View file @
58bb4bd0
...
@@ -2287,9 +2287,14 @@ static int __devinit igb_sw_init(struct igb_adapter *adapter)
...
@@ -2287,9 +2287,14 @@ static int __devinit igb_sw_init(struct igb_adapter *adapter)
spin_lock_init
(
&
adapter
->
stats64_lock
);
spin_lock_init
(
&
adapter
->
stats64_lock
);
#ifdef CONFIG_PCI_IOV
#ifdef CONFIG_PCI_IOV
if
(
hw
->
mac
.
type
==
e1000_82576
)
switch
(
hw
->
mac
.
type
)
{
case
e1000_82576
:
case
e1000_i350
:
adapter
->
vfs_allocated_count
=
(
max_vfs
>
7
)
?
7
:
max_vfs
;
adapter
->
vfs_allocated_count
=
(
max_vfs
>
7
)
?
7
:
max_vfs
;
break
;
default:
break
;
}
#endif
/* CONFIG_PCI_IOV */
#endif
/* CONFIG_PCI_IOV */
adapter
->
rss_queues
=
min_t
(
u32
,
IGB_MAX_RX_QUEUES
,
num_online_cpus
());
adapter
->
rss_queues
=
min_t
(
u32
,
IGB_MAX_RX_QUEUES
,
num_online_cpus
());
...
...
drivers/net/ixgbe/ixgbe.h
View file @
58bb4bd0
...
@@ -334,6 +334,10 @@ struct ixgbe_adapter {
...
@@ -334,6 +334,10 @@ struct ixgbe_adapter {
u16
bd_number
;
u16
bd_number
;
struct
work_struct
reset_task
;
struct
work_struct
reset_task
;
struct
ixgbe_q_vector
*
q_vector
[
MAX_MSIX_Q_VECTORS
];
struct
ixgbe_q_vector
*
q_vector
[
MAX_MSIX_Q_VECTORS
];
/* DCB parameters */
struct
ieee_pfc
*
ixgbe_ieee_pfc
;
struct
ieee_ets
*
ixgbe_ieee_ets
;
struct
ixgbe_dcb_config
dcb_cfg
;
struct
ixgbe_dcb_config
dcb_cfg
;
struct
ixgbe_dcb_config
temp_dcb_cfg
;
struct
ixgbe_dcb_config
temp_dcb_cfg
;
u8
dcb_set_bitmap
;
u8
dcb_set_bitmap
;
...
@@ -521,7 +525,6 @@ extern void ixgbe_unmap_and_free_tx_resource(struct ixgbe_ring *,
...
@@ -521,7 +525,6 @@ extern void ixgbe_unmap_and_free_tx_resource(struct ixgbe_ring *,
extern
void
ixgbe_alloc_rx_buffers
(
struct
ixgbe_ring
*
,
u16
);
extern
void
ixgbe_alloc_rx_buffers
(
struct
ixgbe_ring
*
,
u16
);
extern
void
ixgbe_write_eitr
(
struct
ixgbe_q_vector
*
);
extern
void
ixgbe_write_eitr
(
struct
ixgbe_q_vector
*
);
extern
int
ethtool_ioctl
(
struct
ifreq
*
ifr
);
extern
int
ethtool_ioctl
(
struct
ifreq
*
ifr
);
extern
u8
ixgbe_dcb_txq_to_tc
(
struct
ixgbe_adapter
*
adapter
,
u8
index
);
extern
s32
ixgbe_reinit_fdir_tables_82599
(
struct
ixgbe_hw
*
hw
);
extern
s32
ixgbe_reinit_fdir_tables_82599
(
struct
ixgbe_hw
*
hw
);
extern
s32
ixgbe_init_fdir_signature_82599
(
struct
ixgbe_hw
*
hw
,
u32
pballoc
);
extern
s32
ixgbe_init_fdir_signature_82599
(
struct
ixgbe_hw
*
hw
,
u32
pballoc
);
extern
s32
ixgbe_init_fdir_perfect_82599
(
struct
ixgbe_hw
*
hw
,
u32
pballoc
);
extern
s32
ixgbe_init_fdir_perfect_82599
(
struct
ixgbe_hw
*
hw
,
u32
pballoc
);
...
...
drivers/net/ixgbe/ixgbe_common.h
View file @
58bb4bd0
...
@@ -29,6 +29,7 @@
...
@@ -29,6 +29,7 @@
#define _IXGBE_COMMON_H_
#define _IXGBE_COMMON_H_
#include "ixgbe_type.h"
#include "ixgbe_type.h"
#include "ixgbe.h"
u32
ixgbe_get_pcie_msix_count_generic
(
struct
ixgbe_hw
*
hw
);
u32
ixgbe_get_pcie_msix_count_generic
(
struct
ixgbe_hw
*
hw
);
s32
ixgbe_init_ops_generic
(
struct
ixgbe_hw
*
hw
);
s32
ixgbe_init_ops_generic
(
struct
ixgbe_hw
*
hw
);
...
@@ -110,9 +111,8 @@ void ixgbe_set_vlan_anti_spoofing(struct ixgbe_hw *hw, bool enable, int vf);
...
@@ -110,9 +111,8 @@ void ixgbe_set_vlan_anti_spoofing(struct ixgbe_hw *hw, bool enable, int vf);
#define IXGBE_WRITE_FLUSH(a) IXGBE_READ_REG(a, IXGBE_STATUS)
#define IXGBE_WRITE_FLUSH(a) IXGBE_READ_REG(a, IXGBE_STATUS)
extern
struct
net_device
*
ixgbe_get_hw_dev
(
struct
ixgbe_hw
*
hw
);
#define hw_dbg(hw, format, arg...) \
#define hw_dbg(hw, format, arg...) \
netdev_dbg(
ixgbe_get_hw_dev(hw)
, format, ##arg)
netdev_dbg(
((struct ixgbe_adapter *)(hw->back))->netdev
, format, ##arg)
#define e_dev_info(format, arg...) \
#define e_dev_info(format, arg...) \
dev_info(&adapter->pdev->dev, format, ## arg)
dev_info(&adapter->pdev->dev, format, ## arg)
#define e_dev_warn(format, arg...) \
#define e_dev_warn(format, arg...) \
...
...
drivers/net/ixgbe/ixgbe_dcb.c
View file @
58bb4bd0
...
@@ -33,6 +33,42 @@
...
@@ -33,6 +33,42 @@
#include "ixgbe_dcb_82598.h"
#include "ixgbe_dcb_82598.h"
#include "ixgbe_dcb_82599.h"
#include "ixgbe_dcb_82599.h"
/**
* ixgbe_ieee_credits - This calculates the ieee traffic class
* credits from the configured bandwidth percentages. Credits
* are the smallest unit programable into the underlying
* hardware. The IEEE 802.1Qaz specification do not use bandwidth
* groups so this is much simplified from the CEE case.
*/
s32
ixgbe_ieee_credits
(
__u8
*
bw
,
__u16
*
refill
,
__u16
*
max
,
int
max_frame
)
{
int
min_percent
=
100
;
int
min_credit
,
multiplier
;
int
i
;
min_credit
=
((
max_frame
/
2
)
+
DCB_CREDIT_QUANTUM
-
1
)
/
DCB_CREDIT_QUANTUM
;
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
if
(
bw
[
i
]
<
min_percent
&&
bw
[
i
])
min_percent
=
bw
[
i
];
}
multiplier
=
(
min_credit
/
min_percent
)
+
1
;
/* Find out the hw credits for each TC */
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
int
val
=
min
(
bw
[
i
]
*
multiplier
,
MAX_CREDIT_REFILL
);
if
(
val
<
min_credit
)
val
=
min_credit
;
refill
[
i
]
=
val
;
max
[
i
]
=
(
bw
[
i
]
*
MAX_CREDIT
)
/
100
;
}
return
0
;
}
/**
/**
* ixgbe_dcb_calculate_tc_credits - Calculates traffic class credits
* ixgbe_dcb_calculate_tc_credits - Calculates traffic class credits
* @ixgbe_dcb_config: Struct containing DCB settings.
* @ixgbe_dcb_config: Struct containing DCB settings.
...
@@ -141,6 +177,59 @@ s32 ixgbe_dcb_calculate_tc_credits(struct ixgbe_hw *hw,
...
@@ -141,6 +177,59 @@ s32 ixgbe_dcb_calculate_tc_credits(struct ixgbe_hw *hw,
return
ret_val
;
return
ret_val
;
}
}
void
ixgbe_dcb_unpack_pfc
(
struct
ixgbe_dcb_config
*
cfg
,
u8
*
pfc_en
)
{
int
i
;
*
pfc_en
=
0
;
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
*
pfc_en
|=
(
cfg
->
tc_config
[
i
].
dcb_pfc
&
0xF
)
<<
i
;
}
void
ixgbe_dcb_unpack_refill
(
struct
ixgbe_dcb_config
*
cfg
,
int
direction
,
u16
*
refill
)
{
struct
tc_bw_alloc
*
p
;
int
i
;
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
p
=
&
cfg
->
tc_config
[
i
].
path
[
direction
];
refill
[
i
]
=
p
->
data_credits_refill
;
}
}
void
ixgbe_dcb_unpack_max
(
struct
ixgbe_dcb_config
*
cfg
,
u16
*
max
)
{
int
i
;
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
max
[
i
]
=
cfg
->
tc_config
[
i
].
desc_credits_max
;
}
void
ixgbe_dcb_unpack_bwgid
(
struct
ixgbe_dcb_config
*
cfg
,
int
direction
,
u8
*
bwgid
)
{
struct
tc_bw_alloc
*
p
;
int
i
;
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
p
=
&
cfg
->
tc_config
[
i
].
path
[
direction
];
bwgid
[
i
]
=
p
->
bwg_id
;
}
}
void
ixgbe_dcb_unpack_prio
(
struct
ixgbe_dcb_config
*
cfg
,
int
direction
,
u8
*
ptype
)
{
struct
tc_bw_alloc
*
p
;
int
i
;
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
p
=
&
cfg
->
tc_config
[
i
].
path
[
direction
];
ptype
[
i
]
=
p
->
prio_type
;
}
}
/**
/**
* ixgbe_dcb_hw_config - Config and enable DCB
* ixgbe_dcb_hw_config - Config and enable DCB
* @hw: pointer to hardware structure
* @hw: pointer to hardware structure
...
@@ -152,13 +241,30 @@ s32 ixgbe_dcb_hw_config(struct ixgbe_hw *hw,
...
@@ -152,13 +241,30 @@ s32 ixgbe_dcb_hw_config(struct ixgbe_hw *hw,
struct
ixgbe_dcb_config
*
dcb_config
)
struct
ixgbe_dcb_config
*
dcb_config
)
{
{
s32
ret
=
0
;
s32
ret
=
0
;
u8
pfc_en
;
u8
ptype
[
MAX_TRAFFIC_CLASS
];
u8
bwgid
[
MAX_TRAFFIC_CLASS
];
u16
refill
[
MAX_TRAFFIC_CLASS
];
u16
max
[
MAX_TRAFFIC_CLASS
];
/* Unpack CEE standard containers */
ixgbe_dcb_unpack_pfc
(
dcb_config
,
&
pfc_en
);
ixgbe_dcb_unpack_refill
(
dcb_config
,
DCB_TX_CONFIG
,
refill
);
ixgbe_dcb_unpack_max
(
dcb_config
,
max
);
ixgbe_dcb_unpack_bwgid
(
dcb_config
,
DCB_TX_CONFIG
,
bwgid
);
ixgbe_dcb_unpack_prio
(
dcb_config
,
DCB_TX_CONFIG
,
ptype
);
switch
(
hw
->
mac
.
type
)
{
switch
(
hw
->
mac
.
type
)
{
case
ixgbe_mac_82598EB
:
case
ixgbe_mac_82598EB
:
ret
=
ixgbe_dcb_hw_config_82598
(
hw
,
dcb_config
);
ret
=
ixgbe_dcb_hw_config_82598
(
hw
,
dcb_config
->
rx_pba_cfg
,
pfc_en
,
refill
,
max
,
bwgid
,
ptype
);
break
;
break
;
case
ixgbe_mac_82599EB
:
case
ixgbe_mac_82599EB
:
case
ixgbe_mac_X540
:
case
ixgbe_mac_X540
:
ret
=
ixgbe_dcb_hw_config_82599
(
hw
,
dcb_config
);
ret
=
ixgbe_dcb_hw_config_82599
(
hw
,
dcb_config
->
rx_pba_cfg
,
pfc_en
,
refill
,
max
,
bwgid
,
ptype
);
break
;
break
;
default:
default:
break
;
break
;
...
@@ -166,3 +272,70 @@ s32 ixgbe_dcb_hw_config(struct ixgbe_hw *hw,
...
@@ -166,3 +272,70 @@ s32 ixgbe_dcb_hw_config(struct ixgbe_hw *hw,
return
ret
;
return
ret
;
}
}
/* Helper routines to abstract HW specifics from DCB netlink ops */
s32
ixgbe_dcb_hw_pfc_config
(
struct
ixgbe_hw
*
hw
,
u8
pfc_en
)
{
int
ret
=
-
EINVAL
;
switch
(
hw
->
mac
.
type
)
{
case
ixgbe_mac_82598EB
:
ret
=
ixgbe_dcb_config_pfc_82598
(
hw
,
pfc_en
);
break
;
case
ixgbe_mac_82599EB
:
case
ixgbe_mac_X540
:
ret
=
ixgbe_dcb_config_pfc_82599
(
hw
,
pfc_en
);
break
;
default:
break
;
}
return
ret
;
}
s32
ixgbe_dcb_hw_ets_config
(
struct
ixgbe_hw
*
hw
,
u16
*
refill
,
u16
*
max
,
u8
*
bwg_id
,
u8
*
tsa
)
{
int
i
;
u8
prio_type
[
IEEE_8021QAZ_MAX_TCS
];
/* Map TSA onto CEE prio type */
for
(
i
=
0
;
i
<
IEEE_8021QAZ_MAX_TCS
;
i
++
)
{
switch
(
tsa
[
i
])
{
case
IEEE_8021QAZ_TSA_STRICT
:
prio_type
[
i
]
=
2
;
break
;
case
IEEE_8021QAZ_TSA_ETS
:
prio_type
[
i
]
=
0
;
break
;
default:
/* Hardware only supports priority strict or
* ETS transmission selection algorithms if
* we receive some other value from dcbnl
* throw an error
*/
return
-
EINVAL
;
}
}
switch
(
hw
->
mac
.
type
)
{
case
ixgbe_mac_82598EB
:
ixgbe_dcb_config_rx_arbiter_82598
(
hw
,
refill
,
max
,
prio_type
);
ixgbe_dcb_config_tx_desc_arbiter_82598
(
hw
,
refill
,
max
,
bwg_id
,
prio_type
);
ixgbe_dcb_config_tx_data_arbiter_82598
(
hw
,
refill
,
max
,
bwg_id
,
prio_type
);
break
;
case
ixgbe_mac_82599EB
:
case
ixgbe_mac_X540
:
ixgbe_dcb_config_rx_arbiter_82599
(
hw
,
refill
,
max
,
bwg_id
,
prio_type
);
ixgbe_dcb_config_tx_desc_arbiter_82599
(
hw
,
refill
,
max
,
bwg_id
,
prio_type
);
ixgbe_dcb_config_tx_data_arbiter_82599
(
hw
,
refill
,
max
,
bwg_id
,
prio_type
);
break
;
default:
break
;
}
return
0
;
}
drivers/net/ixgbe/ixgbe_dcb.h
View file @
58bb4bd0
...
@@ -139,7 +139,6 @@ struct ixgbe_dcb_config {
...
@@ -139,7 +139,6 @@ struct ixgbe_dcb_config {
struct
tc_configuration
tc_config
[
MAX_TRAFFIC_CLASS
];
struct
tc_configuration
tc_config
[
MAX_TRAFFIC_CLASS
];
u8
bw_percentage
[
2
][
MAX_BW_GROUP
];
/* One each for Tx/Rx */
u8
bw_percentage
[
2
][
MAX_BW_GROUP
];
/* One each for Tx/Rx */
bool
pfc_mode_enable
;
bool
pfc_mode_enable
;
bool
round_robin_enable
;
enum
dcb_rx_pba_cfg
rx_pba_cfg
;
enum
dcb_rx_pba_cfg
rx_pba_cfg
;
...
@@ -148,12 +147,21 @@ struct ixgbe_dcb_config {
...
@@ -148,12 +147,21 @@ struct ixgbe_dcb_config {
};
};
/* DCB driver APIs */
/* DCB driver APIs */
void
ixgbe_dcb_unpack_pfc
(
struct
ixgbe_dcb_config
*
cfg
,
u8
*
pfc_en
);
void
ixgbe_dcb_unpack_refill
(
struct
ixgbe_dcb_config
*
,
int
,
u16
*
);
void
ixgbe_dcb_unpack_max
(
struct
ixgbe_dcb_config
*
,
u16
*
);
void
ixgbe_dcb_unpack_bwgid
(
struct
ixgbe_dcb_config
*
,
int
,
u8
*
);
void
ixgbe_dcb_unpack_prio
(
struct
ixgbe_dcb_config
*
,
int
,
u8
*
);
/* DCB credits calculation */
/* DCB credits calculation */
s32
ixgbe_ieee_credits
(
__u8
*
bw
,
__u16
*
refill
,
__u16
*
max
,
int
max_frame
);
s32
ixgbe_dcb_calculate_tc_credits
(
struct
ixgbe_hw
*
,
s32
ixgbe_dcb_calculate_tc_credits
(
struct
ixgbe_hw
*
,
struct
ixgbe_dcb_config
*
,
int
,
u8
);
struct
ixgbe_dcb_config
*
,
int
,
u8
);
/* DCB hw initialization */
/* DCB hw initialization */
s32
ixgbe_dcb_hw_ets_config
(
struct
ixgbe_hw
*
hw
,
u16
*
refill
,
u16
*
max
,
u8
*
bwg_id
,
u8
*
prio_type
);
s32
ixgbe_dcb_hw_pfc_config
(
struct
ixgbe_hw
*
hw
,
u8
pfc_en
);
s32
ixgbe_dcb_hw_config
(
struct
ixgbe_hw
*
,
struct
ixgbe_dcb_config
*
);
s32
ixgbe_dcb_hw_config
(
struct
ixgbe_hw
*
,
struct
ixgbe_dcb_config
*
);
/* DCB definitions for credit calculation */
/* DCB definitions for credit calculation */
...
...
drivers/net/ixgbe/ixgbe_dcb_82598.c
View file @
58bb4bd0
...
@@ -38,15 +38,14 @@
...
@@ -38,15 +38,14 @@
*
*
* Configure packet buffers for DCB mode.
* Configure packet buffers for DCB mode.
*/
*/
static
s32
ixgbe_dcb_config_packet_buffers_82598
(
struct
ixgbe_hw
*
hw
,
static
s32
ixgbe_dcb_config_packet_buffers_82598
(
struct
ixgbe_hw
*
hw
,
u8
rx_pba
)
struct
ixgbe_dcb_config
*
dcb_config
)
{
{
s32
ret_val
=
0
;
s32
ret_val
=
0
;
u32
value
=
IXGBE_RXPBSIZE_64KB
;
u32
value
=
IXGBE_RXPBSIZE_64KB
;
u8
i
=
0
;
u8
i
=
0
;
/* Setup Rx packet buffer sizes */
/* Setup Rx packet buffer sizes */
switch
(
dcb_config
->
rx_pba_cfg
)
{
switch
(
rx_pba
)
{
case
pba_80_48
:
case
pba_80_48
:
/* Setup the first four at 80KB */
/* Setup the first four at 80KB */
value
=
IXGBE_RXPBSIZE_80KB
;
value
=
IXGBE_RXPBSIZE_80KB
;
...
@@ -78,10 +77,11 @@ static s32 ixgbe_dcb_config_packet_buffers_82598(struct ixgbe_hw *hw,
...
@@ -78,10 +77,11 @@ static s32 ixgbe_dcb_config_packet_buffers_82598(struct ixgbe_hw *hw,
*
*
* Configure Rx Data Arbiter and credits for each traffic class.
* Configure Rx Data Arbiter and credits for each traffic class.
*/
*/
static
s32
ixgbe_dcb_config_rx_arbiter_82598
(
struct
ixgbe_hw
*
hw
,
s32
ixgbe_dcb_config_rx_arbiter_82598
(
struct
ixgbe_hw
*
hw
,
struct
ixgbe_dcb_config
*
dcb_config
)
u16
*
refill
,
u16
*
max
,
u8
*
prio_type
)
{
{
struct
tc_bw_alloc
*
p
;
u32
reg
=
0
;
u32
reg
=
0
;
u32
credit_refill
=
0
;
u32
credit_refill
=
0
;
u32
credit_max
=
0
;
u32
credit_max
=
0
;
...
@@ -102,13 +102,12 @@ static s32 ixgbe_dcb_config_rx_arbiter_82598(struct ixgbe_hw *hw,
...
@@ -102,13 +102,12 @@ static s32 ixgbe_dcb_config_rx_arbiter_82598(struct ixgbe_hw *hw,
/* Configure traffic class credits and priority */
/* Configure traffic class credits and priority */
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
p
=
&
dcb_config
->
tc_config
[
i
].
path
[
DCB_RX_CONFIG
];
credit_refill
=
refill
[
i
];
credit_refill
=
p
->
data_credits_refill
;
credit_max
=
max
[
i
];
credit_max
=
p
->
data_credits_max
;
reg
=
credit_refill
|
(
credit_max
<<
IXGBE_RT2CR_MCL_SHIFT
);
reg
=
credit_refill
|
(
credit_max
<<
IXGBE_RT2CR_MCL_SHIFT
);
if
(
p
->
prio_type
==
prio_link
)
if
(
p
rio_type
[
i
]
==
prio_link
)
reg
|=
IXGBE_RT2CR_LSP
;
reg
|=
IXGBE_RT2CR_LSP
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_RT2CR
(
i
),
reg
);
IXGBE_WRITE_REG
(
hw
,
IXGBE_RT2CR
(
i
),
reg
);
...
@@ -135,10 +134,12 @@ static s32 ixgbe_dcb_config_rx_arbiter_82598(struct ixgbe_hw *hw,
...
@@ -135,10 +134,12 @@ static s32 ixgbe_dcb_config_rx_arbiter_82598(struct ixgbe_hw *hw,
*
*
* Configure Tx Descriptor Arbiter and credits for each traffic class.
* Configure Tx Descriptor Arbiter and credits for each traffic class.
*/
*/
static
s32
ixgbe_dcb_config_tx_desc_arbiter_82598
(
struct
ixgbe_hw
*
hw
,
s32
ixgbe_dcb_config_tx_desc_arbiter_82598
(
struct
ixgbe_hw
*
hw
,
struct
ixgbe_dcb_config
*
dcb_config
)
u16
*
refill
,
u16
*
max
,
u8
*
bwg_id
,
u8
*
prio_type
)
{
{
struct
tc_bw_alloc
*
p
;
u32
reg
,
max_credits
;
u32
reg
,
max_credits
;
u8
i
;
u8
i
;
...
@@ -146,10 +147,8 @@ static s32 ixgbe_dcb_config_tx_desc_arbiter_82598(struct ixgbe_hw *hw,
...
@@ -146,10 +147,8 @@ static s32 ixgbe_dcb_config_tx_desc_arbiter_82598(struct ixgbe_hw *hw,
/* Enable arbiter */
/* Enable arbiter */
reg
&=
~
IXGBE_DPMCS_ARBDIS
;
reg
&=
~
IXGBE_DPMCS_ARBDIS
;
if
(
!
(
dcb_config
->
round_robin_enable
))
{
/* Enable DFP and Recycle mode */
/* Enable DFP and Recycle mode */
reg
|=
(
IXGBE_DPMCS_TDPAC
|
IXGBE_DPMCS_TRM
);
reg
|=
(
IXGBE_DPMCS_TDPAC
|
IXGBE_DPMCS_TRM
);
}
reg
|=
IXGBE_DPMCS_TSOEF
;
reg
|=
IXGBE_DPMCS_TSOEF
;
/* Configure Max TSO packet size 34KB including payload and headers */
/* Configure Max TSO packet size 34KB including payload and headers */
reg
|=
(
0x4
<<
IXGBE_DPMCS_MTSOS_SHIFT
);
reg
|=
(
0x4
<<
IXGBE_DPMCS_MTSOS_SHIFT
);
...
@@ -158,16 +157,15 @@ static s32 ixgbe_dcb_config_tx_desc_arbiter_82598(struct ixgbe_hw *hw,
...
@@ -158,16 +157,15 @@ static s32 ixgbe_dcb_config_tx_desc_arbiter_82598(struct ixgbe_hw *hw,
/* Configure traffic class credits and priority */
/* Configure traffic class credits and priority */
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
p
=
&
dcb_config
->
tc_config
[
i
].
path
[
DCB_TX_CONFIG
];
max_credits
=
max
[
i
];
max_credits
=
dcb_config
->
tc_config
[
i
].
desc_credits_max
;
reg
=
max_credits
<<
IXGBE_TDTQ2TCCR_MCL_SHIFT
;
reg
=
max_credits
<<
IXGBE_TDTQ2TCCR_MCL_SHIFT
;
reg
|=
p
->
data_credits_refill
;
reg
|=
refill
[
i
]
;
reg
|=
(
u32
)(
p
->
bwg_id
)
<<
IXGBE_TDTQ2TCCR_BWG_SHIFT
;
reg
|=
(
u32
)(
bwg_id
[
i
]
)
<<
IXGBE_TDTQ2TCCR_BWG_SHIFT
;
if
(
p
->
prio_type
==
prio_group
)
if
(
p
rio_type
[
i
]
==
prio_group
)
reg
|=
IXGBE_TDTQ2TCCR_GSP
;
reg
|=
IXGBE_TDTQ2TCCR_GSP
;
if
(
p
->
prio_type
==
prio_link
)
if
(
p
rio_type
[
i
]
==
prio_link
)
reg
|=
IXGBE_TDTQ2TCCR_LSP
;
reg
|=
IXGBE_TDTQ2TCCR_LSP
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_TDTQ2TCCR
(
i
),
reg
);
IXGBE_WRITE_REG
(
hw
,
IXGBE_TDTQ2TCCR
(
i
),
reg
);
...
@@ -183,10 +181,12 @@ static s32 ixgbe_dcb_config_tx_desc_arbiter_82598(struct ixgbe_hw *hw,
...
@@ -183,10 +181,12 @@ static s32 ixgbe_dcb_config_tx_desc_arbiter_82598(struct ixgbe_hw *hw,
*
*
* Configure Tx Data Arbiter and credits for each traffic class.
* Configure Tx Data Arbiter and credits for each traffic class.
*/
*/
static
s32
ixgbe_dcb_config_tx_data_arbiter_82598
(
struct
ixgbe_hw
*
hw
,
s32
ixgbe_dcb_config_tx_data_arbiter_82598
(
struct
ixgbe_hw
*
hw
,
struct
ixgbe_dcb_config
*
dcb_config
)
u16
*
refill
,
u16
*
max
,
u8
*
bwg_id
,
u8
*
prio_type
)
{
{
struct
tc_bw_alloc
*
p
;
u32
reg
;
u32
reg
;
u8
i
;
u8
i
;
...
@@ -200,15 +200,14 @@ static s32 ixgbe_dcb_config_tx_data_arbiter_82598(struct ixgbe_hw *hw,
...
@@ -200,15 +200,14 @@ static s32 ixgbe_dcb_config_tx_data_arbiter_82598(struct ixgbe_hw *hw,
/* Configure traffic class credits and priority */
/* Configure traffic class credits and priority */
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
p
=
&
dcb_config
->
tc_config
[
i
].
path
[
DCB_TX_CONFIG
];
reg
=
refill
[
i
];
reg
=
p
->
data_credits_refill
;
reg
|=
(
u32
)(
max
[
i
])
<<
IXGBE_TDPT2TCCR_MCL_SHIFT
;
reg
|=
(
u32
)(
p
->
data_credits_max
)
<<
IXGBE_TDPT2TCCR_MCL_SHIFT
;
reg
|=
(
u32
)(
bwg_id
[
i
])
<<
IXGBE_TDPT2TCCR_BWG_SHIFT
;
reg
|=
(
u32
)(
p
->
bwg_id
)
<<
IXGBE_TDPT2TCCR_BWG_SHIFT
;
if
(
p
->
prio_type
==
prio_group
)
if
(
p
rio_type
[
i
]
==
prio_group
)
reg
|=
IXGBE_TDPT2TCCR_GSP
;
reg
|=
IXGBE_TDPT2TCCR_GSP
;
if
(
p
->
prio_type
==
prio_link
)
if
(
p
rio_type
[
i
]
==
prio_link
)
reg
|=
IXGBE_TDPT2TCCR_LSP
;
reg
|=
IXGBE_TDPT2TCCR_LSP
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_TDPT2TCCR
(
i
),
reg
);
IXGBE_WRITE_REG
(
hw
,
IXGBE_TDPT2TCCR
(
i
),
reg
);
...
@@ -229,13 +228,12 @@ static s32 ixgbe_dcb_config_tx_data_arbiter_82598(struct ixgbe_hw *hw,
...
@@ -229,13 +228,12 @@ static s32 ixgbe_dcb_config_tx_data_arbiter_82598(struct ixgbe_hw *hw,
*
*
* Configure Priority Flow Control for each traffic class.
* Configure Priority Flow Control for each traffic class.
*/
*/
s32
ixgbe_dcb_config_pfc_82598
(
struct
ixgbe_hw
*
hw
,
s32
ixgbe_dcb_config_pfc_82598
(
struct
ixgbe_hw
*
hw
,
u8
pfc_en
)
struct
ixgbe_dcb_config
*
dcb_config
)
{
{
u32
reg
,
rx_pba_size
;
u32
reg
,
rx_pba_size
;
u8
i
;
u8
i
;
if
(
!
dcb_config
->
pfc_mode_enable
)
if
(
!
pfc_en
)
goto
out
;
goto
out
;
/* Enable Transmit Priority Flow Control */
/* Enable Transmit Priority Flow Control */
...
@@ -256,19 +254,20 @@ s32 ixgbe_dcb_config_pfc_82598(struct ixgbe_hw *hw,
...
@@ -256,19 +254,20 @@ s32 ixgbe_dcb_config_pfc_82598(struct ixgbe_hw *hw,
* for each traffic class.
* for each traffic class.
*/
*/
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
int
enabled
=
pfc_en
&
(
1
<<
i
);
rx_pba_size
=
IXGBE_READ_REG
(
hw
,
IXGBE_RXPBSIZE
(
i
));
rx_pba_size
=
IXGBE_READ_REG
(
hw
,
IXGBE_RXPBSIZE
(
i
));
rx_pba_size
>>=
IXGBE_RXPBSIZE_SHIFT
;
rx_pba_size
>>=
IXGBE_RXPBSIZE_SHIFT
;
reg
=
(
rx_pba_size
-
hw
->
fc
.
low_water
)
<<
10
;
reg
=
(
rx_pba_size
-
hw
->
fc
.
low_water
)
<<
10
;
if
(
dcb_config
->
tc_config
[
i
].
dcb_pfc
==
pfc_enabled_tx
||
if
(
enabled
==
pfc_enabled_tx
||
dcb_config
->
tc_config
[
i
].
dcb_pfc
==
pfc_enabled_full
)
enabled
==
pfc_enabled_full
)
reg
|=
IXGBE_FCRTL_XONE
;
reg
|=
IXGBE_FCRTL_XONE
;
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
=
(
rx_pba_size
-
hw
->
fc
.
high_water
)
<<
10
;
if
(
dcb_config
->
tc_config
[
i
].
dcb_pfc
==
pfc_enabled_tx
||
if
(
enabled
==
pfc_enabled_tx
||
dcb_config
->
tc_config
[
i
].
dcb_pfc
==
pfc_enabled_full
)
enabled
==
pfc_enabled_full
)
reg
|=
IXGBE_FCRTH_FCEN
;
reg
|=
IXGBE_FCRTH_FCEN
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTH
(
i
),
reg
);
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTH
(
i
),
reg
);
...
@@ -292,7 +291,7 @@ s32 ixgbe_dcb_config_pfc_82598(struct ixgbe_hw *hw,
...
@@ -292,7 +291,7 @@ s32 ixgbe_dcb_config_pfc_82598(struct ixgbe_hw *hw,
* Configure queue statistics registers, all queues belonging to same traffic
* Configure queue statistics registers, all queues belonging to same traffic
* class uses a single set of queue statistics counters.
* class uses a single set of queue statistics counters.
*/
*/
s
tatic
s
32
ixgbe_dcb_config_tc_stats_82598
(
struct
ixgbe_hw
*
hw
)
s32
ixgbe_dcb_config_tc_stats_82598
(
struct
ixgbe_hw
*
hw
)
{
{
u32
reg
=
0
;
u32
reg
=
0
;
u8
i
=
0
;
u8
i
=
0
;
...
@@ -325,13 +324,16 @@ static s32 ixgbe_dcb_config_tc_stats_82598(struct ixgbe_hw *hw)
...
@@ -325,13 +324,16 @@ static s32 ixgbe_dcb_config_tc_stats_82598(struct ixgbe_hw *hw)
* Configure dcb settings and enable dcb mode.
* Configure dcb settings and enable dcb mode.
*/
*/
s32
ixgbe_dcb_hw_config_82598
(
struct
ixgbe_hw
*
hw
,
s32
ixgbe_dcb_hw_config_82598
(
struct
ixgbe_hw
*
hw
,
struct
ixgbe_dcb_config
*
dcb_config
)
u8
rx_pba
,
u8
pfc_en
,
u16
*
refill
,
u16
*
max
,
u8
*
bwg_id
,
u8
*
prio_type
)
{
{
ixgbe_dcb_config_packet_buffers_82598
(
hw
,
dcb_config
);
ixgbe_dcb_config_packet_buffers_82598
(
hw
,
rx_pba
);
ixgbe_dcb_config_rx_arbiter_82598
(
hw
,
dcb_config
);
ixgbe_dcb_config_rx_arbiter_82598
(
hw
,
refill
,
max
,
prio_type
);
ixgbe_dcb_config_tx_desc_arbiter_82598
(
hw
,
dcb_config
);
ixgbe_dcb_config_tx_desc_arbiter_82598
(
hw
,
refill
,
max
,
ixgbe_dcb_config_tx_data_arbiter_82598
(
hw
,
dcb_config
);
bwg_id
,
prio_type
);
ixgbe_dcb_config_pfc_82598
(
hw
,
dcb_config
);
ixgbe_dcb_config_tx_data_arbiter_82598
(
hw
,
refill
,
max
,
bwg_id
,
prio_type
);
ixgbe_dcb_config_pfc_82598
(
hw
,
pfc_en
);
ixgbe_dcb_config_tc_stats_82598
(
hw
);
ixgbe_dcb_config_tc_stats_82598
(
hw
);
return
0
;
return
0
;
...
...
drivers/net/ixgbe/ixgbe_dcb_82598.h
View file @
58bb4bd0
...
@@ -71,9 +71,28 @@
...
@@ -71,9 +71,28 @@
/* DCB hardware-specific driver APIs */
/* DCB hardware-specific driver APIs */
/* DCB PFC functions */
/* DCB PFC functions */
s32
ixgbe_dcb_config_pfc_82598
(
struct
ixgbe_hw
*
,
struct
ixgbe_dcb_config
*
);
s32
ixgbe_dcb_config_pfc_82598
(
struct
ixgbe_hw
*
,
u8
pfc_en
);
/* DCB hw initialization */
/* DCB hw initialization */
s32
ixgbe_dcb_hw_config_82598
(
struct
ixgbe_hw
*
,
struct
ixgbe_dcb_config
*
);
s32
ixgbe_dcb_config_rx_arbiter_82598
(
struct
ixgbe_hw
*
hw
,
u16
*
refill
,
u16
*
max
,
u8
*
prio_type
);
s32
ixgbe_dcb_config_tx_desc_arbiter_82598
(
struct
ixgbe_hw
*
hw
,
u16
*
refill
,
u16
*
max
,
u8
*
bwg_id
,
u8
*
prio_type
);
s32
ixgbe_dcb_config_tx_data_arbiter_82598
(
struct
ixgbe_hw
*
hw
,
u16
*
refill
,
u16
*
max
,
u8
*
bwg_id
,
u8
*
prio_type
);
s32
ixgbe_dcb_hw_config_82598
(
struct
ixgbe_hw
*
hw
,
u8
rx_pba
,
u8
pfc_en
,
u16
*
refill
,
u16
*
max
,
u8
*
bwg_id
,
u8
*
prio_type
);
#endif
/* _DCB_82598_CONFIG_H */
#endif
/* _DCB_82598_CONFIG_H */
drivers/net/ixgbe/ixgbe_dcb_82599.c
View file @
58bb4bd0
...
@@ -33,19 +33,18 @@
...
@@ -33,19 +33,18 @@
/**
/**
* ixgbe_dcb_config_packet_buffers_82599 - Configure DCB packet buffers
* ixgbe_dcb_config_packet_buffers_82599 - Configure DCB packet buffers
* @hw: pointer to hardware structure
* @hw: pointer to hardware structure
* @
dcb_config: pointer to ixgbe_dcb_config structure
* @
rx_pba: method to distribute packet buffer
*
*
* Configure packet buffers for DCB mode.
* Configure packet buffers for DCB mode.
*/
*/
static
s32
ixgbe_dcb_config_packet_buffers_82599
(
struct
ixgbe_hw
*
hw
,
static
s32
ixgbe_dcb_config_packet_buffers_82599
(
struct
ixgbe_hw
*
hw
,
u8
rx_pba
)
struct
ixgbe_dcb_config
*
dcb_config
)
{
{
s32
ret_val
=
0
;
s32
ret_val
=
0
;
u32
value
=
IXGBE_RXPBSIZE_64KB
;
u32
value
=
IXGBE_RXPBSIZE_64KB
;
u8
i
=
0
;
u8
i
=
0
;
/* Setup Rx packet buffer sizes */
/* Setup Rx packet buffer sizes */
switch
(
dcb_config
->
rx_pba_cfg
)
{
switch
(
rx_pba
)
{
case
pba_80_48
:
case
pba_80_48
:
/* Setup the first four at 80KB */
/* Setup the first four at 80KB */
value
=
IXGBE_RXPBSIZE_80KB
;
value
=
IXGBE_RXPBSIZE_80KB
;
...
@@ -75,14 +74,19 @@ static s32 ixgbe_dcb_config_packet_buffers_82599(struct ixgbe_hw *hw,
...
@@ -75,14 +74,19 @@ static s32 ixgbe_dcb_config_packet_buffers_82599(struct ixgbe_hw *hw,
/**
/**
* ixgbe_dcb_config_rx_arbiter_82599 - Config Rx Data arbiter
* ixgbe_dcb_config_rx_arbiter_82599 - Config Rx Data arbiter
* @hw: pointer to hardware structure
* @hw: pointer to hardware structure
* @dcb_config: pointer to ixgbe_dcb_config structure
* @refill: refill credits index by traffic class
* @max: max credits index by traffic class
* @bwg_id: bandwidth grouping indexed by traffic class
* @prio_type: priority type indexed by traffic class
*
*
* Configure Rx Packet Arbiter and credits for each traffic class.
* Configure Rx Packet Arbiter and credits for each traffic class.
*/
*/
static
s32
ixgbe_dcb_config_rx_arbiter_82599
(
struct
ixgbe_hw
*
hw
,
s32
ixgbe_dcb_config_rx_arbiter_82599
(
struct
ixgbe_hw
*
hw
,
struct
ixgbe_dcb_config
*
dcb_config
)
u16
*
refill
,
u16
*
max
,
u8
*
bwg_id
,
u8
*
prio_type
)
{
{
struct
tc_bw_alloc
*
p
;
u32
reg
=
0
;
u32
reg
=
0
;
u32
credit_refill
=
0
;
u32
credit_refill
=
0
;
u32
credit_max
=
0
;
u32
credit_max
=
0
;
...
@@ -103,15 +107,13 @@ static s32 ixgbe_dcb_config_rx_arbiter_82599(struct ixgbe_hw *hw,
...
@@ -103,15 +107,13 @@ static s32 ixgbe_dcb_config_rx_arbiter_82599(struct ixgbe_hw *hw,
/* Configure traffic class credits and priority */
/* Configure traffic class credits and priority */
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
p
=
&
dcb_config
->
tc_config
[
i
].
path
[
DCB_RX_CONFIG
];
credit_refill
=
refill
[
i
];
credit_max
=
max
[
i
];
credit_refill
=
p
->
data_credits_refill
;
credit_max
=
p
->
data_credits_max
;
reg
=
credit_refill
|
(
credit_max
<<
IXGBE_RTRPT4C_MCL_SHIFT
);
reg
=
credit_refill
|
(
credit_max
<<
IXGBE_RTRPT4C_MCL_SHIFT
);
reg
|=
(
u32
)(
p
->
bwg_id
)
<<
IXGBE_RTRPT4C_BWG_SHIFT
;
reg
|=
(
u32
)(
bwg_id
[
i
]
)
<<
IXGBE_RTRPT4C_BWG_SHIFT
;
if
(
p
->
prio_type
==
prio_link
)
if
(
p
rio_type
[
i
]
==
prio_link
)
reg
|=
IXGBE_RTRPT4C_LSP
;
reg
|=
IXGBE_RTRPT4C_LSP
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_RTRPT4C
(
i
),
reg
);
IXGBE_WRITE_REG
(
hw
,
IXGBE_RTRPT4C
(
i
),
reg
);
...
@@ -130,14 +132,19 @@ static s32 ixgbe_dcb_config_rx_arbiter_82599(struct ixgbe_hw *hw,
...
@@ -130,14 +132,19 @@ static s32 ixgbe_dcb_config_rx_arbiter_82599(struct ixgbe_hw *hw,
/**
/**
* ixgbe_dcb_config_tx_desc_arbiter_82599 - Config Tx Desc. arbiter
* ixgbe_dcb_config_tx_desc_arbiter_82599 - Config Tx Desc. arbiter
* @hw: pointer to hardware structure
* @hw: pointer to hardware structure
* @dcb_config: pointer to ixgbe_dcb_config structure
* @refill: refill credits index by traffic class
* @max: max credits index by traffic class
* @bwg_id: bandwidth grouping indexed by traffic class
* @prio_type: priority type indexed by traffic class
*
*
* Configure Tx Descriptor Arbiter and credits for each traffic class.
* Configure Tx Descriptor Arbiter and credits for each traffic class.
*/
*/
static
s32
ixgbe_dcb_config_tx_desc_arbiter_82599
(
struct
ixgbe_hw
*
hw
,
s32
ixgbe_dcb_config_tx_desc_arbiter_82599
(
struct
ixgbe_hw
*
hw
,
struct
ixgbe_dcb_config
*
dcb_config
)
u16
*
refill
,
u16
*
max
,
u8
*
bwg_id
,
u8
*
prio_type
)
{
{
struct
tc_bw_alloc
*
p
;
u32
reg
,
max_credits
;
u32
reg
,
max_credits
;
u8
i
;
u8
i
;
...
@@ -149,16 +156,15 @@ static s32 ixgbe_dcb_config_tx_desc_arbiter_82599(struct ixgbe_hw *hw,
...
@@ -149,16 +156,15 @@ static s32 ixgbe_dcb_config_tx_desc_arbiter_82599(struct ixgbe_hw *hw,
/* Configure traffic class credits and priority */
/* Configure traffic class credits and priority */
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
p
=
&
dcb_config
->
tc_config
[
i
].
path
[
DCB_TX_CONFIG
];
max_credits
=
max
[
i
];
max_credits
=
dcb_config
->
tc_config
[
i
].
desc_credits_max
;
reg
=
max_credits
<<
IXGBE_RTTDT2C_MCL_SHIFT
;
reg
=
max_credits
<<
IXGBE_RTTDT2C_MCL_SHIFT
;
reg
|=
p
->
data_credits_refill
;
reg
|=
refill
[
i
]
;
reg
|=
(
u32
)(
p
->
bwg_id
)
<<
IXGBE_RTTDT2C_BWG_SHIFT
;
reg
|=
(
u32
)(
bwg_id
[
i
]
)
<<
IXGBE_RTTDT2C_BWG_SHIFT
;
if
(
p
->
prio_type
==
prio_group
)
if
(
p
rio_type
[
i
]
==
prio_group
)
reg
|=
IXGBE_RTTDT2C_GSP
;
reg
|=
IXGBE_RTTDT2C_GSP
;
if
(
p
->
prio_type
==
prio_link
)
if
(
p
rio_type
[
i
]
==
prio_link
)
reg
|=
IXGBE_RTTDT2C_LSP
;
reg
|=
IXGBE_RTTDT2C_LSP
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_RTTDT2C
(
i
),
reg
);
IXGBE_WRITE_REG
(
hw
,
IXGBE_RTTDT2C
(
i
),
reg
);
...
@@ -177,14 +183,19 @@ static s32 ixgbe_dcb_config_tx_desc_arbiter_82599(struct ixgbe_hw *hw,
...
@@ -177,14 +183,19 @@ static s32 ixgbe_dcb_config_tx_desc_arbiter_82599(struct ixgbe_hw *hw,
/**
/**
* ixgbe_dcb_config_tx_data_arbiter_82599 - Config Tx Data arbiter
* ixgbe_dcb_config_tx_data_arbiter_82599 - Config Tx Data arbiter
* @hw: pointer to hardware structure
* @hw: pointer to hardware structure
* @dcb_config: pointer to ixgbe_dcb_config structure
* @refill: refill credits index by traffic class
* @max: max credits index by traffic class
* @bwg_id: bandwidth grouping indexed by traffic class
* @prio_type: priority type indexed by traffic class
*
*
* Configure Tx Packet Arbiter and credits for each traffic class.
* Configure Tx Packet Arbiter and credits for each traffic class.
*/
*/
static
s32
ixgbe_dcb_config_tx_data_arbiter_82599
(
struct
ixgbe_hw
*
hw
,
s32
ixgbe_dcb_config_tx_data_arbiter_82599
(
struct
ixgbe_hw
*
hw
,
struct
ixgbe_dcb_config
*
dcb_config
)
u16
*
refill
,
u16
*
max
,
u8
*
bwg_id
,
u8
*
prio_type
)
{
{
struct
tc_bw_alloc
*
p
;
u32
reg
;
u32
reg
;
u8
i
;
u8
i
;
...
@@ -205,15 +216,14 @@ static s32 ixgbe_dcb_config_tx_data_arbiter_82599(struct ixgbe_hw *hw,
...
@@ -205,15 +216,14 @@ static s32 ixgbe_dcb_config_tx_data_arbiter_82599(struct ixgbe_hw *hw,
/* Configure traffic class credits and priority */
/* Configure traffic class credits and priority */
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
p
=
&
dcb_config
->
tc_config
[
i
].
path
[
DCB_TX_CONFIG
];
reg
=
refill
[
i
];
reg
=
p
->
data_credits_refill
;
reg
|=
(
u32
)(
max
[
i
])
<<
IXGBE_RTTPT2C_MCL_SHIFT
;
reg
|=
(
u32
)(
p
->
data_credits_max
)
<<
IXGBE_RTTPT2C_MCL_SHIFT
;
reg
|=
(
u32
)(
bwg_id
[
i
])
<<
IXGBE_RTTPT2C_BWG_SHIFT
;
reg
|=
(
u32
)(
p
->
bwg_id
)
<<
IXGBE_RTTPT2C_BWG_SHIFT
;
if
(
p
->
prio_type
==
prio_group
)
if
(
p
rio_type
[
i
]
==
prio_group
)
reg
|=
IXGBE_RTTPT2C_GSP
;
reg
|=
IXGBE_RTTPT2C_GSP
;
if
(
p
->
prio_type
==
prio_link
)
if
(
p
rio_type
[
i
]
==
prio_link
)
reg
|=
IXGBE_RTTPT2C_LSP
;
reg
|=
IXGBE_RTTPT2C_LSP
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_RTTPT2C
(
i
),
reg
);
IXGBE_WRITE_REG
(
hw
,
IXGBE_RTTPT2C
(
i
),
reg
);
...
@@ -233,17 +243,16 @@ static s32 ixgbe_dcb_config_tx_data_arbiter_82599(struct ixgbe_hw *hw,
...
@@ -233,17 +243,16 @@ static s32 ixgbe_dcb_config_tx_data_arbiter_82599(struct ixgbe_hw *hw,
/**
/**
* ixgbe_dcb_config_pfc_82599 - Configure priority flow control
* ixgbe_dcb_config_pfc_82599 - Configure priority flow control
* @hw: pointer to hardware structure
* @hw: pointer to hardware structure
* @
dcb_config: pointer to ixgbe_dcb_config structure
* @
pfc_en: enabled pfc bitmask
*
*
* Configure Priority Flow Control (PFC) for each traffic class.
* Configure Priority Flow Control (PFC) for each traffic class.
*/
*/
s32
ixgbe_dcb_config_pfc_82599
(
struct
ixgbe_hw
*
hw
,
s32
ixgbe_dcb_config_pfc_82599
(
struct
ixgbe_hw
*
hw
,
u8
pfc_en
)
struct
ixgbe_dcb_config
*
dcb_config
)
{
{
u32
i
,
reg
,
rx_pba_size
;
u32
i
,
reg
,
rx_pba_size
;
/* If PFC is disabled globally then fall back to LFC. */
/* If PFC is disabled globally then fall back to LFC. */
if
(
!
dcb_config
->
pfc_mode_enable
)
{
if
(
!
pfc_en
)
{
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
hw
->
mac
.
ops
.
fc_enable
(
hw
,
i
);
hw
->
mac
.
ops
.
fc_enable
(
hw
,
i
);
goto
out
;
goto
out
;
...
@@ -251,19 +260,18 @@ s32 ixgbe_dcb_config_pfc_82599(struct ixgbe_hw *hw,
...
@@ -251,19 +260,18 @@ s32 ixgbe_dcb_config_pfc_82599(struct ixgbe_hw *hw,
/* 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
);
rx_pba_size
=
IXGBE_READ_REG
(
hw
,
IXGBE_RXPBSIZE
(
i
));
rx_pba_size
=
IXGBE_READ_REG
(
hw
,
IXGBE_RXPBSIZE
(
i
));
rx_pba_size
>>=
IXGBE_RXPBSIZE_SHIFT
;
rx_pba_size
>>=
IXGBE_RXPBSIZE_SHIFT
;
reg
=
(
rx_pba_size
-
hw
->
fc
.
low_water
)
<<
10
;
reg
=
(
rx_pba_size
-
hw
->
fc
.
low_water
)
<<
10
;
if
(
dcb_config
->
tc_config
[
i
].
dcb_pfc
==
pfc_enabled_full
||
if
(
enabled
)
dcb_config
->
tc_config
[
i
].
dcb_pfc
==
pfc_enabled_tx
)
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
=
(
rx_pba_size
-
hw
->
fc
.
high_water
)
<<
10
;
if
(
dcb_config
->
tc_config
[
i
].
dcb_pfc
==
pfc_enabled_full
||
if
(
enabled
)
dcb_config
->
tc_config
[
i
].
dcb_pfc
==
pfc_enabled_tx
)
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
);
}
}
...
@@ -349,7 +357,6 @@ static s32 ixgbe_dcb_config_tc_stats_82599(struct ixgbe_hw *hw)
...
@@ -349,7 +357,6 @@ static s32 ixgbe_dcb_config_tc_stats_82599(struct ixgbe_hw *hw)
/**
/**
* ixgbe_dcb_config_82599 - Configure general DCB parameters
* ixgbe_dcb_config_82599 - Configure general DCB parameters
* @hw: pointer to hardware structure
* @hw: pointer to hardware structure
* @dcb_config: pointer to ixgbe_dcb_config structure
*
*
* Configure general DCB parameters.
* Configure general DCB parameters.
*/
*/
...
@@ -406,19 +413,27 @@ static s32 ixgbe_dcb_config_82599(struct ixgbe_hw *hw)
...
@@ -406,19 +413,27 @@ static s32 ixgbe_dcb_config_82599(struct ixgbe_hw *hw)
/**
/**
* ixgbe_dcb_hw_config_82599 - Configure and enable DCB
* ixgbe_dcb_hw_config_82599 - Configure and enable DCB
* @hw: pointer to hardware structure
* @hw: pointer to hardware structure
* @dcb_config: pointer to ixgbe_dcb_config structure
* @rx_pba: method to distribute packet buffer
* @refill: refill credits index by traffic class
* @max: max credits index by traffic class
* @bwg_id: bandwidth grouping indexed by traffic class
* @prio_type: priority type indexed by traffic class
* @pfc_en: enabled pfc bitmask
*
*
* Configure dcb settings and enable dcb mode.
* Configure dcb settings and enable dcb mode.
*/
*/
s32
ixgbe_dcb_hw_config_82599
(
struct
ixgbe_hw
*
hw
,
s32
ixgbe_dcb_hw_config_82599
(
struct
ixgbe_hw
*
hw
,
struct
ixgbe_dcb_config
*
dcb_config
)
u8
rx_pba
,
u8
pfc_en
,
u16
*
refill
,
u16
*
max
,
u8
*
bwg_id
,
u8
*
prio_type
)
{
{
ixgbe_dcb_config_packet_buffers_82599
(
hw
,
dcb_config
);
ixgbe_dcb_config_packet_buffers_82599
(
hw
,
rx_pba
);
ixgbe_dcb_config_82599
(
hw
);
ixgbe_dcb_config_82599
(
hw
);
ixgbe_dcb_config_rx_arbiter_82599
(
hw
,
dcb_config
);
ixgbe_dcb_config_rx_arbiter_82599
(
hw
,
refill
,
max
,
bwg_id
,
prio_type
);
ixgbe_dcb_config_tx_desc_arbiter_82599
(
hw
,
dcb_config
);
ixgbe_dcb_config_tx_desc_arbiter_82599
(
hw
,
refill
,
max
,
ixgbe_dcb_config_tx_data_arbiter_82599
(
hw
,
dcb_config
);
bwg_id
,
prio_type
);
ixgbe_dcb_config_pfc_82599
(
hw
,
dcb_config
);
ixgbe_dcb_config_tx_data_arbiter_82599
(
hw
,
refill
,
max
,
bwg_id
,
prio_type
);
ixgbe_dcb_config_pfc_82599
(
hw
,
pfc_en
);
ixgbe_dcb_config_tc_stats_82599
(
hw
);
ixgbe_dcb_config_tc_stats_82599
(
hw
);
return
0
;
return
0
;
...
...
drivers/net/ixgbe/ixgbe_dcb_82599.h
View file @
58bb4bd0
...
@@ -102,11 +102,29 @@
...
@@ -102,11 +102,29 @@
/* DCB hardware-specific driver APIs */
/* DCB hardware-specific driver APIs */
/* DCB PFC functions */
/* DCB PFC functions */
s32
ixgbe_dcb_config_pfc_82599
(
struct
ixgbe_hw
*
hw
,
s32
ixgbe_dcb_config_pfc_82599
(
struct
ixgbe_hw
*
hw
,
u8
pfc_en
);
struct
ixgbe_dcb_config
*
dcb_config
);
/* DCB hw initialization */
/* DCB hw initialization */
s32
ixgbe_dcb_config_rx_arbiter_82599
(
struct
ixgbe_hw
*
hw
,
u16
*
refill
,
u16
*
max
,
u8
*
bwg_id
,
u8
*
prio_type
);
s32
ixgbe_dcb_config_tx_desc_arbiter_82599
(
struct
ixgbe_hw
*
hw
,
u16
*
refill
,
u16
*
max
,
u8
*
bwg_id
,
u8
*
prio_type
);
s32
ixgbe_dcb_config_tx_data_arbiter_82599
(
struct
ixgbe_hw
*
hw
,
u16
*
refill
,
u16
*
max
,
u8
*
bwg_id
,
u8
*
prio_type
);
s32
ixgbe_dcb_hw_config_82599
(
struct
ixgbe_hw
*
hw
,
s32
ixgbe_dcb_hw_config_82599
(
struct
ixgbe_hw
*
hw
,
struct
ixgbe_dcb_config
*
config
);
u8
rx_pba
,
u8
pfc_en
,
u16
*
refill
,
u16
*
max
,
u8
*
bwg_id
,
u8
*
prio_type
);
#endif
/* _DCB_82599_CONFIG_H */
#endif
/* _DCB_82599_CONFIG_H */
drivers/net/ixgbe/ixgbe_dcb_nl.c
View file @
58bb4bd0
...
@@ -37,7 +37,6 @@
...
@@ -37,7 +37,6 @@
#define BIT_PG_RX 0x04
#define BIT_PG_RX 0x04
#define BIT_PG_TX 0x08
#define BIT_PG_TX 0x08
#define BIT_APP_UPCHG 0x10
#define BIT_APP_UPCHG 0x10
#define BIT_RESETLINK 0x40
#define BIT_LINKSPEED 0x80
#define BIT_LINKSPEED 0x80
/* Responses for the DCB_C_SET_ALL command */
/* Responses for the DCB_C_SET_ALL command */
...
@@ -225,10 +224,8 @@ static void ixgbe_dcbnl_set_pg_tc_cfg_tx(struct net_device *netdev, int tc,
...
@@ -225,10 +224,8 @@ static void ixgbe_dcbnl_set_pg_tc_cfg_tx(struct net_device *netdev, int tc,
(
adapter
->
temp_dcb_cfg
.
tc_config
[
tc
].
path
[
0
].
bwg_percent
!=
(
adapter
->
temp_dcb_cfg
.
tc_config
[
tc
].
path
[
0
].
bwg_percent
!=
adapter
->
dcb_cfg
.
tc_config
[
tc
].
path
[
0
].
bwg_percent
)
||
adapter
->
dcb_cfg
.
tc_config
[
tc
].
path
[
0
].
bwg_percent
)
||
(
adapter
->
temp_dcb_cfg
.
tc_config
[
tc
].
path
[
0
].
up_to_tc_bitmap
!=
(
adapter
->
temp_dcb_cfg
.
tc_config
[
tc
].
path
[
0
].
up_to_tc_bitmap
!=
adapter
->
dcb_cfg
.
tc_config
[
tc
].
path
[
0
].
up_to_tc_bitmap
))
{
adapter
->
dcb_cfg
.
tc_config
[
tc
].
path
[
0
].
up_to_tc_bitmap
))
adapter
->
dcb_set_bitmap
|=
BIT_PG_TX
;
adapter
->
dcb_set_bitmap
|=
BIT_PG_TX
;
adapter
->
dcb_set_bitmap
|=
BIT_RESETLINK
;
}
}
}
static
void
ixgbe_dcbnl_set_pg_bwg_cfg_tx
(
struct
net_device
*
netdev
,
int
bwg_id
,
static
void
ixgbe_dcbnl_set_pg_bwg_cfg_tx
(
struct
net_device
*
netdev
,
int
bwg_id
,
...
@@ -239,10 +236,8 @@ static void ixgbe_dcbnl_set_pg_bwg_cfg_tx(struct net_device *netdev, int bwg_id,
...
@@ -239,10 +236,8 @@ static void ixgbe_dcbnl_set_pg_bwg_cfg_tx(struct net_device *netdev, int bwg_id,
adapter
->
temp_dcb_cfg
.
bw_percentage
[
0
][
bwg_id
]
=
bw_pct
;
adapter
->
temp_dcb_cfg
.
bw_percentage
[
0
][
bwg_id
]
=
bw_pct
;
if
(
adapter
->
temp_dcb_cfg
.
bw_percentage
[
0
][
bwg_id
]
!=
if
(
adapter
->
temp_dcb_cfg
.
bw_percentage
[
0
][
bwg_id
]
!=
adapter
->
dcb_cfg
.
bw_percentage
[
0
][
bwg_id
])
{
adapter
->
dcb_cfg
.
bw_percentage
[
0
][
bwg_id
])
adapter
->
dcb_set_bitmap
|=
BIT_PG_TX
;
adapter
->
dcb_set_bitmap
|=
BIT_PG_TX
;
adapter
->
dcb_set_bitmap
|=
BIT_RESETLINK
;
}
}
}
static
void
ixgbe_dcbnl_set_pg_tc_cfg_rx
(
struct
net_device
*
netdev
,
int
tc
,
static
void
ixgbe_dcbnl_set_pg_tc_cfg_rx
(
struct
net_device
*
netdev
,
int
tc
,
...
@@ -269,10 +264,8 @@ static void ixgbe_dcbnl_set_pg_tc_cfg_rx(struct net_device *netdev, int tc,
...
@@ -269,10 +264,8 @@ static void ixgbe_dcbnl_set_pg_tc_cfg_rx(struct net_device *netdev, int tc,
(
adapter
->
temp_dcb_cfg
.
tc_config
[
tc
].
path
[
1
].
bwg_percent
!=
(
adapter
->
temp_dcb_cfg
.
tc_config
[
tc
].
path
[
1
].
bwg_percent
!=
adapter
->
dcb_cfg
.
tc_config
[
tc
].
path
[
1
].
bwg_percent
)
||
adapter
->
dcb_cfg
.
tc_config
[
tc
].
path
[
1
].
bwg_percent
)
||
(
adapter
->
temp_dcb_cfg
.
tc_config
[
tc
].
path
[
1
].
up_to_tc_bitmap
!=
(
adapter
->
temp_dcb_cfg
.
tc_config
[
tc
].
path
[
1
].
up_to_tc_bitmap
!=
adapter
->
dcb_cfg
.
tc_config
[
tc
].
path
[
1
].
up_to_tc_bitmap
))
{
adapter
->
dcb_cfg
.
tc_config
[
tc
].
path
[
1
].
up_to_tc_bitmap
))
adapter
->
dcb_set_bitmap
|=
BIT_PG_RX
;
adapter
->
dcb_set_bitmap
|=
BIT_PG_RX
;
adapter
->
dcb_set_bitmap
|=
BIT_RESETLINK
;
}
}
}
static
void
ixgbe_dcbnl_set_pg_bwg_cfg_rx
(
struct
net_device
*
netdev
,
int
bwg_id
,
static
void
ixgbe_dcbnl_set_pg_bwg_cfg_rx
(
struct
net_device
*
netdev
,
int
bwg_id
,
...
@@ -283,10 +276,8 @@ static void ixgbe_dcbnl_set_pg_bwg_cfg_rx(struct net_device *netdev, int bwg_id,
...
@@ -283,10 +276,8 @@ static void ixgbe_dcbnl_set_pg_bwg_cfg_rx(struct net_device *netdev, int bwg_id,
adapter
->
temp_dcb_cfg
.
bw_percentage
[
1
][
bwg_id
]
=
bw_pct
;
adapter
->
temp_dcb_cfg
.
bw_percentage
[
1
][
bwg_id
]
=
bw_pct
;
if
(
adapter
->
temp_dcb_cfg
.
bw_percentage
[
1
][
bwg_id
]
!=
if
(
adapter
->
temp_dcb_cfg
.
bw_percentage
[
1
][
bwg_id
]
!=
adapter
->
dcb_cfg
.
bw_percentage
[
1
][
bwg_id
])
{
adapter
->
dcb_cfg
.
bw_percentage
[
1
][
bwg_id
])
adapter
->
dcb_set_bitmap
|=
BIT_PG_RX
;
adapter
->
dcb_set_bitmap
|=
BIT_PG_RX
;
adapter
->
dcb_set_bitmap
|=
BIT_RESETLINK
;
}
}
}
static
void
ixgbe_dcbnl_get_pg_tc_cfg_tx
(
struct
net_device
*
netdev
,
int
tc
,
static
void
ixgbe_dcbnl_get_pg_tc_cfg_tx
(
struct
net_device
*
netdev
,
int
tc
,
...
@@ -365,21 +356,17 @@ static u8 ixgbe_dcbnl_set_all(struct net_device *netdev)
...
@@ -365,21 +356,17 @@ static u8 ixgbe_dcbnl_set_all(struct net_device *netdev)
return
DCB_NO_HW_CHG
;
return
DCB_NO_HW_CHG
;
/*
/*
* Only take down the adapter if the configuration change
* Only take down the adapter if an app change occured. FCoE
* requires a reset.
* may shuffle tx rings in this case and this can not be done
* without a reset currently.
*/
*/
if
(
adapter
->
dcb_set_bitmap
&
BIT_
RESETLINK
)
{
if
(
adapter
->
dcb_set_bitmap
&
BIT_
APP_UPCHG
)
{
while
(
test_and_set_bit
(
__IXGBE_RESETTING
,
&
adapter
->
state
))
while
(
test_and_set_bit
(
__IXGBE_RESETTING
,
&
adapter
->
state
))
msleep
(
1
);
msleep
(
1
);
if
(
adapter
->
dcb_set_bitmap
&
BIT_APP_UPCHG
)
{
if
(
netif_running
(
netdev
))
if
(
netif_running
(
netdev
))
netdev
->
netdev_ops
->
ndo_stop
(
netdev
);
netdev
->
netdev_ops
->
ndo_stop
(
netdev
);
ixgbe_clear_interrupt_scheme
(
adapter
);
ixgbe_clear_interrupt_scheme
(
adapter
);
}
else
{
if
(
netif_running
(
netdev
))
ixgbe_down
(
adapter
);
}
}
}
if
(
adapter
->
dcb_cfg
.
pfc_mode_enable
)
{
if
(
adapter
->
dcb_cfg
.
pfc_mode_enable
)
{
...
@@ -408,29 +395,51 @@ static u8 ixgbe_dcbnl_set_all(struct net_device *netdev)
...
@@ -408,29 +395,51 @@ static u8 ixgbe_dcbnl_set_all(struct net_device *netdev)
}
}
}
}
if
(
adapter
->
dcb_set_bitmap
&
BIT_RESETLINK
)
{
if
(
adapter
->
dcb_set_bitmap
&
BIT_APP_UPCHG
)
{
if
(
adapter
->
dcb_set_bitmap
&
BIT_APP_UPCHG
)
{
ixgbe_init_interrupt_scheme
(
adapter
);
ixgbe_init_interrupt_scheme
(
adapter
);
if
(
netif_running
(
netdev
))
if
(
netif_running
(
netdev
))
netdev
->
netdev_ops
->
ndo_open
(
netdev
);
netdev
->
netdev_ops
->
ndo_open
(
netdev
);
}
else
{
if
(
netif_running
(
netdev
))
ixgbe_up
(
adapter
);
}
ret
=
DCB_HW_CHG_RST
;
ret
=
DCB_HW_CHG_RST
;
}
else
if
(
adapter
->
dcb_set_bitmap
&
BIT_PFC
)
{
}
if
(
adapter
->
hw
.
mac
.
type
==
ixgbe_mac_82598EB
)
ixgbe_dcb_config_pfc_82598
(
&
adapter
->
hw
,
if
(
adapter
->
dcb_set_bitmap
&
BIT_PFC
)
{
&
adapter
->
dcb_cfg
);
u8
pfc_en
;
else
if
(
adapter
->
hw
.
mac
.
type
==
ixgbe_mac_82599EB
)
ixgbe_dcb_unpack_pfc
(
&
adapter
->
dcb_cfg
,
&
pfc_en
);
ixgbe_dcb_config_pfc_82599
(
&
adapter
->
hw
,
ixgbe_dcb_hw_pfc_config
(
&
adapter
->
hw
,
pfc_en
);
&
adapter
->
dcb_cfg
);
ret
=
DCB_HW_CHG
;
ret
=
DCB_HW_CHG
;
}
}
if
(
adapter
->
dcb_set_bitmap
&
(
BIT_PG_TX
|
BIT_PG_RX
))
{
u16
refill
[
MAX_TRAFFIC_CLASS
],
max
[
MAX_TRAFFIC_CLASS
];
u8
bwg_id
[
MAX_TRAFFIC_CLASS
],
prio_type
[
MAX_TRAFFIC_CLASS
];
int
max_frame
=
adapter
->
netdev
->
mtu
+
ETH_HLEN
+
ETH_FCS_LEN
;
#ifdef CONFIG_FCOE
if
(
adapter
->
netdev
->
features
&
NETIF_F_FCOE_MTU
)
max_frame
=
max
(
max_frame
,
IXGBE_FCOE_JUMBO_FRAME_SIZE
);
#endif
ixgbe_dcb_calculate_tc_credits
(
&
adapter
->
hw
,
&
adapter
->
dcb_cfg
,
max_frame
,
DCB_TX_CONFIG
);
ixgbe_dcb_calculate_tc_credits
(
&
adapter
->
hw
,
&
adapter
->
dcb_cfg
,
max_frame
,
DCB_RX_CONFIG
);
ixgbe_dcb_unpack_refill
(
&
adapter
->
dcb_cfg
,
DCB_TX_CONFIG
,
refill
);
ixgbe_dcb_unpack_max
(
&
adapter
->
dcb_cfg
,
max
);
ixgbe_dcb_unpack_bwgid
(
&
adapter
->
dcb_cfg
,
DCB_TX_CONFIG
,
bwg_id
);
ixgbe_dcb_unpack_prio
(
&
adapter
->
dcb_cfg
,
DCB_TX_CONFIG
,
prio_type
);
ixgbe_dcb_hw_ets_config
(
&
adapter
->
hw
,
refill
,
max
,
bwg_id
,
prio_type
);
}
if
(
adapter
->
dcb_cfg
.
pfc_mode_enable
)
if
(
adapter
->
dcb_cfg
.
pfc_mode_enable
)
adapter
->
hw
.
fc
.
current_mode
=
ixgbe_fc_pfc
;
adapter
->
hw
.
fc
.
current_mode
=
ixgbe_fc_pfc
;
if
(
adapter
->
dcb_set_bitmap
&
BIT_
RESETLINK
)
if
(
adapter
->
dcb_set_bitmap
&
BIT_
APP_UPCHG
)
clear_bit
(
__IXGBE_RESETTING
,
&
adapter
->
state
);
clear_bit
(
__IXGBE_RESETTING
,
&
adapter
->
state
);
adapter
->
dcb_set_bitmap
=
0x00
;
adapter
->
dcb_set_bitmap
=
0x00
;
return
ret
;
return
ret
;
...
@@ -568,18 +577,29 @@ static u8 ixgbe_dcbnl_setapp(struct net_device *netdev,
...
@@ -568,18 +577,29 @@ static u8 ixgbe_dcbnl_setapp(struct net_device *netdev,
case
DCB_APP_IDTYPE_ETHTYPE
:
case
DCB_APP_IDTYPE_ETHTYPE
:
#ifdef IXGBE_FCOE
#ifdef IXGBE_FCOE
if
(
id
==
ETH_P_FCOE
)
{
if
(
id
==
ETH_P_FCOE
)
{
u8
tc
;
u8
old_
tc
;
struct
ixgbe_adapter
*
adapter
;
struct
ixgbe_adapter
*
adapter
=
netdev_priv
(
netdev
)
;
adapter
=
netdev_priv
(
netdev
);
/* Get current programmed tc */
tc
=
adapter
->
fcoe
.
tc
;
old_
tc
=
adapter
->
fcoe
.
tc
;
rval
=
ixgbe_fcoe_setapp
(
adapter
,
up
);
rval
=
ixgbe_fcoe_setapp
(
adapter
,
up
);
if
((
!
rval
)
&&
(
tc
!=
adapter
->
fcoe
.
tc
)
&&
(
adapter
->
flags
&
IXGBE_FLAG_DCB_ENABLED
)
&&
if
(
rval
||
(
adapter
->
flags
&
IXGBE_FLAG_FCOE_ENABLED
))
{
!
(
adapter
->
flags
&
IXGBE_FLAG_DCB_ENABLED
)
||
!
(
adapter
->
flags
&
IXGBE_FLAG_FCOE_ENABLED
))
break
;
/* The FCoE application priority may be changed multiple
* times in quick sucession with switches that build up
* TLVs. To avoid creating uneeded device resets this
* checks the actual HW configuration and clears
* BIT_APP_UPCHG if a HW configuration change is not
* need
*/
if
(
old_tc
==
adapter
->
fcoe
.
tc
)
adapter
->
dcb_set_bitmap
&=
~
BIT_APP_UPCHG
;
else
adapter
->
dcb_set_bitmap
|=
BIT_APP_UPCHG
;
adapter
->
dcb_set_bitmap
|=
BIT_APP_UPCHG
;
adapter
->
dcb_set_bitmap
|=
BIT_RESETLINK
;
}
}
}
#endif
#endif
break
;
break
;
...
@@ -591,7 +611,98 @@ static u8 ixgbe_dcbnl_setapp(struct net_device *netdev,
...
@@ -591,7 +611,98 @@ static u8 ixgbe_dcbnl_setapp(struct net_device *netdev,
return
rval
;
return
rval
;
}
}
static
int
ixgbe_dcbnl_ieee_getets
(
struct
net_device
*
dev
,
struct
ieee_ets
*
ets
)
{
struct
ixgbe_adapter
*
adapter
=
netdev_priv
(
dev
);
struct
ieee_ets
*
my_ets
=
adapter
->
ixgbe_ieee_ets
;
/* No IEEE PFC settings available */
if
(
!
my_ets
)
return
-
EINVAL
;
ets
->
ets_cap
=
MAX_TRAFFIC_CLASS
;
ets
->
cbs
=
my_ets
->
cbs
;
memcpy
(
ets
->
tc_tx_bw
,
my_ets
->
tc_tx_bw
,
sizeof
(
ets
->
tc_tx_bw
));
memcpy
(
ets
->
tc_rx_bw
,
my_ets
->
tc_rx_bw
,
sizeof
(
ets
->
tc_rx_bw
));
memcpy
(
ets
->
tc_tsa
,
my_ets
->
tc_tsa
,
sizeof
(
ets
->
tc_tsa
));
memcpy
(
ets
->
prio_tc
,
my_ets
->
prio_tc
,
sizeof
(
ets
->
prio_tc
));
return
0
;
}
static
int
ixgbe_dcbnl_ieee_setets
(
struct
net_device
*
dev
,
struct
ieee_ets
*
ets
)
{
struct
ixgbe_adapter
*
adapter
=
netdev_priv
(
dev
);
__u16
refill
[
IEEE_8021QAZ_MAX_TCS
],
max
[
IEEE_8021QAZ_MAX_TCS
];
int
max_frame
=
dev
->
mtu
+
ETH_HLEN
+
ETH_FCS_LEN
;
int
err
;
/* naively give each TC a bwg to map onto CEE hardware */
__u8
bwg_id
[
IEEE_8021QAZ_MAX_TCS
]
=
{
0
,
1
,
2
,
3
,
4
,
5
,
6
,
7
};
if
(
!
adapter
->
ixgbe_ieee_ets
)
{
adapter
->
ixgbe_ieee_ets
=
kmalloc
(
sizeof
(
struct
ieee_ets
),
GFP_KERNEL
);
if
(
!
adapter
->
ixgbe_ieee_ets
)
return
-
ENOMEM
;
}
memcpy
(
adapter
->
ixgbe_ieee_ets
,
ets
,
sizeof
(
*
adapter
->
ixgbe_ieee_ets
));
ixgbe_ieee_credits
(
ets
->
tc_tx_bw
,
refill
,
max
,
max_frame
);
err
=
ixgbe_dcb_hw_ets_config
(
&
adapter
->
hw
,
refill
,
max
,
bwg_id
,
ets
->
tc_tsa
);
return
err
;
}
static
int
ixgbe_dcbnl_ieee_getpfc
(
struct
net_device
*
dev
,
struct
ieee_pfc
*
pfc
)
{
struct
ixgbe_adapter
*
adapter
=
netdev_priv
(
dev
);
struct
ieee_pfc
*
my_pfc
=
adapter
->
ixgbe_ieee_pfc
;
int
i
;
/* No IEEE PFC settings available */
if
(
!
my_pfc
)
return
-
EINVAL
;
pfc
->
pfc_cap
=
MAX_TRAFFIC_CLASS
;
pfc
->
pfc_en
=
my_pfc
->
pfc_en
;
pfc
->
mbc
=
my_pfc
->
mbc
;
pfc
->
delay
=
my_pfc
->
delay
;
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
pfc
->
requests
[
i
]
=
adapter
->
stats
.
pxoffrxc
[
i
];
pfc
->
indications
[
i
]
=
adapter
->
stats
.
pxofftxc
[
i
];
}
return
0
;
}
static
int
ixgbe_dcbnl_ieee_setpfc
(
struct
net_device
*
dev
,
struct
ieee_pfc
*
pfc
)
{
struct
ixgbe_adapter
*
adapter
=
netdev_priv
(
dev
);
int
err
;
if
(
!
adapter
->
ixgbe_ieee_pfc
)
{
adapter
->
ixgbe_ieee_pfc
=
kmalloc
(
sizeof
(
struct
ieee_pfc
),
GFP_KERNEL
);
if
(
!
adapter
->
ixgbe_ieee_pfc
)
return
-
ENOMEM
;
}
memcpy
(
adapter
->
ixgbe_ieee_pfc
,
pfc
,
sizeof
(
*
adapter
->
ixgbe_ieee_pfc
));
err
=
ixgbe_dcb_hw_pfc_config
(
&
adapter
->
hw
,
pfc
->
pfc_en
);
return
err
;
}
const
struct
dcbnl_rtnl_ops
dcbnl_ops
=
{
const
struct
dcbnl_rtnl_ops
dcbnl_ops
=
{
.
ieee_getets
=
ixgbe_dcbnl_ieee_getets
,
.
ieee_setets
=
ixgbe_dcbnl_ieee_setets
,
.
ieee_getpfc
=
ixgbe_dcbnl_ieee_getpfc
,
.
ieee_setpfc
=
ixgbe_dcbnl_ieee_setpfc
,
.
getstate
=
ixgbe_dcbnl_get_state
,
.
getstate
=
ixgbe_dcbnl_get_state
,
.
setstate
=
ixgbe_dcbnl_set_state
,
.
setstate
=
ixgbe_dcbnl_set_state
,
.
getpermhwaddr
=
ixgbe_dcbnl_get_perm_hw_addr
,
.
getpermhwaddr
=
ixgbe_dcbnl_get_perm_hw_addr
,
...
...
drivers/net/ixgbe/ixgbe_ethtool.c
View file @
58bb4bd0
...
@@ -152,7 +152,17 @@ static int ixgbe_get_settings(struct net_device *netdev,
...
@@ -152,7 +152,17 @@ static int ixgbe_get_settings(struct net_device *netdev,
ecmd
->
supported
|=
(
SUPPORTED_1000baseT_Full
|
ecmd
->
supported
|=
(
SUPPORTED_1000baseT_Full
|
SUPPORTED_Autoneg
);
SUPPORTED_Autoneg
);
switch
(
hw
->
mac
.
type
)
{
case
ixgbe_mac_X540
:
ecmd
->
supported
|=
SUPPORTED_100baseT_Full
;
break
;
default:
break
;
}
ecmd
->
advertising
=
ADVERTISED_Autoneg
;
ecmd
->
advertising
=
ADVERTISED_Autoneg
;
if
(
hw
->
phy
.
autoneg_advertised
&
IXGBE_LINK_SPEED_100_FULL
)
ecmd
->
advertising
|=
ADVERTISED_100baseT_Full
;
if
(
hw
->
phy
.
autoneg_advertised
&
IXGBE_LINK_SPEED_10GB_FULL
)
if
(
hw
->
phy
.
autoneg_advertised
&
IXGBE_LINK_SPEED_10GB_FULL
)
ecmd
->
advertising
|=
ADVERTISED_10000baseT_Full
;
ecmd
->
advertising
|=
ADVERTISED_10000baseT_Full
;
if
(
hw
->
phy
.
autoneg_advertised
&
IXGBE_LINK_SPEED_1GB_FULL
)
if
(
hw
->
phy
.
autoneg_advertised
&
IXGBE_LINK_SPEED_1GB_FULL
)
...
@@ -167,6 +177,15 @@ static int ixgbe_get_settings(struct net_device *netdev,
...
@@ -167,6 +177,15 @@ static int ixgbe_get_settings(struct net_device *netdev,
ecmd
->
advertising
|=
(
ADVERTISED_10000baseT_Full
|
ecmd
->
advertising
|=
(
ADVERTISED_10000baseT_Full
|
ADVERTISED_1000baseT_Full
);
ADVERTISED_1000baseT_Full
);
switch
(
hw
->
mac
.
type
)
{
case
ixgbe_mac_X540
:
if
(
!
(
ecmd
->
advertising
&
ADVERTISED_100baseT_Full
))
ecmd
->
advertising
|=
(
ADVERTISED_100baseT_Full
);
break
;
default:
break
;
}
if
(
hw
->
phy
.
media_type
==
ixgbe_media_type_copper
)
{
if
(
hw
->
phy
.
media_type
==
ixgbe_media_type_copper
)
{
ecmd
->
supported
|=
SUPPORTED_TP
;
ecmd
->
supported
|=
SUPPORTED_TP
;
ecmd
->
advertising
|=
ADVERTISED_TP
;
ecmd
->
advertising
|=
ADVERTISED_TP
;
...
@@ -271,8 +290,19 @@ static int ixgbe_get_settings(struct net_device *netdev,
...
@@ -271,8 +290,19 @@ static int ixgbe_get_settings(struct net_device *netdev,
hw
->
mac
.
ops
.
check_link
(
hw
,
&
link_speed
,
&
link_up
,
false
);
hw
->
mac
.
ops
.
check_link
(
hw
,
&
link_speed
,
&
link_up
,
false
);
if
(
link_up
)
{
if
(
link_up
)
{
ecmd
->
speed
=
(
link_speed
==
IXGBE_LINK_SPEED_10GB_FULL
)
?
switch
(
link_speed
)
{
SPEED_10000
:
SPEED_1000
;
case
IXGBE_LINK_SPEED_10GB_FULL
:
ecmd
->
speed
=
SPEED_10000
;
break
;
case
IXGBE_LINK_SPEED_1GB_FULL
:
ecmd
->
speed
=
SPEED_1000
;
break
;
case
IXGBE_LINK_SPEED_100_FULL
:
ecmd
->
speed
=
SPEED_100
;
break
;
default:
break
;
}
ecmd
->
duplex
=
DUPLEX_FULL
;
ecmd
->
duplex
=
DUPLEX_FULL
;
}
else
{
}
else
{
ecmd
->
speed
=
-
1
;
ecmd
->
speed
=
-
1
;
...
...
drivers/net/ixgbe/ixgbe_main.c
View file @
58bb4bd0
...
@@ -648,7 +648,7 @@ void ixgbe_unmap_and_free_tx_resource(struct ixgbe_ring *tx_ring,
...
@@ -648,7 +648,7 @@ void ixgbe_unmap_and_free_tx_resource(struct ixgbe_ring *tx_ring,
*
*
* Returns : a tc index for use in range 0-7, or 0-3
* Returns : a tc index for use in range 0-7, or 0-3
*/
*/
u8
ixgbe_dcb_txq_to_tc
(
struct
ixgbe_adapter
*
adapter
,
u8
reg_idx
)
static
u8
ixgbe_dcb_txq_to_tc
(
struct
ixgbe_adapter
*
adapter
,
u8
reg_idx
)
{
{
int
tc
=
-
1
;
int
tc
=
-
1
;
int
dcb_i
=
adapter
->
ring_feature
[
RING_F_DCB
].
indices
;
int
dcb_i
=
adapter
->
ring_feature
[
RING_F_DCB
].
indices
;
...
@@ -5173,7 +5173,6 @@ static int __devinit ixgbe_sw_init(struct ixgbe_adapter *adapter)
...
@@ -5173,7 +5173,6 @@ static int __devinit ixgbe_sw_init(struct ixgbe_adapter *adapter)
adapter
->
dcb_cfg
.
bw_percentage
[
DCB_RX_CONFIG
][
0
]
=
100
;
adapter
->
dcb_cfg
.
bw_percentage
[
DCB_RX_CONFIG
][
0
]
=
100
;
adapter
->
dcb_cfg
.
rx_pba_cfg
=
pba_equal
;
adapter
->
dcb_cfg
.
rx_pba_cfg
=
pba_equal
;
adapter
->
dcb_cfg
.
pfc_mode_enable
=
false
;
adapter
->
dcb_cfg
.
pfc_mode_enable
=
false
;
adapter
->
dcb_cfg
.
round_robin_enable
=
false
;
adapter
->
dcb_set_bitmap
=
0x00
;
adapter
->
dcb_set_bitmap
=
0x00
;
ixgbe_copy_dcb_cfg
(
&
adapter
->
dcb_cfg
,
&
adapter
->
temp_dcb_cfg
,
ixgbe_copy_dcb_cfg
(
&
adapter
->
dcb_cfg
,
&
adapter
->
temp_dcb_cfg
,
adapter
->
ring_feature
[
RING_F_DCB
].
indices
);
adapter
->
ring_feature
[
RING_F_DCB
].
indices
);
...
@@ -5610,6 +5609,10 @@ static int __ixgbe_shutdown(struct pci_dev *pdev, bool *enable_wake)
...
@@ -5610,6 +5609,10 @@ static int __ixgbe_shutdown(struct pci_dev *pdev, bool *enable_wake)
}
}
ixgbe_clear_interrupt_scheme
(
adapter
);
ixgbe_clear_interrupt_scheme
(
adapter
);
#ifdef CONFIG_DCB
kfree
(
adapter
->
ixgbe_ieee_pfc
);
kfree
(
adapter
->
ixgbe_ieee_ets
);
#endif
#ifdef CONFIG_PM
#ifdef CONFIG_PM
retval
=
pci_save_state
(
pdev
);
retval
=
pci_save_state
(
pdev
);
...
@@ -6099,7 +6102,10 @@ static void ixgbe_watchdog_task(struct work_struct *work)
...
@@ -6099,7 +6102,10 @@ static void ixgbe_watchdog_task(struct work_struct *work)
(
link_speed
==
IXGBE_LINK_SPEED_10GB_FULL
?
(
link_speed
==
IXGBE_LINK_SPEED_10GB_FULL
?
"10 Gbps"
:
"10 Gbps"
:
(
link_speed
==
IXGBE_LINK_SPEED_1GB_FULL
?
(
link_speed
==
IXGBE_LINK_SPEED_1GB_FULL
?
"1 Gbps"
:
"unknown speed"
)),
"1 Gbps"
:
(
link_speed
==
IXGBE_LINK_SPEED_100_FULL
?
"100 Mbps"
:
"unknown speed"
))),
((
flow_rx
&&
flow_tx
)
?
"RX/TX"
:
((
flow_rx
&&
flow_tx
)
?
"RX/TX"
:
(
flow_rx
?
"RX"
:
(
flow_rx
?
"RX"
:
(
flow_tx
?
"TX"
:
"None"
))));
(
flow_tx
?
"TX"
:
"None"
))));
...
@@ -7704,16 +7710,6 @@ static int ixgbe_notify_dca(struct notifier_block *nb, unsigned long event,
...
@@ -7704,16 +7710,6 @@ static int ixgbe_notify_dca(struct notifier_block *nb, unsigned long event,
#endif
/* CONFIG_IXGBE_DCA */
#endif
/* CONFIG_IXGBE_DCA */
/**
* ixgbe_get_hw_dev return device
* used by hardware layer to print debugging information
**/
struct
net_device
*
ixgbe_get_hw_dev
(
struct
ixgbe_hw
*
hw
)
{
struct
ixgbe_adapter
*
adapter
=
hw
->
back
;
return
adapter
->
netdev
;
}
module_exit
(
ixgbe_exit_module
);
module_exit
(
ixgbe_exit_module
);
/* ixgbe_main.c */
/* ixgbe_main.c */
drivers/net/ixgbe/ixgbe_mbx.c
View file @
58bb4bd0
...
@@ -437,6 +437,7 @@ static s32 ixgbe_read_mbx_pf(struct ixgbe_hw *hw, u32 *msg, u16 size,
...
@@ -437,6 +437,7 @@ static s32 ixgbe_read_mbx_pf(struct ixgbe_hw *hw, u32 *msg, u16 size,
return
ret_val
;
return
ret_val
;
}
}
#ifdef CONFIG_PCI_IOV
/**
/**
* ixgbe_init_mbx_params_pf - set initial values for pf mailbox
* ixgbe_init_mbx_params_pf - set initial values for pf mailbox
* @hw: pointer to the HW structure
* @hw: pointer to the HW structure
...
@@ -465,6 +466,7 @@ void ixgbe_init_mbx_params_pf(struct ixgbe_hw *hw)
...
@@ -465,6 +466,7 @@ void ixgbe_init_mbx_params_pf(struct ixgbe_hw *hw)
break
;
break
;
}
}
}
}
#endif
/* CONFIG_PCI_IOV */
struct
ixgbe_mbx_operations
mbx_ops_generic
=
{
struct
ixgbe_mbx_operations
mbx_ops_generic
=
{
.
read
=
ixgbe_read_mbx_pf
,
.
read
=
ixgbe_read_mbx_pf
,
...
...
drivers/net/ixgbe/ixgbe_mbx.h
View file @
58bb4bd0
...
@@ -86,7 +86,9 @@ s32 ixgbe_write_mbx(struct ixgbe_hw *, u32 *, u16, u16);
...
@@ -86,7 +86,9 @@ s32 ixgbe_write_mbx(struct ixgbe_hw *, u32 *, u16, u16);
s32
ixgbe_check_for_msg
(
struct
ixgbe_hw
*
,
u16
);
s32
ixgbe_check_for_msg
(
struct
ixgbe_hw
*
,
u16
);
s32
ixgbe_check_for_ack
(
struct
ixgbe_hw
*
,
u16
);
s32
ixgbe_check_for_ack
(
struct
ixgbe_hw
*
,
u16
);
s32
ixgbe_check_for_rst
(
struct
ixgbe_hw
*
,
u16
);
s32
ixgbe_check_for_rst
(
struct
ixgbe_hw
*
,
u16
);
#ifdef CONFIG_PCI_IOV
void
ixgbe_init_mbx_params_pf
(
struct
ixgbe_hw
*
);
void
ixgbe_init_mbx_params_pf
(
struct
ixgbe_hw
*
);
#endif
/* CONFIG_PCI_IOV */
extern
struct
ixgbe_mbx_operations
mbx_ops_generic
;
extern
struct
ixgbe_mbx_operations
mbx_ops_generic
;
...
...
include/linux/dcbnl.h
View file @
58bb4bd0
...
@@ -25,6 +25,11 @@
...
@@ -25,6 +25,11 @@
/* IEEE 802.1Qaz std supported values */
/* IEEE 802.1Qaz std supported values */
#define IEEE_8021QAZ_MAX_TCS 8
#define IEEE_8021QAZ_MAX_TCS 8
#define IEEE_8021QAZ_TSA_STRICT 0
#define IEEE_8021QAZ_TSA_CB_SHABER 1
#define IEEE_8021QAZ_TSA_ETS 2
#define IEEE_8021QAZ_TSA_VENDOR 255
/* This structure contains the IEEE 802.1Qaz ETS managed object
/* This structure contains the IEEE 802.1Qaz ETS managed object
*
*
* @willing: willing bit in ETS configuratin TLV
* @willing: willing bit in ETS configuratin TLV
...
...
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