diff options
Diffstat (limited to 'drivers/net/ethernet/intel/e1000e/netdev.c')
-rw-r--r-- | drivers/net/ethernet/intel/e1000e/netdev.c | 393 |
1 files changed, 218 insertions, 175 deletions
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c index a855db1ad249..a5bd7a3dafc9 100644 --- a/drivers/net/ethernet/intel/e1000e/netdev.c +++ b/drivers/net/ethernet/intel/e1000e/netdev.c | |||
@@ -163,16 +163,13 @@ static void e1000_regdump(struct e1000_hw *hw, struct e1000_reg_info *reginfo) | |||
163 | regs[n] = __er32(hw, E1000_TARC(n)); | 163 | regs[n] = __er32(hw, E1000_TARC(n)); |
164 | break; | 164 | break; |
165 | default: | 165 | default: |
166 | printk(KERN_INFO "%-15s %08x\n", | 166 | pr_info("%-15s %08x\n", |
167 | reginfo->name, __er32(hw, reginfo->ofs)); | 167 | reginfo->name, __er32(hw, reginfo->ofs)); |
168 | return; | 168 | return; |
169 | } | 169 | } |
170 | 170 | ||
171 | snprintf(rname, 16, "%s%s", reginfo->name, "[0-1]"); | 171 | snprintf(rname, 16, "%s%s", reginfo->name, "[0-1]"); |
172 | printk(KERN_INFO "%-15s ", rname); | 172 | pr_info("%-15s %08x %08x\n", rname, regs[0], regs[1]); |
173 | for (n = 0; n < 2; n++) | ||
174 | printk(KERN_CONT "%08x ", regs[n]); | ||
175 | printk(KERN_CONT "\n"); | ||
176 | } | 173 | } |
177 | 174 | ||
178 | /* | 175 | /* |
@@ -208,16 +205,15 @@ static void e1000e_dump(struct e1000_adapter *adapter) | |||
208 | /* Print netdevice Info */ | 205 | /* Print netdevice Info */ |
209 | if (netdev) { | 206 | if (netdev) { |
210 | dev_info(&adapter->pdev->dev, "Net device Info\n"); | 207 | dev_info(&adapter->pdev->dev, "Net device Info\n"); |
211 | printk(KERN_INFO "Device Name state " | 208 | pr_info("Device Name state trans_start last_rx\n"); |
212 | "trans_start last_rx\n"); | 209 | pr_info("%-15s %016lX %016lX %016lX\n", |
213 | printk(KERN_INFO "%-15s %016lX %016lX %016lX\n", | 210 | netdev->name, netdev->state, netdev->trans_start, |
214 | netdev->name, netdev->state, netdev->trans_start, | 211 | netdev->last_rx); |
215 | netdev->last_rx); | ||
216 | } | 212 | } |
217 | 213 | ||
218 | /* Print Registers */ | 214 | /* Print Registers */ |
219 | dev_info(&adapter->pdev->dev, "Register Dump\n"); | 215 | dev_info(&adapter->pdev->dev, "Register Dump\n"); |
220 | printk(KERN_INFO " Register Name Value\n"); | 216 | pr_info(" Register Name Value\n"); |
221 | for (reginfo = (struct e1000_reg_info *)e1000_reg_info_tbl; | 217 | for (reginfo = (struct e1000_reg_info *)e1000_reg_info_tbl; |
222 | reginfo->name; reginfo++) { | 218 | reginfo->name; reginfo++) { |
223 | e1000_regdump(hw, reginfo); | 219 | e1000_regdump(hw, reginfo); |
@@ -228,15 +224,14 @@ static void e1000e_dump(struct e1000_adapter *adapter) | |||
228 | goto exit; | 224 | goto exit; |
229 | 225 | ||
230 | dev_info(&adapter->pdev->dev, "Tx Ring Summary\n"); | 226 | dev_info(&adapter->pdev->dev, "Tx Ring Summary\n"); |
231 | printk(KERN_INFO "Queue [NTU] [NTC] [bi(ntc)->dma ]" | 227 | pr_info("Queue [NTU] [NTC] [bi(ntc)->dma ] leng ntw timestamp\n"); |
232 | " leng ntw timestamp\n"); | ||
233 | buffer_info = &tx_ring->buffer_info[tx_ring->next_to_clean]; | 228 | buffer_info = &tx_ring->buffer_info[tx_ring->next_to_clean]; |
234 | printk(KERN_INFO " %5d %5X %5X %016llX %04X %3X %016llX\n", | 229 | pr_info(" %5d %5X %5X %016llX %04X %3X %016llX\n", |
235 | 0, tx_ring->next_to_use, tx_ring->next_to_clean, | 230 | 0, tx_ring->next_to_use, tx_ring->next_to_clean, |
236 | (unsigned long long)buffer_info->dma, | 231 | (unsigned long long)buffer_info->dma, |
237 | buffer_info->length, | 232 | buffer_info->length, |
238 | buffer_info->next_to_watch, | 233 | buffer_info->next_to_watch, |
239 | (unsigned long long)buffer_info->time_stamp); | 234 | (unsigned long long)buffer_info->time_stamp); |
240 | 235 | ||
241 | /* Print Tx Ring */ | 236 | /* Print Tx Ring */ |
242 | if (!netif_msg_tx_done(adapter)) | 237 | if (!netif_msg_tx_done(adapter)) |
@@ -271,37 +266,32 @@ static void e1000e_dump(struct e1000_adapter *adapter) | |||
271 | * +----------------------------------------------------------------+ | 266 | * +----------------------------------------------------------------+ |
272 | * 63 48 47 40 39 36 35 32 31 24 23 20 19 0 | 267 | * 63 48 47 40 39 36 35 32 31 24 23 20 19 0 |
273 | */ | 268 | */ |
274 | printk(KERN_INFO "Tl[desc] [address 63:0 ] [SpeCssSCmCsLen]" | 269 | pr_info("Tl[desc] [address 63:0 ] [SpeCssSCmCsLen] [bi->dma ] leng ntw timestamp bi->skb <-- Legacy format\n"); |
275 | " [bi->dma ] leng ntw timestamp bi->skb " | 270 | pr_info("Tc[desc] [Ce CoCsIpceCoS] [MssHlRSCm0Plen] [bi->dma ] leng ntw timestamp bi->skb <-- Ext Context format\n"); |
276 | "<-- Legacy format\n"); | 271 | pr_info("Td[desc] [address 63:0 ] [VlaPoRSCm1Dlen] [bi->dma ] leng ntw timestamp bi->skb <-- Ext Data format\n"); |
277 | printk(KERN_INFO "Tc[desc] [Ce CoCsIpceCoS] [MssHlRSCm0Plen]" | ||
278 | " [bi->dma ] leng ntw timestamp bi->skb " | ||
279 | "<-- Ext Context format\n"); | ||
280 | printk(KERN_INFO "Td[desc] [address 63:0 ] [VlaPoRSCm1Dlen]" | ||
281 | " [bi->dma ] leng ntw timestamp bi->skb " | ||
282 | "<-- Ext Data format\n"); | ||
283 | for (i = 0; tx_ring->desc && (i < tx_ring->count); i++) { | 272 | for (i = 0; tx_ring->desc && (i < tx_ring->count); i++) { |
273 | const char *next_desc; | ||
284 | tx_desc = E1000_TX_DESC(*tx_ring, i); | 274 | tx_desc = E1000_TX_DESC(*tx_ring, i); |
285 | buffer_info = &tx_ring->buffer_info[i]; | 275 | buffer_info = &tx_ring->buffer_info[i]; |
286 | u0 = (struct my_u0 *)tx_desc; | 276 | u0 = (struct my_u0 *)tx_desc; |
287 | printk(KERN_INFO "T%c[0x%03X] %016llX %016llX %016llX " | ||
288 | "%04X %3X %016llX %p", | ||
289 | (!(le64_to_cpu(u0->b) & (1 << 29)) ? 'l' : | ||
290 | ((le64_to_cpu(u0->b) & (1 << 20)) ? 'd' : 'c')), i, | ||
291 | (unsigned long long)le64_to_cpu(u0->a), | ||
292 | (unsigned long long)le64_to_cpu(u0->b), | ||
293 | (unsigned long long)buffer_info->dma, | ||
294 | buffer_info->length, buffer_info->next_to_watch, | ||
295 | (unsigned long long)buffer_info->time_stamp, | ||
296 | buffer_info->skb); | ||
297 | if (i == tx_ring->next_to_use && i == tx_ring->next_to_clean) | 277 | if (i == tx_ring->next_to_use && i == tx_ring->next_to_clean) |
298 | printk(KERN_CONT " NTC/U\n"); | 278 | next_desc = " NTC/U"; |
299 | else if (i == tx_ring->next_to_use) | 279 | else if (i == tx_ring->next_to_use) |
300 | printk(KERN_CONT " NTU\n"); | 280 | next_desc = " NTU"; |
301 | else if (i == tx_ring->next_to_clean) | 281 | else if (i == tx_ring->next_to_clean) |
302 | printk(KERN_CONT " NTC\n"); | 282 | next_desc = " NTC"; |
303 | else | 283 | else |
304 | printk(KERN_CONT "\n"); | 284 | next_desc = ""; |
285 | pr_info("T%c[0x%03X] %016llX %016llX %016llX %04X %3X %016llX %p%s\n", | ||
286 | (!(le64_to_cpu(u0->b) & (1 << 29)) ? 'l' : | ||
287 | ((le64_to_cpu(u0->b) & (1 << 20)) ? 'd' : 'c')), | ||
288 | i, | ||
289 | (unsigned long long)le64_to_cpu(u0->a), | ||
290 | (unsigned long long)le64_to_cpu(u0->b), | ||
291 | (unsigned long long)buffer_info->dma, | ||
292 | buffer_info->length, buffer_info->next_to_watch, | ||
293 | (unsigned long long)buffer_info->time_stamp, | ||
294 | buffer_info->skb, next_desc); | ||
305 | 295 | ||
306 | if (netif_msg_pktdata(adapter) && buffer_info->dma != 0) | 296 | if (netif_msg_pktdata(adapter) && buffer_info->dma != 0) |
307 | print_hex_dump(KERN_INFO, "", DUMP_PREFIX_ADDRESS, | 297 | print_hex_dump(KERN_INFO, "", DUMP_PREFIX_ADDRESS, |
@@ -312,9 +302,9 @@ static void e1000e_dump(struct e1000_adapter *adapter) | |||
312 | /* Print Rx Ring Summary */ | 302 | /* Print Rx Ring Summary */ |
313 | rx_ring_summary: | 303 | rx_ring_summary: |
314 | dev_info(&adapter->pdev->dev, "Rx Ring Summary\n"); | 304 | dev_info(&adapter->pdev->dev, "Rx Ring Summary\n"); |
315 | printk(KERN_INFO "Queue [NTU] [NTC]\n"); | 305 | pr_info("Queue [NTU] [NTC]\n"); |
316 | printk(KERN_INFO " %5d %5X %5X\n", 0, | 306 | pr_info(" %5d %5X %5X\n", |
317 | rx_ring->next_to_use, rx_ring->next_to_clean); | 307 | 0, rx_ring->next_to_use, rx_ring->next_to_clean); |
318 | 308 | ||
319 | /* Print Rx Ring */ | 309 | /* Print Rx Ring */ |
320 | if (!netif_msg_rx_status(adapter)) | 310 | if (!netif_msg_rx_status(adapter)) |
@@ -337,10 +327,7 @@ rx_ring_summary: | |||
337 | * 24 | Buffer Address 3 [63:0] | | 327 | * 24 | Buffer Address 3 [63:0] | |
338 | * +-----------------------------------------------------+ | 328 | * +-----------------------------------------------------+ |
339 | */ | 329 | */ |
340 | printk(KERN_INFO "R [desc] [buffer 0 63:0 ] " | 330 | 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"); |
341 | "[buffer 1 63:0 ] " | ||
342 | "[buffer 2 63:0 ] [buffer 3 63:0 ] [bi->dma ] " | ||
343 | "[bi->skb] <-- Ext Pkt Split format\n"); | ||
344 | /* [Extended] Receive Descriptor (Write-Back) Format | 331 | /* [Extended] Receive Descriptor (Write-Back) Format |
345 | * | 332 | * |
346 | * 63 48 47 32 31 13 12 8 7 4 3 0 | 333 | * 63 48 47 32 31 13 12 8 7 4 3 0 |
@@ -352,35 +339,40 @@ rx_ring_summary: | |||
352 | * +------------------------------------------------------+ | 339 | * +------------------------------------------------------+ |
353 | * 63 48 47 32 31 20 19 0 | 340 | * 63 48 47 32 31 20 19 0 |
354 | */ | 341 | */ |
355 | printk(KERN_INFO "RWB[desc] [ck ipid mrqhsh] " | 342 | pr_info("RWB[desc] [ck ipid mrqhsh] [vl l0 ee es] [ l3 l2 l1 hs] [reserved ] ---------------- [bi->skb] <-- Ext Rx Write-Back format\n"); |
356 | "[vl l0 ee es] " | ||
357 | "[ l3 l2 l1 hs] [reserved ] ---------------- " | ||
358 | "[bi->skb] <-- Ext Rx Write-Back format\n"); | ||
359 | for (i = 0; i < rx_ring->count; i++) { | 343 | for (i = 0; i < rx_ring->count; i++) { |
344 | const char *next_desc; | ||
360 | buffer_info = &rx_ring->buffer_info[i]; | 345 | buffer_info = &rx_ring->buffer_info[i]; |
361 | rx_desc_ps = E1000_RX_DESC_PS(*rx_ring, i); | 346 | rx_desc_ps = E1000_RX_DESC_PS(*rx_ring, i); |
362 | u1 = (struct my_u1 *)rx_desc_ps; | 347 | u1 = (struct my_u1 *)rx_desc_ps; |
363 | staterr = | 348 | staterr = |
364 | le32_to_cpu(rx_desc_ps->wb.middle.status_error); | 349 | le32_to_cpu(rx_desc_ps->wb.middle.status_error); |
350 | |||
351 | if (i == rx_ring->next_to_use) | ||
352 | next_desc = " NTU"; | ||
353 | else if (i == rx_ring->next_to_clean) | ||
354 | next_desc = " NTC"; | ||
355 | else | ||
356 | next_desc = ""; | ||
357 | |||
365 | if (staterr & E1000_RXD_STAT_DD) { | 358 | if (staterr & E1000_RXD_STAT_DD) { |
366 | /* Descriptor Done */ | 359 | /* Descriptor Done */ |
367 | printk(KERN_INFO "RWB[0x%03X] %016llX " | 360 | pr_info("%s[0x%03X] %016llX %016llX %016llX %016llX ---------------- %p%s\n", |
368 | "%016llX %016llX %016llX " | 361 | "RWB", i, |
369 | "---------------- %p", i, | 362 | (unsigned long long)le64_to_cpu(u1->a), |
370 | (unsigned long long)le64_to_cpu(u1->a), | 363 | (unsigned long long)le64_to_cpu(u1->b), |
371 | (unsigned long long)le64_to_cpu(u1->b), | 364 | (unsigned long long)le64_to_cpu(u1->c), |
372 | (unsigned long long)le64_to_cpu(u1->c), | 365 | (unsigned long long)le64_to_cpu(u1->d), |
373 | (unsigned long long)le64_to_cpu(u1->d), | 366 | buffer_info->skb, next_desc); |
374 | buffer_info->skb); | ||
375 | } else { | 367 | } else { |
376 | printk(KERN_INFO "R [0x%03X] %016llX " | 368 | pr_info("%s[0x%03X] %016llX %016llX %016llX %016llX %016llX %p%s\n", |
377 | "%016llX %016llX %016llX %016llX %p", i, | 369 | "R ", i, |
378 | (unsigned long long)le64_to_cpu(u1->a), | 370 | (unsigned long long)le64_to_cpu(u1->a), |
379 | (unsigned long long)le64_to_cpu(u1->b), | 371 | (unsigned long long)le64_to_cpu(u1->b), |
380 | (unsigned long long)le64_to_cpu(u1->c), | 372 | (unsigned long long)le64_to_cpu(u1->c), |
381 | (unsigned long long)le64_to_cpu(u1->d), | 373 | (unsigned long long)le64_to_cpu(u1->d), |
382 | (unsigned long long)buffer_info->dma, | 374 | (unsigned long long)buffer_info->dma, |
383 | buffer_info->skb); | 375 | buffer_info->skb, next_desc); |
384 | 376 | ||
385 | if (netif_msg_pktdata(adapter)) | 377 | if (netif_msg_pktdata(adapter)) |
386 | print_hex_dump(KERN_INFO, "", | 378 | print_hex_dump(KERN_INFO, "", |
@@ -388,13 +380,6 @@ rx_ring_summary: | |||
388 | phys_to_virt(buffer_info->dma), | 380 | phys_to_virt(buffer_info->dma), |
389 | adapter->rx_ps_bsize0, true); | 381 | adapter->rx_ps_bsize0, true); |
390 | } | 382 | } |
391 | |||
392 | if (i == rx_ring->next_to_use) | ||
393 | printk(KERN_CONT " NTU\n"); | ||
394 | else if (i == rx_ring->next_to_clean) | ||
395 | printk(KERN_CONT " NTC\n"); | ||
396 | else | ||
397 | printk(KERN_CONT "\n"); | ||
398 | } | 383 | } |
399 | break; | 384 | break; |
400 | default: | 385 | default: |
@@ -407,9 +392,7 @@ rx_ring_summary: | |||
407 | * 8 | Reserved | | 392 | * 8 | Reserved | |
408 | * +-----------------------------------------------------+ | 393 | * +-----------------------------------------------------+ |
409 | */ | 394 | */ |
410 | printk(KERN_INFO "R [desc] [buf addr 63:0 ] " | 395 | pr_info("R [desc] [buf addr 63:0 ] [reserved 63:0 ] [bi->dma ] [bi->skb] <-- Ext (Read) format\n"); |
411 | "[reserved 63:0 ] [bi->dma ] " | ||
412 | "[bi->skb] <-- Ext (Read) format\n"); | ||
413 | /* Extended Receive Descriptor (Write-Back) Format | 396 | /* Extended Receive Descriptor (Write-Back) Format |
414 | * | 397 | * |
415 | * 63 48 47 32 31 24 23 4 3 0 | 398 | * 63 48 47 32 31 24 23 4 3 0 |
@@ -423,29 +406,37 @@ rx_ring_summary: | |||
423 | * +------------------------------------------------------+ | 406 | * +------------------------------------------------------+ |
424 | * 63 48 47 32 31 20 19 0 | 407 | * 63 48 47 32 31 20 19 0 |
425 | */ | 408 | */ |
426 | printk(KERN_INFO "RWB[desc] [cs ipid mrq] " | 409 | pr_info("RWB[desc] [cs ipid mrq] [vt ln xe xs] [bi->skb] <-- Ext (Write-Back) format\n"); |
427 | "[vt ln xe xs] " | ||
428 | "[bi->skb] <-- Ext (Write-Back) format\n"); | ||
429 | 410 | ||
430 | for (i = 0; i < rx_ring->count; i++) { | 411 | for (i = 0; i < rx_ring->count; i++) { |
412 | const char *next_desc; | ||
413 | |||
431 | buffer_info = &rx_ring->buffer_info[i]; | 414 | buffer_info = &rx_ring->buffer_info[i]; |
432 | rx_desc = E1000_RX_DESC_EXT(*rx_ring, i); | 415 | rx_desc = E1000_RX_DESC_EXT(*rx_ring, i); |
433 | u1 = (struct my_u1 *)rx_desc; | 416 | u1 = (struct my_u1 *)rx_desc; |
434 | staterr = le32_to_cpu(rx_desc->wb.upper.status_error); | 417 | staterr = le32_to_cpu(rx_desc->wb.upper.status_error); |
418 | |||
419 | if (i == rx_ring->next_to_use) | ||
420 | next_desc = " NTU"; | ||
421 | else if (i == rx_ring->next_to_clean) | ||
422 | next_desc = " NTC"; | ||
423 | else | ||
424 | next_desc = ""; | ||
425 | |||
435 | if (staterr & E1000_RXD_STAT_DD) { | 426 | if (staterr & E1000_RXD_STAT_DD) { |
436 | /* Descriptor Done */ | 427 | /* Descriptor Done */ |
437 | printk(KERN_INFO "RWB[0x%03X] %016llX " | 428 | pr_info("%s[0x%03X] %016llX %016llX ---------------- %p%s\n", |
438 | "%016llX ---------------- %p", i, | 429 | "RWB", i, |
439 | (unsigned long long)le64_to_cpu(u1->a), | 430 | (unsigned long long)le64_to_cpu(u1->a), |
440 | (unsigned long long)le64_to_cpu(u1->b), | 431 | (unsigned long long)le64_to_cpu(u1->b), |
441 | buffer_info->skb); | 432 | buffer_info->skb, next_desc); |
442 | } else { | 433 | } else { |
443 | printk(KERN_INFO "R [0x%03X] %016llX " | 434 | pr_info("%s[0x%03X] %016llX %016llX %016llX %p%s\n", |
444 | "%016llX %016llX %p", i, | 435 | "R ", i, |
445 | (unsigned long long)le64_to_cpu(u1->a), | 436 | (unsigned long long)le64_to_cpu(u1->a), |
446 | (unsigned long long)le64_to_cpu(u1->b), | 437 | (unsigned long long)le64_to_cpu(u1->b), |
447 | (unsigned long long)buffer_info->dma, | 438 | (unsigned long long)buffer_info->dma, |
448 | buffer_info->skb); | 439 | buffer_info->skb, next_desc); |
449 | 440 | ||
450 | if (netif_msg_pktdata(adapter)) | 441 | if (netif_msg_pktdata(adapter)) |
451 | print_hex_dump(KERN_INFO, "", | 442 | print_hex_dump(KERN_INFO, "", |
@@ -456,13 +447,6 @@ rx_ring_summary: | |||
456 | adapter->rx_buffer_len, | 447 | adapter->rx_buffer_len, |
457 | true); | 448 | true); |
458 | } | 449 | } |
459 | |||
460 | if (i == rx_ring->next_to_use) | ||
461 | printk(KERN_CONT " NTU\n"); | ||
462 | else if (i == rx_ring->next_to_clean) | ||
463 | printk(KERN_CONT " NTC\n"); | ||
464 | else | ||
465 | printk(KERN_CONT "\n"); | ||
466 | } | 450 | } |
467 | } | 451 | } |
468 | 452 | ||
@@ -1222,8 +1206,7 @@ static bool e1000_clean_rx_irq_ps(struct e1000_adapter *adapter, | |||
1222 | adapter->flags2 |= FLAG2_IS_DISCARDING; | 1206 | adapter->flags2 |= FLAG2_IS_DISCARDING; |
1223 | 1207 | ||
1224 | if (adapter->flags2 & FLAG2_IS_DISCARDING) { | 1208 | if (adapter->flags2 & FLAG2_IS_DISCARDING) { |
1225 | e_dbg("Packet Split buffers didn't pick up the full " | 1209 | e_dbg("Packet Split buffers didn't pick up the full packet\n"); |
1226 | "packet\n"); | ||
1227 | dev_kfree_skb_irq(skb); | 1210 | dev_kfree_skb_irq(skb); |
1228 | if (staterr & E1000_RXD_STAT_EOP) | 1211 | if (staterr & E1000_RXD_STAT_EOP) |
1229 | adapter->flags2 &= ~FLAG2_IS_DISCARDING; | 1212 | adapter->flags2 &= ~FLAG2_IS_DISCARDING; |
@@ -1238,8 +1221,7 @@ static bool e1000_clean_rx_irq_ps(struct e1000_adapter *adapter, | |||
1238 | length = le16_to_cpu(rx_desc->wb.middle.length0); | 1221 | length = le16_to_cpu(rx_desc->wb.middle.length0); |
1239 | 1222 | ||
1240 | if (!length) { | 1223 | if (!length) { |
1241 | e_dbg("Last part of the packet spanning multiple " | 1224 | e_dbg("Last part of the packet spanning multiple descriptors\n"); |
1242 | "descriptors\n"); | ||
1243 | dev_kfree_skb_irq(skb); | 1225 | dev_kfree_skb_irq(skb); |
1244 | goto next_desc; | 1226 | goto next_desc; |
1245 | } | 1227 | } |
@@ -1917,8 +1899,7 @@ void e1000e_set_interrupt_capability(struct e1000_adapter *adapter) | |||
1917 | return; | 1899 | return; |
1918 | } | 1900 | } |
1919 | /* MSI-X failed, so fall through and try MSI */ | 1901 | /* MSI-X failed, so fall through and try MSI */ |
1920 | e_err("Failed to initialize MSI-X interrupts. " | 1902 | e_err("Failed to initialize MSI-X interrupts. Falling back to MSI interrupts.\n"); |
1921 | "Falling back to MSI interrupts.\n"); | ||
1922 | e1000e_reset_interrupt_capability(adapter); | 1903 | e1000e_reset_interrupt_capability(adapter); |
1923 | } | 1904 | } |
1924 | adapter->int_mode = E1000E_INT_MODE_MSI; | 1905 | adapter->int_mode = E1000E_INT_MODE_MSI; |
@@ -1928,8 +1909,7 @@ void e1000e_set_interrupt_capability(struct e1000_adapter *adapter) | |||
1928 | adapter->flags |= FLAG_MSI_ENABLED; | 1909 | adapter->flags |= FLAG_MSI_ENABLED; |
1929 | } else { | 1910 | } else { |
1930 | adapter->int_mode = E1000E_INT_MODE_LEGACY; | 1911 | adapter->int_mode = E1000E_INT_MODE_LEGACY; |
1931 | e_err("Failed to initialize MSI interrupts. Falling " | 1912 | e_err("Failed to initialize MSI interrupts. Falling back to legacy interrupts.\n"); |
1932 | "back to legacy interrupts.\n"); | ||
1933 | } | 1913 | } |
1934 | /* Fall through */ | 1914 | /* Fall through */ |
1935 | case E1000E_INT_MODE_LEGACY: | 1915 | case E1000E_INT_MODE_LEGACY: |
@@ -3113,79 +3093,147 @@ static void e1000_configure_rx(struct e1000_adapter *adapter) | |||
3113 | } | 3093 | } |
3114 | 3094 | ||
3115 | /** | 3095 | /** |
3116 | * e1000_update_mc_addr_list - Update Multicast addresses | 3096 | * e1000e_write_mc_addr_list - write multicast addresses to MTA |
3117 | * @hw: pointer to the HW structure | 3097 | * @netdev: network interface device structure |
3118 | * @mc_addr_list: array of multicast addresses to program | 3098 | * |
3119 | * @mc_addr_count: number of multicast addresses to program | 3099 | * Writes multicast address list to the MTA hash table. |
3100 | * Returns: -ENOMEM on failure | ||
3101 | * 0 on no addresses written | ||
3102 | * X on writing X addresses to MTA | ||
3103 | */ | ||
3104 | static int e1000e_write_mc_addr_list(struct net_device *netdev) | ||
3105 | { | ||
3106 | struct e1000_adapter *adapter = netdev_priv(netdev); | ||
3107 | struct e1000_hw *hw = &adapter->hw; | ||
3108 | struct netdev_hw_addr *ha; | ||
3109 | u8 *mta_list; | ||
3110 | int i; | ||
3111 | |||
3112 | if (netdev_mc_empty(netdev)) { | ||
3113 | /* nothing to program, so clear mc list */ | ||
3114 | hw->mac.ops.update_mc_addr_list(hw, NULL, 0); | ||
3115 | return 0; | ||
3116 | } | ||
3117 | |||
3118 | mta_list = kzalloc(netdev_mc_count(netdev) * ETH_ALEN, GFP_ATOMIC); | ||
3119 | if (!mta_list) | ||
3120 | return -ENOMEM; | ||
3121 | |||
3122 | /* update_mc_addr_list expects a packed array of only addresses. */ | ||
3123 | i = 0; | ||
3124 | netdev_for_each_mc_addr(ha, netdev) | ||
3125 | memcpy(mta_list + (i++ * ETH_ALEN), ha->addr, ETH_ALEN); | ||
3126 | |||
3127 | hw->mac.ops.update_mc_addr_list(hw, mta_list, i); | ||
3128 | kfree(mta_list); | ||
3129 | |||
3130 | return netdev_mc_count(netdev); | ||
3131 | } | ||
3132 | |||
3133 | /** | ||
3134 | * e1000e_write_uc_addr_list - write unicast addresses to RAR table | ||
3135 | * @netdev: network interface device structure | ||
3120 | * | 3136 | * |
3121 | * Updates the Multicast Table Array. | 3137 | * Writes unicast address list to the RAR table. |
3122 | * The caller must have a packed mc_addr_list of multicast addresses. | 3138 | * Returns: -ENOMEM on failure/insufficient address space |
3139 | * 0 on no addresses written | ||
3140 | * X on writing X addresses to the RAR table | ||
3123 | **/ | 3141 | **/ |
3124 | static void e1000_update_mc_addr_list(struct e1000_hw *hw, u8 *mc_addr_list, | 3142 | static int e1000e_write_uc_addr_list(struct net_device *netdev) |
3125 | u32 mc_addr_count) | ||
3126 | { | 3143 | { |
3127 | hw->mac.ops.update_mc_addr_list(hw, mc_addr_list, mc_addr_count); | 3144 | struct e1000_adapter *adapter = netdev_priv(netdev); |
3145 | struct e1000_hw *hw = &adapter->hw; | ||
3146 | unsigned int rar_entries = hw->mac.rar_entry_count; | ||
3147 | int count = 0; | ||
3148 | |||
3149 | /* save a rar entry for our hardware address */ | ||
3150 | rar_entries--; | ||
3151 | |||
3152 | /* save a rar entry for the LAA workaround */ | ||
3153 | if (adapter->flags & FLAG_RESET_OVERWRITES_LAA) | ||
3154 | rar_entries--; | ||
3155 | |||
3156 | /* return ENOMEM indicating insufficient memory for addresses */ | ||
3157 | if (netdev_uc_count(netdev) > rar_entries) | ||
3158 | return -ENOMEM; | ||
3159 | |||
3160 | if (!netdev_uc_empty(netdev) && rar_entries) { | ||
3161 | struct netdev_hw_addr *ha; | ||
3162 | |||
3163 | /* | ||
3164 | * write the addresses in reverse order to avoid write | ||
3165 | * combining | ||
3166 | */ | ||
3167 | netdev_for_each_uc_addr(ha, netdev) { | ||
3168 | if (!rar_entries) | ||
3169 | break; | ||
3170 | e1000e_rar_set(hw, ha->addr, rar_entries--); | ||
3171 | count++; | ||
3172 | } | ||
3173 | } | ||
3174 | |||
3175 | /* zero out the remaining RAR entries not used above */ | ||
3176 | for (; rar_entries > 0; rar_entries--) { | ||
3177 | ew32(RAH(rar_entries), 0); | ||
3178 | ew32(RAL(rar_entries), 0); | ||
3179 | } | ||
3180 | e1e_flush(); | ||
3181 | |||
3182 | return count; | ||
3128 | } | 3183 | } |
3129 | 3184 | ||
3130 | /** | 3185 | /** |
3131 | * e1000_set_multi - Multicast and Promiscuous mode set | 3186 | * e1000e_set_rx_mode - secondary unicast, Multicast and Promiscuous mode set |
3132 | * @netdev: network interface device structure | 3187 | * @netdev: network interface device structure |
3133 | * | 3188 | * |
3134 | * The set_multi entry point is called whenever the multicast address | 3189 | * The ndo_set_rx_mode entry point is called whenever the unicast or multicast |
3135 | * list or the network interface flags are updated. This routine is | 3190 | * address list or the network interface flags are updated. This routine is |
3136 | * responsible for configuring the hardware for proper multicast, | 3191 | * responsible for configuring the hardware for proper unicast, multicast, |
3137 | * promiscuous mode, and all-multi behavior. | 3192 | * promiscuous mode, and all-multi behavior. |
3138 | **/ | 3193 | **/ |
3139 | static void e1000_set_multi(struct net_device *netdev) | 3194 | static void e1000e_set_rx_mode(struct net_device *netdev) |
3140 | { | 3195 | { |
3141 | struct e1000_adapter *adapter = netdev_priv(netdev); | 3196 | struct e1000_adapter *adapter = netdev_priv(netdev); |
3142 | struct e1000_hw *hw = &adapter->hw; | 3197 | struct e1000_hw *hw = &adapter->hw; |
3143 | struct netdev_hw_addr *ha; | ||
3144 | u8 *mta_list; | ||
3145 | u32 rctl; | 3198 | u32 rctl; |
3146 | 3199 | ||
3147 | /* Check for Promiscuous and All Multicast modes */ | 3200 | /* Check for Promiscuous and All Multicast modes */ |
3148 | |||
3149 | rctl = er32(RCTL); | 3201 | rctl = er32(RCTL); |
3150 | 3202 | ||
3203 | /* clear the affected bits */ | ||
3204 | rctl &= ~(E1000_RCTL_UPE | E1000_RCTL_MPE); | ||
3205 | |||
3151 | if (netdev->flags & IFF_PROMISC) { | 3206 | if (netdev->flags & IFF_PROMISC) { |
3152 | rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE); | 3207 | rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE); |
3153 | rctl &= ~E1000_RCTL_VFE; | ||
3154 | /* Do not hardware filter VLANs in promisc mode */ | 3208 | /* Do not hardware filter VLANs in promisc mode */ |
3155 | e1000e_vlan_filter_disable(adapter); | 3209 | e1000e_vlan_filter_disable(adapter); |
3156 | } else { | 3210 | } else { |
3211 | int count; | ||
3157 | if (netdev->flags & IFF_ALLMULTI) { | 3212 | if (netdev->flags & IFF_ALLMULTI) { |
3158 | rctl |= E1000_RCTL_MPE; | 3213 | rctl |= E1000_RCTL_MPE; |
3159 | rctl &= ~E1000_RCTL_UPE; | ||
3160 | } else { | 3214 | } else { |
3161 | rctl &= ~(E1000_RCTL_UPE | E1000_RCTL_MPE); | 3215 | /* |
3216 | * Write addresses to the MTA, if the attempt fails | ||
3217 | * then we should just turn on promiscuous mode so | ||
3218 | * that we can at least receive multicast traffic | ||
3219 | */ | ||
3220 | count = e1000e_write_mc_addr_list(netdev); | ||
3221 | if (count < 0) | ||
3222 | rctl |= E1000_RCTL_MPE; | ||
3162 | } | 3223 | } |
3163 | e1000e_vlan_filter_enable(adapter); | 3224 | e1000e_vlan_filter_enable(adapter); |
3164 | } | ||
3165 | |||
3166 | ew32(RCTL, rctl); | ||
3167 | |||
3168 | if (!netdev_mc_empty(netdev)) { | ||
3169 | int i = 0; | ||
3170 | |||
3171 | mta_list = kmalloc(netdev_mc_count(netdev) * 6, GFP_ATOMIC); | ||
3172 | if (!mta_list) | ||
3173 | return; | ||
3174 | |||
3175 | /* prepare a packed array of only addresses. */ | ||
3176 | netdev_for_each_mc_addr(ha, netdev) | ||
3177 | memcpy(mta_list + (i++ * ETH_ALEN), ha->addr, ETH_ALEN); | ||
3178 | |||
3179 | e1000_update_mc_addr_list(hw, mta_list, i); | ||
3180 | kfree(mta_list); | ||
3181 | } else { | ||
3182 | /* | 3225 | /* |
3183 | * if we're called from probe, we might not have | 3226 | * Write addresses to available RAR registers, if there is not |
3184 | * anything to do here, so clear out the list | 3227 | * sufficient space to store all the addresses then enable |
3228 | * unicast promiscuous mode | ||
3185 | */ | 3229 | */ |
3186 | e1000_update_mc_addr_list(hw, NULL, 0); | 3230 | count = e1000e_write_uc_addr_list(netdev); |
3231 | if (count < 0) | ||
3232 | rctl |= E1000_RCTL_UPE; | ||
3187 | } | 3233 | } |
3188 | 3234 | ||
3235 | ew32(RCTL, rctl); | ||
3236 | |||
3189 | if (netdev->features & NETIF_F_HW_VLAN_RX) | 3237 | if (netdev->features & NETIF_F_HW_VLAN_RX) |
3190 | e1000e_vlan_strip_enable(adapter); | 3238 | e1000e_vlan_strip_enable(adapter); |
3191 | else | 3239 | else |
@@ -3198,7 +3246,7 @@ static void e1000_set_multi(struct net_device *netdev) | |||
3198 | **/ | 3246 | **/ |
3199 | static void e1000_configure(struct e1000_adapter *adapter) | 3247 | static void e1000_configure(struct e1000_adapter *adapter) |
3200 | { | 3248 | { |
3201 | e1000_set_multi(adapter->netdev); | 3249 | e1000e_set_rx_mode(adapter->netdev); |
3202 | 3250 | ||
3203 | e1000_restore_vlan(adapter); | 3251 | e1000_restore_vlan(adapter); |
3204 | e1000_init_manageability_pt(adapter); | 3252 | e1000_init_manageability_pt(adapter); |
@@ -4168,16 +4216,13 @@ static void e1000_print_link_info(struct e1000_adapter *adapter) | |||
4168 | u32 ctrl = er32(CTRL); | 4216 | u32 ctrl = er32(CTRL); |
4169 | 4217 | ||
4170 | /* Link status message must follow this format for user tools */ | 4218 | /* Link status message must follow this format for user tools */ |
4171 | printk(KERN_INFO "e1000e: %s NIC Link is Up %d Mbps %s, " | 4219 | printk(KERN_INFO "e1000e: %s NIC Link is Up %d Mbps %s Duplex, Flow Control: %s\n", |
4172 | "Flow Control: %s\n", | 4220 | adapter->netdev->name, |
4173 | adapter->netdev->name, | 4221 | adapter->link_speed, |
4174 | adapter->link_speed, | 4222 | adapter->link_duplex == FULL_DUPLEX ? "Full" : "Half", |
4175 | (adapter->link_duplex == FULL_DUPLEX) ? | 4223 | (ctrl & E1000_CTRL_TFCE) && (ctrl & E1000_CTRL_RFCE) ? "Rx/Tx" : |
4176 | "Full Duplex" : "Half Duplex", | 4224 | (ctrl & E1000_CTRL_RFCE) ? "Rx" : |
4177 | ((ctrl & E1000_CTRL_TFCE) && (ctrl & E1000_CTRL_RFCE)) ? | 4225 | (ctrl & E1000_CTRL_TFCE) ? "Tx" : "None"); |
4178 | "Rx/Tx" : | ||
4179 | ((ctrl & E1000_CTRL_RFCE) ? "Rx" : | ||
4180 | ((ctrl & E1000_CTRL_TFCE) ? "Tx" : "None"))); | ||
4181 | } | 4226 | } |
4182 | 4227 | ||
4183 | static bool e1000e_has_link(struct e1000_adapter *adapter) | 4228 | static bool e1000e_has_link(struct e1000_adapter *adapter) |
@@ -4323,10 +4368,7 @@ static void e1000_watchdog_task(struct work_struct *work) | |||
4323 | e1e_rphy(hw, PHY_AUTONEG_EXP, &autoneg_exp); | 4368 | e1e_rphy(hw, PHY_AUTONEG_EXP, &autoneg_exp); |
4324 | 4369 | ||
4325 | if (!(autoneg_exp & NWAY_ER_LP_NWAY_CAPS)) | 4370 | if (!(autoneg_exp & NWAY_ER_LP_NWAY_CAPS)) |
4326 | e_info("Autonegotiated half duplex but" | 4371 | e_info("Autonegotiated half duplex but link partner cannot autoneg. Try forcing full duplex if link gets many collisions.\n"); |
4327 | " link partner cannot autoneg. " | ||
4328 | " Try forcing full duplex if " | ||
4329 | "link gets many collisions.\n"); | ||
4330 | } | 4372 | } |
4331 | 4373 | ||
4332 | /* adjust timeout factor according to speed/duplex */ | 4374 | /* adjust timeout factor according to speed/duplex */ |
@@ -5110,8 +5152,7 @@ static int e1000_change_mtu(struct net_device *netdev, int new_mtu) | |||
5110 | if ((adapter->hw.mac.type == e1000_pch2lan) && | 5152 | if ((adapter->hw.mac.type == e1000_pch2lan) && |
5111 | !(adapter->flags2 & FLAG2_CRC_STRIPPING) && | 5153 | !(adapter->flags2 & FLAG2_CRC_STRIPPING) && |
5112 | (new_mtu > ETH_DATA_LEN)) { | 5154 | (new_mtu > ETH_DATA_LEN)) { |
5113 | e_err("Jumbo Frames not supported on 82579 when CRC " | 5155 | e_err("Jumbo Frames not supported on 82579 when CRC stripping is disabled.\n"); |
5114 | "stripping is disabled.\n"); | ||
5115 | return -EINVAL; | 5156 | return -EINVAL; |
5116 | } | 5157 | } |
5117 | 5158 | ||
@@ -5331,7 +5372,7 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake, | |||
5331 | 5372 | ||
5332 | if (wufc) { | 5373 | if (wufc) { |
5333 | e1000_setup_rctl(adapter); | 5374 | e1000_setup_rctl(adapter); |
5334 | e1000_set_multi(netdev); | 5375 | e1000e_set_rx_mode(netdev); |
5335 | 5376 | ||
5336 | /* turn on all-multi mode if wake on multicast is enabled */ | 5377 | /* turn on all-multi mode if wake on multicast is enabled */ |
5337 | if (wufc & E1000_WUFC_MC) { | 5378 | if (wufc & E1000_WUFC_MC) { |
@@ -5527,8 +5568,8 @@ static int __e1000_resume(struct pci_dev *pdev) | |||
5527 | phy_data & E1000_WUS_MC ? "Multicast Packet" : | 5568 | phy_data & E1000_WUS_MC ? "Multicast Packet" : |
5528 | phy_data & E1000_WUS_BC ? "Broadcast Packet" : | 5569 | phy_data & E1000_WUS_BC ? "Broadcast Packet" : |
5529 | phy_data & E1000_WUS_MAG ? "Magic Packet" : | 5570 | phy_data & E1000_WUS_MAG ? "Magic Packet" : |
5530 | phy_data & E1000_WUS_LNKC ? "Link Status " | 5571 | phy_data & E1000_WUS_LNKC ? |
5531 | " Change" : "other"); | 5572 | "Link Status Change" : "other"); |
5532 | } | 5573 | } |
5533 | e1e_wphy(&adapter->hw, BM_WUS, ~0); | 5574 | e1e_wphy(&adapter->hw, BM_WUS, ~0); |
5534 | } else { | 5575 | } else { |
@@ -5859,10 +5900,11 @@ static void e1000_eeprom_checks(struct e1000_adapter *adapter) | |||
5859 | } | 5900 | } |
5860 | } | 5901 | } |
5861 | 5902 | ||
5862 | static int e1000_set_features(struct net_device *netdev, u32 features) | 5903 | static int e1000_set_features(struct net_device *netdev, |
5904 | netdev_features_t features) | ||
5863 | { | 5905 | { |
5864 | struct e1000_adapter *adapter = netdev_priv(netdev); | 5906 | struct e1000_adapter *adapter = netdev_priv(netdev); |
5865 | u32 changed = features ^ netdev->features; | 5907 | netdev_features_t changed = features ^ netdev->features; |
5866 | 5908 | ||
5867 | if (changed & (NETIF_F_TSO | NETIF_F_TSO6)) | 5909 | if (changed & (NETIF_F_TSO | NETIF_F_TSO6)) |
5868 | adapter->flags |= FLAG_TSO_FORCE; | 5910 | adapter->flags |= FLAG_TSO_FORCE; |
@@ -5884,7 +5926,7 @@ static const struct net_device_ops e1000e_netdev_ops = { | |||
5884 | .ndo_stop = e1000_close, | 5926 | .ndo_stop = e1000_close, |
5885 | .ndo_start_xmit = e1000_xmit_frame, | 5927 | .ndo_start_xmit = e1000_xmit_frame, |
5886 | .ndo_get_stats64 = e1000e_get_stats64, | 5928 | .ndo_get_stats64 = e1000e_get_stats64, |
5887 | .ndo_set_rx_mode = e1000_set_multi, | 5929 | .ndo_set_rx_mode = e1000e_set_rx_mode, |
5888 | .ndo_set_mac_address = e1000_set_mac, | 5930 | .ndo_set_mac_address = e1000_set_mac, |
5889 | .ndo_change_mtu = e1000_change_mtu, | 5931 | .ndo_change_mtu = e1000_change_mtu, |
5890 | .ndo_do_ioctl = e1000_ioctl, | 5932 | .ndo_do_ioctl = e1000_ioctl, |
@@ -5949,8 +5991,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev, | |||
5949 | err = dma_set_coherent_mask(&pdev->dev, | 5991 | err = dma_set_coherent_mask(&pdev->dev, |
5950 | DMA_BIT_MASK(32)); | 5992 | DMA_BIT_MASK(32)); |
5951 | if (err) { | 5993 | if (err) { |
5952 | dev_err(&pdev->dev, "No usable DMA " | 5994 | dev_err(&pdev->dev, "No usable DMA configuration, aborting\n"); |
5953 | "configuration, aborting\n"); | ||
5954 | goto err_dma; | 5995 | goto err_dma; |
5955 | } | 5996 | } |
5956 | } | 5997 | } |
@@ -6076,6 +6117,8 @@ static int __devinit e1000_probe(struct pci_dev *pdev, | |||
6076 | NETIF_F_TSO6 | | 6117 | NETIF_F_TSO6 | |
6077 | NETIF_F_HW_CSUM); | 6118 | NETIF_F_HW_CSUM); |
6078 | 6119 | ||
6120 | netdev->priv_flags |= IFF_UNICAST_FLT; | ||
6121 | |||
6079 | if (pci_using_dac) { | 6122 | if (pci_using_dac) { |
6080 | netdev->features |= NETIF_F_HIGHDMA; | 6123 | netdev->features |= NETIF_F_HIGHDMA; |
6081 | netdev->vlan_features |= NETIF_F_HIGHDMA; | 6124 | netdev->vlan_features |= NETIF_F_HIGHDMA; |