]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - drivers/net/qlcnic/qlcnic_ctx.c
qlcnic: Remove obsolete code
[net-next-2.6.git] / drivers / net / qlcnic / qlcnic_ctx.c
index 1e1dc58cddca38105ec3b56cd0039de4112cd67f..7969a7a87c8549ee0325239fce509340cfa51551 100644 (file)
@@ -152,9 +152,14 @@ qlcnic_fw_cmd_create_rx_ctx(struct qlcnic_adapter *adapter)
 
        prq->host_rsp_dma_addr = cpu_to_le64(cardrsp_phys_addr);
 
-       cap = (QLCNIC_CAP0_LEGACY_CONTEXT | QLCNIC_CAP0_LEGACY_MN);
+       cap = (QLCNIC_CAP0_LEGACY_CONTEXT | QLCNIC_CAP0_LEGACY_MN
+                                               | QLCNIC_CAP0_VALIDOFF);
        cap |= (QLCNIC_CAP0_JUMBO_CONTIGUOUS | QLCNIC_CAP0_LRO_CONTIGUOUS);
 
+       prq->valid_field_offset = offsetof(struct qlcnic_hostrq_rx_ctx,
+                                                        msix_handler);
+       prq->txrx_sds_binding = nsds_rings - 1;
+
        prq->capabilities[0] = cpu_to_le32(cap);
        prq->host_int_crb_mode =
                cpu_to_le32(QLCNIC_HOST_INT_CRB_MODE_SHARED);
@@ -175,6 +180,7 @@ qlcnic_fw_cmd_create_rx_ctx(struct qlcnic_adapter *adapter)
        for (i = 0; i < nrds_rings; i++) {
 
                rds_ring = &recv_ctx->rds_rings[i];
+               rds_ring->producer = 0;
 
                prq_rds[i].host_phys_addr = cpu_to_le64(rds_ring->phys_addr);
                prq_rds[i].ring_size = cpu_to_le32(rds_ring->num_desc);
@@ -188,6 +194,8 @@ qlcnic_fw_cmd_create_rx_ctx(struct qlcnic_adapter *adapter)
        for (i = 0; i < nsds_rings; i++) {
 
                sds_ring = &recv_ctx->sds_rings[i];
+               sds_ring->consumer = 0;
+               memset(sds_ring->desc_head, 0, STATUS_DESC_RINGSIZE(sds_ring));
 
                prq_sds[i].host_phys_addr = cpu_to_le64(sds_ring->phys_addr);
                prq_sds[i].ring_size = cpu_to_le32(sds_ring->num_desc);
@@ -216,12 +224,7 @@ qlcnic_fw_cmd_create_rx_ctx(struct qlcnic_adapter *adapter)
                rds_ring = &recv_ctx->rds_rings[i];
 
                reg = le32_to_cpu(prsp_rds[i].host_producer_crb);
-               if (adapter->fw_hal_version == QLCNIC_FW_BASE)
-                       rds_ring->crb_rcv_producer = qlcnic_get_ioaddr(adapter,
-                               QLCNIC_REG(reg - 0x200));
-               else
-                       rds_ring->crb_rcv_producer = adapter->ahw.pci_base0 +
-                               reg;
+               rds_ring->crb_rcv_producer = adapter->ahw.pci_base0 + reg;
        }
 
        prsp_sds = ((struct qlcnic_cardrsp_sds_ring *)
@@ -233,16 +236,8 @@ qlcnic_fw_cmd_create_rx_ctx(struct qlcnic_adapter *adapter)
                reg = le32_to_cpu(prsp_sds[i].host_consumer_crb);
                reg2 = le32_to_cpu(prsp_sds[i].interrupt_crb);
 
-               if (adapter->fw_hal_version == QLCNIC_FW_BASE) {
-                       sds_ring->crb_sts_consumer = qlcnic_get_ioaddr(adapter,
-                               QLCNIC_REG(reg - 0x200));
-                       sds_ring->crb_intr_mask = qlcnic_get_ioaddr(adapter,
-                               QLCNIC_REG(reg2 - 0x200));
-               } else {
-                       sds_ring->crb_sts_consumer = adapter->ahw.pci_base0 +
-                               reg;
-                       sds_ring->crb_intr_mask = adapter->ahw.pci_base0 + reg2;
-               }
+               sds_ring->crb_sts_consumer = adapter->ahw.pci_base0 + reg;
+               sds_ring->crb_intr_mask = adapter->ahw.pci_base0 + reg2;
        }
 
        recv_ctx->state = le32_to_cpu(prsp->host_ctx_state);
@@ -272,6 +267,8 @@ qlcnic_fw_cmd_destroy_rx_ctx(struct qlcnic_adapter *adapter)
                dev_err(&adapter->pdev->dev,
                        "Failed to destroy rx ctx in firmware\n");
        }
+
+       recv_ctx->state = QLCNIC_HOST_CTX_STATE_FREED;
 }
 
 static int
@@ -288,6 +285,11 @@ qlcnic_fw_cmd_create_tx_ctx(struct qlcnic_adapter *adapter)
        dma_addr_t      rq_phys_addr, rsp_phys_addr;
        struct qlcnic_host_tx_ring *tx_ring = adapter->tx_ring;
 
+       /* reset host resources */
+       tx_ring->producer = 0;
+       tx_ring->sw_consumer = 0;
+       *(tx_ring->hw_consumer) = 0;
+
        rq_size = SIZEOF_HOSTRQ_TX(struct qlcnic_hostrq_tx_ctx);
        rq_addr = pci_alloc_consistent(adapter->pdev,
                rq_size, &rq_phys_addr);
@@ -337,12 +339,7 @@ qlcnic_fw_cmd_create_tx_ctx(struct qlcnic_adapter *adapter)
 
        if (err == QLCNIC_RCODE_SUCCESS) {
                temp = le32_to_cpu(prsp->cds_ring.host_producer_crb);
-               if (adapter->fw_hal_version == QLCNIC_FW_BASE)
-                       tx_ring->crb_cmd_producer = qlcnic_get_ioaddr(adapter,
-                               QLCNIC_REG(temp - 0x200));
-               else
-                       tx_ring->crb_cmd_producer = adapter->ahw.pci_base0 +
-                               temp;
+               tx_ring->crb_cmd_producer = adapter->ahw.pci_base0 + temp;
 
                adapter->tx_context_id =
                        le16_to_cpu(prsp->context_id);
@@ -471,15 +468,6 @@ int qlcnic_alloc_hw_resources(struct qlcnic_adapter *adapter)
                sds_ring->desc_head = (struct status_desc *)addr;
        }
 
-
-       err = qlcnic_fw_cmd_create_rx_ctx(adapter);
-       if (err)
-               goto err_out_free;
-       err = qlcnic_fw_cmd_create_tx_ctx(adapter);
-       if (err)
-               goto err_out_free;
-
-       set_bit(__QLCNIC_FW_ATTACHED, &adapter->state);
        return 0;
 
 err_out_free:
@@ -487,15 +475,27 @@ err_out_free:
        return err;
 }
 
-void qlcnic_free_hw_resources(struct qlcnic_adapter *adapter)
+
+int qlcnic_fw_create_ctx(struct qlcnic_adapter *adapter)
 {
-       struct qlcnic_recv_context *recv_ctx;
-       struct qlcnic_host_rds_ring *rds_ring;
-       struct qlcnic_host_sds_ring *sds_ring;
-       struct qlcnic_host_tx_ring *tx_ring;
-       int ring;
+       int err;
 
+       err = qlcnic_fw_cmd_create_rx_ctx(adapter);
+       if (err)
+               return err;
+
+       err = qlcnic_fw_cmd_create_tx_ctx(adapter);
+       if (err) {
+               qlcnic_fw_cmd_destroy_rx_ctx(adapter);
+               return err;
+       }
 
+       set_bit(__QLCNIC_FW_ATTACHED, &adapter->state);
+       return 0;
+}
+
+void qlcnic_fw_destroy_ctx(struct qlcnic_adapter *adapter)
+{
        if (test_and_clear_bit(__QLCNIC_FW_ATTACHED, &adapter->state)) {
                qlcnic_fw_cmd_destroy_rx_ctx(adapter);
                qlcnic_fw_cmd_destroy_tx_ctx(adapter);
@@ -503,6 +503,15 @@ void qlcnic_free_hw_resources(struct qlcnic_adapter *adapter)
                /* Allow dma queues to drain after context reset */
                msleep(20);
        }
+}
+
+void qlcnic_free_hw_resources(struct qlcnic_adapter *adapter)
+{
+       struct qlcnic_recv_context *recv_ctx;
+       struct qlcnic_host_rds_ring *rds_ring;
+       struct qlcnic_host_sds_ring *sds_ring;
+       struct qlcnic_host_tx_ring *tx_ring;
+       int ring;
 
        recv_ctx = &adapter->recv_ctx;
 
@@ -589,11 +598,10 @@ int qlcnic_get_mac_address(struct qlcnic_adapter *adapter, u8 *mac)
                        0,
                        QLCNIC_CDRP_CMD_MAC_ADDRESS);
 
-       if (err == QLCNIC_RCODE_SUCCESS) {
+       if (err == QLCNIC_RCODE_SUCCESS)
                qlcnic_fetch_mac(adapter, QLCNIC_ARG1_CRB_OFFSET,
                                QLCNIC_ARG2_CRB_OFFSET, 0, mac);
-               dev_info(&adapter->pdev->dev, "MAC address: %pM\n", mac);
-       } else {
+       else {
                dev_err(&adapter->pdev->dev,
                        "Failed to get mac address%d\n", err);
                err = -EIO;
@@ -637,6 +645,11 @@ int qlcnic_get_nic_info(struct qlcnic_adapter *adapter, u8 func_id)
                adapter->capabilities = le32_to_cpu(nic_info->capabilities);
                adapter->max_mac_filters = nic_info->max_mac_filters;
 
+               if (adapter->capabilities & BIT_6)
+                       adapter->flags |= QLCNIC_ESWITCH_ENABLED;
+               else
+                       adapter->flags &= ~QLCNIC_ESWITCH_ENABLED;
+
                dev_info(&adapter->pdev->dev,
                        "phy port: %d switch_mode: %d,\n"
                        "\tmax_tx_q: %d max_rx_q: %d min_tx_bw: 0x%x,\n"