include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit...
[safe/jmp/linux-2.6] / drivers / net / qlcnic / qlcnic_init.c
1 /*
2  * Copyright (C) 2009 - QLogic Corporation.
3  * All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
18  * MA  02111-1307, USA.
19  *
20  * The full GNU General Public License is included in this distribution
21  * in the file called "COPYING".
22  *
23  */
24
25 #include <linux/netdevice.h>
26 #include <linux/delay.h>
27 #include <linux/slab.h>
28 #include "qlcnic.h"
29
30 struct crb_addr_pair {
31         u32 addr;
32         u32 data;
33 };
34
35 #define QLCNIC_MAX_CRB_XFORM 60
36 static unsigned int crb_addr_xform[QLCNIC_MAX_CRB_XFORM];
37
38 #define crb_addr_transform(name) \
39         (crb_addr_xform[QLCNIC_HW_PX_MAP_CRB_##name] = \
40         QLCNIC_HW_CRB_HUB_AGT_ADR_##name << 20)
41
42 #define QLCNIC_ADDR_ERROR (0xffffffff)
43
44 static void
45 qlcnic_post_rx_buffers_nodb(struct qlcnic_adapter *adapter,
46                 struct qlcnic_host_rds_ring *rds_ring);
47
48 static void crb_addr_transform_setup(void)
49 {
50         crb_addr_transform(XDMA);
51         crb_addr_transform(TIMR);
52         crb_addr_transform(SRE);
53         crb_addr_transform(SQN3);
54         crb_addr_transform(SQN2);
55         crb_addr_transform(SQN1);
56         crb_addr_transform(SQN0);
57         crb_addr_transform(SQS3);
58         crb_addr_transform(SQS2);
59         crb_addr_transform(SQS1);
60         crb_addr_transform(SQS0);
61         crb_addr_transform(RPMX7);
62         crb_addr_transform(RPMX6);
63         crb_addr_transform(RPMX5);
64         crb_addr_transform(RPMX4);
65         crb_addr_transform(RPMX3);
66         crb_addr_transform(RPMX2);
67         crb_addr_transform(RPMX1);
68         crb_addr_transform(RPMX0);
69         crb_addr_transform(ROMUSB);
70         crb_addr_transform(SN);
71         crb_addr_transform(QMN);
72         crb_addr_transform(QMS);
73         crb_addr_transform(PGNI);
74         crb_addr_transform(PGND);
75         crb_addr_transform(PGN3);
76         crb_addr_transform(PGN2);
77         crb_addr_transform(PGN1);
78         crb_addr_transform(PGN0);
79         crb_addr_transform(PGSI);
80         crb_addr_transform(PGSD);
81         crb_addr_transform(PGS3);
82         crb_addr_transform(PGS2);
83         crb_addr_transform(PGS1);
84         crb_addr_transform(PGS0);
85         crb_addr_transform(PS);
86         crb_addr_transform(PH);
87         crb_addr_transform(NIU);
88         crb_addr_transform(I2Q);
89         crb_addr_transform(EG);
90         crb_addr_transform(MN);
91         crb_addr_transform(MS);
92         crb_addr_transform(CAS2);
93         crb_addr_transform(CAS1);
94         crb_addr_transform(CAS0);
95         crb_addr_transform(CAM);
96         crb_addr_transform(C2C1);
97         crb_addr_transform(C2C0);
98         crb_addr_transform(SMB);
99         crb_addr_transform(OCM0);
100         crb_addr_transform(I2C0);
101 }
102
103 void qlcnic_release_rx_buffers(struct qlcnic_adapter *adapter)
104 {
105         struct qlcnic_recv_context *recv_ctx;
106         struct qlcnic_host_rds_ring *rds_ring;
107         struct qlcnic_rx_buffer *rx_buf;
108         int i, ring;
109
110         recv_ctx = &adapter->recv_ctx;
111         for (ring = 0; ring < adapter->max_rds_rings; ring++) {
112                 rds_ring = &recv_ctx->rds_rings[ring];
113                 for (i = 0; i < rds_ring->num_desc; ++i) {
114                         rx_buf = &(rds_ring->rx_buf_arr[i]);
115                         if (rx_buf->state == QLCNIC_BUFFER_FREE)
116                                 continue;
117                         pci_unmap_single(adapter->pdev,
118                                         rx_buf->dma,
119                                         rds_ring->dma_size,
120                                         PCI_DMA_FROMDEVICE);
121                         if (rx_buf->skb != NULL)
122                                 dev_kfree_skb_any(rx_buf->skb);
123                 }
124         }
125 }
126
127 void qlcnic_release_tx_buffers(struct qlcnic_adapter *adapter)
128 {
129         struct qlcnic_cmd_buffer *cmd_buf;
130         struct qlcnic_skb_frag *buffrag;
131         int i, j;
132         struct qlcnic_host_tx_ring *tx_ring = adapter->tx_ring;
133
134         cmd_buf = tx_ring->cmd_buf_arr;
135         for (i = 0; i < tx_ring->num_desc; i++) {
136                 buffrag = cmd_buf->frag_array;
137                 if (buffrag->dma) {
138                         pci_unmap_single(adapter->pdev, buffrag->dma,
139                                          buffrag->length, PCI_DMA_TODEVICE);
140                         buffrag->dma = 0ULL;
141                 }
142                 for (j = 0; j < cmd_buf->frag_count; j++) {
143                         buffrag++;
144                         if (buffrag->dma) {
145                                 pci_unmap_page(adapter->pdev, buffrag->dma,
146                                                buffrag->length,
147                                                PCI_DMA_TODEVICE);
148                                 buffrag->dma = 0ULL;
149                         }
150                 }
151                 if (cmd_buf->skb) {
152                         dev_kfree_skb_any(cmd_buf->skb);
153                         cmd_buf->skb = NULL;
154                 }
155                 cmd_buf++;
156         }
157 }
158
159 void qlcnic_free_sw_resources(struct qlcnic_adapter *adapter)
160 {
161         struct qlcnic_recv_context *recv_ctx;
162         struct qlcnic_host_rds_ring *rds_ring;
163         struct qlcnic_host_tx_ring *tx_ring;
164         int ring;
165
166         recv_ctx = &adapter->recv_ctx;
167
168         if (recv_ctx->rds_rings == NULL)
169                 goto skip_rds;
170
171         for (ring = 0; ring < adapter->max_rds_rings; ring++) {
172                 rds_ring = &recv_ctx->rds_rings[ring];
173                 vfree(rds_ring->rx_buf_arr);
174                 rds_ring->rx_buf_arr = NULL;
175         }
176         kfree(recv_ctx->rds_rings);
177
178 skip_rds:
179         if (adapter->tx_ring == NULL)
180                 return;
181
182         tx_ring = adapter->tx_ring;
183         vfree(tx_ring->cmd_buf_arr);
184         kfree(adapter->tx_ring);
185 }
186
187 int qlcnic_alloc_sw_resources(struct qlcnic_adapter *adapter)
188 {
189         struct qlcnic_recv_context *recv_ctx;
190         struct qlcnic_host_rds_ring *rds_ring;
191         struct qlcnic_host_sds_ring *sds_ring;
192         struct qlcnic_host_tx_ring *tx_ring;
193         struct qlcnic_rx_buffer *rx_buf;
194         int ring, i, size;
195
196         struct qlcnic_cmd_buffer *cmd_buf_arr;
197         struct net_device *netdev = adapter->netdev;
198
199         size = sizeof(struct qlcnic_host_tx_ring);
200         tx_ring = kzalloc(size, GFP_KERNEL);
201         if (tx_ring == NULL) {
202                 dev_err(&netdev->dev, "failed to allocate tx ring struct\n");
203                 return -ENOMEM;
204         }
205         adapter->tx_ring = tx_ring;
206
207         tx_ring->num_desc = adapter->num_txd;
208         tx_ring->txq = netdev_get_tx_queue(netdev, 0);
209
210         cmd_buf_arr = vmalloc(TX_BUFF_RINGSIZE(tx_ring));
211         if (cmd_buf_arr == NULL) {
212                 dev_err(&netdev->dev, "failed to allocate cmd buffer ring\n");
213                 return -ENOMEM;
214         }
215         memset(cmd_buf_arr, 0, TX_BUFF_RINGSIZE(tx_ring));
216         tx_ring->cmd_buf_arr = cmd_buf_arr;
217
218         recv_ctx = &adapter->recv_ctx;
219
220         size = adapter->max_rds_rings * sizeof(struct qlcnic_host_rds_ring);
221         rds_ring = kzalloc(size, GFP_KERNEL);
222         if (rds_ring == NULL) {
223                 dev_err(&netdev->dev, "failed to allocate rds ring struct\n");
224                 return -ENOMEM;
225         }
226         recv_ctx->rds_rings = rds_ring;
227
228         for (ring = 0; ring < adapter->max_rds_rings; ring++) {
229                 rds_ring = &recv_ctx->rds_rings[ring];
230                 switch (ring) {
231                 case RCV_RING_NORMAL:
232                         rds_ring->num_desc = adapter->num_rxd;
233                         if (adapter->ahw.cut_through) {
234                                 rds_ring->dma_size =
235                                         QLCNIC_CT_DEFAULT_RX_BUF_LEN;
236                                 rds_ring->skb_size =
237                                         QLCNIC_CT_DEFAULT_RX_BUF_LEN;
238                         } else {
239                                 rds_ring->dma_size =
240                                         QLCNIC_P3_RX_BUF_MAX_LEN;
241                                 rds_ring->skb_size =
242                                         rds_ring->dma_size + NET_IP_ALIGN;
243                         }
244                         break;
245
246                 case RCV_RING_JUMBO:
247                         rds_ring->num_desc = adapter->num_jumbo_rxd;
248                         rds_ring->dma_size =
249                                 QLCNIC_P3_RX_JUMBO_BUF_MAX_LEN;
250
251                         if (adapter->capabilities & QLCNIC_FW_CAPABILITY_HW_LRO)
252                                 rds_ring->dma_size += QLCNIC_LRO_BUFFER_EXTRA;
253
254                         rds_ring->skb_size =
255                                 rds_ring->dma_size + NET_IP_ALIGN;
256                         break;
257
258                 case RCV_RING_LRO:
259                         rds_ring->num_desc = adapter->num_lro_rxd;
260                         rds_ring->dma_size = QLCNIC_RX_LRO_BUFFER_LENGTH;
261                         rds_ring->skb_size = rds_ring->dma_size + NET_IP_ALIGN;
262                         break;
263
264                 }
265                 rds_ring->rx_buf_arr = (struct qlcnic_rx_buffer *)
266                         vmalloc(RCV_BUFF_RINGSIZE(rds_ring));
267                 if (rds_ring->rx_buf_arr == NULL) {
268                         dev_err(&netdev->dev, "Failed to allocate "
269                                 "rx buffer ring %d\n", ring);
270                         goto err_out;
271                 }
272                 memset(rds_ring->rx_buf_arr, 0, RCV_BUFF_RINGSIZE(rds_ring));
273                 INIT_LIST_HEAD(&rds_ring->free_list);
274                 /*
275                  * Now go through all of them, set reference handles
276                  * and put them in the queues.
277                  */
278                 rx_buf = rds_ring->rx_buf_arr;
279                 for (i = 0; i < rds_ring->num_desc; i++) {
280                         list_add_tail(&rx_buf->list,
281                                         &rds_ring->free_list);
282                         rx_buf->ref_handle = i;
283                         rx_buf->state = QLCNIC_BUFFER_FREE;
284                         rx_buf++;
285                 }
286                 spin_lock_init(&rds_ring->lock);
287         }
288
289         for (ring = 0; ring < adapter->max_sds_rings; ring++) {
290                 sds_ring = &recv_ctx->sds_rings[ring];
291                 sds_ring->irq = adapter->msix_entries[ring].vector;
292                 sds_ring->adapter = adapter;
293                 sds_ring->num_desc = adapter->num_rxd;
294
295                 for (i = 0; i < NUM_RCV_DESC_RINGS; i++)
296                         INIT_LIST_HEAD(&sds_ring->free_list[i]);
297         }
298
299         return 0;
300
301 err_out:
302         qlcnic_free_sw_resources(adapter);
303         return -ENOMEM;
304 }
305
306 /*
307  * Utility to translate from internal Phantom CRB address
308  * to external PCI CRB address.
309  */
310 static u32 qlcnic_decode_crb_addr(u32 addr)
311 {
312         int i;
313         u32 base_addr, offset, pci_base;
314
315         crb_addr_transform_setup();
316
317         pci_base = QLCNIC_ADDR_ERROR;
318         base_addr = addr & 0xfff00000;
319         offset = addr & 0x000fffff;
320
321         for (i = 0; i < QLCNIC_MAX_CRB_XFORM; i++) {
322                 if (crb_addr_xform[i] == base_addr) {
323                         pci_base = i << 20;
324                         break;
325                 }
326         }
327         if (pci_base == QLCNIC_ADDR_ERROR)
328                 return pci_base;
329         else
330                 return pci_base + offset;
331 }
332
333 #define QLCNIC_MAX_ROM_WAIT_USEC        100
334
335 static int qlcnic_wait_rom_done(struct qlcnic_adapter *adapter)
336 {
337         long timeout = 0;
338         long done = 0;
339
340         cond_resched();
341
342         while (done == 0) {
343                 done = QLCRD32(adapter, QLCNIC_ROMUSB_GLB_STATUS);
344                 done &= 2;
345                 if (++timeout >= QLCNIC_MAX_ROM_WAIT_USEC) {
346                         dev_err(&adapter->pdev->dev,
347                                 "Timeout reached  waiting for rom done");
348                         return -EIO;
349                 }
350                 udelay(1);
351         }
352         return 0;
353 }
354
355 static int do_rom_fast_read(struct qlcnic_adapter *adapter,
356                             int addr, int *valp)
357 {
358         QLCWR32(adapter, QLCNIC_ROMUSB_ROM_ADDRESS, addr);
359         QLCWR32(adapter, QLCNIC_ROMUSB_ROM_DUMMY_BYTE_CNT, 0);
360         QLCWR32(adapter, QLCNIC_ROMUSB_ROM_ABYTE_CNT, 3);
361         QLCWR32(adapter, QLCNIC_ROMUSB_ROM_INSTR_OPCODE, 0xb);
362         if (qlcnic_wait_rom_done(adapter)) {
363                 dev_err(&adapter->pdev->dev, "Error waiting for rom done\n");
364                 return -EIO;
365         }
366         /* reset abyte_cnt and dummy_byte_cnt */
367         QLCWR32(adapter, QLCNIC_ROMUSB_ROM_ABYTE_CNT, 0);
368         udelay(10);
369         QLCWR32(adapter, QLCNIC_ROMUSB_ROM_DUMMY_BYTE_CNT, 0);
370
371         *valp = QLCRD32(adapter, QLCNIC_ROMUSB_ROM_RDATA);
372         return 0;
373 }
374
375 static int do_rom_fast_read_words(struct qlcnic_adapter *adapter, int addr,
376                                   u8 *bytes, size_t size)
377 {
378         int addridx;
379         int ret = 0;
380
381         for (addridx = addr; addridx < (addr + size); addridx += 4) {
382                 int v;
383                 ret = do_rom_fast_read(adapter, addridx, &v);
384                 if (ret != 0)
385                         break;
386                 *(__le32 *)bytes = cpu_to_le32(v);
387                 bytes += 4;
388         }
389
390         return ret;
391 }
392
393 int
394 qlcnic_rom_fast_read_words(struct qlcnic_adapter *adapter, int addr,
395                                 u8 *bytes, size_t size)
396 {
397         int ret;
398
399         ret = qlcnic_rom_lock(adapter);
400         if (ret < 0)
401                 return ret;
402
403         ret = do_rom_fast_read_words(adapter, addr, bytes, size);
404
405         qlcnic_rom_unlock(adapter);
406         return ret;
407 }
408
409 int qlcnic_rom_fast_read(struct qlcnic_adapter *adapter, int addr, int *valp)
410 {
411         int ret;
412
413         if (qlcnic_rom_lock(adapter) != 0)
414                 return -EIO;
415
416         ret = do_rom_fast_read(adapter, addr, valp);
417         qlcnic_rom_unlock(adapter);
418         return ret;
419 }
420
421 int qlcnic_pinit_from_rom(struct qlcnic_adapter *adapter)
422 {
423         int addr, val;
424         int i, n, init_delay;
425         struct crb_addr_pair *buf;
426         unsigned offset;
427         u32 off;
428         struct pci_dev *pdev = adapter->pdev;
429
430         /* resetall */
431         qlcnic_rom_lock(adapter);
432         QLCWR32(adapter, QLCNIC_ROMUSB_GLB_SW_RESET, 0xffffffff);
433         qlcnic_rom_unlock(adapter);
434
435         if (qlcnic_rom_fast_read(adapter, 0, &n) != 0 || (n != 0xcafecafe) ||
436                         qlcnic_rom_fast_read(adapter, 4, &n) != 0) {
437                 dev_err(&pdev->dev, "ERROR Reading crb_init area: val:%x\n", n);
438                 return -EIO;
439         }
440         offset = n & 0xffffU;
441         n = (n >> 16) & 0xffffU;
442
443         if (n >= 1024) {
444                 dev_err(&pdev->dev, "QLOGIC card flash not initialized.\n");
445                 return -EIO;
446         }
447
448         buf = kcalloc(n, sizeof(struct crb_addr_pair), GFP_KERNEL);
449         if (buf == NULL) {
450                 dev_err(&pdev->dev, "Unable to calloc memory for rom read.\n");
451                 return -ENOMEM;
452         }
453
454         for (i = 0; i < n; i++) {
455                 if (qlcnic_rom_fast_read(adapter, 8*i + 4*offset, &val) != 0 ||
456                 qlcnic_rom_fast_read(adapter, 8*i + 4*offset + 4, &addr) != 0) {
457                         kfree(buf);
458                         return -EIO;
459                 }
460
461                 buf[i].addr = addr;
462                 buf[i].data = val;
463         }
464
465         for (i = 0; i < n; i++) {
466
467                 off = qlcnic_decode_crb_addr(buf[i].addr);
468                 if (off == QLCNIC_ADDR_ERROR) {
469                         dev_err(&pdev->dev, "CRB init value out of range %x\n",
470                                         buf[i].addr);
471                         continue;
472                 }
473                 off += QLCNIC_PCI_CRBSPACE;
474
475                 if (off & 1)
476                         continue;
477
478                 /* skipping cold reboot MAGIC */
479                 if (off == QLCNIC_CAM_RAM(0x1fc))
480                         continue;
481                 if (off == (QLCNIC_CRB_I2C0 + 0x1c))
482                         continue;
483                 if (off == (ROMUSB_GLB + 0xbc)) /* do not reset PCI */
484                         continue;
485                 if (off == (ROMUSB_GLB + 0xa8))
486                         continue;
487                 if (off == (ROMUSB_GLB + 0xc8)) /* core clock */
488                         continue;
489                 if (off == (ROMUSB_GLB + 0x24)) /* MN clock */
490                         continue;
491                 if (off == (ROMUSB_GLB + 0x1c)) /* MS clock */
492                         continue;
493                 if ((off & 0x0ff00000) == QLCNIC_CRB_DDR_NET)
494                         continue;
495                 /* skip the function enable register */
496                 if (off == QLCNIC_PCIE_REG(PCIE_SETUP_FUNCTION))
497                         continue;
498                 if (off == QLCNIC_PCIE_REG(PCIE_SETUP_FUNCTION2))
499                         continue;
500                 if ((off & 0x0ff00000) == QLCNIC_CRB_SMB)
501                         continue;
502
503                 init_delay = 1;
504                 /* After writing this register, HW needs time for CRB */
505                 /* to quiet down (else crb_window returns 0xffffffff) */
506                 if (off == QLCNIC_ROMUSB_GLB_SW_RESET)
507                         init_delay = 1000;
508
509                 QLCWR32(adapter, off, buf[i].data);
510
511                 msleep(init_delay);
512         }
513         kfree(buf);
514
515         /* p2dn replyCount */
516         QLCWR32(adapter, QLCNIC_CRB_PEG_NET_D + 0xec, 0x1e);
517         /* disable_peg_cache 0 & 1*/
518         QLCWR32(adapter, QLCNIC_CRB_PEG_NET_D + 0x4c, 8);
519         QLCWR32(adapter, QLCNIC_CRB_PEG_NET_I + 0x4c, 8);
520
521         /* peg_clr_all */
522         QLCWR32(adapter, QLCNIC_CRB_PEG_NET_0 + 0x8, 0);
523         QLCWR32(adapter, QLCNIC_CRB_PEG_NET_0 + 0xc, 0);
524         QLCWR32(adapter, QLCNIC_CRB_PEG_NET_1 + 0x8, 0);
525         QLCWR32(adapter, QLCNIC_CRB_PEG_NET_1 + 0xc, 0);
526         QLCWR32(adapter, QLCNIC_CRB_PEG_NET_2 + 0x8, 0);
527         QLCWR32(adapter, QLCNIC_CRB_PEG_NET_2 + 0xc, 0);
528         QLCWR32(adapter, QLCNIC_CRB_PEG_NET_3 + 0x8, 0);
529         QLCWR32(adapter, QLCNIC_CRB_PEG_NET_3 + 0xc, 0);
530         return 0;
531 }
532
533 static int
534 qlcnic_has_mn(struct qlcnic_adapter *adapter)
535 {
536         u32 capability, flashed_ver;
537         capability = 0;
538
539         qlcnic_rom_fast_read(adapter,
540                         QLCNIC_FW_VERSION_OFFSET, (int *)&flashed_ver);
541         flashed_ver = QLCNIC_DECODE_VERSION(flashed_ver);
542
543         if (flashed_ver >= QLCNIC_VERSION_CODE(4, 0, 220)) {
544
545                 capability = QLCRD32(adapter, QLCNIC_PEG_TUNE_CAPABILITY);
546                 if (capability & QLCNIC_PEG_TUNE_MN_PRESENT)
547                         return 1;
548         }
549         return 0;
550 }
551
552 static
553 struct uni_table_desc *qlcnic_get_table_desc(const u8 *unirom, int section)
554 {
555         u32 i;
556         struct uni_table_desc *directory = (struct uni_table_desc *) &unirom[0];
557         __le32 entries = cpu_to_le32(directory->num_entries);
558
559         for (i = 0; i < entries; i++) {
560
561                 __le32 offs = cpu_to_le32(directory->findex) +
562                                 (i * cpu_to_le32(directory->entry_size));
563                 __le32 tab_type = cpu_to_le32(*((u32 *)&unirom[offs] + 8));
564
565                 if (tab_type == section)
566                         return (struct uni_table_desc *) &unirom[offs];
567         }
568
569         return NULL;
570 }
571
572 #define FILEHEADER_SIZE (14 * 4)
573
574 static int
575 qlcnic_validate_header(struct qlcnic_adapter *adapter)
576 {
577         const u8 *unirom = adapter->fw->data;
578         struct uni_table_desc *directory = (struct uni_table_desc *) &unirom[0];
579         __le32 fw_file_size = adapter->fw->size;
580         __le32 entries;
581         __le32 entry_size;
582         __le32 tab_size;
583
584         if (fw_file_size < FILEHEADER_SIZE)
585                 return -EINVAL;
586
587         entries = cpu_to_le32(directory->num_entries);
588         entry_size = cpu_to_le32(directory->entry_size);
589         tab_size = cpu_to_le32(directory->findex) + (entries * entry_size);
590
591         if (fw_file_size < tab_size)
592                 return -EINVAL;
593
594         return 0;
595 }
596
597 static int
598 qlcnic_validate_bootld(struct qlcnic_adapter *adapter)
599 {
600         struct uni_table_desc *tab_desc;
601         struct uni_data_desc *descr;
602         const u8 *unirom = adapter->fw->data;
603         int idx = cpu_to_le32(*((int *)&unirom[adapter->file_prd_off] +
604                                 QLCNIC_UNI_BOOTLD_IDX_OFF));
605         __le32 offs;
606         __le32 tab_size;
607         __le32 data_size;
608
609         tab_desc = qlcnic_get_table_desc(unirom, QLCNIC_UNI_DIR_SECT_BOOTLD);
610
611         if (!tab_desc)
612                 return -EINVAL;
613
614         tab_size = cpu_to_le32(tab_desc->findex) +
615                         (cpu_to_le32(tab_desc->entry_size * (idx + 1)));
616
617         if (adapter->fw->size < tab_size)
618                 return -EINVAL;
619
620         offs = cpu_to_le32(tab_desc->findex) +
621                 (cpu_to_le32(tab_desc->entry_size) * (idx));
622         descr = (struct uni_data_desc *)&unirom[offs];
623
624         data_size = descr->findex + cpu_to_le32(descr->size);
625
626         if (adapter->fw->size < data_size)
627                 return -EINVAL;
628
629         return 0;
630 }
631
632 static int
633 qlcnic_validate_fw(struct qlcnic_adapter *adapter)
634 {
635         struct uni_table_desc *tab_desc;
636         struct uni_data_desc *descr;
637         const u8 *unirom = adapter->fw->data;
638         int idx = cpu_to_le32(*((int *)&unirom[adapter->file_prd_off] +
639                                 QLCNIC_UNI_FIRMWARE_IDX_OFF));
640         __le32 offs;
641         __le32 tab_size;
642         __le32 data_size;
643
644         tab_desc = qlcnic_get_table_desc(unirom, QLCNIC_UNI_DIR_SECT_FW);
645
646         if (!tab_desc)
647                 return -EINVAL;
648
649         tab_size = cpu_to_le32(tab_desc->findex) +
650                         (cpu_to_le32(tab_desc->entry_size * (idx + 1)));
651
652         if (adapter->fw->size < tab_size)
653                 return -EINVAL;
654
655         offs = cpu_to_le32(tab_desc->findex) +
656                 (cpu_to_le32(tab_desc->entry_size) * (idx));
657         descr = (struct uni_data_desc *)&unirom[offs];
658         data_size = descr->findex + cpu_to_le32(descr->size);
659
660         if (adapter->fw->size < data_size)
661                 return -EINVAL;
662
663         return 0;
664 }
665
666 static int
667 qlcnic_validate_product_offs(struct qlcnic_adapter *adapter)
668 {
669         struct uni_table_desc *ptab_descr;
670         const u8 *unirom = adapter->fw->data;
671         int mn_present = qlcnic_has_mn(adapter);
672         __le32 entries;
673         __le32 entry_size;
674         __le32 tab_size;
675         u32 i;
676
677         ptab_descr = qlcnic_get_table_desc(unirom,
678                                 QLCNIC_UNI_DIR_SECT_PRODUCT_TBL);
679         if (!ptab_descr)
680                 return -EINVAL;
681
682         entries = cpu_to_le32(ptab_descr->num_entries);
683         entry_size = cpu_to_le32(ptab_descr->entry_size);
684         tab_size = cpu_to_le32(ptab_descr->findex) + (entries * entry_size);
685
686         if (adapter->fw->size < tab_size)
687                 return -EINVAL;
688
689 nomn:
690         for (i = 0; i < entries; i++) {
691
692                 __le32 flags, file_chiprev, offs;
693                 u8 chiprev = adapter->ahw.revision_id;
694                 u32 flagbit;
695
696                 offs = cpu_to_le32(ptab_descr->findex) +
697                                 (i * cpu_to_le32(ptab_descr->entry_size));
698                 flags = cpu_to_le32(*((int *)&unirom[offs] +
699                                                 QLCNIC_UNI_FLAGS_OFF));
700                 file_chiprev = cpu_to_le32(*((int *)&unirom[offs] +
701                                                 QLCNIC_UNI_CHIP_REV_OFF));
702
703                 flagbit = mn_present ? 1 : 2;
704
705                 if ((chiprev == file_chiprev) &&
706                                         ((1ULL << flagbit) & flags)) {
707                         adapter->file_prd_off = offs;
708                         return 0;
709                 }
710         }
711         if (mn_present) {
712                 mn_present = 0;
713                 goto nomn;
714         }
715         return -EINVAL;
716 }
717
718 static int
719 qlcnic_validate_unified_romimage(struct qlcnic_adapter *adapter)
720 {
721         if (qlcnic_validate_header(adapter)) {
722                 dev_err(&adapter->pdev->dev,
723                                 "unified image: header validation failed\n");
724                 return -EINVAL;
725         }
726
727         if (qlcnic_validate_product_offs(adapter)) {
728                 dev_err(&adapter->pdev->dev,
729                                 "unified image: product validation failed\n");
730                 return -EINVAL;
731         }
732
733         if (qlcnic_validate_bootld(adapter)) {
734                 dev_err(&adapter->pdev->dev,
735                                 "unified image: bootld validation failed\n");
736                 return -EINVAL;
737         }
738
739         if (qlcnic_validate_fw(adapter)) {
740                 dev_err(&adapter->pdev->dev,
741                                 "unified image: firmware validation failed\n");
742                 return -EINVAL;
743         }
744
745         return 0;
746 }
747
748 static
749 struct uni_data_desc *qlcnic_get_data_desc(struct qlcnic_adapter *adapter,
750                         u32 section, u32 idx_offset)
751 {
752         const u8 *unirom = adapter->fw->data;
753         int idx = cpu_to_le32(*((int *)&unirom[adapter->file_prd_off] +
754                                                                 idx_offset));
755         struct uni_table_desc *tab_desc;
756         __le32 offs;
757
758         tab_desc = qlcnic_get_table_desc(unirom, section);
759
760         if (tab_desc == NULL)
761                 return NULL;
762
763         offs = cpu_to_le32(tab_desc->findex) +
764                         (cpu_to_le32(tab_desc->entry_size) * idx);
765
766         return (struct uni_data_desc *)&unirom[offs];
767 }
768
769 static u8 *
770 qlcnic_get_bootld_offs(struct qlcnic_adapter *adapter)
771 {
772         u32 offs = QLCNIC_BOOTLD_START;
773
774         if (adapter->fw_type == QLCNIC_UNIFIED_ROMIMAGE)
775                 offs = cpu_to_le32((qlcnic_get_data_desc(adapter,
776                                         QLCNIC_UNI_DIR_SECT_BOOTLD,
777                                         QLCNIC_UNI_BOOTLD_IDX_OFF))->findex);
778
779         return (u8 *)&adapter->fw->data[offs];
780 }
781
782 static u8 *
783 qlcnic_get_fw_offs(struct qlcnic_adapter *adapter)
784 {
785         u32 offs = QLCNIC_IMAGE_START;
786
787         if (adapter->fw_type == QLCNIC_UNIFIED_ROMIMAGE)
788                 offs = cpu_to_le32((qlcnic_get_data_desc(adapter,
789                                         QLCNIC_UNI_DIR_SECT_FW,
790                                         QLCNIC_UNI_FIRMWARE_IDX_OFF))->findex);
791
792         return (u8 *)&adapter->fw->data[offs];
793 }
794
795 static __le32
796 qlcnic_get_fw_size(struct qlcnic_adapter *adapter)
797 {
798         if (adapter->fw_type == QLCNIC_UNIFIED_ROMIMAGE)
799                 return cpu_to_le32((qlcnic_get_data_desc(adapter,
800                                         QLCNIC_UNI_DIR_SECT_FW,
801                                         QLCNIC_UNI_FIRMWARE_IDX_OFF))->size);
802         else
803                 return cpu_to_le32(
804                         *(u32 *)&adapter->fw->data[QLCNIC_FW_SIZE_OFFSET]);
805 }
806
807 static __le32
808 qlcnic_get_fw_version(struct qlcnic_adapter *adapter)
809 {
810         struct uni_data_desc *fw_data_desc;
811         const struct firmware *fw = adapter->fw;
812         __le32 major, minor, sub;
813         const u8 *ver_str;
814         int i, ret;
815
816         if (adapter->fw_type != QLCNIC_UNIFIED_ROMIMAGE)
817                 return cpu_to_le32(*(u32 *)&fw->data[QLCNIC_FW_VERSION_OFFSET]);
818
819         fw_data_desc = qlcnic_get_data_desc(adapter, QLCNIC_UNI_DIR_SECT_FW,
820                         QLCNIC_UNI_FIRMWARE_IDX_OFF);
821         ver_str = fw->data + cpu_to_le32(fw_data_desc->findex) +
822                 cpu_to_le32(fw_data_desc->size) - 17;
823
824         for (i = 0; i < 12; i++) {
825                 if (!strncmp(&ver_str[i], "REV=", 4)) {
826                         ret = sscanf(&ver_str[i+4], "%u.%u.%u ",
827                                         &major, &minor, &sub);
828                         if (ret != 3)
829                                 return 0;
830                         else
831                                 return major + (minor << 8) + (sub << 16);
832                 }
833         }
834
835         return 0;
836 }
837
838 static __le32
839 qlcnic_get_bios_version(struct qlcnic_adapter *adapter)
840 {
841         const struct firmware *fw = adapter->fw;
842         __le32 bios_ver, prd_off = adapter->file_prd_off;
843
844         if (adapter->fw_type != QLCNIC_UNIFIED_ROMIMAGE)
845                 return cpu_to_le32(
846                         *(u32 *)&fw->data[QLCNIC_BIOS_VERSION_OFFSET]);
847
848         bios_ver = cpu_to_le32(*((u32 *) (&fw->data[prd_off])
849                                 + QLCNIC_UNI_BIOS_VERSION_OFF));
850
851         return (bios_ver << 16) + ((bios_ver >> 8) & 0xff00) + (bios_ver >> 24);
852 }
853
854 int
855 qlcnic_need_fw_reset(struct qlcnic_adapter *adapter)
856 {
857         u32 count, old_count;
858         u32 val, version, major, minor, build;
859         int i, timeout;
860
861         if (adapter->need_fw_reset)
862                 return 1;
863
864         /* last attempt had failed */
865         if (QLCRD32(adapter, CRB_CMDPEG_STATE) == PHAN_INITIALIZE_FAILED)
866                 return 1;
867
868         old_count = QLCRD32(adapter, QLCNIC_PEG_ALIVE_COUNTER);
869
870         for (i = 0; i < 10; i++) {
871
872                 timeout = msleep_interruptible(200);
873                 if (timeout) {
874                         QLCWR32(adapter, CRB_CMDPEG_STATE,
875                                         PHAN_INITIALIZE_FAILED);
876                         return -EINTR;
877                 }
878
879                 count = QLCRD32(adapter, QLCNIC_PEG_ALIVE_COUNTER);
880                 if (count != old_count)
881                         break;
882         }
883
884         /* firmware is dead */
885         if (count == old_count)
886                 return 1;
887
888         /* check if we have got newer or different file firmware */
889         if (adapter->fw) {
890
891                 val = qlcnic_get_fw_version(adapter);
892
893                 version = QLCNIC_DECODE_VERSION(val);
894
895                 major = QLCRD32(adapter, QLCNIC_FW_VERSION_MAJOR);
896                 minor = QLCRD32(adapter, QLCNIC_FW_VERSION_MINOR);
897                 build = QLCRD32(adapter, QLCNIC_FW_VERSION_SUB);
898
899                 if (version > QLCNIC_VERSION_CODE(major, minor, build))
900                         return 1;
901         }
902
903         return 0;
904 }
905
906 static const char *fw_name[] = {
907         QLCNIC_UNIFIED_ROMIMAGE_NAME,
908         QLCNIC_FLASH_ROMIMAGE_NAME,
909 };
910
911 int
912 qlcnic_load_firmware(struct qlcnic_adapter *adapter)
913 {
914         u64 *ptr64;
915         u32 i, flashaddr, size;
916         const struct firmware *fw = adapter->fw;
917         struct pci_dev *pdev = adapter->pdev;
918
919         dev_info(&pdev->dev, "loading firmware from %s\n",
920                         fw_name[adapter->fw_type]);
921
922         if (fw) {
923                 __le64 data;
924
925                 size = (QLCNIC_IMAGE_START - QLCNIC_BOOTLD_START) / 8;
926
927                 ptr64 = (u64 *)qlcnic_get_bootld_offs(adapter);
928                 flashaddr = QLCNIC_BOOTLD_START;
929
930                 for (i = 0; i < size; i++) {
931                         data = cpu_to_le64(ptr64[i]);
932
933                         if (qlcnic_pci_mem_write_2M(adapter, flashaddr, data))
934                                 return -EIO;
935
936                         flashaddr += 8;
937                 }
938
939                 size = (__force u32)qlcnic_get_fw_size(adapter) / 8;
940
941                 ptr64 = (u64 *)qlcnic_get_fw_offs(adapter);
942                 flashaddr = QLCNIC_IMAGE_START;
943
944                 for (i = 0; i < size; i++) {
945                         data = cpu_to_le64(ptr64[i]);
946
947                         if (qlcnic_pci_mem_write_2M(adapter,
948                                                 flashaddr, data))
949                                 return -EIO;
950
951                         flashaddr += 8;
952                 }
953         } else {
954                 u64 data;
955                 u32 hi, lo;
956
957                 size = (QLCNIC_IMAGE_START - QLCNIC_BOOTLD_START) / 8;
958                 flashaddr = QLCNIC_BOOTLD_START;
959
960                 for (i = 0; i < size; i++) {
961                         if (qlcnic_rom_fast_read(adapter,
962                                         flashaddr, (int *)&lo) != 0)
963                                 return -EIO;
964                         if (qlcnic_rom_fast_read(adapter,
965                                         flashaddr + 4, (int *)&hi) != 0)
966                                 return -EIO;
967
968                         data = (((u64)hi << 32) | lo);
969
970                         if (qlcnic_pci_mem_write_2M(adapter,
971                                                 flashaddr, data))
972                                 return -EIO;
973
974                         flashaddr += 8;
975                 }
976         }
977         msleep(1);
978
979         QLCWR32(adapter, QLCNIC_CRB_PEG_NET_0 + 0x18, 0x1020);
980         QLCWR32(adapter, QLCNIC_ROMUSB_GLB_SW_RESET, 0x80001e);
981         return 0;
982 }
983
984 static int
985 qlcnic_validate_firmware(struct qlcnic_adapter *adapter)
986 {
987         __le32 val;
988         u32 ver, min_ver, bios, min_size;
989         struct pci_dev *pdev = adapter->pdev;
990         const struct firmware *fw = adapter->fw;
991         u8 fw_type = adapter->fw_type;
992
993         if (fw_type == QLCNIC_UNIFIED_ROMIMAGE) {
994                 if (qlcnic_validate_unified_romimage(adapter))
995                         return -EINVAL;
996
997                 min_size = QLCNIC_UNI_FW_MIN_SIZE;
998         } else {
999                 val = cpu_to_le32(*(u32 *)&fw->data[QLCNIC_FW_MAGIC_OFFSET]);
1000                 if ((__force u32)val != QLCNIC_BDINFO_MAGIC)
1001                         return -EINVAL;
1002
1003                 min_size = QLCNIC_FW_MIN_SIZE;
1004         }
1005
1006         if (fw->size < min_size)
1007                 return -EINVAL;
1008
1009         val = qlcnic_get_fw_version(adapter);
1010
1011         min_ver = QLCNIC_VERSION_CODE(4, 0, 216);
1012
1013         ver = QLCNIC_DECODE_VERSION(val);
1014
1015         if ((_major(ver) > _QLCNIC_LINUX_MAJOR) || (ver < min_ver)) {
1016                 dev_err(&pdev->dev,
1017                                 "%s: firmware version %d.%d.%d unsupported\n",
1018                 fw_name[fw_type], _major(ver), _minor(ver), _build(ver));
1019                 return -EINVAL;
1020         }
1021
1022         val = qlcnic_get_bios_version(adapter);
1023         qlcnic_rom_fast_read(adapter, QLCNIC_BIOS_VERSION_OFFSET, (int *)&bios);
1024         if ((__force u32)val != bios) {
1025                 dev_err(&pdev->dev, "%s: firmware bios is incompatible\n",
1026                                 fw_name[fw_type]);
1027                 return -EINVAL;
1028         }
1029
1030         /* check if flashed firmware is newer */
1031         if (qlcnic_rom_fast_read(adapter,
1032                         QLCNIC_FW_VERSION_OFFSET, (int *)&val))
1033                 return -EIO;
1034
1035         val = QLCNIC_DECODE_VERSION(val);
1036         if (val > ver) {
1037                 dev_info(&pdev->dev, "%s: firmware is older than flash\n",
1038                                 fw_name[fw_type]);
1039                 return -EINVAL;
1040         }
1041
1042         QLCWR32(adapter, QLCNIC_CAM_RAM(0x1fc), QLCNIC_BDINFO_MAGIC);
1043         return 0;
1044 }
1045
1046 static void
1047 qlcnic_get_next_fwtype(struct qlcnic_adapter *adapter)
1048 {
1049         u8 fw_type;
1050
1051         switch (adapter->fw_type) {
1052         case QLCNIC_UNKNOWN_ROMIMAGE:
1053                 fw_type = QLCNIC_UNIFIED_ROMIMAGE;
1054                 break;
1055
1056         case QLCNIC_UNIFIED_ROMIMAGE:
1057         default:
1058                 fw_type = QLCNIC_FLASH_ROMIMAGE;
1059                 break;
1060         }
1061
1062         adapter->fw_type = fw_type;
1063 }
1064
1065
1066
1067 void qlcnic_request_firmware(struct qlcnic_adapter *adapter)
1068 {
1069         struct pci_dev *pdev = adapter->pdev;
1070         int rc;
1071
1072         adapter->fw_type = QLCNIC_UNKNOWN_ROMIMAGE;
1073
1074 next:
1075         qlcnic_get_next_fwtype(adapter);
1076
1077         if (adapter->fw_type == QLCNIC_FLASH_ROMIMAGE) {
1078                 adapter->fw = NULL;
1079         } else {
1080                 rc = request_firmware(&adapter->fw,
1081                                 fw_name[adapter->fw_type], &pdev->dev);
1082                 if (rc != 0)
1083                         goto next;
1084
1085                 rc = qlcnic_validate_firmware(adapter);
1086                 if (rc != 0) {
1087                         release_firmware(adapter->fw);
1088                         msleep(1);
1089                         goto next;
1090                 }
1091         }
1092 }
1093
1094
1095 void
1096 qlcnic_release_firmware(struct qlcnic_adapter *adapter)
1097 {
1098         if (adapter->fw)
1099                 release_firmware(adapter->fw);
1100         adapter->fw = NULL;
1101 }
1102
1103 int qlcnic_phantom_init(struct qlcnic_adapter *adapter)
1104 {
1105         u32 val;
1106         int retries = 60;
1107
1108         do {
1109                 val = QLCRD32(adapter, CRB_CMDPEG_STATE);
1110
1111                 switch (val) {
1112                 case PHAN_INITIALIZE_COMPLETE:
1113                 case PHAN_INITIALIZE_ACK:
1114                         return 0;
1115                 case PHAN_INITIALIZE_FAILED:
1116                         goto out_err;
1117                 default:
1118                         break;
1119                 }
1120
1121                 msleep(500);
1122
1123         } while (--retries);
1124
1125         QLCWR32(adapter, CRB_CMDPEG_STATE, PHAN_INITIALIZE_FAILED);
1126
1127 out_err:
1128         dev_err(&adapter->pdev->dev, "firmware init failed\n");
1129         return -EIO;
1130 }
1131
1132 static int
1133 qlcnic_receive_peg_ready(struct qlcnic_adapter *adapter)
1134 {
1135         u32 val;
1136         int retries = 2000;
1137
1138         do {
1139                 val = QLCRD32(adapter, CRB_RCVPEG_STATE);
1140
1141                 if (val == PHAN_PEG_RCV_INITIALIZED)
1142                         return 0;
1143
1144                 msleep(10);
1145
1146         } while (--retries);
1147
1148         if (!retries) {
1149                 dev_err(&adapter->pdev->dev, "Receive Peg initialization not "
1150                               "complete, state: 0x%x.\n", val);
1151                 return -EIO;
1152         }
1153
1154         return 0;
1155 }
1156
1157 int qlcnic_init_firmware(struct qlcnic_adapter *adapter)
1158 {
1159         int err;
1160
1161         err = qlcnic_receive_peg_ready(adapter);
1162         if (err)
1163                 return err;
1164
1165         QLCWR32(adapter, CRB_NIC_CAPABILITIES_HOST, INTR_SCHEME_PERPORT);
1166         QLCWR32(adapter, CRB_NIC_MSI_MODE_HOST, MSI_MODE_MULTIFUNC);
1167         QLCWR32(adapter, CRB_MPORT_MODE, MPORT_MULTI_FUNCTION_MODE);
1168         QLCWR32(adapter, CRB_CMDPEG_STATE, PHAN_INITIALIZE_ACK);
1169
1170         return err;
1171 }
1172
1173 static void
1174 qlcnic_handle_linkevent(struct qlcnic_adapter *adapter,
1175                                 struct qlcnic_fw_msg *msg)
1176 {
1177         u32 cable_OUI;
1178         u16 cable_len;
1179         u16 link_speed;
1180         u8  link_status, module, duplex, autoneg;
1181         struct net_device *netdev = adapter->netdev;
1182
1183         adapter->has_link_events = 1;
1184
1185         cable_OUI = msg->body[1] & 0xffffffff;
1186         cable_len = (msg->body[1] >> 32) & 0xffff;
1187         link_speed = (msg->body[1] >> 48) & 0xffff;
1188
1189         link_status = msg->body[2] & 0xff;
1190         duplex = (msg->body[2] >> 16) & 0xff;
1191         autoneg = (msg->body[2] >> 24) & 0xff;
1192
1193         module = (msg->body[2] >> 8) & 0xff;
1194         if (module == LINKEVENT_MODULE_TWINAX_UNSUPPORTED_CABLE)
1195                 dev_info(&netdev->dev, "unsupported cable: OUI 0x%x, "
1196                                 "length %d\n", cable_OUI, cable_len);
1197         else if (module == LINKEVENT_MODULE_TWINAX_UNSUPPORTED_CABLELEN)
1198                 dev_info(&netdev->dev, "unsupported cable length %d\n",
1199                                 cable_len);
1200
1201         qlcnic_advert_link_change(adapter, link_status);
1202
1203         if (duplex == LINKEVENT_FULL_DUPLEX)
1204                 adapter->link_duplex = DUPLEX_FULL;
1205         else
1206                 adapter->link_duplex = DUPLEX_HALF;
1207
1208         adapter->module_type = module;
1209         adapter->link_autoneg = autoneg;
1210         adapter->link_speed = link_speed;
1211 }
1212
1213 static void
1214 qlcnic_handle_fw_message(int desc_cnt, int index,
1215                 struct qlcnic_host_sds_ring *sds_ring)
1216 {
1217         struct qlcnic_fw_msg msg;
1218         struct status_desc *desc;
1219         int i = 0, opcode;
1220
1221         while (desc_cnt > 0 && i < 8) {
1222                 desc = &sds_ring->desc_head[index];
1223                 msg.words[i++] = le64_to_cpu(desc->status_desc_data[0]);
1224                 msg.words[i++] = le64_to_cpu(desc->status_desc_data[1]);
1225
1226                 index = get_next_index(index, sds_ring->num_desc);
1227                 desc_cnt--;
1228         }
1229
1230         opcode = qlcnic_get_nic_msg_opcode(msg.body[0]);
1231         switch (opcode) {
1232         case QLCNIC_C2H_OPCODE_GET_LINKEVENT_RESPONSE:
1233                 qlcnic_handle_linkevent(sds_ring->adapter, &msg);
1234                 break;
1235         default:
1236                 break;
1237         }
1238 }
1239
1240 static int
1241 qlcnic_alloc_rx_skb(struct qlcnic_adapter *adapter,
1242                 struct qlcnic_host_rds_ring *rds_ring,
1243                 struct qlcnic_rx_buffer *buffer)
1244 {
1245         struct sk_buff *skb;
1246         dma_addr_t dma;
1247         struct pci_dev *pdev = adapter->pdev;
1248
1249         buffer->skb = dev_alloc_skb(rds_ring->skb_size);
1250         if (!buffer->skb) {
1251                 adapter->stats.skb_alloc_failure++;
1252                 return -ENOMEM;
1253         }
1254
1255         skb = buffer->skb;
1256
1257         if (!adapter->ahw.cut_through)
1258                 skb_reserve(skb, 2);
1259
1260         dma = pci_map_single(pdev, skb->data,
1261                         rds_ring->dma_size, PCI_DMA_FROMDEVICE);
1262
1263         if (pci_dma_mapping_error(pdev, dma)) {
1264                 dev_kfree_skb_any(skb);
1265                 buffer->skb = NULL;
1266                 return -ENOMEM;
1267         }
1268
1269         buffer->skb = skb;
1270         buffer->dma = dma;
1271         buffer->state = QLCNIC_BUFFER_BUSY;
1272
1273         return 0;
1274 }
1275
1276 static struct sk_buff *qlcnic_process_rxbuf(struct qlcnic_adapter *adapter,
1277                 struct qlcnic_host_rds_ring *rds_ring, u16 index, u16 cksum)
1278 {
1279         struct qlcnic_rx_buffer *buffer;
1280         struct sk_buff *skb;
1281
1282         buffer = &rds_ring->rx_buf_arr[index];
1283
1284         pci_unmap_single(adapter->pdev, buffer->dma, rds_ring->dma_size,
1285                         PCI_DMA_FROMDEVICE);
1286
1287         skb = buffer->skb;
1288         if (!skb)
1289                 goto no_skb;
1290
1291         if (likely(adapter->rx_csum && cksum == STATUS_CKSUM_OK)) {
1292                 adapter->stats.csummed++;
1293                 skb->ip_summed = CHECKSUM_UNNECESSARY;
1294         } else {
1295                 skb->ip_summed = CHECKSUM_NONE;
1296         }
1297
1298         skb->dev = adapter->netdev;
1299
1300         buffer->skb = NULL;
1301 no_skb:
1302         buffer->state = QLCNIC_BUFFER_FREE;
1303         return skb;
1304 }
1305
1306 static struct qlcnic_rx_buffer *
1307 qlcnic_process_rcv(struct qlcnic_adapter *adapter,
1308                 struct qlcnic_host_sds_ring *sds_ring,
1309                 int ring, u64 sts_data0)
1310 {
1311         struct net_device *netdev = adapter->netdev;
1312         struct qlcnic_recv_context *recv_ctx = &adapter->recv_ctx;
1313         struct qlcnic_rx_buffer *buffer;
1314         struct sk_buff *skb;
1315         struct qlcnic_host_rds_ring *rds_ring;
1316         int index, length, cksum, pkt_offset;
1317
1318         if (unlikely(ring >= adapter->max_rds_rings))
1319                 return NULL;
1320
1321         rds_ring = &recv_ctx->rds_rings[ring];
1322
1323         index = qlcnic_get_sts_refhandle(sts_data0);
1324         if (unlikely(index >= rds_ring->num_desc))
1325                 return NULL;
1326
1327         buffer = &rds_ring->rx_buf_arr[index];
1328
1329         length = qlcnic_get_sts_totallength(sts_data0);
1330         cksum  = qlcnic_get_sts_status(sts_data0);
1331         pkt_offset = qlcnic_get_sts_pkt_offset(sts_data0);
1332
1333         skb = qlcnic_process_rxbuf(adapter, rds_ring, index, cksum);
1334         if (!skb)
1335                 return buffer;
1336
1337         if (length > rds_ring->skb_size)
1338                 skb_put(skb, rds_ring->skb_size);
1339         else
1340                 skb_put(skb, length);
1341
1342         if (pkt_offset)
1343                 skb_pull(skb, pkt_offset);
1344
1345         skb->truesize = skb->len + sizeof(struct sk_buff);
1346         skb->protocol = eth_type_trans(skb, netdev);
1347
1348         napi_gro_receive(&sds_ring->napi, skb);
1349
1350         adapter->stats.rx_pkts++;
1351         adapter->stats.rxbytes += length;
1352
1353         return buffer;
1354 }
1355
1356 #define QLC_TCP_HDR_SIZE            20
1357 #define QLC_TCP_TS_OPTION_SIZE      12
1358 #define QLC_TCP_TS_HDR_SIZE         (QLC_TCP_HDR_SIZE + QLC_TCP_TS_OPTION_SIZE)
1359
1360 static struct qlcnic_rx_buffer *
1361 qlcnic_process_lro(struct qlcnic_adapter *adapter,
1362                 struct qlcnic_host_sds_ring *sds_ring,
1363                 int ring, u64 sts_data0, u64 sts_data1)
1364 {
1365         struct net_device *netdev = adapter->netdev;
1366         struct qlcnic_recv_context *recv_ctx = &adapter->recv_ctx;
1367         struct qlcnic_rx_buffer *buffer;
1368         struct sk_buff *skb;
1369         struct qlcnic_host_rds_ring *rds_ring;
1370         struct iphdr *iph;
1371         struct tcphdr *th;
1372         bool push, timestamp;
1373         int l2_hdr_offset, l4_hdr_offset;
1374         int index;
1375         u16 lro_length, length, data_offset;
1376         u32 seq_number;
1377
1378         if (unlikely(ring > adapter->max_rds_rings))
1379                 return NULL;
1380
1381         rds_ring = &recv_ctx->rds_rings[ring];
1382
1383         index = qlcnic_get_lro_sts_refhandle(sts_data0);
1384         if (unlikely(index > rds_ring->num_desc))
1385                 return NULL;
1386
1387         buffer = &rds_ring->rx_buf_arr[index];
1388
1389         timestamp = qlcnic_get_lro_sts_timestamp(sts_data0);
1390         lro_length = qlcnic_get_lro_sts_length(sts_data0);
1391         l2_hdr_offset = qlcnic_get_lro_sts_l2_hdr_offset(sts_data0);
1392         l4_hdr_offset = qlcnic_get_lro_sts_l4_hdr_offset(sts_data0);
1393         push = qlcnic_get_lro_sts_push_flag(sts_data0);
1394         seq_number = qlcnic_get_lro_sts_seq_number(sts_data1);
1395
1396         skb = qlcnic_process_rxbuf(adapter, rds_ring, index, STATUS_CKSUM_OK);
1397         if (!skb)
1398                 return buffer;
1399
1400         if (timestamp)
1401                 data_offset = l4_hdr_offset + QLC_TCP_TS_HDR_SIZE;
1402         else
1403                 data_offset = l4_hdr_offset + QLC_TCP_HDR_SIZE;
1404
1405         skb_put(skb, lro_length + data_offset);
1406
1407         skb->truesize = skb->len + sizeof(struct sk_buff) + skb_headroom(skb);
1408
1409         skb_pull(skb, l2_hdr_offset);
1410         skb->protocol = eth_type_trans(skb, netdev);
1411
1412         iph = (struct iphdr *)skb->data;
1413         th = (struct tcphdr *)(skb->data + (iph->ihl << 2));
1414
1415         length = (iph->ihl << 2) + (th->doff << 2) + lro_length;
1416         iph->tot_len = htons(length);
1417         iph->check = 0;
1418         iph->check = ip_fast_csum((unsigned char *)iph, iph->ihl);
1419         th->psh = push;
1420         th->seq = htonl(seq_number);
1421
1422         length = skb->len;
1423
1424         netif_receive_skb(skb);
1425
1426         adapter->stats.lro_pkts++;
1427         adapter->stats.lrobytes += length;
1428
1429         return buffer;
1430 }
1431
1432 int
1433 qlcnic_process_rcv_ring(struct qlcnic_host_sds_ring *sds_ring, int max)
1434 {
1435         struct qlcnic_adapter *adapter = sds_ring->adapter;
1436         struct list_head *cur;
1437         struct status_desc *desc;
1438         struct qlcnic_rx_buffer *rxbuf;
1439         u64 sts_data0, sts_data1;
1440
1441         int count = 0;
1442         int opcode, ring, desc_cnt;
1443         u32 consumer = sds_ring->consumer;
1444
1445         while (count < max) {
1446                 desc = &sds_ring->desc_head[consumer];
1447                 sts_data0 = le64_to_cpu(desc->status_desc_data[0]);
1448
1449                 if (!(sts_data0 & STATUS_OWNER_HOST))
1450                         break;
1451
1452                 desc_cnt = qlcnic_get_sts_desc_cnt(sts_data0);
1453                 opcode = qlcnic_get_sts_opcode(sts_data0);
1454
1455                 switch (opcode) {
1456                 case QLCNIC_RXPKT_DESC:
1457                 case QLCNIC_OLD_RXPKT_DESC:
1458                 case QLCNIC_SYN_OFFLOAD:
1459                         ring = qlcnic_get_sts_type(sts_data0);
1460                         rxbuf = qlcnic_process_rcv(adapter, sds_ring,
1461                                         ring, sts_data0);
1462                         break;
1463                 case QLCNIC_LRO_DESC:
1464                         ring = qlcnic_get_lro_sts_type(sts_data0);
1465                         sts_data1 = le64_to_cpu(desc->status_desc_data[1]);
1466                         rxbuf = qlcnic_process_lro(adapter, sds_ring,
1467                                         ring, sts_data0, sts_data1);
1468                         break;
1469                 case QLCNIC_RESPONSE_DESC:
1470                         qlcnic_handle_fw_message(desc_cnt, consumer, sds_ring);
1471                 default:
1472                         goto skip;
1473                 }
1474
1475                 WARN_ON(desc_cnt > 1);
1476
1477                 if (rxbuf)
1478                         list_add_tail(&rxbuf->list, &sds_ring->free_list[ring]);
1479
1480 skip:
1481                 for (; desc_cnt > 0; desc_cnt--) {
1482                         desc = &sds_ring->desc_head[consumer];
1483                         desc->status_desc_data[0] =
1484                                 cpu_to_le64(STATUS_OWNER_PHANTOM);
1485                         consumer = get_next_index(consumer, sds_ring->num_desc);
1486                 }
1487                 count++;
1488         }
1489
1490         for (ring = 0; ring < adapter->max_rds_rings; ring++) {
1491                 struct qlcnic_host_rds_ring *rds_ring =
1492                         &adapter->recv_ctx.rds_rings[ring];
1493
1494                 if (!list_empty(&sds_ring->free_list[ring])) {
1495                         list_for_each(cur, &sds_ring->free_list[ring]) {
1496                                 rxbuf = list_entry(cur,
1497                                                 struct qlcnic_rx_buffer, list);
1498                                 qlcnic_alloc_rx_skb(adapter, rds_ring, rxbuf);
1499                         }
1500                         spin_lock(&rds_ring->lock);
1501                         list_splice_tail_init(&sds_ring->free_list[ring],
1502                                                 &rds_ring->free_list);
1503                         spin_unlock(&rds_ring->lock);
1504                 }
1505
1506                 qlcnic_post_rx_buffers_nodb(adapter, rds_ring);
1507         }
1508
1509         if (count) {
1510                 sds_ring->consumer = consumer;
1511                 writel(consumer, sds_ring->crb_sts_consumer);
1512         }
1513
1514         return count;
1515 }
1516
1517 void
1518 qlcnic_post_rx_buffers(struct qlcnic_adapter *adapter, u32 ringid,
1519         struct qlcnic_host_rds_ring *rds_ring)
1520 {
1521         struct rcv_desc *pdesc;
1522         struct qlcnic_rx_buffer *buffer;
1523         int producer, count = 0;
1524         struct list_head *head;
1525
1526         producer = rds_ring->producer;
1527
1528         spin_lock(&rds_ring->lock);
1529         head = &rds_ring->free_list;
1530         while (!list_empty(head)) {
1531
1532                 buffer = list_entry(head->next, struct qlcnic_rx_buffer, list);
1533
1534                 if (!buffer->skb) {
1535                         if (qlcnic_alloc_rx_skb(adapter, rds_ring, buffer))
1536                                 break;
1537                 }
1538
1539                 count++;
1540                 list_del(&buffer->list);
1541
1542                 /* make a rcv descriptor  */
1543                 pdesc = &rds_ring->desc_head[producer];
1544                 pdesc->addr_buffer = cpu_to_le64(buffer->dma);
1545                 pdesc->reference_handle = cpu_to_le16(buffer->ref_handle);
1546                 pdesc->buffer_length = cpu_to_le32(rds_ring->dma_size);
1547
1548                 producer = get_next_index(producer, rds_ring->num_desc);
1549         }
1550         spin_unlock(&rds_ring->lock);
1551
1552         if (count) {
1553                 rds_ring->producer = producer;
1554                 writel((producer-1) & (rds_ring->num_desc-1),
1555                                 rds_ring->crb_rcv_producer);
1556         }
1557 }
1558
1559 static void
1560 qlcnic_post_rx_buffers_nodb(struct qlcnic_adapter *adapter,
1561                 struct qlcnic_host_rds_ring *rds_ring)
1562 {
1563         struct rcv_desc *pdesc;
1564         struct qlcnic_rx_buffer *buffer;
1565         int producer, count = 0;
1566         struct list_head *head;
1567
1568         producer = rds_ring->producer;
1569         if (!spin_trylock(&rds_ring->lock))
1570                 return;
1571
1572         head = &rds_ring->free_list;
1573         while (!list_empty(head)) {
1574
1575                 buffer = list_entry(head->next, struct qlcnic_rx_buffer, list);
1576
1577                 if (!buffer->skb) {
1578                         if (qlcnic_alloc_rx_skb(adapter, rds_ring, buffer))
1579                                 break;
1580                 }
1581
1582                 count++;
1583                 list_del(&buffer->list);
1584
1585                 /* make a rcv descriptor  */
1586                 pdesc = &rds_ring->desc_head[producer];
1587                 pdesc->reference_handle = cpu_to_le16(buffer->ref_handle);
1588                 pdesc->buffer_length = cpu_to_le32(rds_ring->dma_size);
1589                 pdesc->addr_buffer = cpu_to_le64(buffer->dma);
1590
1591                 producer = get_next_index(producer, rds_ring->num_desc);
1592         }
1593
1594         if (count) {
1595                 rds_ring->producer = producer;
1596                 writel((producer - 1) & (rds_ring->num_desc - 1),
1597                                 rds_ring->crb_rcv_producer);
1598         }
1599         spin_unlock(&rds_ring->lock);
1600 }
1601
1602 static struct qlcnic_rx_buffer *
1603 qlcnic_process_rcv_diag(struct qlcnic_adapter *adapter,
1604                 struct qlcnic_host_sds_ring *sds_ring,
1605                 int ring, u64 sts_data0)
1606 {
1607         struct qlcnic_recv_context *recv_ctx = &adapter->recv_ctx;
1608         struct qlcnic_rx_buffer *buffer;
1609         struct sk_buff *skb;
1610         struct qlcnic_host_rds_ring *rds_ring;
1611         int index, length, cksum, pkt_offset;
1612
1613         if (unlikely(ring >= adapter->max_rds_rings))
1614                 return NULL;
1615
1616         rds_ring = &recv_ctx->rds_rings[ring];
1617
1618         index = qlcnic_get_sts_refhandle(sts_data0);
1619         if (unlikely(index >= rds_ring->num_desc))
1620                 return NULL;
1621
1622         buffer = &rds_ring->rx_buf_arr[index];
1623
1624         length = qlcnic_get_sts_totallength(sts_data0);
1625         cksum  = qlcnic_get_sts_status(sts_data0);
1626         pkt_offset = qlcnic_get_sts_pkt_offset(sts_data0);
1627
1628         skb = qlcnic_process_rxbuf(adapter, rds_ring, index, cksum);
1629         if (!skb)
1630                 return buffer;
1631
1632         skb_put(skb, rds_ring->skb_size);
1633
1634         if (pkt_offset)
1635                 skb_pull(skb, pkt_offset);
1636
1637         skb->truesize = skb->len + sizeof(struct sk_buff);
1638
1639         if (!qlcnic_check_loopback_buff(skb->data))
1640                 adapter->diag_cnt++;
1641
1642         dev_kfree_skb_any(skb);
1643         adapter->stats.rx_pkts++;
1644         adapter->stats.rxbytes += length;
1645
1646         return buffer;
1647 }
1648
1649 void
1650 qlcnic_process_rcv_ring_diag(struct qlcnic_host_sds_ring *sds_ring)
1651 {
1652         struct qlcnic_adapter *adapter = sds_ring->adapter;
1653         struct status_desc *desc;
1654         struct qlcnic_rx_buffer *rxbuf;
1655         u64 sts_data0;
1656
1657         int opcode, ring, desc_cnt;
1658         u32 consumer = sds_ring->consumer;
1659
1660         desc = &sds_ring->desc_head[consumer];
1661         sts_data0 = le64_to_cpu(desc->status_desc_data[0]);
1662
1663         if (!(sts_data0 & STATUS_OWNER_HOST))
1664                 return;
1665
1666         desc_cnt = qlcnic_get_sts_desc_cnt(sts_data0);
1667         opcode = qlcnic_get_sts_opcode(sts_data0);
1668
1669         ring = qlcnic_get_sts_type(sts_data0);
1670         rxbuf = qlcnic_process_rcv_diag(adapter, sds_ring,
1671                                         ring, sts_data0);
1672
1673         desc->status_desc_data[0] = cpu_to_le64(STATUS_OWNER_PHANTOM);
1674         consumer = get_next_index(consumer, sds_ring->num_desc);
1675
1676         sds_ring->consumer = consumer;
1677         writel(consumer, sds_ring->crb_sts_consumer);
1678 }