Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
fcb11849
Commit
fcb11849
authored
Aug 31, 2012
by
David S. Miller
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next
parents
80f0fd8a
dd1fe113
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
164 additions
and
41 deletions
+164
-41
drivers/net/ethernet/intel/e1000e/82571.c
drivers/net/ethernet/intel/e1000e/82571.c
+2
-2
drivers/net/ethernet/intel/e1000e/ethtool.c
drivers/net/ethernet/intel/e1000e/ethtool.c
+2
-1
drivers/net/ethernet/intel/e1000e/netdev.c
drivers/net/ethernet/intel/e1000e/netdev.c
+13
-6
drivers/net/ethernet/intel/ixgbevf/ixgbevf.h
drivers/net/ethernet/intel/ixgbevf/ixgbevf.h
+3
-1
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
+129
-31
drivers/net/ethernet/intel/ixgbevf/vf.c
drivers/net/ethernet/intel/ixgbevf/vf.c
+14
-0
drivers/net/ethernet/intel/ixgbevf/vf.h
drivers/net/ethernet/intel/ixgbevf/vf.h
+1
-0
No files found.
drivers/net/ethernet/intel/e1000e/82571.c
View file @
fcb11849
...
...
@@ -653,7 +653,7 @@ static void e1000_put_hw_semaphore_82574(struct e1000_hw *hw)
**/
static
s32
e1000_set_d0_lplu_state_82574
(
struct
e1000_hw
*
hw
,
bool
active
)
{
u
16
data
=
er32
(
POEMB
);
u
32
data
=
er32
(
POEMB
);
if
(
active
)
data
|=
E1000_PHY_CTRL_D0A_LPLU
;
...
...
@@ -677,7 +677,7 @@ static s32 e1000_set_d0_lplu_state_82574(struct e1000_hw *hw, bool active)
**/
static
s32
e1000_set_d3_lplu_state_82574
(
struct
e1000_hw
*
hw
,
bool
active
)
{
u
16
data
=
er32
(
POEMB
);
u
32
data
=
er32
(
POEMB
);
if
(
!
active
)
{
data
&=
~
E1000_PHY_CTRL_NOND0A_LPLU
;
...
...
drivers/net/ethernet/intel/e1000e/ethtool.c
View file @
fcb11849
...
...
@@ -1942,7 +1942,8 @@ static int e1000_set_coalesce(struct net_device *netdev,
return
-
EINVAL
;
if
(
ec
->
rx_coalesce_usecs
==
4
)
{
adapter
->
itr
=
adapter
->
itr_setting
=
4
;
adapter
->
itr_setting
=
4
;
adapter
->
itr
=
adapter
->
itr_setting
;
}
else
if
(
ec
->
rx_coalesce_usecs
<=
3
)
{
adapter
->
itr
=
20000
;
adapter
->
itr_setting
=
ec
->
rx_coalesce_usecs
;
...
...
drivers/net/ethernet/intel/e1000e/netdev.c
View file @
fcb11849
...
...
@@ -56,7 +56,7 @@
#define DRV_EXTRAVERSION "-k"
#define DRV_VERSION "2.
0.0
" DRV_EXTRAVERSION
#define DRV_VERSION "2.
1.4
" DRV_EXTRAVERSION
char
e1000e_driver_name
[]
=
"e1000e"
;
const
char
e1000e_driver_version
[]
=
DRV_VERSION
;
...
...
@@ -3446,7 +3446,7 @@ void e1000e_reset(struct e1000_adapter *adapter)
/*
* if short on Rx space, Rx wins and must trump Tx
* adjustment
or use Early Receive if available
* adjustment
*/
if
(
pba
<
min_rx_space
)
pba
=
min_rx_space
;
...
...
@@ -3755,6 +3755,10 @@ static irqreturn_t e1000_intr_msi_test(int irq, void *data)
e_dbg
(
"icr is %08X
\n
"
,
icr
);
if
(
icr
&
E1000_ICR_RXSEQ
)
{
adapter
->
flags
&=
~
FLAG_MSI_TEST_FAILED
;
/*
* Force memory writes to complete before acknowledging the
* interrupt is handled.
*/
wmb
();
}
...
...
@@ -3796,6 +3800,10 @@ static int e1000_test_msi_interrupt(struct e1000_adapter *adapter)
goto
msi_test_failed
;
}
/*
* Force memory writes to complete before enabling and firing an
* interrupt.
*/
wmb
();
e1000_irq_enable
(
adapter
);
...
...
@@ -3807,7 +3815,7 @@ static int e1000_test_msi_interrupt(struct e1000_adapter *adapter)
e1000_irq_disable
(
adapter
);
rmb
();
rmb
();
/* read flags after interrupt has been fired */
if
(
adapter
->
flags
&
FLAG_MSI_TEST_FAILED
)
{
adapter
->
int_mode
=
E1000E_INT_MODE_LEGACY
;
...
...
@@ -4670,7 +4678,7 @@ static int e1000_tso(struct e1000_ring *tx_ring, struct sk_buff *skb)
struct
e1000_buffer
*
buffer_info
;
unsigned
int
i
;
u32
cmd_length
=
0
;
u16
ipcse
=
0
,
tucse
,
mss
;
u16
ipcse
=
0
,
mss
;
u8
ipcss
,
ipcso
,
tucss
,
tucso
,
hdr_len
;
if
(
!
skb_is_gso
(
skb
))
...
...
@@ -4704,7 +4712,6 @@ static int e1000_tso(struct e1000_ring *tx_ring, struct sk_buff *skb)
ipcso
=
(
void
*
)
&
(
ip_hdr
(
skb
)
->
check
)
-
(
void
*
)
skb
->
data
;
tucss
=
skb_transport_offset
(
skb
);
tucso
=
(
void
*
)
&
(
tcp_hdr
(
skb
)
->
check
)
-
(
void
*
)
skb
->
data
;
tucse
=
0
;
cmd_length
|=
(
E1000_TXD_CMD_DEXT
|
E1000_TXD_CMD_TSE
|
E1000_TXD_CMD_TCP
|
(
skb
->
len
-
(
hdr_len
)));
...
...
@@ -4718,7 +4725,7 @@ static int e1000_tso(struct e1000_ring *tx_ring, struct sk_buff *skb)
context_desc
->
lower_setup
.
ip_fields
.
ipcse
=
cpu_to_le16
(
ipcse
);
context_desc
->
upper_setup
.
tcp_fields
.
tucss
=
tucss
;
context_desc
->
upper_setup
.
tcp_fields
.
tucso
=
tucso
;
context_desc
->
upper_setup
.
tcp_fields
.
tucse
=
cpu_to_le16
(
tucse
)
;
context_desc
->
upper_setup
.
tcp_fields
.
tucse
=
0
;
context_desc
->
tcp_seg_setup
.
fields
.
mss
=
cpu_to_le16
(
mss
);
context_desc
->
tcp_seg_setup
.
fields
.
hdr_len
=
hdr_len
;
context_desc
->
cmd_and_length
=
cpu_to_le32
(
cmd_length
);
...
...
drivers/net/ethernet/intel/ixgbevf/ixgbevf.h
View file @
fcb11849
...
...
@@ -101,7 +101,9 @@ struct ixgbevf_ring {
/* Supported Rx Buffer Sizes */
#define IXGBEVF_RXBUFFER_256 256
/* Used for packet split */
#define IXGBEVF_RXBUFFER_2048 2048
#define IXGBEVF_RXBUFFER_3K 3072
#define IXGBEVF_RXBUFFER_7K 7168
#define IXGBEVF_RXBUFFER_15K 15360
#define IXGBEVF_MAX_RXBUFFER 16384
/* largest size for single descriptor */
#define IXGBEVF_RX_HDR_SIZE IXGBEVF_RXBUFFER_256
...
...
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
View file @
fcb11849
...
...
@@ -1057,15 +1057,46 @@ static void ixgbevf_configure_srrctl(struct ixgbevf_adapter *adapter, int index)
srrctl
|=
IXGBE_SRRCTL_DESCTYPE_ADV_ONEBUF
;
if
(
rx_ring
->
rx_buf_len
==
MAXIMUM_ETHERNET_VLAN_SIZE
)
srrctl
|=
IXGBEVF_RXBUFFER_2048
>>
IXGBE_SRRCTL_BSIZEPKT_SHIFT
;
else
srrctl
|=
rx_ring
->
rx_buf_len
>>
IXGBE_SRRCTL_BSIZEPKT_SHIFT
;
srrctl
|=
ALIGN
(
rx_ring
->
rx_buf_len
,
1024
)
>>
IXGBE_SRRCTL_BSIZEPKT_SHIFT
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_VFSRRCTL
(
index
),
srrctl
);
}
static
void
ixgbevf_set_rx_buffer_len
(
struct
ixgbevf_adapter
*
adapter
)
{
struct
ixgbe_hw
*
hw
=
&
adapter
->
hw
;
struct
net_device
*
netdev
=
adapter
->
netdev
;
int
max_frame
=
netdev
->
mtu
+
ETH_HLEN
+
ETH_FCS_LEN
;
int
i
;
u16
rx_buf_len
;
/* notify the PF of our intent to use this size of frame */
ixgbevf_rlpml_set_vf
(
hw
,
max_frame
);
/* PF will allow an extra 4 bytes past for vlan tagged frames */
max_frame
+=
VLAN_HLEN
;
/*
* Make best use of allocation by using all but 1K of a
* power of 2 allocation that will be used for skb->head.
*/
if
((
hw
->
mac
.
type
==
ixgbe_mac_X540_vf
)
&&
(
max_frame
<=
MAXIMUM_ETHERNET_VLAN_SIZE
))
rx_buf_len
=
MAXIMUM_ETHERNET_VLAN_SIZE
;
else
if
(
max_frame
<=
IXGBEVF_RXBUFFER_3K
)
rx_buf_len
=
IXGBEVF_RXBUFFER_3K
;
else
if
(
max_frame
<=
IXGBEVF_RXBUFFER_7K
)
rx_buf_len
=
IXGBEVF_RXBUFFER_7K
;
else
if
(
max_frame
<=
IXGBEVF_RXBUFFER_15K
)
rx_buf_len
=
IXGBEVF_RXBUFFER_15K
;
else
rx_buf_len
=
IXGBEVF_MAX_RXBUFFER
;
for
(
i
=
0
;
i
<
adapter
->
num_rx_queues
;
i
++
)
adapter
->
rx_ring
[
i
].
rx_buf_len
=
rx_buf_len
;
}
/**
* ixgbevf_configure_rx - Configure 82599 VF Receive Unit after Reset
* @adapter: board private structure
...
...
@@ -1076,18 +1107,14 @@ static void ixgbevf_configure_rx(struct ixgbevf_adapter *adapter)
{
u64
rdba
;
struct
ixgbe_hw
*
hw
=
&
adapter
->
hw
;
struct
net_device
*
netdev
=
adapter
->
netdev
;
int
max_frame
=
netdev
->
mtu
+
ETH_HLEN
+
ETH_FCS_LEN
;
int
i
,
j
;
u32
rdlen
;
int
rx_buf_len
;
/* PSRTYPE must be initialized in 82599 */
IXGBE_WRITE_REG
(
hw
,
IXGBE_VFPSRTYPE
,
0
);
if
(
netdev
->
mtu
<=
ETH_DATA_LEN
)
rx_buf_len
=
MAXIMUM_ETHERNET_VLAN_SIZE
;
else
rx_buf_len
=
ALIGN
(
max_frame
,
1024
);
/* set_rx_buffer_len must be called before ring initialization */
ixgbevf_set_rx_buffer_len
(
adapter
);
rdlen
=
adapter
->
rx_ring
[
0
].
count
*
sizeof
(
union
ixgbe_adv_rx_desc
);
/* Setup the HW Rx Head and Tail Descriptor Pointers and
...
...
@@ -1103,7 +1130,6 @@ static void ixgbevf_configure_rx(struct ixgbevf_adapter *adapter)
IXGBE_WRITE_REG
(
hw
,
IXGBE_VFRDT
(
j
),
0
);
adapter
->
rx_ring
[
i
].
head
=
IXGBE_VFRDH
(
j
);
adapter
->
rx_ring
[
i
].
tail
=
IXGBE_VFRDT
(
j
);
adapter
->
rx_ring
[
i
].
rx_buf_len
=
rx_buf_len
;
ixgbevf_configure_srrctl
(
adapter
,
j
);
}
...
...
@@ -1315,7 +1341,6 @@ static void ixgbevf_up_complete(struct ixgbevf_adapter *adapter)
int
i
,
j
=
0
;
int
num_rx_rings
=
adapter
->
num_rx_queues
;
u32
txdctl
,
rxdctl
;
u32
msg
[
2
];
for
(
i
=
0
;
i
<
adapter
->
num_tx_queues
;
i
++
)
{
j
=
adapter
->
tx_ring
[
i
].
reg_idx
;
...
...
@@ -1356,10 +1381,6 @@ static void ixgbevf_up_complete(struct ixgbevf_adapter *adapter)
hw
->
mac
.
ops
.
set_rar
(
hw
,
0
,
hw
->
mac
.
perm_addr
,
0
);
}
msg
[
0
]
=
IXGBE_VF_SET_LPE
;
msg
[
1
]
=
netdev
->
mtu
+
ETH_HLEN
+
ETH_FCS_LEN
;
hw
->
mbx
.
ops
.
write_posted
(
hw
,
msg
,
2
);
spin_unlock
(
&
adapter
->
mbx_lock
);
clear_bit
(
__IXGBEVF_DOWN
,
&
adapter
->
state
);
...
...
@@ -1866,6 +1887,22 @@ static int ixgbevf_init_interrupt_scheme(struct ixgbevf_adapter *adapter)
return
err
;
}
/**
* ixgbevf_clear_interrupt_scheme - Clear the current interrupt scheme settings
* @adapter: board private structure to clear interrupt scheme on
*
* We go through and clear interrupt specific resources and reset the structure
* to pre-load conditions
**/
static
void
ixgbevf_clear_interrupt_scheme
(
struct
ixgbevf_adapter
*
adapter
)
{
adapter
->
num_tx_queues
=
0
;
adapter
->
num_rx_queues
=
0
;
ixgbevf_free_q_vectors
(
adapter
);
ixgbevf_reset_interrupt_capability
(
adapter
);
}
/**
* ixgbevf_sw_init - Initialize general software structures
* (struct ixgbevf_adapter)
...
...
@@ -2860,10 +2897,8 @@ 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
;
...
...
@@ -2877,35 +2912,91 @@ 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
;
if
(
!
netif_running
(
netdev
))
{
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
);
return
0
;
}
static
void
ixgbevf_shutdown
(
struct
pci_dev
*
pdev
)
static
int
ixgbevf_suspend
(
struct
pci_dev
*
pdev
,
pm_message_t
state
)
{
struct
net_device
*
netdev
=
pci_get_drvdata
(
pdev
);
struct
ixgbevf_adapter
*
adapter
=
netdev_priv
(
netdev
);
#ifdef CONFIG_PM
int
retval
=
0
;
#endif
netif_device_detach
(
netdev
);
if
(
netif_running
(
netdev
))
{
rtnl_lock
();
ixgbevf_down
(
adapter
);
ixgbevf_free_irq
(
adapter
);
ixgbevf_free_all_tx_resources
(
adapter
);
ixgbevf_free_all_rx_resources
(
adapter
);
rtnl_unlock
();
}
pci_save_state
(
pdev
);
ixgbevf_clear_interrupt_scheme
(
adapter
);
#ifdef CONFIG_PM
retval
=
pci_save_state
(
pdev
);
if
(
retval
)
return
retval
;
#endif
pci_disable_device
(
pdev
);
return
0
;
}
#ifdef CONFIG_PM
static
int
ixgbevf_resume
(
struct
pci_dev
*
pdev
)
{
struct
ixgbevf_adapter
*
adapter
=
pci_get_drvdata
(
pdev
);
struct
net_device
*
netdev
=
adapter
->
netdev
;
u32
err
;
pci_set_power_state
(
pdev
,
PCI_D0
);
pci_restore_state
(
pdev
);
/*
* pci_restore_state clears dev->state_saved so call
* pci_save_state to restore it.
*/
pci_save_state
(
pdev
);
err
=
pci_enable_device_mem
(
pdev
);
if
(
err
)
{
dev_err
(
&
pdev
->
dev
,
"Cannot enable PCI device from suspend
\n
"
);
return
err
;
}
pci_set_master
(
pdev
);
rtnl_lock
();
err
=
ixgbevf_init_interrupt_scheme
(
adapter
);
rtnl_unlock
();
if
(
err
)
{
dev_err
(
&
pdev
->
dev
,
"Cannot initialize interrupts
\n
"
);
return
err
;
}
ixgbevf_reset
(
adapter
);
if
(
netif_running
(
netdev
))
{
err
=
ixgbevf_open
(
netdev
);
if
(
err
)
return
err
;
}
netif_device_attach
(
netdev
);
return
err
;
}
#endif
/* CONFIG_PM */
static
void
ixgbevf_shutdown
(
struct
pci_dev
*
pdev
)
{
ixgbevf_suspend
(
pdev
,
PMSG_SUSPEND
);
}
static
struct
rtnl_link_stats64
*
ixgbevf_get_stats
(
struct
net_device
*
netdev
,
...
...
@@ -2946,7 +3037,7 @@ static struct rtnl_link_stats64 *ixgbevf_get_stats(struct net_device *netdev,
return
stats
;
}
static
const
struct
net_device_ops
ixgbe_netdev_ops
=
{
static
const
struct
net_device_ops
ixgbe
vf
_netdev_ops
=
{
.
ndo_open
=
ixgbevf_open
,
.
ndo_stop
=
ixgbevf_close
,
.
ndo_start_xmit
=
ixgbevf_xmit_frame
,
...
...
@@ -2962,7 +3053,7 @@ static const struct net_device_ops ixgbe_netdev_ops = {
static
void
ixgbevf_assign_netdev_ops
(
struct
net_device
*
dev
)
{
dev
->
netdev_ops
=
&
ixgbe_netdev_ops
;
dev
->
netdev_ops
=
&
ixgbe
vf
_netdev_ops
;
ixgbevf_set_ethtool_ops
(
dev
);
dev
->
watchdog_timeo
=
5
*
HZ
;
}
...
...
@@ -3131,6 +3222,7 @@ static int __devinit ixgbevf_probe(struct pci_dev *pdev,
return
0
;
err_register:
ixgbevf_clear_interrupt_scheme
(
adapter
);
err_sw_init:
ixgbevf_reset_interrupt_capability
(
adapter
);
iounmap
(
hw
->
hw_addr
);
...
...
@@ -3168,6 +3260,7 @@ static void __devexit ixgbevf_remove(struct pci_dev *pdev)
if
(
netdev
->
reg_state
==
NETREG_REGISTERED
)
unregister_netdev
(
netdev
);
ixgbevf_clear_interrupt_scheme
(
adapter
);
ixgbevf_reset_interrupt_capability
(
adapter
);
iounmap
(
adapter
->
hw
.
hw_addr
);
...
...
@@ -3267,6 +3360,11 @@ static struct pci_driver ixgbevf_driver = {
.
id_table
=
ixgbevf_pci_tbl
,
.
probe
=
ixgbevf_probe
,
.
remove
=
__devexit_p
(
ixgbevf_remove
),
#ifdef CONFIG_PM
/* Power Management Hooks */
.
suspend
=
ixgbevf_suspend
,
.
resume
=
ixgbevf_resume
,
#endif
.
shutdown
=
ixgbevf_shutdown
,
.
err_handler
=
&
ixgbevf_err_handler
};
...
...
drivers/net/ethernet/intel/ixgbevf/vf.c
View file @
fcb11849
...
...
@@ -419,6 +419,20 @@ static s32 ixgbevf_check_mac_link_vf(struct ixgbe_hw *hw,
return
0
;
}
/**
* ixgbevf_rlpml_set_vf - Set the maximum receive packet length
* @hw: pointer to the HW structure
* @max_size: value to assign to max frame size
**/
void
ixgbevf_rlpml_set_vf
(
struct
ixgbe_hw
*
hw
,
u16
max_size
)
{
u32
msgbuf
[
2
];
msgbuf
[
0
]
=
IXGBE_VF_SET_LPE
;
msgbuf
[
1
]
=
max_size
;
ixgbevf_write_msg_read_ack
(
hw
,
msgbuf
,
2
);
}
static
const
struct
ixgbe_mac_operations
ixgbevf_mac_ops
=
{
.
init_hw
=
ixgbevf_init_hw_vf
,
.
reset_hw
=
ixgbevf_reset_hw_vf
,
...
...
drivers/net/ethernet/intel/ixgbevf/vf.h
View file @
fcb11849
...
...
@@ -170,5 +170,6 @@ struct ixgbevf_info {
const
struct
ixgbe_mac_operations
*
mac_ops
;
};
void
ixgbevf_rlpml_set_vf
(
struct
ixgbe_hw
*
hw
,
u16
max_size
);
#endif
/* __IXGBE_VF_H__ */
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