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
f85fa279
Commit
f85fa279
authored
Nov 16, 2011
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
358b8382
ea99d832
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
340 additions
and
299 deletions
+340
-299
drivers/net/ethernet/intel/e1000/e1000_hw.h
drivers/net/ethernet/intel/e1000/e1000_hw.h
+0
-1
drivers/net/ethernet/intel/e1000e/netdev.c
drivers/net/ethernet/intel/e1000e/netdev.c
+215
-173
drivers/net/ethernet/intel/igb/e1000_82575.c
drivers/net/ethernet/intel/igb/e1000_82575.c
+3
-2
drivers/net/ethernet/intel/igb/igb_main.c
drivers/net/ethernet/intel/igb/igb_main.c
+80
-85
drivers/net/ethernet/intel/igbvf/netdev.c
drivers/net/ethernet/intel/igbvf/netdev.c
+7
-7
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
+1
-1
drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
+3
-5
drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c
drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c
+11
-7
drivers/net/ethernet/intel/ixgbevf/defines.h
drivers/net/ethernet/intel/ixgbevf/defines.h
+0
-1
drivers/net/ethernet/intel/ixgbevf/ethtool.c
drivers/net/ethernet/intel/ixgbevf/ethtool.c
+4
-2
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
+14
-13
drivers/net/ethernet/intel/ixgbevf/vf.c
drivers/net/ethernet/intel/ixgbevf/vf.c
+2
-2
No files found.
drivers/net/ethernet/intel/e1000/e1000_hw.h
View file @
f85fa279
...
...
@@ -448,7 +448,6 @@ void e1000_io_write(struct e1000_hw *hw, unsigned long port, u32 value);
#define E1000_DEV_ID_INTEL_CE4100_GBE 0x2E6E
#define NODE_ADDRESS_SIZE 6
#define ETH_LENGTH_OF_ADDRESS 6
/* MAC decode size is 128K - This is the size of BAR0 */
#define MAC_DECODE_SIZE (128 * 1024)
...
...
drivers/net/ethernet/intel/e1000e/netdev.c
View file @
f85fa279
...
...
@@ -163,16 +163,13 @@ static void e1000_regdump(struct e1000_hw *hw, struct e1000_reg_info *reginfo)
regs
[
n
]
=
__er32
(
hw
,
E1000_TARC
(
n
));
break
;
default:
pr
intk
(
KERN_INFO
"%-15s %08x
\n
"
,
reginfo
->
name
,
__er32
(
hw
,
reginfo
->
ofs
));
pr
_info
(
"%-15s %08x
\n
"
,
reginfo
->
name
,
__er32
(
hw
,
reginfo
->
ofs
));
return
;
}
snprintf
(
rname
,
16
,
"%s%s"
,
reginfo
->
name
,
"[0-1]"
);
printk
(
KERN_INFO
"%-15s "
,
rname
);
for
(
n
=
0
;
n
<
2
;
n
++
)
printk
(
KERN_CONT
"%08x "
,
regs
[
n
]);
printk
(
KERN_CONT
"
\n
"
);
pr_info
(
"%-15s %08x %08x
\n
"
,
rname
,
regs
[
0
],
regs
[
1
]);
}
/*
...
...
@@ -208,16 +205,15 @@ static void e1000e_dump(struct e1000_adapter *adapter)
/* Print netdevice Info */
if
(
netdev
)
{
dev_info
(
&
adapter
->
pdev
->
dev
,
"Net device Info
\n
"
);
printk
(
KERN_INFO
"Device Name state "
"trans_start last_rx
\n
"
);
printk
(
KERN_INFO
"%-15s %016lX %016lX %016lX
\n
"
,
netdev
->
name
,
netdev
->
state
,
netdev
->
trans_start
,
netdev
->
last_rx
);
pr_info
(
"Device Name state trans_start last_rx
\n
"
);
pr_info
(
"%-15s %016lX %016lX %016lX
\n
"
,
netdev
->
name
,
netdev
->
state
,
netdev
->
trans_start
,
netdev
->
last_rx
);
}
/* Print Registers */
dev_info
(
&
adapter
->
pdev
->
dev
,
"Register Dump
\n
"
);
pr
intk
(
KERN_INFO
" Register Name Value
\n
"
);
pr
_info
(
" Register Name Value
\n
"
);
for
(
reginfo
=
(
struct
e1000_reg_info
*
)
e1000_reg_info_tbl
;
reginfo
->
name
;
reginfo
++
)
{
e1000_regdump
(
hw
,
reginfo
);
...
...
@@ -228,15 +224,14 @@ static void e1000e_dump(struct e1000_adapter *adapter)
goto
exit
;
dev_info
(
&
adapter
->
pdev
->
dev
,
"Tx Ring Summary
\n
"
);
printk
(
KERN_INFO
"Queue [NTU] [NTC] [bi(ntc)->dma ]"
" leng ntw timestamp
\n
"
);
pr_info
(
"Queue [NTU] [NTC] [bi(ntc)->dma ] leng ntw timestamp
\n
"
);
buffer_info
=
&
tx_ring
->
buffer_info
[
tx_ring
->
next_to_clean
];
pr
intk
(
KERN_INFO
" %5d %5X %5X %016llX %04X %3X %016llX
\n
"
,
0
,
tx_ring
->
next_to_use
,
tx_ring
->
next_to_clean
,
(
unsigned
long
long
)
buffer_info
->
dma
,
buffer_info
->
length
,
buffer_info
->
next_to_watch
,
(
unsigned
long
long
)
buffer_info
->
time_stamp
);
pr
_info
(
" %5d %5X %5X %016llX %04X %3X %016llX
\n
"
,
0
,
tx_ring
->
next_to_use
,
tx_ring
->
next_to_clean
,
(
unsigned
long
long
)
buffer_info
->
dma
,
buffer_info
->
length
,
buffer_info
->
next_to_watch
,
(
unsigned
long
long
)
buffer_info
->
time_stamp
);
/* Print Tx Ring */
if
(
!
netif_msg_tx_done
(
adapter
))
...
...
@@ -271,37 +266,32 @@ static void e1000e_dump(struct e1000_adapter *adapter)
* +----------------------------------------------------------------+
* 63 48 47 40 39 36 35 32 31 24 23 20 19 0
*/
printk
(
KERN_INFO
"Tl[desc] [address 63:0 ] [SpeCssSCmCsLen]"
" [bi->dma ] leng ntw timestamp bi->skb "
"<-- Legacy format
\n
"
);
printk
(
KERN_INFO
"Tc[desc] [Ce CoCsIpceCoS] [MssHlRSCm0Plen]"
" [bi->dma ] leng ntw timestamp bi->skb "
"<-- Ext Context format
\n
"
);
printk
(
KERN_INFO
"Td[desc] [address 63:0 ] [VlaPoRSCm1Dlen]"
" [bi->dma ] leng ntw timestamp bi->skb "
"<-- Ext Data format
\n
"
);
pr_info
(
"Tl[desc] [address 63:0 ] [SpeCssSCmCsLen] [bi->dma ] leng ntw timestamp bi->skb <-- Legacy format
\n
"
);
pr_info
(
"Tc[desc] [Ce CoCsIpceCoS] [MssHlRSCm0Plen] [bi->dma ] leng ntw timestamp bi->skb <-- Ext Context format
\n
"
);
pr_info
(
"Td[desc] [address 63:0 ] [VlaPoRSCm1Dlen] [bi->dma ] leng ntw timestamp bi->skb <-- Ext Data format
\n
"
);
for
(
i
=
0
;
tx_ring
->
desc
&&
(
i
<
tx_ring
->
count
);
i
++
)
{
const
char
*
next_desc
;
tx_desc
=
E1000_TX_DESC
(
*
tx_ring
,
i
);
buffer_info
=
&
tx_ring
->
buffer_info
[
i
];
u0
=
(
struct
my_u0
*
)
tx_desc
;
printk
(
KERN_INFO
"T%c[0x%03X] %016llX %016llX %016llX "
"%04X %3X %016llX %p"
,
(
!
(
le64_to_cpu
(
u0
->
b
)
&
(
1
<<
29
))
?
'l'
:
((
le64_to_cpu
(
u0
->
b
)
&
(
1
<<
20
))
?
'd'
:
'c'
)),
i
,
(
unsigned
long
long
)
le64_to_cpu
(
u0
->
a
),
(
unsigned
long
long
)
le64_to_cpu
(
u0
->
b
),
(
unsigned
long
long
)
buffer_info
->
dma
,
buffer_info
->
length
,
buffer_info
->
next_to_watch
,
(
unsigned
long
long
)
buffer_info
->
time_stamp
,
buffer_info
->
skb
);
if
(
i
==
tx_ring
->
next_to_use
&&
i
==
tx_ring
->
next_to_clean
)
printk
(
KERN_CONT
" NTC/U
\n
"
)
;
next_desc
=
" NTC/U"
;
else
if
(
i
==
tx_ring
->
next_to_use
)
printk
(
KERN_CONT
" NTU
\n
"
)
;
next_desc
=
" NTU"
;
else
if
(
i
==
tx_ring
->
next_to_clean
)
printk
(
KERN_CONT
" NTC
\n
"
)
;
next_desc
=
" NTC"
;
else
printk
(
KERN_CONT
"
\n
"
);
next_desc
=
""
;
pr_info
(
"T%c[0x%03X] %016llX %016llX %016llX %04X %3X %016llX %p%s
\n
"
,
(
!
(
le64_to_cpu
(
u0
->
b
)
&
(
1
<<
29
))
?
'l'
:
((
le64_to_cpu
(
u0
->
b
)
&
(
1
<<
20
))
?
'd'
:
'c'
)),
i
,
(
unsigned
long
long
)
le64_to_cpu
(
u0
->
a
),
(
unsigned
long
long
)
le64_to_cpu
(
u0
->
b
),
(
unsigned
long
long
)
buffer_info
->
dma
,
buffer_info
->
length
,
buffer_info
->
next_to_watch
,
(
unsigned
long
long
)
buffer_info
->
time_stamp
,
buffer_info
->
skb
,
next_desc
);
if
(
netif_msg_pktdata
(
adapter
)
&&
buffer_info
->
dma
!=
0
)
print_hex_dump
(
KERN_INFO
,
""
,
DUMP_PREFIX_ADDRESS
,
...
...
@@ -312,9 +302,9 @@ static void e1000e_dump(struct e1000_adapter *adapter)
/* Print Rx Ring Summary */
rx_ring_summary:
dev_info
(
&
adapter
->
pdev
->
dev
,
"Rx Ring Summary
\n
"
);
pr
intk
(
KERN_INFO
"Queue [NTU] [NTC]
\n
"
);
pr
intk
(
KERN_INFO
" %5d %5X %5X
\n
"
,
0
,
rx_ring
->
next_to_use
,
rx_ring
->
next_to_clean
);
pr
_info
(
"Queue [NTU] [NTC]
\n
"
);
pr
_info
(
" %5d %5X %5X
\n
"
,
0
,
rx_ring
->
next_to_use
,
rx_ring
->
next_to_clean
);
/* Print Rx Ring */
if
(
!
netif_msg_rx_status
(
adapter
))
...
...
@@ -337,10 +327,7 @@ static void e1000e_dump(struct e1000_adapter *adapter)
* 24 | Buffer Address 3 [63:0] |
* +-----------------------------------------------------+
*/
printk
(
KERN_INFO
"R [desc] [buffer 0 63:0 ] "
"[buffer 1 63:0 ] "
"[buffer 2 63:0 ] [buffer 3 63:0 ] [bi->dma ] "
"[bi->skb] <-- Ext Pkt Split format
\n
"
);
pr_info
(
"R [desc] [buffer 0 63:0 ] [buffer 1 63:0 ] [buffer 2 63:0 ] [buffer 3 63:0 ] [bi->dma ] [bi->skb] <-- Ext Pkt Split format
\n
"
);
/* [Extended] Receive Descriptor (Write-Back) Format
*
* 63 48 47 32 31 13 12 8 7 4 3 0
...
...
@@ -352,35 +339,40 @@ static void e1000e_dump(struct e1000_adapter *adapter)
* +------------------------------------------------------+
* 63 48 47 32 31 20 19 0
*/
printk
(
KERN_INFO
"RWB[desc] [ck ipid mrqhsh] "
"[vl l0 ee es] "
"[ l3 l2 l1 hs] [reserved ] ---------------- "
"[bi->skb] <-- Ext Rx Write-Back format
\n
"
);
pr_info
(
"RWB[desc] [ck ipid mrqhsh] [vl l0 ee es] [ l3 l2 l1 hs] [reserved ] ---------------- [bi->skb] <-- Ext Rx Write-Back format
\n
"
);
for
(
i
=
0
;
i
<
rx_ring
->
count
;
i
++
)
{
const
char
*
next_desc
;
buffer_info
=
&
rx_ring
->
buffer_info
[
i
];
rx_desc_ps
=
E1000_RX_DESC_PS
(
*
rx_ring
,
i
);
u1
=
(
struct
my_u1
*
)
rx_desc_ps
;
staterr
=
le32_to_cpu
(
rx_desc_ps
->
wb
.
middle
.
status_error
);
if
(
i
==
rx_ring
->
next_to_use
)
next_desc
=
" NTU"
;
else
if
(
i
==
rx_ring
->
next_to_clean
)
next_desc
=
" NTC"
;
else
next_desc
=
""
;
if
(
staterr
&
E1000_RXD_STAT_DD
)
{
/* Descriptor Done */
printk
(
KERN_INFO
"RWB[0x%03X] %016llX "
"%016llX %016llX %016llX "
"---------------- %p"
,
i
,
(
unsigned
long
long
)
le64_to_cpu
(
u1
->
a
),
(
unsigned
long
long
)
le64_to_cpu
(
u1
->
b
),
(
unsigned
long
long
)
le64_to_cpu
(
u1
->
c
),
(
unsigned
long
long
)
le64_to_cpu
(
u1
->
d
),
buffer_info
->
skb
);
pr_info
(
"%s[0x%03X] %016llX %016llX %016llX %016llX ---------------- %p%s
\n
"
,
"RWB"
,
i
,
(
unsigned
long
long
)
le64_to_cpu
(
u1
->
a
),
(
unsigned
long
long
)
le64_to_cpu
(
u1
->
b
),
(
unsigned
long
long
)
le64_to_cpu
(
u1
->
c
),
(
unsigned
long
long
)
le64_to_cpu
(
u1
->
d
),
buffer_info
->
skb
,
next_desc
);
}
else
{
pr
intk
(
KERN_INFO
"R [0x%03X] %016llX "
"%016llX %016llX %016llX %016llX %p
"
,
i
,
(
unsigned
long
long
)
le64_to_cpu
(
u1
->
a
),
(
unsigned
long
long
)
le64_to_cpu
(
u1
->
b
),
(
unsigned
long
long
)
le64_to_cpu
(
u1
->
c
),
(
unsigned
long
long
)
le64_to_cpu
(
u1
->
d
),
(
unsigned
long
long
)
buffer_info
->
dma
,
buffer_info
->
skb
);
pr
_info
(
"%s[0x%03X] %016llX %016llX %016llX %016llX %016llX %p%s
\n
"
,
"R
"
,
i
,
(
unsigned
long
long
)
le64_to_cpu
(
u1
->
a
),
(
unsigned
long
long
)
le64_to_cpu
(
u1
->
b
),
(
unsigned
long
long
)
le64_to_cpu
(
u1
->
c
),
(
unsigned
long
long
)
le64_to_cpu
(
u1
->
d
),
(
unsigned
long
long
)
buffer_info
->
dma
,
buffer_info
->
skb
,
next_desc
);
if
(
netif_msg_pktdata
(
adapter
))
print_hex_dump
(
KERN_INFO
,
""
,
...
...
@@ -388,13 +380,6 @@ static void e1000e_dump(struct e1000_adapter *adapter)
phys_to_virt
(
buffer_info
->
dma
),
adapter
->
rx_ps_bsize0
,
true
);
}
if
(
i
==
rx_ring
->
next_to_use
)
printk
(
KERN_CONT
" NTU
\n
"
);
else
if
(
i
==
rx_ring
->
next_to_clean
)
printk
(
KERN_CONT
" NTC
\n
"
);
else
printk
(
KERN_CONT
"
\n
"
);
}
break
;
default:
...
...
@@ -407,9 +392,7 @@ static void e1000e_dump(struct e1000_adapter *adapter)
* 8 | Reserved |
* +-----------------------------------------------------+
*/
printk
(
KERN_INFO
"R [desc] [buf addr 63:0 ] "
"[reserved 63:0 ] [bi->dma ] "
"[bi->skb] <-- Ext (Read) format
\n
"
);
pr_info
(
"R [desc] [buf addr 63:0 ] [reserved 63:0 ] [bi->dma ] [bi->skb] <-- Ext (Read) format
\n
"
);
/* Extended Receive Descriptor (Write-Back) Format
*
* 63 48 47 32 31 24 23 4 3 0
...
...
@@ -423,29 +406,37 @@ static void e1000e_dump(struct e1000_adapter *adapter)
* +------------------------------------------------------+
* 63 48 47 32 31 20 19 0
*/
printk
(
KERN_INFO
"RWB[desc] [cs ipid mrq] "
"[vt ln xe xs] "
"[bi->skb] <-- Ext (Write-Back) format
\n
"
);
pr_info
(
"RWB[desc] [cs ipid mrq] [vt ln xe xs] [bi->skb] <-- Ext (Write-Back) format
\n
"
);
for
(
i
=
0
;
i
<
rx_ring
->
count
;
i
++
)
{
const
char
*
next_desc
;
buffer_info
=
&
rx_ring
->
buffer_info
[
i
];
rx_desc
=
E1000_RX_DESC_EXT
(
*
rx_ring
,
i
);
u1
=
(
struct
my_u1
*
)
rx_desc
;
staterr
=
le32_to_cpu
(
rx_desc
->
wb
.
upper
.
status_error
);
if
(
i
==
rx_ring
->
next_to_use
)
next_desc
=
" NTU"
;
else
if
(
i
==
rx_ring
->
next_to_clean
)
next_desc
=
" NTC"
;
else
next_desc
=
""
;
if
(
staterr
&
E1000_RXD_STAT_DD
)
{
/* Descriptor Done */
pr
intk
(
KERN_INFO
"RWB[0x%03X] %016llX "
"%016llX ---------------- %p
"
,
i
,
(
unsigned
long
long
)
le64_to_cpu
(
u1
->
a
),
(
unsigned
long
long
)
le64_to_cpu
(
u1
->
b
),
buffer_info
->
skb
);
pr
_info
(
"%s[0x%03X] %016llX %016llX ---------------- %p%s
\n
"
,
"RWB
"
,
i
,
(
unsigned
long
long
)
le64_to_cpu
(
u1
->
a
),
(
unsigned
long
long
)
le64_to_cpu
(
u1
->
b
),
buffer_info
->
skb
,
next_desc
);
}
else
{
pr
intk
(
KERN_INFO
"R [0x%03X] %016llX "
"%016llX %016llX %p
"
,
i
,
(
unsigned
long
long
)
le64_to_cpu
(
u1
->
a
),
(
unsigned
long
long
)
le64_to_cpu
(
u1
->
b
),
(
unsigned
long
long
)
buffer_info
->
dma
,
buffer_info
->
skb
);
pr
_info
(
"%s[0x%03X] %016llX %016llX %016llX %p%s
\n
"
,
"R
"
,
i
,
(
unsigned
long
long
)
le64_to_cpu
(
u1
->
a
),
(
unsigned
long
long
)
le64_to_cpu
(
u1
->
b
),
(
unsigned
long
long
)
buffer_info
->
dma
,
buffer_info
->
skb
,
next_desc
);
if
(
netif_msg_pktdata
(
adapter
))
print_hex_dump
(
KERN_INFO
,
""
,
...
...
@@ -456,13 +447,6 @@ static void e1000e_dump(struct e1000_adapter *adapter)
adapter
->
rx_buffer_len
,
true
);
}
if
(
i
==
rx_ring
->
next_to_use
)
printk
(
KERN_CONT
" NTU
\n
"
);
else
if
(
i
==
rx_ring
->
next_to_clean
)
printk
(
KERN_CONT
" NTC
\n
"
);
else
printk
(
KERN_CONT
"
\n
"
);
}
}
...
...
@@ -1222,8 +1206,7 @@ static bool e1000_clean_rx_irq_ps(struct e1000_adapter *adapter,
adapter
->
flags2
|=
FLAG2_IS_DISCARDING
;
if
(
adapter
->
flags2
&
FLAG2_IS_DISCARDING
)
{
e_dbg
(
"Packet Split buffers didn't pick up the full "
"packet
\n
"
);
e_dbg
(
"Packet Split buffers didn't pick up the full packet
\n
"
);
dev_kfree_skb_irq
(
skb
);
if
(
staterr
&
E1000_RXD_STAT_EOP
)
adapter
->
flags2
&=
~
FLAG2_IS_DISCARDING
;
...
...
@@ -1238,8 +1221,7 @@ static bool e1000_clean_rx_irq_ps(struct e1000_adapter *adapter,
length
=
le16_to_cpu
(
rx_desc
->
wb
.
middle
.
length0
);
if
(
!
length
)
{
e_dbg
(
"Last part of the packet spanning multiple "
"descriptors
\n
"
);
e_dbg
(
"Last part of the packet spanning multiple descriptors
\n
"
);
dev_kfree_skb_irq
(
skb
);
goto
next_desc
;
}
...
...
@@ -1917,8 +1899,7 @@ void e1000e_set_interrupt_capability(struct e1000_adapter *adapter)
return
;
}
/* MSI-X failed, so fall through and try MSI */
e_err
(
"Failed to initialize MSI-X interrupts. "
"Falling back to MSI interrupts.
\n
"
);
e_err
(
"Failed to initialize MSI-X interrupts. Falling back to MSI interrupts.
\n
"
);
e1000e_reset_interrupt_capability
(
adapter
);
}
adapter
->
int_mode
=
E1000E_INT_MODE_MSI
;
...
...
@@ -1928,8 +1909,7 @@ void e1000e_set_interrupt_capability(struct e1000_adapter *adapter)
adapter
->
flags
|=
FLAG_MSI_ENABLED
;
}
else
{
adapter
->
int_mode
=
E1000E_INT_MODE_LEGACY
;
e_err
(
"Failed to initialize MSI interrupts. Falling "
"back to legacy interrupts.
\n
"
);
e_err
(
"Failed to initialize MSI interrupts. Falling back to legacy interrupts.
\n
"
);
}
/* Fall through */
case
E1000E_INT_MODE_LEGACY
:
...
...
@@ -3113,79 +3093,147 @@ static void e1000_configure_rx(struct e1000_adapter *adapter)
}
/**
* e1000_update_mc_addr_list - Update Multicast addresses
* @hw: pointer to the HW structure
* @mc_addr_list: array of multicast addresses to program
* @mc_addr_count: number of multicast addresses to program
* e1000e_write_mc_addr_list - write multicast addresses to MTA
* @netdev: network interface device structure
*
* Writes multicast address list to the MTA hash table.
* Returns: -ENOMEM on failure
* 0 on no addresses written
* X on writing X addresses to MTA
*/
static
int
e1000e_write_mc_addr_list
(
struct
net_device
*
netdev
)
{
struct
e1000_adapter
*
adapter
=
netdev_priv
(
netdev
);
struct
e1000_hw
*
hw
=
&
adapter
->
hw
;
struct
netdev_hw_addr
*
ha
;
u8
*
mta_list
;
int
i
;
if
(
netdev_mc_empty
(
netdev
))
{
/* nothing to program, so clear mc list */
hw
->
mac
.
ops
.
update_mc_addr_list
(
hw
,
NULL
,
0
);
return
0
;
}
mta_list
=
kzalloc
(
netdev_mc_count
(
netdev
)
*
ETH_ALEN
,
GFP_ATOMIC
);
if
(
!
mta_list
)
return
-
ENOMEM
;
/* update_mc_addr_list expects a packed array of only addresses. */
i
=
0
;
netdev_for_each_mc_addr
(
ha
,
netdev
)
memcpy
(
mta_list
+
(
i
++
*
ETH_ALEN
),
ha
->
addr
,
ETH_ALEN
);
hw
->
mac
.
ops
.
update_mc_addr_list
(
hw
,
mta_list
,
i
);
kfree
(
mta_list
);
return
netdev_mc_count
(
netdev
);
}
/**
* e1000e_write_uc_addr_list - write unicast addresses to RAR table
* @netdev: network interface device structure
*
* Updates the Multicast Table Array.
* The caller must have a packed mc_addr_list of multicast addresses.
* Writes unicast address list to the RAR table.
* Returns: -ENOMEM on failure/insufficient address space
* 0 on no addresses written
* X on writing X addresses to the RAR table
**/
static
void
e1000_update_mc_addr_list
(
struct
e1000_hw
*
hw
,
u8
*
mc_addr_list
,
u32
mc_addr_count
)
static
int
e1000e_write_uc_addr_list
(
struct
net_device
*
netdev
)
{
hw
->
mac
.
ops
.
update_mc_addr_list
(
hw
,
mc_addr_list
,
mc_addr_count
);
struct
e1000_adapter
*
adapter
=
netdev_priv
(
netdev
);
struct
e1000_hw
*
hw
=
&
adapter
->
hw
;
unsigned
int
rar_entries
=
hw
->
mac
.
rar_entry_count
;
int
count
=
0
;
/* save a rar entry for our hardware address */
rar_entries
--
;
/* save a rar entry for the LAA workaround */
if
(
adapter
->
flags
&
FLAG_RESET_OVERWRITES_LAA
)
rar_entries
--
;
/* return ENOMEM indicating insufficient memory for addresses */
if
(
netdev_uc_count
(
netdev
)
>
rar_entries
)
return
-
ENOMEM
;
if
(
!
netdev_uc_empty
(
netdev
)
&&
rar_entries
)
{
struct
netdev_hw_addr
*
ha
;
/*
* write the addresses in reverse order to avoid write
* combining
*/
netdev_for_each_uc_addr
(
ha
,
netdev
)
{
if
(
!
rar_entries
)
break
;
e1000e_rar_set
(
hw
,
ha
->
addr
,
rar_entries
--
);
count
++
;
}
}
/* zero out the remaining RAR entries not used above */
for
(;
rar_entries
>
0
;
rar_entries
--
)
{
ew32
(
RAH
(
rar_entries
),
0
);
ew32
(
RAL
(
rar_entries
),
0
);
}
e1e_flush
();
return
count
;
}
/**
* e1000
_set_multi -
Multicast and Promiscuous mode set
* e1000
e_set_rx_mode - secondary unicast,
Multicast and Promiscuous mode set
* @netdev: network interface device structure
*
* The
set_multi entry point is called whenever the multicast address
* list or the network interface flags are updated. This routine is
* responsible for configuring the hardware for proper multicast,
* The
ndo_set_rx_mode entry point is called whenever the unicast or multicast
*
address
list or the network interface flags are updated. This routine is
* responsible for configuring the hardware for proper
unicast,
multicast,
* promiscuous mode, and all-multi behavior.
**/
static
void
e1000
_set_multi
(
struct
net_device
*
netdev
)
static
void
e1000
e_set_rx_mode
(
struct
net_device
*
netdev
)
{
struct
e1000_adapter
*
adapter
=
netdev_priv
(
netdev
);
struct
e1000_hw
*
hw
=
&
adapter
->
hw
;
struct
netdev_hw_addr
*
ha
;
u8
*
mta_list
;
u32
rctl
;
/* Check for Promiscuous and All Multicast modes */
rctl
=
er32
(
RCTL
);
/* clear the affected bits */
rctl
&=
~
(
E1000_RCTL_UPE
|
E1000_RCTL_MPE
);
if
(
netdev
->
flags
&
IFF_PROMISC
)
{
rctl
|=
(
E1000_RCTL_UPE
|
E1000_RCTL_MPE
);
rctl
&=
~
E1000_RCTL_VFE
;
/* Do not hardware filter VLANs in promisc mode */
e1000e_vlan_filter_disable
(
adapter
);
}
else
{
int
count
;
if
(
netdev
->
flags
&
IFF_ALLMULTI
)
{
rctl
|=
E1000_RCTL_MPE
;
rctl
&=
~
E1000_RCTL_UPE
;
}
else
{
rctl
&=
~
(
E1000_RCTL_UPE
|
E1000_RCTL_MPE
);
/*
* Write addresses to the MTA, if the attempt fails
* then we should just turn on promiscuous mode so
* that we can at least receive multicast traffic
*/
count
=
e1000e_write_mc_addr_list
(
netdev
);
if
(
count
<
0
)
rctl
|=
E1000_RCTL_MPE
;
}
e1000e_vlan_filter_enable
(
adapter
);
}
ew32
(
RCTL
,
rctl
);
if
(
!
netdev_mc_empty
(
netdev
))
{
int
i
=
0
;
mta_list
=
kmalloc
(
netdev_mc_count
(
netdev
)
*
6
,
GFP_ATOMIC
);
if
(
!
mta_list
)
return
;
/* prepare a packed array of only addresses. */
netdev_for_each_mc_addr
(
ha
,
netdev
)
memcpy
(
mta_list
+
(
i
++
*
ETH_ALEN
),
ha
->
addr
,
ETH_ALEN
);
e1000_update_mc_addr_list
(
hw
,
mta_list
,
i
);
kfree
(
mta_list
);
}
else
{
/*
* if we're called from probe, we might not have
* anything to do here, so clear out the list
* Write addresses to available RAR registers, if there is not
* sufficient space to store all the addresses then enable
* unicast promiscuous mode
*/
e1000_update_mc_addr_list
(
hw
,
NULL
,
0
);
count
=
e1000e_write_uc_addr_list
(
netdev
);
if
(
count
<
0
)
rctl
|=
E1000_RCTL_UPE
;
}
ew32
(
RCTL
,
rctl
);
if
(
netdev
->
features
&
NETIF_F_HW_VLAN_RX
)
e1000e_vlan_strip_enable
(
adapter
);
else
...
...
@@ -3198,7 +3246,7 @@ static void e1000_set_multi(struct net_device *netdev)
**/
static
void
e1000_configure
(
struct
e1000_adapter
*
adapter
)
{
e1000
_set_multi
(
adapter
->
netdev
);
e1000
e_set_rx_mode
(
adapter
->
netdev
);
e1000_restore_vlan
(
adapter
);
e1000_init_manageability_pt
(
adapter
);
...
...
@@ -4168,16 +4216,13 @@ static void e1000_print_link_info(struct e1000_adapter *adapter)
u32
ctrl
=
er32
(
CTRL
);
/* Link status message must follow this format for user tools */
printk
(
KERN_INFO
"e1000e: %s NIC Link is Up %d Mbps %s, "
"Flow Control: %s
\n
"
,
adapter
->
netdev
->
name
,
adapter
->
link_speed
,
(
adapter
->
link_duplex
==
FULL_DUPLEX
)
?
"Full Duplex"
:
"Half Duplex"
,
((
ctrl
&
E1000_CTRL_TFCE
)
&&
(
ctrl
&
E1000_CTRL_RFCE
))
?
"Rx/Tx"
:
((
ctrl
&
E1000_CTRL_RFCE
)
?
"Rx"
:
((
ctrl
&
E1000_CTRL_TFCE
)
?
"Tx"
:
"None"
)));
printk
(
KERN_INFO
"e1000e: %s NIC Link is Up %d Mbps %s Duplex, Flow Control: %s
\n
"
,
adapter
->
netdev
->
name
,
adapter
->
link_speed
,
adapter
->
link_duplex
==
FULL_DUPLEX
?
"Full"
:
"Half"
,
(
ctrl
&
E1000_CTRL_TFCE
)
&&
(
ctrl
&
E1000_CTRL_RFCE
)
?
"Rx/Tx"
:
(
ctrl
&
E1000_CTRL_RFCE
)
?
"Rx"
:
(
ctrl
&
E1000_CTRL_TFCE
)
?
"Tx"
:
"None"
);
}
static
bool
e1000e_has_link
(
struct
e1000_adapter
*
adapter
)
...
...
@@ -4323,10 +4368,7 @@ static void e1000_watchdog_task(struct work_struct *work)
e1e_rphy
(
hw
,
PHY_AUTONEG_EXP
,
&
autoneg_exp
);
if
(
!
(
autoneg_exp
&
NWAY_ER_LP_NWAY_CAPS
))
e_info
(
"Autonegotiated half duplex but"
" link partner cannot autoneg. "
" Try forcing full duplex if "
"link gets many collisions.
\n
"
);
e_info
(
"Autonegotiated half duplex but link partner cannot autoneg. Try forcing full duplex if link gets many collisions.
\n
"
);
}
/* adjust timeout factor according to speed/duplex */
...
...
@@ -5110,8 +5152,7 @@ static int e1000_change_mtu(struct net_device *netdev, int new_mtu)
if
((
adapter
->
hw
.
mac
.
type
==
e1000_pch2lan
)
&&
!
(
adapter
->
flags2
&
FLAG2_CRC_STRIPPING
)
&&
(
new_mtu
>
ETH_DATA_LEN
))
{
e_err
(
"Jumbo Frames not supported on 82579 when CRC "
"stripping is disabled.
\n
"
);
e_err
(
"Jumbo Frames not supported on 82579 when CRC stripping is disabled.
\n
"
);
return
-
EINVAL
;
}
...
...
@@ -5331,7 +5372,7 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake,
if
(
wufc
)
{
e1000_setup_rctl
(
adapter
);
e1000
_set_multi
(
netdev
);
e1000
e_set_rx_mode
(
netdev
);
/* turn on all-multi mode if wake on multicast is enabled */
if
(
wufc
&
E1000_WUFC_MC
)
{
...
...
@@ -5527,8 +5568,8 @@ static int __e1000_resume(struct pci_dev *pdev)
phy_data
&
E1000_WUS_MC
?
"Multicast Packet"
:
phy_data
&
E1000_WUS_BC
?
"Broadcast Packet"
:
phy_data
&
E1000_WUS_MAG
?
"Magic Packet"
:
phy_data
&
E1000_WUS_LNKC
?
"Link Status "
" Change"
:
"other"
);
phy_data
&
E1000_WUS_LNKC
?
"
Link Status
Change"
:
"other"
);
}
e1e_wphy
(
&
adapter
->
hw
,
BM_WUS
,
~
0
);
}
else
{
...
...
@@ -5885,7 +5926,7 @@ static const struct net_device_ops e1000e_netdev_ops = {
.
ndo_stop
=
e1000_close
,
.
ndo_start_xmit
=
e1000_xmit_frame
,
.
ndo_get_stats64
=
e1000e_get_stats64
,
.
ndo_set_rx_mode
=
e1000
_set_multi
,
.
ndo_set_rx_mode
=
e1000
e_set_rx_mode
,
.
ndo_set_mac_address
=
e1000_set_mac
,
.
ndo_change_mtu
=
e1000_change_mtu
,
.
ndo_do_ioctl
=
e1000_ioctl
,
...
...
@@ -5950,8 +5991,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
err
=
dma_set_coherent_mask
(
&
pdev
->
dev
,
DMA_BIT_MASK
(
32
));
if
(
err
)
{
dev_err
(
&
pdev
->
dev
,
"No usable DMA "
"configuration, aborting
\n
"
);
dev_err
(
&
pdev
->
dev
,
"No usable DMA configuration, aborting
\n
"
);
goto
err_dma
;
}
}
...
...
@@ -6077,6 +6117,8 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
NETIF_F_TSO6
|
NETIF_F_HW_CSUM
);
netdev
->
priv_flags
|=
IFF_UNICAST_FLT
;
if
(
pci_using_dac
)
{
netdev
->
features
|=
NETIF_F_HIGHDMA
;
netdev
->
vlan_features
|=
NETIF_F_HIGHDMA
;
...
...
drivers/net/ethernet/intel/igb/e1000_82575.c
View file @
f85fa279
...
...
@@ -29,6 +29,8 @@
* e1000_82576
*/
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <linux/types.h>
#include <linux/if_ether.h>
...
...
@@ -244,8 +246,7 @@ static s32 igb_get_invariants_82575(struct e1000_hw *hw)
* Check for invalid size
*/
if
((
hw
->
mac
.
type
==
e1000_82576
)
&&
(
size
>
15
))
{
printk
(
"igb: The NVM size is not valid, "
"defaulting to 32K.
\n
"
);
pr_notice
(
"The NVM size is not valid, defaulting to 32K
\n
"
);
size
=
15
;
}
nvm
->
word_size
=
1
<<
size
;
...
...
drivers/net/ethernet/intel/igb/igb_main.c
View file @
f85fa279
...
...
@@ -25,6 +25,8 @@
*******************************************************************************/
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <linux/module.h>
#include <linux/types.h>
#include <linux/init.h>
...
...
@@ -325,16 +327,13 @@ static void igb_regdump(struct e1000_hw *hw, struct igb_reg_info *reginfo)
regs
[
n
]
=
rd32
(
E1000_TXDCTL
(
n
));
break
;
default:
printk
(
KERN_INFO
"%-15s %08x
\n
"
,
reginfo
->
name
,
rd32
(
reginfo
->
ofs
));
pr_info
(
"%-15s %08x
\n
"
,
reginfo
->
name
,
rd32
(
reginfo
->
ofs
));
return
;
}
snprintf
(
rname
,
16
,
"%s%s"
,
reginfo
->
name
,
"[0-3]"
);
printk
(
KERN_INFO
"%-15s "
,
rname
);
for
(
n
=
0
;
n
<
4
;
n
++
)
printk
(
KERN_CONT
"%08x "
,
regs
[
n
]);
printk
(
KERN_CONT
"
\n
"
);
pr_info
(
"%-15s %08x %08x %08x %08x
\n
"
,
rname
,
regs
[
0
],
regs
[
1
],
regs
[
2
],
regs
[
3
]);
}
/*
...
...
@@ -359,18 +358,15 @@ static void igb_dump(struct igb_adapter *adapter)
/* Print netdevice Info */
if
(
netdev
)
{
dev_info
(
&
adapter
->
pdev
->
dev
,
"Net device Info
\n
"
);
printk
(
KERN_INFO
"Device Name state "
"trans_start last_rx
\n
"
);
printk
(
KERN_INFO
"%-15s %016lX %016lX %016lX
\n
"
,
netdev
->
name
,
netdev
->
state
,
netdev
->
trans_start
,
netdev
->
last_rx
);
pr_info
(
"Device Name state trans_start "
"last_rx
\n
"
);
pr_info
(
"%-15s %016lX %016lX %016lX
\n
"
,
netdev
->
name
,
netdev
->
state
,
netdev
->
trans_start
,
netdev
->
last_rx
);
}
/* Print Registers */
dev_info
(
&
adapter
->
pdev
->
dev
,
"Register Dump
\n
"
);
pr
intk
(
KERN_INFO
" Register Name Value
\n
"
);
pr
_info
(
" Register Name Value
\n
"
);
for
(
reginfo
=
(
struct
igb_reg_info
*
)
igb_reg_info_tbl
;
reginfo
->
name
;
reginfo
++
)
{
igb_regdump
(
hw
,
reginfo
);
...
...
@@ -381,18 +377,17 @@ static void igb_dump(struct igb_adapter *adapter)
goto
exit
;
dev_info
(
&
adapter
->
pdev
->
dev
,
"TX Rings Summary
\n
"
);
printk
(
KERN_INFO
"Queue [NTU] [NTC] [bi(ntc)->dma ]"
" leng ntw timestamp
\n
"
);
pr_info
(
"Queue [NTU] [NTC] [bi(ntc)->dma ] leng ntw timestamp
\n
"
);
for
(
n
=
0
;
n
<
adapter
->
num_tx_queues
;
n
++
)
{
struct
igb_tx_buffer
*
buffer_info
;
tx_ring
=
adapter
->
tx_ring
[
n
];
buffer_info
=
&
tx_ring
->
tx_buffer_info
[
tx_ring
->
next_to_clean
];
pr
intk
(
KERN_INFO
" %5d %5X %5X %016llX %04X %p %016llX
\n
"
,
n
,
tx_ring
->
next_to_use
,
tx_ring
->
next_to_clean
,
(
u64
)
buffer_info
->
dma
,
buffer_info
->
length
,
buffer_info
->
next_to_watch
,
(
u64
)
buffer_info
->
time_stamp
);
pr
_info
(
" %5d %5X %5X %016llX %04X %p %016llX
\n
"
,
n
,
tx_ring
->
next_to_use
,
tx_ring
->
next_to_clean
,
(
u64
)
buffer_info
->
dma
,
buffer_info
->
length
,
buffer_info
->
next_to_watch
,
(
u64
)
buffer_info
->
time_stamp
);
}
/* Print TX Rings */
...
...
@@ -414,36 +409,38 @@ static void igb_dump(struct igb_adapter *adapter)
for
(
n
=
0
;
n
<
adapter
->
num_tx_queues
;
n
++
)
{
tx_ring
=
adapter
->
tx_ring
[
n
];
pr
intk
(
KERN_INFO
"------------------------------------
\n
"
);
pr
intk
(
KERN_INFO
"TX QUEUE INDEX = %d
\n
"
,
tx_ring
->
queue_index
);
pr
intk
(
KERN_INFO
"------------------------------------
\n
"
);
pr
intk
(
KERN_INFO
"T [desc] [address 63:0
] "
"[
PlPOCIStDDM Ln] [bi->dma ]
"
"
leng ntw timestamp
bi->skb
\n
"
);
pr
_info
(
"------------------------------------
\n
"
);
pr
_info
(
"TX QUEUE INDEX = %d
\n
"
,
tx_ring
->
queue_index
);
pr
_info
(
"------------------------------------
\n
"
);
pr
_info
(
"T [desc] [address 63:0 ] [PlPOCIStDDM Ln
] "
"[
bi->dma ] leng ntw timestamp
"
"bi->skb
\n
"
);
for
(
i
=
0
;
tx_ring
->
desc
&&
(
i
<
tx_ring
->
count
);
i
++
)
{
const
char
*
next_desc
;
struct
igb_tx_buffer
*
buffer_info
;
tx_desc
=
IGB_TX_DESC
(
tx_ring
,
i
);
buffer_info
=
&
tx_ring
->
tx_buffer_info
[
i
];
u0
=
(
struct
my_u0
*
)
tx_desc
;
printk
(
KERN_INFO
"T [0x%03X] %016llX %016llX %016llX"
" %04X %p %016llX %p"
,
i
,
if
(
i
==
tx_ring
->
next_to_use
&&
i
==
tx_ring
->
next_to_clean
)
next_desc
=
" NTC/U"
;
else
if
(
i
==
tx_ring
->
next_to_use
)
next_desc
=
" NTU"
;
else
if
(
i
==
tx_ring
->
next_to_clean
)
next_desc
=
" NTC"
;
else
next_desc
=
""
;
pr_info
(
"T [0x%03X] %016llX %016llX %016llX"
" %04X %p %016llX %p%s
\n
"
,
i
,
le64_to_cpu
(
u0
->
a
),
le64_to_cpu
(
u0
->
b
),
(
u64
)
buffer_info
->
dma
,
buffer_info
->
length
,
buffer_info
->
next_to_watch
,
(
u64
)
buffer_info
->
time_stamp
,
buffer_info
->
skb
);
if
(
i
==
tx_ring
->
next_to_use
&&
i
==
tx_ring
->
next_to_clean
)
printk
(
KERN_CONT
" NTC/U
\n
"
);
else
if
(
i
==
tx_ring
->
next_to_use
)
printk
(
KERN_CONT
" NTU
\n
"
);
else
if
(
i
==
tx_ring
->
next_to_clean
)
printk
(
KERN_CONT
" NTC
\n
"
);
else
printk
(
KERN_CONT
"
\n
"
);
buffer_info
->
skb
,
next_desc
);
if
(
netif_msg_pktdata
(
adapter
)
&&
buffer_info
->
dma
!=
0
)
print_hex_dump
(
KERN_INFO
,
""
,
...
...
@@ -456,11 +453,11 @@ static void igb_dump(struct igb_adapter *adapter)
/* Print RX Rings Summary */
rx_ring_summary:
dev_info
(
&
adapter
->
pdev
->
dev
,
"RX Rings Summary
\n
"
);
pr
intk
(
KERN_INFO
"Queue [NTU] [NTC]
\n
"
);
pr
_info
(
"Queue [NTU] [NTC]
\n
"
);
for
(
n
=
0
;
n
<
adapter
->
num_rx_queues
;
n
++
)
{
rx_ring
=
adapter
->
rx_ring
[
n
];
pr
intk
(
KERN_INFO
" %5d %5X %5X
\n
"
,
n
,
rx_ring
->
next_to_use
,
rx_ring
->
next_to_clean
);
pr
_info
(
" %5d %5X %5X
\n
"
,
n
,
rx_ring
->
next_to_use
,
rx_ring
->
next_to_clean
);
}
/* Print RX Rings */
...
...
@@ -492,36 +489,43 @@ static void igb_dump(struct igb_adapter *adapter)
for
(
n
=
0
;
n
<
adapter
->
num_rx_queues
;
n
++
)
{
rx_ring
=
adapter
->
rx_ring
[
n
];
printk
(
KERN_INFO
"------------------------------------
\n
"
);
printk
(
KERN_INFO
"RX QUEUE INDEX = %d
\n
"
,
rx_ring
->
queue_index
);
printk
(
KERN_INFO
"------------------------------------
\n
"
);
printk
(
KERN_INFO
"R [desc] [ PktBuf A0] "
"[ HeadBuf DD] [bi->dma ] [bi->skb] "
"<-- Adv Rx Read format
\n
"
);
printk
(
KERN_INFO
"RWB[desc] [PcsmIpSHl PtRs] "
"[vl er S cks ln] ---------------- [bi->skb] "
"<-- Adv Rx Write-Back format
\n
"
);
pr_info
(
"------------------------------------
\n
"
);
pr_info
(
"RX QUEUE INDEX = %d
\n
"
,
rx_ring
->
queue_index
);
pr_info
(
"------------------------------------
\n
"
);
pr_info
(
"R [desc] [ PktBuf A0] [ HeadBuf DD] "
"[bi->dma ] [bi->skb] <-- Adv Rx Read format
\n
"
);
pr_info
(
"RWB[desc] [PcsmIpSHl PtRs] [vl er S cks ln] -----"
"----------- [bi->skb] <-- Adv Rx Write-Back format
\n
"
);
for
(
i
=
0
;
i
<
rx_ring
->
count
;
i
++
)
{
const
char
*
next_desc
;
struct
igb_rx_buffer
*
buffer_info
;
buffer_info
=
&
rx_ring
->
rx_buffer_info
[
i
];
rx_desc
=
IGB_RX_DESC
(
rx_ring
,
i
);
u0
=
(
struct
my_u0
*
)
rx_desc
;
staterr
=
le32_to_cpu
(
rx_desc
->
wb
.
upper
.
status_error
);
if
(
i
==
rx_ring
->
next_to_use
)
next_desc
=
" NTU"
;
else
if
(
i
==
rx_ring
->
next_to_clean
)
next_desc
=
" NTC"
;
else
next_desc
=
""
;
if
(
staterr
&
E1000_RXD_STAT_DD
)
{
/* Descriptor Done */
pr
intk
(
KERN_INFO
"RWB[0x%03X] %016llX
"
"
%016llX ---------------- %p
"
,
i
,
pr
_info
(
"%s[0x%03X] %016llX %016llX -------
"
"
--------- %p%s
\n
"
,
"RWB
"
,
i
,
le64_to_cpu
(
u0
->
a
),
le64_to_cpu
(
u0
->
b
),
buffer_info
->
skb
);
buffer_info
->
skb
,
next_desc
);
}
else
{
pr
intk
(
KERN_INFO
"R [0x%03X] %016llX
"
"
%016llX %016llX %p
"
,
i
,
pr
_info
(
"%s[0x%03X] %016llX %016llX %016llX
"
"
%p%s
\n
"
,
"R
"
,
i
,
le64_to_cpu
(
u0
->
a
),
le64_to_cpu
(
u0
->
b
),
(
u64
)
buffer_info
->
dma
,
buffer_info
->
skb
);
buffer_info
->
skb
,
next_desc
);
if
(
netif_msg_pktdata
(
adapter
))
{
print_hex_dump
(
KERN_INFO
,
""
,
...
...
@@ -538,14 +542,6 @@ static void igb_dump(struct igb_adapter *adapter)
PAGE_SIZE
/
2
,
true
);
}
}
if
(
i
==
rx_ring
->
next_to_use
)
printk
(
KERN_CONT
" NTU
\n
"
);
else
if
(
i
==
rx_ring
->
next_to_clean
)
printk
(
KERN_CONT
" NTC
\n
"
);
else
printk
(
KERN_CONT
"
\n
"
);
}
}
...
...
@@ -599,10 +595,10 @@ struct net_device *igb_get_hw_dev(struct e1000_hw *hw)
static
int
__init
igb_init_module
(
void
)
{
int
ret
;
pr
intk
(
KERN_INFO
"%s - version %s
\n
"
,
pr
_info
(
"%s - version %s
\n
"
,
igb_driver_string
,
igb_driver_version
);
pr
intk
(
KERN_INFO
"%s
\n
"
,
igb_copyright
);
pr
_info
(
"%s
\n
"
,
igb_copyright
);
#ifdef CONFIG_IGB_DCA
dca_register_notify
(
&
dca_notifier
);
...
...
@@ -3642,23 +3638,23 @@ static void igb_watchdog_task(struct work_struct *work)
ctrl
=
rd32
(
E1000_CTRL
);
/* Links status message must follow this format */
printk
(
KERN_INFO
"igb: %s NIC Link is Up %d Mbps %s
,
"
"
Flow Control: %s
\n
"
,
printk
(
KERN_INFO
"igb: %s NIC Link is Up %d Mbps %s "
"Duplex,
Flow Control: %s
\n
"
,
netdev
->
name
,
adapter
->
link_speed
,
adapter
->
link_duplex
==
FULL_DUPLEX
?
"Full Duplex"
:
"Half Duplex
"
,
(
(
ctrl
&
E1000_CTRL_TFCE
)
&&
(
ctrl
&
E1000_CTRL_RFCE
)
)
?
"RX/TX"
:
(
(
ctrl
&
E1000_CTRL_RFCE
)
?
"RX"
:
(
(
ctrl
&
E1000_CTRL_TFCE
)
?
"TX"
:
"None"
))
);
"Full"
:
"Half
"
,
(
ctrl
&
E1000_CTRL_TFCE
)
&&
(
ctrl
&
E1000_CTRL_RFCE
)
?
"RX/TX"
:
(
ctrl
&
E1000_CTRL_RFCE
)
?
"RX"
:
(
ctrl
&
E1000_CTRL_TFCE
)
?
"TX"
:
"None"
);
/* check for thermal sensor event */
if
(
igb_thermal_sensor_event
(
hw
,
E1000_THSTAT_LINK_THROTTLE
))
{
printk
(
KERN_INFO
"igb: %s The network adapter "
"link speed was downshifted
"
"because it overheated.
\n
"
,
netdev
->
name
);
if
(
igb_thermal_sensor_event
(
hw
,
E1000_THSTAT_LINK_THROTTLE
))
{
netdev_info
(
netdev
,
"The network adapter link
"
"speed was downshifted because it "
"overheated
\n
"
);
}
/* adjust timeout factor according to speed/duplex */
...
...
@@ -3688,11 +3684,10 @@ static void igb_watchdog_task(struct work_struct *work)
adapter
->
link_duplex
=
0
;
/* check for thermal sensor event */
if
(
igb_thermal_sensor_event
(
hw
,
E1000_THSTAT_PWR_DOWN
))
{
printk
(
KERN_ERR
"igb: %s The network adapter "
"was stopped because it "
"overheated.
\n
"
,
netdev
->
name
);
if
(
igb_thermal_sensor_event
(
hw
,
E1000_THSTAT_PWR_DOWN
))
{
netdev_err
(
netdev
,
"The network adapter was "
"stopped because it overheated
\n
"
);
}
/* Links status message must follow this format */
...
...
drivers/net/ethernet/intel/igbvf/netdev.c
View file @
f85fa279
...
...
@@ -25,6 +25,8 @@
*******************************************************************************/
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <linux/module.h>
#include <linux/types.h>
#include <linux/init.h>
...
...
@@ -1746,10 +1748,9 @@ void igbvf_update_stats(struct igbvf_adapter *adapter)
static
void
igbvf_print_link_info
(
struct
igbvf_adapter
*
adapter
)
{
dev_info
(
&
adapter
->
pdev
->
dev
,
"Link is Up %d Mbps %s
\n
"
,
adapter
->
link_speed
,
((
adapter
->
link_duplex
==
FULL_DUPLEX
)
?
"Full Duplex"
:
"Half Duplex"
));
dev_info
(
&
adapter
->
pdev
->
dev
,
"Link is Up %d Mbps %s Duplex
\n
"
,
adapter
->
link_speed
,
adapter
->
link_duplex
==
FULL_DUPLEX
?
"Full"
:
"Half"
);
}
static
bool
igbvf_has_link
(
struct
igbvf_adapter
*
adapter
)
...
...
@@ -2843,9 +2844,8 @@ static struct pci_driver igbvf_driver = {
static
int
__init
igbvf_init_module
(
void
)
{
int
ret
;
printk
(
KERN_INFO
"%s - version %s
\n
"
,
igbvf_driver_string
,
igbvf_driver_version
);
printk
(
KERN_INFO
"%s
\n
"
,
igbvf_copyright
);
pr_info
(
"%s - version %s
\n
"
,
igbvf_driver_string
,
igbvf_driver_version
);
pr_info
(
"%s
\n
"
,
igbvf_copyright
);
ret
=
pci_register_driver
(
&
igbvf_driver
);
...
...
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
View file @
f85fa279
...
...
@@ -572,7 +572,7 @@ static int ixgbe_rcv_msg_from_vf(struct ixgbe_adapter *adapter, u32 vf)
/* reply to reset with ack and vf mac address */
msgbuf
[
0
]
=
IXGBE_VF_RESET
|
IXGBE_VT_MSGTYPE_ACK
;
memcpy
(
new_mac
,
vf_mac
,
IXGBE_ETH_LENGTH_OF_ADDRESS
);
memcpy
(
new_mac
,
vf_mac
,
ETH_ALEN
);
/*
* Piggyback the multicast filter type so VF can compute the
* correct vectors
...
...
drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
View file @
f85fa279
...
...
@@ -1710,8 +1710,6 @@ enum {
#define IXGBE_NVM_POLL_WRITE 1
/* Flag for polling for write complete */
#define IXGBE_NVM_POLL_READ 0
/* Flag for polling for read complete */
#define IXGBE_ETH_LENGTH_OF_ADDRESS 6
#define IXGBE_EEPROM_PAGE_SIZE_MAX 128
#define IXGBE_EEPROM_RD_BUFFER_MAX_COUNT 512
/* EEPROM words # read in burst */
#define IXGBE_EEPROM_WR_BUFFER_MAX_COUNT 256
/* EEPROM words # wr in burst */
...
...
@@ -2802,9 +2800,9 @@ struct ixgbe_eeprom_info {
struct
ixgbe_mac_info
{
struct
ixgbe_mac_operations
ops
;
enum
ixgbe_mac_type
type
;
u8
addr
[
IXGBE_ETH_LENGTH_OF_ADDRESS
];
u8
perm_addr
[
IXGBE_ETH_LENGTH_OF_ADDRESS
];
u8
san_addr
[
IXGBE_ETH_LENGTH_OF_ADDRESS
];
u8
addr
[
ETH_ALEN
];
u8
perm_addr
[
ETH_ALEN
];
u8
san_addr
[
ETH_ALEN
];
/* prefix for World Wide Node Name (WWNN) */
u16
wwnn_prefix
;
/* prefix for World Wide Port Name (WWPN) */
...
...
drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c
View file @
f85fa279
...
...
@@ -751,16 +751,20 @@ static s32 ixgbe_blink_led_start_X540(struct ixgbe_hw *hw, u32 index)
{
u32
macc_reg
;
u32
ledctl_reg
;
ixgbe_link_speed
speed
;
bool
link_up
;
/*
*
In order for the blink bit in the LED control register
*
to work, link and speed must be forced in the MAC. We
*
will reverse this
when we stop the blinking.
*
Link should be up in order for the blink bit in the LED control
*
register to work. Force link and speed in the MAC if link is down.
*
This will be reversed
when we stop the blinking.
*/
macc_reg
=
IXGBE_READ_REG
(
hw
,
IXGBE_MACC
);
macc_reg
|=
IXGBE_MACC_FLU
|
IXGBE_MACC_FSV_10G
|
IXGBE_MACC_FS
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_MACC
,
macc_reg
);
hw
->
mac
.
ops
.
check_link
(
hw
,
&
speed
,
&
link_up
,
false
);
if
(
link_up
==
false
)
{
macc_reg
=
IXGBE_READ_REG
(
hw
,
IXGBE_MACC
);
macc_reg
|=
IXGBE_MACC_FLU
|
IXGBE_MACC_FSV_10G
|
IXGBE_MACC_FS
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_MACC
,
macc_reg
);
}
/* Set the LED to LINK_UP + BLINK. */
ledctl_reg
=
IXGBE_READ_REG
(
hw
,
IXGBE_LEDCTL
);
ledctl_reg
&=
~
IXGBE_LED_MODE_MASK
(
index
);
...
...
drivers/net/ethernet/intel/ixgbevf/defines.h
View file @
f85fa279
...
...
@@ -35,7 +35,6 @@
#define IXGBE_VF_IRQ_CLEAR_MASK 7
#define IXGBE_VF_MAX_TX_QUEUES 1
#define IXGBE_VF_MAX_RX_QUEUES 1
#define IXGBE_ETH_LENGTH_OF_ADDRESS 6
/* Link speed */
typedef
u32
ixgbe_link_speed
;
...
...
drivers/net/ethernet/intel/ixgbevf/ethtool.c
View file @
f85fa279
...
...
@@ -27,6 +27,8 @@
/* ethtool support for ixgbevf */
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <linux/types.h>
#include <linux/module.h>
#include <linux/slab.h>
...
...
@@ -549,8 +551,8 @@ static const u32 register_test_patterns[] = {
writel((W & M), (adapter->hw.hw_addr + R)); \
val = readl(adapter->hw.hw_addr + R); \
if ((W & M) != (val & M)) { \
pr
intk(KERN_ERR "set/check reg %04X test failed: got 0x%08X
" \
"expected 0x%08X\n", R, (val & M), (W & M));
\
pr
_err("set/check reg %04X test failed: got 0x%08X expected
" \
"0x%08X\n", R, (val & M), (W & M));
\
*data = R; \
writel(before, (adapter->hw.hw_addr + R)); \
return 1; \
...
...
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
View file @
f85fa279
...
...
@@ -29,6 +29,9 @@
/******************************************************************************
Copyright (c)2006 - 2007 Myricom, Inc. for some LRO specific code
******************************************************************************/
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <linux/types.h>
#include <linux/bitops.h>
#include <linux/module.h>
...
...
@@ -1437,7 +1440,7 @@ static int ixgbevf_write_uc_addr_list(struct net_device *netdev)
int
count
=
0
;
if
((
netdev_uc_count
(
netdev
))
>
10
)
{
pr
intk
(
KERN_ERR
"Too many unicast filters - No Space
\n
"
);
pr
_err
(
"Too many unicast filters - No Space
\n
"
);
return
-
ENOSPC
;
}
...
...
@@ -2135,7 +2138,7 @@ static int ixgbevf_init_interrupt_scheme(struct ixgbevf_adapter *adapter)
err
=
ixgbevf_alloc_queues
(
adapter
);
if
(
err
)
{
pr
intk
(
KERN_ERR
"Unable to allocate memory for queues
\n
"
);
pr
_err
(
"Unable to allocate memory for queues
\n
"
);
goto
err_alloc_queues
;
}
...
...
@@ -2189,7 +2192,7 @@ static int __devinit ixgbevf_sw_init(struct ixgbevf_adapter *adapter)
}
else
{
err
=
hw
->
mac
.
ops
.
init_hw
(
hw
);
if
(
err
)
{
pr
intk
(
KERN_ERR
"init_shared_code failed: %d
\n
"
,
err
);
pr
_err
(
"init_shared_code failed: %d
\n
"
,
err
);
goto
out
;
}
}
...
...
@@ -2630,8 +2633,8 @@ static int ixgbevf_open(struct net_device *netdev)
* the vf can't start. */
if
(
hw
->
adapter_stopped
)
{
err
=
IXGBE_ERR_MBX
;
pr
intk
(
KERN_ERR
"Unable to start - perhaps the PF
"
"
Driver isn't
up yet
\n
"
);
pr
_err
(
"Unable to start - perhaps the PF Driver isn't
"
"up yet
\n
"
);
goto
err_setup_reset
;
}
}
...
...
@@ -2842,10 +2845,8 @@ static bool ixgbevf_tx_csum(struct ixgbevf_adapter *adapter,
break
;
default:
if
(
unlikely
(
net_ratelimit
()))
{
printk
(
KERN_WARNING
"partial checksum but "
"proto=%x!
\n
"
,
skb
->
protocol
);
pr_warn
(
"partial checksum but "
"proto=%x!
\n
"
,
skb
->
protocol
);
}
break
;
}
...
...
@@ -3415,7 +3416,7 @@ static int __devinit ixgbevf_probe(struct pci_dev *pdev,
memcpy
(
netdev
->
perm_addr
,
adapter
->
hw
.
mac
.
addr
,
netdev
->
addr_len
);
if
(
!
is_valid_ether_addr
(
netdev
->
dev_addr
))
{
pr
intk
(
KERN_ERR
"invalid MAC address
\n
"
);
pr
_err
(
"invalid MAC address
\n
"
);
err
=
-
EIO
;
goto
err_sw_init
;
}
...
...
@@ -3536,10 +3537,10 @@ static struct pci_driver ixgbevf_driver = {
static
int
__init
ixgbevf_init_module
(
void
)
{
int
ret
;
pr
intk
(
KERN_INFO
"ixgbevf:
%s - version %s
\n
"
,
ixgbevf_driver_string
,
ixgbevf_driver_version
);
pr
_info
(
"
%s - version %s
\n
"
,
ixgbevf_driver_string
,
ixgbevf_driver_version
);
pr
intk
(
KERN_INFO
"%s
\n
"
,
ixgbevf_copyright
);
pr
_info
(
"%s
\n
"
,
ixgbevf_copyright
);
ret
=
pci_register_driver
(
&
ixgbevf_driver
);
return
ret
;
...
...
drivers/net/ethernet/intel/ixgbevf/vf.c
View file @
f85fa279
...
...
@@ -108,7 +108,7 @@ static s32 ixgbevf_reset_hw_vf(struct ixgbe_hw *hw)
if
(
msgbuf
[
0
]
!=
(
IXGBE_VF_RESET
|
IXGBE_VT_MSGTYPE_ACK
))
return
IXGBE_ERR_INVALID_MAC_ADDR
;
memcpy
(
hw
->
mac
.
perm_addr
,
addr
,
IXGBE_ETH_LENGTH_OF_ADDRESS
);
memcpy
(
hw
->
mac
.
perm_addr
,
addr
,
ETH_ALEN
);
hw
->
mac
.
mc_filter_type
=
msgbuf
[
IXGBE_VF_MC_TYPE_WORD
];
return
0
;
...
...
@@ -211,7 +211,7 @@ static s32 ixgbevf_mta_vector(struct ixgbe_hw *hw, u8 *mc_addr)
**/
static
s32
ixgbevf_get_mac_addr_vf
(
struct
ixgbe_hw
*
hw
,
u8
*
mac_addr
)
{
memcpy
(
mac_addr
,
hw
->
mac
.
perm_addr
,
IXGBE_ETH_LENGTH_OF_ADDRESS
);
memcpy
(
mac_addr
,
hw
->
mac
.
perm_addr
,
ETH_ALEN
);
return
0
;
}
...
...
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