1
2
3
4
5
6
7
8#include <linux/kernel.h>
9#include <linux/init.h>
10#include <linux/types.h>
11#include <linux/module.h>
12#include <linux/list.h>
13#include <linux/pci.h>
14#include <linux/dma-mapping.h>
15#include <linux/pagemap.h>
16#include <linux/sched.h>
17#include <linux/slab.h>
18#include <linux/dmapool.h>
19#include <linux/mempool.h>
20#include <linux/spinlock.h>
21#include <linux/kthread.h>
22#include <linux/interrupt.h>
23#include <linux/errno.h>
24#include <linux/ioport.h>
25#include <linux/in.h>
26#include <linux/ip.h>
27#include <linux/ipv6.h>
28#include <net/ipv6.h>
29#include <linux/tcp.h>
30#include <linux/udp.h>
31#include <linux/if_arp.h>
32#include <linux/if_ether.h>
33#include <linux/netdevice.h>
34#include <linux/etherdevice.h>
35#include <linux/ethtool.h>
36#include <linux/skbuff.h>
37#include <linux/if_vlan.h>
38#include <linux/delay.h>
39#include <linux/mm.h>
40#include <linux/vmalloc.h>
41#include <net/ip6_checksum.h>
42
43#include "qlge.h"
44
45char qlge_driver_name[] = DRV_NAME;
46const char qlge_driver_version[] = DRV_VERSION;
47
48MODULE_AUTHOR("Ron Mercer <ron.mercer@qlogic.com>");
49MODULE_DESCRIPTION(DRV_STRING " ");
50MODULE_LICENSE("GPL");
51MODULE_VERSION(DRV_VERSION);
52
53static const u32 default_msg =
54 NETIF_MSG_DRV | NETIF_MSG_PROBE | NETIF_MSG_LINK |
55
56 NETIF_MSG_IFDOWN |
57 NETIF_MSG_IFUP |
58 NETIF_MSG_RX_ERR |
59 NETIF_MSG_TX_ERR |
60
61
62
63 NETIF_MSG_HW | NETIF_MSG_WOL | 0;
64
65static int debug = 0x00007fff;
66module_param(debug, int, 0);
67MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)");
68
69#define MSIX_IRQ 0
70#define MSI_IRQ 1
71#define LEG_IRQ 2
72static int irq_type = MSIX_IRQ;
73module_param(irq_type, int, MSIX_IRQ);
74MODULE_PARM_DESC(irq_type, "0 = MSI-X, 1 = MSI, 2 = Legacy.");
75
76static struct pci_device_id qlge_pci_tbl[] __devinitdata = {
77 {PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, QLGE_DEVICE_ID_8012)},
78 {PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, QLGE_DEVICE_ID_8000)},
79
80 {0,}
81};
82
83MODULE_DEVICE_TABLE(pci, qlge_pci_tbl);
84
85
86
87
88
89static int ql_sem_trylock(struct ql_adapter *qdev, u32 sem_mask)
90{
91 u32 sem_bits = 0;
92
93 switch (sem_mask) {
94 case SEM_XGMAC0_MASK:
95 sem_bits = SEM_SET << SEM_XGMAC0_SHIFT;
96 break;
97 case SEM_XGMAC1_MASK:
98 sem_bits = SEM_SET << SEM_XGMAC1_SHIFT;
99 break;
100 case SEM_ICB_MASK:
101 sem_bits = SEM_SET << SEM_ICB_SHIFT;
102 break;
103 case SEM_MAC_ADDR_MASK:
104 sem_bits = SEM_SET << SEM_MAC_ADDR_SHIFT;
105 break;
106 case SEM_FLASH_MASK:
107 sem_bits = SEM_SET << SEM_FLASH_SHIFT;
108 break;
109 case SEM_PROBE_MASK:
110 sem_bits = SEM_SET << SEM_PROBE_SHIFT;
111 break;
112 case SEM_RT_IDX_MASK:
113 sem_bits = SEM_SET << SEM_RT_IDX_SHIFT;
114 break;
115 case SEM_PROC_REG_MASK:
116 sem_bits = SEM_SET << SEM_PROC_REG_SHIFT;
117 break;
118 default:
119 QPRINTK(qdev, PROBE, ALERT, "Bad Semaphore mask!.\n");
120 return -EINVAL;
121 }
122
123 ql_write32(qdev, SEM, sem_bits | sem_mask);
124 return !(ql_read32(qdev, SEM) & sem_bits);
125}
126
127int ql_sem_spinlock(struct ql_adapter *qdev, u32 sem_mask)
128{
129 unsigned int wait_count = 30;
130 do {
131 if (!ql_sem_trylock(qdev, sem_mask))
132 return 0;
133 udelay(100);
134 } while (--wait_count);
135 return -ETIMEDOUT;
136}
137
138void ql_sem_unlock(struct ql_adapter *qdev, u32 sem_mask)
139{
140 ql_write32(qdev, SEM, sem_mask);
141 ql_read32(qdev, SEM);
142}
143
144
145
146
147
148
149int ql_wait_reg_rdy(struct ql_adapter *qdev, u32 reg, u32 bit, u32 err_bit)
150{
151 u32 temp;
152 int count = UDELAY_COUNT;
153
154 while (count) {
155 temp = ql_read32(qdev, reg);
156
157
158 if (temp & err_bit) {
159 QPRINTK(qdev, PROBE, ALERT,
160 "register 0x%.08x access error, value = 0x%.08x!.\n",
161 reg, temp);
162 return -EIO;
163 } else if (temp & bit)
164 return 0;
165 udelay(UDELAY_DELAY);
166 count--;
167 }
168 QPRINTK(qdev, PROBE, ALERT,
169 "Timed out waiting for reg %x to come ready.\n", reg);
170 return -ETIMEDOUT;
171}
172
173
174
175
176static int ql_wait_cfg(struct ql_adapter *qdev, u32 bit)
177{
178 int count = UDELAY_COUNT;
179 u32 temp;
180
181 while (count) {
182 temp = ql_read32(qdev, CFG);
183 if (temp & CFG_LE)
184 return -EIO;
185 if (!(temp & bit))
186 return 0;
187 udelay(UDELAY_DELAY);
188 count--;
189 }
190 return -ETIMEDOUT;
191}
192
193
194
195
196
197int ql_write_cfg(struct ql_adapter *qdev, void *ptr, int size, u32 bit,
198 u16 q_id)
199{
200 u64 map;
201 int status = 0;
202 int direction;
203 u32 mask;
204 u32 value;
205
206 direction =
207 (bit & (CFG_LRQ | CFG_LR | CFG_LCQ)) ? PCI_DMA_TODEVICE :
208 PCI_DMA_FROMDEVICE;
209
210 map = pci_map_single(qdev->pdev, ptr, size, direction);
211 if (pci_dma_mapping_error(qdev->pdev, map)) {
212 QPRINTK(qdev, IFUP, ERR, "Couldn't map DMA area.\n");
213 return -ENOMEM;
214 }
215
216 status = ql_sem_spinlock(qdev, SEM_ICB_MASK);
217 if (status)
218 return status;
219
220 status = ql_wait_cfg(qdev, bit);
221 if (status) {
222 QPRINTK(qdev, IFUP, ERR,
223 "Timed out waiting for CFG to come ready.\n");
224 goto exit;
225 }
226
227 ql_write32(qdev, ICB_L, (u32) map);
228 ql_write32(qdev, ICB_H, (u32) (map >> 32));
229
230 mask = CFG_Q_MASK | (bit << 16);
231 value = bit | (q_id << CFG_Q_SHIFT);
232 ql_write32(qdev, CFG, (mask | value));
233
234
235
236
237 status = ql_wait_cfg(qdev, bit);
238exit:
239 ql_sem_unlock(qdev, SEM_ICB_MASK);
240 pci_unmap_single(qdev->pdev, map, size, direction);
241 return status;
242}
243
244
245int ql_get_mac_addr_reg(struct ql_adapter *qdev, u32 type, u16 index,
246 u32 *value)
247{
248 u32 offset = 0;
249 int status;
250
251 switch (type) {
252 case MAC_ADDR_TYPE_MULTI_MAC:
253 case MAC_ADDR_TYPE_CAM_MAC:
254 {
255 status =
256 ql_wait_reg_rdy(qdev,
257 MAC_ADDR_IDX, MAC_ADDR_MW, 0);
258 if (status)
259 goto exit;
260 ql_write32(qdev, MAC_ADDR_IDX, (offset++) |
261 (index << MAC_ADDR_IDX_SHIFT) |
262 MAC_ADDR_ADR | MAC_ADDR_RS | type);
263 status =
264 ql_wait_reg_rdy(qdev,
265 MAC_ADDR_IDX, MAC_ADDR_MR, 0);
266 if (status)
267 goto exit;
268 *value++ = ql_read32(qdev, MAC_ADDR_DATA);
269 status =
270 ql_wait_reg_rdy(qdev,
271 MAC_ADDR_IDX, MAC_ADDR_MW, 0);
272 if (status)
273 goto exit;
274 ql_write32(qdev, MAC_ADDR_IDX, (offset++) |
275 (index << MAC_ADDR_IDX_SHIFT) |
276 MAC_ADDR_ADR | MAC_ADDR_RS | type);
277 status =
278 ql_wait_reg_rdy(qdev,
279 MAC_ADDR_IDX, MAC_ADDR_MR, 0);
280 if (status)
281 goto exit;
282 *value++ = ql_read32(qdev, MAC_ADDR_DATA);
283 if (type == MAC_ADDR_TYPE_CAM_MAC) {
284 status =
285 ql_wait_reg_rdy(qdev,
286 MAC_ADDR_IDX, MAC_ADDR_MW, 0);
287 if (status)
288 goto exit;
289 ql_write32(qdev, MAC_ADDR_IDX, (offset++) |
290 (index << MAC_ADDR_IDX_SHIFT) |
291 MAC_ADDR_ADR | MAC_ADDR_RS | type);
292 status =
293 ql_wait_reg_rdy(qdev, MAC_ADDR_IDX,
294 MAC_ADDR_MR, 0);
295 if (status)
296 goto exit;
297 *value++ = ql_read32(qdev, MAC_ADDR_DATA);
298 }
299 break;
300 }
301 case MAC_ADDR_TYPE_VLAN:
302 case MAC_ADDR_TYPE_MULTI_FLTR:
303 default:
304 QPRINTK(qdev, IFUP, CRIT,
305 "Address type %d not yet supported.\n", type);
306 status = -EPERM;
307 }
308exit:
309 return status;
310}
311
312
313
314
315static int ql_set_mac_addr_reg(struct ql_adapter *qdev, u8 *addr, u32 type,
316 u16 index)
317{
318 u32 offset = 0;
319 int status = 0;
320
321 switch (type) {
322 case MAC_ADDR_TYPE_MULTI_MAC:
323 {
324 u32 upper = (addr[0] << 8) | addr[1];
325 u32 lower = (addr[2] << 24) | (addr[3] << 16) |
326 (addr[4] << 8) | (addr[5]);
327
328 status =
329 ql_wait_reg_rdy(qdev,
330 MAC_ADDR_IDX, MAC_ADDR_MW, 0);
331 if (status)
332 goto exit;
333 ql_write32(qdev, MAC_ADDR_IDX, (offset++) |
334 (index << MAC_ADDR_IDX_SHIFT) |
335 type | MAC_ADDR_E);
336 ql_write32(qdev, MAC_ADDR_DATA, lower);
337 status =
338 ql_wait_reg_rdy(qdev,
339 MAC_ADDR_IDX, MAC_ADDR_MW, 0);
340 if (status)
341 goto exit;
342 ql_write32(qdev, MAC_ADDR_IDX, (offset++) |
343 (index << MAC_ADDR_IDX_SHIFT) |
344 type | MAC_ADDR_E);
345
346 ql_write32(qdev, MAC_ADDR_DATA, upper);
347 status =
348 ql_wait_reg_rdy(qdev,
349 MAC_ADDR_IDX, MAC_ADDR_MW, 0);
350 if (status)
351 goto exit;
352 break;
353 }
354 case MAC_ADDR_TYPE_CAM_MAC:
355 {
356 u32 cam_output;
357 u32 upper = (addr[0] << 8) | addr[1];
358 u32 lower =
359 (addr[2] << 24) | (addr[3] << 16) | (addr[4] << 8) |
360 (addr[5]);
361
362 QPRINTK(qdev, IFUP, DEBUG,
363 "Adding %s address %pM"
364 " at index %d in the CAM.\n",
365 ((type ==
366 MAC_ADDR_TYPE_MULTI_MAC) ? "MULTICAST" :
367 "UNICAST"), addr, index);
368
369 status =
370 ql_wait_reg_rdy(qdev,
371 MAC_ADDR_IDX, MAC_ADDR_MW, 0);
372 if (status)
373 goto exit;
374 ql_write32(qdev, MAC_ADDR_IDX, (offset++) |
375 (index << MAC_ADDR_IDX_SHIFT) |
376 type);
377 ql_write32(qdev, MAC_ADDR_DATA, lower);
378 status =
379 ql_wait_reg_rdy(qdev,
380 MAC_ADDR_IDX, MAC_ADDR_MW, 0);
381 if (status)
382 goto exit;
383 ql_write32(qdev, MAC_ADDR_IDX, (offset++) |
384 (index << MAC_ADDR_IDX_SHIFT) |
385 type);
386 ql_write32(qdev, MAC_ADDR_DATA, upper);
387 status =
388 ql_wait_reg_rdy(qdev,
389 MAC_ADDR_IDX, MAC_ADDR_MW, 0);
390 if (status)
391 goto exit;
392 ql_write32(qdev, MAC_ADDR_IDX, (offset) |
393 (index << MAC_ADDR_IDX_SHIFT) |
394 type);
395
396
397
398
399 cam_output = (CAM_OUT_ROUTE_NIC |
400 (qdev->
401 func << CAM_OUT_FUNC_SHIFT) |
402 (0 << CAM_OUT_CQ_ID_SHIFT));
403 if (qdev->vlgrp)
404 cam_output |= CAM_OUT_RV;
405
406 ql_write32(qdev, MAC_ADDR_DATA, cam_output);
407 break;
408 }
409 case MAC_ADDR_TYPE_VLAN:
410 {
411 u32 enable_bit = *((u32 *) &addr[0]);
412
413
414
415
416
417 QPRINTK(qdev, IFUP, INFO, "%s VLAN ID %d %s the CAM.\n",
418 (enable_bit ? "Adding" : "Removing"),
419 index, (enable_bit ? "to" : "from"));
420
421 status =
422 ql_wait_reg_rdy(qdev,
423 MAC_ADDR_IDX, MAC_ADDR_MW, 0);
424 if (status)
425 goto exit;
426 ql_write32(qdev, MAC_ADDR_IDX, offset |
427 (index << MAC_ADDR_IDX_SHIFT) |
428 type |
429 enable_bit);
430 break;
431 }
432 case MAC_ADDR_TYPE_MULTI_FLTR:
433 default:
434 QPRINTK(qdev, IFUP, CRIT,
435 "Address type %d not yet supported.\n", type);
436 status = -EPERM;
437 }
438exit:
439 return status;
440}
441
442
443
444
445
446static int ql_set_mac_addr(struct ql_adapter *qdev, int set)
447{
448 int status;
449 char zero_mac_addr[ETH_ALEN];
450 char *addr;
451
452 if (set) {
453 addr = &qdev->ndev->dev_addr[0];
454 QPRINTK(qdev, IFUP, DEBUG,
455 "Set Mac addr %02x:%02x:%02x:%02x:%02x:%02x\n",
456 addr[0], addr[1], addr[2], addr[3],
457 addr[4], addr[5]);
458 } else {
459 memset(zero_mac_addr, 0, ETH_ALEN);
460 addr = &zero_mac_addr[0];
461 QPRINTK(qdev, IFUP, DEBUG,
462 "Clearing MAC address on %s\n",
463 qdev->ndev->name);
464 }
465 status = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK);
466 if (status)
467 return status;
468 status = ql_set_mac_addr_reg(qdev, (u8 *) addr,
469 MAC_ADDR_TYPE_CAM_MAC, qdev->func * MAX_CQ);
470 ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
471 if (status)
472 QPRINTK(qdev, IFUP, ERR, "Failed to init mac "
473 "address.\n");
474 return status;
475}
476
477void ql_link_on(struct ql_adapter *qdev)
478{
479 QPRINTK(qdev, LINK, ERR, "%s: Link is up.\n",
480 qdev->ndev->name);
481 netif_carrier_on(qdev->ndev);
482 ql_set_mac_addr(qdev, 1);
483}
484
485void ql_link_off(struct ql_adapter *qdev)
486{
487 QPRINTK(qdev, LINK, ERR, "%s: Link is down.\n",
488 qdev->ndev->name);
489 netif_carrier_off(qdev->ndev);
490 ql_set_mac_addr(qdev, 0);
491}
492
493
494
495
496int ql_get_routing_reg(struct ql_adapter *qdev, u32 index, u32 *value)
497{
498 int status = 0;
499
500 status = ql_wait_reg_rdy(qdev, RT_IDX, RT_IDX_MW, 0);
501 if (status)
502 goto exit;
503
504 ql_write32(qdev, RT_IDX,
505 RT_IDX_TYPE_NICQ | RT_IDX_RS | (index << RT_IDX_IDX_SHIFT));
506 status = ql_wait_reg_rdy(qdev, RT_IDX, RT_IDX_MR, 0);
507 if (status)
508 goto exit;
509 *value = ql_read32(qdev, RT_DATA);
510exit:
511 return status;
512}
513
514
515
516
517
518
519static int ql_set_routing_reg(struct ql_adapter *qdev, u32 index, u32 mask,
520 int enable)
521{
522 int status = -EINVAL;
523 u32 value = 0;
524
525 QPRINTK(qdev, IFUP, DEBUG,
526 "%s %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s mask %s the routing reg.\n",
527 (enable ? "Adding" : "Removing"),
528 ((index == RT_IDX_ALL_ERR_SLOT) ? "MAC ERROR/ALL ERROR" : ""),
529 ((index == RT_IDX_IP_CSUM_ERR_SLOT) ? "IP CSUM ERROR" : ""),
530 ((index ==
531 RT_IDX_TCP_UDP_CSUM_ERR_SLOT) ? "TCP/UDP CSUM ERROR" : ""),
532 ((index == RT_IDX_BCAST_SLOT) ? "BROADCAST" : ""),
533 ((index == RT_IDX_MCAST_MATCH_SLOT) ? "MULTICAST MATCH" : ""),
534 ((index == RT_IDX_ALLMULTI_SLOT) ? "ALL MULTICAST MATCH" : ""),
535 ((index == RT_IDX_UNUSED6_SLOT) ? "UNUSED6" : ""),
536 ((index == RT_IDX_UNUSED7_SLOT) ? "UNUSED7" : ""),
537 ((index == RT_IDX_RSS_MATCH_SLOT) ? "RSS ALL/IPV4 MATCH" : ""),
538 ((index == RT_IDX_RSS_IPV6_SLOT) ? "RSS IPV6" : ""),
539 ((index == RT_IDX_RSS_TCP4_SLOT) ? "RSS TCP4" : ""),
540 ((index == RT_IDX_RSS_TCP6_SLOT) ? "RSS TCP6" : ""),
541 ((index == RT_IDX_CAM_HIT_SLOT) ? "CAM HIT" : ""),
542 ((index == RT_IDX_UNUSED013) ? "UNUSED13" : ""),
543 ((index == RT_IDX_UNUSED014) ? "UNUSED14" : ""),
544 ((index == RT_IDX_PROMISCUOUS_SLOT) ? "PROMISCUOUS" : ""),
545 (enable ? "to" : "from"));
546
547 switch (mask) {
548 case RT_IDX_CAM_HIT:
549 {
550 value = RT_IDX_DST_CAM_Q |
551 RT_IDX_TYPE_NICQ |
552 (RT_IDX_CAM_HIT_SLOT << RT_IDX_IDX_SHIFT);
553 break;
554 }
555 case RT_IDX_VALID:
556 {
557 value = RT_IDX_DST_DFLT_Q |
558 RT_IDX_TYPE_NICQ |
559 (RT_IDX_PROMISCUOUS_SLOT << RT_IDX_IDX_SHIFT);
560 break;
561 }
562 case RT_IDX_ERR:
563 {
564 value = RT_IDX_DST_DFLT_Q |
565 RT_IDX_TYPE_NICQ |
566 (RT_IDX_ALL_ERR_SLOT << RT_IDX_IDX_SHIFT);
567 break;
568 }
569 case RT_IDX_BCAST:
570 {
571 value = RT_IDX_DST_DFLT_Q |
572 RT_IDX_TYPE_NICQ |
573 (RT_IDX_BCAST_SLOT << RT_IDX_IDX_SHIFT);
574 break;
575 }
576 case RT_IDX_MCAST:
577 {
578 value = RT_IDX_DST_DFLT_Q |
579 RT_IDX_TYPE_NICQ |
580 (RT_IDX_ALLMULTI_SLOT << RT_IDX_IDX_SHIFT);
581 break;
582 }
583 case RT_IDX_MCAST_MATCH:
584 {
585 value = RT_IDX_DST_DFLT_Q |
586 RT_IDX_TYPE_NICQ |
587 (RT_IDX_MCAST_MATCH_SLOT << RT_IDX_IDX_SHIFT);
588 break;
589 }
590 case RT_IDX_RSS_MATCH:
591 {
592 value = RT_IDX_DST_RSS |
593 RT_IDX_TYPE_NICQ |
594 (RT_IDX_RSS_MATCH_SLOT << RT_IDX_IDX_SHIFT);
595 break;
596 }
597 case 0:
598 {
599 value = RT_IDX_DST_DFLT_Q |
600 RT_IDX_TYPE_NICQ |
601 (index << RT_IDX_IDX_SHIFT);
602 break;
603 }
604 default:
605 QPRINTK(qdev, IFUP, ERR, "Mask type %d not yet supported.\n",
606 mask);
607 status = -EPERM;
608 goto exit;
609 }
610
611 if (value) {
612 status = ql_wait_reg_rdy(qdev, RT_IDX, RT_IDX_MW, 0);
613 if (status)
614 goto exit;
615 value |= (enable ? RT_IDX_E : 0);
616 ql_write32(qdev, RT_IDX, value);
617 ql_write32(qdev, RT_DATA, enable ? mask : 0);
618 }
619exit:
620 return status;
621}
622
623static void ql_enable_interrupts(struct ql_adapter *qdev)
624{
625 ql_write32(qdev, INTR_EN, (INTR_EN_EI << 16) | INTR_EN_EI);
626}
627
628static void ql_disable_interrupts(struct ql_adapter *qdev)
629{
630 ql_write32(qdev, INTR_EN, (INTR_EN_EI << 16));
631}
632
633
634
635
636
637
638
639u32 ql_enable_completion_interrupt(struct ql_adapter *qdev, u32 intr)
640{
641 u32 var = 0;
642 unsigned long hw_flags = 0;
643 struct intr_context *ctx = qdev->intr_context + intr;
644
645 if (likely(test_bit(QL_MSIX_ENABLED, &qdev->flags) && intr)) {
646
647
648
649 ql_write32(qdev, INTR_EN,
650 ctx->intr_en_mask);
651 var = ql_read32(qdev, STS);
652 return var;
653 }
654
655 spin_lock_irqsave(&qdev->hw_lock, hw_flags);
656 if (atomic_dec_and_test(&ctx->irq_cnt)) {
657 ql_write32(qdev, INTR_EN,
658 ctx->intr_en_mask);
659 var = ql_read32(qdev, STS);
660 }
661 spin_unlock_irqrestore(&qdev->hw_lock, hw_flags);
662 return var;
663}
664
665static u32 ql_disable_completion_interrupt(struct ql_adapter *qdev, u32 intr)
666{
667 u32 var = 0;
668 struct intr_context *ctx;
669
670
671
672
673 if (likely(test_bit(QL_MSIX_ENABLED, &qdev->flags) && intr))
674 return 0;
675
676 ctx = qdev->intr_context + intr;
677 spin_lock(&qdev->hw_lock);
678 if (!atomic_read(&ctx->irq_cnt)) {
679 ql_write32(qdev, INTR_EN,
680 ctx->intr_dis_mask);
681 var = ql_read32(qdev, STS);
682 }
683 atomic_inc(&ctx->irq_cnt);
684 spin_unlock(&qdev->hw_lock);
685 return var;
686}
687
688static void ql_enable_all_completion_interrupts(struct ql_adapter *qdev)
689{
690 int i;
691 for (i = 0; i < qdev->intr_count; i++) {
692
693
694
695
696 if (unlikely(!test_bit(QL_MSIX_ENABLED, &qdev->flags) ||
697 i == 0))
698 atomic_set(&qdev->intr_context[i].irq_cnt, 1);
699 ql_enable_completion_interrupt(qdev, i);
700 }
701
702}
703
704static int ql_validate_flash(struct ql_adapter *qdev, u32 size, const char *str)
705{
706 int status, i;
707 u16 csum = 0;
708 __le16 *flash = (__le16 *)&qdev->flash;
709
710 status = strncmp((char *)&qdev->flash, str, 4);
711 if (status) {
712 QPRINTK(qdev, IFUP, ERR, "Invalid flash signature.\n");
713 return status;
714 }
715
716 for (i = 0; i < size; i++)
717 csum += le16_to_cpu(*flash++);
718
719 if (csum)
720 QPRINTK(qdev, IFUP, ERR,
721 "Invalid flash checksum, csum = 0x%.04x.\n", csum);
722
723 return csum;
724}
725
726static int ql_read_flash_word(struct ql_adapter *qdev, int offset, __le32 *data)
727{
728 int status = 0;
729
730 status = ql_wait_reg_rdy(qdev,
731 FLASH_ADDR, FLASH_ADDR_RDY, FLASH_ADDR_ERR);
732 if (status)
733 goto exit;
734
735 ql_write32(qdev, FLASH_ADDR, FLASH_ADDR_R | offset);
736
737 status = ql_wait_reg_rdy(qdev,
738 FLASH_ADDR, FLASH_ADDR_RDY, FLASH_ADDR_ERR);
739 if (status)
740 goto exit;
741
742
743
744
745 *data = cpu_to_le32(ql_read32(qdev, FLASH_DATA));
746exit:
747 return status;
748}
749
750static int ql_get_8000_flash_params(struct ql_adapter *qdev)
751{
752 u32 i, size;
753 int status;
754 __le32 *p = (__le32 *)&qdev->flash;
755 u32 offset;
756 u8 mac_addr[6];
757
758
759
760
761 if (!qdev->port)
762 offset = FUNC0_FLASH_OFFSET / sizeof(u32);
763 else
764 offset = FUNC1_FLASH_OFFSET / sizeof(u32);
765
766 if (ql_sem_spinlock(qdev, SEM_FLASH_MASK))
767 return -ETIMEDOUT;
768
769 size = sizeof(struct flash_params_8000) / sizeof(u32);
770 for (i = 0; i < size; i++, p++) {
771 status = ql_read_flash_word(qdev, i+offset, p);
772 if (status) {
773 QPRINTK(qdev, IFUP, ERR, "Error reading flash.\n");
774 goto exit;
775 }
776 }
777
778 status = ql_validate_flash(qdev,
779 sizeof(struct flash_params_8000) / sizeof(u16),
780 "8000");
781 if (status) {
782 QPRINTK(qdev, IFUP, ERR, "Invalid flash.\n");
783 status = -EINVAL;
784 goto exit;
785 }
786
787
788
789
790 if (qdev->flash.flash_params_8000.data_type1 == 2)
791 memcpy(mac_addr,
792 qdev->flash.flash_params_8000.mac_addr1,
793 qdev->ndev->addr_len);
794 else
795 memcpy(mac_addr,
796 qdev->flash.flash_params_8000.mac_addr,
797 qdev->ndev->addr_len);
798
799 if (!is_valid_ether_addr(mac_addr)) {
800 QPRINTK(qdev, IFUP, ERR, "Invalid MAC address.\n");
801 status = -EINVAL;
802 goto exit;
803 }
804
805 memcpy(qdev->ndev->dev_addr,
806 mac_addr,
807 qdev->ndev->addr_len);
808
809exit:
810 ql_sem_unlock(qdev, SEM_FLASH_MASK);
811 return status;
812}
813
814static int ql_get_8012_flash_params(struct ql_adapter *qdev)
815{
816 int i;
817 int status;
818 __le32 *p = (__le32 *)&qdev->flash;
819 u32 offset = 0;
820 u32 size = sizeof(struct flash_params_8012) / sizeof(u32);
821
822
823
824
825 if (qdev->port)
826 offset = size;
827
828 if (ql_sem_spinlock(qdev, SEM_FLASH_MASK))
829 return -ETIMEDOUT;
830
831 for (i = 0; i < size; i++, p++) {
832 status = ql_read_flash_word(qdev, i+offset, p);
833 if (status) {
834 QPRINTK(qdev, IFUP, ERR, "Error reading flash.\n");
835 goto exit;
836 }
837
838 }
839
840 status = ql_validate_flash(qdev,
841 sizeof(struct flash_params_8012) / sizeof(u16),
842 "8012");
843 if (status) {
844 QPRINTK(qdev, IFUP, ERR, "Invalid flash.\n");
845 status = -EINVAL;
846 goto exit;
847 }
848
849 if (!is_valid_ether_addr(qdev->flash.flash_params_8012.mac_addr)) {
850 status = -EINVAL;
851 goto exit;
852 }
853
854 memcpy(qdev->ndev->dev_addr,
855 qdev->flash.flash_params_8012.mac_addr,
856 qdev->ndev->addr_len);
857
858exit:
859 ql_sem_unlock(qdev, SEM_FLASH_MASK);
860 return status;
861}
862
863
864
865
866
867static int ql_write_xgmac_reg(struct ql_adapter *qdev, u32 reg, u32 data)
868{
869 int status;
870
871 status = ql_wait_reg_rdy(qdev,
872 XGMAC_ADDR, XGMAC_ADDR_RDY, XGMAC_ADDR_XME);
873 if (status)
874 return status;
875
876 ql_write32(qdev, XGMAC_DATA, data);
877
878 ql_write32(qdev, XGMAC_ADDR, reg);
879 return status;
880}
881
882
883
884
885
886int ql_read_xgmac_reg(struct ql_adapter *qdev, u32 reg, u32 *data)
887{
888 int status = 0;
889
890 status = ql_wait_reg_rdy(qdev,
891 XGMAC_ADDR, XGMAC_ADDR_RDY, XGMAC_ADDR_XME);
892 if (status)
893 goto exit;
894
895 ql_write32(qdev, XGMAC_ADDR, reg | XGMAC_ADDR_R);
896
897 status = ql_wait_reg_rdy(qdev,
898 XGMAC_ADDR, XGMAC_ADDR_RDY, XGMAC_ADDR_XME);
899 if (status)
900 goto exit;
901
902 *data = ql_read32(qdev, XGMAC_DATA);
903exit:
904 return status;
905}
906
907
908int ql_read_xgmac_reg64(struct ql_adapter *qdev, u32 reg, u64 *data)
909{
910 int status = 0;
911 u32 hi = 0;
912 u32 lo = 0;
913
914 status = ql_read_xgmac_reg(qdev, reg, &lo);
915 if (status)
916 goto exit;
917
918 status = ql_read_xgmac_reg(qdev, reg + 4, &hi);
919 if (status)
920 goto exit;
921
922 *data = (u64) lo | ((u64) hi << 32);
923
924exit:
925 return status;
926}
927
928static int ql_8000_port_initialize(struct ql_adapter *qdev)
929{
930 int status;
931
932
933
934
935 status = ql_mb_about_fw(qdev);
936 if (status)
937 goto exit;
938 status = ql_mb_get_fw_state(qdev);
939 if (status)
940 goto exit;
941
942 queue_delayed_work(qdev->workqueue, &qdev->mpi_port_cfg_work, 0);
943exit:
944 return status;
945}
946
947
948
949
950
951
952
953static int ql_8012_port_initialize(struct ql_adapter *qdev)
954{
955 int status = 0;
956 u32 data;
957
958 if (ql_sem_trylock(qdev, qdev->xg_sem_mask)) {
959
960
961
962 QPRINTK(qdev, LINK, INFO,
963 "Another function has the semaphore, so wait for the port init bit to come ready.\n");
964 status = ql_wait_reg_rdy(qdev, STS, qdev->port_init, 0);
965 if (status) {
966 QPRINTK(qdev, LINK, CRIT,
967 "Port initialize timed out.\n");
968 }
969 return status;
970 }
971
972 QPRINTK(qdev, LINK, INFO, "Got xgmac semaphore!.\n");
973
974 status = ql_read_xgmac_reg(qdev, GLOBAL_CFG, &data);
975 if (status)
976 goto end;
977 data |= GLOBAL_CFG_RESET;
978 status = ql_write_xgmac_reg(qdev, GLOBAL_CFG, data);
979 if (status)
980 goto end;
981
982
983 data &= ~GLOBAL_CFG_RESET;
984 data |= GLOBAL_CFG_JUMBO;
985 data |= GLOBAL_CFG_TX_STAT_EN;
986 data |= GLOBAL_CFG_RX_STAT_EN;
987 status = ql_write_xgmac_reg(qdev, GLOBAL_CFG, data);
988 if (status)
989 goto end;
990
991
992 status = ql_read_xgmac_reg(qdev, TX_CFG, &data);
993 if (status)
994 goto end;
995 data &= ~TX_CFG_RESET;
996 data |= TX_CFG_EN;
997 status = ql_write_xgmac_reg(qdev, TX_CFG, data);
998 if (status)
999 goto end;
1000
1001
1002 status = ql_read_xgmac_reg(qdev, RX_CFG, &data);
1003 if (status)
1004 goto end;
1005 data &= ~RX_CFG_RESET;
1006 data |= RX_CFG_EN;
1007 status = ql_write_xgmac_reg(qdev, RX_CFG, data);
1008 if (status)
1009 goto end;
1010
1011
1012 status =
1013 ql_write_xgmac_reg(qdev, MAC_TX_PARAMS, MAC_TX_PARAMS_JUMBO | (0x2580 << 16));
1014 if (status)
1015 goto end;
1016 status =
1017 ql_write_xgmac_reg(qdev, MAC_RX_PARAMS, 0x2580);
1018 if (status)
1019 goto end;
1020
1021
1022 ql_write32(qdev, STS, ((qdev->port_init << 16) | qdev->port_init));
1023end:
1024 ql_sem_unlock(qdev, qdev->xg_sem_mask);
1025 return status;
1026}
1027
1028
1029static struct bq_desc *ql_get_curr_lbuf(struct rx_ring *rx_ring)
1030{
1031 struct bq_desc *lbq_desc = &rx_ring->lbq[rx_ring->lbq_curr_idx];
1032 rx_ring->lbq_curr_idx++;
1033 if (rx_ring->lbq_curr_idx == rx_ring->lbq_len)
1034 rx_ring->lbq_curr_idx = 0;
1035 rx_ring->lbq_free_cnt++;
1036 return lbq_desc;
1037}
1038
1039
1040static struct bq_desc *ql_get_curr_sbuf(struct rx_ring *rx_ring)
1041{
1042 struct bq_desc *sbq_desc = &rx_ring->sbq[rx_ring->sbq_curr_idx];
1043 rx_ring->sbq_curr_idx++;
1044 if (rx_ring->sbq_curr_idx == rx_ring->sbq_len)
1045 rx_ring->sbq_curr_idx = 0;
1046 rx_ring->sbq_free_cnt++;
1047 return sbq_desc;
1048}
1049
1050
1051static void ql_update_cq(struct rx_ring *rx_ring)
1052{
1053 rx_ring->cnsmr_idx++;
1054 rx_ring->curr_entry++;
1055 if (unlikely(rx_ring->cnsmr_idx == rx_ring->cq_len)) {
1056 rx_ring->cnsmr_idx = 0;
1057 rx_ring->curr_entry = rx_ring->cq_base;
1058 }
1059}
1060
1061static void ql_write_cq_idx(struct rx_ring *rx_ring)
1062{
1063 ql_write_db_reg(rx_ring->cnsmr_idx, rx_ring->cnsmr_idx_db_reg);
1064}
1065
1066
1067static void ql_update_lbq(struct ql_adapter *qdev, struct rx_ring *rx_ring)
1068{
1069 u32 clean_idx = rx_ring->lbq_clean_idx;
1070 u32 start_idx = clean_idx;
1071 struct bq_desc *lbq_desc;
1072 u64 map;
1073 int i;
1074
1075 while (rx_ring->lbq_free_cnt > 16) {
1076 for (i = 0; i < 16; i++) {
1077 QPRINTK(qdev, RX_STATUS, DEBUG,
1078 "lbq: try cleaning clean_idx = %d.\n",
1079 clean_idx);
1080 lbq_desc = &rx_ring->lbq[clean_idx];
1081 if (lbq_desc->p.lbq_page == NULL) {
1082 QPRINTK(qdev, RX_STATUS, DEBUG,
1083 "lbq: getting new page for index %d.\n",
1084 lbq_desc->index);
1085 lbq_desc->p.lbq_page = alloc_page(GFP_ATOMIC);
1086 if (lbq_desc->p.lbq_page == NULL) {
1087 rx_ring->lbq_clean_idx = clean_idx;
1088 QPRINTK(qdev, RX_STATUS, ERR,
1089 "Couldn't get a page.\n");
1090 return;
1091 }
1092 map = pci_map_page(qdev->pdev,
1093 lbq_desc->p.lbq_page,
1094 0, PAGE_SIZE,
1095 PCI_DMA_FROMDEVICE);
1096 if (pci_dma_mapping_error(qdev->pdev, map)) {
1097 rx_ring->lbq_clean_idx = clean_idx;
1098 put_page(lbq_desc->p.lbq_page);
1099 lbq_desc->p.lbq_page = NULL;
1100 QPRINTK(qdev, RX_STATUS, ERR,
1101 "PCI mapping failed.\n");
1102 return;
1103 }
1104 pci_unmap_addr_set(lbq_desc, mapaddr, map);
1105 pci_unmap_len_set(lbq_desc, maplen, PAGE_SIZE);
1106 *lbq_desc->addr = cpu_to_le64(map);
1107 }
1108 clean_idx++;
1109 if (clean_idx == rx_ring->lbq_len)
1110 clean_idx = 0;
1111 }
1112
1113 rx_ring->lbq_clean_idx = clean_idx;
1114 rx_ring->lbq_prod_idx += 16;
1115 if (rx_ring->lbq_prod_idx == rx_ring->lbq_len)
1116 rx_ring->lbq_prod_idx = 0;
1117 rx_ring->lbq_free_cnt -= 16;
1118 }
1119
1120 if (start_idx != clean_idx) {
1121 QPRINTK(qdev, RX_STATUS, DEBUG,
1122 "lbq: updating prod idx = %d.\n",
1123 rx_ring->lbq_prod_idx);
1124 ql_write_db_reg(rx_ring->lbq_prod_idx,
1125 rx_ring->lbq_prod_idx_db_reg);
1126 }
1127}
1128
1129
1130static void ql_update_sbq(struct ql_adapter *qdev, struct rx_ring *rx_ring)
1131{
1132 u32 clean_idx = rx_ring->sbq_clean_idx;
1133 u32 start_idx = clean_idx;
1134 struct bq_desc *sbq_desc;
1135 u64 map;
1136 int i;
1137
1138 while (rx_ring->sbq_free_cnt > 16) {
1139 for (i = 0; i < 16; i++) {
1140 sbq_desc = &rx_ring->sbq[clean_idx];
1141 QPRINTK(qdev, RX_STATUS, DEBUG,
1142 "sbq: try cleaning clean_idx = %d.\n",
1143 clean_idx);
1144 if (sbq_desc->p.skb == NULL) {
1145 QPRINTK(qdev, RX_STATUS, DEBUG,
1146 "sbq: getting new skb for index %d.\n",
1147 sbq_desc->index);
1148 sbq_desc->p.skb =
1149 netdev_alloc_skb(qdev->ndev,
1150 rx_ring->sbq_buf_size);
1151 if (sbq_desc->p.skb == NULL) {
1152 QPRINTK(qdev, PROBE, ERR,
1153 "Couldn't get an skb.\n");
1154 rx_ring->sbq_clean_idx = clean_idx;
1155 return;
1156 }
1157 skb_reserve(sbq_desc->p.skb, QLGE_SB_PAD);
1158 map = pci_map_single(qdev->pdev,
1159 sbq_desc->p.skb->data,
1160 rx_ring->sbq_buf_size /
1161 2, PCI_DMA_FROMDEVICE);
1162 if (pci_dma_mapping_error(qdev->pdev, map)) {
1163 QPRINTK(qdev, IFUP, ERR, "PCI mapping failed.\n");
1164 rx_ring->sbq_clean_idx = clean_idx;
1165 dev_kfree_skb_any(sbq_desc->p.skb);
1166 sbq_desc->p.skb = NULL;
1167 return;
1168 }
1169 pci_unmap_addr_set(sbq_desc, mapaddr, map);
1170 pci_unmap_len_set(sbq_desc, maplen,
1171 rx_ring->sbq_buf_size / 2);
1172 *sbq_desc->addr = cpu_to_le64(map);
1173 }
1174
1175 clean_idx++;
1176 if (clean_idx == rx_ring->sbq_len)
1177 clean_idx = 0;
1178 }
1179 rx_ring->sbq_clean_idx = clean_idx;
1180 rx_ring->sbq_prod_idx += 16;
1181 if (rx_ring->sbq_prod_idx == rx_ring->sbq_len)
1182 rx_ring->sbq_prod_idx = 0;
1183 rx_ring->sbq_free_cnt -= 16;
1184 }
1185
1186 if (start_idx != clean_idx) {
1187 QPRINTK(qdev, RX_STATUS, DEBUG,
1188 "sbq: updating prod idx = %d.\n",
1189 rx_ring->sbq_prod_idx);
1190 ql_write_db_reg(rx_ring->sbq_prod_idx,
1191 rx_ring->sbq_prod_idx_db_reg);
1192 }
1193}
1194
1195static void ql_update_buffer_queues(struct ql_adapter *qdev,
1196 struct rx_ring *rx_ring)
1197{
1198 ql_update_sbq(qdev, rx_ring);
1199 ql_update_lbq(qdev, rx_ring);
1200}
1201
1202
1203
1204
1205static void ql_unmap_send(struct ql_adapter *qdev,
1206 struct tx_ring_desc *tx_ring_desc, int mapped)
1207{
1208 int i;
1209 for (i = 0; i < mapped; i++) {
1210 if (i == 0 || (i == 7 && mapped > 7)) {
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220 if (i == 7) {
1221 QPRINTK(qdev, TX_DONE, DEBUG,
1222 "unmapping OAL area.\n");
1223 }
1224 pci_unmap_single(qdev->pdev,
1225 pci_unmap_addr(&tx_ring_desc->map[i],
1226 mapaddr),
1227 pci_unmap_len(&tx_ring_desc->map[i],
1228 maplen),
1229 PCI_DMA_TODEVICE);
1230 } else {
1231 QPRINTK(qdev, TX_DONE, DEBUG, "unmapping frag %d.\n",
1232 i);
1233 pci_unmap_page(qdev->pdev,
1234 pci_unmap_addr(&tx_ring_desc->map[i],
1235 mapaddr),
1236 pci_unmap_len(&tx_ring_desc->map[i],
1237 maplen), PCI_DMA_TODEVICE);
1238 }
1239 }
1240
1241}
1242
1243
1244
1245
1246static int ql_map_send(struct ql_adapter *qdev,
1247 struct ob_mac_iocb_req *mac_iocb_ptr,
1248 struct sk_buff *skb, struct tx_ring_desc *tx_ring_desc)
1249{
1250 int len = skb_headlen(skb);
1251 dma_addr_t map;
1252 int frag_idx, err, map_idx = 0;
1253 struct tx_buf_desc *tbd = mac_iocb_ptr->tbd;
1254 int frag_cnt = skb_shinfo(skb)->nr_frags;
1255
1256 if (frag_cnt) {
1257 QPRINTK(qdev, TX_QUEUED, DEBUG, "frag_cnt = %d.\n", frag_cnt);
1258 }
1259
1260
1261
1262 map = pci_map_single(qdev->pdev, skb->data, len, PCI_DMA_TODEVICE);
1263
1264 err = pci_dma_mapping_error(qdev->pdev, map);
1265 if (err) {
1266 QPRINTK(qdev, TX_QUEUED, ERR,
1267 "PCI mapping failed with error: %d\n", err);
1268
1269 return NETDEV_TX_BUSY;
1270 }
1271
1272 tbd->len = cpu_to_le32(len);
1273 tbd->addr = cpu_to_le64(map);
1274 pci_unmap_addr_set(&tx_ring_desc->map[map_idx], mapaddr, map);
1275 pci_unmap_len_set(&tx_ring_desc->map[map_idx], maplen, len);
1276 map_idx++;
1277
1278
1279
1280
1281
1282
1283
1284
1285 for (frag_idx = 0; frag_idx < frag_cnt; frag_idx++, map_idx++) {
1286 skb_frag_t *frag = &skb_shinfo(skb)->frags[frag_idx];
1287 tbd++;
1288 if (frag_idx == 6 && frag_cnt > 7) {
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308 map = pci_map_single(qdev->pdev, &tx_ring_desc->oal,
1309 sizeof(struct oal),
1310 PCI_DMA_TODEVICE);
1311 err = pci_dma_mapping_error(qdev->pdev, map);
1312 if (err) {
1313 QPRINTK(qdev, TX_QUEUED, ERR,
1314 "PCI mapping outbound address list with error: %d\n",
1315 err);
1316 goto map_error;
1317 }
1318
1319 tbd->addr = cpu_to_le64(map);
1320
1321
1322
1323
1324
1325 tbd->len =
1326 cpu_to_le32((sizeof(struct tx_buf_desc) *
1327 (frag_cnt - frag_idx)) | TX_DESC_C);
1328 pci_unmap_addr_set(&tx_ring_desc->map[map_idx], mapaddr,
1329 map);
1330 pci_unmap_len_set(&tx_ring_desc->map[map_idx], maplen,
1331 sizeof(struct oal));
1332 tbd = (struct tx_buf_desc *)&tx_ring_desc->oal;
1333 map_idx++;
1334 }
1335
1336 map =
1337 pci_map_page(qdev->pdev, frag->page,
1338 frag->page_offset, frag->size,
1339 PCI_DMA_TODEVICE);
1340
1341 err = pci_dma_mapping_error(qdev->pdev, map);
1342 if (err) {
1343 QPRINTK(qdev, TX_QUEUED, ERR,
1344 "PCI mapping frags failed with error: %d.\n",
1345 err);
1346 goto map_error;
1347 }
1348
1349 tbd->addr = cpu_to_le64(map);
1350 tbd->len = cpu_to_le32(frag->size);
1351 pci_unmap_addr_set(&tx_ring_desc->map[map_idx], mapaddr, map);
1352 pci_unmap_len_set(&tx_ring_desc->map[map_idx], maplen,
1353 frag->size);
1354
1355 }
1356
1357 tx_ring_desc->map_cnt = map_idx;
1358
1359 tbd->len = cpu_to_le32(le32_to_cpu(tbd->len) | TX_DESC_E);
1360 return NETDEV_TX_OK;
1361
1362map_error:
1363
1364
1365
1366
1367
1368
1369 ql_unmap_send(qdev, tx_ring_desc, map_idx);
1370 return NETDEV_TX_BUSY;
1371}
1372
1373static void ql_realign_skb(struct sk_buff *skb, int len)
1374{
1375 void *temp_addr = skb->data;
1376
1377
1378
1379
1380
1381 skb->data -= QLGE_SB_PAD - NET_IP_ALIGN;
1382 skb->tail -= QLGE_SB_PAD - NET_IP_ALIGN;
1383 skb_copy_to_linear_data(skb, temp_addr,
1384 (unsigned int)len);
1385}
1386
1387
1388
1389
1390
1391
1392static struct sk_buff *ql_build_rx_skb(struct ql_adapter *qdev,
1393 struct rx_ring *rx_ring,
1394 struct ib_mac_iocb_rsp *ib_mac_rsp)
1395{
1396 struct bq_desc *lbq_desc;
1397 struct bq_desc *sbq_desc;
1398 struct sk_buff *skb = NULL;
1399 u32 length = le32_to_cpu(ib_mac_rsp->data_len);
1400 u32 hdr_len = le32_to_cpu(ib_mac_rsp->hdr_len);
1401
1402
1403
1404
1405 if (ib_mac_rsp->flags4 & IB_MAC_IOCB_RSP_HV &&
1406 ib_mac_rsp->flags4 & IB_MAC_IOCB_RSP_HS) {
1407 QPRINTK(qdev, RX_STATUS, DEBUG, "Header of %d bytes in small buffer.\n", hdr_len);
1408
1409
1410
1411 sbq_desc = ql_get_curr_sbuf(rx_ring);
1412 pci_unmap_single(qdev->pdev,
1413 pci_unmap_addr(sbq_desc, mapaddr),
1414 pci_unmap_len(sbq_desc, maplen),
1415 PCI_DMA_FROMDEVICE);
1416 skb = sbq_desc->p.skb;
1417 ql_realign_skb(skb, hdr_len);
1418 skb_put(skb, hdr_len);
1419 sbq_desc->p.skb = NULL;
1420 }
1421
1422
1423
1424
1425 if (unlikely(!length)) {
1426 QPRINTK(qdev, RX_STATUS, DEBUG,
1427 "No Data buffer in this packet.\n");
1428 return skb;
1429 }
1430
1431 if (ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_DS) {
1432 if (ib_mac_rsp->flags4 & IB_MAC_IOCB_RSP_HS) {
1433 QPRINTK(qdev, RX_STATUS, DEBUG,
1434 "Headers in small, data of %d bytes in small, combine them.\n", length);
1435
1436
1437
1438
1439
1440
1441
1442 sbq_desc = ql_get_curr_sbuf(rx_ring);
1443 pci_dma_sync_single_for_cpu(qdev->pdev,
1444 pci_unmap_addr
1445 (sbq_desc, mapaddr),
1446 pci_unmap_len
1447 (sbq_desc, maplen),
1448 PCI_DMA_FROMDEVICE);
1449 memcpy(skb_put(skb, length),
1450 sbq_desc->p.skb->data, length);
1451 pci_dma_sync_single_for_device(qdev->pdev,
1452 pci_unmap_addr
1453 (sbq_desc,
1454 mapaddr),
1455 pci_unmap_len
1456 (sbq_desc,
1457 maplen),
1458 PCI_DMA_FROMDEVICE);
1459 } else {
1460 QPRINTK(qdev, RX_STATUS, DEBUG,
1461 "%d bytes in a single small buffer.\n", length);
1462 sbq_desc = ql_get_curr_sbuf(rx_ring);
1463 skb = sbq_desc->p.skb;
1464 ql_realign_skb(skb, length);
1465 skb_put(skb, length);
1466 pci_unmap_single(qdev->pdev,
1467 pci_unmap_addr(sbq_desc,
1468 mapaddr),
1469 pci_unmap_len(sbq_desc,
1470 maplen),
1471 PCI_DMA_FROMDEVICE);
1472 sbq_desc->p.skb = NULL;
1473 }
1474 } else if (ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_DL) {
1475 if (ib_mac_rsp->flags4 & IB_MAC_IOCB_RSP_HS) {
1476 QPRINTK(qdev, RX_STATUS, DEBUG,
1477 "Header in small, %d bytes in large. Chain large to small!\n", length);
1478
1479
1480
1481
1482
1483 lbq_desc = ql_get_curr_lbuf(rx_ring);
1484 pci_unmap_page(qdev->pdev,
1485 pci_unmap_addr(lbq_desc,
1486 mapaddr),
1487 pci_unmap_len(lbq_desc, maplen),
1488 PCI_DMA_FROMDEVICE);
1489 QPRINTK(qdev, RX_STATUS, DEBUG,
1490 "Chaining page to skb.\n");
1491 skb_fill_page_desc(skb, 0, lbq_desc->p.lbq_page,
1492 0, length);
1493 skb->len += length;
1494 skb->data_len += length;
1495 skb->truesize += length;
1496 lbq_desc->p.lbq_page = NULL;
1497 } else {
1498
1499
1500
1501
1502
1503 lbq_desc = ql_get_curr_lbuf(rx_ring);
1504 skb = netdev_alloc_skb(qdev->ndev, length);
1505 if (skb == NULL) {
1506 QPRINTK(qdev, PROBE, DEBUG,
1507 "No skb available, drop the packet.\n");
1508 return NULL;
1509 }
1510 pci_unmap_page(qdev->pdev,
1511 pci_unmap_addr(lbq_desc,
1512 mapaddr),
1513 pci_unmap_len(lbq_desc, maplen),
1514 PCI_DMA_FROMDEVICE);
1515 skb_reserve(skb, NET_IP_ALIGN);
1516 QPRINTK(qdev, RX_STATUS, DEBUG,
1517 "%d bytes of headers and data in large. Chain page to new skb and pull tail.\n", length);
1518 skb_fill_page_desc(skb, 0, lbq_desc->p.lbq_page,
1519 0, length);
1520 skb->len += length;
1521 skb->data_len += length;
1522 skb->truesize += length;
1523 length -= length;
1524 lbq_desc->p.lbq_page = NULL;
1525 __pskb_pull_tail(skb,
1526 (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_V) ?
1527 VLAN_ETH_HLEN : ETH_HLEN);
1528 }
1529 } else {
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541 int size, offset, i = 0;
1542 __le64 *bq, bq_array[8];
1543 sbq_desc = ql_get_curr_sbuf(rx_ring);
1544 pci_unmap_single(qdev->pdev,
1545 pci_unmap_addr(sbq_desc, mapaddr),
1546 pci_unmap_len(sbq_desc, maplen),
1547 PCI_DMA_FROMDEVICE);
1548 if (!(ib_mac_rsp->flags4 & IB_MAC_IOCB_RSP_HS)) {
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558 QPRINTK(qdev, RX_STATUS, DEBUG,
1559 "%d bytes of headers & data in chain of large.\n", length);
1560 skb = sbq_desc->p.skb;
1561 bq = &bq_array[0];
1562 memcpy(bq, skb->data, sizeof(bq_array));
1563 sbq_desc->p.skb = NULL;
1564 skb_reserve(skb, NET_IP_ALIGN);
1565 } else {
1566 QPRINTK(qdev, RX_STATUS, DEBUG,
1567 "Headers in small, %d bytes of data in chain of large.\n", length);
1568 bq = (__le64 *)sbq_desc->p.skb->data;
1569 }
1570 while (length > 0) {
1571 lbq_desc = ql_get_curr_lbuf(rx_ring);
1572 pci_unmap_page(qdev->pdev,
1573 pci_unmap_addr(lbq_desc,
1574 mapaddr),
1575 pci_unmap_len(lbq_desc,
1576 maplen),
1577 PCI_DMA_FROMDEVICE);
1578 size = (length < PAGE_SIZE) ? length : PAGE_SIZE;
1579 offset = 0;
1580
1581 QPRINTK(qdev, RX_STATUS, DEBUG,
1582 "Adding page %d to skb for %d bytes.\n",
1583 i, size);
1584 skb_fill_page_desc(skb, i, lbq_desc->p.lbq_page,
1585 offset, size);
1586 skb->len += size;
1587 skb->data_len += size;
1588 skb->truesize += size;
1589 length -= size;
1590 lbq_desc->p.lbq_page = NULL;
1591 bq++;
1592 i++;
1593 }
1594 __pskb_pull_tail(skb, (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_V) ?
1595 VLAN_ETH_HLEN : ETH_HLEN);
1596 }
1597 return skb;
1598}
1599
1600
1601static void ql_process_mac_rx_intr(struct ql_adapter *qdev,
1602 struct rx_ring *rx_ring,
1603 struct ib_mac_iocb_rsp *ib_mac_rsp)
1604{
1605 struct net_device *ndev = qdev->ndev;
1606 struct sk_buff *skb = NULL;
1607 u16 vlan_id = (le16_to_cpu(ib_mac_rsp->vlan_id) &
1608 IB_MAC_IOCB_RSP_VLAN_MASK)
1609
1610 QL_DUMP_IB_MAC_RSP(ib_mac_rsp);
1611
1612 skb = ql_build_rx_skb(qdev, rx_ring, ib_mac_rsp);
1613 if (unlikely(!skb)) {
1614 QPRINTK(qdev, RX_STATUS, DEBUG,
1615 "No skb available, drop packet.\n");
1616 return;
1617 }
1618
1619
1620 if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) {
1621 QPRINTK(qdev, DRV, ERR, "Receive error, flags2 = 0x%x\n",
1622 ib_mac_rsp->flags2);
1623 dev_kfree_skb_any(skb);
1624 return;
1625 }
1626
1627
1628
1629
1630 if (skb->len > ndev->mtu + ETH_HLEN) {
1631 dev_kfree_skb_any(skb);
1632 return;
1633 }
1634
1635 prefetch(skb->data);
1636 skb->dev = ndev;
1637 if (ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_M_MASK) {
1638 QPRINTK(qdev, RX_STATUS, DEBUG, "%s%s%s Multicast.\n",
1639 (ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_M_MASK) ==
1640 IB_MAC_IOCB_RSP_M_HASH ? "Hash" : "",
1641 (ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_M_MASK) ==
1642 IB_MAC_IOCB_RSP_M_REG ? "Registered" : "",
1643 (ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_M_MASK) ==
1644 IB_MAC_IOCB_RSP_M_PROM ? "Promiscuous" : "");
1645 }
1646 if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_P) {
1647 QPRINTK(qdev, RX_STATUS, DEBUG, "Promiscuous Packet.\n");
1648 }
1649
1650 skb->protocol = eth_type_trans(skb, ndev);
1651 skb->ip_summed = CHECKSUM_NONE;
1652
1653
1654
1655
1656 if (qdev->rx_csum &&
1657 !(ib_mac_rsp->flags1 & IB_MAC_CSUM_ERR_MASK)) {
1658
1659 if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_T) {
1660 QPRINTK(qdev, RX_STATUS, DEBUG,
1661 "TCP checksum done!\n");
1662 skb->ip_summed = CHECKSUM_UNNECESSARY;
1663 } else if ((ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_U) &&
1664 (ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_V4)) {
1665
1666 struct iphdr *iph = (struct iphdr *) skb->data;
1667 if (!(iph->frag_off &
1668 cpu_to_be16(IP_MF|IP_OFFSET))) {
1669 skb->ip_summed = CHECKSUM_UNNECESSARY;
1670 QPRINTK(qdev, RX_STATUS, DEBUG,
1671 "TCP checksum done!\n");
1672 }
1673 }
1674 }
1675
1676 qdev->stats.rx_packets++;
1677 qdev->stats.rx_bytes += skb->len;
1678 skb_record_rx_queue(skb, rx_ring->cq_id);
1679 if (skb->ip_summed == CHECKSUM_UNNECESSARY) {
1680 if (qdev->vlgrp &&
1681 (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_V) &&
1682 (vlan_id != 0))
1683 vlan_gro_receive(&rx_ring->napi, qdev->vlgrp,
1684 vlan_id, skb);
1685 else
1686 napi_gro_receive(&rx_ring->napi, skb);
1687 } else {
1688 if (qdev->vlgrp &&
1689 (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_V) &&
1690 (vlan_id != 0))
1691 vlan_hwaccel_receive_skb(skb, qdev->vlgrp, vlan_id);
1692 else
1693 netif_receive_skb(skb);
1694 }
1695}
1696
1697
1698static void ql_process_mac_tx_intr(struct ql_adapter *qdev,
1699 struct ob_mac_iocb_rsp *mac_rsp)
1700{
1701 struct tx_ring *tx_ring;
1702 struct tx_ring_desc *tx_ring_desc;
1703
1704 QL_DUMP_OB_MAC_RSP(mac_rsp);
1705 tx_ring = &qdev->tx_ring[mac_rsp->txq_idx];
1706 tx_ring_desc = &tx_ring->q[mac_rsp->tid];
1707 ql_unmap_send(qdev, tx_ring_desc, tx_ring_desc->map_cnt);
1708 qdev->stats.tx_bytes += (tx_ring_desc->skb)->len;
1709 qdev->stats.tx_packets++;
1710 dev_kfree_skb(tx_ring_desc->skb);
1711 tx_ring_desc->skb = NULL;
1712
1713 if (unlikely(mac_rsp->flags1 & (OB_MAC_IOCB_RSP_E |
1714 OB_MAC_IOCB_RSP_S |
1715 OB_MAC_IOCB_RSP_L |
1716 OB_MAC_IOCB_RSP_P | OB_MAC_IOCB_RSP_B))) {
1717 if (mac_rsp->flags1 & OB_MAC_IOCB_RSP_E) {
1718 QPRINTK(qdev, TX_DONE, WARNING,
1719 "Total descriptor length did not match transfer length.\n");
1720 }
1721 if (mac_rsp->flags1 & OB_MAC_IOCB_RSP_S) {
1722 QPRINTK(qdev, TX_DONE, WARNING,
1723 "Frame too short to be legal, not sent.\n");
1724 }
1725 if (mac_rsp->flags1 & OB_MAC_IOCB_RSP_L) {
1726 QPRINTK(qdev, TX_DONE, WARNING,
1727 "Frame too long, but sent anyway.\n");
1728 }
1729 if (mac_rsp->flags1 & OB_MAC_IOCB_RSP_B) {
1730 QPRINTK(qdev, TX_DONE, WARNING,
1731 "PCI backplane error. Frame not sent.\n");
1732 }
1733 }
1734 atomic_inc(&tx_ring->tx_count);
1735}
1736
1737
1738void ql_queue_fw_error(struct ql_adapter *qdev)
1739{
1740 ql_link_off(qdev);
1741 queue_delayed_work(qdev->workqueue, &qdev->mpi_reset_work, 0);
1742}
1743
1744void ql_queue_asic_error(struct ql_adapter *qdev)
1745{
1746 ql_link_off(qdev);
1747 ql_disable_interrupts(qdev);
1748
1749
1750
1751
1752 clear_bit(QL_ADAPTER_UP, &qdev->flags);
1753 queue_delayed_work(qdev->workqueue, &qdev->asic_reset_work, 0);
1754}
1755
1756static void ql_process_chip_ae_intr(struct ql_adapter *qdev,
1757 struct ib_ae_iocb_rsp *ib_ae_rsp)
1758{
1759 switch (ib_ae_rsp->event) {
1760 case MGMT_ERR_EVENT:
1761 QPRINTK(qdev, RX_ERR, ERR,
1762 "Management Processor Fatal Error.\n");
1763 ql_queue_fw_error(qdev);
1764 return;
1765
1766 case CAM_LOOKUP_ERR_EVENT:
1767 QPRINTK(qdev, LINK, ERR,
1768 "Multiple CAM hits lookup occurred.\n");
1769 QPRINTK(qdev, DRV, ERR, "This event shouldn't occur.\n");
1770 ql_queue_asic_error(qdev);
1771 return;
1772
1773 case SOFT_ECC_ERROR_EVENT:
1774 QPRINTK(qdev, RX_ERR, ERR, "Soft ECC error detected.\n");
1775 ql_queue_asic_error(qdev);
1776 break;
1777
1778 case PCI_ERR_ANON_BUF_RD:
1779 QPRINTK(qdev, RX_ERR, ERR,
1780 "PCI error occurred when reading anonymous buffers from rx_ring %d.\n",
1781 ib_ae_rsp->q_id);
1782 ql_queue_asic_error(qdev);
1783 break;
1784
1785 default:
1786 QPRINTK(qdev, DRV, ERR, "Unexpected event %d.\n",
1787 ib_ae_rsp->event);
1788 ql_queue_asic_error(qdev);
1789 break;
1790 }
1791}
1792
1793static int ql_clean_outbound_rx_ring(struct rx_ring *rx_ring)
1794{
1795 struct ql_adapter *qdev = rx_ring->qdev;
1796 u32 prod = ql_read_sh_reg(rx_ring->prod_idx_sh_reg);
1797 struct ob_mac_iocb_rsp *net_rsp = NULL;
1798 int count = 0;
1799
1800 struct tx_ring *tx_ring;
1801
1802 while (prod != rx_ring->cnsmr_idx) {
1803
1804 QPRINTK(qdev, RX_STATUS, DEBUG,
1805 "cq_id = %d, prod = %d, cnsmr = %d.\n.", rx_ring->cq_id,
1806 prod, rx_ring->cnsmr_idx);
1807
1808 net_rsp = (struct ob_mac_iocb_rsp *)rx_ring->curr_entry;
1809 rmb();
1810 switch (net_rsp->opcode) {
1811
1812 case OPCODE_OB_MAC_TSO_IOCB:
1813 case OPCODE_OB_MAC_IOCB:
1814 ql_process_mac_tx_intr(qdev, net_rsp);
1815 break;
1816 default:
1817 QPRINTK(qdev, RX_STATUS, DEBUG,
1818 "Hit default case, not handled! dropping the packet, opcode = %x.\n",
1819 net_rsp->opcode);
1820 }
1821 count++;
1822 ql_update_cq(rx_ring);
1823 prod = ql_read_sh_reg(rx_ring->prod_idx_sh_reg);
1824 }
1825 ql_write_cq_idx(rx_ring);
1826 tx_ring = &qdev->tx_ring[net_rsp->txq_idx];
1827 if (__netif_subqueue_stopped(qdev->ndev, tx_ring->wq_id) &&
1828 net_rsp != NULL) {
1829 if (atomic_read(&tx_ring->queue_stopped) &&
1830 (atomic_read(&tx_ring->tx_count) > (tx_ring->wq_len / 4)))
1831
1832
1833
1834
1835 netif_wake_subqueue(qdev->ndev, tx_ring->wq_id);
1836 }
1837
1838 return count;
1839}
1840
1841static int ql_clean_inbound_rx_ring(struct rx_ring *rx_ring, int budget)
1842{
1843 struct ql_adapter *qdev = rx_ring->qdev;
1844 u32 prod = ql_read_sh_reg(rx_ring->prod_idx_sh_reg);
1845 struct ql_net_rsp_iocb *net_rsp;
1846 int count = 0;
1847
1848
1849 while (prod != rx_ring->cnsmr_idx) {
1850
1851 QPRINTK(qdev, RX_STATUS, DEBUG,
1852 "cq_id = %d, prod = %d, cnsmr = %d.\n.", rx_ring->cq_id,
1853 prod, rx_ring->cnsmr_idx);
1854
1855 net_rsp = rx_ring->curr_entry;
1856 rmb();
1857 switch (net_rsp->opcode) {
1858 case OPCODE_IB_MAC_IOCB:
1859 ql_process_mac_rx_intr(qdev, rx_ring,
1860 (struct ib_mac_iocb_rsp *)
1861 net_rsp);
1862 break;
1863
1864 case OPCODE_IB_AE_IOCB:
1865 ql_process_chip_ae_intr(qdev, (struct ib_ae_iocb_rsp *)
1866 net_rsp);
1867 break;
1868 default:
1869 {
1870 QPRINTK(qdev, RX_STATUS, DEBUG,
1871 "Hit default case, not handled! dropping the packet, opcode = %x.\n",
1872 net_rsp->opcode);
1873 }
1874 }
1875 count++;
1876 ql_update_cq(rx_ring);
1877 prod = ql_read_sh_reg(rx_ring->prod_idx_sh_reg);
1878 if (count == budget)
1879 break;
1880 }
1881 ql_update_buffer_queues(qdev, rx_ring);
1882 ql_write_cq_idx(rx_ring);
1883 return count;
1884}
1885
1886static int ql_napi_poll_msix(struct napi_struct *napi, int budget)
1887{
1888 struct rx_ring *rx_ring = container_of(napi, struct rx_ring, napi);
1889 struct ql_adapter *qdev = rx_ring->qdev;
1890 struct rx_ring *trx_ring;
1891 int i, work_done = 0;
1892 struct intr_context *ctx = &qdev->intr_context[rx_ring->cq_id];
1893
1894 QPRINTK(qdev, RX_STATUS, DEBUG, "Enter, NAPI POLL cq_id = %d.\n",
1895 rx_ring->cq_id);
1896
1897
1898
1899 for (i = qdev->rss_ring_count; i < qdev->rx_ring_count; i++) {
1900 trx_ring = &qdev->rx_ring[i];
1901
1902
1903
1904 if ((ctx->irq_mask & (1 << trx_ring->cq_id)) &&
1905 (ql_read_sh_reg(trx_ring->prod_idx_sh_reg) !=
1906 trx_ring->cnsmr_idx)) {
1907 QPRINTK(qdev, INTR, DEBUG,
1908 "%s: Servicing TX completion ring %d.\n",
1909 __func__, trx_ring->cq_id);
1910 ql_clean_outbound_rx_ring(trx_ring);
1911 }
1912 }
1913
1914
1915
1916
1917 if (ql_read_sh_reg(rx_ring->prod_idx_sh_reg) !=
1918 rx_ring->cnsmr_idx) {
1919 QPRINTK(qdev, INTR, DEBUG,
1920 "%s: Servicing RX completion ring %d.\n",
1921 __func__, rx_ring->cq_id);
1922 work_done = ql_clean_inbound_rx_ring(rx_ring, budget);
1923 }
1924
1925 if (work_done < budget) {
1926 napi_complete(napi);
1927 ql_enable_completion_interrupt(qdev, rx_ring->irq);
1928 }
1929 return work_done;
1930}
1931
1932static void ql_vlan_rx_register(struct net_device *ndev, struct vlan_group *grp)
1933{
1934 struct ql_adapter *qdev = netdev_priv(ndev);
1935
1936 qdev->vlgrp = grp;
1937 if (grp) {
1938 QPRINTK(qdev, IFUP, DEBUG, "Turning on VLAN in NIC_RCV_CFG.\n");
1939 ql_write32(qdev, NIC_RCV_CFG, NIC_RCV_CFG_VLAN_MASK |
1940 NIC_RCV_CFG_VLAN_MATCH_AND_NON);
1941 } else {
1942 QPRINTK(qdev, IFUP, DEBUG,
1943 "Turning off VLAN in NIC_RCV_CFG.\n");
1944 ql_write32(qdev, NIC_RCV_CFG, NIC_RCV_CFG_VLAN_MASK);
1945 }
1946}
1947
1948static void ql_vlan_rx_add_vid(struct net_device *ndev, u16 vid)
1949{
1950 struct ql_adapter *qdev = netdev_priv(ndev);
1951 u32 enable_bit = MAC_ADDR_E;
1952 int status;
1953
1954 status = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK);
1955 if (status)
1956 return;
1957 if (ql_set_mac_addr_reg
1958 (qdev, (u8 *) &enable_bit, MAC_ADDR_TYPE_VLAN, vid)) {
1959 QPRINTK(qdev, IFUP, ERR, "Failed to init vlan address.\n");
1960 }
1961 ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
1962}
1963
1964static void ql_vlan_rx_kill_vid(struct net_device *ndev, u16 vid)
1965{
1966 struct ql_adapter *qdev = netdev_priv(ndev);
1967 u32 enable_bit = 0;
1968 int status;
1969
1970 status = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK);
1971 if (status)
1972 return;
1973
1974 if (ql_set_mac_addr_reg
1975 (qdev, (u8 *) &enable_bit, MAC_ADDR_TYPE_VLAN, vid)) {
1976 QPRINTK(qdev, IFUP, ERR, "Failed to clear vlan address.\n");
1977 }
1978 ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
1979
1980}
1981
1982
1983static irqreturn_t qlge_msix_rx_isr(int irq, void *dev_id)
1984{
1985 struct rx_ring *rx_ring = dev_id;
1986 napi_schedule(&rx_ring->napi);
1987 return IRQ_HANDLED;
1988}
1989
1990
1991
1992
1993
1994
1995static irqreturn_t qlge_isr(int irq, void *dev_id)
1996{
1997 struct rx_ring *rx_ring = dev_id;
1998 struct ql_adapter *qdev = rx_ring->qdev;
1999 struct intr_context *intr_context = &qdev->intr_context[0];
2000 u32 var;
2001 int work_done = 0;
2002
2003 spin_lock(&qdev->hw_lock);
2004 if (atomic_read(&qdev->intr_context[0].irq_cnt)) {
2005 QPRINTK(qdev, INTR, DEBUG, "Shared Interrupt, Not ours!\n");
2006 spin_unlock(&qdev->hw_lock);
2007 return IRQ_NONE;
2008 }
2009 spin_unlock(&qdev->hw_lock);
2010
2011 var = ql_disable_completion_interrupt(qdev, intr_context->intr);
2012
2013
2014
2015
2016 if (var & STS_FE) {
2017 ql_queue_asic_error(qdev);
2018 QPRINTK(qdev, INTR, ERR, "Got fatal error, STS = %x.\n", var);
2019 var = ql_read32(qdev, ERR_STS);
2020 QPRINTK(qdev, INTR, ERR,
2021 "Resetting chip. Error Status Register = 0x%x\n", var);
2022 return IRQ_HANDLED;
2023 }
2024
2025
2026
2027
2028 if ((var & STS_PI) &&
2029 (ql_read32(qdev, INTR_MASK) & INTR_MASK_PI)) {
2030
2031
2032
2033
2034 QPRINTK(qdev, INTR, ERR, "Got MPI processor interrupt.\n");
2035 ql_disable_completion_interrupt(qdev, intr_context->intr);
2036 ql_write32(qdev, INTR_MASK, (INTR_MASK_PI << 16));
2037 queue_delayed_work_on(smp_processor_id(),
2038 qdev->workqueue, &qdev->mpi_work, 0);
2039 work_done++;
2040 }
2041
2042
2043
2044
2045
2046
2047 var = ql_read32(qdev, ISR1);
2048 if (var & intr_context->irq_mask) {
2049 QPRINTK(qdev, INTR, INFO,
2050 "Waking handler for rx_ring[0].\n");
2051 ql_disable_completion_interrupt(qdev, intr_context->intr);
2052 napi_schedule(&rx_ring->napi);
2053 work_done++;
2054 }
2055 ql_enable_completion_interrupt(qdev, intr_context->intr);
2056 return work_done ? IRQ_HANDLED : IRQ_NONE;
2057}
2058
2059static int ql_tso(struct sk_buff *skb, struct ob_mac_tso_iocb_req *mac_iocb_ptr)
2060{
2061
2062 if (skb_is_gso(skb)) {
2063 int err;
2064 if (skb_header_cloned(skb)) {
2065 err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC);
2066 if (err)
2067 return err;
2068 }
2069
2070 mac_iocb_ptr->opcode = OPCODE_OB_MAC_TSO_IOCB;
2071 mac_iocb_ptr->flags3 |= OB_MAC_TSO_IOCB_IC;
2072 mac_iocb_ptr->frame_len = cpu_to_le32((u32) skb->len);
2073 mac_iocb_ptr->total_hdrs_len =
2074 cpu_to_le16(skb_transport_offset(skb) + tcp_hdrlen(skb));
2075 mac_iocb_ptr->net_trans_offset =
2076 cpu_to_le16(skb_network_offset(skb) |
2077 skb_transport_offset(skb)
2078 << OB_MAC_TRANSPORT_HDR_SHIFT);
2079 mac_iocb_ptr->mss = cpu_to_le16(skb_shinfo(skb)->gso_size);
2080 mac_iocb_ptr->flags2 |= OB_MAC_TSO_IOCB_LSO;
2081 if (likely(skb->protocol == htons(ETH_P_IP))) {
2082 struct iphdr *iph = ip_hdr(skb);
2083 iph->check = 0;
2084 mac_iocb_ptr->flags1 |= OB_MAC_TSO_IOCB_IP4;
2085 tcp_hdr(skb)->check = ~csum_tcpudp_magic(iph->saddr,
2086 iph->daddr, 0,
2087 IPPROTO_TCP,
2088 0);
2089 } else if (skb->protocol == htons(ETH_P_IPV6)) {
2090 mac_iocb_ptr->flags1 |= OB_MAC_TSO_IOCB_IP6;
2091 tcp_hdr(skb)->check =
2092 ~csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
2093 &ipv6_hdr(skb)->daddr,
2094 0, IPPROTO_TCP, 0);
2095 }
2096 return 1;
2097 }
2098 return 0;
2099}
2100
2101static void ql_hw_csum_setup(struct sk_buff *skb,
2102 struct ob_mac_tso_iocb_req *mac_iocb_ptr)
2103{
2104 int len;
2105 struct iphdr *iph = ip_hdr(skb);
2106 __sum16 *check;
2107 mac_iocb_ptr->opcode = OPCODE_OB_MAC_TSO_IOCB;
2108 mac_iocb_ptr->frame_len = cpu_to_le32((u32) skb->len);
2109 mac_iocb_ptr->net_trans_offset =
2110 cpu_to_le16(skb_network_offset(skb) |
2111 skb_transport_offset(skb) << OB_MAC_TRANSPORT_HDR_SHIFT);
2112
2113 mac_iocb_ptr->flags1 |= OB_MAC_TSO_IOCB_IP4;
2114 len = (ntohs(iph->tot_len) - (iph->ihl << 2));
2115 if (likely(iph->protocol == IPPROTO_TCP)) {
2116 check = &(tcp_hdr(skb)->check);
2117 mac_iocb_ptr->flags2 |= OB_MAC_TSO_IOCB_TC;
2118 mac_iocb_ptr->total_hdrs_len =
2119 cpu_to_le16(skb_transport_offset(skb) +
2120 (tcp_hdr(skb)->doff << 2));
2121 } else {
2122 check = &(udp_hdr(skb)->check);
2123 mac_iocb_ptr->flags2 |= OB_MAC_TSO_IOCB_UC;
2124 mac_iocb_ptr->total_hdrs_len =
2125 cpu_to_le16(skb_transport_offset(skb) +
2126 sizeof(struct udphdr));
2127 }
2128 *check = ~csum_tcpudp_magic(iph->saddr,
2129 iph->daddr, len, iph->protocol, 0);
2130}
2131
2132static netdev_tx_t qlge_send(struct sk_buff *skb, struct net_device *ndev)
2133{
2134 struct tx_ring_desc *tx_ring_desc;
2135 struct ob_mac_iocb_req *mac_iocb_ptr;
2136 struct ql_adapter *qdev = netdev_priv(ndev);
2137 int tso;
2138 struct tx_ring *tx_ring;
2139 u32 tx_ring_idx = (u32) skb->queue_mapping;
2140
2141 tx_ring = &qdev->tx_ring[tx_ring_idx];
2142
2143 if (skb_padto(skb, ETH_ZLEN))
2144 return NETDEV_TX_OK;
2145
2146 if (unlikely(atomic_read(&tx_ring->tx_count) < 2)) {
2147 QPRINTK(qdev, TX_QUEUED, INFO,
2148 "%s: shutting down tx queue %d du to lack of resources.\n",
2149 __func__, tx_ring_idx);
2150 netif_stop_subqueue(ndev, tx_ring->wq_id);
2151 atomic_inc(&tx_ring->queue_stopped);
2152 return NETDEV_TX_BUSY;
2153 }
2154 tx_ring_desc = &tx_ring->q[tx_ring->prod_idx];
2155 mac_iocb_ptr = tx_ring_desc->queue_entry;
2156 memset((void *)mac_iocb_ptr, 0, sizeof(*mac_iocb_ptr));
2157
2158 mac_iocb_ptr->opcode = OPCODE_OB_MAC_IOCB;
2159 mac_iocb_ptr->tid = tx_ring_desc->index;
2160
2161
2162
2163 mac_iocb_ptr->txq_idx = tx_ring_idx;
2164 tx_ring_desc->skb = skb;
2165
2166 mac_iocb_ptr->frame_len = cpu_to_le16((u16) skb->len);
2167
2168 if (qdev->vlgrp && vlan_tx_tag_present(skb)) {
2169 QPRINTK(qdev, TX_QUEUED, DEBUG, "Adding a vlan tag %d.\n",
2170 vlan_tx_tag_get(skb));
2171 mac_iocb_ptr->flags3 |= OB_MAC_IOCB_V;
2172 mac_iocb_ptr->vlan_tci = cpu_to_le16(vlan_tx_tag_get(skb));
2173 }
2174 tso = ql_tso(skb, (struct ob_mac_tso_iocb_req *)mac_iocb_ptr);
2175 if (tso < 0) {
2176 dev_kfree_skb_any(skb);
2177 return NETDEV_TX_OK;
2178 } else if (unlikely(!tso) && (skb->ip_summed == CHECKSUM_PARTIAL)) {
2179 ql_hw_csum_setup(skb,
2180 (struct ob_mac_tso_iocb_req *)mac_iocb_ptr);
2181 }
2182 if (ql_map_send(qdev, mac_iocb_ptr, skb, tx_ring_desc) !=
2183 NETDEV_TX_OK) {
2184 QPRINTK(qdev, TX_QUEUED, ERR,
2185 "Could not map the segments.\n");
2186 return NETDEV_TX_BUSY;
2187 }
2188 QL_DUMP_OB_MAC_IOCB(mac_iocb_ptr);
2189 tx_ring->prod_idx++;
2190 if (tx_ring->prod_idx == tx_ring->wq_len)
2191 tx_ring->prod_idx = 0;
2192 wmb();
2193
2194 ql_write_db_reg(tx_ring->prod_idx, tx_ring->prod_idx_db_reg);
2195 QPRINTK(qdev, TX_QUEUED, DEBUG, "tx queued, slot %d, len %d\n",
2196 tx_ring->prod_idx, skb->len);
2197
2198 atomic_dec(&tx_ring->tx_count);
2199 return NETDEV_TX_OK;
2200}
2201
2202static void ql_free_shadow_space(struct ql_adapter *qdev)
2203{
2204 if (qdev->rx_ring_shadow_reg_area) {
2205 pci_free_consistent(qdev->pdev,
2206 PAGE_SIZE,
2207 qdev->rx_ring_shadow_reg_area,
2208 qdev->rx_ring_shadow_reg_dma);
2209 qdev->rx_ring_shadow_reg_area = NULL;
2210 }
2211 if (qdev->tx_ring_shadow_reg_area) {
2212 pci_free_consistent(qdev->pdev,
2213 PAGE_SIZE,
2214 qdev->tx_ring_shadow_reg_area,
2215 qdev->tx_ring_shadow_reg_dma);
2216 qdev->tx_ring_shadow_reg_area = NULL;
2217 }
2218}
2219
2220static int ql_alloc_shadow_space(struct ql_adapter *qdev)
2221{
2222 qdev->rx_ring_shadow_reg_area =
2223 pci_alloc_consistent(qdev->pdev,
2224 PAGE_SIZE, &qdev->rx_ring_shadow_reg_dma);
2225 if (qdev->rx_ring_shadow_reg_area == NULL) {
2226 QPRINTK(qdev, IFUP, ERR,
2227 "Allocation of RX shadow space failed.\n");
2228 return -ENOMEM;
2229 }
2230 memset(qdev->rx_ring_shadow_reg_area, 0, PAGE_SIZE);
2231 qdev->tx_ring_shadow_reg_area =
2232 pci_alloc_consistent(qdev->pdev, PAGE_SIZE,
2233 &qdev->tx_ring_shadow_reg_dma);
2234 if (qdev->tx_ring_shadow_reg_area == NULL) {
2235 QPRINTK(qdev, IFUP, ERR,
2236 "Allocation of TX shadow space failed.\n");
2237 goto err_wqp_sh_area;
2238 }
2239 memset(qdev->tx_ring_shadow_reg_area, 0, PAGE_SIZE);
2240 return 0;
2241
2242err_wqp_sh_area:
2243 pci_free_consistent(qdev->pdev,
2244 PAGE_SIZE,
2245 qdev->rx_ring_shadow_reg_area,
2246 qdev->rx_ring_shadow_reg_dma);
2247 return -ENOMEM;
2248}
2249
2250static void ql_init_tx_ring(struct ql_adapter *qdev, struct tx_ring *tx_ring)
2251{
2252 struct tx_ring_desc *tx_ring_desc;
2253 int i;
2254 struct ob_mac_iocb_req *mac_iocb_ptr;
2255
2256 mac_iocb_ptr = tx_ring->wq_base;
2257 tx_ring_desc = tx_ring->q;
2258 for (i = 0; i < tx_ring->wq_len; i++) {
2259 tx_ring_desc->index = i;
2260 tx_ring_desc->skb = NULL;
2261 tx_ring_desc->queue_entry = mac_iocb_ptr;
2262 mac_iocb_ptr++;
2263 tx_ring_desc++;
2264 }
2265 atomic_set(&tx_ring->tx_count, tx_ring->wq_len);
2266 atomic_set(&tx_ring->queue_stopped, 0);
2267}
2268
2269static void ql_free_tx_resources(struct ql_adapter *qdev,
2270 struct tx_ring *tx_ring)
2271{
2272 if (tx_ring->wq_base) {
2273 pci_free_consistent(qdev->pdev, tx_ring->wq_size,
2274 tx_ring->wq_base, tx_ring->wq_base_dma);
2275 tx_ring->wq_base = NULL;
2276 }
2277 kfree(tx_ring->q);
2278 tx_ring->q = NULL;
2279}
2280
2281static int ql_alloc_tx_resources(struct ql_adapter *qdev,
2282 struct tx_ring *tx_ring)
2283{
2284 tx_ring->wq_base =
2285 pci_alloc_consistent(qdev->pdev, tx_ring->wq_size,
2286 &tx_ring->wq_base_dma);
2287
2288 if ((tx_ring->wq_base == NULL)
2289 || tx_ring->wq_base_dma & WQ_ADDR_ALIGN) {
2290 QPRINTK(qdev, IFUP, ERR, "tx_ring alloc failed.\n");
2291 return -ENOMEM;
2292 }
2293 tx_ring->q =
2294 kmalloc(tx_ring->wq_len * sizeof(struct tx_ring_desc), GFP_KERNEL);
2295 if (tx_ring->q == NULL)
2296 goto err;
2297
2298 return 0;
2299err:
2300 pci_free_consistent(qdev->pdev, tx_ring->wq_size,
2301 tx_ring->wq_base, tx_ring->wq_base_dma);
2302 return -ENOMEM;
2303}
2304
2305static void ql_free_lbq_buffers(struct ql_adapter *qdev, struct rx_ring *rx_ring)
2306{
2307 int i;
2308 struct bq_desc *lbq_desc;
2309
2310 for (i = 0; i < rx_ring->lbq_len; i++) {
2311 lbq_desc = &rx_ring->lbq[i];
2312 if (lbq_desc->p.lbq_page) {
2313 pci_unmap_page(qdev->pdev,
2314 pci_unmap_addr(lbq_desc, mapaddr),
2315 pci_unmap_len(lbq_desc, maplen),
2316 PCI_DMA_FROMDEVICE);
2317
2318 put_page(lbq_desc->p.lbq_page);
2319 lbq_desc->p.lbq_page = NULL;
2320 }
2321 }
2322}
2323
2324static void ql_free_sbq_buffers(struct ql_adapter *qdev, struct rx_ring *rx_ring)
2325{
2326 int i;
2327 struct bq_desc *sbq_desc;
2328
2329 for (i = 0; i < rx_ring->sbq_len; i++) {
2330 sbq_desc = &rx_ring->sbq[i];
2331 if (sbq_desc == NULL) {
2332 QPRINTK(qdev, IFUP, ERR, "sbq_desc %d is NULL.\n", i);
2333 return;
2334 }
2335 if (sbq_desc->p.skb) {
2336 pci_unmap_single(qdev->pdev,
2337 pci_unmap_addr(sbq_desc, mapaddr),
2338 pci_unmap_len(sbq_desc, maplen),
2339 PCI_DMA_FROMDEVICE);
2340 dev_kfree_skb(sbq_desc->p.skb);
2341 sbq_desc->p.skb = NULL;
2342 }
2343 }
2344}
2345
2346
2347
2348
2349static void ql_free_rx_buffers(struct ql_adapter *qdev)
2350{
2351 int i;
2352 struct rx_ring *rx_ring;
2353
2354 for (i = 0; i < qdev->rx_ring_count; i++) {
2355 rx_ring = &qdev->rx_ring[i];
2356 if (rx_ring->lbq)
2357 ql_free_lbq_buffers(qdev, rx_ring);
2358 if (rx_ring->sbq)
2359 ql_free_sbq_buffers(qdev, rx_ring);
2360 }
2361}
2362
2363static void ql_alloc_rx_buffers(struct ql_adapter *qdev)
2364{
2365 struct rx_ring *rx_ring;
2366 int i;
2367
2368 for (i = 0; i < qdev->rx_ring_count; i++) {
2369 rx_ring = &qdev->rx_ring[i];
2370 if (rx_ring->type != TX_Q)
2371 ql_update_buffer_queues(qdev, rx_ring);
2372 }
2373}
2374
2375static void ql_init_lbq_ring(struct ql_adapter *qdev,
2376 struct rx_ring *rx_ring)
2377{
2378 int i;
2379 struct bq_desc *lbq_desc;
2380 __le64 *bq = rx_ring->lbq_base;
2381
2382 memset(rx_ring->lbq, 0, rx_ring->lbq_len * sizeof(struct bq_desc));
2383 for (i = 0; i < rx_ring->lbq_len; i++) {
2384 lbq_desc = &rx_ring->lbq[i];
2385 memset(lbq_desc, 0, sizeof(*lbq_desc));
2386 lbq_desc->index = i;
2387 lbq_desc->addr = bq;
2388 bq++;
2389 }
2390}
2391
2392static void ql_init_sbq_ring(struct ql_adapter *qdev,
2393 struct rx_ring *rx_ring)
2394{
2395 int i;
2396 struct bq_desc *sbq_desc;
2397 __le64 *bq = rx_ring->sbq_base;
2398
2399 memset(rx_ring->sbq, 0, rx_ring->sbq_len * sizeof(struct bq_desc));
2400 for (i = 0; i < rx_ring->sbq_len; i++) {
2401 sbq_desc = &rx_ring->sbq[i];
2402 memset(sbq_desc, 0, sizeof(*sbq_desc));
2403 sbq_desc->index = i;
2404 sbq_desc->addr = bq;
2405 bq++;
2406 }
2407}
2408
2409static void ql_free_rx_resources(struct ql_adapter *qdev,
2410 struct rx_ring *rx_ring)
2411{
2412
2413 if (rx_ring->sbq_base) {
2414 pci_free_consistent(qdev->pdev,
2415 rx_ring->sbq_size,
2416 rx_ring->sbq_base, rx_ring->sbq_base_dma);
2417 rx_ring->sbq_base = NULL;
2418 }
2419
2420
2421 kfree(rx_ring->sbq);
2422 rx_ring->sbq = NULL;
2423
2424
2425 if (rx_ring->lbq_base) {
2426 pci_free_consistent(qdev->pdev,
2427 rx_ring->lbq_size,
2428 rx_ring->lbq_base, rx_ring->lbq_base_dma);
2429 rx_ring->lbq_base = NULL;
2430 }
2431
2432
2433 kfree(rx_ring->lbq);
2434 rx_ring->lbq = NULL;
2435
2436
2437 if (rx_ring->cq_base) {
2438 pci_free_consistent(qdev->pdev,
2439 rx_ring->cq_size,
2440 rx_ring->cq_base, rx_ring->cq_base_dma);
2441 rx_ring->cq_base = NULL;
2442 }
2443}
2444
2445
2446
2447static int ql_alloc_rx_resources(struct ql_adapter *qdev,
2448 struct rx_ring *rx_ring)
2449{
2450
2451
2452
2453
2454 rx_ring->cq_base =
2455 pci_alloc_consistent(qdev->pdev, rx_ring->cq_size,
2456 &rx_ring->cq_base_dma);
2457
2458 if (rx_ring->cq_base == NULL) {
2459 QPRINTK(qdev, IFUP, ERR, "rx_ring alloc failed.\n");
2460 return -ENOMEM;
2461 }
2462
2463 if (rx_ring->sbq_len) {
2464
2465
2466
2467 rx_ring->sbq_base =
2468 pci_alloc_consistent(qdev->pdev, rx_ring->sbq_size,
2469 &rx_ring->sbq_base_dma);
2470
2471 if (rx_ring->sbq_base == NULL) {
2472 QPRINTK(qdev, IFUP, ERR,
2473 "Small buffer queue allocation failed.\n");
2474 goto err_mem;
2475 }
2476
2477
2478
2479
2480 rx_ring->sbq =
2481 kmalloc(rx_ring->sbq_len * sizeof(struct bq_desc),
2482 GFP_KERNEL);
2483 if (rx_ring->sbq == NULL) {
2484 QPRINTK(qdev, IFUP, ERR,
2485 "Small buffer queue control block allocation failed.\n");
2486 goto err_mem;
2487 }
2488
2489 ql_init_sbq_ring(qdev, rx_ring);
2490 }
2491
2492 if (rx_ring->lbq_len) {
2493
2494
2495
2496 rx_ring->lbq_base =
2497 pci_alloc_consistent(qdev->pdev, rx_ring->lbq_size,
2498 &rx_ring->lbq_base_dma);
2499
2500 if (rx_ring->lbq_base == NULL) {
2501 QPRINTK(qdev, IFUP, ERR,
2502 "Large buffer queue allocation failed.\n");
2503 goto err_mem;
2504 }
2505
2506
2507
2508 rx_ring->lbq =
2509 kmalloc(rx_ring->lbq_len * sizeof(struct bq_desc),
2510 GFP_KERNEL);
2511 if (rx_ring->lbq == NULL) {
2512 QPRINTK(qdev, IFUP, ERR,
2513 "Large buffer queue control block allocation failed.\n");
2514 goto err_mem;
2515 }
2516
2517 ql_init_lbq_ring(qdev, rx_ring);
2518 }
2519
2520 return 0;
2521
2522err_mem:
2523 ql_free_rx_resources(qdev, rx_ring);
2524 return -ENOMEM;
2525}
2526
2527static void ql_tx_ring_clean(struct ql_adapter *qdev)
2528{
2529 struct tx_ring *tx_ring;
2530 struct tx_ring_desc *tx_ring_desc;
2531 int i, j;
2532
2533
2534
2535
2536
2537 for (j = 0; j < qdev->tx_ring_count; j++) {
2538 tx_ring = &qdev->tx_ring[j];
2539 for (i = 0; i < tx_ring->wq_len; i++) {
2540 tx_ring_desc = &tx_ring->q[i];
2541 if (tx_ring_desc && tx_ring_desc->skb) {
2542 QPRINTK(qdev, IFDOWN, ERR,
2543 "Freeing lost SKB %p, from queue %d, index %d.\n",
2544 tx_ring_desc->skb, j,
2545 tx_ring_desc->index);
2546 ql_unmap_send(qdev, tx_ring_desc,
2547 tx_ring_desc->map_cnt);
2548 dev_kfree_skb(tx_ring_desc->skb);
2549 tx_ring_desc->skb = NULL;
2550 }
2551 }
2552 }
2553}
2554
2555static void ql_free_mem_resources(struct ql_adapter *qdev)
2556{
2557 int i;
2558
2559 for (i = 0; i < qdev->tx_ring_count; i++)
2560 ql_free_tx_resources(qdev, &qdev->tx_ring[i]);
2561 for (i = 0; i < qdev->rx_ring_count; i++)
2562 ql_free_rx_resources(qdev, &qdev->rx_ring[i]);
2563 ql_free_shadow_space(qdev);
2564}
2565
2566static int ql_alloc_mem_resources(struct ql_adapter *qdev)
2567{
2568 int i;
2569
2570
2571 if (ql_alloc_shadow_space(qdev))
2572 return -ENOMEM;
2573
2574 for (i = 0; i < qdev->rx_ring_count; i++) {
2575 if (ql_alloc_rx_resources(qdev, &qdev->rx_ring[i]) != 0) {
2576 QPRINTK(qdev, IFUP, ERR,
2577 "RX resource allocation failed.\n");
2578 goto err_mem;
2579 }
2580 }
2581
2582 for (i = 0; i < qdev->tx_ring_count; i++) {
2583 if (ql_alloc_tx_resources(qdev, &qdev->tx_ring[i]) != 0) {
2584 QPRINTK(qdev, IFUP, ERR,
2585 "TX resource allocation failed.\n");
2586 goto err_mem;
2587 }
2588 }
2589 return 0;
2590
2591err_mem:
2592 ql_free_mem_resources(qdev);
2593 return -ENOMEM;
2594}
2595
2596
2597
2598
2599
2600static int ql_start_rx_ring(struct ql_adapter *qdev, struct rx_ring *rx_ring)
2601{
2602 struct cqicb *cqicb = &rx_ring->cqicb;
2603 void *shadow_reg = qdev->rx_ring_shadow_reg_area +
2604 (rx_ring->cq_id * RX_RING_SHADOW_SPACE);
2605 u64 shadow_reg_dma = qdev->rx_ring_shadow_reg_dma +
2606 (rx_ring->cq_id * RX_RING_SHADOW_SPACE);
2607 void __iomem *doorbell_area =
2608 qdev->doorbell_area + (DB_PAGE_SIZE * (128 + rx_ring->cq_id));
2609 int err = 0;
2610 u16 bq_len;
2611 u64 tmp;
2612 __le64 *base_indirect_ptr;
2613 int page_entries;
2614
2615
2616 rx_ring->prod_idx_sh_reg = shadow_reg;
2617 rx_ring->prod_idx_sh_reg_dma = shadow_reg_dma;
2618 shadow_reg += sizeof(u64);
2619 shadow_reg_dma += sizeof(u64);
2620 rx_ring->lbq_base_indirect = shadow_reg;
2621 rx_ring->lbq_base_indirect_dma = shadow_reg_dma;
2622 shadow_reg += (sizeof(u64) * MAX_DB_PAGES_PER_BQ(rx_ring->lbq_len));
2623 shadow_reg_dma += (sizeof(u64) * MAX_DB_PAGES_PER_BQ(rx_ring->lbq_len));
2624 rx_ring->sbq_base_indirect = shadow_reg;
2625 rx_ring->sbq_base_indirect_dma = shadow_reg_dma;
2626
2627
2628 rx_ring->cnsmr_idx_db_reg = (u32 __iomem *) doorbell_area;
2629 rx_ring->cnsmr_idx = 0;
2630 rx_ring->curr_entry = rx_ring->cq_base;
2631
2632
2633 rx_ring->valid_db_reg = doorbell_area + 0x04;
2634
2635
2636 rx_ring->lbq_prod_idx_db_reg = (u32 __iomem *) (doorbell_area + 0x18);
2637
2638
2639 rx_ring->sbq_prod_idx_db_reg = (u32 __iomem *) (doorbell_area + 0x1c);
2640
2641 memset((void *)cqicb, 0, sizeof(struct cqicb));
2642 cqicb->msix_vect = rx_ring->irq;
2643
2644 bq_len = (rx_ring->cq_len == 65536) ? 0 : (u16) rx_ring->cq_len;
2645 cqicb->len = cpu_to_le16(bq_len | LEN_V | LEN_CPP_CONT);
2646
2647 cqicb->addr = cpu_to_le64(rx_ring->cq_base_dma);
2648
2649 cqicb->prod_idx_addr = cpu_to_le64(rx_ring->prod_idx_sh_reg_dma);
2650
2651
2652
2653
2654 cqicb->flags = FLAGS_LC |
2655 FLAGS_LV |
2656 FLAGS_LI;
2657 if (rx_ring->lbq_len) {
2658 cqicb->flags |= FLAGS_LL;
2659 tmp = (u64)rx_ring->lbq_base_dma;
2660 base_indirect_ptr = (__le64 *) rx_ring->lbq_base_indirect;
2661 page_entries = 0;
2662 do {
2663 *base_indirect_ptr = cpu_to_le64(tmp);
2664 tmp += DB_PAGE_SIZE;
2665 base_indirect_ptr++;
2666 page_entries++;
2667 } while (page_entries < MAX_DB_PAGES_PER_BQ(rx_ring->lbq_len));
2668 cqicb->lbq_addr =
2669 cpu_to_le64(rx_ring->lbq_base_indirect_dma);
2670 bq_len = (rx_ring->lbq_buf_size == 65536) ? 0 :
2671 (u16) rx_ring->lbq_buf_size;
2672 cqicb->lbq_buf_size = cpu_to_le16(bq_len);
2673 bq_len = (rx_ring->lbq_len == 65536) ? 0 :
2674 (u16) rx_ring->lbq_len;
2675 cqicb->lbq_len = cpu_to_le16(bq_len);
2676 rx_ring->lbq_prod_idx = 0;
2677 rx_ring->lbq_curr_idx = 0;
2678 rx_ring->lbq_clean_idx = 0;
2679 rx_ring->lbq_free_cnt = rx_ring->lbq_len;
2680 }
2681 if (rx_ring->sbq_len) {
2682 cqicb->flags |= FLAGS_LS;
2683 tmp = (u64)rx_ring->sbq_base_dma;
2684 base_indirect_ptr = (__le64 *) rx_ring->sbq_base_indirect;
2685 page_entries = 0;
2686 do {
2687 *base_indirect_ptr = cpu_to_le64(tmp);
2688 tmp += DB_PAGE_SIZE;
2689 base_indirect_ptr++;
2690 page_entries++;
2691 } while (page_entries < MAX_DB_PAGES_PER_BQ(rx_ring->sbq_len));
2692 cqicb->sbq_addr =
2693 cpu_to_le64(rx_ring->sbq_base_indirect_dma);
2694 cqicb->sbq_buf_size =
2695 cpu_to_le16((u16)(rx_ring->sbq_buf_size/2));
2696 bq_len = (rx_ring->sbq_len == 65536) ? 0 :
2697 (u16) rx_ring->sbq_len;
2698 cqicb->sbq_len = cpu_to_le16(bq_len);
2699 rx_ring->sbq_prod_idx = 0;
2700 rx_ring->sbq_curr_idx = 0;
2701 rx_ring->sbq_clean_idx = 0;
2702 rx_ring->sbq_free_cnt = rx_ring->sbq_len;
2703 }
2704 switch (rx_ring->type) {
2705 case TX_Q:
2706 cqicb->irq_delay = cpu_to_le16(qdev->tx_coalesce_usecs);
2707 cqicb->pkt_delay = cpu_to_le16(qdev->tx_max_coalesced_frames);
2708 break;
2709 case RX_Q:
2710
2711
2712
2713 netif_napi_add(qdev->ndev, &rx_ring->napi, ql_napi_poll_msix,
2714 64);
2715 cqicb->irq_delay = cpu_to_le16(qdev->rx_coalesce_usecs);
2716 cqicb->pkt_delay = cpu_to_le16(qdev->rx_max_coalesced_frames);
2717 break;
2718 default:
2719 QPRINTK(qdev, IFUP, DEBUG, "Invalid rx_ring->type = %d.\n",
2720 rx_ring->type);
2721 }
2722 QPRINTK(qdev, IFUP, DEBUG, "Initializing rx work queue.\n");
2723 err = ql_write_cfg(qdev, cqicb, sizeof(struct cqicb),
2724 CFG_LCQ, rx_ring->cq_id);
2725 if (err) {
2726 QPRINTK(qdev, IFUP, ERR, "Failed to load CQICB.\n");
2727 return err;
2728 }
2729 return err;
2730}
2731
2732static int ql_start_tx_ring(struct ql_adapter *qdev, struct tx_ring *tx_ring)
2733{
2734 struct wqicb *wqicb = (struct wqicb *)tx_ring;
2735 void __iomem *doorbell_area =
2736 qdev->doorbell_area + (DB_PAGE_SIZE * tx_ring->wq_id);
2737 void *shadow_reg = qdev->tx_ring_shadow_reg_area +
2738 (tx_ring->wq_id * sizeof(u64));
2739 u64 shadow_reg_dma = qdev->tx_ring_shadow_reg_dma +
2740 (tx_ring->wq_id * sizeof(u64));
2741 int err = 0;
2742
2743
2744
2745
2746
2747 tx_ring->prod_idx_db_reg = (u32 __iomem *) doorbell_area;
2748 tx_ring->prod_idx = 0;
2749
2750 tx_ring->valid_db_reg = doorbell_area + 0x04;
2751
2752
2753
2754
2755 tx_ring->cnsmr_idx_sh_reg = shadow_reg;
2756 tx_ring->cnsmr_idx_sh_reg_dma = shadow_reg_dma;
2757
2758 wqicb->len = cpu_to_le16(tx_ring->wq_len | Q_LEN_V | Q_LEN_CPP_CONT);
2759 wqicb->flags = cpu_to_le16(Q_FLAGS_LC |
2760 Q_FLAGS_LB | Q_FLAGS_LI | Q_FLAGS_LO);
2761 wqicb->cq_id_rss = cpu_to_le16(tx_ring->cq_id);
2762 wqicb->rid = 0;
2763 wqicb->addr = cpu_to_le64(tx_ring->wq_base_dma);
2764
2765 wqicb->cnsmr_idx_addr = cpu_to_le64(tx_ring->cnsmr_idx_sh_reg_dma);
2766
2767 ql_init_tx_ring(qdev, tx_ring);
2768
2769 err = ql_write_cfg(qdev, wqicb, sizeof(*wqicb), CFG_LRQ,
2770 (u16) tx_ring->wq_id);
2771 if (err) {
2772 QPRINTK(qdev, IFUP, ERR, "Failed to load tx_ring.\n");
2773 return err;
2774 }
2775 QPRINTK(qdev, IFUP, DEBUG, "Successfully loaded WQICB.\n");
2776 return err;
2777}
2778
2779static void ql_disable_msix(struct ql_adapter *qdev)
2780{
2781 if (test_bit(QL_MSIX_ENABLED, &qdev->flags)) {
2782 pci_disable_msix(qdev->pdev);
2783 clear_bit(QL_MSIX_ENABLED, &qdev->flags);
2784 kfree(qdev->msi_x_entry);
2785 qdev->msi_x_entry = NULL;
2786 } else if (test_bit(QL_MSI_ENABLED, &qdev->flags)) {
2787 pci_disable_msi(qdev->pdev);
2788 clear_bit(QL_MSI_ENABLED, &qdev->flags);
2789 }
2790}
2791
2792
2793
2794
2795
2796static void ql_enable_msix(struct ql_adapter *qdev)
2797{
2798 int i, err;
2799
2800
2801 if (irq_type == MSIX_IRQ) {
2802
2803
2804
2805 qdev->msi_x_entry = kcalloc(qdev->intr_count,
2806 sizeof(struct msix_entry),
2807 GFP_KERNEL);
2808 if (!qdev->msi_x_entry) {
2809 irq_type = MSI_IRQ;
2810 goto msi;
2811 }
2812
2813 for (i = 0; i < qdev->intr_count; i++)
2814 qdev->msi_x_entry[i].entry = i;
2815
2816
2817
2818
2819 do {
2820 err = pci_enable_msix(qdev->pdev,
2821 qdev->msi_x_entry, qdev->intr_count);
2822 if (err > 0)
2823 qdev->intr_count = err;
2824 } while (err > 0);
2825
2826 if (err < 0) {
2827 kfree(qdev->msi_x_entry);
2828 qdev->msi_x_entry = NULL;
2829 QPRINTK(qdev, IFUP, WARNING,
2830 "MSI-X Enable failed, trying MSI.\n");
2831 qdev->intr_count = 1;
2832 irq_type = MSI_IRQ;
2833 } else if (err == 0) {
2834 set_bit(QL_MSIX_ENABLED, &qdev->flags);
2835 QPRINTK(qdev, IFUP, INFO,
2836 "MSI-X Enabled, got %d vectors.\n",
2837 qdev->intr_count);
2838 return;
2839 }
2840 }
2841msi:
2842 qdev->intr_count = 1;
2843 if (irq_type == MSI_IRQ) {
2844 if (!pci_enable_msi(qdev->pdev)) {
2845 set_bit(QL_MSI_ENABLED, &qdev->flags);
2846 QPRINTK(qdev, IFUP, INFO,
2847 "Running with MSI interrupts.\n");
2848 return;
2849 }
2850 }
2851 irq_type = LEG_IRQ;
2852 QPRINTK(qdev, IFUP, DEBUG, "Running with legacy interrupts.\n");
2853}
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864static void ql_set_tx_vect(struct ql_adapter *qdev)
2865{
2866 int i, j, vect;
2867 u32 tx_rings_per_vector = qdev->tx_ring_count / qdev->intr_count;
2868
2869 if (likely(test_bit(QL_MSIX_ENABLED, &qdev->flags))) {
2870
2871 for (vect = 0, j = 0, i = qdev->rss_ring_count;
2872 i < qdev->rx_ring_count; i++) {
2873 if (j == tx_rings_per_vector) {
2874 vect++;
2875 j = 0;
2876 }
2877 qdev->rx_ring[i].irq = vect;
2878 j++;
2879 }
2880 } else {
2881
2882
2883
2884 for (i = 0; i < qdev->rx_ring_count; i++)
2885 qdev->rx_ring[i].irq = 0;
2886 }
2887}
2888
2889
2890
2891
2892
2893
2894static void ql_set_irq_mask(struct ql_adapter *qdev, struct intr_context *ctx)
2895{
2896 int j, vect = ctx->intr;
2897 u32 tx_rings_per_vector = qdev->tx_ring_count / qdev->intr_count;
2898
2899 if (likely(test_bit(QL_MSIX_ENABLED, &qdev->flags))) {
2900
2901
2902
2903 ctx->irq_mask = (1 << qdev->rx_ring[vect].cq_id);
2904
2905
2906 for (j = 0; j < tx_rings_per_vector; j++) {
2907 ctx->irq_mask |=
2908 (1 << qdev->rx_ring[qdev->rss_ring_count +
2909 (vect * tx_rings_per_vector) + j].cq_id);
2910 }
2911 } else {
2912
2913
2914
2915 for (j = 0; j < qdev->rx_ring_count; j++)
2916 ctx->irq_mask |= (1 << qdev->rx_ring[j].cq_id);
2917 }
2918}
2919
2920
2921
2922
2923
2924
2925
2926static void ql_resolve_queues_to_irqs(struct ql_adapter *qdev)
2927{
2928 int i = 0;
2929 struct intr_context *intr_context = &qdev->intr_context[0];
2930
2931 if (likely(test_bit(QL_MSIX_ENABLED, &qdev->flags))) {
2932
2933
2934
2935
2936 for (i = 0; i < qdev->intr_count; i++, intr_context++) {
2937 qdev->rx_ring[i].irq = i;
2938 intr_context->intr = i;
2939 intr_context->qdev = qdev;
2940
2941
2942
2943 ql_set_irq_mask(qdev, intr_context);
2944
2945
2946
2947
2948 intr_context->intr_en_mask =
2949 INTR_EN_TYPE_MASK | INTR_EN_INTR_MASK |
2950 INTR_EN_TYPE_ENABLE | INTR_EN_IHD_MASK | INTR_EN_IHD
2951 | i;
2952 intr_context->intr_dis_mask =
2953 INTR_EN_TYPE_MASK | INTR_EN_INTR_MASK |
2954 INTR_EN_TYPE_DISABLE | INTR_EN_IHD_MASK |
2955 INTR_EN_IHD | i;
2956 intr_context->intr_read_mask =
2957 INTR_EN_TYPE_MASK | INTR_EN_INTR_MASK |
2958 INTR_EN_TYPE_READ | INTR_EN_IHD_MASK | INTR_EN_IHD |
2959 i;
2960 if (i == 0) {
2961
2962
2963
2964
2965
2966 intr_context->handler = qlge_isr;
2967 sprintf(intr_context->name, "%s-rx-%d",
2968 qdev->ndev->name, i);
2969 } else {
2970
2971
2972
2973 intr_context->handler = qlge_msix_rx_isr;
2974 sprintf(intr_context->name, "%s-rx-%d",
2975 qdev->ndev->name, i);
2976 }
2977 }
2978 } else {
2979
2980
2981
2982
2983 intr_context->intr = 0;
2984 intr_context->qdev = qdev;
2985
2986
2987
2988
2989 intr_context->intr_en_mask =
2990 INTR_EN_TYPE_MASK | INTR_EN_INTR_MASK | INTR_EN_TYPE_ENABLE;
2991 intr_context->intr_dis_mask =
2992 INTR_EN_TYPE_MASK | INTR_EN_INTR_MASK |
2993 INTR_EN_TYPE_DISABLE;
2994 intr_context->intr_read_mask =
2995 INTR_EN_TYPE_MASK | INTR_EN_INTR_MASK | INTR_EN_TYPE_READ;
2996
2997
2998
2999 intr_context->handler = qlge_isr;
3000 sprintf(intr_context->name, "%s-single_irq", qdev->ndev->name);
3001
3002
3003
3004
3005
3006 ql_set_irq_mask(qdev, intr_context);
3007 }
3008
3009
3010
3011 ql_set_tx_vect(qdev);
3012}
3013
3014static void ql_free_irq(struct ql_adapter *qdev)
3015{
3016 int i;
3017 struct intr_context *intr_context = &qdev->intr_context[0];
3018
3019 for (i = 0; i < qdev->intr_count; i++, intr_context++) {
3020 if (intr_context->hooked) {
3021 if (test_bit(QL_MSIX_ENABLED, &qdev->flags)) {
3022 free_irq(qdev->msi_x_entry[i].vector,
3023 &qdev->rx_ring[i]);
3024 QPRINTK(qdev, IFDOWN, DEBUG,
3025 "freeing msix interrupt %d.\n", i);
3026 } else {
3027 free_irq(qdev->pdev->irq, &qdev->rx_ring[0]);
3028 QPRINTK(qdev, IFDOWN, DEBUG,
3029 "freeing msi interrupt %d.\n", i);
3030 }
3031 }
3032 }
3033 ql_disable_msix(qdev);
3034}
3035
3036static int ql_request_irq(struct ql_adapter *qdev)
3037{
3038 int i;
3039 int status = 0;
3040 struct pci_dev *pdev = qdev->pdev;
3041 struct intr_context *intr_context = &qdev->intr_context[0];
3042
3043 ql_resolve_queues_to_irqs(qdev);
3044
3045 for (i = 0; i < qdev->intr_count; i++, intr_context++) {
3046 atomic_set(&intr_context->irq_cnt, 0);
3047 if (test_bit(QL_MSIX_ENABLED, &qdev->flags)) {
3048 status = request_irq(qdev->msi_x_entry[i].vector,
3049 intr_context->handler,
3050 0,
3051 intr_context->name,
3052 &qdev->rx_ring[i]);
3053 if (status) {
3054 QPRINTK(qdev, IFUP, ERR,
3055 "Failed request for MSIX interrupt %d.\n",
3056 i);
3057 goto err_irq;
3058 } else {
3059 QPRINTK(qdev, IFUP, DEBUG,
3060 "Hooked intr %d, queue type %s%s%s, with name %s.\n",
3061 i,
3062 qdev->rx_ring[i].type ==
3063 DEFAULT_Q ? "DEFAULT_Q" : "",
3064 qdev->rx_ring[i].type ==
3065 TX_Q ? "TX_Q" : "",
3066 qdev->rx_ring[i].type ==
3067 RX_Q ? "RX_Q" : "", intr_context->name);
3068 }
3069 } else {
3070 QPRINTK(qdev, IFUP, DEBUG,
3071 "trying msi or legacy interrupts.\n");
3072 QPRINTK(qdev, IFUP, DEBUG,
3073 "%s: irq = %d.\n", __func__, pdev->irq);
3074 QPRINTK(qdev, IFUP, DEBUG,
3075 "%s: context->name = %s.\n", __func__,
3076 intr_context->name);
3077 QPRINTK(qdev, IFUP, DEBUG,
3078 "%s: dev_id = 0x%p.\n", __func__,
3079 &qdev->rx_ring[0]);
3080 status =
3081 request_irq(pdev->irq, qlge_isr,
3082 test_bit(QL_MSI_ENABLED,
3083 &qdev->
3084 flags) ? 0 : IRQF_SHARED,
3085 intr_context->name, &qdev->rx_ring[0]);
3086 if (status)
3087 goto err_irq;
3088
3089 QPRINTK(qdev, IFUP, ERR,
3090 "Hooked intr %d, queue type %s%s%s, with name %s.\n",
3091 i,
3092 qdev->rx_ring[0].type ==
3093 DEFAULT_Q ? "DEFAULT_Q" : "",
3094 qdev->rx_ring[0].type == TX_Q ? "TX_Q" : "",
3095 qdev->rx_ring[0].type == RX_Q ? "RX_Q" : "",
3096 intr_context->name);
3097 }
3098 intr_context->hooked = 1;
3099 }
3100 return status;
3101err_irq:
3102 QPRINTK(qdev, IFUP, ERR, "Failed to get the interrupts!!!/n");
3103 ql_free_irq(qdev);
3104 return status;
3105}
3106
3107static int ql_start_rss(struct ql_adapter *qdev)
3108{
3109 u8 init_hash_seed[] = {0x6d, 0x5a, 0x56, 0xda, 0x25, 0x5b, 0x0e, 0xc2,
3110 0x41, 0x67, 0x25, 0x3d, 0x43, 0xa3, 0x8f,
3111 0xb0, 0xd0, 0xca, 0x2b, 0xcb, 0xae, 0x7b,
3112 0x30, 0xb4, 0x77, 0xcb, 0x2d, 0xa3, 0x80,
3113 0x30, 0xf2, 0x0c, 0x6a, 0x42, 0xb7, 0x3b,
3114 0xbe, 0xac, 0x01, 0xfa};
3115 struct ricb *ricb = &qdev->ricb;
3116 int status = 0;
3117 int i;
3118 u8 *hash_id = (u8 *) ricb->hash_cq_id;
3119
3120 memset((void *)ricb, 0, sizeof(*ricb));
3121
3122 ricb->base_cq = RSS_L4K;
3123 ricb->flags =
3124 (RSS_L6K | RSS_LI | RSS_LB | RSS_LM | RSS_RT4 | RSS_RT6);
3125 ricb->mask = cpu_to_le16((u16)(0x3ff));
3126
3127
3128
3129
3130 for (i = 0; i < 1024; i++)
3131 hash_id[i] = (i & (qdev->rss_ring_count - 1));
3132
3133 memcpy((void *)&ricb->ipv6_hash_key[0], init_hash_seed, 40);
3134 memcpy((void *)&ricb->ipv4_hash_key[0], init_hash_seed, 16);
3135
3136 QPRINTK(qdev, IFUP, DEBUG, "Initializing RSS.\n");
3137
3138 status = ql_write_cfg(qdev, ricb, sizeof(*ricb), CFG_LR, 0);
3139 if (status) {
3140 QPRINTK(qdev, IFUP, ERR, "Failed to load RICB.\n");
3141 return status;
3142 }
3143 QPRINTK(qdev, IFUP, DEBUG, "Successfully loaded RICB.\n");
3144 return status;
3145}
3146
3147static int ql_clear_routing_entries(struct ql_adapter *qdev)
3148{
3149 int i, status = 0;
3150
3151 status = ql_sem_spinlock(qdev, SEM_RT_IDX_MASK);
3152 if (status)
3153 return status;
3154
3155 for (i = 0; i < 16; i++) {
3156 status = ql_set_routing_reg(qdev, i, 0, 0);
3157 if (status) {
3158 QPRINTK(qdev, IFUP, ERR,
3159 "Failed to init routing register for CAM "
3160 "packets.\n");
3161 break;
3162 }
3163 }
3164 ql_sem_unlock(qdev, SEM_RT_IDX_MASK);
3165 return status;
3166}
3167
3168
3169static int ql_route_initialize(struct ql_adapter *qdev)
3170{
3171 int status = 0;
3172
3173
3174 status = ql_clear_routing_entries(qdev);
3175 if (status)
3176 return status;
3177
3178 status = ql_sem_spinlock(qdev, SEM_RT_IDX_MASK);
3179 if (status)
3180 return status;
3181
3182 status = ql_set_routing_reg(qdev, RT_IDX_ALL_ERR_SLOT, RT_IDX_ERR, 1);
3183 if (status) {
3184 QPRINTK(qdev, IFUP, ERR,
3185 "Failed to init routing register for error packets.\n");
3186 goto exit;
3187 }
3188 status = ql_set_routing_reg(qdev, RT_IDX_BCAST_SLOT, RT_IDX_BCAST, 1);
3189 if (status) {
3190 QPRINTK(qdev, IFUP, ERR,
3191 "Failed to init routing register for broadcast packets.\n");
3192 goto exit;
3193 }
3194
3195
3196
3197 if (qdev->rss_ring_count > 1) {
3198 status = ql_set_routing_reg(qdev, RT_IDX_RSS_MATCH_SLOT,
3199 RT_IDX_RSS_MATCH, 1);
3200 if (status) {
3201 QPRINTK(qdev, IFUP, ERR,
3202 "Failed to init routing register for MATCH RSS packets.\n");
3203 goto exit;
3204 }
3205 }
3206
3207 status = ql_set_routing_reg(qdev, RT_IDX_CAM_HIT_SLOT,
3208 RT_IDX_CAM_HIT, 1);
3209 if (status)
3210 QPRINTK(qdev, IFUP, ERR,
3211 "Failed to init routing register for CAM packets.\n");
3212exit:
3213 ql_sem_unlock(qdev, SEM_RT_IDX_MASK);
3214 return status;
3215}
3216
3217int ql_cam_route_initialize(struct ql_adapter *qdev)
3218{
3219 int status, set;
3220
3221
3222
3223
3224
3225 set = ql_read32(qdev, STS);
3226 set &= qdev->port_link_up;
3227 status = ql_set_mac_addr(qdev, set);
3228 if (status) {
3229 QPRINTK(qdev, IFUP, ERR, "Failed to init mac address.\n");
3230 return status;
3231 }
3232
3233 status = ql_route_initialize(qdev);
3234 if (status)
3235 QPRINTK(qdev, IFUP, ERR, "Failed to init routing table.\n");
3236
3237 return status;
3238}
3239
3240static int ql_adapter_initialize(struct ql_adapter *qdev)
3241{
3242 u32 value, mask;
3243 int i;
3244 int status = 0;
3245
3246
3247
3248
3249 value = SYS_EFE | SYS_FAE;
3250 mask = value << 16;
3251 ql_write32(qdev, SYS, mask | value);
3252
3253
3254 value = NIC_RCV_CFG_DFQ | NIC_RCV_CFG_RV;
3255 mask = NIC_RCV_CFG_DFQ_MASK | (NIC_RCV_CFG_RV << 16);
3256 ql_write32(qdev, NIC_RCV_CFG, (mask | value));
3257
3258
3259 ql_write32(qdev, INTR_MASK, (INTR_MASK_PI << 16) | INTR_MASK_PI);
3260
3261
3262 value = FSC_FE | FSC_EPC_INBOUND | FSC_EPC_OUTBOUND |
3263 FSC_EC | FSC_VM_PAGE_4K | FSC_SH;
3264
3265
3266 mask = FSC_VM_PAGESIZE_MASK |
3267 FSC_DBL_MASK | FSC_DBRST_MASK | (value << 16);
3268 ql_write32(qdev, FSC, mask | value);
3269
3270 ql_write32(qdev, SPLT_HDR, SPLT_HDR_EP |
3271 min(SMALL_BUFFER_SIZE, MAX_SPLIT_SIZE));
3272
3273
3274
3275
3276
3277
3278 ql_write32(qdev, RST_FO, RST_FO_RR_MASK | RST_FO_RR_RCV_FUNC_CQ);
3279
3280
3281 for (i = 0; i < qdev->rx_ring_count; i++) {
3282 status = ql_start_rx_ring(qdev, &qdev->rx_ring[i]);
3283 if (status) {
3284 QPRINTK(qdev, IFUP, ERR,
3285 "Failed to start rx ring[%d].\n", i);
3286 return status;
3287 }
3288 }
3289
3290
3291
3292
3293 if (qdev->rss_ring_count > 1) {
3294 status = ql_start_rss(qdev);
3295 if (status) {
3296 QPRINTK(qdev, IFUP, ERR, "Failed to start RSS.\n");
3297 return status;
3298 }
3299 }
3300
3301
3302 for (i = 0; i < qdev->tx_ring_count; i++) {
3303 status = ql_start_tx_ring(qdev, &qdev->tx_ring[i]);
3304 if (status) {
3305 QPRINTK(qdev, IFUP, ERR,
3306 "Failed to start tx ring[%d].\n", i);
3307 return status;
3308 }
3309 }
3310
3311
3312 status = qdev->nic_ops->port_initialize(qdev);
3313 if (status) {
3314 QPRINTK(qdev, IFUP, ERR, "Failed to start port.\n");
3315 return status;
3316 }
3317
3318
3319 status = ql_cam_route_initialize(qdev);
3320 if (status) {
3321 QPRINTK(qdev, IFUP, ERR,
3322 "Failed to init CAM/Routing tables.\n");
3323 return status;
3324 }
3325
3326
3327 for (i = 0; i < qdev->rss_ring_count; i++) {
3328 QPRINTK(qdev, IFUP, DEBUG, "Enabling NAPI for rx_ring[%d].\n",
3329 i);
3330 napi_enable(&qdev->rx_ring[i].napi);
3331 }
3332
3333 return status;
3334}
3335
3336
3337static int ql_adapter_reset(struct ql_adapter *qdev)
3338{
3339 u32 value;
3340 int status = 0;
3341 unsigned long end_jiffies;
3342
3343
3344 status = ql_clear_routing_entries(qdev);
3345 if (status) {
3346 QPRINTK(qdev, IFUP, ERR, "Failed to clear routing bits.\n");
3347 return status;
3348 }
3349
3350 end_jiffies = jiffies +
3351 max((unsigned long)1, usecs_to_jiffies(30));
3352
3353
3354 ql_mb_set_mgmnt_traffic_ctl(qdev, MB_SET_MPI_TFK_STOP);
3355
3356
3357 ql_wait_fifo_empty(qdev);
3358
3359 ql_write32(qdev, RST_FO, (RST_FO_FR << 16) | RST_FO_FR);
3360
3361 do {
3362 value = ql_read32(qdev, RST_FO);
3363 if ((value & RST_FO_FR) == 0)
3364 break;
3365 cpu_relax();
3366 } while (time_before(jiffies, end_jiffies));
3367
3368 if (value & RST_FO_FR) {
3369 QPRINTK(qdev, IFDOWN, ERR,
3370 "ETIMEDOUT!!! errored out of resetting the chip!\n");
3371 status = -ETIMEDOUT;
3372 }
3373
3374
3375 ql_mb_set_mgmnt_traffic_ctl(qdev, MB_SET_MPI_TFK_RESUME);
3376 return status;
3377}
3378
3379static void ql_display_dev_info(struct net_device *ndev)
3380{
3381 struct ql_adapter *qdev = (struct ql_adapter *)netdev_priv(ndev);
3382
3383 QPRINTK(qdev, PROBE, INFO,
3384 "Function #%d, Port %d, NIC Roll %d, NIC Rev = %d, "
3385 "XG Roll = %d, XG Rev = %d.\n",
3386 qdev->func,
3387 qdev->port,
3388 qdev->chip_rev_id & 0x0000000f,
3389 qdev->chip_rev_id >> 4 & 0x0000000f,
3390 qdev->chip_rev_id >> 8 & 0x0000000f,
3391 qdev->chip_rev_id >> 12 & 0x0000000f);
3392 QPRINTK(qdev, PROBE, INFO, "MAC address %pM\n", ndev->dev_addr);
3393}
3394
3395static int ql_adapter_down(struct ql_adapter *qdev)
3396{
3397 int i, status = 0;
3398
3399 ql_link_off(qdev);
3400
3401
3402
3403
3404 if (test_bit(QL_ADAPTER_UP, &qdev->flags))
3405 cancel_delayed_work_sync(&qdev->asic_reset_work);
3406 cancel_delayed_work_sync(&qdev->mpi_reset_work);
3407 cancel_delayed_work_sync(&qdev->mpi_work);
3408 cancel_delayed_work_sync(&qdev->mpi_idc_work);
3409 cancel_delayed_work_sync(&qdev->mpi_port_cfg_work);
3410
3411 for (i = 0; i < qdev->rss_ring_count; i++)
3412 napi_disable(&qdev->rx_ring[i].napi);
3413
3414 clear_bit(QL_ADAPTER_UP, &qdev->flags);
3415
3416 ql_disable_interrupts(qdev);
3417
3418 ql_tx_ring_clean(qdev);
3419
3420
3421
3422 for (i = 0; i < qdev->rss_ring_count; i++)
3423 netif_napi_del(&qdev->rx_ring[i].napi);
3424
3425 ql_free_rx_buffers(qdev);
3426
3427 status = ql_adapter_reset(qdev);
3428 if (status)
3429 QPRINTK(qdev, IFDOWN, ERR, "reset(func #%d) FAILED!\n",
3430 qdev->func);
3431 return status;
3432}
3433
3434static int ql_adapter_up(struct ql_adapter *qdev)
3435{
3436 int err = 0;
3437
3438 err = ql_adapter_initialize(qdev);
3439 if (err) {
3440 QPRINTK(qdev, IFUP, INFO, "Unable to initialize adapter.\n");
3441 goto err_init;
3442 }
3443 set_bit(QL_ADAPTER_UP, &qdev->flags);
3444 ql_alloc_rx_buffers(qdev);
3445
3446
3447
3448 if ((ql_read32(qdev, STS) & qdev->port_init) &&
3449 (ql_read32(qdev, STS) & qdev->port_link_up))
3450 ql_link_on(qdev);
3451 ql_enable_interrupts(qdev);
3452 ql_enable_all_completion_interrupts(qdev);
3453 netif_tx_start_all_queues(qdev->ndev);
3454
3455 return 0;
3456err_init:
3457 ql_adapter_reset(qdev);
3458 return err;
3459}
3460
3461static void ql_release_adapter_resources(struct ql_adapter *qdev)
3462{
3463 ql_free_mem_resources(qdev);
3464 ql_free_irq(qdev);
3465}
3466
3467static int ql_get_adapter_resources(struct ql_adapter *qdev)
3468{
3469 int status = 0;
3470
3471 if (ql_alloc_mem_resources(qdev)) {
3472 QPRINTK(qdev, IFUP, ERR, "Unable to allocate memory.\n");
3473 return -ENOMEM;
3474 }
3475 status = ql_request_irq(qdev);
3476 return status;
3477}
3478
3479static int qlge_close(struct net_device *ndev)
3480{
3481 struct ql_adapter *qdev = netdev_priv(ndev);
3482
3483
3484
3485
3486
3487 while (!test_bit(QL_ADAPTER_UP, &qdev->flags))
3488 msleep(1);
3489 ql_adapter_down(qdev);
3490 ql_release_adapter_resources(qdev);
3491 return 0;
3492}
3493
3494static int ql_configure_rings(struct ql_adapter *qdev)
3495{
3496 int i;
3497 struct rx_ring *rx_ring;
3498 struct tx_ring *tx_ring;
3499 int cpu_cnt = min(MAX_CPUS, (int)num_online_cpus());
3500
3501
3502
3503
3504
3505
3506
3507
3508 qdev->intr_count = cpu_cnt;
3509 ql_enable_msix(qdev);
3510
3511 qdev->rss_ring_count = qdev->intr_count;
3512 qdev->tx_ring_count = cpu_cnt;
3513 qdev->rx_ring_count = qdev->tx_ring_count + qdev->rss_ring_count;
3514
3515 for (i = 0; i < qdev->tx_ring_count; i++) {
3516 tx_ring = &qdev->tx_ring[i];
3517 memset((void *)tx_ring, 0, sizeof(*tx_ring));
3518 tx_ring->qdev = qdev;
3519 tx_ring->wq_id = i;
3520 tx_ring->wq_len = qdev->tx_ring_size;
3521 tx_ring->wq_size =
3522 tx_ring->wq_len * sizeof(struct ob_mac_iocb_req);
3523
3524
3525
3526
3527
3528 tx_ring->cq_id = qdev->rss_ring_count + i;
3529 }
3530
3531 for (i = 0; i < qdev->rx_ring_count; i++) {
3532 rx_ring = &qdev->rx_ring[i];
3533 memset((void *)rx_ring, 0, sizeof(*rx_ring));
3534 rx_ring->qdev = qdev;
3535 rx_ring->cq_id = i;
3536 rx_ring->cpu = i % cpu_cnt;
3537 if (i < qdev->rss_ring_count) {
3538
3539
3540
3541 rx_ring->cq_len = qdev->rx_ring_size;
3542 rx_ring->cq_size =
3543 rx_ring->cq_len * sizeof(struct ql_net_rsp_iocb);
3544 rx_ring->lbq_len = NUM_LARGE_BUFFERS;
3545 rx_ring->lbq_size =
3546 rx_ring->lbq_len * sizeof(__le64);
3547 rx_ring->lbq_buf_size = LARGE_BUFFER_SIZE;
3548 rx_ring->sbq_len = NUM_SMALL_BUFFERS;
3549 rx_ring->sbq_size =
3550 rx_ring->sbq_len * sizeof(__le64);
3551 rx_ring->sbq_buf_size = SMALL_BUFFER_SIZE * 2;
3552 rx_ring->type = RX_Q;
3553 } else {
3554
3555
3556
3557
3558 rx_ring->cq_len = qdev->tx_ring_size;
3559 rx_ring->cq_size =
3560 rx_ring->cq_len * sizeof(struct ql_net_rsp_iocb);
3561 rx_ring->lbq_len = 0;
3562 rx_ring->lbq_size = 0;
3563 rx_ring->lbq_buf_size = 0;
3564 rx_ring->sbq_len = 0;
3565 rx_ring->sbq_size = 0;
3566 rx_ring->sbq_buf_size = 0;
3567 rx_ring->type = TX_Q;
3568 }
3569 }
3570 return 0;
3571}
3572
3573static int qlge_open(struct net_device *ndev)
3574{
3575 int err = 0;
3576 struct ql_adapter *qdev = netdev_priv(ndev);
3577
3578 err = ql_configure_rings(qdev);
3579 if (err)
3580 return err;
3581
3582 err = ql_get_adapter_resources(qdev);
3583 if (err)
3584 goto error_up;
3585
3586 err = ql_adapter_up(qdev);
3587 if (err)
3588 goto error_up;
3589
3590 return err;
3591
3592error_up:
3593 ql_release_adapter_resources(qdev);
3594 return err;
3595}
3596
3597static int qlge_change_mtu(struct net_device *ndev, int new_mtu)
3598{
3599 struct ql_adapter *qdev = netdev_priv(ndev);
3600
3601 if (ndev->mtu == 1500 && new_mtu == 9000) {
3602 QPRINTK(qdev, IFUP, ERR, "Changing to jumbo MTU.\n");
3603 queue_delayed_work(qdev->workqueue,
3604 &qdev->mpi_port_cfg_work, 0);
3605 } else if (ndev->mtu == 9000 && new_mtu == 1500) {
3606 QPRINTK(qdev, IFUP, ERR, "Changing to normal MTU.\n");
3607 } else if ((ndev->mtu == 1500 && new_mtu == 1500) ||
3608 (ndev->mtu == 9000 && new_mtu == 9000)) {
3609 return 0;
3610 } else
3611 return -EINVAL;
3612 ndev->mtu = new_mtu;
3613 return 0;
3614}
3615
3616static struct net_device_stats *qlge_get_stats(struct net_device
3617 *ndev)
3618{
3619 struct ql_adapter *qdev = netdev_priv(ndev);
3620 return &qdev->stats;
3621}
3622
3623static void qlge_set_multicast_list(struct net_device *ndev)
3624{
3625 struct ql_adapter *qdev = (struct ql_adapter *)netdev_priv(ndev);
3626 struct dev_mc_list *mc_ptr;
3627 int i, status;
3628
3629 status = ql_sem_spinlock(qdev, SEM_RT_IDX_MASK);
3630 if (status)
3631 return;
3632
3633
3634
3635
3636 if (ndev->flags & IFF_PROMISC) {
3637 if (!test_bit(QL_PROMISCUOUS, &qdev->flags)) {
3638 if (ql_set_routing_reg
3639 (qdev, RT_IDX_PROMISCUOUS_SLOT, RT_IDX_VALID, 1)) {
3640 QPRINTK(qdev, HW, ERR,
3641 "Failed to set promiscous mode.\n");
3642 } else {
3643 set_bit(QL_PROMISCUOUS, &qdev->flags);
3644 }
3645 }
3646 } else {
3647 if (test_bit(QL_PROMISCUOUS, &qdev->flags)) {
3648 if (ql_set_routing_reg
3649 (qdev, RT_IDX_PROMISCUOUS_SLOT, RT_IDX_VALID, 0)) {
3650 QPRINTK(qdev, HW, ERR,
3651 "Failed to clear promiscous mode.\n");
3652 } else {
3653 clear_bit(QL_PROMISCUOUS, &qdev->flags);
3654 }
3655 }
3656 }
3657
3658
3659
3660
3661
3662 if ((ndev->flags & IFF_ALLMULTI) ||
3663 (ndev->mc_count > MAX_MULTICAST_ENTRIES)) {
3664 if (!test_bit(QL_ALLMULTI, &qdev->flags)) {
3665 if (ql_set_routing_reg
3666 (qdev, RT_IDX_ALLMULTI_SLOT, RT_IDX_MCAST, 1)) {
3667 QPRINTK(qdev, HW, ERR,
3668 "Failed to set all-multi mode.\n");
3669 } else {
3670 set_bit(QL_ALLMULTI, &qdev->flags);
3671 }
3672 }
3673 } else {
3674 if (test_bit(QL_ALLMULTI, &qdev->flags)) {
3675 if (ql_set_routing_reg
3676 (qdev, RT_IDX_ALLMULTI_SLOT, RT_IDX_MCAST, 0)) {
3677 QPRINTK(qdev, HW, ERR,
3678 "Failed to clear all-multi mode.\n");
3679 } else {
3680 clear_bit(QL_ALLMULTI, &qdev->flags);
3681 }
3682 }
3683 }
3684
3685 if (ndev->mc_count) {
3686 status = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK);
3687 if (status)
3688 goto exit;
3689 for (i = 0, mc_ptr = ndev->mc_list; mc_ptr;
3690 i++, mc_ptr = mc_ptr->next)
3691 if (ql_set_mac_addr_reg(qdev, (u8 *) mc_ptr->dmi_addr,
3692 MAC_ADDR_TYPE_MULTI_MAC, i)) {
3693 QPRINTK(qdev, HW, ERR,
3694 "Failed to loadmulticast address.\n");
3695 ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
3696 goto exit;
3697 }
3698 ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
3699 if (ql_set_routing_reg
3700 (qdev, RT_IDX_MCAST_MATCH_SLOT, RT_IDX_MCAST_MATCH, 1)) {
3701 QPRINTK(qdev, HW, ERR,
3702 "Failed to set multicast match mode.\n");
3703 } else {
3704 set_bit(QL_ALLMULTI, &qdev->flags);
3705 }
3706 }
3707exit:
3708 ql_sem_unlock(qdev, SEM_RT_IDX_MASK);
3709}
3710
3711static int qlge_set_mac_address(struct net_device *ndev, void *p)
3712{
3713 struct ql_adapter *qdev = (struct ql_adapter *)netdev_priv(ndev);
3714 struct sockaddr *addr = p;
3715 int status;
3716
3717 if (netif_running(ndev))
3718 return -EBUSY;
3719
3720 if (!is_valid_ether_addr(addr->sa_data))
3721 return -EADDRNOTAVAIL;
3722 memcpy(ndev->dev_addr, addr->sa_data, ndev->addr_len);
3723
3724 status = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK);
3725 if (status)
3726 return status;
3727 status = ql_set_mac_addr_reg(qdev, (u8 *) ndev->dev_addr,
3728 MAC_ADDR_TYPE_CAM_MAC, qdev->func * MAX_CQ);
3729 if (status)
3730 QPRINTK(qdev, HW, ERR, "Failed to load MAC address.\n");
3731 ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
3732 return status;
3733}
3734
3735static void qlge_tx_timeout(struct net_device *ndev)
3736{
3737 struct ql_adapter *qdev = (struct ql_adapter *)netdev_priv(ndev);
3738 ql_queue_asic_error(qdev);
3739}
3740
3741static void ql_asic_reset_work(struct work_struct *work)
3742{
3743 struct ql_adapter *qdev =
3744 container_of(work, struct ql_adapter, asic_reset_work.work);
3745 int status;
3746 rtnl_lock();
3747 status = ql_adapter_down(qdev);
3748 if (status)
3749 goto error;
3750
3751 status = ql_adapter_up(qdev);
3752 if (status)
3753 goto error;
3754
3755
3756 clear_bit(QL_ALLMULTI, &qdev->flags);
3757 clear_bit(QL_PROMISCUOUS, &qdev->flags);
3758 qlge_set_multicast_list(qdev->ndev);
3759
3760 rtnl_unlock();
3761 return;
3762error:
3763 QPRINTK(qdev, IFUP, ALERT,
3764 "Driver up/down cycle failed, closing device\n");
3765
3766 set_bit(QL_ADAPTER_UP, &qdev->flags);
3767 dev_close(qdev->ndev);
3768 rtnl_unlock();
3769}
3770
3771static struct nic_operations qla8012_nic_ops = {
3772 .get_flash = ql_get_8012_flash_params,
3773 .port_initialize = ql_8012_port_initialize,
3774};
3775
3776static struct nic_operations qla8000_nic_ops = {
3777 .get_flash = ql_get_8000_flash_params,
3778 .port_initialize = ql_8000_port_initialize,
3779};
3780
3781
3782
3783
3784
3785
3786
3787
3788static int ql_get_alt_pcie_func(struct ql_adapter *qdev)
3789{
3790 int status = 0;
3791 u32 temp;
3792 u32 nic_func1, nic_func2;
3793
3794 status = ql_read_mpi_reg(qdev, MPI_TEST_FUNC_PORT_CFG,
3795 &temp);
3796 if (status)
3797 return status;
3798
3799 nic_func1 = ((temp >> MPI_TEST_NIC1_FUNC_SHIFT) &
3800 MPI_TEST_NIC_FUNC_MASK);
3801 nic_func2 = ((temp >> MPI_TEST_NIC2_FUNC_SHIFT) &
3802 MPI_TEST_NIC_FUNC_MASK);
3803
3804 if (qdev->func == nic_func1)
3805 qdev->alt_func = nic_func2;
3806 else if (qdev->func == nic_func2)
3807 qdev->alt_func = nic_func1;
3808 else
3809 status = -EIO;
3810
3811 return status;
3812}
3813
3814static int ql_get_board_info(struct ql_adapter *qdev)
3815{
3816 int status;
3817 qdev->func =
3818 (ql_read32(qdev, STS) & STS_FUNC_ID_MASK) >> STS_FUNC_ID_SHIFT;
3819 if (qdev->func > 3)
3820 return -EIO;
3821
3822 status = ql_get_alt_pcie_func(qdev);
3823 if (status)
3824 return status;
3825
3826 qdev->port = (qdev->func < qdev->alt_func) ? 0 : 1;
3827 if (qdev->port) {
3828 qdev->xg_sem_mask = SEM_XGMAC1_MASK;
3829 qdev->port_link_up = STS_PL1;
3830 qdev->port_init = STS_PI1;
3831 qdev->mailbox_in = PROC_ADDR_MPI_RISC | PROC_ADDR_FUNC2_MBI;
3832 qdev->mailbox_out = PROC_ADDR_MPI_RISC | PROC_ADDR_FUNC2_MBO;
3833 } else {
3834 qdev->xg_sem_mask = SEM_XGMAC0_MASK;
3835 qdev->port_link_up = STS_PL0;
3836 qdev->port_init = STS_PI0;
3837 qdev->mailbox_in = PROC_ADDR_MPI_RISC | PROC_ADDR_FUNC0_MBI;
3838 qdev->mailbox_out = PROC_ADDR_MPI_RISC | PROC_ADDR_FUNC0_MBO;
3839 }
3840 qdev->chip_rev_id = ql_read32(qdev, REV_ID);
3841 qdev->device_id = qdev->pdev->device;
3842 if (qdev->device_id == QLGE_DEVICE_ID_8012)
3843 qdev->nic_ops = &qla8012_nic_ops;
3844 else if (qdev->device_id == QLGE_DEVICE_ID_8000)
3845 qdev->nic_ops = &qla8000_nic_ops;
3846 return status;
3847}
3848
3849static void ql_release_all(struct pci_dev *pdev)
3850{
3851 struct net_device *ndev = pci_get_drvdata(pdev);
3852 struct ql_adapter *qdev = netdev_priv(ndev);
3853
3854 if (qdev->workqueue) {
3855 destroy_workqueue(qdev->workqueue);
3856 qdev->workqueue = NULL;
3857 }
3858
3859 if (qdev->reg_base)
3860 iounmap(qdev->reg_base);
3861 if (qdev->doorbell_area)
3862 iounmap(qdev->doorbell_area);
3863 pci_release_regions(pdev);
3864 pci_set_drvdata(pdev, NULL);
3865}
3866
3867static int __devinit ql_init_device(struct pci_dev *pdev,
3868 struct net_device *ndev, int cards_found)
3869{
3870 struct ql_adapter *qdev = netdev_priv(ndev);
3871 int pos, err = 0;
3872 u16 val16;
3873
3874 memset((void *)qdev, 0, sizeof(*qdev));
3875 err = pci_enable_device(pdev);
3876 if (err) {
3877 dev_err(&pdev->dev, "PCI device enable failed.\n");
3878 return err;
3879 }
3880
3881 qdev->ndev = ndev;
3882 qdev->pdev = pdev;
3883 pci_set_drvdata(pdev, ndev);
3884 pos = pci_find_capability(pdev, PCI_CAP_ID_EXP);
3885 if (pos <= 0) {
3886 dev_err(&pdev->dev, PFX "Cannot find PCI Express capability, "
3887 "aborting.\n");
3888 return pos;
3889 } else {
3890 pci_read_config_word(pdev, pos + PCI_EXP_DEVCTL, &val16);
3891 val16 &= ~PCI_EXP_DEVCTL_NOSNOOP_EN;
3892 val16 |= (PCI_EXP_DEVCTL_CERE |
3893 PCI_EXP_DEVCTL_NFERE |
3894 PCI_EXP_DEVCTL_FERE | PCI_EXP_DEVCTL_URRE);
3895 pci_write_config_word(pdev, pos + PCI_EXP_DEVCTL, val16);
3896 }
3897
3898 err = pci_request_regions(pdev, DRV_NAME);
3899 if (err) {
3900 dev_err(&pdev->dev, "PCI region request failed.\n");
3901 return err;
3902 }
3903
3904 pci_set_master(pdev);
3905 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
3906 set_bit(QL_DMA64, &qdev->flags);
3907 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
3908 } else {
3909 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
3910 if (!err)
3911 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
3912 }
3913
3914 if (err) {
3915 dev_err(&pdev->dev, "No usable DMA configuration.\n");
3916 goto err_out;
3917 }
3918
3919
3920 pdev->needs_freset = 1;
3921 pci_save_state(pdev);
3922 qdev->reg_base =
3923 ioremap_nocache(pci_resource_start(pdev, 1),
3924 pci_resource_len(pdev, 1));
3925 if (!qdev->reg_base) {
3926 dev_err(&pdev->dev, "Register mapping failed.\n");
3927 err = -ENOMEM;
3928 goto err_out;
3929 }
3930
3931 qdev->doorbell_area_size = pci_resource_len(pdev, 3);
3932 qdev->doorbell_area =
3933 ioremap_nocache(pci_resource_start(pdev, 3),
3934 pci_resource_len(pdev, 3));
3935 if (!qdev->doorbell_area) {
3936 dev_err(&pdev->dev, "Doorbell register mapping failed.\n");
3937 err = -ENOMEM;
3938 goto err_out;
3939 }
3940
3941 err = ql_get_board_info(qdev);
3942 if (err) {
3943 dev_err(&pdev->dev, "Register access failed.\n");
3944 err = -EIO;
3945 goto err_out;
3946 }
3947 qdev->msg_enable = netif_msg_init(debug, default_msg);
3948 spin_lock_init(&qdev->hw_lock);
3949 spin_lock_init(&qdev->stats_lock);
3950
3951
3952 err = qdev->nic_ops->get_flash(qdev);
3953 if (err) {
3954 dev_err(&pdev->dev, "Invalid FLASH.\n");
3955 goto err_out;
3956 }
3957
3958 memcpy(ndev->perm_addr, ndev->dev_addr, ndev->addr_len);
3959
3960
3961 qdev->tx_ring_size = NUM_TX_RING_ENTRIES;
3962 qdev->rx_ring_size = NUM_RX_RING_ENTRIES;
3963
3964
3965 qdev->rx_coalesce_usecs = DFLT_COALESCE_WAIT;
3966 qdev->tx_coalesce_usecs = DFLT_COALESCE_WAIT;
3967 qdev->rx_max_coalesced_frames = DFLT_INTER_FRAME_WAIT;
3968 qdev->tx_max_coalesced_frames = DFLT_INTER_FRAME_WAIT;
3969
3970
3971
3972
3973 qdev->rx_csum = 1;
3974 qdev->workqueue = create_singlethread_workqueue(ndev->name);
3975 INIT_DELAYED_WORK(&qdev->asic_reset_work, ql_asic_reset_work);
3976 INIT_DELAYED_WORK(&qdev->mpi_reset_work, ql_mpi_reset_work);
3977 INIT_DELAYED_WORK(&qdev->mpi_work, ql_mpi_work);
3978 INIT_DELAYED_WORK(&qdev->mpi_port_cfg_work, ql_mpi_port_cfg_work);
3979 INIT_DELAYED_WORK(&qdev->mpi_idc_work, ql_mpi_idc_work);
3980 init_completion(&qdev->ide_completion);
3981
3982 if (!cards_found) {
3983 dev_info(&pdev->dev, "%s\n", DRV_STRING);
3984 dev_info(&pdev->dev, "Driver name: %s, Version: %s.\n",
3985 DRV_NAME, DRV_VERSION);
3986 }
3987 return 0;
3988err_out:
3989 ql_release_all(pdev);
3990 pci_disable_device(pdev);
3991 return err;
3992}
3993
3994
3995static const struct net_device_ops qlge_netdev_ops = {
3996 .ndo_open = qlge_open,
3997 .ndo_stop = qlge_close,
3998 .ndo_start_xmit = qlge_send,
3999 .ndo_change_mtu = qlge_change_mtu,
4000 .ndo_get_stats = qlge_get_stats,
4001 .ndo_set_multicast_list = qlge_set_multicast_list,
4002 .ndo_set_mac_address = qlge_set_mac_address,
4003 .ndo_validate_addr = eth_validate_addr,
4004 .ndo_tx_timeout = qlge_tx_timeout,
4005 .ndo_vlan_rx_register = ql_vlan_rx_register,
4006 .ndo_vlan_rx_add_vid = ql_vlan_rx_add_vid,
4007 .ndo_vlan_rx_kill_vid = ql_vlan_rx_kill_vid,
4008};
4009
4010static int __devinit qlge_probe(struct pci_dev *pdev,
4011 const struct pci_device_id *pci_entry)
4012{
4013 struct net_device *ndev = NULL;
4014 struct ql_adapter *qdev = NULL;
4015 static int cards_found = 0;
4016 int err = 0;
4017
4018 ndev = alloc_etherdev_mq(sizeof(struct ql_adapter),
4019 min(MAX_CPUS, (int)num_online_cpus()));
4020 if (!ndev)
4021 return -ENOMEM;
4022
4023 err = ql_init_device(pdev, ndev, cards_found);
4024 if (err < 0) {
4025 free_netdev(ndev);
4026 return err;
4027 }
4028
4029 qdev = netdev_priv(ndev);
4030 SET_NETDEV_DEV(ndev, &pdev->dev);
4031 ndev->features = (0
4032 | NETIF_F_IP_CSUM
4033 | NETIF_F_SG
4034 | NETIF_F_TSO
4035 | NETIF_F_TSO6
4036 | NETIF_F_TSO_ECN
4037 | NETIF_F_HW_VLAN_TX
4038 | NETIF_F_HW_VLAN_RX | NETIF_F_HW_VLAN_FILTER);
4039 ndev->features |= NETIF_F_GRO;
4040
4041 if (test_bit(QL_DMA64, &qdev->flags))
4042 ndev->features |= NETIF_F_HIGHDMA;
4043
4044
4045
4046
4047 ndev->tx_queue_len = qdev->tx_ring_size;
4048 ndev->irq = pdev->irq;
4049
4050 ndev->netdev_ops = &qlge_netdev_ops;
4051 SET_ETHTOOL_OPS(ndev, &qlge_ethtool_ops);
4052 ndev->watchdog_timeo = 10 * HZ;
4053
4054 err = register_netdev(ndev);
4055 if (err) {
4056 dev_err(&pdev->dev, "net device registration failed.\n");
4057 ql_release_all(pdev);
4058 pci_disable_device(pdev);
4059 return err;
4060 }
4061 ql_link_off(qdev);
4062 ql_display_dev_info(ndev);
4063 cards_found++;
4064 return 0;
4065}
4066
4067static void __devexit qlge_remove(struct pci_dev *pdev)
4068{
4069 struct net_device *ndev = pci_get_drvdata(pdev);
4070 unregister_netdev(ndev);
4071 ql_release_all(pdev);
4072 pci_disable_device(pdev);
4073 free_netdev(ndev);
4074}
4075
4076
4077static void ql_eeh_close(struct net_device *ndev)
4078{
4079 int i;
4080 struct ql_adapter *qdev = netdev_priv(ndev);
4081
4082 if (netif_carrier_ok(ndev)) {
4083 netif_carrier_off(ndev);
4084 netif_stop_queue(ndev);
4085 }
4086
4087 if (test_bit(QL_ADAPTER_UP, &qdev->flags))
4088 cancel_delayed_work_sync(&qdev->asic_reset_work);
4089 cancel_delayed_work_sync(&qdev->mpi_reset_work);
4090 cancel_delayed_work_sync(&qdev->mpi_work);
4091 cancel_delayed_work_sync(&qdev->mpi_idc_work);
4092 cancel_delayed_work_sync(&qdev->mpi_port_cfg_work);
4093
4094 for (i = 0; i < qdev->rss_ring_count; i++)
4095 netif_napi_del(&qdev->rx_ring[i].napi);
4096
4097 clear_bit(QL_ADAPTER_UP, &qdev->flags);
4098 ql_tx_ring_clean(qdev);
4099 ql_free_rx_buffers(qdev);
4100 ql_release_adapter_resources(qdev);
4101}
4102
4103
4104
4105
4106
4107static pci_ers_result_t qlge_io_error_detected(struct pci_dev *pdev,
4108 enum pci_channel_state state)
4109{
4110 struct net_device *ndev = pci_get_drvdata(pdev);
4111
4112 switch (state) {
4113 case pci_channel_io_normal:
4114 return PCI_ERS_RESULT_CAN_RECOVER;
4115 case pci_channel_io_frozen:
4116 netif_device_detach(ndev);
4117 if (netif_running(ndev))
4118 ql_eeh_close(ndev);
4119 pci_disable_device(pdev);
4120 return PCI_ERS_RESULT_NEED_RESET;
4121 case pci_channel_io_perm_failure:
4122 dev_err(&pdev->dev,
4123 "%s: pci_channel_io_perm_failure.\n", __func__);
4124 return PCI_ERS_RESULT_DISCONNECT;
4125 }
4126
4127
4128 return PCI_ERS_RESULT_NEED_RESET;
4129}
4130
4131
4132
4133
4134
4135
4136
4137static pci_ers_result_t qlge_io_slot_reset(struct pci_dev *pdev)
4138{
4139 struct net_device *ndev = pci_get_drvdata(pdev);
4140 struct ql_adapter *qdev = netdev_priv(ndev);
4141
4142 pdev->error_state = pci_channel_io_normal;
4143
4144 pci_restore_state(pdev);
4145 if (pci_enable_device(pdev)) {
4146 QPRINTK(qdev, IFUP, ERR,
4147 "Cannot re-enable PCI device after reset.\n");
4148 return PCI_ERS_RESULT_DISCONNECT;
4149 }
4150 pci_set_master(pdev);
4151 return PCI_ERS_RESULT_RECOVERED;
4152}
4153
4154static void qlge_io_resume(struct pci_dev *pdev)
4155{
4156 struct net_device *ndev = pci_get_drvdata(pdev);
4157 struct ql_adapter *qdev = netdev_priv(ndev);
4158 int err = 0;
4159
4160 if (ql_adapter_reset(qdev))
4161 QPRINTK(qdev, DRV, ERR, "reset FAILED!\n");
4162 if (netif_running(ndev)) {
4163 err = qlge_open(ndev);
4164 if (err) {
4165 QPRINTK(qdev, IFUP, ERR,
4166 "Device initialization failed after reset.\n");
4167 return;
4168 }
4169 } else {
4170 QPRINTK(qdev, IFUP, ERR,
4171 "Device was not running prior to EEH.\n");
4172 }
4173 netif_device_attach(ndev);
4174}
4175
4176static struct pci_error_handlers qlge_err_handler = {
4177 .error_detected = qlge_io_error_detected,
4178 .slot_reset = qlge_io_slot_reset,
4179 .resume = qlge_io_resume,
4180};
4181
4182static int qlge_suspend(struct pci_dev *pdev, pm_message_t state)
4183{
4184 struct net_device *ndev = pci_get_drvdata(pdev);
4185 struct ql_adapter *qdev = netdev_priv(ndev);
4186 int err;
4187
4188 netif_device_detach(ndev);
4189
4190 if (netif_running(ndev)) {
4191 err = ql_adapter_down(qdev);
4192 if (!err)
4193 return err;
4194 }
4195
4196 err = pci_save_state(pdev);
4197 if (err)
4198 return err;
4199
4200 pci_disable_device(pdev);
4201
4202 pci_set_power_state(pdev, pci_choose_state(pdev, state));
4203
4204 return 0;
4205}
4206
4207#ifdef CONFIG_PM
4208static int qlge_resume(struct pci_dev *pdev)
4209{
4210 struct net_device *ndev = pci_get_drvdata(pdev);
4211 struct ql_adapter *qdev = netdev_priv(ndev);
4212 int err;
4213
4214 pci_set_power_state(pdev, PCI_D0);
4215 pci_restore_state(pdev);
4216 err = pci_enable_device(pdev);
4217 if (err) {
4218 QPRINTK(qdev, IFUP, ERR, "Cannot enable PCI device from suspend\n");
4219 return err;
4220 }
4221 pci_set_master(pdev);
4222
4223 pci_enable_wake(pdev, PCI_D3hot, 0);
4224 pci_enable_wake(pdev, PCI_D3cold, 0);
4225
4226 if (netif_running(ndev)) {
4227 err = ql_adapter_up(qdev);
4228 if (err)
4229 return err;
4230 }
4231
4232 netif_device_attach(ndev);
4233
4234 return 0;
4235}
4236#endif
4237
4238static void qlge_shutdown(struct pci_dev *pdev)
4239{
4240 qlge_suspend(pdev, PMSG_SUSPEND);
4241}
4242
4243static struct pci_driver qlge_driver = {
4244 .name = DRV_NAME,
4245 .id_table = qlge_pci_tbl,
4246 .probe = qlge_probe,
4247 .remove = __devexit_p(qlge_remove),
4248#ifdef CONFIG_PM
4249 .suspend = qlge_suspend,
4250 .resume = qlge_resume,
4251#endif
4252 .shutdown = qlge_shutdown,
4253 .err_handler = &qlge_err_handler
4254};
4255
4256static int __init qlge_init_module(void)
4257{
4258 return pci_register_driver(&qlge_driver);
4259}
4260
4261static void __exit qlge_exit(void)
4262{
4263 pci_unregister_driver(&qlge_driver);
4264}
4265
4266module_init(qlge_init_module);
4267module_exit(qlge_exit);
4268