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
290f5e3b
Commit
290f5e3b
authored
Feb 24, 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
dca8b089
c2b6a059
Changes
11
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
174 additions
and
80 deletions
+174
-80
drivers/net/igb/e1000_defines.h
drivers/net/igb/e1000_defines.h
+7
-0
drivers/net/igb/e1000_regs.h
drivers/net/igb/e1000_regs.h
+4
-0
drivers/net/igb/igb.h
drivers/net/igb/igb.h
+2
-0
drivers/net/igb/igb_main.c
drivers/net/igb/igb_main.c
+88
-4
drivers/net/igbvf/igbvf.h
drivers/net/igbvf/igbvf.h
+0
-3
drivers/net/igbvf/netdev.c
drivers/net/igbvf/netdev.c
+0
-60
drivers/net/ixgbe/ixgbe_main.c
drivers/net/ixgbe/ixgbe_main.c
+16
-2
drivers/net/ixgbe/ixgbe_sriov.c
drivers/net/ixgbe/ixgbe_sriov.c
+28
-1
drivers/net/ixgbe/ixgbe_type.h
drivers/net/ixgbe/ixgbe_type.h
+2
-0
drivers/net/ixgbevf/defines.h
drivers/net/ixgbevf/defines.h
+2
-0
drivers/net/ixgbevf/ixgbevf_main.c
drivers/net/ixgbevf/ixgbevf_main.c
+25
-10
No files found.
drivers/net/igb/e1000_defines.h
View file @
290f5e3b
...
...
@@ -770,4 +770,11 @@
#define E1000_PCIEMISC_LX_DECISION 0x00000080
/* Lx power decision based
on DMA coal */
/* Tx Rate-Scheduler Config fields */
#define E1000_RTTBCNRC_RS_ENA 0x80000000
#define E1000_RTTBCNRC_RF_DEC_MASK 0x00003FFF
#define E1000_RTTBCNRC_RF_INT_SHIFT 14
#define E1000_RTTBCNRC_RF_INT_MASK \
(E1000_RTTBCNRC_RF_DEC_MASK << E1000_RTTBCNRC_RF_INT_SHIFT)
#endif
drivers/net/igb/e1000_regs.h
View file @
290f5e3b
...
...
@@ -106,6 +106,10 @@
#define E1000_RQDPC(_n) (0x0C030 + ((_n) * 0x40))
/* TX Rate Limit Registers */
#define E1000_RTTDQSEL 0x3604
/* Tx Desc Plane Queue Select - WO */
#define E1000_RTTBCNRC 0x36B0
/* Tx BCN Rate-Scheduler Config - WO */
/* Split and Replication RX Control - RW */
#define E1000_RXPBS 0x02404
/* Rx Packet Buffer Size - RW */
/*
...
...
drivers/net/igb/igb.h
View file @
290f5e3b
...
...
@@ -77,6 +77,7 @@ struct vf_data_storage {
unsigned
long
last_nack
;
u16
pf_vlan
;
/* When set, guest VLAN config not allowed. */
u16
pf_qos
;
u16
tx_rate
;
};
#define IGB_VF_FLAG_CTS 0x00000001
/* VF is clear to send data */
...
...
@@ -323,6 +324,7 @@ struct igb_adapter {
u16
rx_ring_count
;
unsigned
int
vfs_allocated_count
;
struct
vf_data_storage
*
vf_data
;
int
vf_rate_link_speed
;
u32
rss_queues
;
u32
wvbr
;
};
...
...
drivers/net/igb/igb_main.c
View file @
290f5e3b
...
...
@@ -50,12 +50,12 @@
#endif
#include "igb.h"
#define DRV_VERSION "2.
1.0
-k2"
#define DRV_VERSION "2.
4.13
-k2"
char
igb_driver_name
[]
=
"igb"
;
char
igb_driver_version
[]
=
DRV_VERSION
;
static
const
char
igb_driver_string
[]
=
"Intel(R) Gigabit Ethernet Network Driver"
;
static
const
char
igb_copyright
[]
=
"Copyright (c) 2007-20
09
Intel Corporation."
;
static
const
char
igb_copyright
[]
=
"Copyright (c) 2007-20
11
Intel Corporation."
;
static
const
struct
e1000_info
*
igb_info_tbl
[]
=
{
[
board_82575
]
=
&
e1000_82575_info
,
...
...
@@ -150,6 +150,7 @@ static int igb_ndo_set_vf_vlan(struct net_device *netdev,
static
int
igb_ndo_set_vf_bw
(
struct
net_device
*
netdev
,
int
vf
,
int
tx_rate
);
static
int
igb_ndo_get_vf_config
(
struct
net_device
*
netdev
,
int
vf
,
struct
ifla_vf_info
*
ivi
);
static
void
igb_check_vf_rate_limit
(
struct
igb_adapter
*
);
#ifdef CONFIG_PM
static
int
igb_suspend
(
struct
pci_dev
*
,
pm_message_t
);
...
...
@@ -3511,6 +3512,7 @@ static void igb_watchdog_task(struct work_struct *work)
netif_carrier_on
(
netdev
);
igb_ping_all_vfs
(
adapter
);
igb_check_vf_rate_limit
(
adapter
);
/* link state has changed, schedule phy info update */
if
(
!
test_bit
(
__IGB_DOWN
,
&
adapter
->
state
))
...
...
@@ -6599,9 +6601,91 @@ static int igb_ndo_set_vf_mac(struct net_device *netdev, int vf, u8 *mac)
return
igb_set_vf_mac
(
adapter
,
vf
,
mac
);
}
static
int
igb_link_mbps
(
int
internal_link_speed
)
{
switch
(
internal_link_speed
)
{
case
SPEED_100
:
return
100
;
case
SPEED_1000
:
return
1000
;
default:
return
0
;
}
}
static
void
igb_set_vf_rate_limit
(
struct
e1000_hw
*
hw
,
int
vf
,
int
tx_rate
,
int
link_speed
)
{
int
rf_dec
,
rf_int
;
u32
bcnrc_val
;
if
(
tx_rate
!=
0
)
{
/* Calculate the rate factor values to set */
rf_int
=
link_speed
/
tx_rate
;
rf_dec
=
(
link_speed
-
(
rf_int
*
tx_rate
));
rf_dec
=
(
rf_dec
*
(
1
<<
E1000_RTTBCNRC_RF_INT_SHIFT
))
/
tx_rate
;
bcnrc_val
=
E1000_RTTBCNRC_RS_ENA
;
bcnrc_val
|=
((
rf_int
<<
E1000_RTTBCNRC_RF_INT_SHIFT
)
&
E1000_RTTBCNRC_RF_INT_MASK
);
bcnrc_val
|=
(
rf_dec
&
E1000_RTTBCNRC_RF_DEC_MASK
);
}
else
{
bcnrc_val
=
0
;
}
wr32
(
E1000_RTTDQSEL
,
vf
);
/* vf X uses queue X */
wr32
(
E1000_RTTBCNRC
,
bcnrc_val
);
}
static
void
igb_check_vf_rate_limit
(
struct
igb_adapter
*
adapter
)
{
int
actual_link_speed
,
i
;
bool
reset_rate
=
false
;
/* VF TX rate limit was not set or not supported */
if
((
adapter
->
vf_rate_link_speed
==
0
)
||
(
adapter
->
hw
.
mac
.
type
!=
e1000_82576
))
return
;
actual_link_speed
=
igb_link_mbps
(
adapter
->
link_speed
);
if
(
actual_link_speed
!=
adapter
->
vf_rate_link_speed
)
{
reset_rate
=
true
;
adapter
->
vf_rate_link_speed
=
0
;
dev_info
(
&
adapter
->
pdev
->
dev
,
"Link speed has been changed. VF Transmit "
"rate is disabled
\n
"
);
}
for
(
i
=
0
;
i
<
adapter
->
vfs_allocated_count
;
i
++
)
{
if
(
reset_rate
)
adapter
->
vf_data
[
i
].
tx_rate
=
0
;
igb_set_vf_rate_limit
(
&
adapter
->
hw
,
i
,
adapter
->
vf_data
[
i
].
tx_rate
,
actual_link_speed
);
}
}
static
int
igb_ndo_set_vf_bw
(
struct
net_device
*
netdev
,
int
vf
,
int
tx_rate
)
{
struct
igb_adapter
*
adapter
=
netdev_priv
(
netdev
);
struct
e1000_hw
*
hw
=
&
adapter
->
hw
;
int
actual_link_speed
;
if
(
hw
->
mac
.
type
!=
e1000_82576
)
return
-
EOPNOTSUPP
;
actual_link_speed
=
igb_link_mbps
(
adapter
->
link_speed
);
if
((
vf
>=
adapter
->
vfs_allocated_count
)
||
(
!
(
rd32
(
E1000_STATUS
)
&
E1000_STATUS_LU
))
||
(
tx_rate
<
0
)
||
(
tx_rate
>
actual_link_speed
))
return
-
EINVAL
;
adapter
->
vf_rate_link_speed
=
actual_link_speed
;
adapter
->
vf_data
[
vf
].
tx_rate
=
(
u16
)
tx_rate
;
igb_set_vf_rate_limit
(
hw
,
vf
,
tx_rate
,
actual_link_speed
);
return
0
;
}
static
int
igb_ndo_get_vf_config
(
struct
net_device
*
netdev
,
...
...
@@ -6612,7 +6696,7 @@ static int igb_ndo_get_vf_config(struct net_device *netdev,
return
-
EINVAL
;
ivi
->
vf
=
vf
;
memcpy
(
&
ivi
->
mac
,
adapter
->
vf_data
[
vf
].
vf_mac_addresses
,
ETH_ALEN
);
ivi
->
tx_rate
=
0
;
ivi
->
tx_rate
=
adapter
->
vf_data
[
vf
].
tx_rate
;
ivi
->
vlan
=
adapter
->
vf_data
[
vf
].
pf_vlan
;
ivi
->
qos
=
adapter
->
vf_data
[
vf
].
pf_qos
;
return
0
;
...
...
drivers/net/igbvf/igbvf.h
View file @
290f5e3b
...
...
@@ -201,9 +201,6 @@ struct igbvf_adapter {
unsigned
int
restart_queue
;
u32
txd_cmd
;
bool
detect_tx_hung
;
u8
tx_timeout_factor
;
u32
tx_int_delay
;
u32
tx_abs_int_delay
;
...
...
drivers/net/igbvf/netdev.c
View file @
290f5e3b
...
...
@@ -396,35 +396,6 @@ static void igbvf_put_txbuf(struct igbvf_adapter *adapter,
buffer_info
->
time_stamp
=
0
;
}
static
void
igbvf_print_tx_hang
(
struct
igbvf_adapter
*
adapter
)
{
struct
igbvf_ring
*
tx_ring
=
adapter
->
tx_ring
;
unsigned
int
i
=
tx_ring
->
next_to_clean
;
unsigned
int
eop
=
tx_ring
->
buffer_info
[
i
].
next_to_watch
;
union
e1000_adv_tx_desc
*
eop_desc
=
IGBVF_TX_DESC_ADV
(
*
tx_ring
,
eop
);
/* detected Tx unit hang */
dev_err
(
&
adapter
->
pdev
->
dev
,
"Detected Tx Unit Hang:
\n
"
" TDH <%x>
\n
"
" TDT <%x>
\n
"
" next_to_use <%x>
\n
"
" next_to_clean <%x>
\n
"
"buffer_info[next_to_clean]:
\n
"
" time_stamp <%lx>
\n
"
" next_to_watch <%x>
\n
"
" jiffies <%lx>
\n
"
" next_to_watch.status <%x>
\n
"
,
readl
(
adapter
->
hw
.
hw_addr
+
tx_ring
->
head
),
readl
(
adapter
->
hw
.
hw_addr
+
tx_ring
->
tail
),
tx_ring
->
next_to_use
,
tx_ring
->
next_to_clean
,
tx_ring
->
buffer_info
[
eop
].
time_stamp
,
eop
,
jiffies
,
eop_desc
->
wb
.
status
);
}
/**
* igbvf_setup_tx_resources - allocate Tx resources (Descriptors)
* @adapter: board private structure
...
...
@@ -771,7 +742,6 @@ static void igbvf_set_itr(struct igbvf_adapter *adapter)
static
bool
igbvf_clean_tx_irq
(
struct
igbvf_ring
*
tx_ring
)
{
struct
igbvf_adapter
*
adapter
=
tx_ring
->
adapter
;
struct
e1000_hw
*
hw
=
&
adapter
->
hw
;
struct
net_device
*
netdev
=
adapter
->
netdev
;
struct
igbvf_buffer
*
buffer_info
;
struct
sk_buff
*
skb
;
...
...
@@ -832,22 +802,6 @@ static bool igbvf_clean_tx_irq(struct igbvf_ring *tx_ring)
}
}
if
(
adapter
->
detect_tx_hung
)
{
/* Detect a transmit hang in hardware, this serializes the
* check with the clearing of time_stamp and movement of i */
adapter
->
detect_tx_hung
=
false
;
if
(
tx_ring
->
buffer_info
[
i
].
time_stamp
&&
time_after
(
jiffies
,
tx_ring
->
buffer_info
[
i
].
time_stamp
+
(
adapter
->
tx_timeout_factor
*
HZ
))
&&
!
(
er32
(
STATUS
)
&
E1000_STATUS_TXOFF
))
{
tx_desc
=
IGBVF_TX_DESC_ADV
(
*
tx_ring
,
i
);
/* detected Tx unit hang */
igbvf_print_tx_hang
(
adapter
);
netif_stop_queue
(
netdev
);
}
}
adapter
->
net_stats
.
tx_bytes
+=
total_bytes
;
adapter
->
net_stats
.
tx_packets
+=
total_packets
;
return
count
<
tx_ring
->
count
;
...
...
@@ -1863,17 +1817,6 @@ static void igbvf_watchdog_task(struct work_struct *work)
&
adapter
->
link_duplex
);
igbvf_print_link_info
(
adapter
);
/* adjust timeout factor according to speed/duplex */
adapter
->
tx_timeout_factor
=
1
;
switch
(
adapter
->
link_speed
)
{
case
SPEED_10
:
adapter
->
tx_timeout_factor
=
16
;
break
;
case
SPEED_100
:
/* maybe add some timeout factor ? */
break
;
}
netif_carrier_on
(
netdev
);
netif_wake_queue
(
netdev
);
}
...
...
@@ -1907,9 +1850,6 @@ static void igbvf_watchdog_task(struct work_struct *work)
/* Cause software interrupt to ensure Rx ring is cleaned */
ew32
(
EICS
,
adapter
->
rx_ring
->
eims_value
);
/* Force detection of hung controller every watchdog period */
adapter
->
detect_tx_hung
=
1
;
/* Reset the timer */
if
(
!
test_bit
(
__IGBVF_DOWN
,
&
adapter
->
state
))
mod_timer
(
&
adapter
->
watchdog_timer
,
...
...
drivers/net/ixgbe/ixgbe_main.c
View file @
290f5e3b
...
...
@@ -3077,6 +3077,14 @@ void ixgbe_configure_rx_ring(struct ixgbe_adapter *adapter,
ixgbe_configure_srrctl
(
adapter
,
ring
);
ixgbe_configure_rscctl
(
adapter
,
ring
);
/* If operating in IOV mode set RLPML for X540 */
if
((
adapter
->
flags
&
IXGBE_FLAG_SRIOV_ENABLED
)
&&
hw
->
mac
.
type
==
ixgbe_mac_X540
)
{
rxdctl
&=
~
IXGBE_RXDCTL_RLPMLMASK
;
rxdctl
|=
((
ring
->
netdev
->
mtu
+
ETH_HLEN
+
ETH_FCS_LEN
+
VLAN_HLEN
)
|
IXGBE_RXDCTL_RLPML_EN
);
}
if
(
hw
->
mac
.
type
==
ixgbe_mac_82598EB
)
{
/*
* enable cache line friendly hardware writes:
...
...
@@ -5441,8 +5449,14 @@ static int ixgbe_change_mtu(struct net_device *netdev, int new_mtu)
int
max_frame
=
new_mtu
+
ETH_HLEN
+
ETH_FCS_LEN
;
/* MTU < 68 is an error and causes problems on some kernels */
if
(
adapter
->
flags
&
IXGBE_FLAG_SRIOV_ENABLED
&&
hw
->
mac
.
type
!=
ixgbe_mac_X540
)
{
if
((
new_mtu
<
68
)
||
(
max_frame
>
MAXIMUM_ETHERNET_VLAN_SIZE
))
return
-
EINVAL
;
}
else
{
if
((
new_mtu
<
68
)
||
(
max_frame
>
IXGBE_MAX_JUMBO_FRAME_SIZE
))
return
-
EINVAL
;
}
e_info
(
probe
,
"changing MTU from %d to %d
\n
"
,
netdev
->
mtu
,
new_mtu
);
/* must set new MTU before calling down or up */
...
...
drivers/net/ixgbe/ixgbe_sriov.c
View file @
290f5e3b
...
...
@@ -110,6 +110,33 @@ static int ixgbe_set_vf_vlan(struct ixgbe_adapter *adapter, int add, int vid,
return
adapter
->
hw
.
mac
.
ops
.
set_vfta
(
&
adapter
->
hw
,
vid
,
vf
,
(
bool
)
add
);
}
void
ixgbe_set_vf_lpe
(
struct
ixgbe_adapter
*
adapter
,
u32
*
msgbuf
)
{
struct
ixgbe_hw
*
hw
=
&
adapter
->
hw
;
int
new_mtu
=
msgbuf
[
1
];
u32
max_frs
;
int
max_frame
=
new_mtu
+
ETH_HLEN
+
ETH_FCS_LEN
;
/* Only X540 supports jumbo frames in IOV mode */
if
(
adapter
->
hw
.
mac
.
type
!=
ixgbe_mac_X540
)
return
;
/* MTU < 68 is an error and causes problems on some kernels */
if
((
new_mtu
<
68
)
||
(
max_frame
>
IXGBE_MAX_JUMBO_FRAME_SIZE
))
{
e_err
(
drv
,
"VF mtu %d out of range
\n
"
,
new_mtu
);
return
;
}
max_frs
=
(
IXGBE_READ_REG
(
hw
,
IXGBE_MAXFRS
)
&
IXGBE_MHADD_MFS_MASK
)
>>
IXGBE_MHADD_MFS_SHIFT
;
if
(
max_frs
<
new_mtu
)
{
max_frs
=
new_mtu
<<
IXGBE_MHADD_MFS_SHIFT
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_MAXFRS
,
max_frs
);
}
e_info
(
hw
,
"VF requests change max MTU to %d
\n
"
,
new_mtu
);
}
static
void
ixgbe_set_vmolr
(
struct
ixgbe_hw
*
hw
,
u32
vf
,
bool
aupe
)
{
u32
vmolr
=
IXGBE_READ_REG
(
hw
,
IXGBE_VMOLR
(
vf
));
...
...
@@ -302,7 +329,7 @@ static int ixgbe_rcv_msg_from_vf(struct ixgbe_adapter *adapter, u32 vf)
hash_list
,
vf
);
break
;
case
IXGBE_VF_SET_LPE
:
WARN_ON
((
msgbuf
[
0
]
&
0xFFFF
)
==
IXGBE_VF_SET_LPE
);
ixgbe_set_vf_lpe
(
adapter
,
msgbuf
);
break
;
case
IXGBE_VF_SET_VLAN
:
add
=
(
msgbuf
[
0
]
&
IXGBE_VT_MSGINFO_MASK
)
...
...
drivers/net/ixgbe/ixgbe_type.h
View file @
290f5e3b
...
...
@@ -1680,6 +1680,8 @@
#define IXGBE_RXCTRL_DMBYPS 0x00000002
/* Descriptor Monitor Bypass */
#define IXGBE_RXDCTL_ENABLE 0x02000000
/* Enable specific Rx Queue */
#define IXGBE_RXDCTL_VME 0x40000000
/* VLAN mode enable */
#define IXGBE_RXDCTL_RLPMLMASK 0x00003FFF
/* Only supported on the X540 */
#define IXGBE_RXDCTL_RLPML_EN 0x00008000
#define IXGBE_FCTRL_SBP 0x00000002
/* Store Bad Packet */
#define IXGBE_FCTRL_MPE 0x00000100
/* Multicast Promiscuous Ena*/
...
...
drivers/net/ixgbevf/defines.h
View file @
290f5e3b
...
...
@@ -65,6 +65,8 @@ typedef u32 ixgbe_link_speed;
#define IXGBE_RXCTRL_DMBYPS 0x00000002
/* Descriptor Monitor Bypass */
#define IXGBE_RXDCTL_ENABLE 0x02000000
/* Enable specific Rx Queue */
#define IXGBE_RXDCTL_VME 0x40000000
/* VLAN mode enable */
#define IXGBE_RXDCTL_RLPMLMASK 0x00003FFF
/* Only supported on the X540 */
#define IXGBE_RXDCTL_RLPML_EN 0x00008000
/* DCA Control */
#define IXGBE_DCA_TXCTRL_TX_WB_RO_EN (1 << 11)
/* Tx Desc writeback RO bit */
...
...
drivers/net/ixgbevf/ixgbevf_main.c
View file @
290f5e3b
...
...
@@ -51,7 +51,7 @@ char ixgbevf_driver_name[] = "ixgbevf";
static
const
char
ixgbevf_driver_string
[]
=
"Intel(R) 82599 Virtual Function"
;
#define DRV_VERSION "1.
0.19
-k0"
#define DRV_VERSION "1.
1.0
-k0"
const
char
ixgbevf_driver_version
[]
=
DRV_VERSION
;
static
char
ixgbevf_copyright
[]
=
"Copyright (c) 2009 - 2010 Intel Corporation."
;
...
...
@@ -107,7 +107,7 @@ static inline void ixgbevf_release_rx_desc(struct ixgbe_hw *hw,
}
/*
* ixgbe
_set_ivar - set the IVAR registers, mapping
interrupt causes to vectors
* ixgbe
vf_set_ivar - set IVAR registers - maps
interrupt causes to vectors
* @adapter: pointer to adapter struct
* @direction: 0 for Rx, 1 for Tx, -1 for other causes
* @queue: queue to map the corresponding interrupt to
...
...
@@ -1017,7 +1017,7 @@ static irqreturn_t ixgbevf_msix_clean_tx(int irq, void *data)
}
/**
* ixgbe_msix_clean_rx - single unshared vector rx clean (all queues)
* ixgbe
vf
_msix_clean_rx - single unshared vector rx clean (all queues)
* @irq: unused
* @data: pointer to our q_vector struct for this interrupt vector
**/
...
...
@@ -1665,6 +1665,11 @@ static int ixgbevf_up_complete(struct ixgbevf_adapter *adapter)
j
=
adapter
->
rx_ring
[
i
].
reg_idx
;
rxdctl
=
IXGBE_READ_REG
(
hw
,
IXGBE_VFRXDCTL
(
j
));
rxdctl
|=
IXGBE_RXDCTL_ENABLE
;
if
(
hw
->
mac
.
type
==
ixgbe_mac_X540_vf
)
{
rxdctl
&=
~
IXGBE_RXDCTL_RLPMLMASK
;
rxdctl
|=
((
netdev
->
mtu
+
ETH_HLEN
+
ETH_FCS_LEN
)
|
IXGBE_RXDCTL_RLPML_EN
);
}
IXGBE_WRITE_REG
(
hw
,
IXGBE_VFRXDCTL
(
j
),
rxdctl
);
ixgbevf_rx_desc_queue_enable
(
adapter
,
i
);
}
...
...
@@ -1967,7 +1972,7 @@ static void ixgbevf_acquire_msix_vectors(struct ixgbevf_adapter *adapter,
}
/*
* ixgbe_set_num_queues: Allocate queues for device, feature dependant
* ixgbe
vf
_set_num_queues: Allocate queues for device, feature dependant
* @adapter: board private structure to initialize
*
* This is the top level queue allocation routine. The order here is very
...
...
@@ -3217,10 +3222,16 @@ static int ixgbevf_set_mac(struct net_device *netdev, void *p)
static
int
ixgbevf_change_mtu
(
struct
net_device
*
netdev
,
int
new_mtu
)
{
struct
ixgbevf_adapter
*
adapter
=
netdev_priv
(
netdev
);
struct
ixgbe_hw
*
hw
=
&
adapter
->
hw
;
int
max_frame
=
new_mtu
+
ETH_HLEN
+
ETH_FCS_LEN
;
int
max_possible_frame
=
MAXIMUM_ETHERNET_VLAN_SIZE
;
u32
msg
[
2
];
if
(
adapter
->
hw
.
mac
.
type
==
ixgbe_mac_X540_vf
)
max_possible_frame
=
IXGBE_MAX_JUMBO_FRAME_SIZE
;
/* MTU < 68 is an error and causes problems on some kernels */
if
((
new_mtu
<
68
)
||
(
max_frame
>
MAXIMUM_ETHERNET_VLAN_SIZE
))
if
((
new_mtu
<
68
)
||
(
max_frame
>
max_possible_frame
))
return
-
EINVAL
;
hw_dbg
(
&
adapter
->
hw
,
"changing MTU from %d to %d
\n
"
,
...
...
@@ -3228,6 +3239,10 @@ static int ixgbevf_change_mtu(struct net_device *netdev, int new_mtu)
/* must set new MTU before calling down or up */
netdev
->
mtu
=
new_mtu
;
msg
[
0
]
=
IXGBE_VF_SET_LPE
;
msg
[
1
]
=
max_frame
;
hw
->
mbx
.
ops
.
write_posted
(
hw
,
msg
,
2
);
if
(
netif_running
(
netdev
))
ixgbevf_reinit_locked
(
adapter
);
...
...
@@ -3519,9 +3534,9 @@ static struct pci_driver ixgbevf_driver = {
};
/**
* ixgbe_init_module - Driver Registration Routine
* ixgbe
vf
_init_module - Driver Registration Routine
*
* ixgbe_init_module is the first routine called when the driver is
* ixgbe
vf
_init_module is the first routine called when the driver is
* loaded. All it does is register with the PCI subsystem.
**/
static
int
__init
ixgbevf_init_module
(
void
)
...
...
@@ -3539,9 +3554,9 @@ static int __init ixgbevf_init_module(void)
module_init
(
ixgbevf_init_module
);
/**
* ixgbe_exit_module - Driver Exit Cleanup Routine
* ixgbe
vf
_exit_module - Driver Exit Cleanup Routine
*
* ixgbe_exit_module is called just before the driver is removed
* ixgbe
vf
_exit_module is called just before the driver is removed
* from memory.
**/
static
void
__exit
ixgbevf_exit_module
(
void
)
...
...
@@ -3551,7 +3566,7 @@ static void __exit ixgbevf_exit_module(void)
#ifdef DEBUG
/**
* ixgbe_get_hw_dev_name - return device name string
* ixgbe
vf
_get_hw_dev_name - return device name string
* used by hardware layer to print debugging information
**/
char
*
ixgbevf_get_hw_dev_name
(
struct
ixgbe_hw
*
hw
)
...
...
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