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
a1082bfe
Commit
a1082bfe
authored
Nov 17, 2010
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
9d1e5e40
147b2c8c
Changes
43
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
43 changed files
with
2573 additions
and
1266 deletions
+2573
-1266
drivers/net/e1000e/82571.c
drivers/net/e1000e/82571.c
+123
-20
drivers/net/e1000e/defines.h
drivers/net/e1000e/defines.h
+1
-0
drivers/net/e1000e/netdev.c
drivers/net/e1000e/netdev.c
+45
-4
drivers/net/igbvf/Makefile
drivers/net/igbvf/Makefile
+1
-1
drivers/net/igbvf/defines.h
drivers/net/igbvf/defines.h
+1
-1
drivers/net/igbvf/ethtool.c
drivers/net/igbvf/ethtool.c
+1
-1
drivers/net/igbvf/igbvf.h
drivers/net/igbvf/igbvf.h
+1
-2
drivers/net/igbvf/mbx.c
drivers/net/igbvf/mbx.c
+1
-1
drivers/net/igbvf/mbx.h
drivers/net/igbvf/mbx.h
+1
-1
drivers/net/igbvf/netdev.c
drivers/net/igbvf/netdev.c
+4
-7
drivers/net/igbvf/regs.h
drivers/net/igbvf/regs.h
+1
-1
drivers/net/igbvf/vf.c
drivers/net/igbvf/vf.c
+1
-1
drivers/net/igbvf/vf.h
drivers/net/igbvf/vf.h
+1
-1
drivers/net/ixgbe/Makefile
drivers/net/ixgbe/Makefile
+1
-1
drivers/net/ixgbe/ixgbe.h
drivers/net/ixgbe/ixgbe.h
+86
-36
drivers/net/ixgbe/ixgbe_82598.c
drivers/net/ixgbe/ixgbe_82598.c
+14
-44
drivers/net/ixgbe/ixgbe_82599.c
drivers/net/ixgbe/ixgbe_82599.c
+11
-83
drivers/net/ixgbe/ixgbe_common.c
drivers/net/ixgbe/ixgbe_common.c
+61
-37
drivers/net/ixgbe/ixgbe_common.h
drivers/net/ixgbe/ixgbe_common.h
+4
-1
drivers/net/ixgbe/ixgbe_dcb.c
drivers/net/ixgbe/ixgbe_dcb.c
+13
-4
drivers/net/ixgbe/ixgbe_dcb.h
drivers/net/ixgbe/ixgbe_dcb.h
+2
-1
drivers/net/ixgbe/ixgbe_dcb_82598.c
drivers/net/ixgbe/ixgbe_dcb_82598.c
+4
-8
drivers/net/ixgbe/ixgbe_dcb_82599.c
drivers/net/ixgbe/ixgbe_dcb_82599.c
+5
-7
drivers/net/ixgbe/ixgbe_dcb_nl.c
drivers/net/ixgbe/ixgbe_dcb_nl.c
+43
-12
drivers/net/ixgbe/ixgbe_ethtool.c
drivers/net/ixgbe/ixgbe_ethtool.c
+163
-92
drivers/net/ixgbe/ixgbe_fcoe.c
drivers/net/ixgbe/ixgbe_fcoe.c
+14
-1
drivers/net/ixgbe/ixgbe_main.c
drivers/net/ixgbe/ixgbe_main.c
+1130
-865
drivers/net/ixgbe/ixgbe_mbx.c
drivers/net/ixgbe/ixgbe_mbx.c
+25
-15
drivers/net/ixgbe/ixgbe_mbx.h
drivers/net/ixgbe/ixgbe_mbx.h
+1
-1
drivers/net/ixgbe/ixgbe_phy.c
drivers/net/ixgbe/ixgbe_phy.c
+52
-0
drivers/net/ixgbe/ixgbe_phy.h
drivers/net/ixgbe/ixgbe_phy.h
+5
-0
drivers/net/ixgbe/ixgbe_sriov.c
drivers/net/ixgbe/ixgbe_sriov.c
+1
-2
drivers/net/ixgbe/ixgbe_type.h
drivers/net/ixgbe/ixgbe_type.h
+20
-0
drivers/net/ixgbe/ixgbe_x540.c
drivers/net/ixgbe/ixgbe_x540.c
+722
-0
drivers/net/ixgbevf/Makefile
drivers/net/ixgbevf/Makefile
+1
-1
drivers/net/ixgbevf/defines.h
drivers/net/ixgbevf/defines.h
+1
-1
drivers/net/ixgbevf/ixgbevf.h
drivers/net/ixgbevf/ixgbevf.h
+1
-1
drivers/net/ixgbevf/ixgbevf_main.c
drivers/net/ixgbevf/ixgbevf_main.c
+6
-7
drivers/net/ixgbevf/mbx.c
drivers/net/ixgbevf/mbx.c
+1
-1
drivers/net/ixgbevf/mbx.h
drivers/net/ixgbevf/mbx.h
+1
-1
drivers/net/ixgbevf/regs.h
drivers/net/ixgbevf/regs.h
+1
-1
drivers/net/ixgbevf/vf.c
drivers/net/ixgbevf/vf.c
+1
-1
drivers/net/ixgbevf/vf.h
drivers/net/ixgbevf/vf.h
+1
-1
No files found.
drivers/net/e1000e/82571.c
View file @
a1082bfe
...
...
@@ -74,6 +74,9 @@ static bool e1000_check_mng_mode_82574(struct e1000_hw *hw);
static
s32
e1000_led_on_82574
(
struct
e1000_hw
*
hw
);
static
void
e1000_put_hw_semaphore_82571
(
struct
e1000_hw
*
hw
);
static
void
e1000_power_down_phy_copper_82571
(
struct
e1000_hw
*
hw
);
static
void
e1000_put_hw_semaphore_82573
(
struct
e1000_hw
*
hw
);
static
s32
e1000_get_hw_semaphore_82574
(
struct
e1000_hw
*
hw
);
static
void
e1000_put_hw_semaphore_82574
(
struct
e1000_hw
*
hw
);
/**
* e1000_init_phy_params_82571 - Init PHY func ptrs.
...
...
@@ -107,6 +110,8 @@ static s32 e1000_init_phy_params_82571(struct e1000_hw *hw)
case
e1000_82574
:
case
e1000_82583
:
phy
->
type
=
e1000_phy_bm
;
phy
->
ops
.
acquire
=
e1000_get_hw_semaphore_82574
;
phy
->
ops
.
release
=
e1000_put_hw_semaphore_82574
;
break
;
default:
return
-
E1000_ERR_PHY
;
...
...
@@ -200,6 +205,17 @@ static s32 e1000_init_nvm_params_82571(struct e1000_hw *hw)
break
;
}
/* Function Pointers */
switch
(
hw
->
mac
.
type
)
{
case
e1000_82574
:
case
e1000_82583
:
nvm
->
ops
.
acquire
=
e1000_get_hw_semaphore_82574
;
nvm
->
ops
.
release
=
e1000_put_hw_semaphore_82574
;
break
;
default:
break
;
}
return
0
;
}
...
...
@@ -542,6 +558,94 @@ static void e1000_put_hw_semaphore_82571(struct e1000_hw *hw)
swsm
&=
~
(
E1000_SWSM_SMBI
|
E1000_SWSM_SWESMBI
);
ew32
(
SWSM
,
swsm
);
}
/**
* e1000_get_hw_semaphore_82573 - Acquire hardware semaphore
* @hw: pointer to the HW structure
*
* Acquire the HW semaphore during reset.
*
**/
static
s32
e1000_get_hw_semaphore_82573
(
struct
e1000_hw
*
hw
)
{
u32
extcnf_ctrl
;
s32
ret_val
=
0
;
s32
i
=
0
;
extcnf_ctrl
=
er32
(
EXTCNF_CTRL
);
extcnf_ctrl
|=
E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP
;
do
{
ew32
(
EXTCNF_CTRL
,
extcnf_ctrl
);
extcnf_ctrl
=
er32
(
EXTCNF_CTRL
);
if
(
extcnf_ctrl
&
E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP
)
break
;
extcnf_ctrl
|=
E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP
;
msleep
(
2
);
i
++
;
}
while
(
i
<
MDIO_OWNERSHIP_TIMEOUT
);
if
(
i
==
MDIO_OWNERSHIP_TIMEOUT
)
{
/* Release semaphores */
e1000_put_hw_semaphore_82573
(
hw
);
e_dbg
(
"Driver can't access the PHY
\n
"
);
ret_val
=
-
E1000_ERR_PHY
;
goto
out
;
}
out:
return
ret_val
;
}
/**
* e1000_put_hw_semaphore_82573 - Release hardware semaphore
* @hw: pointer to the HW structure
*
* Release hardware semaphore used during reset.
*
**/
static
void
e1000_put_hw_semaphore_82573
(
struct
e1000_hw
*
hw
)
{
u32
extcnf_ctrl
;
extcnf_ctrl
=
er32
(
EXTCNF_CTRL
);
extcnf_ctrl
&=
~
E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP
;
ew32
(
EXTCNF_CTRL
,
extcnf_ctrl
);
}
static
DEFINE_MUTEX
(
swflag_mutex
);
/**
* e1000_get_hw_semaphore_82574 - Acquire hardware semaphore
* @hw: pointer to the HW structure
*
* Acquire the HW semaphore to access the PHY or NVM.
*
**/
static
s32
e1000_get_hw_semaphore_82574
(
struct
e1000_hw
*
hw
)
{
s32
ret_val
;
mutex_lock
(
&
swflag_mutex
);
ret_val
=
e1000_get_hw_semaphore_82573
(
hw
);
if
(
ret_val
)
mutex_unlock
(
&
swflag_mutex
);
return
ret_val
;
}
/**
* e1000_put_hw_semaphore_82574 - Release hardware semaphore
* @hw: pointer to the HW structure
*
* Release hardware semaphore used to access the PHY or NVM
*
**/
static
void
e1000_put_hw_semaphore_82574
(
struct
e1000_hw
*
hw
)
{
e1000_put_hw_semaphore_82573
(
hw
);
mutex_unlock
(
&
swflag_mutex
);
}
/**
* e1000_acquire_nvm_82571 - Request for access to the EEPROM
...
...
@@ -562,8 +666,6 @@ static s32 e1000_acquire_nvm_82571(struct e1000_hw *hw)
switch
(
hw
->
mac
.
type
)
{
case
e1000_82573
:
case
e1000_82574
:
case
e1000_82583
:
break
;
default:
ret_val
=
e1000e_acquire_nvm
(
hw
);
...
...
@@ -853,9 +955,8 @@ static s32 e1000_set_d0_lplu_state_82571(struct e1000_hw *hw, bool active)
**/
static
s32
e1000_reset_hw_82571
(
struct
e1000_hw
*
hw
)
{
u32
ctrl
,
extcnf_ctrl
,
ctrl_ext
,
icr
;
u32
ctrl
,
ctrl_ext
,
icr
;
s32
ret_val
;
u16
i
=
0
;
/*
* Prevent the PCI-E bus from sticking if there is no TLP connection
...
...
@@ -880,33 +981,33 @@ static s32 e1000_reset_hw_82571(struct e1000_hw *hw)
*/
switch
(
hw
->
mac
.
type
)
{
case
e1000_82573
:
ret_val
=
e1000_get_hw_semaphore_82573
(
hw
);
break
;
case
e1000_82574
:
case
e1000_82583
:
extcnf_ctrl
=
er32
(
EXTCNF_CTRL
);
extcnf_ctrl
|=
E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP
;
do
{
ew32
(
EXTCNF_CTRL
,
extcnf_ctrl
);
extcnf_ctrl
=
er32
(
EXTCNF_CTRL
);
if
(
extcnf_ctrl
&
E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP
)
break
;
extcnf_ctrl
|=
E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP
;
msleep
(
2
);
i
++
;
}
while
(
i
<
MDIO_OWNERSHIP_TIMEOUT
);
ret_val
=
e1000_get_hw_semaphore_82574
(
hw
);
break
;
default:
break
;
}
if
(
ret_val
)
e_dbg
(
"Cannot acquire MDIO ownership
\n
"
);
ctrl
=
er32
(
CTRL
);
e_dbg
(
"Issuing a global reset to MAC
\n
"
);
ew32
(
CTRL
,
ctrl
|
E1000_CTRL_RST
);
/* Must release MDIO ownership and mutex after MAC reset. */
switch
(
hw
->
mac
.
type
)
{
case
e1000_82574
:
case
e1000_82583
:
e1000_put_hw_semaphore_82574
(
hw
);
break
;
default:
break
;
}
if
(
hw
->
nvm
.
type
==
e1000_nvm_flash_hw
)
{
udelay
(
10
);
ctrl_ext
=
er32
(
CTRL_EXT
);
...
...
@@ -1431,8 +1532,10 @@ static s32 e1000_check_for_serdes_link_82571(struct e1000_hw *hw)
* auto-negotiation in the TXCW register and disable
* forced link in the Device Control register in an
* attempt to auto-negotiate with our link partner.
* If the partner code word is null, stop forcing
* and restart auto negotiation.
*/
if
(
rxcw
&
E1000_RXCW_C
)
{
if
(
(
rxcw
&
E1000_RXCW_C
)
||
!
(
rxcw
&
E1000_RXCW_CW
))
{
/* Enable autoneg, and unforce link up */
ew32
(
TXCW
,
mac
->
txcw
);
ew32
(
CTRL
,
(
ctrl
&
~
E1000_CTRL_SLU
));
...
...
drivers/net/e1000e/defines.h
View file @
a1082bfe
...
...
@@ -516,6 +516,7 @@
#define E1000_TXCW_ANE 0x80000000
/* Auto-neg enable */
/* Receive Configuration Word */
#define E1000_RXCW_CW 0x0000ffff
/* RxConfigWord mask */
#define E1000_RXCW_IV 0x08000000
/* Receive config invalid */
#define E1000_RXCW_C 0x20000000
/* Receive config */
#define E1000_RXCW_SYNCH 0x40000000
/* Receive config synch */
...
...
drivers/net/e1000e/netdev.c
View file @
a1082bfe
...
...
@@ -5465,6 +5465,36 @@ static void e1000_shutdown(struct pci_dev *pdev)
}
#ifdef CONFIG_NET_POLL_CONTROLLER
static
irqreturn_t
e1000_intr_msix
(
int
irq
,
void
*
data
)
{
struct
net_device
*
netdev
=
data
;
struct
e1000_adapter
*
adapter
=
netdev_priv
(
netdev
);
int
vector
,
msix_irq
;
if
(
adapter
->
msix_entries
)
{
vector
=
0
;
msix_irq
=
adapter
->
msix_entries
[
vector
].
vector
;
disable_irq
(
msix_irq
);
e1000_intr_msix_rx
(
msix_irq
,
netdev
);
enable_irq
(
msix_irq
);
vector
++
;
msix_irq
=
adapter
->
msix_entries
[
vector
].
vector
;
disable_irq
(
msix_irq
);
e1000_intr_msix_tx
(
msix_irq
,
netdev
);
enable_irq
(
msix_irq
);
vector
++
;
msix_irq
=
adapter
->
msix_entries
[
vector
].
vector
;
disable_irq
(
msix_irq
);
e1000_msix_other
(
msix_irq
,
netdev
);
enable_irq
(
msix_irq
);
}
return
IRQ_HANDLED
;
}
/*
* Polling 'interrupt' - used by things like netconsole to send skbs
* without having to re-enable interrupts. It's not called while
...
...
@@ -5474,10 +5504,21 @@ static void e1000_netpoll(struct net_device *netdev)
{
struct
e1000_adapter
*
adapter
=
netdev_priv
(
netdev
);
disable_irq
(
adapter
->
pdev
->
irq
);
e1000_intr
(
adapter
->
pdev
->
irq
,
netdev
);
enable_irq
(
adapter
->
pdev
->
irq
);
switch
(
adapter
->
int_mode
)
{
case
E1000E_INT_MODE_MSIX
:
e1000_intr_msix
(
adapter
->
pdev
->
irq
,
netdev
);
break
;
case
E1000E_INT_MODE_MSI
:
disable_irq
(
adapter
->
pdev
->
irq
);
e1000_intr_msi
(
adapter
->
pdev
->
irq
,
netdev
);
enable_irq
(
adapter
->
pdev
->
irq
);
break
;
default:
/* E1000E_INT_MODE_LEGACY */
disable_irq
(
adapter
->
pdev
->
irq
);
e1000_intr
(
adapter
->
pdev
->
irq
,
netdev
);
enable_irq
(
adapter
->
pdev
->
irq
);
break
;
}
}
#endif
...
...
drivers/net/igbvf/Makefile
View file @
a1082bfe
################################################################################
#
# Intel(R) 82576 Virtual Function Linux driver
# Copyright(c) 2009 Intel Corporation.
# Copyright(c) 2009
- 2010
Intel Corporation.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms and conditions of the GNU General Public License,
...
...
drivers/net/igbvf/defines.h
View file @
a1082bfe
/*******************************************************************************
Intel(R) 82576 Virtual Function Linux driver
Copyright(c) 1999 - 20
09
Intel Corporation.
Copyright(c) 1999 - 20
10
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/igbvf/ethtool.c
View file @
a1082bfe
/*******************************************************************************
Intel(R) 82576 Virtual Function Linux driver
Copyright(c) 2009 Intel Corporation.
Copyright(c) 2009
- 2010
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/igbvf/igbvf.h
View file @
a1082bfe
/*******************************************************************************
Intel(R) 82576 Virtual Function Linux driver
Copyright(c) 2009 Intel Corporation.
Copyright(c) 2009
- 2010
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
@@ -126,7 +126,6 @@ struct igbvf_buffer {
unsigned
int
page_offset
;
};
};
struct
page
*
page
;
};
union
igbvf_desc
{
...
...
drivers/net/igbvf/mbx.c
View file @
a1082bfe
/*******************************************************************************
Intel(R) 82576 Virtual Function Linux driver
Copyright(c) 2009 Intel Corporation.
Copyright(c) 2009
- 2010
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/igbvf/mbx.h
View file @
a1082bfe
/*******************************************************************************
Intel(R) 82576 Virtual Function Linux driver
Copyright(c) 1999 - 20
09
Intel Corporation.
Copyright(c) 1999 - 20
10
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/igbvf/netdev.c
View file @
a1082bfe
/*******************************************************************************
Intel(R) 82576 Virtual Function Linux driver
Copyright(c) 2009 Intel Corporation.
Copyright(c) 2009
- 2010
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
@@ -44,12 +44,13 @@
#include "igbvf.h"
#define DRV_VERSION "1.0.
0
-k0"
#define DRV_VERSION "1.0.
8
-k0"
char
igbvf_driver_name
[]
=
"igbvf"
;
const
char
igbvf_driver_version
[]
=
DRV_VERSION
;
static
const
char
igbvf_driver_string
[]
=
"Intel(R) Virtual Function Network Driver"
;
static
const
char
igbvf_copyright
[]
=
"Copyright (c) 2009 Intel Corporation."
;
static
const
char
igbvf_copyright
[]
=
"Copyright (c) 2009 - 2010 Intel Corporation."
;
static
int
igbvf_poll
(
struct
napi_struct
*
napi
,
int
budget
);
static
void
igbvf_reset
(
struct
igbvf_adapter
*
);
...
...
@@ -1851,8 +1852,6 @@ static void igbvf_watchdog_task(struct work_struct *work)
if
(
link
)
{
if
(
!
netif_carrier_ok
(
netdev
))
{
bool
txb2b
=
1
;
mac
->
ops
.
get_link_up_info
(
&
adapter
->
hw
,
&
adapter
->
link_speed
,
&
adapter
->
link_duplex
);
...
...
@@ -1862,11 +1861,9 @@ static void igbvf_watchdog_task(struct work_struct *work)
adapter
->
tx_timeout_factor
=
1
;
switch
(
adapter
->
link_speed
)
{
case
SPEED_10
:
txb2b
=
0
;
adapter
->
tx_timeout_factor
=
16
;
break
;
case
SPEED_100
:
txb2b
=
0
;
/* maybe add some timeout factor ? */
break
;
}
...
...
drivers/net/igbvf/regs.h
View file @
a1082bfe
/*******************************************************************************
Intel(R) 82576 Virtual Function Linux driver
Copyright(c) 2009 Intel Corporation.
Copyright(c) 2009
- 2010
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/igbvf/vf.c
View file @
a1082bfe
/*******************************************************************************
Intel(R) 82576 Virtual Function Linux driver
Copyright(c) 2009 Intel Corporation.
Copyright(c) 2009
- 2010
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/igbvf/vf.h
View file @
a1082bfe
/*******************************************************************************
Intel(R) 82576 Virtual Function Linux driver
Copyright(c) 2009 Intel Corporation.
Copyright(c) 2009
- 2010
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/ixgbe/Makefile
View file @
a1082bfe
...
...
@@ -34,7 +34,7 @@ obj-$(CONFIG_IXGBE) += ixgbe.o
ixgbe-objs
:=
ixgbe_main.o ixgbe_common.o ixgbe_ethtool.o
\
ixgbe_82599.o ixgbe_82598.o ixgbe_phy.o ixgbe_sriov.o
\
ixgbe_mbx.o
ixgbe_mbx.o
ixgbe_x540.o
ixgbe-$(CONFIG_IXGBE_DCB)
+=
ixgbe_dcb.o ixgbe_dcb_82598.o
\
ixgbe_dcb_82599.o ixgbe_dcb_nl.o
...
...
drivers/net/ixgbe/ixgbe.h
View file @
a1082bfe
...
...
@@ -61,10 +61,8 @@
#define IXGBE_MIN_RXD 64
/* flow control */
#define IXGBE_DEFAULT_FCRTL 0x10000
#define IXGBE_MIN_FCRTL 0x40
#define IXGBE_MAX_FCRTL 0x7FF80
#define IXGBE_DEFAULT_FCRTH 0x20000
#define IXGBE_MIN_FCRTH 0x600
#define IXGBE_MAX_FCRTH 0x7FFF0
#define IXGBE_DEFAULT_FCPAUSE 0xFFFF
...
...
@@ -130,7 +128,9 @@ struct ixgbe_tx_buffer {
unsigned
long
time_stamp
;
u16
length
;
u16
next_to_watch
;
u16
mapped_as_page
;
unsigned
int
bytecount
;
u16
gso_segs
;
u8
mapped_as_page
;
};
struct
ixgbe_rx_buffer
{
...
...
@@ -146,12 +146,56 @@ struct ixgbe_queue_stats {
u64
bytes
;
};
struct
ixgbe_tx_queue_stats
{
u64
restart_queue
;
u64
tx_busy
;
u64
completed
;
u64
tx_done_old
;
};
struct
ixgbe_rx_queue_stats
{
u64
rsc_count
;
u64
rsc_flush
;
u64
non_eop_descs
;
u64
alloc_rx_page_failed
;
u64
alloc_rx_buff_failed
;
};
enum
ixbge_ring_state_t
{
__IXGBE_TX_FDIR_INIT_DONE
,
__IXGBE_TX_DETECT_HANG
,
__IXGBE_HANG_CHECK_ARMED
,
__IXGBE_RX_PS_ENABLED
,
__IXGBE_RX_RSC_ENABLED
,
};
#define ring_is_ps_enabled(ring) \
test_bit(__IXGBE_RX_PS_ENABLED, &(ring)->state)
#define set_ring_ps_enabled(ring) \
set_bit(__IXGBE_RX_PS_ENABLED, &(ring)->state)
#define clear_ring_ps_enabled(ring) \
clear_bit(__IXGBE_RX_PS_ENABLED, &(ring)->state)
#define check_for_tx_hang(ring) \
test_bit(__IXGBE_TX_DETECT_HANG, &(ring)->state)
#define set_check_for_tx_hang(ring) \
set_bit(__IXGBE_TX_DETECT_HANG, &(ring)->state)
#define clear_check_for_tx_hang(ring) \
clear_bit(__IXGBE_TX_DETECT_HANG, &(ring)->state)
#define ring_is_rsc_enabled(ring) \
test_bit(__IXGBE_RX_RSC_ENABLED, &(ring)->state)
#define set_ring_rsc_enabled(ring) \
set_bit(__IXGBE_RX_RSC_ENABLED, &(ring)->state)
#define clear_ring_rsc_enabled(ring) \
clear_bit(__IXGBE_RX_RSC_ENABLED, &(ring)->state)
struct
ixgbe_ring
{
void
*
desc
;
/* descriptor ring memory */
struct
device
*
dev
;
/* device for DMA mapping */
struct
net_device
*
netdev
;
/* netdev ring belongs to */
union
{
struct
ixgbe_tx_buffer
*
tx_buffer_info
;
struct
ixgbe_rx_buffer
*
rx_buffer_info
;
};
unsigned
long
state
;
u8
atr_sample_rate
;
u8
atr_count
;
u16
count
;
/* amount of descriptors */
...
...
@@ -160,38 +204,30 @@ struct ixgbe_ring {
u16
next_to_clean
;
u8
queue_index
;
/* needed for multiqueue queue management */
#define IXGBE_RING_RX_PS_ENABLED (u8)(1)
u8
flags
;
/* per ring feature flags */
u16
head
;
u16
tail
;
unsigned
int
total_bytes
;
unsigned
int
total_packets
;
#ifdef CONFIG_IXGBE_DCA
/* cpu for tx queue */
int
cpu
;
#endif
u16
work_limit
;
/* max work per interrupt */
u16
reg_idx
;
/* holds the special value that gets
u8
reg_idx
;
/* holds the special value that gets
* the hardware register offset
* associated with this ring, which is
* different for DCB and RSS modes
*/
u16
work_limit
;
/* max work per interrupt */
u8
__iomem
*
tail
;
unsigned
int
total_bytes
;
unsigned
int
total_packets
;
struct
ixgbe_queue_stats
stats
;
struct
u64_stats_sync
syncp
;
union
{
struct
ixgbe_tx_queue_stats
tx_stats
;
struct
ixgbe_rx_queue_stats
rx_stats
;
};
int
numa_node
;
unsigned
long
reinit_state
;
u64
rsc_count
;
/* stat for coalesced packets */
u64
rsc_flush
;
/* stats for flushed packets */
u32
restart_queue
;
/* track tx queue restarts */
u32
non_eop_descs
;
/* track hardware descriptor chaining */
unsigned
int
size
;
/* length in bytes */
dma_addr_t
dma
;
/* phys. address of descriptor ring */
struct
rcu_head
rcu
;
struct
ixgbe_q_vector
*
q_vector
;
/* back-pointer to host q_vector */
}
____cacheline_internodealigned_in_smp
;
enum
ixgbe_ring_f_enum
{
...
...
@@ -237,6 +273,9 @@ struct ixgbe_q_vector {
unsigned
int
v_idx
;
/* index of q_vector within array, also used for
* finding the bit in EICR and friends that
* represents the vector for this ring */
#ifdef CONFIG_IXGBE_DCA
int
cpu
;
/* CPU for DCA */
#endif
struct
napi_struct
napi
;
DECLARE_BITMAP
(
rxr_idx
,
MAX_RX_QUEUES
);
/* Rx ring indices */
DECLARE_BITMAP
(
txr_idx
,
MAX_TX_QUEUES
);
/* Tx ring indices */
...
...
@@ -246,6 +285,7 @@ struct ixgbe_q_vector {
u8
rx_itr
;
u32
eitr
;
cpumask_var_t
affinity_mask
;
char
name
[
IFNAMSIZ
+
9
];
};
/* Helper macros to switch between ints/sec and what the register uses.
...
...
@@ -294,7 +334,6 @@ struct ixgbe_adapter {
u16
bd_number
;
struct
work_struct
reset_task
;
struct
ixgbe_q_vector
*
q_vector
[
MAX_MSIX_Q_VECTORS
];
char
name
[
MAX_MSIX_COUNT
][
IFNAMSIZ
+
9
];
struct
ixgbe_dcb_config
dcb_cfg
;
struct
ixgbe_dcb_config
temp_dcb_cfg
;
u8
dcb_set_bitmap
;
...
...
@@ -417,6 +456,7 @@ struct ixgbe_adapter {
int
node
;
struct
work_struct
check_overtemp_task
;
u32
interrupt_event
;
char
lsc_int_name
[
IFNAMSIZ
+
9
];
/* SR-IOV */
DECLARE_BITMAP
(
active_vfs
,
IXGBE_MAX_VF_FUNCTIONS
);
...
...
@@ -428,17 +468,25 @@ enum ixbge_state_t {
__IXGBE_TESTING
,
__IXGBE_RESETTING
,
__IXGBE_DOWN
,
__IXGBE_FDIR_INIT_DONE
,
__IXGBE_SFP_MODULE_NOT_FOUND
};
struct
ixgbe_rsc_cb
{
dma_addr_t
dma
;
u16
skb_cnt
;
bool
delay_unmap
;
};
#define IXGBE_RSC_CB(skb) ((struct ixgbe_rsc_cb *)(skb)->cb)
enum
ixgbe_boards
{
board_82598
,
board_82599
,
board_X540
,
};
extern
struct
ixgbe_info
ixgbe_82598_info
;
extern
struct
ixgbe_info
ixgbe_82599_info
;
extern
struct
ixgbe_info
ixgbe_X540_info
;
#ifdef CONFIG_IXGBE_DCB
extern
const
struct
dcbnl_rtnl_ops
dcbnl_ops
;
extern
int
ixgbe_copy_dcb_cfg
(
struct
ixgbe_dcb_config
*
src_dcb_cfg
,
...
...
@@ -454,26 +502,24 @@ extern void ixgbe_down(struct ixgbe_adapter *adapter);
extern
void
ixgbe_reinit_locked
(
struct
ixgbe_adapter
*
adapter
);
extern
void
ixgbe_reset
(
struct
ixgbe_adapter
*
adapter
);
extern
void
ixgbe_set_ethtool_ops
(
struct
net_device
*
netdev
);
extern
int
ixgbe_setup_rx_resources
(
struct
ixgbe_
adapter
*
,
struct
ixgbe_
ring
*
);
extern
int
ixgbe_setup_tx_resources
(
struct
ixgbe_
adapter
*
,
struct
ixgbe_
ring
*
);
extern
void
ixgbe_free_rx_resources
(
struct
ixgbe_
adapter
*
,
struct
ixgbe_
ring
*
);
extern
void
ixgbe_free_tx_resources
(
struct
ixgbe_
adapter
*
,
struct
ixgbe_
ring
*
);
extern
int
ixgbe_setup_rx_resources
(
struct
ixgbe_ring
*
);
extern
int
ixgbe_setup_tx_resources
(
struct
ixgbe_ring
*
);
extern
void
ixgbe_free_rx_resources
(
struct
ixgbe_ring
*
);
extern
void
ixgbe_free_tx_resources
(
struct
ixgbe_ring
*
);
extern
void
ixgbe_configure_rx_ring
(
struct
ixgbe_adapter
*
,
struct
ixgbe_ring
*
);
extern
void
ixgbe_configure_tx_ring
(
struct
ixgbe_adapter
*
,
struct
ixgbe_ring
*
);
extern
void
ixgbe_update_stats
(
struct
ixgbe_adapter
*
adapter
);
extern
int
ixgbe_init_interrupt_scheme
(
struct
ixgbe_adapter
*
adapter
);
extern
void
ixgbe_clear_interrupt_scheme
(
struct
ixgbe_adapter
*
adapter
);
extern
netdev_tx_t
ixgbe_xmit_frame_ring
(
struct
sk_buff
*
,
struct
net_device
*
,
struct
ixgbe_adapter
*
,
struct
ixgbe_ring
*
);
extern
void
ixgbe_unmap_and_free_tx_resource
(
struct
ixgbe_
adapter
*
,
extern
void
ixgbe_unmap_and_free_tx_resource
(
struct
ixgbe_
ring
*
,
struct
ixgbe_tx_buffer
*
);
extern
void
ixgbe_alloc_rx_buffers
(
struct
ixgbe_adapter
*
adapter
,
struct
ixgbe_ring
*
rx_ring
,
int
cleaned_count
);
extern
void
ixgbe_alloc_rx_buffers
(
struct
ixgbe_ring
*
,
u16
);
extern
void
ixgbe_write_eitr
(
struct
ixgbe_q_vector
*
);
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_init_fdir_signature_82599
(
struct
ixgbe_hw
*
hw
,
u32
pballoc
);
extern
s32
ixgbe_init_fdir_perfect_82599
(
struct
ixgbe_hw
*
hw
,
u32
pballoc
);
...
...
@@ -498,6 +544,10 @@ extern s32 ixgbe_atr_set_flex_byte_82599(struct ixgbe_atr_input *input,
u16
flex_byte
);
extern
s32
ixgbe_atr_set_l4type_82599
(
struct
ixgbe_atr_input
*
input
,
u8
l4type
);
extern
void
ixgbe_configure_rscctl
(
struct
ixgbe_adapter
*
adapter
,
struct
ixgbe_ring
*
ring
);
extern
void
ixgbe_clear_rscctl
(
struct
ixgbe_adapter
*
adapter
,
struct
ixgbe_ring
*
ring
);
extern
void
ixgbe_set_rx_mode
(
struct
net_device
*
netdev
);
#ifdef IXGBE_FCOE
extern
void
ixgbe_configure_fcoe
(
struct
ixgbe_adapter
*
adapter
);
...
...
drivers/net/ixgbe/ixgbe_82598.c
View file @
a1082bfe
...
...
@@ -38,9 +38,6 @@
#define IXGBE_82598_MC_TBL_SIZE 128
#define IXGBE_82598_VFT_TBL_SIZE 128
static
s32
ixgbe_get_copper_link_capabilities_82598
(
struct
ixgbe_hw
*
hw
,
ixgbe_link_speed
*
speed
,
bool
*
autoneg
);
static
s32
ixgbe_setup_copper_link_82598
(
struct
ixgbe_hw
*
hw
,
ixgbe_link_speed
speed
,
bool
autoneg
,
...
...
@@ -156,7 +153,7 @@ static s32 ixgbe_init_phy_ops_82598(struct ixgbe_hw *hw)
if
(
mac
->
ops
.
get_media_type
(
hw
)
==
ixgbe_media_type_copper
)
{
mac
->
ops
.
setup_link
=
&
ixgbe_setup_copper_link_82598
;
mac
->
ops
.
get_link_capabilities
=
&
ixgbe_get_copper_link_capabilities_82598
;
&
ixgbe_get_copper_link_capabilities_generic
;
}
switch
(
hw
->
phy
.
type
)
{
...
...
@@ -273,37 +270,6 @@ static s32 ixgbe_get_link_capabilities_82598(struct ixgbe_hw *hw,
return
status
;
}
/**
* ixgbe_get_copper_link_capabilities_82598 - Determines link capabilities
* @hw: pointer to hardware structure
* @speed: pointer to link speed
* @autoneg: boolean auto-negotiation value
*
* Determines the link capabilities by reading the AUTOC register.
**/
static
s32
ixgbe_get_copper_link_capabilities_82598
(
struct
ixgbe_hw
*
hw
,
ixgbe_link_speed
*
speed
,
bool
*
autoneg
)
{
s32
status
=
IXGBE_ERR_LINK_SETUP
;
u16
speed_ability
;
*
speed
=
0
;
*
autoneg
=
true
;
status
=
hw
->
phy
.
ops
.
read_reg
(
hw
,
MDIO_SPEED
,
MDIO_MMD_PMAPMD
,
&
speed_ability
);
if
(
status
==
0
)
{
if
(
speed_ability
&
MDIO_SPEED_10G
)
*
speed
|=
IXGBE_LINK_SPEED_10GB_FULL
;
if
(
speed_ability
&
MDIO_PMA_SPEED_1000
)
*
speed
|=
IXGBE_LINK_SPEED_1GB_FULL
;
}
return
status
;
}
/**
* ixgbe_get_media_type_82598 - Determines media type
* @hw: pointer to hardware structure
...
...
@@ -357,6 +323,7 @@ static s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num)
u32
fctrl_reg
;
u32
rmcs_reg
;
u32
reg
;
u32
rx_pba_size
;
u32
link_speed
=
0
;
bool
link_up
;
...
...
@@ -459,16 +426,18 @@ static s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num)
/* Set up and enable Rx high/low water mark thresholds, enable XON. */
if
(
hw
->
fc
.
current_mode
&
ixgbe_fc_tx_pause
)
{
if
(
hw
->
fc
.
send_xon
)
{
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTL
(
packetbuf_num
),
(
hw
->
fc
.
low_water
|
IXGBE_FCRTL_XONE
));
}
else
{
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTL
(
packetbuf_num
),
hw
->
fc
.
low_water
);
}
rx_pba_size
=
IXGBE_READ_REG
(
hw
,
IXGBE_RXPBSIZE
(
packetbuf_num
));
rx_pba_size
>>=
IXGBE_RXPBSIZE_SHIFT
;
reg
=
(
rx_pba_size
-
hw
->
fc
.
low_water
)
<<
6
;
if
(
hw
->
fc
.
send_xon
)
reg
|=
IXGBE_FCRTL_XONE
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTL
(
packetbuf_num
),
reg
);
reg
=
(
rx_pba_size
-
hw
->
fc
.
high_water
)
<<
10
;
reg
|=
IXGBE_FCRTH_FCEN
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTH
(
packetbuf_num
),
(
hw
->
fc
.
high_water
|
IXGBE_FCRTH_FCEN
));
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTH
(
packetbuf_num
),
reg
);
}
/* Configure pause time (2 TCs per register) */
...
...
@@ -1222,6 +1191,7 @@ static struct ixgbe_mac_operations mac_ops_82598 = {
static
struct
ixgbe_eeprom_operations
eeprom_ops_82598
=
{
.
init_params
=
&
ixgbe_init_eeprom_params_generic
,
.
read
=
&
ixgbe_read_eerd_generic
,
.
calc_checksum
=
&
ixgbe_calc_eeprom_checksum_generic
,
.
validate_checksum
=
&
ixgbe_validate_eeprom_checksum_generic
,
.
update_checksum
=
&
ixgbe_update_eeprom_checksum_generic
,
};
...
...
drivers/net/ixgbe/ixgbe_82599.c
View file @
a1082bfe
...
...
@@ -56,9 +56,6 @@ static s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw,
ixgbe_link_speed
speed
,
bool
autoneg
,
bool
autoneg_wait_to_complete
);
static
s32
ixgbe_get_copper_link_capabilities_82599
(
struct
ixgbe_hw
*
hw
,
ixgbe_link_speed
*
speed
,
bool
*
autoneg
);
static
s32
ixgbe_setup_copper_link_82599
(
struct
ixgbe_hw
*
hw
,
ixgbe_link_speed
speed
,
bool
autoneg
,
...
...
@@ -174,7 +171,7 @@ static s32 ixgbe_init_phy_ops_82599(struct ixgbe_hw *hw)
if
(
mac
->
ops
.
get_media_type
(
hw
)
==
ixgbe_media_type_copper
)
{
mac
->
ops
.
setup_link
=
&
ixgbe_setup_copper_link_82599
;
mac
->
ops
.
get_link_capabilities
=
&
ixgbe_get_copper_link_capabilities_82599
;
&
ixgbe_get_copper_link_capabilities_generic
;
}
/* Set necessary function pointers based on phy type */
...
...
@@ -184,6 +181,10 @@ static s32 ixgbe_init_phy_ops_82599(struct ixgbe_hw *hw)
phy
->
ops
.
get_firmware_version
=
&
ixgbe_get_phy_firmware_version_tnx
;
break
;
case
ixgbe_phy_aq
:
phy
->
ops
.
get_firmware_version
=
&
ixgbe_get_phy_firmware_version_generic
;
break
;
default:
break
;
}
...
...
@@ -289,37 +290,6 @@ static s32 ixgbe_get_link_capabilities_82599(struct ixgbe_hw *hw,
return
status
;
}
/**
* ixgbe_get_copper_link_capabilities_82599 - Determines link capabilities
* @hw: pointer to hardware structure
* @speed: pointer to link speed
* @autoneg: boolean auto-negotiation value
*
* Determines the link capabilities by reading the AUTOC register.
**/
static
s32
ixgbe_get_copper_link_capabilities_82599
(
struct
ixgbe_hw
*
hw
,
ixgbe_link_speed
*
speed
,
bool
*
autoneg
)
{
s32
status
=
IXGBE_ERR_LINK_SETUP
;
u16
speed_ability
;
*
speed
=
0
;
*
autoneg
=
true
;
status
=
hw
->
phy
.
ops
.
read_reg
(
hw
,
MDIO_SPEED
,
MDIO_MMD_PMAPMD
,
&
speed_ability
);
if
(
status
==
0
)
{
if
(
speed_ability
&
MDIO_SPEED_10G
)
*
speed
|=
IXGBE_LINK_SPEED_10GB_FULL
;
if
(
speed_ability
&
MDIO_PMA_SPEED_1000
)
*
speed
|=
IXGBE_LINK_SPEED_1GB_FULL
;
}
return
status
;
}
/**
* ixgbe_get_media_type_82599 - Get media type
* @hw: pointer to hardware structure
...
...
@@ -332,7 +302,8 @@ static enum ixgbe_media_type ixgbe_get_media_type_82599(struct ixgbe_hw *hw)
/* Detect if there is a copper PHY attached. */
if
(
hw
->
phy
.
type
==
ixgbe_phy_cu_unknown
||
hw
->
phy
.
type
==
ixgbe_phy_tn
)
{
hw
->
phy
.
type
==
ixgbe_phy_tn
||
hw
->
phy
.
type
==
ixgbe_phy_aq
)
{
media_type
=
ixgbe_media_type_copper
;
goto
out
;
}
...
...
@@ -1924,6 +1895,7 @@ static u32 ixgbe_get_supported_physical_layer_82599(struct ixgbe_hw *hw)
hw
->
phy
.
ops
.
identify
(
hw
);
if
(
hw
->
phy
.
type
==
ixgbe_phy_tn
||
hw
->
phy
.
type
==
ixgbe_phy_aq
||
hw
->
phy
.
type
==
ixgbe_phy_cu_unknown
)
{
hw
->
phy
.
ops
.
read_reg
(
hw
,
MDIO_PMA_EXTABLE
,
MDIO_MMD_PMAPMD
,
&
ext_ability
);
...
...
@@ -2125,51 +2097,6 @@ static s32 ixgbe_verify_fw_version_82599(struct ixgbe_hw *hw)
return
status
;
}
/**
* ixgbe_get_wwn_prefix_82599 - Get alternative WWNN/WWPN prefix from
* the EEPROM
* @hw: pointer to hardware structure
* @wwnn_prefix: the alternative WWNN prefix
* @wwpn_prefix: the alternative WWPN prefix
*
* This function will read the EEPROM from the alternative SAN MAC address
* block to check the support for the alternative WWNN/WWPN prefix support.
**/
static
s32
ixgbe_get_wwn_prefix_82599
(
struct
ixgbe_hw
*
hw
,
u16
*
wwnn_prefix
,
u16
*
wwpn_prefix
)
{
u16
offset
,
caps
;
u16
alt_san_mac_blk_offset
;
/* clear output first */
*
wwnn_prefix
=
0xFFFF
;
*
wwpn_prefix
=
0xFFFF
;
/* check if alternative SAN MAC is supported */
hw
->
eeprom
.
ops
.
read
(
hw
,
IXGBE_ALT_SAN_MAC_ADDR_BLK_PTR
,
&
alt_san_mac_blk_offset
);
if
((
alt_san_mac_blk_offset
==
0
)
||
(
alt_san_mac_blk_offset
==
0xFFFF
))
goto
wwn_prefix_out
;
/* check capability in alternative san mac address block */
offset
=
alt_san_mac_blk_offset
+
IXGBE_ALT_SAN_MAC_ADDR_CAPS_OFFSET
;
hw
->
eeprom
.
ops
.
read
(
hw
,
offset
,
&
caps
);
if
(
!
(
caps
&
IXGBE_ALT_SAN_MAC_ADDR_CAPS_ALTWWN
))
goto
wwn_prefix_out
;
/* get the corresponding prefix for WWNN/WWPN */
offset
=
alt_san_mac_blk_offset
+
IXGBE_ALT_SAN_MAC_ADDR_WWNN_OFFSET
;
hw
->
eeprom
.
ops
.
read
(
hw
,
offset
,
wwnn_prefix
);
offset
=
alt_san_mac_blk_offset
+
IXGBE_ALT_SAN_MAC_ADDR_WWPN_OFFSET
;
hw
->
eeprom
.
ops
.
read
(
hw
,
offset
,
wwpn_prefix
);
wwn_prefix_out:
return
0
;
}
static
struct
ixgbe_mac_operations
mac_ops_82599
=
{
.
init_hw
=
&
ixgbe_init_hw_generic
,
.
reset_hw
=
&
ixgbe_reset_hw_82599
,
...
...
@@ -2181,7 +2108,7 @@ static struct ixgbe_mac_operations mac_ops_82599 = {
.
get_mac_addr
=
&
ixgbe_get_mac_addr_generic
,
.
get_san_mac_addr
=
&
ixgbe_get_san_mac_addr_generic
,
.
get_device_caps
=
&
ixgbe_get_device_caps_82599
,
.
get_wwn_prefix
=
&
ixgbe_get_wwn_prefix_
82599
,
.
get_wwn_prefix
=
&
ixgbe_get_wwn_prefix_
generic
,
.
stop_adapter
=
&
ixgbe_stop_adapter_generic
,
.
get_bus_info
=
&
ixgbe_get_bus_info_generic
,
.
set_lan_id
=
&
ixgbe_set_lan_id_multi_port_pcie
,
...
...
@@ -2214,6 +2141,7 @@ static struct ixgbe_eeprom_operations eeprom_ops_82599 = {
.
init_params
=
&
ixgbe_init_eeprom_params_generic
,
.
read
=
&
ixgbe_read_eerd_generic
,
.
write
=
&
ixgbe_write_eeprom_generic
,
.
calc_checksum
=
&
ixgbe_calc_eeprom_checksum_generic
,
.
validate_checksum
=
&
ixgbe_validate_eeprom_checksum_generic
,
.
update_checksum
=
&
ixgbe_update_eeprom_checksum_generic
,
};
...
...
@@ -2240,5 +2168,5 @@ struct ixgbe_info ixgbe_82599_info = {
.
mac_ops
=
&
mac_ops_82599
,
.
eeprom_ops
=
&
eeprom_ops_82599
,
.
phy_ops
=
&
phy_ops_82599
,
.
mbx_ops
=
&
mbx_ops_
82599
,
.
mbx_ops
=
&
mbx_ops_
generic
,
};
drivers/net/ixgbe/ixgbe_common.c
View file @
a1082bfe
...
...
@@ -45,14 +45,12 @@ static u16 ixgbe_shift_in_eeprom_bits(struct ixgbe_hw *hw, u16 count);
static
void
ixgbe_raise_eeprom_clk
(
struct
ixgbe_hw
*
hw
,
u32
*
eec
);
static
void
ixgbe_lower_eeprom_clk
(
struct
ixgbe_hw
*
hw
,
u32
*
eec
);
static
void
ixgbe_release_eeprom
(
struct
ixgbe_hw
*
hw
);
static
u16
ixgbe_calc_eeprom_checksum
(
struct
ixgbe_hw
*
hw
);
static
void
ixgbe_enable_rar
(
struct
ixgbe_hw
*
hw
,
u32
index
);
static
void
ixgbe_disable_rar
(
struct
ixgbe_hw
*
hw
,
u32
index
);
static
s32
ixgbe_mta_vector
(
struct
ixgbe_hw
*
hw
,
u8
*
mc_addr
);
static
void
ixgbe_add_uc_addr
(
struct
ixgbe_hw
*
hw
,
u8
*
addr
,
u32
vmdq
);
static
s32
ixgbe_setup_fc
(
struct
ixgbe_hw
*
hw
,
s32
packetbuf_num
);
static
s32
ixgbe_poll_eerd_eewr_done
(
struct
ixgbe_hw
*
hw
,
u32
ee_reg
);
/**
* ixgbe_start_hw_generic - Prepare hardware for Tx/Rx
...
...
@@ -638,7 +636,7 @@ s32 ixgbe_read_eerd_generic(struct ixgbe_hw *hw, u16 offset, u16 *data)
* Polls the status bit (bit 1) of the EERD or EEWR to determine when the
* read or write is done respectively.
**/
s
tatic
s
32
ixgbe_poll_eerd_eewr_done
(
struct
ixgbe_hw
*
hw
,
u32
ee_reg
)
s32
ixgbe_poll_eerd_eewr_done
(
struct
ixgbe_hw
*
hw
,
u32
ee_reg
)
{
u32
i
;
u32
reg
;
...
...
@@ -1009,7 +1007,7 @@ static void ixgbe_release_eeprom(struct ixgbe_hw *hw)
* ixgbe_calc_eeprom_checksum - Calculates and returns the checksum
* @hw: pointer to hardware structure
**/
static
u16
ixgbe_calc_eeprom_checksum
(
struct
ixgbe_hw
*
hw
)
u16
ixgbe_calc_eeprom_checksum_generic
(
struct
ixgbe_hw
*
hw
)
{
u16
i
;
u16
j
;
...
...
@@ -1072,7 +1070,7 @@ s32 ixgbe_validate_eeprom_checksum_generic(struct ixgbe_hw *hw,
status
=
hw
->
eeprom
.
ops
.
read
(
hw
,
0
,
&
checksum
);
if
(
status
==
0
)
{
checksum
=
ixgbe_calc_eeprom
_checksum
(
hw
);
checksum
=
hw
->
eeprom
.
ops
.
calc
_checksum
(
hw
);
hw
->
eeprom
.
ops
.
read
(
hw
,
IXGBE_EEPROM_CHECKSUM
,
&
read_checksum
);
...
...
@@ -1110,7 +1108,7 @@ s32 ixgbe_update_eeprom_checksum_generic(struct ixgbe_hw *hw)
status
=
hw
->
eeprom
.
ops
.
read
(
hw
,
0
,
&
checksum
);
if
(
status
==
0
)
{
checksum
=
ixgbe_calc_eeprom
_checksum
(
hw
);
checksum
=
hw
->
eeprom
.
ops
.
calc
_checksum
(
hw
);
status
=
hw
->
eeprom
.
ops
.
write
(
hw
,
IXGBE_EEPROM_CHECKSUM
,
checksum
);
}
else
{
...
...
@@ -1595,6 +1593,7 @@ s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw, s32 packetbuf_num)
u32
mflcn_reg
,
fccfg_reg
;
u32
reg
;
u32
rx_pba_size
;
u32
fcrtl
,
fcrth
;
#ifdef CONFIG_DCB
if
(
hw
->
fc
.
requested_mode
==
ixgbe_fc_pfc
)
...
...
@@ -1671,41 +1670,21 @@ s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw, s32 packetbuf_num)
IXGBE_WRITE_REG
(
hw
,
IXGBE_MFLCN
,
mflcn_reg
);
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCCFG
,
fccfg_reg
);
reg
=
IXGBE_READ_REG
(
hw
,
IXGBE_MTQC
);
/* Thresholds are different for link flow control when in DCB mode */
if
(
reg
&
IXGBE_MTQC_RT_ENA
)
{
rx_pba_size
=
IXGBE_READ_REG
(
hw
,
IXGBE_RXPBSIZE
(
packetbuf_num
));
rx_pba_size
=
IXGBE_READ_REG
(
hw
,
IXGBE_RXPBSIZE
(
packetbuf_num
));
rx_pba_size
>>=
IXGBE_RXPBSIZE_SHIFT
;
/* Always disable XON for LFC when in DCB mode */
reg
=
(
rx_pba_size
>>
5
)
&
0xFFE0
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTL_82599
(
packetbuf_num
),
reg
);
fcrth
=
(
rx_pba_size
-
hw
->
fc
.
high_water
)
<<
10
;
fcrtl
=
(
rx_pba_size
-
hw
->
fc
.
low_water
)
<<
10
;
reg
=
(
rx_pba_size
>>
2
)
&
0xFFE0
;
if
(
hw
->
fc
.
current_mode
&
ixgbe_fc_tx_pause
)
reg
|=
IXGBE_FCRTH_FCEN
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTH_82599
(
packetbuf_num
),
reg
);
}
else
{
/*
* Set up and enable Rx high/low water mark thresholds,
* enable XON.
*/
if
(
hw
->
fc
.
current_mode
&
ixgbe_fc_tx_pause
)
{
if
(
hw
->
fc
.
send_xon
)
{
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTL_82599
(
packetbuf_num
),
(
hw
->
fc
.
low_water
|
IXGBE_FCRTL_XONE
));
}
else
{
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTL_82599
(
packetbuf_num
),
hw
->
fc
.
low_water
);
}
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTH_82599
(
packetbuf_num
),
(
hw
->
fc
.
high_water
|
IXGBE_FCRTH_FCEN
));
}
if
(
hw
->
fc
.
current_mode
&
ixgbe_fc_tx_pause
)
{
fcrth
|=
IXGBE_FCRTH_FCEN
;
if
(
hw
->
fc
.
send_xon
)
fcrtl
|=
IXGBE_FCRTL_XONE
;
}
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTH_82599
(
packetbuf_num
),
fcrth
);
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTL_82599
(
packetbuf_num
),
fcrtl
);
/* Configure pause time (2 TCs per register) */
reg
=
IXGBE_READ_REG
(
hw
,
IXGBE_FCTTV
(
packetbuf_num
/
2
));
if
((
packetbuf_num
&
1
)
==
0
)
...
...
@@ -2705,3 +2684,48 @@ s32 ixgbe_check_mac_link_generic(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
return
0
;
}
/**
* ixgbe_get_wwn_prefix_generic Get alternative WWNN/WWPN prefix from
* the EEPROM
* @hw: pointer to hardware structure
* @wwnn_prefix: the alternative WWNN prefix
* @wwpn_prefix: the alternative WWPN prefix
*
* This function will read the EEPROM from the alternative SAN MAC address
* block to check the support for the alternative WWNN/WWPN prefix support.
**/
s32
ixgbe_get_wwn_prefix_generic
(
struct
ixgbe_hw
*
hw
,
u16
*
wwnn_prefix
,
u16
*
wwpn_prefix
)
{
u16
offset
,
caps
;
u16
alt_san_mac_blk_offset
;
/* clear output first */
*
wwnn_prefix
=
0xFFFF
;
*
wwpn_prefix
=
0xFFFF
;
/* check if alternative SAN MAC is supported */
hw
->
eeprom
.
ops
.
read
(
hw
,
IXGBE_ALT_SAN_MAC_ADDR_BLK_PTR
,
&
alt_san_mac_blk_offset
);
if
((
alt_san_mac_blk_offset
==
0
)
||
(
alt_san_mac_blk_offset
==
0xFFFF
))
goto
wwn_prefix_out
;
/* check capability in alternative san mac address block */
offset
=
alt_san_mac_blk_offset
+
IXGBE_ALT_SAN_MAC_ADDR_CAPS_OFFSET
;
hw
->
eeprom
.
ops
.
read
(
hw
,
offset
,
&
caps
);
if
(
!
(
caps
&
IXGBE_ALT_SAN_MAC_ADDR_CAPS_ALTWWN
))
goto
wwn_prefix_out
;
/* get the corresponding prefix for WWNN/WWPN */
offset
=
alt_san_mac_blk_offset
+
IXGBE_ALT_SAN_MAC_ADDR_WWNN_OFFSET
;
hw
->
eeprom
.
ops
.
read
(
hw
,
offset
,
wwnn_prefix
);
offset
=
alt_san_mac_blk_offset
+
IXGBE_ALT_SAN_MAC_ADDR_WWPN_OFFSET
;
hw
->
eeprom
.
ops
.
read
(
hw
,
offset
,
wwpn_prefix
);
wwn_prefix_out:
return
0
;
}
drivers/net/ixgbe/ixgbe_common.h
View file @
a1082bfe
...
...
@@ -49,9 +49,11 @@ s32 ixgbe_write_eeprom_generic(struct ixgbe_hw *hw, u16 offset, u16 data);
s32
ixgbe_read_eerd_generic
(
struct
ixgbe_hw
*
hw
,
u16
offset
,
u16
*
data
);
s32
ixgbe_read_eeprom_bit_bang_generic
(
struct
ixgbe_hw
*
hw
,
u16
offset
,
u16
*
data
);
u16
ixgbe_calc_eeprom_checksum_generic
(
struct
ixgbe_hw
*
hw
);
s32
ixgbe_validate_eeprom_checksum_generic
(
struct
ixgbe_hw
*
hw
,
u16
*
checksum_val
);
s32
ixgbe_update_eeprom_checksum_generic
(
struct
ixgbe_hw
*
hw
);
s32
ixgbe_poll_eerd_eewr_done
(
struct
ixgbe_hw
*
hw
,
u32
ee_reg
);
s32
ixgbe_set_rar_generic
(
struct
ixgbe_hw
*
hw
,
u32
index
,
u8
*
addr
,
u32
vmdq
,
u32
enable_addr
);
...
...
@@ -81,7 +83,8 @@ s32 ixgbe_clear_vfta_generic(struct ixgbe_hw *hw);
s32
ixgbe_check_mac_link_generic
(
struct
ixgbe_hw
*
hw
,
ixgbe_link_speed
*
speed
,
bool
*
link_up
,
bool
link_up_wait_to_complete
);
s32
ixgbe_get_wwn_prefix_generic
(
struct
ixgbe_hw
*
hw
,
u16
*
wwnn_prefix
,
u16
*
wwpn_prefix
);
s32
ixgbe_blink_led_start_generic
(
struct
ixgbe_hw
*
hw
,
u32
index
);
s32
ixgbe_blink_led_stop_generic
(
struct
ixgbe_hw
*
hw
,
u32
index
);
...
...
drivers/net/ixgbe/ixgbe_dcb.c
View file @
a1082bfe
...
...
@@ -42,7 +42,8 @@
* It should be called only after the rules are checked by
* ixgbe_dcb_check_config().
*/
s32
ixgbe_dcb_calculate_tc_credits
(
struct
ixgbe_dcb_config
*
dcb_config
,
s32
ixgbe_dcb_calculate_tc_credits
(
struct
ixgbe_hw
*
hw
,
struct
ixgbe_dcb_config
*
dcb_config
,
int
max_frame
,
u8
direction
)
{
struct
tc_bw_alloc
*
p
;
...
...
@@ -124,7 +125,8 @@ s32 ixgbe_dcb_calculate_tc_credits(struct ixgbe_dcb_config *dcb_config,
* credit may not be enough to send out a TSO
* packet in descriptor plane arbitration.
*/
if
(
credit_max
&&
if
((
hw
->
mac
.
type
==
ixgbe_mac_82598EB
)
&&
credit_max
&&
(
credit_max
<
MINIMUM_CREDIT_FOR_TSO
))
credit_max
=
MINIMUM_CREDIT_FOR_TSO
;
...
...
@@ -150,10 +152,17 @@ s32 ixgbe_dcb_hw_config(struct ixgbe_hw *hw,
struct
ixgbe_dcb_config
*
dcb_config
)
{
s32
ret
=
0
;
if
(
hw
->
mac
.
type
==
ixgbe_mac_82598EB
)
switch
(
hw
->
mac
.
type
)
{
case
ixgbe_mac_82598EB
:
ret
=
ixgbe_dcb_hw_config_82598
(
hw
,
dcb_config
);
else
if
(
hw
->
mac
.
type
==
ixgbe_mac_82599EB
)
break
;
case
ixgbe_mac_82599EB
:
case
ixgbe_mac_X540
:
ret
=
ixgbe_dcb_hw_config_82599
(
hw
,
dcb_config
);
break
;
default:
break
;
}
return
ret
;
}
drivers/net/ixgbe/ixgbe_dcb.h
View file @
a1082bfe
...
...
@@ -150,7 +150,8 @@ struct ixgbe_dcb_config {
/* DCB driver APIs */
/* DCB credits calculation */
s32
ixgbe_dcb_calculate_tc_credits
(
struct
ixgbe_dcb_config
*
,
int
,
u8
);
s32
ixgbe_dcb_calculate_tc_credits
(
struct
ixgbe_hw
*
,
struct
ixgbe_dcb_config
*
,
int
,
u8
);
/* DCB hw initialization */
s32
ixgbe_dcb_hw_config
(
struct
ixgbe_hw
*
,
struct
ixgbe_dcb_config
*
);
...
...
drivers/net/ixgbe/ixgbe_dcb_82598.c
View file @
a1082bfe
...
...
@@ -256,21 +256,17 @@ s32 ixgbe_dcb_config_pfc_82598(struct ixgbe_hw *hw,
* for each traffic class.
*/
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
if
(
dcb_config
->
rx_pba_cfg
==
pba_equal
)
{
rx_pba_size
=
IXGBE_RXPBSIZE_64KB
;
}
else
{
rx_pba_size
=
(
i
<
4
)
?
IXGBE_RXPBSIZE_80KB
:
IXGBE_RXPBSIZE_48KB
;
}
rx_pba_size
=
IXGBE_READ_REG
(
hw
,
IXGBE_RXPBSIZE
(
i
));
rx_pba_size
>>=
IXGBE_RXPBSIZE_SHIFT
;
reg
=
(
rx_pba_size
-
hw
->
fc
.
low_water
)
<<
10
;
reg
=
((
rx_pba_size
>>
5
)
&
0xFFF0
);
if
(
dcb_config
->
tc_config
[
i
].
dcb_pfc
==
pfc_enabled_tx
||
dcb_config
->
tc_config
[
i
].
dcb_pfc
==
pfc_enabled_full
)
reg
|=
IXGBE_FCRTL_XONE
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTL
(
i
),
reg
);
reg
=
(
(
rx_pba_size
>>
2
)
&
0xFFF0
)
;
reg
=
(
rx_pba_size
-
hw
->
fc
.
high_water
)
<<
10
;
if
(
dcb_config
->
tc_config
[
i
].
dcb_pfc
==
pfc_enabled_tx
||
dcb_config
->
tc_config
[
i
].
dcb_pfc
==
pfc_enabled_full
)
reg
|=
IXGBE_FCRTH_FCEN
;
...
...
drivers/net/ixgbe/ixgbe_dcb_82599.c
View file @
a1082bfe
...
...
@@ -251,19 +251,17 @@ s32 ixgbe_dcb_config_pfc_82599(struct ixgbe_hw *hw,
/* Configure PFC Tx thresholds per TC */
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
if
(
dcb_config
->
rx_pba_cfg
==
pba_equal
)
rx_pba_size
=
IXGBE_RXPBSIZE_64KB
;
else
rx_pba_size
=
(
i
<
4
)
?
IXGBE_RXPBSIZE_80KB
:
IXGBE_RXPBSIZE_48KB
;
rx_pba_size
=
IXGBE_READ_REG
(
hw
,
IXGBE_RXPBSIZE
(
i
));
rx_pba_size
>>=
IXGBE_RXPBSIZE_SHIFT
;
reg
=
(
rx_pba_size
-
hw
->
fc
.
low_water
)
<<
10
;
reg
=
((
rx_pba_size
>>
5
)
&
0xFFE0
);
if
(
dcb_config
->
tc_config
[
i
].
dcb_pfc
==
pfc_enabled_full
||
dcb_config
->
tc_config
[
i
].
dcb_pfc
==
pfc_enabled_tx
)
reg
|=
IXGBE_FCRTL_XONE
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTL_82599
(
i
),
reg
);
reg
=
(
(
rx_pba_size
>>
2
)
&
0xFFE0
)
;
reg
=
(
rx_pba_size
-
hw
->
fc
.
high_water
)
<<
10
;
if
(
dcb_config
->
tc_config
[
i
].
dcb_pfc
==
pfc_enabled_full
||
dcb_config
->
tc_config
[
i
].
dcb_pfc
==
pfc_enabled_tx
)
reg
|=
IXGBE_FCRTH_FCEN
;
...
...
drivers/net/ixgbe/ixgbe_dcb_nl.c
View file @
a1082bfe
...
...
@@ -130,15 +130,21 @@ static u8 ixgbe_dcbnl_set_state(struct net_device *netdev, u8 state)
netdev
->
netdev_ops
->
ndo_stop
(
netdev
);
ixgbe_clear_interrupt_scheme
(
adapter
);
if
(
adapter
->
hw
.
mac
.
type
==
ixgbe_mac_82598EB
)
{
adapter
->
flags
&=
~
IXGBE_FLAG_RSS_ENABLED
;
switch
(
adapter
->
hw
.
mac
.
type
)
{
case
ixgbe_mac_82598EB
:
adapter
->
last_lfc_mode
=
adapter
->
hw
.
fc
.
current_mode
;
adapter
->
hw
.
fc
.
requested_mode
=
ixgbe_fc_none
;
}
adapter
->
flags
&=
~
IXGBE_FLAG_RSS_ENABLED
;
if
(
adapter
->
hw
.
mac
.
type
==
ixgbe_mac_82599EB
)
{
break
;
case
ixgbe_mac_82599EB
:
case
ixgbe_mac_X540
:
adapter
->
flags
&=
~
IXGBE_FLAG_FDIR_HASH_CAPABLE
;
adapter
->
flags
&=
~
IXGBE_FLAG_FDIR_PERFECT_CAPABLE
;
break
;
default:
break
;
}
adapter
->
flags
|=
IXGBE_FLAG_DCB_ENABLED
;
ixgbe_init_interrupt_scheme
(
adapter
);
if
(
netif_running
(
netdev
))
...
...
@@ -155,8 +161,14 @@ static u8 ixgbe_dcbnl_set_state(struct net_device *netdev, u8 state)
adapter
->
dcb_cfg
.
pfc_mode_enable
=
false
;
adapter
->
flags
&=
~
IXGBE_FLAG_DCB_ENABLED
;
adapter
->
flags
|=
IXGBE_FLAG_RSS_ENABLED
;
if
(
adapter
->
hw
.
mac
.
type
==
ixgbe_mac_82599EB
)
switch
(
adapter
->
hw
.
mac
.
type
)
{
case
ixgbe_mac_82599EB
:
case
ixgbe_mac_X540
:
adapter
->
flags
|=
IXGBE_FLAG_FDIR_HASH_CAPABLE
;
break
;
default:
break
;
}
ixgbe_init_interrupt_scheme
(
adapter
);
if
(
netif_running
(
netdev
))
...
...
@@ -178,9 +190,14 @@ static void ixgbe_dcbnl_get_perm_hw_addr(struct net_device *netdev,
for
(
i
=
0
;
i
<
netdev
->
addr_len
;
i
++
)
perm_addr
[
i
]
=
adapter
->
hw
.
mac
.
perm_addr
[
i
];
if
(
adapter
->
hw
.
mac
.
type
==
ixgbe_mac_82599EB
)
{
switch
(
adapter
->
hw
.
mac
.
type
)
{
case
ixgbe_mac_82599EB
:
case
ixgbe_mac_X540
:
for
(
j
=
0
;
j
<
netdev
->
addr_len
;
j
++
,
i
++
)
perm_addr
[
i
]
=
adapter
->
hw
.
mac
.
san_addr
[
j
];
break
;
default:
break
;
}
}
...
...
@@ -366,15 +383,29 @@ static u8 ixgbe_dcbnl_set_all(struct net_device *netdev)
}
if
(
adapter
->
dcb_cfg
.
pfc_mode_enable
)
{
if
((
adapter
->
hw
.
mac
.
type
!=
ixgbe_mac_82598EB
)
&&
(
adapter
->
hw
.
fc
.
current_mode
!=
ixgbe_fc_pfc
))
adapter
->
last_lfc_mode
=
adapter
->
hw
.
fc
.
current_mode
;
switch
(
adapter
->
hw
.
mac
.
type
)
{
case
ixgbe_mac_82599EB
:
case
ixgbe_mac_X540
:
if
(
adapter
->
hw
.
fc
.
current_mode
!=
ixgbe_fc_pfc
)
adapter
->
last_lfc_mode
=
adapter
->
hw
.
fc
.
current_mode
;
break
;
default:
break
;
}
adapter
->
hw
.
fc
.
requested_mode
=
ixgbe_fc_pfc
;
}
else
{
if
(
adapter
->
hw
.
mac
.
type
!=
ixgbe_mac_82598EB
)
adapter
->
hw
.
fc
.
requested_mode
=
adapter
->
last_lfc_mode
;
else
switch
(
adapter
->
hw
.
mac
.
type
)
{
case
ixgbe_mac_82598EB
:
adapter
->
hw
.
fc
.
requested_mode
=
ixgbe_fc_none
;
break
;
case
ixgbe_mac_82599EB
:
case
ixgbe_mac_X540
:
adapter
->
hw
.
fc
.
requested_mode
=
adapter
->
last_lfc_mode
;
break
;
default:
break
;
}
}
if
(
adapter
->
dcb_set_bitmap
&
BIT_RESETLINK
)
{
...
...
drivers/net/ixgbe/ixgbe_ethtool.c
View file @
a1082bfe
This diff is collapsed.
Click to expand it.
drivers/net/ixgbe/ixgbe_fcoe.c
View file @
a1082bfe
...
...
@@ -68,7 +68,7 @@ static inline bool ixgbe_rx_is_fcoe(union ixgbe_adv_rx_desc *rx_desc)
static
inline
void
ixgbe_fcoe_clear_ddp
(
struct
ixgbe_fcoe_ddp
*
ddp
)
{
ddp
->
len
=
0
;
ddp
->
err
=
0
;
ddp
->
err
=
1
;
ddp
->
udl
=
NULL
;
ddp
->
udp
=
0UL
;
ddp
->
sgl
=
NULL
;
...
...
@@ -92,6 +92,7 @@ int ixgbe_fcoe_ddp_put(struct net_device *netdev, u16 xid)
struct
ixgbe_fcoe
*
fcoe
;
struct
ixgbe_adapter
*
adapter
;
struct
ixgbe_fcoe_ddp
*
ddp
;
u32
fcbuff
;
if
(
!
netdev
)
goto
out_ddp_put
;
...
...
@@ -115,7 +116,14 @@ int ixgbe_fcoe_ddp_put(struct net_device *netdev, u16 xid)
IXGBE_WRITE_REG
(
&
adapter
->
hw
,
IXGBE_FCBUFF
,
0
);
IXGBE_WRITE_REG
(
&
adapter
->
hw
,
IXGBE_FCDMARW
,
(
xid
|
IXGBE_FCDMARW_WE
));
/* guaranteed to be invalidated after 100us */
IXGBE_WRITE_REG
(
&
adapter
->
hw
,
IXGBE_FCDMARW
,
(
xid
|
IXGBE_FCDMARW_RE
));
fcbuff
=
IXGBE_READ_REG
(
&
adapter
->
hw
,
IXGBE_FCBUFF
);
spin_unlock_bh
(
&
fcoe
->
lock
);
if
(
fcbuff
&
IXGBE_FCBUFF_VALID
)
udelay
(
100
);
}
if
(
ddp
->
sgl
)
pci_unmap_sg
(
adapter
->
pdev
,
ddp
->
sgl
,
ddp
->
sgc
,
...
...
@@ -168,6 +176,11 @@ int ixgbe_fcoe_ddp_get(struct net_device *netdev, u16 xid,
return
0
;
}
/* no DDP if we are already down or resetting */
if
(
test_bit
(
__IXGBE_DOWN
,
&
adapter
->
state
)
||
test_bit
(
__IXGBE_RESETTING
,
&
adapter
->
state
))
return
0
;
fcoe
=
&
adapter
->
fcoe
;
if
(
!
fcoe
->
pool
)
{
e_warn
(
drv
,
"xid=0x%x no ddp pool for fcoe
\n
"
,
xid
);
...
...
drivers/net/ixgbe/ixgbe_main.c
View file @
a1082bfe
This diff is collapsed.
Click to expand it.
drivers/net/ixgbe/ixgbe_mbx.c
View file @
a1082bfe
...
...
@@ -319,8 +319,14 @@ static s32 ixgbe_check_for_rst_pf(struct ixgbe_hw *hw, u16 vf_number)
u32
vflre
=
0
;
s32
ret_val
=
IXGBE_ERR_MBX
;
if
(
hw
->
mac
.
type
==
ixgbe_mac_82599EB
)
switch
(
hw
->
mac
.
type
)
{
case
ixgbe_mac_82599EB
:
case
ixgbe_mac_X540
:
vflre
=
IXGBE_READ_REG
(
hw
,
IXGBE_VFLRE
(
reg_offset
));
break
;
default:
break
;
}
if
(
vflre
&
(
1
<<
vf_shift
))
{
ret_val
=
0
;
...
...
@@ -439,22 +445,26 @@ void ixgbe_init_mbx_params_pf(struct ixgbe_hw *hw)
{
struct
ixgbe_mbx_info
*
mbx
=
&
hw
->
mbx
;
if
(
hw
->
mac
.
type
!=
ixgbe_mac_82599EB
)
return
;
mbx
->
timeout
=
0
;
mbx
->
usec_delay
=
0
;
mbx
->
size
=
IXGBE_VFMAILBOX_SIZE
;
mbx
->
stats
.
msgs_tx
=
0
;
mbx
->
stats
.
msgs_rx
=
0
;
mbx
->
stats
.
reqs
=
0
;
mbx
->
stats
.
acks
=
0
;
mbx
->
stats
.
rsts
=
0
;
switch
(
hw
->
mac
.
type
)
{
case
ixgbe_mac_82599EB
:
case
ixgbe_mac_X540
:
mbx
->
timeout
=
0
;
mbx
->
usec_delay
=
0
;
mbx
->
size
=
IXGBE_VFMAILBOX_SIZE
;
mbx
->
stats
.
msgs_tx
=
0
;
mbx
->
stats
.
msgs_rx
=
0
;
mbx
->
stats
.
reqs
=
0
;
mbx
->
stats
.
acks
=
0
;
mbx
->
stats
.
rsts
=
0
;
break
;
default:
break
;
}
}
struct
ixgbe_mbx_operations
mbx_ops_
82599
=
{
struct
ixgbe_mbx_operations
mbx_ops_
generic
=
{
.
read
=
ixgbe_read_mbx_pf
,
.
write
=
ixgbe_write_mbx_pf
,
.
read_posted
=
ixgbe_read_posted_mbx
,
...
...
drivers/net/ixgbe/ixgbe_mbx.h
View file @
a1082bfe
...
...
@@ -88,6 +88,6 @@ s32 ixgbe_check_for_ack(struct ixgbe_hw *, u16);
s32
ixgbe_check_for_rst
(
struct
ixgbe_hw
*
,
u16
);
void
ixgbe_init_mbx_params_pf
(
struct
ixgbe_hw
*
);
extern
struct
ixgbe_mbx_operations
mbx_ops_
82599
;
extern
struct
ixgbe_mbx_operations
mbx_ops_
generic
;
#endif
/* _IXGBE_MBX_H_ */
drivers/net/ixgbe/ixgbe_phy.c
View file @
a1082bfe
...
...
@@ -115,6 +115,9 @@ static enum ixgbe_phy_type ixgbe_get_phy_type_from_id(u32 phy_id)
case
TN1010_PHY_ID
:
phy_type
=
ixgbe_phy_tn
;
break
;
case
AQ1202_PHY_ID
:
phy_type
=
ixgbe_phy_aq
;
break
;
case
QT2022_PHY_ID
:
phy_type
=
ixgbe_phy_qt
;
break
;
...
...
@@ -424,6 +427,39 @@ s32 ixgbe_setup_phy_link_speed_generic(struct ixgbe_hw *hw,
return
0
;
}
/**
* ixgbe_get_copper_link_capabilities_generic - Determines link capabilities
* @hw: pointer to hardware structure
* @speed: pointer to link speed
* @autoneg: boolean auto-negotiation value
*
* Determines the link capabilities by reading the AUTOC register.
*/
s32
ixgbe_get_copper_link_capabilities_generic
(
struct
ixgbe_hw
*
hw
,
ixgbe_link_speed
*
speed
,
bool
*
autoneg
)
{
s32
status
=
IXGBE_ERR_LINK_SETUP
;
u16
speed_ability
;
*
speed
=
0
;
*
autoneg
=
true
;
status
=
hw
->
phy
.
ops
.
read_reg
(
hw
,
MDIO_SPEED
,
MDIO_MMD_PMAPMD
,
&
speed_ability
);
if
(
status
==
0
)
{
if
(
speed_ability
&
MDIO_SPEED_10G
)
*
speed
|=
IXGBE_LINK_SPEED_10GB_FULL
;
if
(
speed_ability
&
MDIO_PMA_SPEED_1000
)
*
speed
|=
IXGBE_LINK_SPEED_1GB_FULL
;
if
(
speed_ability
&
MDIO_PMA_SPEED_100
)
*
speed
|=
IXGBE_LINK_SPEED_100_FULL
;
}
return
status
;
}
/**
* ixgbe_reset_phy_nl - Performs a PHY reset
* @hw: pointer to hardware structure
...
...
@@ -1377,6 +1413,22 @@ s32 ixgbe_get_phy_firmware_version_tnx(struct ixgbe_hw *hw,
return
status
;
}
/**
* ixgbe_get_phy_firmware_version_generic - Gets the PHY Firmware Version
* @hw: pointer to hardware structure
* @firmware_version: pointer to the PHY Firmware Version
**/
s32
ixgbe_get_phy_firmware_version_generic
(
struct
ixgbe_hw
*
hw
,
u16
*
firmware_version
)
{
s32
status
=
0
;
status
=
hw
->
phy
.
ops
.
read_reg
(
hw
,
AQ_FW_REV
,
MDIO_MMD_VEND1
,
firmware_version
);
return
status
;
}
/**
* ixgbe_tn_check_overtemp - Checks if an overtemp occured.
* @hw: pointer to hardware structure
...
...
drivers/net/ixgbe/ixgbe_phy.h
View file @
a1082bfe
...
...
@@ -96,6 +96,9 @@ s32 ixgbe_setup_phy_link_speed_generic(struct ixgbe_hw *hw,
ixgbe_link_speed
speed
,
bool
autoneg
,
bool
autoneg_wait_to_complete
);
s32
ixgbe_get_copper_link_capabilities_generic
(
struct
ixgbe_hw
*
hw
,
ixgbe_link_speed
*
speed
,
bool
*
autoneg
);
/* PHY specific */
s32
ixgbe_check_phy_link_tnx
(
struct
ixgbe_hw
*
hw
,
...
...
@@ -103,6 +106,8 @@ s32 ixgbe_check_phy_link_tnx(struct ixgbe_hw *hw,
bool
*
link_up
);
s32
ixgbe_get_phy_firmware_version_tnx
(
struct
ixgbe_hw
*
hw
,
u16
*
firmware_version
);
s32
ixgbe_get_phy_firmware_version_generic
(
struct
ixgbe_hw
*
hw
,
u16
*
firmware_version
);
s32
ixgbe_reset_phy_nl
(
struct
ixgbe_hw
*
hw
);
s32
ixgbe_identify_sfp_module_generic
(
struct
ixgbe_hw
*
hw
);
...
...
drivers/net/ixgbe/ixgbe_sriov.c
View file @
a1082bfe
...
...
@@ -178,8 +178,7 @@ static int ixgbe_set_vf_mac(struct ixgbe_adapter *adapter,
int
ixgbe_vf_configuration
(
struct
pci_dev
*
pdev
,
unsigned
int
event_mask
)
{
unsigned
char
vf_mac_addr
[
6
];
struct
net_device
*
netdev
=
pci_get_drvdata
(
pdev
);
struct
ixgbe_adapter
*
adapter
=
netdev_priv
(
netdev
);
struct
ixgbe_adapter
*
adapter
=
pci_get_drvdata
(
pdev
);
unsigned
int
vfn
=
(
event_mask
&
0x3f
);
bool
enable
=
((
event_mask
&
0x10000000U
)
!=
0
);
...
...
drivers/net/ixgbe/ixgbe_type.h
View file @
a1082bfe
...
...
@@ -57,6 +57,8 @@
#define IXGBE_DEV_ID_82599_SFP_EM 0x1507
#define IXGBE_DEV_ID_82599_XAUI_LOM 0x10FC
#define IXGBE_DEV_ID_82599_COMBO_BACKPLANE 0x10F8
#define IXGBE_SUBDEV_ID_82599_KX4_KR_MEZZ 0x000C
#define IXGBE_DEV_ID_X540T 0x1528
/* General Registers */
#define IXGBE_CTRL 0x00000
...
...
@@ -994,8 +996,10 @@
/* PHY IDs*/
#define TN1010_PHY_ID 0x00A19410
#define TNX_FW_REV 0xB
#define AQ1202_PHY_ID 0x03A1B440
#define QT2022_PHY_ID 0x0043A400
#define ATH_PHY_ID 0x03429050
#define AQ_FW_REV 0x20
/* PHY Types */
#define IXGBE_M88E1145_E_PHY_ID 0x01410CD0
...
...
@@ -1491,6 +1495,7 @@
#define IXGBE_EEC_PRES 0x00000100
/* EEPROM Present */
#define IXGBE_EEC_ARD 0x00000200
/* EEPROM Auto Read Done */
#define IXGBE_EEC_FLUP 0x00800000
/* Flash update command */
#define IXGBE_EEC_SEC1VAL 0x02000000
/* Sector 1 Valid */
#define IXGBE_EEC_FLUDONE 0x04000000
/* Flash update done */
/* EEPROM Addressing bits based on type (0-small, 1-large) */
#define IXGBE_EEC_ADDR_SIZE 0x00000400
...
...
@@ -1505,7 +1510,9 @@
#define IXGBE_EEPROM_SUM 0xBABA
#define IXGBE_PCIE_ANALOG_PTR 0x03
#define IXGBE_ATLAS0_CONFIG_PTR 0x04
#define IXGBE_PHY_PTR 0x04
#define IXGBE_ATLAS1_CONFIG_PTR 0x05
#define IXGBE_OPTION_ROM_PTR 0x05
#define IXGBE_PCIE_GENERAL_PTR 0x06
#define IXGBE_PCIE_CONFIG0_PTR 0x07
#define IXGBE_PCIE_CONFIG1_PTR 0x08
...
...
@@ -2113,6 +2120,14 @@ typedef u32 ixgbe_physical_layer;
#define IXGBE_PHYSICAL_LAYER_10GBASE_XAUI 0x1000
#define IXGBE_PHYSICAL_LAYER_SFP_ACTIVE_DA 0x2000
/* Flow Control Macros */
#define PAUSE_RTT 8
#define PAUSE_MTU(MTU) ((MTU + 1024 - 1) / 1024)
#define FC_HIGH_WATER(MTU) ((((PAUSE_RTT + PAUSE_MTU(MTU)) * 144) + 99) / 100 +\
PAUSE_MTU(MTU))
#define FC_LOW_WATER(MTU) (2 * (2 * PAUSE_MTU(MTU) + PAUSE_RTT))
/* Software ATR hash keys */
#define IXGBE_ATR_BUCKET_HASH_KEY 0xE214AD3D
#define IXGBE_ATR_SIGNATURE_HASH_KEY 0x14364D17
...
...
@@ -2164,6 +2179,7 @@ struct ixgbe_atr_input_masks {
enum
ixgbe_eeprom_type
{
ixgbe_eeprom_uninitialized
=
0
,
ixgbe_eeprom_spi
,
ixgbe_flash
,
ixgbe_eeprom_none
/* No NVM support */
};
...
...
@@ -2171,12 +2187,14 @@ enum ixgbe_mac_type {
ixgbe_mac_unknown
=
0
,
ixgbe_mac_82598EB
,
ixgbe_mac_82599EB
,
ixgbe_mac_X540
,
ixgbe_num_macs
};
enum
ixgbe_phy_type
{
ixgbe_phy_unknown
=
0
,
ixgbe_phy_tn
,
ixgbe_phy_aq
,
ixgbe_phy_cu_unknown
,
ixgbe_phy_qt
,
ixgbe_phy_xaui
,
...
...
@@ -2405,6 +2423,7 @@ struct ixgbe_eeprom_operations {
s32
(
*
write
)(
struct
ixgbe_hw
*
,
u16
,
u16
);
s32
(
*
validate_checksum
)(
struct
ixgbe_hw
*
,
u16
*
);
s32
(
*
update_checksum
)(
struct
ixgbe_hw
*
);
u16
(
*
calc_checksum
)(
struct
ixgbe_hw
*
);
};
struct
ixgbe_mac_operations
{
...
...
@@ -2574,6 +2593,7 @@ struct ixgbe_hw {
u16
subsystem_vendor_id
;
u8
revision_id
;
bool
adapter_stopped
;
bool
force_full_reset
;
};
struct
ixgbe_info
{
...
...
drivers/net/ixgbe/ixgbe_x540.c
0 → 100644
View file @
a1082bfe
This diff is collapsed.
Click to expand it.
drivers/net/ixgbevf/Makefile
View file @
a1082bfe
################################################################################
#
# Intel 82599 Virtual Function driver
# Copyright(c) 1999 - 20
09
Intel Corporation.
# Copyright(c) 1999 - 20
10
Intel Corporation.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms and conditions of the GNU General Public License,
...
...
drivers/net/ixgbevf/defines.h
View file @
a1082bfe
/*******************************************************************************
Intel 82599 Virtual Function driver
Copyright(c) 1999 - 20
09
Intel Corporation.
Copyright(c) 1999 - 20
10
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/ixgbevf/ixgbevf.h
View file @
a1082bfe
/*******************************************************************************
Intel 82599 Virtual Function driver
Copyright(c) 1999 - 20
09
Intel Corporation.
Copyright(c) 1999 - 20
10
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/ixgbevf/ixgbevf_main.c
View file @
a1082bfe
/*******************************************************************************
Intel 82599 Virtual Function driver
Copyright(c) 1999 - 20
09
Intel Corporation.
Copyright(c) 1999 - 20
10
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
@@ -51,9 +51,10 @@ char ixgbevf_driver_name[] = "ixgbevf";
static
const
char
ixgbevf_driver_string
[]
=
"Intel(R) 82599 Virtual Function"
;
#define DRV_VERSION "1.0.
0
-k0"
#define DRV_VERSION "1.0.
12
-k0"
const
char
ixgbevf_driver_version
[]
=
DRV_VERSION
;
static
char
ixgbevf_copyright
[]
=
"Copyright (c) 2009 Intel Corporation."
;
static
char
ixgbevf_copyright
[]
=
"Copyright (c) 2009 - 2010 Intel Corporation."
;
static
const
struct
ixgbevf_info
*
ixgbevf_info_tbl
[]
=
{
[
board_82599_vf
]
=
&
ixgbevf_vf_info
,
...
...
@@ -3424,10 +3425,6 @@ static int __devinit ixgbevf_probe(struct pci_dev *pdev,
if
(
hw
->
mac
.
ops
.
get_bus_info
)
hw
->
mac
.
ops
.
get_bus_info
(
hw
);
netif_carrier_off
(
netdev
);
netif_tx_stop_all_queues
(
netdev
);
strcpy
(
netdev
->
name
,
"eth%d"
);
err
=
register_netdev
(
netdev
);
...
...
@@ -3436,6 +3433,8 @@ static int __devinit ixgbevf_probe(struct pci_dev *pdev,
adapter
->
netdev_registered
=
true
;
netif_carrier_off
(
netdev
);
ixgbevf_init_last_counter_stats
(
adapter
);
/* print the MAC address */
...
...
drivers/net/ixgbevf/mbx.c
View file @
a1082bfe
/*******************************************************************************
Intel 82599 Virtual Function driver
Copyright(c) 1999 - 20
09
Intel Corporation.
Copyright(c) 1999 - 20
10
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/ixgbevf/mbx.h
View file @
a1082bfe
/*******************************************************************************
Intel 82599 Virtual Function driver
Copyright(c) 1999 - 20
09
Intel Corporation.
Copyright(c) 1999 - 20
10
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/ixgbevf/regs.h
View file @
a1082bfe
/*******************************************************************************
Intel 82599 Virtual Function driver
Copyright(c) 1999 - 20
09
Intel Corporation.
Copyright(c) 1999 - 20
10
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/ixgbevf/vf.c
View file @
a1082bfe
/*******************************************************************************
Intel 82599 Virtual Function driver
Copyright(c) 1999 - 20
09
Intel Corporation.
Copyright(c) 1999 - 20
10
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/ixgbevf/vf.h
View file @
a1082bfe
/*******************************************************************************
Intel 82599 Virtual Function driver
Copyright(c) 1999 - 20
09
Intel Corporation.
Copyright(c) 1999 - 20
10
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
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