iavf: Create VLAN tag elements starting from the first element
[linux-2.6-block.git] / drivers / net / ethernet / intel / iavf / iavf_main.c
index 4569d69a2b558ef46305934ab579965eae3943ba..36f17d0c7a2e17a2e2d918cef4ad3180ac719375 100644 (file)
@@ -66,14 +66,14 @@ static struct workqueue_struct *iavf_wq;
  * @size: size of memory requested
  * @alignment: what to align the allocation to
  **/
-iavf_status iavf_allocate_dma_mem_d(struct iavf_hw *hw,
-                                   struct iavf_dma_mem *mem,
-                                   u64 size, u32 alignment)
+enum iavf_status iavf_allocate_dma_mem_d(struct iavf_hw *hw,
+                                        struct iavf_dma_mem *mem,
+                                        u64 size, u32 alignment)
 {
        struct iavf_adapter *adapter = (struct iavf_adapter *)hw->back;
 
        if (!mem)
-               return I40E_ERR_PARAM;
+               return IAVF_ERR_PARAM;
 
        mem->size = ALIGN(size, alignment);
        mem->va = dma_alloc_coherent(&adapter->pdev->dev, mem->size,
@@ -81,7 +81,7 @@ iavf_status iavf_allocate_dma_mem_d(struct iavf_hw *hw,
        if (mem->va)
                return 0;
        else
-               return I40E_ERR_NO_MEMORY;
+               return IAVF_ERR_NO_MEMORY;
 }
 
 /**
@@ -89,12 +89,13 @@ iavf_status iavf_allocate_dma_mem_d(struct iavf_hw *hw,
  * @hw:   pointer to the HW structure
  * @mem:  ptr to mem struct to free
  **/
-iavf_status iavf_free_dma_mem_d(struct iavf_hw *hw, struct iavf_dma_mem *mem)
+enum iavf_status iavf_free_dma_mem_d(struct iavf_hw *hw,
+                                    struct iavf_dma_mem *mem)
 {
        struct iavf_adapter *adapter = (struct iavf_adapter *)hw->back;
 
        if (!mem || !mem->va)
-               return I40E_ERR_PARAM;
+               return IAVF_ERR_PARAM;
        dma_free_coherent(&adapter->pdev->dev, mem->size,
                          mem->va, (dma_addr_t)mem->pa);
        return 0;
@@ -106,11 +107,11 @@ iavf_status iavf_free_dma_mem_d(struct iavf_hw *hw, struct iavf_dma_mem *mem)
  * @mem:  ptr to mem struct to fill out
  * @size: size of memory requested
  **/
-iavf_status iavf_allocate_virt_mem_d(struct iavf_hw *hw,
-                                    struct iavf_virt_mem *mem, u32 size)
+enum iavf_status iavf_allocate_virt_mem_d(struct iavf_hw *hw,
+                                         struct iavf_virt_mem *mem, u32 size)
 {
        if (!mem)
-               return I40E_ERR_PARAM;
+               return IAVF_ERR_PARAM;
 
        mem->size = size;
        mem->va = kzalloc(size, GFP_KERNEL);
@@ -118,7 +119,7 @@ iavf_status iavf_allocate_virt_mem_d(struct iavf_hw *hw,
        if (mem->va)
                return 0;
        else
-               return I40E_ERR_NO_MEMORY;
+               return IAVF_ERR_NO_MEMORY;
 }
 
 /**
@@ -126,10 +127,11 @@ iavf_status iavf_allocate_virt_mem_d(struct iavf_hw *hw,
  * @hw:   pointer to the HW structure
  * @mem:  ptr to mem struct to free
  **/
-iavf_status iavf_free_virt_mem_d(struct iavf_hw *hw, struct iavf_virt_mem *mem)
+enum iavf_status iavf_free_virt_mem_d(struct iavf_hw *hw,
+                                     struct iavf_virt_mem *mem)
 {
        if (!mem)
-               return I40E_ERR_PARAM;
+               return IAVF_ERR_PARAM;
 
        /* it's ok to kfree a NULL pointer */
        kfree(mem->va);
@@ -663,8 +665,7 @@ iavf_vlan_filter *iavf_add_vlan(struct iavf_adapter *adapter, u16 vlan)
 
                f->vlan = vlan;
 
-               INIT_LIST_HEAD(&f->list);
-               list_add(&f->list, &adapter->vlan_filter_list);
+               list_add_tail(&f->list, &adapter->vlan_filter_list);
                f->add = true;
                adapter->aq_required |= IAVF_FLAG_AQ_ADD_VLAN_FILTER;
        }
@@ -1227,8 +1228,8 @@ out:
  **/
 static int iavf_config_rss_aq(struct iavf_adapter *adapter)
 {
-       struct i40e_aqc_get_set_rss_key_data *rss_key =
-               (struct i40e_aqc_get_set_rss_key_data *)adapter->rss_key;
+       struct iavf_aqc_get_set_rss_key_data *rss_key =
+               (struct iavf_aqc_get_set_rss_key_data *)adapter->rss_key;
        struct iavf_hw *hw = &adapter->hw;
        int ret = 0;
 
@@ -2020,9 +2021,9 @@ static void iavf_adminq_task(struct work_struct *work)
        struct iavf_adapter *adapter =
                container_of(work, struct iavf_adapter, adminq_task);
        struct iavf_hw *hw = &adapter->hw;
-       struct i40e_arq_event_info event;
+       struct iavf_arq_event_info event;
        enum virtchnl_ops v_op;
-       iavf_status ret, v_ret;
+       enum iavf_status ret, v_ret;
        u32 val, oldval;
        u16 pending;
 
@@ -2037,7 +2038,7 @@ static void iavf_adminq_task(struct work_struct *work)
        do {
                ret = iavf_clean_arq_element(hw, &event, &pending);
                v_op = (enum virtchnl_ops)le32_to_cpu(event.desc.cookie_high);
-               v_ret = (iavf_status)le32_to_cpu(event.desc.cookie_low);
+               v_ret = (enum iavf_status)le32_to_cpu(event.desc.cookie_low);
 
                if (ret || !v_op)
                        break; /* No event to process or error cleaning ARQ */
@@ -2239,22 +2240,22 @@ static int iavf_validate_tx_bandwidth(struct iavf_adapter *adapter,
        int speed = 0, ret = 0;
 
        switch (adapter->link_speed) {
-       case I40E_LINK_SPEED_40GB:
+       case IAVF_LINK_SPEED_40GB:
                speed = 40000;
                break;
-       case I40E_LINK_SPEED_25GB:
+       case IAVF_LINK_SPEED_25GB:
                speed = 25000;
                break;
-       case I40E_LINK_SPEED_20GB:
+       case IAVF_LINK_SPEED_20GB:
                speed = 20000;
                break;
-       case I40E_LINK_SPEED_10GB:
+       case IAVF_LINK_SPEED_10GB:
                speed = 10000;
                break;
-       case I40E_LINK_SPEED_1GB:
+       case IAVF_LINK_SPEED_1GB:
                speed = 1000;
                break;
-       case I40E_LINK_SPEED_100MB:
+       case IAVF_LINK_SPEED_100MB:
                speed = 100;
                break;
        default:
@@ -2508,7 +2509,7 @@ static int iavf_parse_cls_flower(struct iavf_adapter *adapter,
                        } else {
                                dev_err(&adapter->pdev->dev, "Bad ether dest mask %pM\n",
                                        match.mask->dst);
-                               return I40E_ERR_CONFIG;
+                               return IAVF_ERR_CONFIG;
                        }
                }
 
@@ -2518,7 +2519,7 @@ static int iavf_parse_cls_flower(struct iavf_adapter *adapter,
                        } else {
                                dev_err(&adapter->pdev->dev, "Bad ether src mask %pM\n",
                                        match.mask->src);
-                               return I40E_ERR_CONFIG;
+                               return IAVF_ERR_CONFIG;
                        }
                }
 
@@ -2553,7 +2554,7 @@ static int iavf_parse_cls_flower(struct iavf_adapter *adapter,
                        } else {
                                dev_err(&adapter->pdev->dev, "Bad vlan mask %u\n",
                                        match.mask->vlan_id);
-                               return I40E_ERR_CONFIG;
+                               return IAVF_ERR_CONFIG;
                        }
                }
                vf->mask.tcp_spec.vlan_id |= cpu_to_be16(0xffff);
@@ -2577,7 +2578,7 @@ static int iavf_parse_cls_flower(struct iavf_adapter *adapter,
                        } else {
                                dev_err(&adapter->pdev->dev, "Bad ip dst mask 0x%08x\n",
                                        be32_to_cpu(match.mask->dst));
-                               return I40E_ERR_CONFIG;
+                               return IAVF_ERR_CONFIG;
                        }
                }
 
@@ -2587,13 +2588,13 @@ static int iavf_parse_cls_flower(struct iavf_adapter *adapter,
                        } else {
                                dev_err(&adapter->pdev->dev, "Bad ip src mask 0x%08x\n",
                                        be32_to_cpu(match.mask->dst));
-                               return I40E_ERR_CONFIG;
+                               return IAVF_ERR_CONFIG;
                        }
                }
 
                if (field_flags & IAVF_CLOUD_FIELD_TEN_ID) {
                        dev_info(&adapter->pdev->dev, "Tenant id not allowed for ip filter\n");
-                       return I40E_ERR_CONFIG;
+                       return IAVF_ERR_CONFIG;
                }
                if (match.key->dst) {
                        vf->mask.tcp_spec.dst_ip[0] |= cpu_to_be32(0xffffffff);
@@ -2614,7 +2615,7 @@ static int iavf_parse_cls_flower(struct iavf_adapter *adapter,
                if (ipv6_addr_any(&match.mask->dst)) {
                        dev_err(&adapter->pdev->dev, "Bad ipv6 dst mask 0x%02x\n",
                                IPV6_ADDR_ANY);
-                       return I40E_ERR_CONFIG;
+                       return IAVF_ERR_CONFIG;
                }
 
                /* src and dest IPv6 address should not be LOOPBACK
@@ -2624,7 +2625,7 @@ static int iavf_parse_cls_flower(struct iavf_adapter *adapter,
                    ipv6_addr_loopback(&match.key->src)) {
                        dev_err(&adapter->pdev->dev,
                                "ipv6 addr should not be loopback\n");
-                       return I40E_ERR_CONFIG;
+                       return IAVF_ERR_CONFIG;
                }
                if (!ipv6_addr_any(&match.mask->dst) ||
                    !ipv6_addr_any(&match.mask->src))
@@ -2649,7 +2650,7 @@ static int iavf_parse_cls_flower(struct iavf_adapter *adapter,
                        } else {
                                dev_err(&adapter->pdev->dev, "Bad src port mask %u\n",
                                        be16_to_cpu(match.mask->src));
-                               return I40E_ERR_CONFIG;
+                               return IAVF_ERR_CONFIG;
                        }
                }
 
@@ -2659,7 +2660,7 @@ static int iavf_parse_cls_flower(struct iavf_adapter *adapter,
                        } else {
                                dev_err(&adapter->pdev->dev, "Bad dst port mask %u\n",
                                        be16_to_cpu(match.mask->dst));
-                               return I40E_ERR_CONFIG;
+                               return IAVF_ERR_CONFIG;
                        }
                }
                if (match.key->dst) {
@@ -3353,7 +3354,7 @@ static void iavf_init_task(struct work_struct *work)
        struct net_device *netdev = adapter->netdev;
        struct iavf_hw *hw = &adapter->hw;
        struct pci_dev *pdev = adapter->pdev;
-       int err, bufsz;
+       int err;
 
        switch (adapter->state) {
        case __IAVF_STARTUP:
@@ -3402,7 +3403,7 @@ static void iavf_init_task(struct work_struct *work)
                /* aq msg sent, awaiting reply */
                err = iavf_verify_api_ver(adapter);
                if (err) {
-                       if (err == I40E_ERR_ADMIN_QUEUE_NO_WORK)
+                       if (err == IAVF_ERR_ADMIN_QUEUE_NO_WORK)
                                err = iavf_send_api_ver(adapter);
                        else
                                dev_err(&pdev->dev, "Unsupported PF API version %d.%d, expected %d.%d\n",
@@ -3423,18 +3424,17 @@ static void iavf_init_task(struct work_struct *work)
        case __IAVF_INIT_GET_RESOURCES:
                /* aq msg sent, awaiting reply */
                if (!adapter->vf_res) {
-                       bufsz = sizeof(struct virtchnl_vf_resource) +
-                               (IAVF_MAX_VF_VSI *
-                                sizeof(struct virtchnl_vsi_resource));
-                       adapter->vf_res = kzalloc(bufsz, GFP_KERNEL);
+                       adapter->vf_res = kzalloc(struct_size(adapter->vf_res,
+                                                 vsi_res, IAVF_MAX_VF_VSI),
+                                                 GFP_KERNEL);
                        if (!adapter->vf_res)
                                goto err;
                }
                err = iavf_get_vf_config(adapter);
-               if (err == I40E_ERR_ADMIN_QUEUE_NO_WORK) {
+               if (err == IAVF_ERR_ADMIN_QUEUE_NO_WORK) {
                        err = iavf_send_vf_config_msg(adapter);
                        goto err;
-               } else if (err == I40E_ERR_PARAM) {
+               } else if (err == IAVF_ERR_PARAM) {
                        /* We only get ERR_PARAM if the device is in a very bad
                         * state or if we've been disabled for previous bad
                         * behavior. Either way, we're done now.