Lines Matching full:adapter

29 qlcnic_post_rx_buffers_nodb(struct qlcnic_adapter *adapter,
33 qlcnic_check_fw_hearbeat(struct qlcnic_adapter *adapter);
90 void qlcnic_release_rx_buffers(struct qlcnic_adapter *adapter) in qlcnic_release_rx_buffers() argument
97 recv_ctx = adapter->recv_ctx; in qlcnic_release_rx_buffers()
98 for (ring = 0; ring < adapter->max_rds_rings; ring++) { in qlcnic_release_rx_buffers()
105 pci_unmap_single(adapter->pdev, in qlcnic_release_rx_buffers()
115 void qlcnic_reset_rx_buffers_list(struct qlcnic_adapter *adapter) in qlcnic_reset_rx_buffers_list() argument
122 recv_ctx = adapter->recv_ctx; in qlcnic_reset_rx_buffers_list()
123 for (ring = 0; ring < adapter->max_rds_rings; ring++) { in qlcnic_reset_rx_buffers_list()
137 void qlcnic_release_tx_buffers(struct qlcnic_adapter *adapter) in qlcnic_release_tx_buffers() argument
142 struct qlcnic_host_tx_ring *tx_ring = adapter->tx_ring; in qlcnic_release_tx_buffers()
148 pci_unmap_single(adapter->pdev, buffrag->dma, in qlcnic_release_tx_buffers()
155 pci_unmap_page(adapter->pdev, buffrag->dma, in qlcnic_release_tx_buffers()
169 void qlcnic_free_sw_resources(struct qlcnic_adapter *adapter) in qlcnic_free_sw_resources() argument
176 recv_ctx = adapter->recv_ctx; in qlcnic_free_sw_resources()
181 for (ring = 0; ring < adapter->max_rds_rings; ring++) { in qlcnic_free_sw_resources()
189 if (adapter->tx_ring == NULL) in qlcnic_free_sw_resources()
192 tx_ring = adapter->tx_ring; in qlcnic_free_sw_resources()
195 kfree(adapter->tx_ring); in qlcnic_free_sw_resources()
196 adapter->tx_ring = NULL; in qlcnic_free_sw_resources()
199 int qlcnic_alloc_sw_resources(struct qlcnic_adapter *adapter) in qlcnic_alloc_sw_resources() argument
209 struct net_device *netdev = adapter->netdev; in qlcnic_alloc_sw_resources()
217 adapter->tx_ring = tx_ring; in qlcnic_alloc_sw_resources()
219 tx_ring->num_desc = adapter->num_txd; in qlcnic_alloc_sw_resources()
229 recv_ctx = adapter->recv_ctx; in qlcnic_alloc_sw_resources()
231 size = adapter->max_rds_rings * sizeof(struct qlcnic_host_rds_ring); in qlcnic_alloc_sw_resources()
239 for (ring = 0; ring < adapter->max_rds_rings; ring++) { in qlcnic_alloc_sw_resources()
243 rds_ring->num_desc = adapter->num_rxd; in qlcnic_alloc_sw_resources()
249 rds_ring->num_desc = adapter->num_jumbo_rxd; in qlcnic_alloc_sw_resources()
253 if (adapter->capabilities & QLCNIC_FW_CAPABILITY_HW_LRO) in qlcnic_alloc_sw_resources()
281 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in qlcnic_alloc_sw_resources()
283 sds_ring->irq = adapter->msix_entries[ring].vector; in qlcnic_alloc_sw_resources()
284 sds_ring->adapter = adapter; in qlcnic_alloc_sw_resources()
285 sds_ring->num_desc = adapter->num_rxd; in qlcnic_alloc_sw_resources()
294 qlcnic_free_sw_resources(adapter); in qlcnic_alloc_sw_resources()
327 static int qlcnic_wait_rom_done(struct qlcnic_adapter *adapter) in qlcnic_wait_rom_done() argument
335 done = QLCRD32(adapter, QLCNIC_ROMUSB_GLB_STATUS); in qlcnic_wait_rom_done()
338 dev_err(&adapter->pdev->dev, in qlcnic_wait_rom_done()
347 static int do_rom_fast_read(struct qlcnic_adapter *adapter, in do_rom_fast_read() argument
350 QLCWR32(adapter, QLCNIC_ROMUSB_ROM_ADDRESS, addr); in do_rom_fast_read()
351 QLCWR32(adapter, QLCNIC_ROMUSB_ROM_DUMMY_BYTE_CNT, 0); in do_rom_fast_read()
352 QLCWR32(adapter, QLCNIC_ROMUSB_ROM_ABYTE_CNT, 3); in do_rom_fast_read()
353 QLCWR32(adapter, QLCNIC_ROMUSB_ROM_INSTR_OPCODE, 0xb); in do_rom_fast_read()
354 if (qlcnic_wait_rom_done(adapter)) { in do_rom_fast_read()
355 dev_err(&adapter->pdev->dev, "Error waiting for rom done\n"); in do_rom_fast_read()
359 QLCWR32(adapter, QLCNIC_ROMUSB_ROM_ABYTE_CNT, 0); in do_rom_fast_read()
361 QLCWR32(adapter, QLCNIC_ROMUSB_ROM_DUMMY_BYTE_CNT, 0); in do_rom_fast_read()
363 *valp = QLCRD32(adapter, QLCNIC_ROMUSB_ROM_RDATA); in do_rom_fast_read()
367 static int do_rom_fast_read_words(struct qlcnic_adapter *adapter, int addr, in do_rom_fast_read_words() argument
375 ret = do_rom_fast_read(adapter, addridx, &v); in do_rom_fast_read_words()
386 qlcnic_rom_fast_read_words(struct qlcnic_adapter *adapter, int addr, in qlcnic_rom_fast_read_words() argument
391 ret = qlcnic_rom_lock(adapter); in qlcnic_rom_fast_read_words()
395 ret = do_rom_fast_read_words(adapter, addr, bytes, size); in qlcnic_rom_fast_read_words()
397 qlcnic_rom_unlock(adapter); in qlcnic_rom_fast_read_words()
401 int qlcnic_rom_fast_read(struct qlcnic_adapter *adapter, u32 addr, u32 *valp) in qlcnic_rom_fast_read() argument
405 if (qlcnic_rom_lock(adapter) != 0) in qlcnic_rom_fast_read()
408 ret = do_rom_fast_read(adapter, addr, valp); in qlcnic_rom_fast_read()
409 qlcnic_rom_unlock(adapter); in qlcnic_rom_fast_read()
413 int qlcnic_pinit_from_rom(struct qlcnic_adapter *adapter) in qlcnic_pinit_from_rom() argument
420 struct pci_dev *pdev = adapter->pdev; in qlcnic_pinit_from_rom()
422 QLCWR32(adapter, CRB_CMDPEG_STATE, 0); in qlcnic_pinit_from_rom()
423 QLCWR32(adapter, CRB_RCVPEG_STATE, 0); in qlcnic_pinit_from_rom()
427 QLCWR32(adapter, QLCNIC_CRB_I2Q + 0x10, 0x0); in qlcnic_pinit_from_rom()
428 QLCWR32(adapter, QLCNIC_CRB_I2Q + 0x14, 0x0); in qlcnic_pinit_from_rom()
429 QLCWR32(adapter, QLCNIC_CRB_I2Q + 0x18, 0x0); in qlcnic_pinit_from_rom()
430 QLCWR32(adapter, QLCNIC_CRB_I2Q + 0x1c, 0x0); in qlcnic_pinit_from_rom()
431 QLCWR32(adapter, QLCNIC_CRB_I2Q + 0x20, 0x0); in qlcnic_pinit_from_rom()
432 QLCWR32(adapter, QLCNIC_CRB_I2Q + 0x24, 0x0); in qlcnic_pinit_from_rom()
435 QLCWR32(adapter, QLCNIC_CRB_NIU + 0x40, 0xff); in qlcnic_pinit_from_rom()
437 QLCWR32(adapter, QLCNIC_CRB_NIU + 0x70000, 0x00); in qlcnic_pinit_from_rom()
439 QLCWR32(adapter, QLCNIC_CRB_NIU + 0x80000, 0x00); in qlcnic_pinit_from_rom()
441 QLCWR32(adapter, QLCNIC_CRB_NIU + 0x90000, 0x00); in qlcnic_pinit_from_rom()
443 QLCWR32(adapter, QLCNIC_CRB_NIU + 0xa0000, 0x00); in qlcnic_pinit_from_rom()
445 QLCWR32(adapter, QLCNIC_CRB_NIU + 0xb0000, 0x00); in qlcnic_pinit_from_rom()
448 val = QLCRD32(adapter, QLCNIC_CRB_SRE + 0x1000); in qlcnic_pinit_from_rom()
449 QLCWR32(adapter, QLCNIC_CRB_SRE + 0x1000, val & (~(0x1))); in qlcnic_pinit_from_rom()
452 QLCWR32(adapter, QLCNIC_CRB_EPG + 0x1300, 0x1); in qlcnic_pinit_from_rom()
455 QLCWR32(adapter, QLCNIC_CRB_TIMER + 0x0, 0x0); in qlcnic_pinit_from_rom()
456 QLCWR32(adapter, QLCNIC_CRB_TIMER + 0x8, 0x0); in qlcnic_pinit_from_rom()
457 QLCWR32(adapter, QLCNIC_CRB_TIMER + 0x10, 0x0); in qlcnic_pinit_from_rom()
458 QLCWR32(adapter, QLCNIC_CRB_TIMER + 0x18, 0x0); in qlcnic_pinit_from_rom()
459 QLCWR32(adapter, QLCNIC_CRB_TIMER + 0x100, 0x0); in qlcnic_pinit_from_rom()
460 QLCWR32(adapter, QLCNIC_CRB_TIMER + 0x200, 0x0); in qlcnic_pinit_from_rom()
462 QLCWR32(adapter, QLCNIC_CRB_PEG_NET_0 + 0x3c, 1); in qlcnic_pinit_from_rom()
463 QLCWR32(adapter, QLCNIC_CRB_PEG_NET_1 + 0x3c, 1); in qlcnic_pinit_from_rom()
464 QLCWR32(adapter, QLCNIC_CRB_PEG_NET_2 + 0x3c, 1); in qlcnic_pinit_from_rom()
465 QLCWR32(adapter, QLCNIC_CRB_PEG_NET_3 + 0x3c, 1); in qlcnic_pinit_from_rom()
466 QLCWR32(adapter, QLCNIC_CRB_PEG_NET_4 + 0x3c, 1); in qlcnic_pinit_from_rom()
469 qlcnic_rom_unlock(adapter); in qlcnic_pinit_from_rom()
471 QLCWR32(adapter, QLCNIC_ROMUSB_GLB_SW_RESET, 0xfeffffff); in qlcnic_pinit_from_rom()
474 if (qlcnic_rom_fast_read(adapter, 0, &n) != 0 || (n != 0xcafecafe) || in qlcnic_pinit_from_rom()
475 qlcnic_rom_fast_read(adapter, 4, &n) != 0) { in qlcnic_pinit_from_rom()
494 if (qlcnic_rom_fast_read(adapter, 8*i + 4*offset, &val) != 0 || in qlcnic_pinit_from_rom()
495 qlcnic_rom_fast_read(adapter, 8*i + 4*offset + 4, &addr) != 0) { in qlcnic_pinit_from_rom()
548 QLCWR32(adapter, off, buf[i].data); in qlcnic_pinit_from_rom()
555 QLCWR32(adapter, QLCNIC_CRB_PEG_NET_D + 0xec, 0x1e); in qlcnic_pinit_from_rom()
556 QLCWR32(adapter, QLCNIC_CRB_PEG_NET_D + 0x4c, 8); in qlcnic_pinit_from_rom()
557 QLCWR32(adapter, QLCNIC_CRB_PEG_NET_I + 0x4c, 8); in qlcnic_pinit_from_rom()
558 QLCWR32(adapter, QLCNIC_CRB_PEG_NET_0 + 0x8, 0); in qlcnic_pinit_from_rom()
559 QLCWR32(adapter, QLCNIC_CRB_PEG_NET_0 + 0xc, 0); in qlcnic_pinit_from_rom()
560 QLCWR32(adapter, QLCNIC_CRB_PEG_NET_1 + 0x8, 0); in qlcnic_pinit_from_rom()
561 QLCWR32(adapter, QLCNIC_CRB_PEG_NET_1 + 0xc, 0); in qlcnic_pinit_from_rom()
562 QLCWR32(adapter, QLCNIC_CRB_PEG_NET_2 + 0x8, 0); in qlcnic_pinit_from_rom()
563 QLCWR32(adapter, QLCNIC_CRB_PEG_NET_2 + 0xc, 0); in qlcnic_pinit_from_rom()
564 QLCWR32(adapter, QLCNIC_CRB_PEG_NET_3 + 0x8, 0); in qlcnic_pinit_from_rom()
565 QLCWR32(adapter, QLCNIC_CRB_PEG_NET_3 + 0xc, 0); in qlcnic_pinit_from_rom()
566 QLCWR32(adapter, QLCNIC_CRB_PEG_NET_4 + 0x8, 0); in qlcnic_pinit_from_rom()
567 QLCWR32(adapter, QLCNIC_CRB_PEG_NET_4 + 0xc, 0); in qlcnic_pinit_from_rom()
570 QLCWR32(adapter, QLCNIC_PEG_HALT_STATUS1, 0); in qlcnic_pinit_from_rom()
571 QLCWR32(adapter, QLCNIC_PEG_HALT_STATUS2, 0); in qlcnic_pinit_from_rom()
576 static int qlcnic_cmd_peg_ready(struct qlcnic_adapter *adapter) in qlcnic_cmd_peg_ready() argument
582 val = QLCRD32(adapter, CRB_CMDPEG_STATE); in qlcnic_cmd_peg_ready()
598 QLCWR32(adapter, CRB_CMDPEG_STATE, PHAN_INITIALIZE_FAILED); in qlcnic_cmd_peg_ready()
601 dev_err(&adapter->pdev->dev, "Command Peg initialization not " in qlcnic_cmd_peg_ready()
607 qlcnic_receive_peg_ready(struct qlcnic_adapter *adapter) in qlcnic_receive_peg_ready() argument
613 val = QLCRD32(adapter, CRB_RCVPEG_STATE); in qlcnic_receive_peg_ready()
623 dev_err(&adapter->pdev->dev, "Receive Peg initialization not " in qlcnic_receive_peg_ready()
632 qlcnic_check_fw_status(struct qlcnic_adapter *adapter) in qlcnic_check_fw_status() argument
636 err = qlcnic_cmd_peg_ready(adapter); in qlcnic_check_fw_status()
640 err = qlcnic_receive_peg_ready(adapter); in qlcnic_check_fw_status()
644 QLCWR32(adapter, CRB_CMDPEG_STATE, PHAN_INITIALIZE_ACK); in qlcnic_check_fw_status()
650 qlcnic_setup_idc_param(struct qlcnic_adapter *adapter) { in qlcnic_setup_idc_param() argument
655 val = QLCRD32(adapter, QLCNIC_CRB_DEV_PARTITION_INFO); in qlcnic_setup_idc_param()
656 val = QLC_DEV_GET_DRV(val, adapter->portnum); in qlcnic_setup_idc_param()
658 dev_err(&adapter->pdev->dev, in qlcnic_setup_idc_param()
662 adapter->physical_port = (val >> 2); in qlcnic_setup_idc_param()
663 if (qlcnic_rom_fast_read(adapter, QLCNIC_ROM_DEV_INIT_TIMEOUT, &timeo)) in qlcnic_setup_idc_param()
666 adapter->dev_init_timeo = timeo; in qlcnic_setup_idc_param()
668 if (qlcnic_rom_fast_read(adapter, QLCNIC_ROM_DRV_RESET_TIMEOUT, &timeo)) in qlcnic_setup_idc_param()
671 adapter->reset_ack_timeo = timeo; in qlcnic_setup_idc_param()
676 static int qlcnic_get_flt_entry(struct qlcnic_adapter *adapter, u8 region, in qlcnic_get_flt_entry() argument
685 ret = qlcnic_rom_fast_read_words(adapter, QLCNIC_FLT_LOCATION, in qlcnic_get_flt_entry()
689 dev_warn(&adapter->pdev->dev, in qlcnic_get_flt_entry()
697 dev_warn(&adapter->pdev->dev, "error allocating memory\n"); in qlcnic_get_flt_entry()
701 ret = qlcnic_rom_fast_read_words(adapter, QLCNIC_FLT_LOCATION + in qlcnic_get_flt_entry()
705 dev_warn(&adapter->pdev->dev, in qlcnic_get_flt_entry()
716 dev_warn(&adapter->pdev->dev, in qlcnic_get_flt_entry()
729 qlcnic_check_flash_fw_ver(struct qlcnic_adapter *adapter) in qlcnic_check_flash_fw_ver() argument
735 if (adapter->ahw->revision_id == QLCNIC_P3P_C0) in qlcnic_check_flash_fw_ver()
736 ret = qlcnic_get_flt_entry(adapter, QLCNIC_C0_FW_IMAGE_REGION, in qlcnic_check_flash_fw_ver()
739 ret = qlcnic_get_flt_entry(adapter, QLCNIC_B0_FW_IMAGE_REGION, in qlcnic_check_flash_fw_ver()
744 qlcnic_rom_fast_read(adapter, fw_entry.start_addr + 4, in qlcnic_check_flash_fw_ver()
747 qlcnic_rom_fast_read(adapter, QLCNIC_FW_VERSION_OFFSET, in qlcnic_check_flash_fw_ver()
754 dev_err(&adapter->pdev->dev, in qlcnic_check_flash_fw_ver()
766 qlcnic_has_mn(struct qlcnic_adapter *adapter) in qlcnic_has_mn() argument
771 capability = QLCRD32(adapter, QLCNIC_PEG_TUNE_CAPABILITY); in qlcnic_has_mn()
801 qlcnic_validate_header(struct qlcnic_adapter *adapter) in qlcnic_validate_header() argument
803 const u8 *unirom = adapter->fw->data; in qlcnic_validate_header()
805 __le32 fw_file_size = adapter->fw->size; in qlcnic_validate_header()
824 qlcnic_validate_bootld(struct qlcnic_adapter *adapter) in qlcnic_validate_bootld() argument
828 const u8 *unirom = adapter->fw->data; in qlcnic_validate_bootld()
829 int idx = cpu_to_le32(*((int *)&unirom[adapter->file_prd_off] + in qlcnic_validate_bootld()
843 if (adapter->fw->size < tab_size) in qlcnic_validate_bootld()
852 if (adapter->fw->size < data_size) in qlcnic_validate_bootld()
859 qlcnic_validate_fw(struct qlcnic_adapter *adapter) in qlcnic_validate_fw() argument
863 const u8 *unirom = adapter->fw->data; in qlcnic_validate_fw()
864 int idx = cpu_to_le32(*((int *)&unirom[adapter->file_prd_off] + in qlcnic_validate_fw()
878 if (adapter->fw->size < tab_size) in qlcnic_validate_fw()
886 if (adapter->fw->size < data_size) in qlcnic_validate_fw()
893 qlcnic_validate_product_offs(struct qlcnic_adapter *adapter) in qlcnic_validate_product_offs() argument
896 const u8 *unirom = adapter->fw->data; in qlcnic_validate_product_offs()
897 int mn_present = qlcnic_has_mn(adapter); in qlcnic_validate_product_offs()
912 if (adapter->fw->size < tab_size) in qlcnic_validate_product_offs()
919 u8 chiprev = adapter->ahw->revision_id; in qlcnic_validate_product_offs()
933 adapter->file_prd_off = offs; in qlcnic_validate_product_offs()
945 qlcnic_validate_unified_romimage(struct qlcnic_adapter *adapter) in qlcnic_validate_unified_romimage() argument
947 if (qlcnic_validate_header(adapter)) { in qlcnic_validate_unified_romimage()
948 dev_err(&adapter->pdev->dev, in qlcnic_validate_unified_romimage()
953 if (qlcnic_validate_product_offs(adapter)) { in qlcnic_validate_unified_romimage()
954 dev_err(&adapter->pdev->dev, in qlcnic_validate_unified_romimage()
959 if (qlcnic_validate_bootld(adapter)) { in qlcnic_validate_unified_romimage()
960 dev_err(&adapter->pdev->dev, in qlcnic_validate_unified_romimage()
965 if (qlcnic_validate_fw(adapter)) { in qlcnic_validate_unified_romimage()
966 dev_err(&adapter->pdev->dev, in qlcnic_validate_unified_romimage()
975 struct uni_data_desc *qlcnic_get_data_desc(struct qlcnic_adapter *adapter, in qlcnic_get_data_desc() argument
978 const u8 *unirom = adapter->fw->data; in qlcnic_get_data_desc()
979 int idx = cpu_to_le32(*((int *)&unirom[adapter->file_prd_off] + in qlcnic_get_data_desc()
996 qlcnic_get_bootld_offs(struct qlcnic_adapter *adapter) in qlcnic_get_bootld_offs() argument
1000 if (adapter->fw_type == QLCNIC_UNIFIED_ROMIMAGE) in qlcnic_get_bootld_offs()
1001 offs = cpu_to_le32((qlcnic_get_data_desc(adapter, in qlcnic_get_bootld_offs()
1005 return (u8 *)&adapter->fw->data[offs]; in qlcnic_get_bootld_offs()
1009 qlcnic_get_fw_offs(struct qlcnic_adapter *adapter) in qlcnic_get_fw_offs() argument
1013 if (adapter->fw_type == QLCNIC_UNIFIED_ROMIMAGE) in qlcnic_get_fw_offs()
1014 offs = cpu_to_le32((qlcnic_get_data_desc(adapter, in qlcnic_get_fw_offs()
1018 return (u8 *)&adapter->fw->data[offs]; in qlcnic_get_fw_offs()
1022 qlcnic_get_fw_size(struct qlcnic_adapter *adapter) in qlcnic_get_fw_size() argument
1024 if (adapter->fw_type == QLCNIC_UNIFIED_ROMIMAGE) in qlcnic_get_fw_size()
1025 return cpu_to_le32((qlcnic_get_data_desc(adapter, in qlcnic_get_fw_size()
1030 *(u32 *)&adapter->fw->data[QLCNIC_FW_SIZE_OFFSET]); in qlcnic_get_fw_size()
1034 qlcnic_get_fw_version(struct qlcnic_adapter *adapter) in qlcnic_get_fw_version() argument
1037 const struct firmware *fw = adapter->fw; in qlcnic_get_fw_version()
1042 if (adapter->fw_type != QLCNIC_UNIFIED_ROMIMAGE) in qlcnic_get_fw_version()
1045 fw_data_desc = qlcnic_get_data_desc(adapter, QLCNIC_UNI_DIR_SECT_FW, in qlcnic_get_fw_version()
1065 qlcnic_get_bios_version(struct qlcnic_adapter *adapter) in qlcnic_get_bios_version() argument
1067 const struct firmware *fw = adapter->fw; in qlcnic_get_bios_version()
1068 __le32 bios_ver, prd_off = adapter->file_prd_off; in qlcnic_get_bios_version()
1070 if (adapter->fw_type != QLCNIC_UNIFIED_ROMIMAGE) in qlcnic_get_bios_version()
1080 static void qlcnic_rom_lock_recovery(struct qlcnic_adapter *adapter) in qlcnic_rom_lock_recovery() argument
1082 if (qlcnic_pcie_sem_lock(adapter, 2, QLCNIC_ROM_LOCK_ID)) in qlcnic_rom_lock_recovery()
1083 dev_info(&adapter->pdev->dev, "Resetting rom_lock\n"); in qlcnic_rom_lock_recovery()
1085 qlcnic_pcie_sem_unlock(adapter, 2); in qlcnic_rom_lock_recovery()
1089 qlcnic_check_fw_hearbeat(struct qlcnic_adapter *adapter) in qlcnic_check_fw_hearbeat() argument
1094 adapter->heartbeat = QLCRD32(adapter, QLCNIC_PEG_ALIVE_COUNTER); in qlcnic_check_fw_hearbeat()
1098 heartbeat = QLCRD32(adapter, QLCNIC_PEG_ALIVE_COUNTER); in qlcnic_check_fw_hearbeat()
1099 if (heartbeat != adapter->heartbeat) { in qlcnic_check_fw_hearbeat()
1109 qlcnic_need_fw_reset(struct qlcnic_adapter *adapter) in qlcnic_need_fw_reset() argument
1111 if ((adapter->flags & QLCNIC_FW_HANG) || in qlcnic_need_fw_reset()
1112 qlcnic_check_fw_hearbeat(adapter)) { in qlcnic_need_fw_reset()
1113 qlcnic_rom_lock_recovery(adapter); in qlcnic_need_fw_reset()
1117 if (adapter->need_fw_reset) in qlcnic_need_fw_reset()
1120 if (adapter->fw) in qlcnic_need_fw_reset()
1132 qlcnic_load_firmware(struct qlcnic_adapter *adapter) in qlcnic_load_firmware() argument
1136 const struct firmware *fw = adapter->fw; in qlcnic_load_firmware()
1137 struct pci_dev *pdev = adapter->pdev; in qlcnic_load_firmware()
1140 fw_name[adapter->fw_type]); in qlcnic_load_firmware()
1147 ptr64 = (u64 *)qlcnic_get_bootld_offs(adapter); in qlcnic_load_firmware()
1153 if (qlcnic_pci_mem_write_2M(adapter, flashaddr, data)) in qlcnic_load_firmware()
1159 size = (__force u32)qlcnic_get_fw_size(adapter) / 8; in qlcnic_load_firmware()
1161 ptr64 = (u64 *)qlcnic_get_fw_offs(adapter); in qlcnic_load_firmware()
1167 if (qlcnic_pci_mem_write_2M(adapter, in qlcnic_load_firmware()
1174 size = (__force u32)qlcnic_get_fw_size(adapter) % 8; in qlcnic_load_firmware()
1178 if (qlcnic_pci_mem_write_2M(adapter, in qlcnic_load_firmware()
1189 ret = qlcnic_get_flt_entry(adapter, QLCNIC_BOOTLD_REGION, in qlcnic_load_firmware()
1202 if (qlcnic_rom_fast_read(adapter, in qlcnic_load_firmware()
1205 if (qlcnic_rom_fast_read(adapter, in qlcnic_load_firmware()
1211 if (qlcnic_pci_mem_write_2M(adapter, in qlcnic_load_firmware()
1220 QLCWR32(adapter, QLCNIC_CRB_PEG_NET_0 + 0x18, 0x1020); in qlcnic_load_firmware()
1221 QLCWR32(adapter, QLCNIC_ROMUSB_GLB_SW_RESET, 0x80001e); in qlcnic_load_firmware()
1226 qlcnic_validate_firmware(struct qlcnic_adapter *adapter) in qlcnic_validate_firmware() argument
1230 struct pci_dev *pdev = adapter->pdev; in qlcnic_validate_firmware()
1231 const struct firmware *fw = adapter->fw; in qlcnic_validate_firmware()
1232 u8 fw_type = adapter->fw_type; in qlcnic_validate_firmware()
1235 if (qlcnic_validate_unified_romimage(adapter)) in qlcnic_validate_firmware()
1250 val = qlcnic_get_fw_version(adapter); in qlcnic_validate_firmware()
1260 val = qlcnic_get_bios_version(adapter); in qlcnic_validate_firmware()
1261 qlcnic_rom_fast_read(adapter, QLCNIC_BIOS_VERSION_OFFSET, (int *)&bios); in qlcnic_validate_firmware()
1268 QLCWR32(adapter, QLCNIC_CAM_RAM(0x1fc), QLCNIC_BDINFO_MAGIC); in qlcnic_validate_firmware()
1273 qlcnic_get_next_fwtype(struct qlcnic_adapter *adapter) in qlcnic_get_next_fwtype() argument
1277 switch (adapter->fw_type) { in qlcnic_get_next_fwtype()
1288 adapter->fw_type = fw_type; in qlcnic_get_next_fwtype()
1293 void qlcnic_request_firmware(struct qlcnic_adapter *adapter) in qlcnic_request_firmware() argument
1295 struct pci_dev *pdev = adapter->pdev; in qlcnic_request_firmware()
1298 adapter->fw_type = QLCNIC_UNKNOWN_ROMIMAGE; in qlcnic_request_firmware()
1301 qlcnic_get_next_fwtype(adapter); in qlcnic_request_firmware()
1303 if (adapter->fw_type == QLCNIC_FLASH_ROMIMAGE) { in qlcnic_request_firmware()
1304 adapter->fw = NULL; in qlcnic_request_firmware()
1306 rc = request_firmware(&adapter->fw, in qlcnic_request_firmware()
1307 fw_name[adapter->fw_type], &pdev->dev); in qlcnic_request_firmware()
1311 rc = qlcnic_validate_firmware(adapter); in qlcnic_request_firmware()
1313 release_firmware(adapter->fw); in qlcnic_request_firmware()
1322 qlcnic_release_firmware(struct qlcnic_adapter *adapter) in qlcnic_release_firmware() argument
1324 if (adapter->fw) in qlcnic_release_firmware()
1325 release_firmware(adapter->fw); in qlcnic_release_firmware()
1326 adapter->fw = NULL; in qlcnic_release_firmware()
1330 qlcnic_handle_linkevent(struct qlcnic_adapter *adapter, in qlcnic_handle_linkevent() argument
1338 struct net_device *netdev = adapter->netdev; in qlcnic_handle_linkevent()
1340 adapter->has_link_events = 1; in qlcnic_handle_linkevent()
1361 adapter->ahw->loopback_state |= QLCNIC_LINKEVENT; in qlcnic_handle_linkevent()
1363 qlcnic_advert_link_change(adapter, link_status); in qlcnic_handle_linkevent()
1366 adapter->link_duplex = DUPLEX_FULL; in qlcnic_handle_linkevent()
1368 adapter->link_duplex = DUPLEX_HALF; in qlcnic_handle_linkevent()
1370 adapter->module_type = module; in qlcnic_handle_linkevent()
1371 adapter->link_autoneg = autoneg; in qlcnic_handle_linkevent()
1372 adapter->link_speed = link_speed; in qlcnic_handle_linkevent()
1381 struct qlcnic_adapter *adapter; in qlcnic_handle_fw_message() local
1394 adapter = sds_ring->adapter; in qlcnic_handle_fw_message()
1395 dev = &adapter->pdev->dev; in qlcnic_handle_fw_message()
1400 qlcnic_handle_linkevent(adapter, &msg); in qlcnic_handle_fw_message()
1406 adapter->ahw->loopback_state |= QLCNIC_LB_RESPONSE; in qlcnic_handle_fw_message()
1410 adapter->diag_cnt = -QLCNIC_TEST_IN_PROGRESS; in qlcnic_handle_fw_message()
1414 adapter->diag_cnt = -QLCNIC_LB_CABLE_NOT_CONN; in qlcnic_handle_fw_message()
1419 adapter->diag_cnt = -QLCNIC_UNDEFINED_ERROR; in qlcnic_handle_fw_message()
1429 qlcnic_alloc_rx_skb(struct qlcnic_adapter *adapter, in qlcnic_alloc_rx_skb() argument
1435 struct pci_dev *pdev = adapter->pdev; in qlcnic_alloc_rx_skb()
1439 adapter->stats.skb_alloc_failure++; in qlcnic_alloc_rx_skb()
1449 adapter->stats.rx_dma_map_error++; in qlcnic_alloc_rx_skb()
1460 static struct sk_buff *qlcnic_process_rxbuf(struct qlcnic_adapter *adapter, in qlcnic_process_rxbuf() argument
1473 pci_unmap_single(adapter->pdev, buffer->dma, rds_ring->dma_size, in qlcnic_process_rxbuf()
1478 if (likely((adapter->netdev->features & NETIF_F_RXCSUM) && in qlcnic_process_rxbuf()
1480 adapter->stats.csummed++; in qlcnic_process_rxbuf()
1486 skb->dev = adapter->netdev; in qlcnic_process_rxbuf()
1494 qlcnic_check_rx_tagging(struct qlcnic_adapter *adapter, struct sk_buff *skb, in qlcnic_check_rx_tagging() argument
1504 if (!adapter->pvid) in qlcnic_check_rx_tagging()
1507 if (*vlan_tag == adapter->pvid) { in qlcnic_check_rx_tagging()
1512 if (adapter->flags & QLCNIC_TAGGING_ENABLED) in qlcnic_check_rx_tagging()
1519 qlcnic_process_rcv(struct qlcnic_adapter *adapter, in qlcnic_process_rcv() argument
1523 struct net_device *netdev = adapter->netdev; in qlcnic_process_rcv()
1524 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_process_rcv()
1531 if (unlikely(ring >= adapter->max_rds_rings)) in qlcnic_process_rcv()
1546 skb = qlcnic_process_rxbuf(adapter, rds_ring, index, cksum); in qlcnic_process_rcv()
1558 if (unlikely(qlcnic_check_rx_tagging(adapter, skb, &vid))) { in qlcnic_process_rcv()
1559 adapter->stats.rxdropped++; in qlcnic_process_rcv()
1571 adapter->stats.rx_pkts++; in qlcnic_process_rcv()
1572 adapter->stats.rxbytes += length; in qlcnic_process_rcv()
1582 qlcnic_process_lro(struct qlcnic_adapter *adapter, in qlcnic_process_lro() argument
1586 struct net_device *netdev = adapter->netdev; in qlcnic_process_lro()
1587 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_process_lro()
1600 if (unlikely(ring > adapter->max_rds_rings)) in qlcnic_process_lro()
1618 skb = qlcnic_process_rxbuf(adapter, rds_ring, index, STATUS_CKSUM_OK); in qlcnic_process_lro()
1631 if (unlikely(qlcnic_check_rx_tagging(adapter, skb, &vid))) { in qlcnic_process_lro()
1632 adapter->stats.rxdropped++; in qlcnic_process_lro()
1655 adapter->stats.lro_pkts++; in qlcnic_process_lro()
1656 adapter->stats.lrobytes += length; in qlcnic_process_lro()
1664 struct qlcnic_adapter *adapter = sds_ring->adapter; in qlcnic_process_rcv_ring() local
1689 rxbuf = qlcnic_process_rcv(adapter, sds_ring, in qlcnic_process_rcv_ring()
1695 rxbuf = qlcnic_process_lro(adapter, sds_ring, in qlcnic_process_rcv_ring()
1709 adapter->stats.null_rxbuf++; in qlcnic_process_rcv_ring()
1721 for (ring = 0; ring < adapter->max_rds_rings; ring++) { in qlcnic_process_rcv_ring()
1723 &adapter->recv_ctx->rds_rings[ring]; in qlcnic_process_rcv_ring()
1729 qlcnic_alloc_rx_skb(adapter, rds_ring, rxbuf); in qlcnic_process_rcv_ring()
1737 qlcnic_post_rx_buffers_nodb(adapter, rds_ring); in qlcnic_process_rcv_ring()
1749 qlcnic_post_rx_buffers(struct qlcnic_adapter *adapter, in qlcnic_post_rx_buffers() argument
1766 if (qlcnic_alloc_rx_skb(adapter, rds_ring, buffer)) in qlcnic_post_rx_buffers()
1790 qlcnic_post_rx_buffers_nodb(struct qlcnic_adapter *adapter, in qlcnic_post_rx_buffers_nodb() argument
1810 if (qlcnic_alloc_rx_skb(adapter, rds_ring, buffer)) in qlcnic_post_rx_buffers_nodb()
1834 static void dump_skb(struct sk_buff *skb, struct qlcnic_adapter *adapter) in dump_skb() argument
1841 QLCDB(adapter, DRV, "%02x ", data[i]); in dump_skb()
1847 void qlcnic_process_rcv_diag(struct qlcnic_adapter *adapter, in qlcnic_process_rcv_diag() argument
1851 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_process_rcv_diag()
1856 if (unlikely(ring >= adapter->max_rds_rings)) in qlcnic_process_rcv_diag()
1869 skb = qlcnic_process_rxbuf(adapter, rds_ring, index, cksum); in qlcnic_process_rcv_diag()
1881 if (!qlcnic_check_loopback_buff(skb->data, adapter->mac_addr)) in qlcnic_process_rcv_diag()
1882 adapter->diag_cnt++; in qlcnic_process_rcv_diag()
1884 dump_skb(skb, adapter); in qlcnic_process_rcv_diag()
1887 adapter->stats.rx_pkts++; in qlcnic_process_rcv_diag()
1888 adapter->stats.rxbytes += length; in qlcnic_process_rcv_diag()
1896 struct qlcnic_adapter *adapter = sds_ring->adapter; in qlcnic_process_rcv_ring_diag() local
1917 qlcnic_process_rcv_diag(adapter, sds_ring, ring, sts_data0); in qlcnic_process_rcv_ring_diag()
1932 qlcnic_fetch_mac(struct qlcnic_adapter *adapter, u32 off1, u32 off2, in qlcnic_fetch_mac() argument