Linux-libre 3.16.85-gnu
[librecmc/linux-libre.git] / drivers / net / ethernet / intel / i40e / i40e_main.c
1 /*******************************************************************************
2  *
3  * Intel Ethernet Controller XL710 Family Linux Driver
4  * Copyright(c) 2013 - 2014 Intel Corporation.
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms and conditions of the GNU General Public License,
8  * version 2, as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13  * more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program.  If not, see <http://www.gnu.org/licenses/>.
17  *
18  * The full GNU General Public License is included in this distribution in
19  * the file called "COPYING".
20  *
21  * Contact Information:
22  * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
23  * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
24  *
25  ******************************************************************************/
26
27 /* Local includes */
28 #include "i40e.h"
29 #include "i40e_diag.h"
30 #ifdef CONFIG_I40E_VXLAN
31 #include <net/vxlan.h>
32 #endif
33
34 const char i40e_driver_name[] = "i40e";
35 static const char i40e_driver_string[] =
36                         "Intel(R) Ethernet Connection XL710 Network Driver";
37
38 #define DRV_KERN "-k"
39
40 #define DRV_VERSION_MAJOR 0
41 #define DRV_VERSION_MINOR 4
42 #define DRV_VERSION_BUILD 10
43 #define DRV_VERSION __stringify(DRV_VERSION_MAJOR) "." \
44              __stringify(DRV_VERSION_MINOR) "." \
45              __stringify(DRV_VERSION_BUILD)    DRV_KERN
46 const char i40e_driver_version_str[] = DRV_VERSION;
47 static const char i40e_copyright[] = "Copyright (c) 2013 - 2014 Intel Corporation.";
48
49 /* a bit of forward declarations */
50 static void i40e_vsi_reinit_locked(struct i40e_vsi *vsi);
51 static void i40e_handle_reset_warning(struct i40e_pf *pf);
52 static int i40e_add_vsi(struct i40e_vsi *vsi);
53 static int i40e_add_veb(struct i40e_veb *veb, struct i40e_vsi *vsi);
54 static int i40e_setup_pf_switch(struct i40e_pf *pf, bool reinit);
55 static int i40e_setup_misc_vector(struct i40e_pf *pf);
56 static void i40e_determine_queue_usage(struct i40e_pf *pf);
57 static int i40e_setup_pf_filter_control(struct i40e_pf *pf);
58 static void i40e_fdir_sb_setup(struct i40e_pf *pf);
59 static int i40e_veb_get_bw_info(struct i40e_veb *veb);
60
61 /* i40e_pci_tbl - PCI Device ID Table
62  *
63  * Last entry must be all 0s
64  *
65  * { Vendor ID, Device ID, SubVendor ID, SubDevice ID,
66  *   Class, Class Mask, private data (not used) }
67  */
68 static DEFINE_PCI_DEVICE_TABLE(i40e_pci_tbl) = {
69         {PCI_VDEVICE(INTEL, I40E_DEV_ID_SFP_XL710), 0},
70         {PCI_VDEVICE(INTEL, I40E_DEV_ID_QEMU), 0},
71         {PCI_VDEVICE(INTEL, I40E_DEV_ID_KX_A), 0},
72         {PCI_VDEVICE(INTEL, I40E_DEV_ID_KX_B), 0},
73         {PCI_VDEVICE(INTEL, I40E_DEV_ID_KX_C), 0},
74         {PCI_VDEVICE(INTEL, I40E_DEV_ID_QSFP_A), 0},
75         {PCI_VDEVICE(INTEL, I40E_DEV_ID_QSFP_B), 0},
76         {PCI_VDEVICE(INTEL, I40E_DEV_ID_QSFP_C), 0},
77         /* required last entry */
78         {0, }
79 };
80 MODULE_DEVICE_TABLE(pci, i40e_pci_tbl);
81
82 #define I40E_MAX_VF_COUNT 128
83 static int debug = -1;
84 module_param(debug, int, 0);
85 MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)");
86
87 MODULE_AUTHOR("Intel Corporation, <e1000-devel@lists.sourceforge.net>");
88 MODULE_DESCRIPTION("Intel(R) Ethernet Connection XL710 Network Driver");
89 MODULE_LICENSE("GPL");
90 MODULE_VERSION(DRV_VERSION);
91
92 /**
93  * i40e_allocate_dma_mem_d - OS specific memory alloc for shared code
94  * @hw:   pointer to the HW structure
95  * @mem:  ptr to mem struct to fill out
96  * @size: size of memory requested
97  * @alignment: what to align the allocation to
98  **/
99 int i40e_allocate_dma_mem_d(struct i40e_hw *hw, struct i40e_dma_mem *mem,
100                             u64 size, u32 alignment)
101 {
102         struct i40e_pf *pf = (struct i40e_pf *)hw->back;
103
104         mem->size = ALIGN(size, alignment);
105         mem->va = dma_zalloc_coherent(&pf->pdev->dev, mem->size,
106                                       &mem->pa, GFP_KERNEL);
107         if (!mem->va)
108                 return -ENOMEM;
109
110         return 0;
111 }
112
113 /**
114  * i40e_free_dma_mem_d - OS specific memory free for shared code
115  * @hw:   pointer to the HW structure
116  * @mem:  ptr to mem struct to free
117  **/
118 int i40e_free_dma_mem_d(struct i40e_hw *hw, struct i40e_dma_mem *mem)
119 {
120         struct i40e_pf *pf = (struct i40e_pf *)hw->back;
121
122         dma_free_coherent(&pf->pdev->dev, mem->size, mem->va, mem->pa);
123         mem->va = NULL;
124         mem->pa = 0;
125         mem->size = 0;
126
127         return 0;
128 }
129
130 /**
131  * i40e_allocate_virt_mem_d - OS specific memory alloc for shared code
132  * @hw:   pointer to the HW structure
133  * @mem:  ptr to mem struct to fill out
134  * @size: size of memory requested
135  **/
136 int i40e_allocate_virt_mem_d(struct i40e_hw *hw, struct i40e_virt_mem *mem,
137                              u32 size)
138 {
139         mem->size = size;
140         mem->va = kzalloc(size, GFP_KERNEL);
141
142         if (!mem->va)
143                 return -ENOMEM;
144
145         return 0;
146 }
147
148 /**
149  * i40e_free_virt_mem_d - OS specific memory free for shared code
150  * @hw:   pointer to the HW structure
151  * @mem:  ptr to mem struct to free
152  **/
153 int i40e_free_virt_mem_d(struct i40e_hw *hw, struct i40e_virt_mem *mem)
154 {
155         /* it's ok to kfree a NULL pointer */
156         kfree(mem->va);
157         mem->va = NULL;
158         mem->size = 0;
159
160         return 0;
161 }
162
163 /**
164  * i40e_get_lump - find a lump of free generic resource
165  * @pf: board private structure
166  * @pile: the pile of resource to search
167  * @needed: the number of items needed
168  * @id: an owner id to stick on the items assigned
169  *
170  * Returns the base item index of the lump, or negative for error
171  *
172  * The search_hint trick and lack of advanced fit-finding only work
173  * because we're highly likely to have all the same size lump requests.
174  * Linear search time and any fragmentation should be minimal.
175  **/
176 static int i40e_get_lump(struct i40e_pf *pf, struct i40e_lump_tracking *pile,
177                          u16 needed, u16 id)
178 {
179         int ret = -ENOMEM;
180         int i, j;
181
182         if (!pile || needed == 0 || id >= I40E_PILE_VALID_BIT) {
183                 dev_info(&pf->pdev->dev,
184                          "param err: pile=%p needed=%d id=0x%04x\n",
185                          pile, needed, id);
186                 return -EINVAL;
187         }
188
189         /* start the linear search with an imperfect hint */
190         i = pile->search_hint;
191         while (i < pile->num_entries) {
192                 /* skip already allocated entries */
193                 if (pile->list[i] & I40E_PILE_VALID_BIT) {
194                         i++;
195                         continue;
196                 }
197
198                 /* do we have enough in this lump? */
199                 for (j = 0; (j < needed) && ((i+j) < pile->num_entries); j++) {
200                         if (pile->list[i+j] & I40E_PILE_VALID_BIT)
201                                 break;
202                 }
203
204                 if (j == needed) {
205                         /* there was enough, so assign it to the requestor */
206                         for (j = 0; j < needed; j++)
207                                 pile->list[i+j] = id | I40E_PILE_VALID_BIT;
208                         ret = i;
209                         pile->search_hint = i + j;
210                         break;
211                 } else {
212                         /* not enough, so skip over it and continue looking */
213                         i += j;
214                 }
215         }
216
217         return ret;
218 }
219
220 /**
221  * i40e_put_lump - return a lump of generic resource
222  * @pile: the pile of resource to search
223  * @index: the base item index
224  * @id: the owner id of the items assigned
225  *
226  * Returns the count of items in the lump
227  **/
228 static int i40e_put_lump(struct i40e_lump_tracking *pile, u16 index, u16 id)
229 {
230         int valid_id = (id | I40E_PILE_VALID_BIT);
231         int count = 0;
232         int i;
233
234         if (!pile || index >= pile->num_entries)
235                 return -EINVAL;
236
237         for (i = index;
238              i < pile->num_entries && pile->list[i] == valid_id;
239              i++) {
240                 pile->list[i] = 0;
241                 count++;
242         }
243
244         if (count && index < pile->search_hint)
245                 pile->search_hint = index;
246
247         return count;
248 }
249
250 /**
251  * i40e_service_event_schedule - Schedule the service task to wake up
252  * @pf: board private structure
253  *
254  * If not already scheduled, this puts the task into the work queue
255  **/
256 static void i40e_service_event_schedule(struct i40e_pf *pf)
257 {
258         if (!test_bit(__I40E_DOWN, &pf->state) &&
259             !test_bit(__I40E_RESET_RECOVERY_PENDING, &pf->state) &&
260             !test_and_set_bit(__I40E_SERVICE_SCHED, &pf->state))
261                 schedule_work(&pf->service_task);
262 }
263
264 /**
265  * i40e_tx_timeout - Respond to a Tx Hang
266  * @netdev: network interface device structure
267  *
268  * If any port has noticed a Tx timeout, it is likely that the whole
269  * device is munged, not just the one netdev port, so go for the full
270  * reset.
271  **/
272 static void i40e_tx_timeout(struct net_device *netdev)
273 {
274         struct i40e_netdev_priv *np = netdev_priv(netdev);
275         struct i40e_vsi *vsi = np->vsi;
276         struct i40e_pf *pf = vsi->back;
277
278         pf->tx_timeout_count++;
279
280         if (time_after(jiffies, (pf->tx_timeout_last_recovery + HZ*20)))
281                 pf->tx_timeout_recovery_level = 0;
282         pf->tx_timeout_last_recovery = jiffies;
283         netdev_info(netdev, "tx_timeout recovery level %d\n",
284                     pf->tx_timeout_recovery_level);
285
286         switch (pf->tx_timeout_recovery_level) {
287         case 0:
288                 /* disable and re-enable queues for the VSI */
289                 if (in_interrupt()) {
290                         set_bit(__I40E_REINIT_REQUESTED, &pf->state);
291                         set_bit(__I40E_REINIT_REQUESTED, &vsi->state);
292                 } else {
293                         i40e_vsi_reinit_locked(vsi);
294                 }
295                 break;
296         case 1:
297                 set_bit(__I40E_PF_RESET_REQUESTED, &pf->state);
298                 break;
299         case 2:
300                 set_bit(__I40E_CORE_RESET_REQUESTED, &pf->state);
301                 break;
302         case 3:
303                 set_bit(__I40E_GLOBAL_RESET_REQUESTED, &pf->state);
304                 break;
305         default:
306                 netdev_err(netdev, "tx_timeout recovery unsuccessful\n");
307                 set_bit(__I40E_DOWN, &vsi->state);
308                 i40e_down(vsi);
309                 break;
310         }
311         i40e_service_event_schedule(pf);
312         pf->tx_timeout_recovery_level++;
313 }
314
315 /**
316  * i40e_release_rx_desc - Store the new tail and head values
317  * @rx_ring: ring to bump
318  * @val: new head index
319  **/
320 static inline void i40e_release_rx_desc(struct i40e_ring *rx_ring, u32 val)
321 {
322         rx_ring->next_to_use = val;
323
324         /* Force memory writes to complete before letting h/w
325          * know there are new descriptors to fetch.  (Only
326          * applicable for weak-ordered memory model archs,
327          * such as IA-64).
328          */
329         wmb();
330         writel(val, rx_ring->tail);
331 }
332
333 /**
334  * i40e_get_vsi_stats_struct - Get System Network Statistics
335  * @vsi: the VSI we care about
336  *
337  * Returns the address of the device statistics structure.
338  * The statistics are actually updated from the service task.
339  **/
340 struct rtnl_link_stats64 *i40e_get_vsi_stats_struct(struct i40e_vsi *vsi)
341 {
342         return &vsi->net_stats;
343 }
344
345 /**
346  * i40e_get_netdev_stats_struct - Get statistics for netdev interface
347  * @netdev: network interface device structure
348  *
349  * Returns the address of the device statistics structure.
350  * The statistics are actually updated from the service task.
351  **/
352 static struct rtnl_link_stats64 *i40e_get_netdev_stats_struct(
353                                              struct net_device *netdev,
354                                              struct rtnl_link_stats64 *stats)
355 {
356         struct i40e_netdev_priv *np = netdev_priv(netdev);
357         struct i40e_ring *tx_ring, *rx_ring;
358         struct i40e_vsi *vsi = np->vsi;
359         struct rtnl_link_stats64 *vsi_stats = i40e_get_vsi_stats_struct(vsi);
360         int i;
361
362         if (test_bit(__I40E_DOWN, &vsi->state))
363                 return stats;
364
365         if (!vsi->tx_rings)
366                 return stats;
367
368         rcu_read_lock();
369         for (i = 0; i < vsi->num_queue_pairs; i++) {
370                 u64 bytes, packets;
371                 unsigned int start;
372
373                 tx_ring = ACCESS_ONCE(vsi->tx_rings[i]);
374                 if (!tx_ring)
375                         continue;
376
377                 do {
378                         start = u64_stats_fetch_begin_irq(&tx_ring->syncp);
379                         packets = tx_ring->stats.packets;
380                         bytes   = tx_ring->stats.bytes;
381                 } while (u64_stats_fetch_retry_irq(&tx_ring->syncp, start));
382
383                 stats->tx_packets += packets;
384                 stats->tx_bytes   += bytes;
385                 rx_ring = &tx_ring[1];
386
387                 do {
388                         start = u64_stats_fetch_begin_irq(&rx_ring->syncp);
389                         packets = rx_ring->stats.packets;
390                         bytes   = rx_ring->stats.bytes;
391                 } while (u64_stats_fetch_retry_irq(&rx_ring->syncp, start));
392
393                 stats->rx_packets += packets;
394                 stats->rx_bytes   += bytes;
395         }
396         rcu_read_unlock();
397
398         /* following stats updated by i40e_watchdog_subtask() */
399         stats->multicast        = vsi_stats->multicast;
400         stats->tx_errors        = vsi_stats->tx_errors;
401         stats->tx_dropped       = vsi_stats->tx_dropped;
402         stats->rx_errors        = vsi_stats->rx_errors;
403         stats->rx_crc_errors    = vsi_stats->rx_crc_errors;
404         stats->rx_length_errors = vsi_stats->rx_length_errors;
405
406         return stats;
407 }
408
409 /**
410  * i40e_vsi_reset_stats - Resets all stats of the given vsi
411  * @vsi: the VSI to have its stats reset
412  **/
413 void i40e_vsi_reset_stats(struct i40e_vsi *vsi)
414 {
415         struct rtnl_link_stats64 *ns;
416         int i;
417
418         if (!vsi)
419                 return;
420
421         ns = i40e_get_vsi_stats_struct(vsi);
422         memset(ns, 0, sizeof(*ns));
423         memset(&vsi->net_stats_offsets, 0, sizeof(vsi->net_stats_offsets));
424         memset(&vsi->eth_stats, 0, sizeof(vsi->eth_stats));
425         memset(&vsi->eth_stats_offsets, 0, sizeof(vsi->eth_stats_offsets));
426         if (vsi->rx_rings && vsi->rx_rings[0]) {
427                 for (i = 0; i < vsi->num_queue_pairs; i++) {
428                         memset(&vsi->rx_rings[i]->stats, 0 ,
429                                sizeof(vsi->rx_rings[i]->stats));
430                         memset(&vsi->rx_rings[i]->rx_stats, 0 ,
431                                sizeof(vsi->rx_rings[i]->rx_stats));
432                         memset(&vsi->tx_rings[i]->stats, 0 ,
433                                sizeof(vsi->tx_rings[i]->stats));
434                         memset(&vsi->tx_rings[i]->tx_stats, 0,
435                                sizeof(vsi->tx_rings[i]->tx_stats));
436                 }
437         }
438         vsi->stat_offsets_loaded = false;
439 }
440
441 /**
442  * i40e_pf_reset_stats - Reset all of the stats for the given pf
443  * @pf: the PF to be reset
444  **/
445 void i40e_pf_reset_stats(struct i40e_pf *pf)
446 {
447         memset(&pf->stats, 0, sizeof(pf->stats));
448         memset(&pf->stats_offsets, 0, sizeof(pf->stats_offsets));
449         pf->stat_offsets_loaded = false;
450 }
451
452 /**
453  * i40e_stat_update48 - read and update a 48 bit stat from the chip
454  * @hw: ptr to the hardware info
455  * @hireg: the high 32 bit reg to read
456  * @loreg: the low 32 bit reg to read
457  * @offset_loaded: has the initial offset been loaded yet
458  * @offset: ptr to current offset value
459  * @stat: ptr to the stat
460  *
461  * Since the device stats are not reset at PFReset, they likely will not
462  * be zeroed when the driver starts.  We'll save the first values read
463  * and use them as offsets to be subtracted from the raw values in order
464  * to report stats that count from zero.  In the process, we also manage
465  * the potential roll-over.
466  **/
467 static void i40e_stat_update48(struct i40e_hw *hw, u32 hireg, u32 loreg,
468                                bool offset_loaded, u64 *offset, u64 *stat)
469 {
470         u64 new_data;
471
472         if (hw->device_id == I40E_DEV_ID_QEMU) {
473                 new_data = rd32(hw, loreg);
474                 new_data |= ((u64)(rd32(hw, hireg) & 0xFFFF)) << 32;
475         } else {
476                 new_data = rd64(hw, loreg);
477         }
478         if (!offset_loaded)
479                 *offset = new_data;
480         if (likely(new_data >= *offset))
481                 *stat = new_data - *offset;
482         else
483                 *stat = (new_data + ((u64)1 << 48)) - *offset;
484         *stat &= 0xFFFFFFFFFFFFULL;
485 }
486
487 /**
488  * i40e_stat_update32 - read and update a 32 bit stat from the chip
489  * @hw: ptr to the hardware info
490  * @reg: the hw reg to read
491  * @offset_loaded: has the initial offset been loaded yet
492  * @offset: ptr to current offset value
493  * @stat: ptr to the stat
494  **/
495 static void i40e_stat_update32(struct i40e_hw *hw, u32 reg,
496                                bool offset_loaded, u64 *offset, u64 *stat)
497 {
498         u32 new_data;
499
500         new_data = rd32(hw, reg);
501         if (!offset_loaded)
502                 *offset = new_data;
503         if (likely(new_data >= *offset))
504                 *stat = (u32)(new_data - *offset);
505         else
506                 *stat = (u32)((new_data + ((u64)1 << 32)) - *offset);
507 }
508
509 /**
510  * i40e_update_eth_stats - Update VSI-specific ethernet statistics counters.
511  * @vsi: the VSI to be updated
512  **/
513 void i40e_update_eth_stats(struct i40e_vsi *vsi)
514 {
515         int stat_idx = le16_to_cpu(vsi->info.stat_counter_idx);
516         struct i40e_pf *pf = vsi->back;
517         struct i40e_hw *hw = &pf->hw;
518         struct i40e_eth_stats *oes;
519         struct i40e_eth_stats *es;     /* device's eth stats */
520
521         es = &vsi->eth_stats;
522         oes = &vsi->eth_stats_offsets;
523
524         /* Gather up the stats that the hw collects */
525         i40e_stat_update32(hw, I40E_GLV_TEPC(stat_idx),
526                            vsi->stat_offsets_loaded,
527                            &oes->tx_errors, &es->tx_errors);
528         i40e_stat_update32(hw, I40E_GLV_RDPC(stat_idx),
529                            vsi->stat_offsets_loaded,
530                            &oes->rx_discards, &es->rx_discards);
531         i40e_stat_update32(hw, I40E_GLV_RUPP(stat_idx),
532                            vsi->stat_offsets_loaded,
533                            &oes->rx_unknown_protocol, &es->rx_unknown_protocol);
534         i40e_stat_update32(hw, I40E_GLV_TEPC(stat_idx),
535                            vsi->stat_offsets_loaded,
536                            &oes->tx_errors, &es->tx_errors);
537
538         i40e_stat_update48(hw, I40E_GLV_GORCH(stat_idx),
539                            I40E_GLV_GORCL(stat_idx),
540                            vsi->stat_offsets_loaded,
541                            &oes->rx_bytes, &es->rx_bytes);
542         i40e_stat_update48(hw, I40E_GLV_UPRCH(stat_idx),
543                            I40E_GLV_UPRCL(stat_idx),
544                            vsi->stat_offsets_loaded,
545                            &oes->rx_unicast, &es->rx_unicast);
546         i40e_stat_update48(hw, I40E_GLV_MPRCH(stat_idx),
547                            I40E_GLV_MPRCL(stat_idx),
548                            vsi->stat_offsets_loaded,
549                            &oes->rx_multicast, &es->rx_multicast);
550         i40e_stat_update48(hw, I40E_GLV_BPRCH(stat_idx),
551                            I40E_GLV_BPRCL(stat_idx),
552                            vsi->stat_offsets_loaded,
553                            &oes->rx_broadcast, &es->rx_broadcast);
554
555         i40e_stat_update48(hw, I40E_GLV_GOTCH(stat_idx),
556                            I40E_GLV_GOTCL(stat_idx),
557                            vsi->stat_offsets_loaded,
558                            &oes->tx_bytes, &es->tx_bytes);
559         i40e_stat_update48(hw, I40E_GLV_UPTCH(stat_idx),
560                            I40E_GLV_UPTCL(stat_idx),
561                            vsi->stat_offsets_loaded,
562                            &oes->tx_unicast, &es->tx_unicast);
563         i40e_stat_update48(hw, I40E_GLV_MPTCH(stat_idx),
564                            I40E_GLV_MPTCL(stat_idx),
565                            vsi->stat_offsets_loaded,
566                            &oes->tx_multicast, &es->tx_multicast);
567         i40e_stat_update48(hw, I40E_GLV_BPTCH(stat_idx),
568                            I40E_GLV_BPTCL(stat_idx),
569                            vsi->stat_offsets_loaded,
570                            &oes->tx_broadcast, &es->tx_broadcast);
571         vsi->stat_offsets_loaded = true;
572 }
573
574 /**
575  * i40e_update_veb_stats - Update Switch component statistics
576  * @veb: the VEB being updated
577  **/
578 static void i40e_update_veb_stats(struct i40e_veb *veb)
579 {
580         struct i40e_pf *pf = veb->pf;
581         struct i40e_hw *hw = &pf->hw;
582         struct i40e_eth_stats *oes;
583         struct i40e_eth_stats *es;     /* device's eth stats */
584         int idx = 0;
585
586         idx = veb->stats_idx;
587         es = &veb->stats;
588         oes = &veb->stats_offsets;
589
590         /* Gather up the stats that the hw collects */
591         i40e_stat_update32(hw, I40E_GLSW_TDPC(idx),
592                            veb->stat_offsets_loaded,
593                            &oes->tx_discards, &es->tx_discards);
594         if (hw->revision_id > 0)
595                 i40e_stat_update32(hw, I40E_GLSW_RUPP(idx),
596                                    veb->stat_offsets_loaded,
597                                    &oes->rx_unknown_protocol,
598                                    &es->rx_unknown_protocol);
599         i40e_stat_update48(hw, I40E_GLSW_GORCH(idx), I40E_GLSW_GORCL(idx),
600                            veb->stat_offsets_loaded,
601                            &oes->rx_bytes, &es->rx_bytes);
602         i40e_stat_update48(hw, I40E_GLSW_UPRCH(idx), I40E_GLSW_UPRCL(idx),
603                            veb->stat_offsets_loaded,
604                            &oes->rx_unicast, &es->rx_unicast);
605         i40e_stat_update48(hw, I40E_GLSW_MPRCH(idx), I40E_GLSW_MPRCL(idx),
606                            veb->stat_offsets_loaded,
607                            &oes->rx_multicast, &es->rx_multicast);
608         i40e_stat_update48(hw, I40E_GLSW_BPRCH(idx), I40E_GLSW_BPRCL(idx),
609                            veb->stat_offsets_loaded,
610                            &oes->rx_broadcast, &es->rx_broadcast);
611
612         i40e_stat_update48(hw, I40E_GLSW_GOTCH(idx), I40E_GLSW_GOTCL(idx),
613                            veb->stat_offsets_loaded,
614                            &oes->tx_bytes, &es->tx_bytes);
615         i40e_stat_update48(hw, I40E_GLSW_UPTCH(idx), I40E_GLSW_UPTCL(idx),
616                            veb->stat_offsets_loaded,
617                            &oes->tx_unicast, &es->tx_unicast);
618         i40e_stat_update48(hw, I40E_GLSW_MPTCH(idx), I40E_GLSW_MPTCL(idx),
619                            veb->stat_offsets_loaded,
620                            &oes->tx_multicast, &es->tx_multicast);
621         i40e_stat_update48(hw, I40E_GLSW_BPTCH(idx), I40E_GLSW_BPTCL(idx),
622                            veb->stat_offsets_loaded,
623                            &oes->tx_broadcast, &es->tx_broadcast);
624         veb->stat_offsets_loaded = true;
625 }
626
627 /**
628  * i40e_update_link_xoff_rx - Update XOFF received in link flow control mode
629  * @pf: the corresponding PF
630  *
631  * Update the Rx XOFF counter (PAUSE frames) in link flow control mode
632  **/
633 static void i40e_update_link_xoff_rx(struct i40e_pf *pf)
634 {
635         struct i40e_hw_port_stats *osd = &pf->stats_offsets;
636         struct i40e_hw_port_stats *nsd = &pf->stats;
637         struct i40e_hw *hw = &pf->hw;
638         u64 xoff = 0;
639         u16 i, v;
640
641         if ((hw->fc.current_mode != I40E_FC_FULL) &&
642             (hw->fc.current_mode != I40E_FC_RX_PAUSE))
643                 return;
644
645         xoff = nsd->link_xoff_rx;
646         i40e_stat_update32(hw, I40E_GLPRT_LXOFFRXC(hw->port),
647                            pf->stat_offsets_loaded,
648                            &osd->link_xoff_rx, &nsd->link_xoff_rx);
649
650         /* No new LFC xoff rx */
651         if (!(nsd->link_xoff_rx - xoff))
652                 return;
653
654         /* Clear the __I40E_HANG_CHECK_ARMED bit for all Tx rings */
655         for (v = 0; v < pf->num_alloc_vsi; v++) {
656                 struct i40e_vsi *vsi = pf->vsi[v];
657
658                 if (!vsi || !vsi->tx_rings[0])
659                         continue;
660
661                 for (i = 0; i < vsi->num_queue_pairs; i++) {
662                         struct i40e_ring *ring = vsi->tx_rings[i];
663                         clear_bit(__I40E_HANG_CHECK_ARMED, &ring->state);
664                 }
665         }
666 }
667
668 /**
669  * i40e_update_prio_xoff_rx - Update XOFF received in PFC mode
670  * @pf: the corresponding PF
671  *
672  * Update the Rx XOFF counter (PAUSE frames) in PFC mode
673  **/
674 static void i40e_update_prio_xoff_rx(struct i40e_pf *pf)
675 {
676         struct i40e_hw_port_stats *osd = &pf->stats_offsets;
677         struct i40e_hw_port_stats *nsd = &pf->stats;
678         bool xoff[I40E_MAX_TRAFFIC_CLASS] = {false};
679         struct i40e_dcbx_config *dcb_cfg;
680         struct i40e_hw *hw = &pf->hw;
681         u16 i, v;
682         u8 tc;
683
684         dcb_cfg = &hw->local_dcbx_config;
685
686         /* See if DCB enabled with PFC TC */
687         if (!(pf->flags & I40E_FLAG_DCB_ENABLED) ||
688             !(dcb_cfg->pfc.pfcenable)) {
689                 i40e_update_link_xoff_rx(pf);
690                 return;
691         }
692
693         for (i = 0; i < I40E_MAX_USER_PRIORITY; i++) {
694                 u64 prio_xoff = nsd->priority_xoff_rx[i];
695                 i40e_stat_update32(hw, I40E_GLPRT_PXOFFRXC(hw->port, i),
696                                    pf->stat_offsets_loaded,
697                                    &osd->priority_xoff_rx[i],
698                                    &nsd->priority_xoff_rx[i]);
699
700                 /* No new PFC xoff rx */
701                 if (!(nsd->priority_xoff_rx[i] - prio_xoff))
702                         continue;
703                 /* Get the TC for given priority */
704                 tc = dcb_cfg->etscfg.prioritytable[i];
705                 xoff[tc] = true;
706         }
707
708         /* Clear the __I40E_HANG_CHECK_ARMED bit for Tx rings */
709         for (v = 0; v < pf->num_alloc_vsi; v++) {
710                 struct i40e_vsi *vsi = pf->vsi[v];
711
712                 if (!vsi || !vsi->tx_rings[0])
713                         continue;
714
715                 for (i = 0; i < vsi->num_queue_pairs; i++) {
716                         struct i40e_ring *ring = vsi->tx_rings[i];
717
718                         tc = ring->dcb_tc;
719                         if (xoff[tc])
720                                 clear_bit(__I40E_HANG_CHECK_ARMED,
721                                           &ring->state);
722                 }
723         }
724 }
725
726 /**
727  * i40e_update_vsi_stats - Update the vsi statistics counters.
728  * @vsi: the VSI to be updated
729  *
730  * There are a few instances where we store the same stat in a
731  * couple of different structs.  This is partly because we have
732  * the netdev stats that need to be filled out, which is slightly
733  * different from the "eth_stats" defined by the chip and used in
734  * VF communications.  We sort it out here.
735  **/
736 static void i40e_update_vsi_stats(struct i40e_vsi *vsi)
737 {
738         struct i40e_pf *pf = vsi->back;
739         struct rtnl_link_stats64 *ons;
740         struct rtnl_link_stats64 *ns;   /* netdev stats */
741         struct i40e_eth_stats *oes;
742         struct i40e_eth_stats *es;     /* device's eth stats */
743         u32 tx_restart, tx_busy;
744         u32 rx_page, rx_buf;
745         u64 rx_p, rx_b;
746         u64 tx_p, tx_b;
747         u16 q;
748
749         if (test_bit(__I40E_DOWN, &vsi->state) ||
750             test_bit(__I40E_CONFIG_BUSY, &pf->state))
751                 return;
752
753         ns = i40e_get_vsi_stats_struct(vsi);
754         ons = &vsi->net_stats_offsets;
755         es = &vsi->eth_stats;
756         oes = &vsi->eth_stats_offsets;
757
758         /* Gather up the netdev and vsi stats that the driver collects
759          * on the fly during packet processing
760          */
761         rx_b = rx_p = 0;
762         tx_b = tx_p = 0;
763         tx_restart = tx_busy = 0;
764         rx_page = 0;
765         rx_buf = 0;
766         rcu_read_lock();
767         for (q = 0; q < vsi->num_queue_pairs; q++) {
768                 struct i40e_ring *p;
769                 u64 bytes, packets;
770                 unsigned int start;
771
772                 /* locate Tx ring */
773                 p = ACCESS_ONCE(vsi->tx_rings[q]);
774
775                 do {
776                         start = u64_stats_fetch_begin_irq(&p->syncp);
777                         packets = p->stats.packets;
778                         bytes = p->stats.bytes;
779                 } while (u64_stats_fetch_retry_irq(&p->syncp, start));
780                 tx_b += bytes;
781                 tx_p += packets;
782                 tx_restart += p->tx_stats.restart_queue;
783                 tx_busy += p->tx_stats.tx_busy;
784
785                 /* Rx queue is part of the same block as Tx queue */
786                 p = &p[1];
787                 do {
788                         start = u64_stats_fetch_begin_irq(&p->syncp);
789                         packets = p->stats.packets;
790                         bytes = p->stats.bytes;
791                 } while (u64_stats_fetch_retry_irq(&p->syncp, start));
792                 rx_b += bytes;
793                 rx_p += packets;
794                 rx_buf += p->rx_stats.alloc_buff_failed;
795                 rx_page += p->rx_stats.alloc_page_failed;
796         }
797         rcu_read_unlock();
798         vsi->tx_restart = tx_restart;
799         vsi->tx_busy = tx_busy;
800         vsi->rx_page_failed = rx_page;
801         vsi->rx_buf_failed = rx_buf;
802
803         ns->rx_packets = rx_p;
804         ns->rx_bytes = rx_b;
805         ns->tx_packets = tx_p;
806         ns->tx_bytes = tx_b;
807
808         /* update netdev stats from eth stats */
809         i40e_update_eth_stats(vsi);
810         ons->tx_errors = oes->tx_errors;
811         ns->tx_errors = es->tx_errors;
812         ons->multicast = oes->rx_multicast;
813         ns->multicast = es->rx_multicast;
814         ons->rx_dropped = oes->rx_discards;
815         ns->rx_dropped = es->rx_discards;
816         ons->tx_dropped = oes->tx_discards;
817         ns->tx_dropped = es->tx_discards;
818
819         /* pull in a couple PF stats if this is the main vsi */
820         if (vsi == pf->vsi[pf->lan_vsi]) {
821                 ns->rx_crc_errors = pf->stats.crc_errors;
822                 ns->rx_errors = pf->stats.crc_errors + pf->stats.illegal_bytes;
823                 ns->rx_length_errors = pf->stats.rx_length_errors;
824         }
825 }
826
827 /**
828  * i40e_update_pf_stats - Update the pf statistics counters.
829  * @pf: the PF to be updated
830  **/
831 static void i40e_update_pf_stats(struct i40e_pf *pf)
832 {
833         struct i40e_hw_port_stats *osd = &pf->stats_offsets;
834         struct i40e_hw_port_stats *nsd = &pf->stats;
835         struct i40e_hw *hw = &pf->hw;
836         u32 val;
837         int i;
838
839         i40e_stat_update48(hw, I40E_GLPRT_GORCH(hw->port),
840                            I40E_GLPRT_GORCL(hw->port),
841                            pf->stat_offsets_loaded,
842                            &osd->eth.rx_bytes, &nsd->eth.rx_bytes);
843         i40e_stat_update48(hw, I40E_GLPRT_GOTCH(hw->port),
844                            I40E_GLPRT_GOTCL(hw->port),
845                            pf->stat_offsets_loaded,
846                            &osd->eth.tx_bytes, &nsd->eth.tx_bytes);
847         i40e_stat_update32(hw, I40E_GLPRT_RDPC(hw->port),
848                            pf->stat_offsets_loaded,
849                            &osd->eth.rx_discards,
850                            &nsd->eth.rx_discards);
851         i40e_stat_update32(hw, I40E_GLPRT_TDPC(hw->port),
852                            pf->stat_offsets_loaded,
853                            &osd->eth.tx_discards,
854                            &nsd->eth.tx_discards);
855
856         i40e_stat_update48(hw, I40E_GLPRT_UPRCH(hw->port),
857                            I40E_GLPRT_UPRCL(hw->port),
858                            pf->stat_offsets_loaded,
859                            &osd->eth.rx_unicast,
860                            &nsd->eth.rx_unicast);
861         i40e_stat_update48(hw, I40E_GLPRT_MPRCH(hw->port),
862                            I40E_GLPRT_MPRCL(hw->port),
863                            pf->stat_offsets_loaded,
864                            &osd->eth.rx_multicast,
865                            &nsd->eth.rx_multicast);
866         i40e_stat_update48(hw, I40E_GLPRT_BPRCH(hw->port),
867                            I40E_GLPRT_BPRCL(hw->port),
868                            pf->stat_offsets_loaded,
869                            &osd->eth.rx_broadcast,
870                            &nsd->eth.rx_broadcast);
871         i40e_stat_update48(hw, I40E_GLPRT_UPTCH(hw->port),
872                            I40E_GLPRT_UPTCL(hw->port),
873                            pf->stat_offsets_loaded,
874                            &osd->eth.tx_unicast,
875                            &nsd->eth.tx_unicast);
876         i40e_stat_update48(hw, I40E_GLPRT_MPTCH(hw->port),
877                            I40E_GLPRT_MPTCL(hw->port),
878                            pf->stat_offsets_loaded,
879                            &osd->eth.tx_multicast,
880                            &nsd->eth.tx_multicast);
881         i40e_stat_update48(hw, I40E_GLPRT_BPTCH(hw->port),
882                            I40E_GLPRT_BPTCL(hw->port),
883                            pf->stat_offsets_loaded,
884                            &osd->eth.tx_broadcast,
885                            &nsd->eth.tx_broadcast);
886
887         i40e_stat_update32(hw, I40E_GLPRT_TDOLD(hw->port),
888                            pf->stat_offsets_loaded,
889                            &osd->tx_dropped_link_down,
890                            &nsd->tx_dropped_link_down);
891
892         i40e_stat_update32(hw, I40E_GLPRT_CRCERRS(hw->port),
893                            pf->stat_offsets_loaded,
894                            &osd->crc_errors, &nsd->crc_errors);
895
896         i40e_stat_update32(hw, I40E_GLPRT_ILLERRC(hw->port),
897                            pf->stat_offsets_loaded,
898                            &osd->illegal_bytes, &nsd->illegal_bytes);
899
900         i40e_stat_update32(hw, I40E_GLPRT_MLFC(hw->port),
901                            pf->stat_offsets_loaded,
902                            &osd->mac_local_faults,
903                            &nsd->mac_local_faults);
904         i40e_stat_update32(hw, I40E_GLPRT_MRFC(hw->port),
905                            pf->stat_offsets_loaded,
906                            &osd->mac_remote_faults,
907                            &nsd->mac_remote_faults);
908
909         i40e_stat_update32(hw, I40E_GLPRT_RLEC(hw->port),
910                            pf->stat_offsets_loaded,
911                            &osd->rx_length_errors,
912                            &nsd->rx_length_errors);
913
914         i40e_stat_update32(hw, I40E_GLPRT_LXONRXC(hw->port),
915                            pf->stat_offsets_loaded,
916                            &osd->link_xon_rx, &nsd->link_xon_rx);
917         i40e_stat_update32(hw, I40E_GLPRT_LXONTXC(hw->port),
918                            pf->stat_offsets_loaded,
919                            &osd->link_xon_tx, &nsd->link_xon_tx);
920         i40e_update_prio_xoff_rx(pf);  /* handles I40E_GLPRT_LXOFFRXC */
921         i40e_stat_update32(hw, I40E_GLPRT_LXOFFTXC(hw->port),
922                            pf->stat_offsets_loaded,
923                            &osd->link_xoff_tx, &nsd->link_xoff_tx);
924
925         for (i = 0; i < 8; i++) {
926                 i40e_stat_update32(hw, I40E_GLPRT_PXONRXC(hw->port, i),
927                                    pf->stat_offsets_loaded,
928                                    &osd->priority_xon_rx[i],
929                                    &nsd->priority_xon_rx[i]);
930                 i40e_stat_update32(hw, I40E_GLPRT_PXONTXC(hw->port, i),
931                                    pf->stat_offsets_loaded,
932                                    &osd->priority_xon_tx[i],
933                                    &nsd->priority_xon_tx[i]);
934                 i40e_stat_update32(hw, I40E_GLPRT_PXOFFTXC(hw->port, i),
935                                    pf->stat_offsets_loaded,
936                                    &osd->priority_xoff_tx[i],
937                                    &nsd->priority_xoff_tx[i]);
938                 i40e_stat_update32(hw,
939                                    I40E_GLPRT_RXON2OFFCNT(hw->port, i),
940                                    pf->stat_offsets_loaded,
941                                    &osd->priority_xon_2_xoff[i],
942                                    &nsd->priority_xon_2_xoff[i]);
943         }
944
945         i40e_stat_update48(hw, I40E_GLPRT_PRC64H(hw->port),
946                            I40E_GLPRT_PRC64L(hw->port),
947                            pf->stat_offsets_loaded,
948                            &osd->rx_size_64, &nsd->rx_size_64);
949         i40e_stat_update48(hw, I40E_GLPRT_PRC127H(hw->port),
950                            I40E_GLPRT_PRC127L(hw->port),
951                            pf->stat_offsets_loaded,
952                            &osd->rx_size_127, &nsd->rx_size_127);
953         i40e_stat_update48(hw, I40E_GLPRT_PRC255H(hw->port),
954                            I40E_GLPRT_PRC255L(hw->port),
955                            pf->stat_offsets_loaded,
956                            &osd->rx_size_255, &nsd->rx_size_255);
957         i40e_stat_update48(hw, I40E_GLPRT_PRC511H(hw->port),
958                            I40E_GLPRT_PRC511L(hw->port),
959                            pf->stat_offsets_loaded,
960                            &osd->rx_size_511, &nsd->rx_size_511);
961         i40e_stat_update48(hw, I40E_GLPRT_PRC1023H(hw->port),
962                            I40E_GLPRT_PRC1023L(hw->port),
963                            pf->stat_offsets_loaded,
964                            &osd->rx_size_1023, &nsd->rx_size_1023);
965         i40e_stat_update48(hw, I40E_GLPRT_PRC1522H(hw->port),
966                            I40E_GLPRT_PRC1522L(hw->port),
967                            pf->stat_offsets_loaded,
968                            &osd->rx_size_1522, &nsd->rx_size_1522);
969         i40e_stat_update48(hw, I40E_GLPRT_PRC9522H(hw->port),
970                            I40E_GLPRT_PRC9522L(hw->port),
971                            pf->stat_offsets_loaded,
972                            &osd->rx_size_big, &nsd->rx_size_big);
973
974         i40e_stat_update48(hw, I40E_GLPRT_PTC64H(hw->port),
975                            I40E_GLPRT_PTC64L(hw->port),
976                            pf->stat_offsets_loaded,
977                            &osd->tx_size_64, &nsd->tx_size_64);
978         i40e_stat_update48(hw, I40E_GLPRT_PTC127H(hw->port),
979                            I40E_GLPRT_PTC127L(hw->port),
980                            pf->stat_offsets_loaded,
981                            &osd->tx_size_127, &nsd->tx_size_127);
982         i40e_stat_update48(hw, I40E_GLPRT_PTC255H(hw->port),
983                            I40E_GLPRT_PTC255L(hw->port),
984                            pf->stat_offsets_loaded,
985                            &osd->tx_size_255, &nsd->tx_size_255);
986         i40e_stat_update48(hw, I40E_GLPRT_PTC511H(hw->port),
987                            I40E_GLPRT_PTC511L(hw->port),
988                            pf->stat_offsets_loaded,
989                            &osd->tx_size_511, &nsd->tx_size_511);
990         i40e_stat_update48(hw, I40E_GLPRT_PTC1023H(hw->port),
991                            I40E_GLPRT_PTC1023L(hw->port),
992                            pf->stat_offsets_loaded,
993                            &osd->tx_size_1023, &nsd->tx_size_1023);
994         i40e_stat_update48(hw, I40E_GLPRT_PTC1522H(hw->port),
995                            I40E_GLPRT_PTC1522L(hw->port),
996                            pf->stat_offsets_loaded,
997                            &osd->tx_size_1522, &nsd->tx_size_1522);
998         i40e_stat_update48(hw, I40E_GLPRT_PTC9522H(hw->port),
999                            I40E_GLPRT_PTC9522L(hw->port),
1000                            pf->stat_offsets_loaded,
1001                            &osd->tx_size_big, &nsd->tx_size_big);
1002
1003         i40e_stat_update32(hw, I40E_GLPRT_RUC(hw->port),
1004                            pf->stat_offsets_loaded,
1005                            &osd->rx_undersize, &nsd->rx_undersize);
1006         i40e_stat_update32(hw, I40E_GLPRT_RFC(hw->port),
1007                            pf->stat_offsets_loaded,
1008                            &osd->rx_fragments, &nsd->rx_fragments);
1009         i40e_stat_update32(hw, I40E_GLPRT_ROC(hw->port),
1010                            pf->stat_offsets_loaded,
1011                            &osd->rx_oversize, &nsd->rx_oversize);
1012         i40e_stat_update32(hw, I40E_GLPRT_RJC(hw->port),
1013                            pf->stat_offsets_loaded,
1014                            &osd->rx_jabber, &nsd->rx_jabber);
1015
1016         /* FDIR stats */
1017         i40e_stat_update32(hw, I40E_GLQF_PCNT(pf->fd_atr_cnt_idx),
1018                            pf->stat_offsets_loaded,
1019                            &osd->fd_atr_match, &nsd->fd_atr_match);
1020         i40e_stat_update32(hw, I40E_GLQF_PCNT(pf->fd_sb_cnt_idx),
1021                            pf->stat_offsets_loaded,
1022                            &osd->fd_sb_match, &nsd->fd_sb_match);
1023
1024         val = rd32(hw, I40E_PRTPM_EEE_STAT);
1025         nsd->tx_lpi_status =
1026                        (val & I40E_PRTPM_EEE_STAT_TX_LPI_STATUS_MASK) >>
1027                         I40E_PRTPM_EEE_STAT_TX_LPI_STATUS_SHIFT;
1028         nsd->rx_lpi_status =
1029                        (val & I40E_PRTPM_EEE_STAT_RX_LPI_STATUS_MASK) >>
1030                         I40E_PRTPM_EEE_STAT_RX_LPI_STATUS_SHIFT;
1031         i40e_stat_update32(hw, I40E_PRTPM_TLPIC,
1032                            pf->stat_offsets_loaded,
1033                            &osd->tx_lpi_count, &nsd->tx_lpi_count);
1034         i40e_stat_update32(hw, I40E_PRTPM_RLPIC,
1035                            pf->stat_offsets_loaded,
1036                            &osd->rx_lpi_count, &nsd->rx_lpi_count);
1037
1038         pf->stat_offsets_loaded = true;
1039 }
1040
1041 /**
1042  * i40e_update_stats - Update the various statistics counters.
1043  * @vsi: the VSI to be updated
1044  *
1045  * Update the various stats for this VSI and its related entities.
1046  **/
1047 void i40e_update_stats(struct i40e_vsi *vsi)
1048 {
1049         struct i40e_pf *pf = vsi->back;
1050
1051         if (vsi == pf->vsi[pf->lan_vsi])
1052                 i40e_update_pf_stats(pf);
1053
1054         i40e_update_vsi_stats(vsi);
1055 }
1056
1057 /**
1058  * i40e_find_filter - Search VSI filter list for specific mac/vlan filter
1059  * @vsi: the VSI to be searched
1060  * @macaddr: the MAC address
1061  * @vlan: the vlan
1062  * @is_vf: make sure its a vf filter, else doesn't matter
1063  * @is_netdev: make sure its a netdev filter, else doesn't matter
1064  *
1065  * Returns ptr to the filter object or NULL
1066  **/
1067 static struct i40e_mac_filter *i40e_find_filter(struct i40e_vsi *vsi,
1068                                                 u8 *macaddr, s16 vlan,
1069                                                 bool is_vf, bool is_netdev)
1070 {
1071         struct i40e_mac_filter *f;
1072
1073         if (!vsi || !macaddr)
1074                 return NULL;
1075
1076         list_for_each_entry(f, &vsi->mac_filter_list, list) {
1077                 if ((ether_addr_equal(macaddr, f->macaddr)) &&
1078                     (vlan == f->vlan)    &&
1079                     (!is_vf || f->is_vf) &&
1080                     (!is_netdev || f->is_netdev))
1081                         return f;
1082         }
1083         return NULL;
1084 }
1085
1086 /**
1087  * i40e_find_mac - Find a mac addr in the macvlan filters list
1088  * @vsi: the VSI to be searched
1089  * @macaddr: the MAC address we are searching for
1090  * @is_vf: make sure its a vf filter, else doesn't matter
1091  * @is_netdev: make sure its a netdev filter, else doesn't matter
1092  *
1093  * Returns the first filter with the provided MAC address or NULL if
1094  * MAC address was not found
1095  **/
1096 struct i40e_mac_filter *i40e_find_mac(struct i40e_vsi *vsi, u8 *macaddr,
1097                                       bool is_vf, bool is_netdev)
1098 {
1099         struct i40e_mac_filter *f;
1100
1101         if (!vsi || !macaddr)
1102                 return NULL;
1103
1104         list_for_each_entry(f, &vsi->mac_filter_list, list) {
1105                 if ((ether_addr_equal(macaddr, f->macaddr)) &&
1106                     (!is_vf || f->is_vf) &&
1107                     (!is_netdev || f->is_netdev))
1108                         return f;
1109         }
1110         return NULL;
1111 }
1112
1113 /**
1114  * i40e_is_vsi_in_vlan - Check if VSI is in vlan mode
1115  * @vsi: the VSI to be searched
1116  *
1117  * Returns true if VSI is in vlan mode or false otherwise
1118  **/
1119 bool i40e_is_vsi_in_vlan(struct i40e_vsi *vsi)
1120 {
1121         struct i40e_mac_filter *f;
1122
1123         /* Only -1 for all the filters denotes not in vlan mode
1124          * so we have to go through all the list in order to make sure
1125          */
1126         list_for_each_entry(f, &vsi->mac_filter_list, list) {
1127                 if (f->vlan >= 0)
1128                         return true;
1129         }
1130
1131         return false;
1132 }
1133
1134 /**
1135  * i40e_put_mac_in_vlan - Make macvlan filters from macaddrs and vlans
1136  * @vsi: the VSI to be searched
1137  * @macaddr: the mac address to be filtered
1138  * @is_vf: true if it is a vf
1139  * @is_netdev: true if it is a netdev
1140  *
1141  * Goes through all the macvlan filters and adds a
1142  * macvlan filter for each unique vlan that already exists
1143  *
1144  * Returns first filter found on success, else NULL
1145  **/
1146 struct i40e_mac_filter *i40e_put_mac_in_vlan(struct i40e_vsi *vsi, u8 *macaddr,
1147                                              bool is_vf, bool is_netdev)
1148 {
1149         struct i40e_mac_filter *f;
1150
1151         list_for_each_entry(f, &vsi->mac_filter_list, list) {
1152                 if (!i40e_find_filter(vsi, macaddr, f->vlan,
1153                                       is_vf, is_netdev)) {
1154                         if (!i40e_add_filter(vsi, macaddr, f->vlan,
1155                                              is_vf, is_netdev))
1156                                 return NULL;
1157                 }
1158         }
1159
1160         return list_first_entry_or_null(&vsi->mac_filter_list,
1161                                         struct i40e_mac_filter, list);
1162 }
1163
1164 /**
1165  * i40e_rm_default_mac_filter - Remove the default MAC filter set by NVM
1166  * @vsi: the PF Main VSI - inappropriate for any other VSI
1167  * @macaddr: the MAC address
1168  **/
1169 static void i40e_rm_default_mac_filter(struct i40e_vsi *vsi, u8 *macaddr)
1170 {
1171         struct i40e_aqc_remove_macvlan_element_data element;
1172         struct i40e_pf *pf = vsi->back;
1173         i40e_status aq_ret;
1174
1175         /* Only appropriate for the PF main VSI */
1176         if (vsi->type != I40E_VSI_MAIN)
1177                 return;
1178
1179         ether_addr_copy(element.mac_addr, macaddr);
1180         element.vlan_tag = 0;
1181         element.flags = I40E_AQC_MACVLAN_DEL_PERFECT_MATCH |
1182                         I40E_AQC_MACVLAN_DEL_IGNORE_VLAN;
1183         aq_ret = i40e_aq_remove_macvlan(&pf->hw, vsi->seid, &element, 1, NULL);
1184         if (aq_ret)
1185                 dev_err(&pf->pdev->dev, "Could not remove default MAC-VLAN\n");
1186 }
1187
1188 /**
1189  * i40e_add_filter - Add a mac/vlan filter to the VSI
1190  * @vsi: the VSI to be searched
1191  * @macaddr: the MAC address
1192  * @vlan: the vlan
1193  * @is_vf: make sure its a vf filter, else doesn't matter
1194  * @is_netdev: make sure its a netdev filter, else doesn't matter
1195  *
1196  * Returns ptr to the filter object or NULL when no memory available.
1197  **/
1198 struct i40e_mac_filter *i40e_add_filter(struct i40e_vsi *vsi,
1199                                         u8 *macaddr, s16 vlan,
1200                                         bool is_vf, bool is_netdev)
1201 {
1202         struct i40e_mac_filter *f;
1203
1204         if (!vsi || !macaddr)
1205                 return NULL;
1206
1207         f = i40e_find_filter(vsi, macaddr, vlan, is_vf, is_netdev);
1208         if (!f) {
1209                 f = kzalloc(sizeof(*f), GFP_ATOMIC);
1210                 if (!f)
1211                         goto add_filter_out;
1212
1213                 ether_addr_copy(f->macaddr, macaddr);
1214                 f->vlan = vlan;
1215                 f->changed = true;
1216
1217                 INIT_LIST_HEAD(&f->list);
1218                 list_add(&f->list, &vsi->mac_filter_list);
1219         }
1220
1221         /* increment counter and add a new flag if needed */
1222         if (is_vf) {
1223                 if (!f->is_vf) {
1224                         f->is_vf = true;
1225                         f->counter++;
1226                 }
1227         } else if (is_netdev) {
1228                 if (!f->is_netdev) {
1229                         f->is_netdev = true;
1230                         f->counter++;
1231                 }
1232         } else {
1233                 f->counter++;
1234         }
1235
1236         /* changed tells sync_filters_subtask to
1237          * push the filter down to the firmware
1238          */
1239         if (f->changed) {
1240                 vsi->flags |= I40E_VSI_FLAG_FILTER_CHANGED;
1241                 vsi->back->flags |= I40E_FLAG_FILTER_SYNC;
1242         }
1243
1244 add_filter_out:
1245         return f;
1246 }
1247
1248 /**
1249  * i40e_del_filter - Remove a mac/vlan filter from the VSI
1250  * @vsi: the VSI to be searched
1251  * @macaddr: the MAC address
1252  * @vlan: the vlan
1253  * @is_vf: make sure it's a vf filter, else doesn't matter
1254  * @is_netdev: make sure it's a netdev filter, else doesn't matter
1255  **/
1256 void i40e_del_filter(struct i40e_vsi *vsi,
1257                      u8 *macaddr, s16 vlan,
1258                      bool is_vf, bool is_netdev)
1259 {
1260         struct i40e_mac_filter *f;
1261
1262         if (!vsi || !macaddr)
1263                 return;
1264
1265         f = i40e_find_filter(vsi, macaddr, vlan, is_vf, is_netdev);
1266         if (!f || f->counter == 0)
1267                 return;
1268
1269         if (is_vf) {
1270                 if (f->is_vf) {
1271                         f->is_vf = false;
1272                         f->counter--;
1273                 }
1274         } else if (is_netdev) {
1275                 if (f->is_netdev) {
1276                         f->is_netdev = false;
1277                         f->counter--;
1278                 }
1279         } else {
1280                 /* make sure we don't remove a filter in use by vf or netdev */
1281                 int min_f = 0;
1282                 min_f += (f->is_vf ? 1 : 0);
1283                 min_f += (f->is_netdev ? 1 : 0);
1284
1285                 if (f->counter > min_f)
1286                         f->counter--;
1287         }
1288
1289         /* counter == 0 tells sync_filters_subtask to
1290          * remove the filter from the firmware's list
1291          */
1292         if (f->counter == 0) {
1293                 f->changed = true;
1294                 vsi->flags |= I40E_VSI_FLAG_FILTER_CHANGED;
1295                 vsi->back->flags |= I40E_FLAG_FILTER_SYNC;
1296         }
1297 }
1298
1299 /**
1300  * i40e_set_mac - NDO callback to set mac address
1301  * @netdev: network interface device structure
1302  * @p: pointer to an address structure
1303  *
1304  * Returns 0 on success, negative on failure
1305  **/
1306 static int i40e_set_mac(struct net_device *netdev, void *p)
1307 {
1308         struct i40e_netdev_priv *np = netdev_priv(netdev);
1309         struct i40e_vsi *vsi = np->vsi;
1310         struct sockaddr *addr = p;
1311         struct i40e_mac_filter *f;
1312
1313         if (!is_valid_ether_addr(addr->sa_data))
1314                 return -EADDRNOTAVAIL;
1315
1316         netdev_info(netdev, "set mac address=%pM\n", addr->sa_data);
1317
1318         if (ether_addr_equal(netdev->dev_addr, addr->sa_data))
1319                 return 0;
1320
1321         if (test_bit(__I40E_DOWN, &vsi->back->state) ||
1322             test_bit(__I40E_RESET_RECOVERY_PENDING, &vsi->back->state))
1323                 return -EADDRNOTAVAIL;
1324
1325         if (vsi->type == I40E_VSI_MAIN) {
1326                 i40e_status ret;
1327                 ret = i40e_aq_mac_address_write(&vsi->back->hw,
1328                                                 I40E_AQC_WRITE_TYPE_LAA_ONLY,
1329                                                 addr->sa_data, NULL);
1330                 if (ret) {
1331                         netdev_info(netdev,
1332                                     "Addr change for Main VSI failed: %d\n",
1333                                     ret);
1334                         return -EADDRNOTAVAIL;
1335                 }
1336
1337                 ether_addr_copy(vsi->back->hw.mac.addr, addr->sa_data);
1338         }
1339
1340         /* In order to be sure to not drop any packets, add the new address
1341          * then delete the old one.
1342          */
1343         f = i40e_add_filter(vsi, addr->sa_data, I40E_VLAN_ANY, false, false);
1344         if (!f)
1345                 return -ENOMEM;
1346
1347         i40e_sync_vsi_filters(vsi);
1348         i40e_del_filter(vsi, netdev->dev_addr, I40E_VLAN_ANY, false, false);
1349         i40e_sync_vsi_filters(vsi);
1350
1351         ether_addr_copy(netdev->dev_addr, addr->sa_data);
1352
1353         return 0;
1354 }
1355
1356 /**
1357  * i40e_vsi_setup_queue_map - Setup a VSI queue map based on enabled_tc
1358  * @vsi: the VSI being setup
1359  * @ctxt: VSI context structure
1360  * @enabled_tc: Enabled TCs bitmap
1361  * @is_add: True if called before Add VSI
1362  *
1363  * Setup VSI queue mapping for enabled traffic classes.
1364  **/
1365 static void i40e_vsi_setup_queue_map(struct i40e_vsi *vsi,
1366                                      struct i40e_vsi_context *ctxt,
1367                                      u8 enabled_tc,
1368                                      bool is_add)
1369 {
1370         struct i40e_pf *pf = vsi->back;
1371         u16 sections = 0;
1372         u8 netdev_tc = 0;
1373         u16 numtc = 0;
1374         u16 qcount;
1375         u8 offset;
1376         u16 qmap;
1377         int i;
1378         u16 num_tc_qps = 0;
1379
1380         sections = I40E_AQ_VSI_PROP_QUEUE_MAP_VALID;
1381         offset = 0;
1382
1383         if (enabled_tc && (vsi->back->flags & I40E_FLAG_DCB_ENABLED)) {
1384                 /* Find numtc from enabled TC bitmap */
1385                 for (i = 0; i < I40E_MAX_TRAFFIC_CLASS; i++) {
1386                         if (enabled_tc & (1 << i)) /* TC is enabled */
1387                                 numtc++;
1388                 }
1389                 if (!numtc) {
1390                         dev_warn(&pf->pdev->dev, "DCB is enabled but no TC enabled, forcing TC0\n");
1391                         numtc = 1;
1392                 }
1393         } else {
1394                 /* At least TC0 is enabled in case of non-DCB case */
1395                 numtc = 1;
1396         }
1397
1398         vsi->tc_config.numtc = numtc;
1399         vsi->tc_config.enabled_tc = enabled_tc ? enabled_tc : 1;
1400         /* Number of queues per enabled TC */
1401         num_tc_qps = vsi->alloc_queue_pairs/numtc;
1402         num_tc_qps = min_t(int, num_tc_qps, I40E_MAX_QUEUES_PER_TC);
1403
1404         /* Setup queue offset/count for all TCs for given VSI */
1405         for (i = 0; i < I40E_MAX_TRAFFIC_CLASS; i++) {
1406                 /* See if the given TC is enabled for the given VSI */
1407                 if (vsi->tc_config.enabled_tc & (1 << i)) { /* TC is enabled */
1408                         int pow, num_qps;
1409
1410                         switch (vsi->type) {
1411                         case I40E_VSI_MAIN:
1412                                 qcount = min_t(int, pf->rss_size, num_tc_qps);
1413                                 break;
1414                         case I40E_VSI_FDIR:
1415                         case I40E_VSI_SRIOV:
1416                         case I40E_VSI_VMDQ2:
1417                         default:
1418                                 qcount = num_tc_qps;
1419                                 WARN_ON(i != 0);
1420                                 break;
1421                         }
1422                         vsi->tc_config.tc_info[i].qoffset = offset;
1423                         vsi->tc_config.tc_info[i].qcount = qcount;
1424
1425                         /* find the power-of-2 of the number of queue pairs */
1426                         num_qps = qcount;
1427                         pow = 0;
1428                         while (num_qps && ((1 << pow) < qcount)) {
1429                                 pow++;
1430                                 num_qps >>= 1;
1431                         }
1432
1433                         vsi->tc_config.tc_info[i].netdev_tc = netdev_tc++;
1434                         qmap =
1435                             (offset << I40E_AQ_VSI_TC_QUE_OFFSET_SHIFT) |
1436                             (pow << I40E_AQ_VSI_TC_QUE_NUMBER_SHIFT);
1437
1438                         offset += qcount;
1439                 } else {
1440                         /* TC is not enabled so set the offset to
1441                          * default queue and allocate one queue
1442                          * for the given TC.
1443                          */
1444                         vsi->tc_config.tc_info[i].qoffset = 0;
1445                         vsi->tc_config.tc_info[i].qcount = 1;
1446                         vsi->tc_config.tc_info[i].netdev_tc = 0;
1447
1448                         qmap = 0;
1449                 }
1450                 ctxt->info.tc_mapping[i] = cpu_to_le16(qmap);
1451         }
1452
1453         /* Set actual Tx/Rx queue pairs */
1454         vsi->num_queue_pairs = offset;
1455
1456         /* Scheduler section valid can only be set for ADD VSI */
1457         if (is_add) {
1458                 sections |= I40E_AQ_VSI_PROP_SCHED_VALID;
1459
1460                 ctxt->info.up_enable_bits = enabled_tc;
1461         }
1462         if (vsi->type == I40E_VSI_SRIOV) {
1463                 ctxt->info.mapping_flags |=
1464                                      cpu_to_le16(I40E_AQ_VSI_QUE_MAP_NONCONTIG);
1465                 for (i = 0; i < vsi->num_queue_pairs; i++)
1466                         ctxt->info.queue_mapping[i] =
1467                                                cpu_to_le16(vsi->base_queue + i);
1468         } else {
1469                 ctxt->info.mapping_flags |=
1470                                         cpu_to_le16(I40E_AQ_VSI_QUE_MAP_CONTIG);
1471                 ctxt->info.queue_mapping[0] = cpu_to_le16(vsi->base_queue);
1472         }
1473         ctxt->info.valid_sections |= cpu_to_le16(sections);
1474 }
1475
1476 /**
1477  * i40e_set_rx_mode - NDO callback to set the netdev filters
1478  * @netdev: network interface device structure
1479  **/
1480 static void i40e_set_rx_mode(struct net_device *netdev)
1481 {
1482         struct i40e_netdev_priv *np = netdev_priv(netdev);
1483         struct i40e_mac_filter *f, *ftmp;
1484         struct i40e_vsi *vsi = np->vsi;
1485         struct netdev_hw_addr *uca;
1486         struct netdev_hw_addr *mca;
1487         struct netdev_hw_addr *ha;
1488
1489         /* add addr if not already in the filter list */
1490         netdev_for_each_uc_addr(uca, netdev) {
1491                 if (!i40e_find_mac(vsi, uca->addr, false, true)) {
1492                         if (i40e_is_vsi_in_vlan(vsi))
1493                                 i40e_put_mac_in_vlan(vsi, uca->addr,
1494                                                      false, true);
1495                         else
1496                                 i40e_add_filter(vsi, uca->addr, I40E_VLAN_ANY,
1497                                                 false, true);
1498                 }
1499         }
1500
1501         netdev_for_each_mc_addr(mca, netdev) {
1502                 if (!i40e_find_mac(vsi, mca->addr, false, true)) {
1503                         if (i40e_is_vsi_in_vlan(vsi))
1504                                 i40e_put_mac_in_vlan(vsi, mca->addr,
1505                                                      false, true);
1506                         else
1507                                 i40e_add_filter(vsi, mca->addr, I40E_VLAN_ANY,
1508                                                 false, true);
1509                 }
1510         }
1511
1512         /* remove filter if not in netdev list */
1513         list_for_each_entry_safe(f, ftmp, &vsi->mac_filter_list, list) {
1514                 bool found = false;
1515
1516                 if (!f->is_netdev)
1517                         continue;
1518
1519                 if (is_multicast_ether_addr(f->macaddr)) {
1520                         netdev_for_each_mc_addr(mca, netdev) {
1521                                 if (ether_addr_equal(mca->addr, f->macaddr)) {
1522                                         found = true;
1523                                         break;
1524                                 }
1525                         }
1526                 } else {
1527                         netdev_for_each_uc_addr(uca, netdev) {
1528                                 if (ether_addr_equal(uca->addr, f->macaddr)) {
1529                                         found = true;
1530                                         break;
1531                                 }
1532                         }
1533
1534                         for_each_dev_addr(netdev, ha) {
1535                                 if (ether_addr_equal(ha->addr, f->macaddr)) {
1536                                         found = true;
1537                                         break;
1538                                 }
1539                         }
1540                 }
1541                 if (!found)
1542                         i40e_del_filter(
1543                            vsi, f->macaddr, I40E_VLAN_ANY, false, true);
1544         }
1545
1546         /* check for other flag changes */
1547         if (vsi->current_netdev_flags != vsi->netdev->flags) {
1548                 vsi->flags |= I40E_VSI_FLAG_FILTER_CHANGED;
1549                 vsi->back->flags |= I40E_FLAG_FILTER_SYNC;
1550         }
1551 }
1552
1553 /**
1554  * i40e_sync_vsi_filters - Update the VSI filter list to the HW
1555  * @vsi: ptr to the VSI
1556  *
1557  * Push any outstanding VSI filter changes through the AdminQ.
1558  *
1559  * Returns 0 or error value
1560  **/
1561 int i40e_sync_vsi_filters(struct i40e_vsi *vsi)
1562 {
1563         struct i40e_mac_filter *f, *ftmp;
1564         bool promisc_forced_on = false;
1565         bool add_happened = false;
1566         int filter_list_len = 0;
1567         u32 changed_flags = 0;
1568         i40e_status aq_ret = 0;
1569         struct i40e_pf *pf;
1570         int num_add = 0;
1571         int num_del = 0;
1572         u16 cmd_flags;
1573
1574         /* empty array typed pointers, kcalloc later */
1575         struct i40e_aqc_add_macvlan_element_data *add_list;
1576         struct i40e_aqc_remove_macvlan_element_data *del_list;
1577
1578         while (test_and_set_bit(__I40E_CONFIG_BUSY, &vsi->state))
1579                 usleep_range(1000, 2000);
1580         pf = vsi->back;
1581
1582         if (vsi->netdev) {
1583                 changed_flags = vsi->current_netdev_flags ^ vsi->netdev->flags;
1584                 vsi->current_netdev_flags = vsi->netdev->flags;
1585         }
1586
1587         if (vsi->flags & I40E_VSI_FLAG_FILTER_CHANGED) {
1588                 vsi->flags &= ~I40E_VSI_FLAG_FILTER_CHANGED;
1589
1590                 filter_list_len = pf->hw.aq.asq_buf_size /
1591                             sizeof(struct i40e_aqc_remove_macvlan_element_data);
1592                 del_list = kcalloc(filter_list_len,
1593                             sizeof(struct i40e_aqc_remove_macvlan_element_data),
1594                             GFP_KERNEL);
1595                 if (!del_list)
1596                         return -ENOMEM;
1597
1598                 list_for_each_entry_safe(f, ftmp, &vsi->mac_filter_list, list) {
1599                         if (!f->changed)
1600                                 continue;
1601
1602                         if (f->counter != 0)
1603                                 continue;
1604                         f->changed = false;
1605                         cmd_flags = 0;
1606
1607                         /* add to delete list */
1608                         ether_addr_copy(del_list[num_del].mac_addr, f->macaddr);
1609                         del_list[num_del].vlan_tag =
1610                                 cpu_to_le16((u16)(f->vlan ==
1611                                             I40E_VLAN_ANY ? 0 : f->vlan));
1612
1613                         cmd_flags |= I40E_AQC_MACVLAN_DEL_PERFECT_MATCH;
1614                         del_list[num_del].flags = cmd_flags;
1615                         num_del++;
1616
1617                         /* unlink from filter list */
1618                         list_del(&f->list);
1619                         kfree(f);
1620
1621                         /* flush a full buffer */
1622                         if (num_del == filter_list_len) {
1623                                 aq_ret = i40e_aq_remove_macvlan(&pf->hw,
1624                                             vsi->seid, del_list, num_del,
1625                                             NULL);
1626                                 num_del = 0;
1627                                 memset(del_list, 0, sizeof(*del_list));
1628
1629                                 if (aq_ret &&
1630                                     pf->hw.aq.asq_last_status !=
1631                                                               I40E_AQ_RC_ENOENT)
1632                                         dev_info(&pf->pdev->dev,
1633                                                  "ignoring delete macvlan error, err %d, aq_err %d while flushing a full buffer\n",
1634                                                  aq_ret,
1635                                                  pf->hw.aq.asq_last_status);
1636                         }
1637                 }
1638                 if (num_del) {
1639                         aq_ret = i40e_aq_remove_macvlan(&pf->hw, vsi->seid,
1640                                                      del_list, num_del, NULL);
1641                         num_del = 0;
1642
1643                         if (aq_ret &&
1644                             pf->hw.aq.asq_last_status != I40E_AQ_RC_ENOENT)
1645                                 dev_info(&pf->pdev->dev,
1646                                          "ignoring delete macvlan error, err %d, aq_err %d\n",
1647                                          aq_ret, pf->hw.aq.asq_last_status);
1648                 }
1649
1650                 kfree(del_list);
1651                 del_list = NULL;
1652
1653                 /* do all the adds now */
1654                 filter_list_len = pf->hw.aq.asq_buf_size /
1655                                sizeof(struct i40e_aqc_add_macvlan_element_data),
1656                 add_list = kcalloc(filter_list_len,
1657                                sizeof(struct i40e_aqc_add_macvlan_element_data),
1658                                GFP_KERNEL);
1659                 if (!add_list)
1660                         return -ENOMEM;
1661
1662                 list_for_each_entry_safe(f, ftmp, &vsi->mac_filter_list, list) {
1663                         if (!f->changed)
1664                                 continue;
1665
1666                         if (f->counter == 0)
1667                                 continue;
1668                         f->changed = false;
1669                         add_happened = true;
1670                         cmd_flags = 0;
1671
1672                         /* add to add array */
1673                         ether_addr_copy(add_list[num_add].mac_addr, f->macaddr);
1674                         add_list[num_add].vlan_tag =
1675                                 cpu_to_le16(
1676                                  (u16)(f->vlan == I40E_VLAN_ANY ? 0 : f->vlan));
1677                         add_list[num_add].queue_number = 0;
1678
1679                         cmd_flags |= I40E_AQC_MACVLAN_ADD_PERFECT_MATCH;
1680                         add_list[num_add].flags = cpu_to_le16(cmd_flags);
1681                         num_add++;
1682
1683                         /* flush a full buffer */
1684                         if (num_add == filter_list_len) {
1685                                 aq_ret = i40e_aq_add_macvlan(&pf->hw, vsi->seid,
1686                                                              add_list, num_add,
1687                                                              NULL);
1688                                 num_add = 0;
1689
1690                                 if (aq_ret)
1691                                         break;
1692                                 memset(add_list, 0, sizeof(*add_list));
1693                         }
1694                 }
1695                 if (num_add) {
1696                         aq_ret = i40e_aq_add_macvlan(&pf->hw, vsi->seid,
1697                                                      add_list, num_add, NULL);
1698                         num_add = 0;
1699                 }
1700                 kfree(add_list);
1701                 add_list = NULL;
1702
1703                 if (add_happened && (!aq_ret)) {
1704                         /* do nothing */;
1705                 } else if (add_happened && (aq_ret)) {
1706                         dev_info(&pf->pdev->dev,
1707                                  "add filter failed, err %d, aq_err %d\n",
1708                                  aq_ret, pf->hw.aq.asq_last_status);
1709                         if ((pf->hw.aq.asq_last_status == I40E_AQ_RC_ENOSPC) &&
1710                             !test_bit(__I40E_FILTER_OVERFLOW_PROMISC,
1711                                       &vsi->state)) {
1712                                 promisc_forced_on = true;
1713                                 set_bit(__I40E_FILTER_OVERFLOW_PROMISC,
1714                                         &vsi->state);
1715                                 dev_info(&pf->pdev->dev, "promiscuous mode forced on\n");
1716                         }
1717                 }
1718         }
1719
1720         /* check for changes in promiscuous modes */
1721         if (changed_flags & IFF_ALLMULTI) {
1722                 bool cur_multipromisc;
1723                 cur_multipromisc = !!(vsi->current_netdev_flags & IFF_ALLMULTI);
1724                 aq_ret = i40e_aq_set_vsi_multicast_promiscuous(&vsi->back->hw,
1725                                                                vsi->seid,
1726                                                                cur_multipromisc,
1727                                                                NULL);
1728                 if (aq_ret)
1729                         dev_info(&pf->pdev->dev,
1730                                  "set multi promisc failed, err %d, aq_err %d\n",
1731                                  aq_ret, pf->hw.aq.asq_last_status);
1732         }
1733         if ((changed_flags & IFF_PROMISC) || promisc_forced_on) {
1734                 bool cur_promisc;
1735                 cur_promisc = (!!(vsi->current_netdev_flags & IFF_PROMISC) ||
1736                                test_bit(__I40E_FILTER_OVERFLOW_PROMISC,
1737                                         &vsi->state));
1738                 aq_ret = i40e_aq_set_vsi_unicast_promiscuous(&vsi->back->hw,
1739                                                              vsi->seid,
1740                                                              cur_promisc, NULL);
1741                 if (aq_ret)
1742                         dev_info(&pf->pdev->dev,
1743                                  "set uni promisc failed, err %d, aq_err %d\n",
1744                                  aq_ret, pf->hw.aq.asq_last_status);
1745                 aq_ret = i40e_aq_set_vsi_broadcast(&vsi->back->hw,
1746                                                    vsi->seid,
1747                                                    cur_promisc, NULL);
1748                 if (aq_ret)
1749                         dev_info(&pf->pdev->dev,
1750                                  "set brdcast promisc failed, err %d, aq_err %d\n",
1751                                  aq_ret, pf->hw.aq.asq_last_status);
1752         }
1753
1754         clear_bit(__I40E_CONFIG_BUSY, &vsi->state);
1755         return 0;
1756 }
1757
1758 /**
1759  * i40e_sync_filters_subtask - Sync the VSI filter list with HW
1760  * @pf: board private structure
1761  **/
1762 static void i40e_sync_filters_subtask(struct i40e_pf *pf)
1763 {
1764         int v;
1765
1766         if (!pf || !(pf->flags & I40E_FLAG_FILTER_SYNC))
1767                 return;
1768         pf->flags &= ~I40E_FLAG_FILTER_SYNC;
1769
1770         for (v = 0; v < pf->num_alloc_vsi; v++) {
1771                 if (pf->vsi[v] &&
1772                     (pf->vsi[v]->flags & I40E_VSI_FLAG_FILTER_CHANGED))
1773                         i40e_sync_vsi_filters(pf->vsi[v]);
1774         }
1775 }
1776
1777 /**
1778  * i40e_change_mtu - NDO callback to change the Maximum Transfer Unit
1779  * @netdev: network interface device structure
1780  * @new_mtu: new value for maximum frame size
1781  *
1782  * Returns 0 on success, negative on failure
1783  **/
1784 static int i40e_change_mtu(struct net_device *netdev, int new_mtu)
1785 {
1786         struct i40e_netdev_priv *np = netdev_priv(netdev);
1787         int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN;
1788         struct i40e_vsi *vsi = np->vsi;
1789
1790         /* MTU < 68 is an error and causes problems on some kernels */
1791         if ((new_mtu < 68) || (max_frame > I40E_MAX_RXBUFFER))
1792                 return -EINVAL;
1793
1794         netdev_info(netdev, "changing MTU from %d to %d\n",
1795                     netdev->mtu, new_mtu);
1796         netdev->mtu = new_mtu;
1797         if (netif_running(netdev))
1798                 i40e_vsi_reinit_locked(vsi);
1799
1800         return 0;
1801 }
1802
1803 /**
1804  * i40e_ioctl - Access the hwtstamp interface
1805  * @netdev: network interface device structure
1806  * @ifr: interface request data
1807  * @cmd: ioctl command
1808  **/
1809 int i40e_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
1810 {
1811         struct i40e_netdev_priv *np = netdev_priv(netdev);
1812         struct i40e_pf *pf = np->vsi->back;
1813
1814         switch (cmd) {
1815         case SIOCGHWTSTAMP:
1816                 return i40e_ptp_get_ts_config(pf, ifr);
1817         case SIOCSHWTSTAMP:
1818                 return i40e_ptp_set_ts_config(pf, ifr);
1819         default:
1820                 return -EOPNOTSUPP;
1821         }
1822 }
1823
1824 /**
1825  * i40e_vlan_stripping_enable - Turn on vlan stripping for the VSI
1826  * @vsi: the vsi being adjusted
1827  **/
1828 void i40e_vlan_stripping_enable(struct i40e_vsi *vsi)
1829 {
1830         struct i40e_vsi_context ctxt;
1831         i40e_status ret;
1832
1833         if ((vsi->info.valid_sections &
1834              cpu_to_le16(I40E_AQ_VSI_PROP_VLAN_VALID)) &&
1835             ((vsi->info.port_vlan_flags & I40E_AQ_VSI_PVLAN_MODE_MASK) == 0))
1836                 return;  /* already enabled */
1837
1838         vsi->info.valid_sections = cpu_to_le16(I40E_AQ_VSI_PROP_VLAN_VALID);
1839         vsi->info.port_vlan_flags = I40E_AQ_VSI_PVLAN_MODE_ALL |
1840                                     I40E_AQ_VSI_PVLAN_EMOD_STR_BOTH;
1841
1842         ctxt.seid = vsi->seid;
1843         memcpy(&ctxt.info, &vsi->info, sizeof(vsi->info));
1844         ret = i40e_aq_update_vsi_params(&vsi->back->hw, &ctxt, NULL);
1845         if (ret) {
1846                 dev_info(&vsi->back->pdev->dev,
1847                          "%s: update vsi failed, aq_err=%d\n",
1848                          __func__, vsi->back->hw.aq.asq_last_status);
1849         }
1850 }
1851
1852 /**
1853  * i40e_vlan_stripping_disable - Turn off vlan stripping for the VSI
1854  * @vsi: the vsi being adjusted
1855  **/
1856 void i40e_vlan_stripping_disable(struct i40e_vsi *vsi)
1857 {
1858         struct i40e_vsi_context ctxt;
1859         i40e_status ret;
1860
1861         if ((vsi->info.valid_sections &
1862              cpu_to_le16(I40E_AQ_VSI_PROP_VLAN_VALID)) &&
1863             ((vsi->info.port_vlan_flags & I40E_AQ_VSI_PVLAN_EMOD_MASK) ==
1864              I40E_AQ_VSI_PVLAN_EMOD_MASK))
1865                 return;  /* already disabled */
1866
1867         vsi->info.valid_sections = cpu_to_le16(I40E_AQ_VSI_PROP_VLAN_VALID);
1868         vsi->info.port_vlan_flags = I40E_AQ_VSI_PVLAN_MODE_ALL |
1869                                     I40E_AQ_VSI_PVLAN_EMOD_NOTHING;
1870
1871         ctxt.seid = vsi->seid;
1872         memcpy(&ctxt.info, &vsi->info, sizeof(vsi->info));
1873         ret = i40e_aq_update_vsi_params(&vsi->back->hw, &ctxt, NULL);
1874         if (ret) {
1875                 dev_info(&vsi->back->pdev->dev,
1876                          "%s: update vsi failed, aq_err=%d\n",
1877                          __func__, vsi->back->hw.aq.asq_last_status);
1878         }
1879 }
1880
1881 /**
1882  * i40e_vlan_rx_register - Setup or shutdown vlan offload
1883  * @netdev: network interface to be adjusted
1884  * @features: netdev features to test if VLAN offload is enabled or not
1885  **/
1886 static void i40e_vlan_rx_register(struct net_device *netdev, u32 features)
1887 {
1888         struct i40e_netdev_priv *np = netdev_priv(netdev);
1889         struct i40e_vsi *vsi = np->vsi;
1890
1891         if (features & NETIF_F_HW_VLAN_CTAG_RX)
1892                 i40e_vlan_stripping_enable(vsi);
1893         else
1894                 i40e_vlan_stripping_disable(vsi);
1895 }
1896
1897 /**
1898  * i40e_vsi_add_vlan - Add vsi membership for given vlan
1899  * @vsi: the vsi being configured
1900  * @vid: vlan id to be added (0 = untagged only , -1 = any)
1901  **/
1902 int i40e_vsi_add_vlan(struct i40e_vsi *vsi, s16 vid)
1903 {
1904         struct i40e_mac_filter *f, *add_f;
1905         bool is_netdev, is_vf;
1906
1907         is_vf = (vsi->type == I40E_VSI_SRIOV);
1908         is_netdev = !!(vsi->netdev);
1909
1910         if (is_netdev) {
1911                 add_f = i40e_add_filter(vsi, vsi->netdev->dev_addr, vid,
1912                                         is_vf, is_netdev);
1913                 if (!add_f) {
1914                         dev_info(&vsi->back->pdev->dev,
1915                                  "Could not add vlan filter %d for %pM\n",
1916                                  vid, vsi->netdev->dev_addr);
1917                         return -ENOMEM;
1918                 }
1919         }
1920
1921         list_for_each_entry(f, &vsi->mac_filter_list, list) {
1922                 add_f = i40e_add_filter(vsi, f->macaddr, vid, is_vf, is_netdev);
1923                 if (!add_f) {
1924                         dev_info(&vsi->back->pdev->dev,
1925                                  "Could not add vlan filter %d for %pM\n",
1926                                  vid, f->macaddr);
1927                         return -ENOMEM;
1928                 }
1929         }
1930
1931         /* Now if we add a vlan tag, make sure to check if it is the first
1932          * tag (i.e. a "tag" -1 does exist) and if so replace the -1 "tag"
1933          * with 0, so we now accept untagged and specified tagged traffic
1934          * (and not any taged and untagged)
1935          */
1936         if (vid > 0) {
1937                 if (is_netdev && i40e_find_filter(vsi, vsi->netdev->dev_addr,
1938                                                   I40E_VLAN_ANY,
1939                                                   is_vf, is_netdev)) {
1940                         i40e_del_filter(vsi, vsi->netdev->dev_addr,
1941                                         I40E_VLAN_ANY, is_vf, is_netdev);
1942                         add_f = i40e_add_filter(vsi, vsi->netdev->dev_addr, 0,
1943                                                 is_vf, is_netdev);
1944                         if (!add_f) {
1945                                 dev_info(&vsi->back->pdev->dev,
1946                                          "Could not add filter 0 for %pM\n",
1947                                          vsi->netdev->dev_addr);
1948                                 return -ENOMEM;
1949                         }
1950                 }
1951         }
1952
1953         /* Do not assume that I40E_VLAN_ANY should be reset to VLAN 0 */
1954         if (vid > 0 && !vsi->info.pvid) {
1955                 list_for_each_entry(f, &vsi->mac_filter_list, list) {
1956                         if (i40e_find_filter(vsi, f->macaddr, I40E_VLAN_ANY,
1957                                              is_vf, is_netdev)) {
1958                                 i40e_del_filter(vsi, f->macaddr, I40E_VLAN_ANY,
1959                                                 is_vf, is_netdev);
1960                                 add_f = i40e_add_filter(vsi, f->macaddr,
1961                                                         0, is_vf, is_netdev);
1962                                 if (!add_f) {
1963                                         dev_info(&vsi->back->pdev->dev,
1964                                                  "Could not add filter 0 for %pM\n",
1965                                                  f->macaddr);
1966                                         return -ENOMEM;
1967                                 }
1968                         }
1969                 }
1970         }
1971
1972         if (test_bit(__I40E_DOWN, &vsi->back->state) ||
1973             test_bit(__I40E_RESET_RECOVERY_PENDING, &vsi->back->state))
1974                 return 0;
1975
1976         return i40e_sync_vsi_filters(vsi);
1977 }
1978
1979 /**
1980  * i40e_vsi_kill_vlan - Remove vsi membership for given vlan
1981  * @vsi: the vsi being configured
1982  * @vid: vlan id to be removed (0 = untagged only , -1 = any)
1983  *
1984  * Return: 0 on success or negative otherwise
1985  **/
1986 int i40e_vsi_kill_vlan(struct i40e_vsi *vsi, s16 vid)
1987 {
1988         struct net_device *netdev = vsi->netdev;
1989         struct i40e_mac_filter *f, *add_f;
1990         bool is_vf, is_netdev;
1991         int filter_count = 0;
1992
1993         is_vf = (vsi->type == I40E_VSI_SRIOV);
1994         is_netdev = !!(netdev);
1995
1996         if (is_netdev)
1997                 i40e_del_filter(vsi, netdev->dev_addr, vid, is_vf, is_netdev);
1998
1999         list_for_each_entry(f, &vsi->mac_filter_list, list)
2000                 i40e_del_filter(vsi, f->macaddr, vid, is_vf, is_netdev);
2001
2002         /* go through all the filters for this VSI and if there is only
2003          * vid == 0 it means there are no other filters, so vid 0 must
2004          * be replaced with -1. This signifies that we should from now
2005          * on accept any traffic (with any tag present, or untagged)
2006          */
2007         list_for_each_entry(f, &vsi->mac_filter_list, list) {
2008                 if (is_netdev) {
2009                         if (f->vlan &&
2010                             ether_addr_equal(netdev->dev_addr, f->macaddr))
2011                                 filter_count++;
2012                 }
2013
2014                 if (f->vlan)
2015                         filter_count++;
2016         }
2017
2018         if (!filter_count && is_netdev) {
2019                 i40e_del_filter(vsi, netdev->dev_addr, 0, is_vf, is_netdev);
2020                 f = i40e_add_filter(vsi, netdev->dev_addr, I40E_VLAN_ANY,
2021                                     is_vf, is_netdev);
2022                 if (!f) {
2023                         dev_info(&vsi->back->pdev->dev,
2024                                  "Could not add filter %d for %pM\n",
2025                                  I40E_VLAN_ANY, netdev->dev_addr);
2026                         return -ENOMEM;
2027                 }
2028         }
2029
2030         if (!filter_count) {
2031                 list_for_each_entry(f, &vsi->mac_filter_list, list) {
2032                         i40e_del_filter(vsi, f->macaddr, 0, is_vf, is_netdev);
2033                         add_f = i40e_add_filter(vsi, f->macaddr, I40E_VLAN_ANY,
2034                                             is_vf, is_netdev);
2035                         if (!add_f) {
2036                                 dev_info(&vsi->back->pdev->dev,
2037                                          "Could not add filter %d for %pM\n",
2038                                          I40E_VLAN_ANY, f->macaddr);
2039                                 return -ENOMEM;
2040                         }
2041                 }
2042         }
2043
2044         if (test_bit(__I40E_DOWN, &vsi->back->state) ||
2045             test_bit(__I40E_RESET_RECOVERY_PENDING, &vsi->back->state))
2046                 return 0;
2047
2048         return i40e_sync_vsi_filters(vsi);
2049 }
2050
2051 /**
2052  * i40e_vlan_rx_add_vid - Add a vlan id filter to HW offload
2053  * @netdev: network interface to be adjusted
2054  * @vid: vlan id to be added
2055  *
2056  * net_device_ops implementation for adding vlan ids
2057  **/
2058 static int i40e_vlan_rx_add_vid(struct net_device *netdev,
2059                                 __always_unused __be16 proto, u16 vid)
2060 {
2061         struct i40e_netdev_priv *np = netdev_priv(netdev);
2062         struct i40e_vsi *vsi = np->vsi;
2063         int ret = 0;
2064
2065         if (vid > 4095)
2066                 return -EINVAL;
2067
2068         netdev_info(netdev, "adding %pM vid=%d\n", netdev->dev_addr, vid);
2069
2070         /* If the network stack called us with vid = 0 then
2071          * it is asking to receive priority tagged packets with
2072          * vlan id 0.  Our HW receives them by default when configured
2073          * to receive untagged packets so there is no need to add an
2074          * extra filter for vlan 0 tagged packets.
2075          */
2076         if (vid)
2077                 ret = i40e_vsi_add_vlan(vsi, vid);
2078
2079         if (!ret && (vid < VLAN_N_VID))
2080                 set_bit(vid, vsi->active_vlans);
2081
2082         return ret;
2083 }
2084
2085 /**
2086  * i40e_vlan_rx_kill_vid - Remove a vlan id filter from HW offload
2087  * @netdev: network interface to be adjusted
2088  * @vid: vlan id to be removed
2089  *
2090  * net_device_ops implementation for removing vlan ids
2091  **/
2092 static int i40e_vlan_rx_kill_vid(struct net_device *netdev,
2093                                  __always_unused __be16 proto, u16 vid)
2094 {
2095         struct i40e_netdev_priv *np = netdev_priv(netdev);
2096         struct i40e_vsi *vsi = np->vsi;
2097
2098         netdev_info(netdev, "removing %pM vid=%d\n", netdev->dev_addr, vid);
2099
2100         /* return code is ignored as there is nothing a user
2101          * can do about failure to remove and a log message was
2102          * already printed from the other function
2103          */
2104         i40e_vsi_kill_vlan(vsi, vid);
2105
2106         clear_bit(vid, vsi->active_vlans);
2107
2108         return 0;
2109 }
2110
2111 /**
2112  * i40e_restore_vlan - Reinstate vlans when vsi/netdev comes back up
2113  * @vsi: the vsi being brought back up
2114  **/
2115 static void i40e_restore_vlan(struct i40e_vsi *vsi)
2116 {
2117         u16 vid;
2118
2119         if (!vsi->netdev)
2120                 return;
2121
2122         i40e_vlan_rx_register(vsi->netdev, vsi->netdev->features);
2123
2124         for_each_set_bit(vid, vsi->active_vlans, VLAN_N_VID)
2125                 i40e_vlan_rx_add_vid(vsi->netdev, htons(ETH_P_8021Q),
2126                                      vid);
2127 }
2128
2129 /**
2130  * i40e_vsi_add_pvid - Add pvid for the VSI
2131  * @vsi: the vsi being adjusted
2132  * @vid: the vlan id to set as a PVID
2133  **/
2134 int i40e_vsi_add_pvid(struct i40e_vsi *vsi, u16 vid)
2135 {
2136         struct i40e_vsi_context ctxt;
2137         i40e_status aq_ret;
2138
2139         vsi->info.valid_sections = cpu_to_le16(I40E_AQ_VSI_PROP_VLAN_VALID);
2140         vsi->info.pvid = cpu_to_le16(vid);
2141         vsi->info.port_vlan_flags = I40E_AQ_VSI_PVLAN_MODE_TAGGED |
2142                                     I40E_AQ_VSI_PVLAN_INSERT_PVID |
2143                                     I40E_AQ_VSI_PVLAN_EMOD_STR;
2144
2145         ctxt.seid = vsi->seid;
2146         memcpy(&ctxt.info, &vsi->info, sizeof(vsi->info));
2147         aq_ret = i40e_aq_update_vsi_params(&vsi->back->hw, &ctxt, NULL);
2148         if (aq_ret) {
2149                 dev_info(&vsi->back->pdev->dev,
2150                          "%s: update vsi failed, aq_err=%d\n",
2151                          __func__, vsi->back->hw.aq.asq_last_status);
2152                 return -ENOENT;
2153         }
2154
2155         return 0;
2156 }
2157
2158 /**
2159  * i40e_vsi_remove_pvid - Remove the pvid from the VSI
2160  * @vsi: the vsi being adjusted
2161  *
2162  * Just use the vlan_rx_register() service to put it back to normal
2163  **/
2164 void i40e_vsi_remove_pvid(struct i40e_vsi *vsi)
2165 {
2166         i40e_vlan_stripping_disable(vsi);
2167
2168         vsi->info.pvid = 0;
2169 }
2170
2171 /**
2172  * i40e_vsi_setup_tx_resources - Allocate VSI Tx queue resources
2173  * @vsi: ptr to the VSI
2174  *
2175  * If this function returns with an error, then it's possible one or
2176  * more of the rings is populated (while the rest are not).  It is the
2177  * callers duty to clean those orphaned rings.
2178  *
2179  * Return 0 on success, negative on failure
2180  **/
2181 static int i40e_vsi_setup_tx_resources(struct i40e_vsi *vsi)
2182 {
2183         int i, err = 0;
2184
2185         for (i = 0; i < vsi->num_queue_pairs && !err; i++)
2186                 err = i40e_setup_tx_descriptors(vsi->tx_rings[i]);
2187
2188         return err;
2189 }
2190
2191 /**
2192  * i40e_vsi_free_tx_resources - Free Tx resources for VSI queues
2193  * @vsi: ptr to the VSI
2194  *
2195  * Free VSI's transmit software resources
2196  **/
2197 static void i40e_vsi_free_tx_resources(struct i40e_vsi *vsi)
2198 {
2199         int i;
2200
2201         if (!vsi->tx_rings)
2202                 return;
2203
2204         for (i = 0; i < vsi->num_queue_pairs; i++)
2205                 if (vsi->tx_rings[i] && vsi->tx_rings[i]->desc)
2206                         i40e_free_tx_resources(vsi->tx_rings[i]);
2207 }
2208
2209 /**
2210  * i40e_vsi_setup_rx_resources - Allocate VSI queues Rx resources
2211  * @vsi: ptr to the VSI
2212  *
2213  * If this function returns with an error, then it's possible one or
2214  * more of the rings is populated (while the rest are not).  It is the
2215  * callers duty to clean those orphaned rings.
2216  *
2217  * Return 0 on success, negative on failure
2218  **/
2219 static int i40e_vsi_setup_rx_resources(struct i40e_vsi *vsi)
2220 {
2221         int i, err = 0;
2222
2223         for (i = 0; i < vsi->num_queue_pairs && !err; i++)
2224                 err = i40e_setup_rx_descriptors(vsi->rx_rings[i]);
2225         return err;
2226 }
2227
2228 /**
2229  * i40e_vsi_free_rx_resources - Free Rx Resources for VSI queues
2230  * @vsi: ptr to the VSI
2231  *
2232  * Free all receive software resources
2233  **/
2234 static void i40e_vsi_free_rx_resources(struct i40e_vsi *vsi)
2235 {
2236         int i;
2237
2238         if (!vsi->rx_rings)
2239                 return;
2240
2241         for (i = 0; i < vsi->num_queue_pairs; i++)
2242                 if (vsi->rx_rings[i] && vsi->rx_rings[i]->desc)
2243                         i40e_free_rx_resources(vsi->rx_rings[i]);
2244 }
2245
2246 /**
2247  * i40e_configure_tx_ring - Configure a transmit ring context and rest
2248  * @ring: The Tx ring to configure
2249  *
2250  * Configure the Tx descriptor ring in the HMC context.
2251  **/
2252 static int i40e_configure_tx_ring(struct i40e_ring *ring)
2253 {
2254         struct i40e_vsi *vsi = ring->vsi;
2255         u16 pf_q = vsi->base_queue + ring->queue_index;
2256         struct i40e_hw *hw = &vsi->back->hw;
2257         struct i40e_hmc_obj_txq tx_ctx;
2258         i40e_status err = 0;
2259         u32 qtx_ctl = 0;
2260
2261         /* some ATR related tx ring init */
2262         if (vsi->back->flags & I40E_FLAG_FD_ATR_ENABLED) {
2263                 ring->atr_sample_rate = vsi->back->atr_sample_rate;
2264                 ring->atr_count = 0;
2265         } else {
2266                 ring->atr_sample_rate = 0;
2267         }
2268
2269         /* initialize XPS */
2270         if (ring->q_vector && ring->netdev &&
2271             vsi->tc_config.numtc <= 1 &&
2272             !test_and_set_bit(__I40E_TX_XPS_INIT_DONE, &ring->state))
2273                 netif_set_xps_queue(ring->netdev,
2274                                     &ring->q_vector->affinity_mask,
2275                                     ring->queue_index);
2276
2277         /* clear the context structure first */
2278         memset(&tx_ctx, 0, sizeof(tx_ctx));
2279
2280         tx_ctx.new_context = 1;
2281         tx_ctx.base = (ring->dma / 128);
2282         tx_ctx.qlen = ring->count;
2283         tx_ctx.fd_ena = !!(vsi->back->flags & (I40E_FLAG_FD_SB_ENABLED |
2284                                                I40E_FLAG_FD_ATR_ENABLED));
2285         tx_ctx.timesync_ena = !!(vsi->back->flags & I40E_FLAG_PTP);
2286         /* FDIR VSI tx ring can still use RS bit and writebacks */
2287         if (vsi->type != I40E_VSI_FDIR)
2288                 tx_ctx.head_wb_ena = 1;
2289         tx_ctx.head_wb_addr = ring->dma +
2290                               (ring->count * sizeof(struct i40e_tx_desc));
2291
2292         /* As part of VSI creation/update, FW allocates certain
2293          * Tx arbitration queue sets for each TC enabled for
2294          * the VSI. The FW returns the handles to these queue
2295          * sets as part of the response buffer to Add VSI,
2296          * Update VSI, etc. AQ commands. It is expected that
2297          * these queue set handles be associated with the Tx
2298          * queues by the driver as part of the TX queue context
2299          * initialization. This has to be done regardless of
2300          * DCB as by default everything is mapped to TC0.
2301          */
2302         tx_ctx.rdylist = le16_to_cpu(vsi->info.qs_handle[ring->dcb_tc]);
2303         tx_ctx.rdylist_act = 0;
2304
2305         /* clear the context in the HMC */
2306         err = i40e_clear_lan_tx_queue_context(hw, pf_q);
2307         if (err) {
2308                 dev_info(&vsi->back->pdev->dev,
2309                          "Failed to clear LAN Tx queue context on Tx ring %d (pf_q %d), error: %d\n",
2310                          ring->queue_index, pf_q, err);
2311                 return -ENOMEM;
2312         }
2313
2314         /* set the context in the HMC */
2315         err = i40e_set_lan_tx_queue_context(hw, pf_q, &tx_ctx);
2316         if (err) {
2317                 dev_info(&vsi->back->pdev->dev,
2318                          "Failed to set LAN Tx queue context on Tx ring %d (pf_q %d, error: %d\n",
2319                          ring->queue_index, pf_q, err);
2320                 return -ENOMEM;
2321         }
2322
2323         /* Now associate this queue with this PCI function */
2324         if (vsi->type == I40E_VSI_VMDQ2)
2325                 qtx_ctl = I40E_QTX_CTL_VM_QUEUE;
2326         else
2327                 qtx_ctl = I40E_QTX_CTL_PF_QUEUE;
2328         qtx_ctl |= ((hw->pf_id << I40E_QTX_CTL_PF_INDX_SHIFT) &
2329                     I40E_QTX_CTL_PF_INDX_MASK);
2330         wr32(hw, I40E_QTX_CTL(pf_q), qtx_ctl);
2331         i40e_flush(hw);
2332
2333         clear_bit(__I40E_HANG_CHECK_ARMED, &ring->state);
2334
2335         /* cache tail off for easier writes later */
2336         ring->tail = hw->hw_addr + I40E_QTX_TAIL(pf_q);
2337
2338         return 0;
2339 }
2340
2341 /**
2342  * i40e_configure_rx_ring - Configure a receive ring context
2343  * @ring: The Rx ring to configure
2344  *
2345  * Configure the Rx descriptor ring in the HMC context.
2346  **/
2347 static int i40e_configure_rx_ring(struct i40e_ring *ring)
2348 {
2349         struct i40e_vsi *vsi = ring->vsi;
2350         u32 chain_len = vsi->back->hw.func_caps.rx_buf_chain_len;
2351         u16 pf_q = vsi->base_queue + ring->queue_index;
2352         struct i40e_hw *hw = &vsi->back->hw;
2353         struct i40e_hmc_obj_rxq rx_ctx;
2354         i40e_status err = 0;
2355
2356         ring->state = 0;
2357
2358         /* clear the context structure first */
2359         memset(&rx_ctx, 0, sizeof(rx_ctx));
2360
2361         ring->rx_buf_len = vsi->rx_buf_len;
2362         ring->rx_hdr_len = vsi->rx_hdr_len;
2363
2364         rx_ctx.dbuff = ring->rx_buf_len >> I40E_RXQ_CTX_DBUFF_SHIFT;
2365         rx_ctx.hbuff = ring->rx_hdr_len >> I40E_RXQ_CTX_HBUFF_SHIFT;
2366
2367         rx_ctx.base = (ring->dma / 128);
2368         rx_ctx.qlen = ring->count;
2369
2370         if (vsi->back->flags & I40E_FLAG_16BYTE_RX_DESC_ENABLED) {
2371                 set_ring_16byte_desc_enabled(ring);
2372                 rx_ctx.dsize = 0;
2373         } else {
2374                 rx_ctx.dsize = 1;
2375         }
2376
2377         rx_ctx.dtype = vsi->dtype;
2378         if (vsi->dtype) {
2379                 set_ring_ps_enabled(ring);
2380                 rx_ctx.hsplit_0 = I40E_RX_SPLIT_L2      |
2381                                   I40E_RX_SPLIT_IP      |
2382                                   I40E_RX_SPLIT_TCP_UDP |
2383                                   I40E_RX_SPLIT_SCTP;
2384         } else {
2385                 rx_ctx.hsplit_0 = 0;
2386         }
2387
2388         rx_ctx.rxmax = min_t(u16, vsi->max_frame,
2389                                   (chain_len * ring->rx_buf_len));
2390         rx_ctx.tphrdesc_ena = 1;
2391         rx_ctx.tphwdesc_ena = 1;
2392         rx_ctx.tphdata_ena = 1;
2393         rx_ctx.tphhead_ena = 1;
2394         if (hw->revision_id == 0)
2395                 rx_ctx.lrxqthresh = 0;
2396         else
2397                 rx_ctx.lrxqthresh = 2;
2398         rx_ctx.crcstrip = 1;
2399         rx_ctx.l2tsel = 1;
2400         rx_ctx.showiv = 1;
2401         /* set the prefena field to 1 because the manual says to */
2402         rx_ctx.prefena = 1;
2403
2404         /* clear the context in the HMC */
2405         err = i40e_clear_lan_rx_queue_context(hw, pf_q);
2406         if (err) {
2407                 dev_info(&vsi->back->pdev->dev,
2408                          "Failed to clear LAN Rx queue context on Rx ring %d (pf_q %d), error: %d\n",
2409                          ring->queue_index, pf_q, err);
2410                 return -ENOMEM;
2411         }
2412
2413         /* set the context in the HMC */
2414         err = i40e_set_lan_rx_queue_context(hw, pf_q, &rx_ctx);
2415         if (err) {
2416                 dev_info(&vsi->back->pdev->dev,
2417                          "Failed to set LAN Rx queue context on Rx ring %d (pf_q %d), error: %d\n",
2418                          ring->queue_index, pf_q, err);
2419                 return -ENOMEM;
2420         }
2421
2422         /* cache tail for quicker writes, and clear the reg before use */
2423         ring->tail = hw->hw_addr + I40E_QRX_TAIL(pf_q);
2424         writel(0, ring->tail);
2425
2426         i40e_alloc_rx_buffers(ring, I40E_DESC_UNUSED(ring));
2427
2428         return 0;
2429 }
2430
2431 /**
2432  * i40e_vsi_configure_tx - Configure the VSI for Tx
2433  * @vsi: VSI structure describing this set of rings and resources
2434  *
2435  * Configure the Tx VSI for operation.
2436  **/
2437 static int i40e_vsi_configure_tx(struct i40e_vsi *vsi)
2438 {
2439         int err = 0;
2440         u16 i;
2441
2442         for (i = 0; (i < vsi->num_queue_pairs) && !err; i++)
2443                 err = i40e_configure_tx_ring(vsi->tx_rings[i]);
2444
2445         return err;
2446 }
2447
2448 /**
2449  * i40e_vsi_configure_rx - Configure the VSI for Rx
2450  * @vsi: the VSI being configured
2451  *
2452  * Configure the Rx VSI for operation.
2453  **/
2454 static int i40e_vsi_configure_rx(struct i40e_vsi *vsi)
2455 {
2456         int err = 0;
2457         u16 i;
2458
2459         if (vsi->netdev && (vsi->netdev->mtu > ETH_DATA_LEN))
2460                 vsi->max_frame = vsi->netdev->mtu + ETH_HLEN
2461                                + ETH_FCS_LEN + VLAN_HLEN;
2462         else
2463                 vsi->max_frame = I40E_RXBUFFER_2048;
2464
2465         /* figure out correct receive buffer length */
2466         switch (vsi->back->flags & (I40E_FLAG_RX_1BUF_ENABLED |
2467                                     I40E_FLAG_RX_PS_ENABLED)) {
2468         case I40E_FLAG_RX_1BUF_ENABLED:
2469                 vsi->rx_hdr_len = 0;
2470                 vsi->rx_buf_len = vsi->max_frame;
2471                 vsi->dtype = I40E_RX_DTYPE_NO_SPLIT;
2472                 break;
2473         case I40E_FLAG_RX_PS_ENABLED:
2474                 vsi->rx_hdr_len = I40E_RX_HDR_SIZE;
2475                 vsi->rx_buf_len = I40E_RXBUFFER_2048;
2476                 vsi->dtype = I40E_RX_DTYPE_HEADER_SPLIT;
2477                 break;
2478         default:
2479                 vsi->rx_hdr_len = I40E_RX_HDR_SIZE;
2480                 vsi->rx_buf_len = I40E_RXBUFFER_2048;
2481                 vsi->dtype = I40E_RX_DTYPE_SPLIT_ALWAYS;
2482                 break;
2483         }
2484
2485         /* round up for the chip's needs */
2486         vsi->rx_hdr_len = ALIGN(vsi->rx_hdr_len,
2487                                 (1 << I40E_RXQ_CTX_HBUFF_SHIFT));
2488         vsi->rx_buf_len = ALIGN(vsi->rx_buf_len,
2489                                 (1 << I40E_RXQ_CTX_DBUFF_SHIFT));
2490
2491         /* set up individual rings */
2492         for (i = 0; i < vsi->num_queue_pairs && !err; i++)
2493                 err = i40e_configure_rx_ring(vsi->rx_rings[i]);
2494
2495         return err;
2496 }
2497
2498 /**
2499  * i40e_vsi_config_dcb_rings - Update rings to reflect DCB TC
2500  * @vsi: ptr to the VSI
2501  **/
2502 static void i40e_vsi_config_dcb_rings(struct i40e_vsi *vsi)
2503 {
2504         struct i40e_ring *tx_ring, *rx_ring;
2505         u16 qoffset, qcount;
2506         int i, n;
2507
2508         if (!(vsi->back->flags & I40E_FLAG_DCB_ENABLED))
2509                 return;
2510
2511         for (n = 0; n < I40E_MAX_TRAFFIC_CLASS; n++) {
2512                 if (!(vsi->tc_config.enabled_tc & (1 << n)))
2513                         continue;
2514
2515                 qoffset = vsi->tc_config.tc_info[n].qoffset;
2516                 qcount = vsi->tc_config.tc_info[n].qcount;
2517                 for (i = qoffset; i < (qoffset + qcount); i++) {
2518                         rx_ring = vsi->rx_rings[i];
2519                         tx_ring = vsi->tx_rings[i];
2520                         rx_ring->dcb_tc = n;
2521                         tx_ring->dcb_tc = n;
2522                 }
2523         }
2524 }
2525
2526 /**
2527  * i40e_set_vsi_rx_mode - Call set_rx_mode on a VSI
2528  * @vsi: ptr to the VSI
2529  **/
2530 static void i40e_set_vsi_rx_mode(struct i40e_vsi *vsi)
2531 {
2532         if (vsi->netdev)
2533                 i40e_set_rx_mode(vsi->netdev);
2534 }
2535
2536 /**
2537  * i40e_fdir_filter_restore - Restore the Sideband Flow Director filters
2538  * @vsi: Pointer to the targeted VSI
2539  *
2540  * This function replays the hlist on the hw where all the SB Flow Director
2541  * filters were saved.
2542  **/
2543 static void i40e_fdir_filter_restore(struct i40e_vsi *vsi)
2544 {
2545         struct i40e_fdir_filter *filter;
2546         struct i40e_pf *pf = vsi->back;
2547         struct hlist_node *node;
2548
2549         if (!(pf->flags & I40E_FLAG_FD_SB_ENABLED))
2550                 return;
2551
2552         hlist_for_each_entry_safe(filter, node,
2553                                   &pf->fdir_filter_list, fdir_node) {
2554                 i40e_add_del_fdir(vsi, filter, true);
2555         }
2556 }
2557
2558 /**
2559  * i40e_vsi_configure - Set up the VSI for action
2560  * @vsi: the VSI being configured
2561  **/
2562 static int i40e_vsi_configure(struct i40e_vsi *vsi)
2563 {
2564         int err;
2565
2566         i40e_set_vsi_rx_mode(vsi);
2567         i40e_restore_vlan(vsi);
2568         i40e_vsi_config_dcb_rings(vsi);
2569         err = i40e_vsi_configure_tx(vsi);
2570         if (!err)
2571                 err = i40e_vsi_configure_rx(vsi);
2572
2573         return err;
2574 }
2575
2576 /**
2577  * i40e_vsi_configure_msix - MSIX mode Interrupt Config in the HW
2578  * @vsi: the VSI being configured
2579  **/
2580 static void i40e_vsi_configure_msix(struct i40e_vsi *vsi)
2581 {
2582         struct i40e_pf *pf = vsi->back;
2583         struct i40e_q_vector *q_vector;
2584         struct i40e_hw *hw = &pf->hw;
2585         u16 vector;
2586         int i, q;
2587         u32 val;
2588         u32 qp;
2589
2590         /* The interrupt indexing is offset by 1 in the PFINT_ITRn
2591          * and PFINT_LNKLSTn registers, e.g.:
2592          *   PFINT_ITRn[0..n-1] gets msix-1..msix-n  (qpair interrupts)
2593          */
2594         qp = vsi->base_queue;
2595         vector = vsi->base_vector;
2596         for (i = 0; i < vsi->num_q_vectors; i++, vector++) {
2597                 q_vector = vsi->q_vectors[i];
2598                 q_vector->rx.itr = ITR_TO_REG(vsi->rx_itr_setting);
2599                 q_vector->rx.latency_range = I40E_LOW_LATENCY;
2600                 wr32(hw, I40E_PFINT_ITRN(I40E_RX_ITR, vector - 1),
2601                      q_vector->rx.itr);
2602                 q_vector->tx.itr = ITR_TO_REG(vsi->tx_itr_setting);
2603                 q_vector->tx.latency_range = I40E_LOW_LATENCY;
2604                 wr32(hw, I40E_PFINT_ITRN(I40E_TX_ITR, vector - 1),
2605                      q_vector->tx.itr);
2606
2607                 /* Linked list for the queuepairs assigned to this vector */
2608                 wr32(hw, I40E_PFINT_LNKLSTN(vector - 1), qp);
2609                 for (q = 0; q < q_vector->num_ringpairs; q++) {
2610                         val = I40E_QINT_RQCTL_CAUSE_ENA_MASK |
2611                               (I40E_RX_ITR << I40E_QINT_RQCTL_ITR_INDX_SHIFT)  |
2612                               (vector      << I40E_QINT_RQCTL_MSIX_INDX_SHIFT) |
2613                               (qp          << I40E_QINT_RQCTL_NEXTQ_INDX_SHIFT)|
2614                               (I40E_QUEUE_TYPE_TX
2615                                       << I40E_QINT_RQCTL_NEXTQ_TYPE_SHIFT);
2616
2617                         wr32(hw, I40E_QINT_RQCTL(qp), val);
2618
2619                         val = I40E_QINT_TQCTL_CAUSE_ENA_MASK |
2620                               (I40E_TX_ITR << I40E_QINT_TQCTL_ITR_INDX_SHIFT)  |
2621                               (vector      << I40E_QINT_TQCTL_MSIX_INDX_SHIFT) |
2622                               ((qp+1)      << I40E_QINT_TQCTL_NEXTQ_INDX_SHIFT)|
2623                               (I40E_QUEUE_TYPE_RX
2624                                       << I40E_QINT_TQCTL_NEXTQ_TYPE_SHIFT);
2625
2626                         /* Terminate the linked list */
2627                         if (q == (q_vector->num_ringpairs - 1))
2628                                 val |= (I40E_QUEUE_END_OF_LIST
2629                                            << I40E_QINT_TQCTL_NEXTQ_INDX_SHIFT);
2630
2631                         wr32(hw, I40E_QINT_TQCTL(qp), val);
2632                         qp++;
2633                 }
2634         }
2635
2636         i40e_flush(hw);
2637 }
2638
2639 /**
2640  * i40e_enable_misc_int_causes - enable the non-queue interrupts
2641  * @hw: ptr to the hardware info
2642  **/
2643 static void i40e_enable_misc_int_causes(struct i40e_hw *hw)
2644 {
2645         u32 val;
2646
2647         /* clear things first */
2648         wr32(hw, I40E_PFINT_ICR0_ENA, 0);  /* disable all */
2649         rd32(hw, I40E_PFINT_ICR0);         /* read to clear */
2650
2651         val = I40E_PFINT_ICR0_ENA_ECC_ERR_MASK       |
2652               I40E_PFINT_ICR0_ENA_MAL_DETECT_MASK    |
2653               I40E_PFINT_ICR0_ENA_GRST_MASK          |
2654               I40E_PFINT_ICR0_ENA_PCI_EXCEPTION_MASK |
2655               I40E_PFINT_ICR0_ENA_GPIO_MASK          |
2656               I40E_PFINT_ICR0_ENA_TIMESYNC_MASK      |
2657               I40E_PFINT_ICR0_ENA_HMC_ERR_MASK       |
2658               I40E_PFINT_ICR0_ENA_VFLR_MASK          |
2659               I40E_PFINT_ICR0_ENA_ADMINQ_MASK;
2660
2661         wr32(hw, I40E_PFINT_ICR0_ENA, val);
2662
2663         /* SW_ITR_IDX = 0, but don't change INTENA */
2664         wr32(hw, I40E_PFINT_DYN_CTL0, I40E_PFINT_DYN_CTL0_SW_ITR_INDX_MASK |
2665                                         I40E_PFINT_DYN_CTL0_INTENA_MSK_MASK);
2666
2667         /* OTHER_ITR_IDX = 0 */
2668         wr32(hw, I40E_PFINT_STAT_CTL0, 0);
2669 }
2670
2671 /**
2672  * i40e_configure_msi_and_legacy - Legacy mode interrupt config in the HW
2673  * @vsi: the VSI being configured
2674  **/
2675 static void i40e_configure_msi_and_legacy(struct i40e_vsi *vsi)
2676 {
2677         struct i40e_q_vector *q_vector = vsi->q_vectors[0];
2678         struct i40e_pf *pf = vsi->back;
2679         struct i40e_hw *hw = &pf->hw;
2680         u32 val;
2681
2682         /* set the ITR configuration */
2683         q_vector->rx.itr = ITR_TO_REG(vsi->rx_itr_setting);
2684         q_vector->rx.latency_range = I40E_LOW_LATENCY;
2685         wr32(hw, I40E_PFINT_ITR0(I40E_RX_ITR), q_vector->rx.itr);
2686         q_vector->tx.itr = ITR_TO_REG(vsi->tx_itr_setting);
2687         q_vector->tx.latency_range = I40E_LOW_LATENCY;
2688         wr32(hw, I40E_PFINT_ITR0(I40E_TX_ITR), q_vector->tx.itr);
2689
2690         i40e_enable_misc_int_causes(hw);
2691
2692         /* FIRSTQ_INDX = 0, FIRSTQ_TYPE = 0 (rx) */
2693         wr32(hw, I40E_PFINT_LNKLST0, 0);
2694
2695         /* Associate the queue pair to the vector and enable the queue int */
2696         val = I40E_QINT_RQCTL_CAUSE_ENA_MASK                  |
2697               (I40E_RX_ITR << I40E_QINT_RQCTL_ITR_INDX_SHIFT) |
2698               (I40E_QUEUE_TYPE_TX << I40E_QINT_TQCTL_NEXTQ_TYPE_SHIFT);
2699
2700         wr32(hw, I40E_QINT_RQCTL(0), val);
2701
2702         val = I40E_QINT_TQCTL_CAUSE_ENA_MASK                  |
2703               (I40E_TX_ITR << I40E_QINT_TQCTL_ITR_INDX_SHIFT) |
2704               (I40E_QUEUE_END_OF_LIST << I40E_QINT_TQCTL_NEXTQ_INDX_SHIFT);
2705
2706         wr32(hw, I40E_QINT_TQCTL(0), val);
2707         i40e_flush(hw);
2708 }
2709
2710 /**
2711  * i40e_irq_dynamic_disable_icr0 - Disable default interrupt generation for icr0
2712  * @pf: board private structure
2713  **/
2714 void i40e_irq_dynamic_disable_icr0(struct i40e_pf *pf)
2715 {
2716         struct i40e_hw *hw = &pf->hw;
2717
2718         wr32(hw, I40E_PFINT_DYN_CTL0,
2719              I40E_ITR_NONE << I40E_PFINT_DYN_CTLN_ITR_INDX_SHIFT);
2720         i40e_flush(hw);
2721 }
2722
2723 /**
2724  * i40e_irq_dynamic_enable_icr0 - Enable default interrupt generation for icr0
2725  * @pf: board private structure
2726  **/
2727 void i40e_irq_dynamic_enable_icr0(struct i40e_pf *pf)
2728 {
2729         struct i40e_hw *hw = &pf->hw;
2730         u32 val;
2731
2732         val = I40E_PFINT_DYN_CTL0_INTENA_MASK   |
2733               I40E_PFINT_DYN_CTL0_CLEARPBA_MASK |
2734               (I40E_ITR_NONE << I40E_PFINT_DYN_CTL0_ITR_INDX_SHIFT);
2735
2736         wr32(hw, I40E_PFINT_DYN_CTL0, val);
2737         i40e_flush(hw);
2738 }
2739
2740 /**
2741  * i40e_irq_dynamic_enable - Enable default interrupt generation settings
2742  * @vsi: pointer to a vsi
2743  * @vector: enable a particular Hw Interrupt vector
2744  **/
2745 void i40e_irq_dynamic_enable(struct i40e_vsi *vsi, int vector)
2746 {
2747         struct i40e_pf *pf = vsi->back;
2748         struct i40e_hw *hw = &pf->hw;
2749         u32 val;
2750
2751         val = I40E_PFINT_DYN_CTLN_INTENA_MASK |
2752               I40E_PFINT_DYN_CTLN_CLEARPBA_MASK |
2753               (I40E_ITR_NONE << I40E_PFINT_DYN_CTLN_ITR_INDX_SHIFT);
2754         wr32(hw, I40E_PFINT_DYN_CTLN(vector - 1), val);
2755         /* skip the flush */
2756 }
2757
2758 /**
2759  * i40e_msix_clean_rings - MSIX mode Interrupt Handler
2760  * @irq: interrupt number
2761  * @data: pointer to a q_vector
2762  **/
2763 static irqreturn_t i40e_msix_clean_rings(int irq, void *data)
2764 {
2765         struct i40e_q_vector *q_vector = data;
2766
2767         if (!q_vector->tx.ring && !q_vector->rx.ring)
2768                 return IRQ_HANDLED;
2769
2770         napi_schedule(&q_vector->napi);
2771
2772         return IRQ_HANDLED;
2773 }
2774
2775 /**
2776  * i40e_vsi_request_irq_msix - Initialize MSI-X interrupts
2777  * @vsi: the VSI being configured
2778  * @basename: name for the vector
2779  *
2780  * Allocates MSI-X vectors and requests interrupts from the kernel.
2781  **/
2782 static int i40e_vsi_request_irq_msix(struct i40e_vsi *vsi, char *basename)
2783 {
2784         int q_vectors = vsi->num_q_vectors;
2785         struct i40e_pf *pf = vsi->back;
2786         int base = vsi->base_vector;
2787         int rx_int_idx = 0;
2788         int tx_int_idx = 0;
2789         int vector, err;
2790
2791         for (vector = 0; vector < q_vectors; vector++) {
2792                 struct i40e_q_vector *q_vector = vsi->q_vectors[vector];
2793
2794                 if (q_vector->tx.ring && q_vector->rx.ring) {
2795                         snprintf(q_vector->name, sizeof(q_vector->name) - 1,
2796                                  "%s-%s-%d", basename, "TxRx", rx_int_idx++);
2797                         tx_int_idx++;
2798                 } else if (q_vector->rx.ring) {
2799                         snprintf(q_vector->name, sizeof(q_vector->name) - 1,
2800                                  "%s-%s-%d", basename, "rx", rx_int_idx++);
2801                 } else if (q_vector->tx.ring) {
2802                         snprintf(q_vector->name, sizeof(q_vector->name) - 1,
2803                                  "%s-%s-%d", basename, "tx", tx_int_idx++);
2804                 } else {
2805                         /* skip this unused q_vector */
2806                         continue;
2807                 }
2808                 err = request_irq(pf->msix_entries[base + vector].vector,
2809                                   vsi->irq_handler,
2810                                   0,
2811                                   q_vector->name,
2812                                   q_vector);
2813                 if (err) {
2814                         dev_info(&pf->pdev->dev,
2815                                  "%s: request_irq failed, error: %d\n",
2816                                  __func__, err);
2817                         goto free_queue_irqs;
2818                 }
2819                 /* assign the mask for this irq */
2820                 irq_set_affinity_hint(pf->msix_entries[base + vector].vector,
2821                                       &q_vector->affinity_mask);
2822         }
2823
2824         vsi->irqs_ready = true;
2825         return 0;
2826
2827 free_queue_irqs:
2828         while (vector) {
2829                 vector--;
2830                 irq_set_affinity_hint(pf->msix_entries[base + vector].vector,
2831                                       NULL);
2832                 free_irq(pf->msix_entries[base + vector].vector,
2833                          &(vsi->q_vectors[vector]));
2834         }
2835         return err;
2836 }
2837
2838 /**
2839  * i40e_vsi_disable_irq - Mask off queue interrupt generation on the VSI
2840  * @vsi: the VSI being un-configured
2841  **/
2842 static void i40e_vsi_disable_irq(struct i40e_vsi *vsi)
2843 {
2844         struct i40e_pf *pf = vsi->back;
2845         struct i40e_hw *hw = &pf->hw;
2846         int base = vsi->base_vector;
2847         int i;
2848
2849         for (i = 0; i < vsi->num_queue_pairs; i++) {
2850                 wr32(hw, I40E_QINT_TQCTL(vsi->tx_rings[i]->reg_idx), 0);
2851                 wr32(hw, I40E_QINT_RQCTL(vsi->rx_rings[i]->reg_idx), 0);
2852         }
2853
2854         if (pf->flags & I40E_FLAG_MSIX_ENABLED) {
2855                 for (i = vsi->base_vector;
2856                      i < (vsi->num_q_vectors + vsi->base_vector); i++)
2857                         wr32(hw, I40E_PFINT_DYN_CTLN(i - 1), 0);
2858
2859                 i40e_flush(hw);
2860                 for (i = 0; i < vsi->num_q_vectors; i++)
2861                         synchronize_irq(pf->msix_entries[i + base].vector);
2862         } else {
2863                 /* Legacy and MSI mode - this stops all interrupt handling */
2864                 wr32(hw, I40E_PFINT_ICR0_ENA, 0);
2865                 wr32(hw, I40E_PFINT_DYN_CTL0, 0);
2866                 i40e_flush(hw);
2867                 synchronize_irq(pf->pdev->irq);
2868         }
2869 }
2870
2871 /**
2872  * i40e_vsi_enable_irq - Enable IRQ for the given VSI
2873  * @vsi: the VSI being configured
2874  **/
2875 static int i40e_vsi_enable_irq(struct i40e_vsi *vsi)
2876 {
2877         struct i40e_pf *pf = vsi->back;
2878         int i;
2879
2880         if (pf->flags & I40E_FLAG_MSIX_ENABLED) {
2881                 for (i = vsi->base_vector;
2882                      i < (vsi->num_q_vectors + vsi->base_vector); i++)
2883                         i40e_irq_dynamic_enable(vsi, i);
2884         } else {
2885                 i40e_irq_dynamic_enable_icr0(pf);
2886         }
2887
2888         i40e_flush(&pf->hw);
2889         return 0;
2890 }
2891
2892 /**
2893  * i40e_stop_misc_vector - Stop the vector that handles non-queue events
2894  * @pf: board private structure
2895  **/
2896 static void i40e_stop_misc_vector(struct i40e_pf *pf)
2897 {
2898         /* Disable ICR 0 */
2899         wr32(&pf->hw, I40E_PFINT_ICR0_ENA, 0);
2900         i40e_flush(&pf->hw);
2901 }
2902
2903 /**
2904  * i40e_intr - MSI/Legacy and non-queue interrupt handler
2905  * @irq: interrupt number
2906  * @data: pointer to a q_vector
2907  *
2908  * This is the handler used for all MSI/Legacy interrupts, and deals
2909  * with both queue and non-queue interrupts.  This is also used in
2910  * MSIX mode to handle the non-queue interrupts.
2911  **/
2912 static irqreturn_t i40e_intr(int irq, void *data)
2913 {
2914         struct i40e_pf *pf = (struct i40e_pf *)data;
2915         struct i40e_hw *hw = &pf->hw;
2916         irqreturn_t ret = IRQ_NONE;
2917         u32 icr0, icr0_remaining;
2918         u32 val, ena_mask;
2919
2920         icr0 = rd32(hw, I40E_PFINT_ICR0);
2921         ena_mask = rd32(hw, I40E_PFINT_ICR0_ENA);
2922
2923         /* if sharing a legacy IRQ, we might get called w/o an intr pending */
2924         if ((icr0 & I40E_PFINT_ICR0_INTEVENT_MASK) == 0)
2925                 goto enable_intr;
2926
2927         /* if interrupt but no bits showing, must be SWINT */
2928         if (((icr0 & ~I40E_PFINT_ICR0_INTEVENT_MASK) == 0) ||
2929             (icr0 & I40E_PFINT_ICR0_SWINT_MASK))
2930                 pf->sw_int_count++;
2931
2932         /* only q0 is used in MSI/Legacy mode, and none are used in MSIX */
2933         if (icr0 & I40E_PFINT_ICR0_QUEUE_0_MASK) {
2934
2935                 /* temporarily disable queue cause for NAPI processing */
2936                 u32 qval = rd32(hw, I40E_QINT_RQCTL(0));
2937                 qval &= ~I40E_QINT_RQCTL_CAUSE_ENA_MASK;
2938                 wr32(hw, I40E_QINT_RQCTL(0), qval);
2939
2940                 qval = rd32(hw, I40E_QINT_TQCTL(0));
2941                 qval &= ~I40E_QINT_TQCTL_CAUSE_ENA_MASK;
2942                 wr32(hw, I40E_QINT_TQCTL(0), qval);
2943
2944                 if (!test_bit(__I40E_DOWN, &pf->state))
2945                         napi_schedule(&pf->vsi[pf->lan_vsi]->q_vectors[0]->napi);
2946         }
2947
2948         if (icr0 & I40E_PFINT_ICR0_ADMINQ_MASK) {
2949                 ena_mask &= ~I40E_PFINT_ICR0_ENA_ADMINQ_MASK;
2950                 set_bit(__I40E_ADMINQ_EVENT_PENDING, &pf->state);
2951         }
2952
2953         if (icr0 & I40E_PFINT_ICR0_MAL_DETECT_MASK) {
2954                 ena_mask &= ~I40E_PFINT_ICR0_ENA_MAL_DETECT_MASK;
2955                 set_bit(__I40E_MDD_EVENT_PENDING, &pf->state);
2956         }
2957
2958         if (icr0 & I40E_PFINT_ICR0_VFLR_MASK) {
2959                 ena_mask &= ~I40E_PFINT_ICR0_ENA_VFLR_MASK;
2960                 set_bit(__I40E_VFLR_EVENT_PENDING, &pf->state);
2961         }
2962
2963         if (icr0 & I40E_PFINT_ICR0_GRST_MASK) {
2964                 if (!test_bit(__I40E_RESET_RECOVERY_PENDING, &pf->state))
2965                         set_bit(__I40E_RESET_INTR_RECEIVED, &pf->state);
2966                 ena_mask &= ~I40E_PFINT_ICR0_ENA_GRST_MASK;
2967                 val = rd32(hw, I40E_GLGEN_RSTAT);
2968                 val = (val & I40E_GLGEN_RSTAT_RESET_TYPE_MASK)
2969                        >> I40E_GLGEN_RSTAT_RESET_TYPE_SHIFT;
2970                 if (val == I40E_RESET_CORER) {
2971                         pf->corer_count++;
2972                 } else if (val == I40E_RESET_GLOBR) {
2973                         pf->globr_count++;
2974                 } else if (val == I40E_RESET_EMPR) {
2975                         pf->empr_count++;
2976                         set_bit(__I40E_EMP_RESET_REQUESTED, &pf->state);
2977                 }
2978         }
2979
2980         if (icr0 & I40E_PFINT_ICR0_HMC_ERR_MASK) {
2981                 icr0 &= ~I40E_PFINT_ICR0_HMC_ERR_MASK;
2982                 dev_info(&pf->pdev->dev, "HMC error interrupt\n");
2983         }
2984
2985         if (icr0 & I40E_PFINT_ICR0_TIMESYNC_MASK) {
2986                 u32 prttsyn_stat = rd32(hw, I40E_PRTTSYN_STAT_0);
2987
2988                 if (prttsyn_stat & I40E_PRTTSYN_STAT_0_TXTIME_MASK) {
2989                         icr0 &= ~I40E_PFINT_ICR0_ENA_TIMESYNC_MASK;
2990                         i40e_ptp_tx_hwtstamp(pf);
2991                 }
2992         }
2993
2994         /* If a critical error is pending we have no choice but to reset the
2995          * device.
2996          * Report and mask out any remaining unexpected interrupts.
2997          */
2998         icr0_remaining = icr0 & ena_mask;
2999         if (icr0_remaining) {
3000                 dev_info(&pf->pdev->dev, "unhandled interrupt icr0=0x%08x\n",
3001                          icr0_remaining);
3002                 if ((icr0_remaining & I40E_PFINT_ICR0_PE_CRITERR_MASK) ||
3003                     (icr0_remaining & I40E_PFINT_ICR0_PCI_EXCEPTION_MASK) ||
3004                     (icr0_remaining & I40E_PFINT_ICR0_ECC_ERR_MASK)) {
3005                         dev_info(&pf->pdev->dev, "device will be reset\n");
3006                         set_bit(__I40E_PF_RESET_REQUESTED, &pf->state);
3007                         i40e_service_event_schedule(pf);
3008                 }
3009                 ena_mask &= ~icr0_remaining;
3010         }
3011         ret = IRQ_HANDLED;
3012
3013 enable_intr:
3014         /* re-enable interrupt causes */
3015         wr32(hw, I40E_PFINT_ICR0_ENA, ena_mask);
3016         if (!test_bit(__I40E_DOWN, &pf->state)) {
3017                 i40e_service_event_schedule(pf);
3018                 i40e_irq_dynamic_enable_icr0(pf);
3019         }
3020
3021         return ret;
3022 }
3023
3024 /**
3025  * i40e_clean_fdir_tx_irq - Reclaim resources after transmit completes
3026  * @tx_ring:  tx ring to clean
3027  * @budget:   how many cleans we're allowed
3028  *
3029  * Returns true if there's any budget left (e.g. the clean is finished)
3030  **/
3031 static bool i40e_clean_fdir_tx_irq(struct i40e_ring *tx_ring, int budget)
3032 {
3033         struct i40e_vsi *vsi = tx_ring->vsi;
3034         u16 i = tx_ring->next_to_clean;
3035         struct i40e_tx_buffer *tx_buf;
3036         struct i40e_tx_desc *tx_desc;
3037
3038         tx_buf = &tx_ring->tx_bi[i];
3039         tx_desc = I40E_TX_DESC(tx_ring, i);
3040         i -= tx_ring->count;
3041
3042         do {
3043                 struct i40e_tx_desc *eop_desc = tx_buf->next_to_watch;
3044
3045                 /* if next_to_watch is not set then there is no work pending */
3046                 if (!eop_desc)
3047                         break;
3048
3049                 /* prevent any other reads prior to eop_desc */
3050                 smp_rmb();
3051
3052                 /* if the descriptor isn't done, no work yet to do */
3053                 if (!(eop_desc->cmd_type_offset_bsz &
3054                       cpu_to_le64(I40E_TX_DESC_DTYPE_DESC_DONE)))
3055                         break;
3056
3057                 /* clear next_to_watch to prevent false hangs */
3058                 tx_buf->next_to_watch = NULL;
3059
3060                 /* unmap skb header data */
3061                 dma_unmap_single(tx_ring->dev,
3062                                  dma_unmap_addr(tx_buf, dma),
3063                                  dma_unmap_len(tx_buf, len),
3064                                  DMA_TO_DEVICE);
3065
3066                 dma_unmap_len_set(tx_buf, len, 0);
3067
3068
3069                 /* move to the next desc and buffer to clean */
3070                 tx_buf++;
3071                 tx_desc++;
3072                 i++;
3073                 if (unlikely(!i)) {
3074                         i -= tx_ring->count;
3075                         tx_buf = tx_ring->tx_bi;
3076                         tx_desc = I40E_TX_DESC(tx_ring, 0);
3077                 }
3078
3079                 /* update budget accounting */
3080                 budget--;
3081         } while (likely(budget));
3082
3083         i += tx_ring->count;
3084         tx_ring->next_to_clean = i;
3085
3086         if (vsi->back->flags & I40E_FLAG_MSIX_ENABLED) {
3087                 i40e_irq_dynamic_enable(vsi,
3088                                 tx_ring->q_vector->v_idx + vsi->base_vector);
3089         }
3090         return budget > 0;
3091 }
3092
3093 /**
3094  * i40e_fdir_clean_ring - Interrupt Handler for FDIR SB ring
3095  * @irq: interrupt number
3096  * @data: pointer to a q_vector
3097  **/
3098 static irqreturn_t i40e_fdir_clean_ring(int irq, void *data)
3099 {
3100         struct i40e_q_vector *q_vector = data;
3101         struct i40e_vsi *vsi;
3102
3103         if (!q_vector->tx.ring)
3104                 return IRQ_HANDLED;
3105
3106         vsi = q_vector->tx.ring->vsi;
3107         i40e_clean_fdir_tx_irq(q_vector->tx.ring, vsi->work_limit);
3108
3109         return IRQ_HANDLED;
3110 }
3111
3112 /**
3113  * i40e_map_vector_to_qp - Assigns the queue pair to the vector
3114  * @vsi: the VSI being configured
3115  * @v_idx: vector index
3116  * @qp_idx: queue pair index
3117  **/
3118 static void map_vector_to_qp(struct i40e_vsi *vsi, int v_idx, int qp_idx)
3119 {
3120         struct i40e_q_vector *q_vector = vsi->q_vectors[v_idx];
3121         struct i40e_ring *tx_ring = vsi->tx_rings[qp_idx];
3122         struct i40e_ring *rx_ring = vsi->rx_rings[qp_idx];
3123
3124         tx_ring->q_vector = q_vector;
3125         tx_ring->next = q_vector->tx.ring;
3126         q_vector->tx.ring = tx_ring;
3127         q_vector->tx.count++;
3128
3129         rx_ring->q_vector = q_vector;
3130         rx_ring->next = q_vector->rx.ring;
3131         q_vector->rx.ring = rx_ring;
3132         q_vector->rx.count++;
3133 }
3134
3135 /**
3136  * i40e_vsi_map_rings_to_vectors - Maps descriptor rings to vectors
3137  * @vsi: the VSI being configured
3138  *
3139  * This function maps descriptor rings to the queue-specific vectors
3140  * we were allotted through the MSI-X enabling code.  Ideally, we'd have
3141  * one vector per queue pair, but on a constrained vector budget, we
3142  * group the queue pairs as "efficiently" as possible.
3143  **/
3144 static void i40e_vsi_map_rings_to_vectors(struct i40e_vsi *vsi)
3145 {
3146         int qp_remaining = vsi->num_queue_pairs;
3147         int q_vectors = vsi->num_q_vectors;
3148         int num_ringpairs;
3149         int v_start = 0;
3150         int qp_idx = 0;
3151
3152         /* If we don't have enough vectors for a 1-to-1 mapping, we'll have to
3153          * group them so there are multiple queues per vector.
3154          */
3155         for (; v_start < q_vectors && qp_remaining; v_start++) {
3156                 struct i40e_q_vector *q_vector = vsi->q_vectors[v_start];
3157
3158                 num_ringpairs = DIV_ROUND_UP(qp_remaining, q_vectors - v_start);
3159
3160                 q_vector->num_ringpairs = num_ringpairs;
3161
3162                 q_vector->rx.count = 0;
3163                 q_vector->tx.count = 0;
3164                 q_vector->rx.ring = NULL;
3165                 q_vector->tx.ring = NULL;
3166
3167                 while (num_ringpairs--) {
3168                         map_vector_to_qp(vsi, v_start, qp_idx);
3169                         qp_idx++;
3170                         qp_remaining--;
3171                 }
3172         }
3173 }
3174
3175 /**
3176  * i40e_vsi_request_irq - Request IRQ from the OS
3177  * @vsi: the VSI being configured
3178  * @basename: name for the vector
3179  **/
3180 static int i40e_vsi_request_irq(struct i40e_vsi *vsi, char *basename)
3181 {
3182         struct i40e_pf *pf = vsi->back;
3183         int err;
3184
3185         if (pf->flags & I40E_FLAG_MSIX_ENABLED)
3186                 err = i40e_vsi_request_irq_msix(vsi, basename);
3187         else if (pf->flags & I40E_FLAG_MSI_ENABLED)
3188                 err = request_irq(pf->pdev->irq, i40e_intr, 0,
3189                                   pf->misc_int_name, pf);
3190         else
3191                 err = request_irq(pf->pdev->irq, i40e_intr, IRQF_SHARED,
3192                                   pf->misc_int_name, pf);
3193
3194         if (err)
3195                 dev_info(&pf->pdev->dev, "request_irq failed, Error %d\n", err);
3196
3197         return err;
3198 }
3199
3200 #ifdef CONFIG_NET_POLL_CONTROLLER
3201 /**
3202  * i40e_netpoll - A Polling 'interrupt'handler
3203  * @netdev: network interface device structure
3204  *
3205  * This is used by netconsole to send skbs without having to re-enable
3206  * interrupts.  It's not called while the normal interrupt routine is executing.
3207  **/
3208 static void i40e_netpoll(struct net_device *netdev)
3209 {
3210         struct i40e_netdev_priv *np = netdev_priv(netdev);
3211         struct i40e_vsi *vsi = np->vsi;
3212         struct i40e_pf *pf = vsi->back;
3213         int i;
3214
3215         /* if interface is down do nothing */
3216         if (test_bit(__I40E_DOWN, &vsi->state))
3217                 return;
3218
3219         pf->flags |= I40E_FLAG_IN_NETPOLL;
3220         if (pf->flags & I40E_FLAG_MSIX_ENABLED) {
3221                 for (i = 0; i < vsi->num_q_vectors; i++)
3222                         i40e_msix_clean_rings(0, vsi->q_vectors[i]);
3223         } else {
3224                 i40e_intr(pf->pdev->irq, netdev);
3225         }
3226         pf->flags &= ~I40E_FLAG_IN_NETPOLL;
3227 }
3228 #endif
3229
3230 /**
3231  * i40e_vsi_control_tx - Start or stop a VSI's rings
3232  * @vsi: the VSI being configured
3233  * @enable: start or stop the rings
3234  **/
3235 static int i40e_vsi_control_tx(struct i40e_vsi *vsi, bool enable)
3236 {
3237         struct i40e_pf *pf = vsi->back;
3238         struct i40e_hw *hw = &pf->hw;
3239         int i, j, pf_q;
3240         u32 tx_reg;
3241
3242         pf_q = vsi->base_queue;
3243         for (i = 0; i < vsi->num_queue_pairs; i++, pf_q++) {
3244
3245                 /* warn the TX unit of coming changes */
3246                 i40e_pre_tx_queue_cfg(&pf->hw, pf_q, enable);
3247                 if (!enable)
3248                         udelay(10);
3249
3250                 for (j = 0; j < 50; j++) {
3251                         tx_reg = rd32(hw, I40E_QTX_ENA(pf_q));
3252                         if (((tx_reg >> I40E_QTX_ENA_QENA_REQ_SHIFT) & 1) ==
3253                             ((tx_reg >> I40E_QTX_ENA_QENA_STAT_SHIFT) & 1))
3254                                 break;
3255                         usleep_range(1000, 2000);
3256                 }
3257                 /* Skip if the queue is already in the requested state */
3258                 if (enable == !!(tx_reg & I40E_QTX_ENA_QENA_STAT_MASK))
3259                         continue;
3260
3261                 /* turn on/off the queue */
3262                 if (enable) {
3263                         wr32(hw, I40E_QTX_HEAD(pf_q), 0);
3264                         tx_reg |= I40E_QTX_ENA_QENA_REQ_MASK;
3265                 } else {
3266                         tx_reg &= ~I40E_QTX_ENA_QENA_REQ_MASK;
3267                 }
3268
3269                 wr32(hw, I40E_QTX_ENA(pf_q), tx_reg);
3270
3271                 /* wait for the change to finish */
3272                 for (j = 0; j < 10; j++) {
3273                         tx_reg = rd32(hw, I40E_QTX_ENA(pf_q));
3274                         if (enable == !!(tx_reg & I40E_QTX_ENA_QENA_STAT_MASK))
3275                                 break;
3276
3277                         udelay(10);
3278                 }
3279                 if (j >= 10) {
3280                         dev_info(&pf->pdev->dev, "Tx ring %d %sable timeout\n",
3281                                  pf_q, (enable ? "en" : "dis"));
3282                         return -ETIMEDOUT;
3283                 }
3284         }
3285
3286         if (hw->revision_id == 0)
3287                 mdelay(50);
3288
3289         return 0;
3290 }
3291
3292 /**
3293  * i40e_vsi_control_rx - Start or stop a VSI's rings
3294  * @vsi: the VSI being configured
3295  * @enable: start or stop the rings
3296  **/
3297 static int i40e_vsi_control_rx(struct i40e_vsi *vsi, bool enable)
3298 {
3299         struct i40e_pf *pf = vsi->back;
3300         struct i40e_hw *hw = &pf->hw;
3301         int i, j, pf_q;
3302         u32 rx_reg;
3303
3304         pf_q = vsi->base_queue;
3305         for (i = 0; i < vsi->num_queue_pairs; i++, pf_q++) {
3306                 for (j = 0; j < 50; j++) {
3307                         rx_reg = rd32(hw, I40E_QRX_ENA(pf_q));
3308                         if (((rx_reg >> I40E_QRX_ENA_QENA_REQ_SHIFT) & 1) ==
3309                             ((rx_reg >> I40E_QRX_ENA_QENA_STAT_SHIFT) & 1))
3310                                 break;
3311                         usleep_range(1000, 2000);
3312                 }
3313
3314                 /* Skip if the queue is already in the requested state */
3315                 if (enable == !!(rx_reg & I40E_QRX_ENA_QENA_STAT_MASK))
3316                         continue;
3317
3318                 /* turn on/off the queue */
3319                 if (enable)
3320                         rx_reg |= I40E_QRX_ENA_QENA_REQ_MASK;
3321                 else
3322                         rx_reg &= ~I40E_QRX_ENA_QENA_REQ_MASK;
3323                 wr32(hw, I40E_QRX_ENA(pf_q), rx_reg);
3324
3325                 /* wait for the change to finish */
3326                 for (j = 0; j < 10; j++) {
3327                         rx_reg = rd32(hw, I40E_QRX_ENA(pf_q));
3328
3329                         if (enable == !!(rx_reg & I40E_QRX_ENA_QENA_STAT_MASK))
3330                                 break;
3331
3332                         udelay(10);
3333                 }
3334                 if (j >= 10) {
3335                         dev_info(&pf->pdev->dev, "Rx ring %d %sable timeout\n",
3336                                  pf_q, (enable ? "en" : "dis"));
3337                         return -ETIMEDOUT;
3338                 }
3339         }
3340
3341         return 0;
3342 }
3343
3344 /**
3345  * i40e_vsi_control_rings - Start or stop a VSI's rings
3346  * @vsi: the VSI being configured
3347  * @enable: start or stop the rings
3348  **/
3349 int i40e_vsi_control_rings(struct i40e_vsi *vsi, bool request)
3350 {
3351         int ret = 0;
3352
3353         /* do rx first for enable and last for disable */
3354         if (request) {
3355                 ret = i40e_vsi_control_rx(vsi, request);
3356                 if (ret)
3357                         return ret;
3358                 ret = i40e_vsi_control_tx(vsi, request);
3359         } else {
3360                 /* Ignore return value, we need to shutdown whatever we can */
3361                 i40e_vsi_control_tx(vsi, request);
3362                 i40e_vsi_control_rx(vsi, request);
3363         }
3364
3365         return ret;
3366 }
3367
3368 /**
3369  * i40e_vsi_free_irq - Free the irq association with the OS
3370  * @vsi: the VSI being configured
3371  **/
3372 static void i40e_vsi_free_irq(struct i40e_vsi *vsi)
3373 {
3374         struct i40e_pf *pf = vsi->back;
3375         struct i40e_hw *hw = &pf->hw;
3376         int base = vsi->base_vector;
3377         u32 val, qp;
3378         int i;
3379
3380         if (pf->flags & I40E_FLAG_MSIX_ENABLED) {
3381                 if (!vsi->q_vectors)
3382                         return;
3383
3384                 if (!vsi->irqs_ready)
3385                         return;
3386
3387                 vsi->irqs_ready = false;
3388                 for (i = 0; i < vsi->num_q_vectors; i++) {
3389                         u16 vector = i + base;
3390
3391                         /* free only the irqs that were actually requested */
3392                         if (!vsi->q_vectors[i] ||
3393                             !vsi->q_vectors[i]->num_ringpairs)
3394                                 continue;
3395
3396                         /* clear the affinity_mask in the IRQ descriptor */
3397                         irq_set_affinity_hint(pf->msix_entries[vector].vector,
3398                                               NULL);
3399                         free_irq(pf->msix_entries[vector].vector,
3400                                  vsi->q_vectors[i]);
3401
3402                         /* Tear down the interrupt queue link list
3403                          *
3404                          * We know that they come in pairs and always
3405                          * the Rx first, then the Tx.  To clear the
3406                          * link list, stick the EOL value into the
3407                          * next_q field of the registers.
3408                          */
3409                         val = rd32(hw, I40E_PFINT_LNKLSTN(vector - 1));
3410                         qp = (val & I40E_PFINT_LNKLSTN_FIRSTQ_INDX_MASK)
3411                                 >> I40E_PFINT_LNKLSTN_FIRSTQ_INDX_SHIFT;
3412                         val |= I40E_QUEUE_END_OF_LIST
3413                                 << I40E_PFINT_LNKLSTN_FIRSTQ_INDX_SHIFT;
3414                         wr32(hw, I40E_PFINT_LNKLSTN(vector - 1), val);
3415
3416                         while (qp != I40E_QUEUE_END_OF_LIST) {
3417                                 u32 next;
3418
3419                                 val = rd32(hw, I40E_QINT_RQCTL(qp));
3420
3421                                 val &= ~(I40E_QINT_RQCTL_MSIX_INDX_MASK  |
3422                                          I40E_QINT_RQCTL_MSIX0_INDX_MASK |
3423                                          I40E_QINT_RQCTL_CAUSE_ENA_MASK  |
3424                                          I40E_QINT_RQCTL_INTEVENT_MASK);
3425
3426                                 val |= (I40E_QINT_RQCTL_ITR_INDX_MASK |
3427                                          I40E_QINT_RQCTL_NEXTQ_INDX_MASK);
3428
3429                                 wr32(hw, I40E_QINT_RQCTL(qp), val);
3430
3431                                 val = rd32(hw, I40E_QINT_TQCTL(qp));
3432
3433                                 next = (val & I40E_QINT_TQCTL_NEXTQ_INDX_MASK)
3434                                         >> I40E_QINT_TQCTL_NEXTQ_INDX_SHIFT;
3435
3436                                 val &= ~(I40E_QINT_TQCTL_MSIX_INDX_MASK  |
3437                                          I40E_QINT_TQCTL_MSIX0_INDX_MASK |
3438                                          I40E_QINT_TQCTL_CAUSE_ENA_MASK  |
3439                                          I40E_QINT_TQCTL_INTEVENT_MASK);
3440
3441                                 val |= (I40E_QINT_TQCTL_ITR_INDX_MASK |
3442                                          I40E_QINT_TQCTL_NEXTQ_INDX_MASK);
3443
3444                                 wr32(hw, I40E_QINT_TQCTL(qp), val);
3445                                 qp = next;
3446                         }
3447                 }
3448         } else {
3449                 free_irq(pf->pdev->irq, pf);
3450
3451                 val = rd32(hw, I40E_PFINT_LNKLST0);
3452                 qp = (val & I40E_PFINT_LNKLSTN_FIRSTQ_INDX_MASK)
3453                         >> I40E_PFINT_LNKLSTN_FIRSTQ_INDX_SHIFT;
3454                 val |= I40E_QUEUE_END_OF_LIST
3455                         << I40E_PFINT_LNKLST0_FIRSTQ_INDX_SHIFT;
3456                 wr32(hw, I40E_PFINT_LNKLST0, val);
3457
3458                 val = rd32(hw, I40E_QINT_RQCTL(qp));
3459                 val &= ~(I40E_QINT_RQCTL_MSIX_INDX_MASK  |
3460                          I40E_QINT_RQCTL_MSIX0_INDX_MASK |
3461                          I40E_QINT_RQCTL_CAUSE_ENA_MASK  |
3462                          I40E_QINT_RQCTL_INTEVENT_MASK);
3463
3464                 val |= (I40E_QINT_RQCTL_ITR_INDX_MASK |
3465                         I40E_QINT_RQCTL_NEXTQ_INDX_MASK);
3466
3467                 wr32(hw, I40E_QINT_RQCTL(qp), val);
3468
3469                 val = rd32(hw, I40E_QINT_TQCTL(qp));
3470
3471                 val &= ~(I40E_QINT_TQCTL_MSIX_INDX_MASK  |
3472                          I40E_QINT_TQCTL_MSIX0_INDX_MASK |
3473                          I40E_QINT_TQCTL_CAUSE_ENA_MASK  |
3474                          I40E_QINT_TQCTL_INTEVENT_MASK);
3475
3476                 val |= (I40E_QINT_TQCTL_ITR_INDX_MASK |
3477                         I40E_QINT_TQCTL_NEXTQ_INDX_MASK);
3478
3479                 wr32(hw, I40E_QINT_TQCTL(qp), val);
3480         }
3481 }
3482
3483 /**
3484  * i40e_free_q_vector - Free memory allocated for specific interrupt vector
3485  * @vsi: the VSI being configured
3486  * @v_idx: Index of vector to be freed
3487  *
3488  * This function frees the memory allocated to the q_vector.  In addition if
3489  * NAPI is enabled it will delete any references to the NAPI struct prior
3490  * to freeing the q_vector.
3491  **/
3492 static void i40e_free_q_vector(struct i40e_vsi *vsi, int v_idx)
3493 {
3494         struct i40e_q_vector *q_vector = vsi->q_vectors[v_idx];
3495         struct i40e_ring *ring;
3496
3497         if (!q_vector)
3498                 return;
3499
3500         /* disassociate q_vector from rings */
3501         i40e_for_each_ring(ring, q_vector->tx)
3502                 ring->q_vector = NULL;
3503
3504         i40e_for_each_ring(ring, q_vector->rx)
3505                 ring->q_vector = NULL;
3506
3507         /* only VSI w/ an associated netdev is set up w/ NAPI */
3508         if (vsi->netdev)
3509                 netif_napi_del(&q_vector->napi);
3510
3511         vsi->q_vectors[v_idx] = NULL;
3512
3513         kfree_rcu(q_vector, rcu);
3514 }
3515
3516 /**
3517  * i40e_vsi_free_q_vectors - Free memory allocated for interrupt vectors
3518  * @vsi: the VSI being un-configured
3519  *
3520  * This frees the memory allocated to the q_vectors and
3521  * deletes references to the NAPI struct.
3522  **/
3523 static void i40e_vsi_free_q_vectors(struct i40e_vsi *vsi)
3524 {
3525         int v_idx;
3526
3527         for (v_idx = 0; v_idx < vsi->num_q_vectors; v_idx++)
3528                 i40e_free_q_vector(vsi, v_idx);
3529 }
3530
3531 /**
3532  * i40e_reset_interrupt_capability - Disable interrupt setup in OS
3533  * @pf: board private structure
3534  **/
3535 static void i40e_reset_interrupt_capability(struct i40e_pf *pf)
3536 {
3537         /* If we're in Legacy mode, the interrupt was cleaned in vsi_close */
3538         if (pf->flags & I40E_FLAG_MSIX_ENABLED) {
3539                 pci_disable_msix(pf->pdev);
3540                 kfree(pf->msix_entries);
3541                 pf->msix_entries = NULL;
3542         } else if (pf->flags & I40E_FLAG_MSI_ENABLED) {
3543                 pci_disable_msi(pf->pdev);
3544         }
3545         pf->flags &= ~(I40E_FLAG_MSIX_ENABLED | I40E_FLAG_MSI_ENABLED);
3546 }
3547
3548 /**
3549  * i40e_clear_interrupt_scheme - Clear the current interrupt scheme settings
3550  * @pf: board private structure
3551  *
3552  * We go through and clear interrupt specific resources and reset the structure
3553  * to pre-load conditions
3554  **/
3555 static void i40e_clear_interrupt_scheme(struct i40e_pf *pf)
3556 {
3557         int i;
3558
3559         i40e_put_lump(pf->irq_pile, 0, I40E_PILE_VALID_BIT-1);
3560         for (i = 0; i < pf->num_alloc_vsi; i++)
3561                 if (pf->vsi[i])
3562                         i40e_vsi_free_q_vectors(pf->vsi[i]);
3563         i40e_reset_interrupt_capability(pf);
3564 }
3565
3566 /**
3567  * i40e_napi_enable_all - Enable NAPI for all q_vectors in the VSI
3568  * @vsi: the VSI being configured
3569  **/
3570 static void i40e_napi_enable_all(struct i40e_vsi *vsi)
3571 {
3572         int q_idx;
3573
3574         if (!vsi->netdev)
3575                 return;
3576
3577         for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++)
3578                 napi_enable(&vsi->q_vectors[q_idx]->napi);
3579 }
3580
3581 /**
3582  * i40e_napi_disable_all - Disable NAPI for all q_vectors in the VSI
3583  * @vsi: the VSI being configured
3584  **/
3585 static void i40e_napi_disable_all(struct i40e_vsi *vsi)
3586 {
3587         int q_idx;
3588
3589         if (!vsi->netdev)
3590                 return;
3591
3592         for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++)
3593                 napi_disable(&vsi->q_vectors[q_idx]->napi);
3594 }
3595
3596 /**
3597  * i40e_vsi_close - Shut down a VSI
3598  * @vsi: the vsi to be quelled
3599  **/
3600 static void i40e_vsi_close(struct i40e_vsi *vsi)
3601 {
3602         if (!test_and_set_bit(__I40E_DOWN, &vsi->state))
3603                 i40e_down(vsi);
3604         i40e_vsi_free_irq(vsi);
3605         i40e_vsi_free_tx_resources(vsi);
3606         i40e_vsi_free_rx_resources(vsi);
3607 }
3608
3609 /**
3610  * i40e_quiesce_vsi - Pause a given VSI
3611  * @vsi: the VSI being paused
3612  **/
3613 static void i40e_quiesce_vsi(struct i40e_vsi *vsi)
3614 {
3615         if (test_bit(__I40E_DOWN, &vsi->state))
3616                 return;
3617
3618         set_bit(__I40E_NEEDS_RESTART, &vsi->state);
3619         if (vsi->netdev && netif_running(vsi->netdev)) {
3620                 vsi->netdev->netdev_ops->ndo_stop(vsi->netdev);
3621         } else {
3622                 i40e_vsi_close(vsi);
3623         }
3624 }
3625
3626 /**
3627  * i40e_unquiesce_vsi - Resume a given VSI
3628  * @vsi: the VSI being resumed
3629  **/
3630 static void i40e_unquiesce_vsi(struct i40e_vsi *vsi)
3631 {
3632         if (!test_bit(__I40E_NEEDS_RESTART, &vsi->state))
3633                 return;
3634
3635         clear_bit(__I40E_NEEDS_RESTART, &vsi->state);
3636         if (vsi->netdev && netif_running(vsi->netdev))
3637                 vsi->netdev->netdev_ops->ndo_open(vsi->netdev);
3638         else
3639                 i40e_vsi_open(vsi);   /* this clears the DOWN bit */
3640 }
3641
3642 /**
3643  * i40e_pf_quiesce_all_vsi - Pause all VSIs on a PF
3644  * @pf: the PF
3645  **/
3646 static void i40e_pf_quiesce_all_vsi(struct i40e_pf *pf)
3647 {
3648         int v;
3649
3650         for (v = 0; v < pf->num_alloc_vsi; v++) {
3651                 if (pf->vsi[v])
3652                         i40e_quiesce_vsi(pf->vsi[v]);
3653         }
3654 }
3655
3656 /**
3657  * i40e_pf_unquiesce_all_vsi - Resume all VSIs on a PF
3658  * @pf: the PF
3659  **/
3660 static void i40e_pf_unquiesce_all_vsi(struct i40e_pf *pf)
3661 {
3662         int v;
3663
3664         for (v = 0; v < pf->num_alloc_vsi; v++) {
3665                 if (pf->vsi[v])
3666                         i40e_unquiesce_vsi(pf->vsi[v]);
3667         }
3668 }
3669
3670 /**
3671  * i40e_dcb_get_num_tc -  Get the number of TCs from DCBx config
3672  * @dcbcfg: the corresponding DCBx configuration structure
3673  *
3674  * Return the number of TCs from given DCBx configuration
3675  **/
3676 static u8 i40e_dcb_get_num_tc(struct i40e_dcbx_config *dcbcfg)
3677 {
3678         u8 num_tc = 0;
3679         int i;
3680
3681         /* Scan the ETS Config Priority Table to find
3682          * traffic class enabled for a given priority
3683          * and use the traffic class index to get the
3684          * number of traffic classes enabled
3685          */
3686         for (i = 0; i < I40E_MAX_USER_PRIORITY; i++) {
3687                 if (dcbcfg->etscfg.prioritytable[i] > num_tc)
3688                         num_tc = dcbcfg->etscfg.prioritytable[i];
3689         }
3690
3691         /* Traffic class index starts from zero so
3692          * increment to return the actual count
3693          */
3694         return num_tc + 1;
3695 }
3696
3697 /**
3698  * i40e_dcb_get_enabled_tc - Get enabled traffic classes
3699  * @dcbcfg: the corresponding DCBx configuration structure
3700  *
3701  * Query the current DCB configuration and return the number of
3702  * traffic classes enabled from the given DCBX config
3703  **/
3704 static u8 i40e_dcb_get_enabled_tc(struct i40e_dcbx_config *dcbcfg)
3705 {
3706         u8 num_tc = i40e_dcb_get_num_tc(dcbcfg);
3707         u8 enabled_tc = 1;
3708         u8 i;
3709
3710         for (i = 0; i < num_tc; i++)
3711                 enabled_tc |= 1 << i;
3712
3713         return enabled_tc;
3714 }
3715
3716 /**
3717  * i40e_pf_get_num_tc - Get enabled traffic classes for PF
3718  * @pf: PF being queried
3719  *
3720  * Return number of traffic classes enabled for the given PF
3721  **/
3722 static u8 i40e_pf_get_num_tc(struct i40e_pf *pf)
3723 {
3724         struct i40e_hw *hw = &pf->hw;
3725         u8 i, enabled_tc;
3726         u8 num_tc = 0;
3727         struct i40e_dcbx_config *dcbcfg = &hw->local_dcbx_config;
3728
3729         /* If DCB is not enabled then always in single TC */
3730         if (!(pf->flags & I40E_FLAG_DCB_ENABLED))
3731                 return 1;
3732
3733         /* MFP mode return count of enabled TCs for this PF */
3734         if (pf->flags & I40E_FLAG_MFP_ENABLED) {
3735                 enabled_tc = pf->hw.func_caps.enabled_tcmap;
3736                 for (i = 0; i < I40E_MAX_TRAFFIC_CLASS; i++) {
3737                         if (enabled_tc & (1 << i))
3738                                 num_tc++;
3739                 }
3740                 return num_tc;
3741         }
3742
3743         /* SFP mode will be enabled for all TCs on port */
3744         return i40e_dcb_get_num_tc(dcbcfg);
3745 }
3746
3747 /**
3748  * i40e_pf_get_default_tc - Get bitmap for first enabled TC
3749  * @pf: PF being queried
3750  *
3751  * Return a bitmap for first enabled traffic class for this PF.
3752  **/
3753 static u8 i40e_pf_get_default_tc(struct i40e_pf *pf)
3754 {
3755         u8 enabled_tc = pf->hw.func_caps.enabled_tcmap;
3756         u8 i = 0;
3757
3758         if (!enabled_tc)
3759                 return 0x1; /* TC0 */
3760
3761         /* Find the first enabled TC */
3762         for (i = 0; i < I40E_MAX_TRAFFIC_CLASS; i++) {
3763                 if (enabled_tc & (1 << i))
3764                         break;
3765         }
3766
3767         return 1 << i;
3768 }
3769
3770 /**
3771  * i40e_pf_get_pf_tc_map - Get bitmap for enabled traffic classes
3772  * @pf: PF being queried
3773  *
3774  * Return a bitmap for enabled traffic classes for this PF.
3775  **/
3776 static u8 i40e_pf_get_tc_map(struct i40e_pf *pf)
3777 {
3778         /* If DCB is not enabled for this PF then just return default TC */
3779         if (!(pf->flags & I40E_FLAG_DCB_ENABLED))
3780                 return i40e_pf_get_default_tc(pf);
3781
3782         /* MFP mode will have enabled TCs set by FW */
3783         if (pf->flags & I40E_FLAG_MFP_ENABLED)
3784                 return pf->hw.func_caps.enabled_tcmap;
3785
3786         /* SFP mode we want PF to be enabled for all TCs */
3787         return i40e_dcb_get_enabled_tc(&pf->hw.local_dcbx_config);
3788 }
3789
3790 /**
3791  * i40e_vsi_get_bw_info - Query VSI BW Information
3792  * @vsi: the VSI being queried
3793  *
3794  * Returns 0 on success, negative value on failure
3795  **/
3796 static int i40e_vsi_get_bw_info(struct i40e_vsi *vsi)
3797 {
3798         struct i40e_aqc_query_vsi_ets_sla_config_resp bw_ets_config = {0};
3799         struct i40e_aqc_query_vsi_bw_config_resp bw_config = {0};
3800         struct i40e_pf *pf = vsi->back;
3801         struct i40e_hw *hw = &pf->hw;
3802         i40e_status aq_ret;
3803         u32 tc_bw_max;
3804         int i;
3805
3806         /* Get the VSI level BW configuration */
3807         aq_ret = i40e_aq_query_vsi_bw_config(hw, vsi->seid, &bw_config, NULL);
3808         if (aq_ret) {
3809                 dev_info(&pf->pdev->dev,
3810                          "couldn't get pf vsi bw config, err %d, aq_err %d\n",
3811                          aq_ret, pf->hw.aq.asq_last_status);
3812                 return -EINVAL;
3813         }
3814
3815         /* Get the VSI level BW configuration per TC */
3816         aq_ret = i40e_aq_query_vsi_ets_sla_config(hw, vsi->seid, &bw_ets_config,
3817                                                   NULL);
3818         if (aq_ret) {
3819                 dev_info(&pf->pdev->dev,
3820                          "couldn't get pf vsi ets bw config, err %d, aq_err %d\n",
3821                          aq_ret, pf->hw.aq.asq_last_status);
3822                 return -EINVAL;
3823         }
3824
3825         if (bw_config.tc_valid_bits != bw_ets_config.tc_valid_bits) {
3826                 dev_info(&pf->pdev->dev,
3827                          "Enabled TCs mismatch from querying VSI BW info 0x%08x 0x%08x\n",
3828                          bw_config.tc_valid_bits,
3829                          bw_ets_config.tc_valid_bits);
3830                 /* Still continuing */
3831         }
3832
3833         vsi->bw_limit = le16_to_cpu(bw_config.port_bw_limit);
3834         vsi->bw_max_quanta = bw_config.max_bw;
3835         tc_bw_max = le16_to_cpu(bw_ets_config.tc_bw_max[0]) |
3836                     (le16_to_cpu(bw_ets_config.tc_bw_max[1]) << 16);
3837         for (i = 0; i < I40E_MAX_TRAFFIC_CLASS; i++) {
3838                 vsi->bw_ets_share_credits[i] = bw_ets_config.share_credits[i];
3839                 vsi->bw_ets_limit_credits[i] =
3840                                         le16_to_cpu(bw_ets_config.credits[i]);
3841                 /* 3 bits out of 4 for each TC */
3842                 vsi->bw_ets_max_quanta[i] = (u8)((tc_bw_max >> (i*4)) & 0x7);
3843         }
3844
3845         return 0;
3846 }
3847
3848 /**
3849  * i40e_vsi_configure_bw_alloc - Configure VSI BW allocation per TC
3850  * @vsi: the VSI being configured
3851  * @enabled_tc: TC bitmap
3852  * @bw_credits: BW shared credits per TC
3853  *
3854  * Returns 0 on success, negative value on failure
3855  **/
3856 static int i40e_vsi_configure_bw_alloc(struct i40e_vsi *vsi, u8 enabled_tc,
3857                                        u8 *bw_share)
3858 {
3859         struct i40e_aqc_configure_vsi_tc_bw_data bw_data;
3860         i40e_status aq_ret;
3861         int i;
3862
3863         bw_data.tc_valid_bits = enabled_tc;
3864         for (i = 0; i < I40E_MAX_TRAFFIC_CLASS; i++)
3865                 bw_data.tc_bw_credits[i] = bw_share[i];
3866
3867         aq_ret = i40e_aq_config_vsi_tc_bw(&vsi->back->hw, vsi->seid, &bw_data,
3868                                           NULL);
3869         if (aq_ret) {
3870                 dev_info(&vsi->back->pdev->dev,
3871                          "AQ command Config VSI BW allocation per TC failed = %d\n",
3872                          vsi->back->hw.aq.asq_last_status);
3873                 return -EINVAL;
3874         }
3875
3876         for (i = 0; i < I40E_MAX_TRAFFIC_CLASS; i++)
3877                 vsi->info.qs_handle[i] = bw_data.qs_handles[i];
3878
3879         return 0;
3880 }
3881
3882 /**
3883  * i40e_vsi_config_netdev_tc - Setup the netdev TC configuration
3884  * @vsi: the VSI being configured
3885  * @enabled_tc: TC map to be enabled
3886  *
3887  **/
3888 static void i40e_vsi_config_netdev_tc(struct i40e_vsi *vsi, u8 enabled_tc)
3889 {
3890         struct net_device *netdev = vsi->netdev;
3891         struct i40e_pf *pf = vsi->back;
3892         struct i40e_hw *hw = &pf->hw;
3893         u8 netdev_tc = 0;
3894         int i;
3895         struct i40e_dcbx_config *dcbcfg = &hw->local_dcbx_config;
3896
3897         if (!netdev)
3898                 return;
3899
3900         if (!enabled_tc) {
3901                 netdev_reset_tc(netdev);
3902                 return;
3903         }
3904
3905         /* Set up actual enabled TCs on the VSI */
3906         if (netdev_set_num_tc(netdev, vsi->tc_config.numtc))
3907                 return;
3908
3909         /* set per TC queues for the VSI */
3910         for (i = 0; i < I40E_MAX_TRAFFIC_CLASS; i++) {
3911                 /* Only set TC queues for enabled tcs
3912                  *
3913                  * e.g. For a VSI that has TC0 and TC3 enabled the
3914                  * enabled_tc bitmap would be 0x00001001; the driver
3915                  * will set the numtc for netdev as 2 that will be
3916                  * referenced by the netdev layer as TC 0 and 1.
3917                  */
3918                 if (vsi->tc_config.enabled_tc & (1 << i))
3919                         netdev_set_tc_queue(netdev,
3920                                         vsi->tc_config.tc_info[i].netdev_tc,
3921                                         vsi->tc_config.tc_info[i].qcount,
3922                                         vsi->tc_config.tc_info[i].qoffset);
3923         }
3924
3925         /* Assign UP2TC map for the VSI */
3926         for (i = 0; i < I40E_MAX_USER_PRIORITY; i++) {
3927                 /* Get the actual TC# for the UP */
3928                 u8 ets_tc = dcbcfg->etscfg.prioritytable[i];
3929                 /* Get the mapped netdev TC# for the UP */
3930                 netdev_tc =  vsi->tc_config.tc_info[ets_tc].netdev_tc;
3931                 netdev_set_prio_tc_map(netdev, i, netdev_tc);
3932         }
3933 }
3934
3935 /**
3936  * i40e_vsi_update_queue_map - Update our copy of VSi info with new queue map
3937  * @vsi: the VSI being configured
3938  * @ctxt: the ctxt buffer returned from AQ VSI update param command
3939  **/
3940 static void i40e_vsi_update_queue_map(struct i40e_vsi *vsi,
3941                                       struct i40e_vsi_context *ctxt)
3942 {
3943         /* copy just the sections touched not the entire info
3944          * since not all sections are valid as returned by
3945          * update vsi params
3946          */
3947         vsi->info.mapping_flags = ctxt->info.mapping_flags;
3948         memcpy(&vsi->info.queue_mapping,
3949                &ctxt->info.queue_mapping, sizeof(vsi->info.queue_mapping));
3950         memcpy(&vsi->info.tc_mapping, ctxt->info.tc_mapping,
3951                sizeof(vsi->info.tc_mapping));
3952 }
3953
3954 /**
3955  * i40e_vsi_config_tc - Configure VSI Tx Scheduler for given TC map
3956  * @vsi: VSI to be configured
3957  * @enabled_tc: TC bitmap
3958  *
3959  * This configures a particular VSI for TCs that are mapped to the
3960  * given TC bitmap. It uses default bandwidth share for TCs across
3961  * VSIs to configure TC for a particular VSI.
3962  *
3963  * NOTE:
3964  * It is expected that the VSI queues have been quisced before calling
3965  * this function.
3966  **/
3967 static int i40e_vsi_config_tc(struct i40e_vsi *vsi, u8 enabled_tc)
3968 {
3969         u8 bw_share[I40E_MAX_TRAFFIC_CLASS] = {0};
3970         struct i40e_vsi_context ctxt;
3971         int ret = 0;
3972         int i;
3973
3974         /* Check if enabled_tc is same as existing or new TCs */
3975         if (vsi->tc_config.enabled_tc == enabled_tc)
3976                 return ret;
3977
3978         /* Enable ETS TCs with equal BW Share for now across all VSIs */
3979         for (i = 0; i < I40E_MAX_TRAFFIC_CLASS; i++) {
3980                 if (enabled_tc & (1 << i))
3981                         bw_share[i] = 1;
3982         }
3983
3984         ret = i40e_vsi_configure_bw_alloc(vsi, enabled_tc, bw_share);
3985         if (ret) {
3986                 dev_info(&vsi->back->pdev->dev,
3987                          "Failed configuring TC map %d for VSI %d\n",
3988                          enabled_tc, vsi->seid);
3989                 goto out;
3990         }
3991
3992         /* Update Queue Pairs Mapping for currently enabled UPs */
3993         ctxt.seid = vsi->seid;
3994         ctxt.pf_num = vsi->back->hw.pf_id;
3995         ctxt.vf_num = 0;
3996         ctxt.uplink_seid = vsi->uplink_seid;
3997         memcpy(&ctxt.info, &vsi->info, sizeof(vsi->info));
3998         i40e_vsi_setup_queue_map(vsi, &ctxt, enabled_tc, false);
3999
4000         /* Update the VSI after updating the VSI queue-mapping information */
4001         ret = i40e_aq_update_vsi_params(&vsi->back->hw, &ctxt, NULL);
4002         if (ret) {
4003                 dev_info(&vsi->back->pdev->dev,
4004                          "update vsi failed, aq_err=%d\n",
4005                          vsi->back->hw.aq.asq_last_status);
4006                 goto out;
4007         }
4008         /* update the local VSI info with updated queue map */
4009         i40e_vsi_update_queue_map(vsi, &ctxt);
4010         vsi->info.valid_sections = 0;
4011
4012         /* Update current VSI BW information */
4013         ret = i40e_vsi_get_bw_info(vsi);
4014         if (ret) {
4015                 dev_info(&vsi->back->pdev->dev,
4016                          "Failed updating vsi bw info, aq_err=%d\n",
4017                          vsi->back->hw.aq.asq_last_status);
4018                 goto out;
4019         }
4020
4021         /* Update the netdev TC setup */
4022         i40e_vsi_config_netdev_tc(vsi, enabled_tc);
4023 out:
4024         return ret;
4025 }
4026
4027 /**
4028  * i40e_veb_config_tc - Configure TCs for given VEB
4029  * @veb: given VEB
4030  * @enabled_tc: TC bitmap
4031  *
4032  * Configures given TC bitmap for VEB (switching) element
4033  **/
4034 int i40e_veb_config_tc(struct i40e_veb *veb, u8 enabled_tc)
4035 {
4036         struct i40e_aqc_configure_switching_comp_bw_config_data bw_data = {0};
4037         struct i40e_pf *pf = veb->pf;
4038         int ret = 0;
4039         int i;
4040
4041         /* No TCs or already enabled TCs just return */
4042         if (!enabled_tc || veb->enabled_tc == enabled_tc)
4043                 return ret;
4044
4045         bw_data.tc_valid_bits = enabled_tc;
4046         /* bw_data.absolute_credits is not set (relative) */
4047
4048         /* Enable ETS TCs with equal BW Share for now */
4049         for (i = 0; i < I40E_MAX_TRAFFIC_CLASS; i++) {
4050                 if (enabled_tc & (1 << i))
4051                         bw_data.tc_bw_share_credits[i] = 1;
4052         }
4053
4054         ret = i40e_aq_config_switch_comp_bw_config(&pf->hw, veb->seid,
4055                                                    &bw_data, NULL);
4056         if (ret) {
4057                 dev_info(&pf->pdev->dev,
4058                          "veb bw config failed, aq_err=%d\n",
4059                          pf->hw.aq.asq_last_status);
4060                 goto out;
4061         }
4062
4063         /* Update the BW information */
4064         ret = i40e_veb_get_bw_info(veb);
4065         if (ret) {
4066                 dev_info(&pf->pdev->dev,
4067                          "Failed getting veb bw config, aq_err=%d\n",
4068                          pf->hw.aq.asq_last_status);
4069         }
4070
4071 out:
4072         return ret;
4073 }
4074
4075 #ifdef CONFIG_I40E_DCB
4076 /**
4077  * i40e_dcb_reconfigure - Reconfigure all VEBs and VSIs
4078  * @pf: PF struct
4079  *
4080  * Reconfigure VEB/VSIs on a given PF; it is assumed that
4081  * the caller would've quiesce all the VSIs before calling
4082  * this function
4083  **/
4084 static void i40e_dcb_reconfigure(struct i40e_pf *pf)
4085 {
4086         u8 tc_map = 0;
4087         int ret;
4088         u8 v;
4089
4090         /* Enable the TCs available on PF to all VEBs */
4091         tc_map = i40e_pf_get_tc_map(pf);
4092         for (v = 0; v < I40E_MAX_VEB; v++) {
4093                 if (!pf->veb[v])
4094                         continue;
4095                 ret = i40e_veb_config_tc(pf->veb[v], tc_map);
4096                 if (ret) {
4097                         dev_info(&pf->pdev->dev,
4098                                  "Failed configuring TC for VEB seid=%d\n",
4099                                  pf->veb[v]->seid);
4100                         /* Will try to configure as many components */
4101                 }
4102         }
4103
4104         /* Update each VSI */
4105         for (v = 0; v < pf->num_alloc_vsi; v++) {
4106                 if (!pf->vsi[v])
4107                         continue;
4108
4109                 /* - Enable all TCs for the LAN VSI
4110                  * - For all others keep them at TC0 for now
4111                  */
4112                 if (v == pf->lan_vsi)
4113                         tc_map = i40e_pf_get_tc_map(pf);
4114                 else
4115                         tc_map = i40e_pf_get_default_tc(pf);
4116
4117                 ret = i40e_vsi_config_tc(pf->vsi[v], tc_map);
4118                 if (ret) {
4119                         dev_info(&pf->pdev->dev,
4120                                  "Failed configuring TC for VSI seid=%d\n",
4121                                  pf->vsi[v]->seid);
4122                         /* Will try to configure as many components */
4123                 } else {
4124                         /* Re-configure VSI vectors based on updated TC map */
4125                         i40e_vsi_map_rings_to_vectors(pf->vsi[v]);
4126                         if (pf->vsi[v]->netdev)
4127                                 i40e_dcbnl_set_all(pf->vsi[v]);
4128                 }
4129         }
4130 }
4131
4132 /**
4133  * i40e_init_pf_dcb - Initialize DCB configuration
4134  * @pf: PF being configured
4135  *
4136  * Query the current DCB configuration and cache it
4137  * in the hardware structure
4138  **/
4139 static int i40e_init_pf_dcb(struct i40e_pf *pf)
4140 {
4141         struct i40e_hw *hw = &pf->hw;
4142         int err = 0;
4143
4144         if (pf->hw.func_caps.npar_enable)
4145                 goto out;
4146
4147         /* Get the initial DCB configuration */
4148         err = i40e_init_dcb(hw);
4149         if (!err) {
4150                 /* Device/Function is not DCBX capable */
4151                 if ((!hw->func_caps.dcb) ||
4152                     (hw->dcbx_status == I40E_DCBX_STATUS_DISABLED)) {
4153                         dev_info(&pf->pdev->dev,
4154                                  "DCBX offload is not supported or is disabled for this PF.\n");
4155
4156                         if (pf->flags & I40E_FLAG_MFP_ENABLED)
4157                                 goto out;
4158
4159                 } else {
4160                         /* When status is not DISABLED then DCBX in FW */
4161                         pf->dcbx_cap = DCB_CAP_DCBX_LLD_MANAGED |
4162                                        DCB_CAP_DCBX_VER_IEEE;
4163
4164                         pf->flags |= I40E_FLAG_DCB_CAPABLE;
4165                         /* Enable DCB tagging only when more than one TC */
4166                         if (i40e_dcb_get_num_tc(&hw->local_dcbx_config) > 1)
4167                                 pf->flags |= I40E_FLAG_DCB_ENABLED;
4168                 }
4169         } else {
4170                 dev_info(&pf->pdev->dev, "AQ Querying DCB configuration failed: %d\n",
4171                          pf->hw.aq.asq_last_status);
4172         }
4173
4174 out:
4175         return err;
4176 }
4177 #endif /* CONFIG_I40E_DCB */
4178 #define SPEED_SIZE 14
4179 #define FC_SIZE 8
4180 /**
4181  * i40e_print_link_message - print link up or down
4182  * @vsi: the VSI for which link needs a message
4183  */
4184 static void i40e_print_link_message(struct i40e_vsi *vsi, bool isup)
4185 {
4186         char speed[SPEED_SIZE] = "Unknown";
4187         char fc[FC_SIZE] = "RX/TX";
4188
4189         if (!isup) {
4190                 netdev_info(vsi->netdev, "NIC Link is Down\n");
4191                 return;
4192         }
4193
4194         switch (vsi->back->hw.phy.link_info.link_speed) {
4195         case I40E_LINK_SPEED_40GB:
4196                 strncpy(speed, "40 Gbps", SPEED_SIZE);
4197                 break;
4198         case I40E_LINK_SPEED_10GB:
4199                 strncpy(speed, "10 Gbps", SPEED_SIZE);
4200                 break;
4201         case I40E_LINK_SPEED_1GB:
4202                 strncpy(speed, "1000 Mbps", SPEED_SIZE);
4203                 break;
4204         default:
4205                 break;
4206         }
4207
4208         switch (vsi->back->hw.fc.current_mode) {
4209         case I40E_FC_FULL:
4210                 strncpy(fc, "RX/TX", FC_SIZE);
4211                 break;
4212         case I40E_FC_TX_PAUSE:
4213                 strncpy(fc, "TX", FC_SIZE);
4214                 break;
4215         case I40E_FC_RX_PAUSE:
4216                 strncpy(fc, "RX", FC_SIZE);
4217                 break;
4218         default:
4219                 strncpy(fc, "None", FC_SIZE);
4220                 break;
4221         }
4222
4223         netdev_info(vsi->netdev, "NIC Link is Up %s Full Duplex, Flow Control: %s\n",
4224                     speed, fc);
4225 }
4226
4227 /**
4228  * i40e_up_complete - Finish the last steps of bringing up a connection
4229  * @vsi: the VSI being configured
4230  **/
4231 static int i40e_up_complete(struct i40e_vsi *vsi)
4232 {
4233         struct i40e_pf *pf = vsi->back;
4234         int err;
4235
4236         if (pf->flags & I40E_FLAG_MSIX_ENABLED)
4237                 i40e_vsi_configure_msix(vsi);
4238         else
4239                 i40e_configure_msi_and_legacy(vsi);
4240
4241         /* start rings */
4242         err = i40e_vsi_control_rings(vsi, true);
4243         if (err)
4244                 return err;
4245
4246         clear_bit(__I40E_DOWN, &vsi->state);
4247         i40e_napi_enable_all(vsi);
4248         i40e_vsi_enable_irq(vsi);
4249
4250         if ((pf->hw.phy.link_info.link_info & I40E_AQ_LINK_UP) &&
4251             (vsi->netdev)) {
4252                 i40e_print_link_message(vsi, true);
4253                 netif_tx_start_all_queues(vsi->netdev);
4254                 netif_carrier_on(vsi->netdev);
4255         } else if (vsi->netdev) {
4256                 i40e_print_link_message(vsi, false);
4257         }
4258
4259         /* replay FDIR SB filters */
4260         if (vsi->type == I40E_VSI_FDIR)
4261                 i40e_fdir_filter_restore(vsi);
4262         i40e_service_event_schedule(pf);
4263
4264         return 0;
4265 }
4266
4267 /**
4268  * i40e_vsi_reinit_locked - Reset the VSI
4269  * @vsi: the VSI being configured
4270  *
4271  * Rebuild the ring structs after some configuration
4272  * has changed, e.g. MTU size.
4273  **/
4274 static void i40e_vsi_reinit_locked(struct i40e_vsi *vsi)
4275 {
4276         struct i40e_pf *pf = vsi->back;
4277
4278         WARN_ON(in_interrupt());
4279         while (test_and_set_bit(__I40E_CONFIG_BUSY, &pf->state))
4280                 usleep_range(1000, 2000);
4281         i40e_down(vsi);
4282
4283         /* Give a VF some time to respond to the reset.  The
4284          * two second wait is based upon the watchdog cycle in
4285          * the VF driver.
4286          */
4287         if (vsi->type == I40E_VSI_SRIOV)
4288                 msleep(2000);
4289         i40e_up(vsi);
4290         clear_bit(__I40E_CONFIG_BUSY, &pf->state);
4291 }
4292
4293 /**
4294  * i40e_up - Bring the connection back up after being down
4295  * @vsi: the VSI being configured
4296  **/
4297 int i40e_up(struct i40e_vsi *vsi)
4298 {
4299         int err;
4300
4301         err = i40e_vsi_configure(vsi);
4302         if (!err)
4303                 err = i40e_up_complete(vsi);
4304
4305         return err;
4306 }
4307
4308 /**
4309  * i40e_down - Shutdown the connection processing
4310  * @vsi: the VSI being stopped
4311  **/
4312 void i40e_down(struct i40e_vsi *vsi)
4313 {
4314         int i;
4315
4316         /* It is assumed that the caller of this function
4317          * sets the vsi->state __I40E_DOWN bit.
4318          */
4319         if (vsi->netdev) {
4320                 netif_carrier_off(vsi->netdev);
4321                 netif_tx_disable(vsi->netdev);
4322         }
4323         i40e_vsi_disable_irq(vsi);
4324         i40e_vsi_control_rings(vsi, false);
4325         i40e_napi_disable_all(vsi);
4326
4327         for (i = 0; i < vsi->num_queue_pairs; i++) {
4328                 i40e_clean_tx_ring(vsi->tx_rings[i]);
4329                 i40e_clean_rx_ring(vsi->rx_rings[i]);
4330         }
4331 }
4332
4333 /**
4334  * i40e_setup_tc - configure multiple traffic classes
4335  * @netdev: net device to configure
4336  * @tc: number of traffic classes to enable
4337  **/
4338 static int i40e_setup_tc(struct net_device *netdev, u8 tc)
4339 {
4340         struct i40e_netdev_priv *np = netdev_priv(netdev);
4341         struct i40e_vsi *vsi = np->vsi;
4342         struct i40e_pf *pf = vsi->back;
4343         u8 enabled_tc = 0;
4344         int ret = -EINVAL;
4345         int i;
4346
4347         /* Check if DCB enabled to continue */
4348         if (!(pf->flags & I40E_FLAG_DCB_ENABLED)) {
4349                 netdev_info(netdev, "DCB is not enabled for adapter\n");
4350                 goto exit;
4351         }
4352
4353         /* Check if MFP enabled */
4354         if (pf->flags & I40E_FLAG_MFP_ENABLED) {
4355                 netdev_info(netdev, "Configuring TC not supported in MFP mode\n");
4356                 goto exit;
4357         }
4358
4359         /* Check whether tc count is within enabled limit */
4360         if (tc > i40e_pf_get_num_tc(pf)) {
4361                 netdev_info(netdev, "TC count greater than enabled on link for adapter\n");
4362                 goto exit;
4363         }
4364
4365         /* Generate TC map for number of tc requested */
4366         for (i = 0; i < tc; i++)
4367                 enabled_tc |= (1 << i);
4368
4369         /* Requesting same TC configuration as already enabled */
4370         if (enabled_tc == vsi->tc_config.enabled_tc)
4371                 return 0;
4372
4373         /* Quiesce VSI queues */
4374         i40e_quiesce_vsi(vsi);
4375
4376         /* Configure VSI for enabled TCs */
4377         ret = i40e_vsi_config_tc(vsi, enabled_tc);
4378         if (ret) {
4379                 netdev_info(netdev, "Failed configuring TC for VSI seid=%d\n",
4380                             vsi->seid);
4381                 goto exit;
4382         }
4383
4384         /* Unquiesce VSI */
4385         i40e_unquiesce_vsi(vsi);
4386
4387 exit:
4388         return ret;
4389 }
4390
4391 /**
4392  * i40e_open - Called when a network interface is made active
4393  * @netdev: network interface device structure
4394  *
4395  * The open entry point is called when a network interface is made
4396  * active by the system (IFF_UP).  At this point all resources needed
4397  * for transmit and receive operations are allocated, the interrupt
4398  * handler is registered with the OS, the netdev watchdog subtask is
4399  * enabled, and the stack is notified that the interface is ready.
4400  *
4401  * Returns 0 on success, negative value on failure
4402  **/
4403 static int i40e_open(struct net_device *netdev)
4404 {
4405         struct i40e_netdev_priv *np = netdev_priv(netdev);
4406         struct i40e_vsi *vsi = np->vsi;
4407         struct i40e_pf *pf = vsi->back;
4408         int err;
4409
4410         /* disallow open during test or if eeprom is broken */
4411         if (test_bit(__I40E_TESTING, &pf->state) ||
4412             test_bit(__I40E_BAD_EEPROM, &pf->state))
4413                 return -EBUSY;
4414
4415         netif_carrier_off(netdev);
4416
4417         err = i40e_vsi_open(vsi);
4418         if (err)
4419                 return err;
4420
4421         /* configure global TSO hardware offload settings */
4422         wr32(&pf->hw, I40E_GLLAN_TSOMSK_F, be32_to_cpu(TCP_FLAG_PSH |
4423                                                        TCP_FLAG_FIN) >> 16);
4424         wr32(&pf->hw, I40E_GLLAN_TSOMSK_M, be32_to_cpu(TCP_FLAG_PSH |
4425                                                        TCP_FLAG_FIN |
4426                                                        TCP_FLAG_CWR) >> 16);
4427         wr32(&pf->hw, I40E_GLLAN_TSOMSK_L, be32_to_cpu(TCP_FLAG_CWR) >> 16);
4428
4429 #ifdef CONFIG_I40E_VXLAN
4430         vxlan_get_rx_port(netdev);
4431 #endif
4432
4433         return 0;
4434 }
4435
4436 /**
4437  * i40e_vsi_open -
4438  * @vsi: the VSI to open
4439  *
4440  * Finish initialization of the VSI.
4441  *
4442  * Returns 0 on success, negative value on failure
4443  **/
4444 int i40e_vsi_open(struct i40e_vsi *vsi)
4445 {
4446         struct i40e_pf *pf = vsi->back;
4447         char int_name[IFNAMSIZ];
4448         int err;
4449
4450         /* allocate descriptors */
4451         err = i40e_vsi_setup_tx_resources(vsi);
4452         if (err)
4453                 goto err_setup_tx;
4454         err = i40e_vsi_setup_rx_resources(vsi);
4455         if (err)
4456                 goto err_setup_rx;
4457
4458         err = i40e_vsi_configure(vsi);
4459         if (err)
4460                 goto err_setup_rx;
4461
4462         if (vsi->netdev) {
4463                 snprintf(int_name, sizeof(int_name) - 1, "%s-%s",
4464                          dev_driver_string(&pf->pdev->dev), vsi->netdev->name);
4465                 err = i40e_vsi_request_irq(vsi, int_name);
4466                 if (err)
4467                         goto err_setup_rx;
4468
4469                 /* Notify the stack of the actual queue counts. */
4470                 err = netif_set_real_num_tx_queues(vsi->netdev,
4471                                                    vsi->num_queue_pairs);
4472                 if (err)
4473                         goto err_set_queues;
4474
4475                 err = netif_set_real_num_rx_queues(vsi->netdev,
4476                                                    vsi->num_queue_pairs);
4477                 if (err)
4478                         goto err_set_queues;
4479
4480         } else if (vsi->type == I40E_VSI_FDIR) {
4481                 snprintf(int_name, sizeof(int_name) - 1, "%s-fdir",
4482                          dev_driver_string(&pf->pdev->dev));
4483                 err = i40e_vsi_request_irq(vsi, int_name);
4484         } else {
4485                 err = -EINVAL;
4486                 goto err_setup_rx;
4487         }
4488
4489         err = i40e_up_complete(vsi);
4490         if (err)
4491                 goto err_up_complete;
4492
4493         return 0;
4494
4495 err_up_complete:
4496         i40e_down(vsi);
4497 err_set_queues:
4498         i40e_vsi_free_irq(vsi);
4499 err_setup_rx:
4500         i40e_vsi_free_rx_resources(vsi);
4501 err_setup_tx:
4502         i40e_vsi_free_tx_resources(vsi);
4503         if (vsi == pf->vsi[pf->lan_vsi])
4504                 i40e_do_reset(pf, (1 << __I40E_PF_RESET_REQUESTED));
4505
4506         return err;
4507 }
4508
4509 /**
4510  * i40e_fdir_filter_exit - Cleans up the Flow Director accounting
4511  * @pf: Pointer to pf
4512  *
4513  * This function destroys the hlist where all the Flow Director
4514  * filters were saved.
4515  **/
4516 static void i40e_fdir_filter_exit(struct i40e_pf *pf)
4517 {
4518         struct i40e_fdir_filter *filter;
4519         struct hlist_node *node2;
4520
4521         hlist_for_each_entry_safe(filter, node2,
4522                                   &pf->fdir_filter_list, fdir_node) {
4523                 hlist_del(&filter->fdir_node);
4524                 kfree(filter);
4525         }
4526         pf->fdir_pf_active_filters = 0;
4527 }
4528
4529 /**
4530  * i40e_close - Disables a network interface
4531  * @netdev: network interface device structure
4532  *
4533  * The close entry point is called when an interface is de-activated
4534  * by the OS.  The hardware is still under the driver's control, but
4535  * this netdev interface is disabled.
4536  *
4537  * Returns 0, this is not allowed to fail
4538  **/
4539 static int i40e_close(struct net_device *netdev)
4540 {
4541         struct i40e_netdev_priv *np = netdev_priv(netdev);
4542         struct i40e_vsi *vsi = np->vsi;
4543
4544         i40e_vsi_close(vsi);
4545
4546         return 0;
4547 }
4548
4549 /**
4550  * i40e_do_reset - Start a PF or Core Reset sequence
4551  * @pf: board private structure
4552  * @reset_flags: which reset is requested
4553  *
4554  * The essential difference in resets is that the PF Reset
4555  * doesn't clear the packet buffers, doesn't reset the PE
4556  * firmware, and doesn't bother the other PFs on the chip.
4557  **/
4558 void i40e_do_reset(struct i40e_pf *pf, u32 reset_flags)
4559 {
4560         u32 val;
4561
4562         WARN_ON(in_interrupt());
4563
4564         if (i40e_check_asq_alive(&pf->hw))
4565                 i40e_vc_notify_reset(pf);
4566
4567         /* do the biggest reset indicated */
4568         if (reset_flags & (1 << __I40E_GLOBAL_RESET_REQUESTED)) {
4569
4570                 /* Request a Global Reset
4571                  *
4572                  * This will start the chip's countdown to the actual full
4573                  * chip reset event, and a warning interrupt to be sent
4574                  * to all PFs, including the requestor.  Our handler
4575                  * for the warning interrupt will deal with the shutdown
4576                  * and recovery of the switch setup.
4577                  */
4578                 dev_dbg(&pf->pdev->dev, "GlobalR requested\n");
4579                 val = rd32(&pf->hw, I40E_GLGEN_RTRIG);
4580                 val |= I40E_GLGEN_RTRIG_GLOBR_MASK;
4581                 wr32(&pf->hw, I40E_GLGEN_RTRIG, val);
4582
4583         } else if (reset_flags & (1 << __I40E_CORE_RESET_REQUESTED)) {
4584
4585                 /* Request a Core Reset
4586                  *
4587                  * Same as Global Reset, except does *not* include the MAC/PHY
4588                  */
4589                 dev_dbg(&pf->pdev->dev, "CoreR requested\n");
4590                 val = rd32(&pf->hw, I40E_GLGEN_RTRIG);
4591                 val |= I40E_GLGEN_RTRIG_CORER_MASK;
4592                 wr32(&pf->hw, I40E_GLGEN_RTRIG, val);
4593                 i40e_flush(&pf->hw);
4594
4595         } else if (reset_flags & (1 << __I40E_EMP_RESET_REQUESTED)) {
4596
4597                 /* Request a Firmware Reset
4598                  *
4599                  * Same as Global reset, plus restarting the
4600                  * embedded firmware engine.
4601                  */
4602                 /* enable EMP Reset */
4603                 val = rd32(&pf->hw, I40E_GLGEN_RSTENA_EMP);
4604                 val |= I40E_GLGEN_RSTENA_EMP_EMP_RST_ENA_MASK;
4605                 wr32(&pf->hw, I40E_GLGEN_RSTENA_EMP, val);
4606
4607                 /* force the reset */
4608                 val = rd32(&pf->hw, I40E_GLGEN_RTRIG);
4609                 val |= I40E_GLGEN_RTRIG_EMPFWR_MASK;
4610                 wr32(&pf->hw, I40E_GLGEN_RTRIG, val);
4611                 i40e_flush(&pf->hw);
4612
4613         } else if (reset_flags & (1 << __I40E_PF_RESET_REQUESTED)) {
4614
4615                 /* Request a PF Reset
4616                  *
4617                  * Resets only the PF-specific registers
4618                  *
4619                  * This goes directly to the tear-down and rebuild of
4620                  * the switch, since we need to do all the recovery as
4621                  * for the Core Reset.
4622                  */
4623                 dev_dbg(&pf->pdev->dev, "PFR requested\n");
4624                 i40e_handle_reset_warning(pf);
4625
4626         } else if (reset_flags & (1 << __I40E_REINIT_REQUESTED)) {
4627                 int v;
4628
4629                 /* Find the VSI(s) that requested a re-init */
4630                 dev_info(&pf->pdev->dev,
4631                          "VSI reinit requested\n");
4632                 for (v = 0; v < pf->num_alloc_vsi; v++) {
4633                         struct i40e_vsi *vsi = pf->vsi[v];
4634                         if (vsi != NULL &&
4635                             test_bit(__I40E_REINIT_REQUESTED, &vsi->state)) {
4636                                 i40e_vsi_reinit_locked(pf->vsi[v]);
4637                                 clear_bit(__I40E_REINIT_REQUESTED, &vsi->state);
4638                         }
4639                 }
4640
4641                 /* no further action needed, so return now */
4642                 return;
4643         } else {
4644                 dev_info(&pf->pdev->dev,
4645                          "bad reset request 0x%08x\n", reset_flags);
4646                 return;
4647         }
4648 }
4649
4650 #ifdef CONFIG_I40E_DCB
4651 /**
4652  * i40e_dcb_need_reconfig - Check if DCB needs reconfig
4653  * @pf: board private structure
4654  * @old_cfg: current DCB config
4655  * @new_cfg: new DCB config
4656  **/
4657 bool i40e_dcb_need_reconfig(struct i40e_pf *pf,
4658                             struct i40e_dcbx_config *old_cfg,
4659                             struct i40e_dcbx_config *new_cfg)
4660 {
4661         bool need_reconfig = false;
4662
4663         /* Check if ETS configuration has changed */
4664         if (memcmp(&new_cfg->etscfg,
4665                    &old_cfg->etscfg,
4666                    sizeof(new_cfg->etscfg))) {
4667                 /* If Priority Table has changed reconfig is needed */
4668                 if (memcmp(&new_cfg->etscfg.prioritytable,
4669                            &old_cfg->etscfg.prioritytable,
4670                            sizeof(new_cfg->etscfg.prioritytable))) {
4671                         need_reconfig = true;
4672                         dev_dbg(&pf->pdev->dev, "ETS UP2TC changed.\n");
4673                 }
4674
4675                 if (memcmp(&new_cfg->etscfg.tcbwtable,
4676                            &old_cfg->etscfg.tcbwtable,
4677                            sizeof(new_cfg->etscfg.tcbwtable)))
4678                         dev_dbg(&pf->pdev->dev, "ETS TC BW Table changed.\n");
4679
4680                 if (memcmp(&new_cfg->etscfg.tsatable,
4681                            &old_cfg->etscfg.tsatable,
4682                            sizeof(new_cfg->etscfg.tsatable)))
4683                         dev_dbg(&pf->pdev->dev, "ETS TSA Table changed.\n");
4684         }
4685
4686         /* Check if PFC configuration has changed */
4687         if (memcmp(&new_cfg->pfc,
4688                    &old_cfg->pfc,
4689                    sizeof(new_cfg->pfc))) {
4690                 need_reconfig = true;
4691                 dev_dbg(&pf->pdev->dev, "PFC config change detected.\n");
4692         }
4693
4694         /* Check if APP Table has changed */
4695         if (memcmp(&new_cfg->app,
4696                    &old_cfg->app,
4697                    sizeof(new_cfg->app))) {
4698                 need_reconfig = true;
4699                 dev_dbg(&pf->pdev->dev, "APP Table change detected.\n");
4700         }
4701
4702         return need_reconfig;
4703 }
4704
4705 /**
4706  * i40e_handle_lldp_event - Handle LLDP Change MIB event
4707  * @pf: board private structure
4708  * @e: event info posted on ARQ
4709  **/
4710 static int i40e_handle_lldp_event(struct i40e_pf *pf,
4711                                   struct i40e_arq_event_info *e)
4712 {
4713         struct i40e_aqc_lldp_get_mib *mib =
4714                 (struct i40e_aqc_lldp_get_mib *)&e->desc.params.raw;
4715         struct i40e_hw *hw = &pf->hw;
4716         struct i40e_dcbx_config *dcbx_cfg = &hw->local_dcbx_config;
4717         struct i40e_dcbx_config tmp_dcbx_cfg;
4718         bool need_reconfig = false;
4719         int ret = 0;
4720         u8 type;
4721
4722         /* Not DCB capable or capability disabled */
4723         if (!(pf->flags & I40E_FLAG_DCB_CAPABLE))
4724                 return ret;
4725
4726         /* Ignore if event is not for Nearest Bridge */
4727         type = ((mib->type >> I40E_AQ_LLDP_BRIDGE_TYPE_SHIFT)
4728                 & I40E_AQ_LLDP_BRIDGE_TYPE_MASK);
4729         if (type != I40E_AQ_LLDP_BRIDGE_TYPE_NEAREST_BRIDGE)
4730                 return ret;
4731
4732         /* Check MIB Type and return if event for Remote MIB update */
4733         type = mib->type & I40E_AQ_LLDP_MIB_TYPE_MASK;
4734         if (type == I40E_AQ_LLDP_MIB_REMOTE) {
4735                 /* Update the remote cached instance and return */
4736                 ret = i40e_aq_get_dcb_config(hw, I40E_AQ_LLDP_MIB_REMOTE,
4737                                 I40E_AQ_LLDP_BRIDGE_TYPE_NEAREST_BRIDGE,
4738                                 &hw->remote_dcbx_config);
4739                 goto exit;
4740         }
4741
4742         /* Convert/store the DCBX data from LLDPDU temporarily */
4743         memset(&tmp_dcbx_cfg, 0, sizeof(tmp_dcbx_cfg));
4744         ret = i40e_lldp_to_dcb_config(e->msg_buf, &tmp_dcbx_cfg);
4745         if (ret) {
4746                 /* Error in LLDPDU parsing return */
4747                 dev_info(&pf->pdev->dev, "Failed parsing LLDPDU from event buffer\n");
4748                 goto exit;
4749         }
4750
4751         /* No change detected in DCBX configs */
4752         if (!memcmp(&tmp_dcbx_cfg, dcbx_cfg, sizeof(tmp_dcbx_cfg))) {
4753                 dev_dbg(&pf->pdev->dev, "No change detected in DCBX configuration.\n");
4754                 goto exit;
4755         }
4756
4757         need_reconfig = i40e_dcb_need_reconfig(pf, dcbx_cfg, &tmp_dcbx_cfg);
4758
4759         i40e_dcbnl_flush_apps(pf, &tmp_dcbx_cfg);
4760
4761         /* Overwrite the new configuration */
4762         *dcbx_cfg = tmp_dcbx_cfg;
4763
4764         if (!need_reconfig)
4765                 goto exit;
4766
4767         /* Enable DCB tagging only when more than one TC */
4768         if (i40e_dcb_get_num_tc(dcbx_cfg) > 1)
4769                 pf->flags |= I40E_FLAG_DCB_ENABLED;
4770         else
4771                 pf->flags &= ~I40E_FLAG_DCB_ENABLED;
4772
4773         /* Reconfiguration needed quiesce all VSIs */
4774         i40e_pf_quiesce_all_vsi(pf);
4775
4776         /* Changes in configuration update VEB/VSI */
4777         i40e_dcb_reconfigure(pf);
4778
4779         i40e_pf_unquiesce_all_vsi(pf);
4780 exit:
4781         return ret;
4782 }
4783 #endif /* CONFIG_I40E_DCB */
4784
4785 /**
4786  * i40e_do_reset_safe - Protected reset path for userland calls.
4787  * @pf: board private structure
4788  * @reset_flags: which reset is requested
4789  *
4790  **/
4791 void i40e_do_reset_safe(struct i40e_pf *pf, u32 reset_flags)
4792 {
4793         rtnl_lock();
4794         i40e_do_reset(pf, reset_flags);
4795         rtnl_unlock();
4796 }
4797
4798 /**
4799  * i40e_handle_lan_overflow_event - Handler for LAN queue overflow event
4800  * @pf: board private structure
4801  * @e: event info posted on ARQ
4802  *
4803  * Handler for LAN Queue Overflow Event generated by the firmware for PF
4804  * and VF queues
4805  **/
4806 static void i40e_handle_lan_overflow_event(struct i40e_pf *pf,
4807                                            struct i40e_arq_event_info *e)
4808 {
4809         struct i40e_aqc_lan_overflow *data =
4810                 (struct i40e_aqc_lan_overflow *)&e->desc.params.raw;
4811         u32 queue = le32_to_cpu(data->prtdcb_rupto);
4812         u32 qtx_ctl = le32_to_cpu(data->otx_ctl);
4813         struct i40e_hw *hw = &pf->hw;
4814         struct i40e_vf *vf;
4815         u16 vf_id;
4816
4817         dev_dbg(&pf->pdev->dev, "overflow Rx Queue Number = %d QTX_CTL=0x%08x\n",
4818                 queue, qtx_ctl);
4819
4820         /* Queue belongs to VF, find the VF and issue VF reset */
4821         if (((qtx_ctl & I40E_QTX_CTL_PFVF_Q_MASK)
4822             >> I40E_QTX_CTL_PFVF_Q_SHIFT) == I40E_QTX_CTL_VF_QUEUE) {
4823                 vf_id = (u16)((qtx_ctl & I40E_QTX_CTL_VFVM_INDX_MASK)
4824                          >> I40E_QTX_CTL_VFVM_INDX_SHIFT);
4825                 vf_id -= hw->func_caps.vf_base_id;
4826                 vf = &pf->vf[vf_id];
4827                 i40e_vc_notify_vf_reset(vf);
4828                 /* Allow VF to process pending reset notification */
4829                 msleep(20);
4830                 i40e_reset_vf(vf, false);
4831         }
4832 }
4833
4834 /**
4835  * i40e_service_event_complete - Finish up the service event
4836  * @pf: board private structure
4837  **/
4838 static void i40e_service_event_complete(struct i40e_pf *pf)
4839 {
4840         BUG_ON(!test_bit(__I40E_SERVICE_SCHED, &pf->state));
4841
4842         /* flush memory to make sure state is correct before next watchog */
4843         smp_mb__before_atomic();
4844         clear_bit(__I40E_SERVICE_SCHED, &pf->state);
4845 }
4846
4847 /**
4848  * i40e_get_current_fd_count - Get the count of FD filters programmed in the HW
4849  * @pf: board private structure
4850  **/
4851 int i40e_get_current_fd_count(struct i40e_pf *pf)
4852 {
4853         int val, fcnt_prog;
4854         val = rd32(&pf->hw, I40E_PFQF_FDSTAT);
4855         fcnt_prog = (val & I40E_PFQF_FDSTAT_GUARANT_CNT_MASK) +
4856                     ((val & I40E_PFQF_FDSTAT_BEST_CNT_MASK) >>
4857                       I40E_PFQF_FDSTAT_BEST_CNT_SHIFT);
4858         return fcnt_prog;
4859 }
4860
4861 /**
4862  * i40e_fdir_check_and_reenable - Function to reenabe FD ATR or SB if disabled
4863  * @pf: board private structure
4864  **/
4865 void i40e_fdir_check_and_reenable(struct i40e_pf *pf)
4866 {
4867         u32 fcnt_prog, fcnt_avail;
4868
4869         /* Check if, FD SB or ATR was auto disabled and if there is enough room
4870          * to re-enable
4871          */
4872         if ((pf->flags & I40E_FLAG_FD_ATR_ENABLED) &&
4873             (pf->flags & I40E_FLAG_FD_SB_ENABLED))
4874                 return;
4875         fcnt_prog = i40e_get_current_fd_count(pf);
4876         fcnt_avail = i40e_get_fd_cnt_all(pf);
4877         if (fcnt_prog < (fcnt_avail - I40E_FDIR_BUFFER_HEAD_ROOM)) {
4878                 if ((pf->flags & I40E_FLAG_FD_SB_ENABLED) &&
4879                     (pf->auto_disable_flags & I40E_FLAG_FD_SB_ENABLED)) {
4880                         pf->auto_disable_flags &= ~I40E_FLAG_FD_SB_ENABLED;
4881                         dev_info(&pf->pdev->dev, "FD Sideband/ntuple is being enabled since we have space in the table now\n");
4882                 }
4883         }
4884         /* Wait for some more space to be available to turn on ATR */
4885         if (fcnt_prog < (fcnt_avail - I40E_FDIR_BUFFER_HEAD_ROOM * 2)) {
4886                 if ((pf->flags & I40E_FLAG_FD_ATR_ENABLED) &&
4887                     (pf->auto_disable_flags & I40E_FLAG_FD_ATR_ENABLED)) {
4888                         pf->auto_disable_flags &= ~I40E_FLAG_FD_ATR_ENABLED;
4889                         dev_info(&pf->pdev->dev, "ATR is being enabled since we have space in the table now\n");
4890                 }
4891         }
4892 }
4893
4894 /**
4895  * i40e_fdir_reinit_subtask - Worker thread to reinit FDIR filter table
4896  * @pf: board private structure
4897  **/
4898 static void i40e_fdir_reinit_subtask(struct i40e_pf *pf)
4899 {
4900         if (!(pf->flags & I40E_FLAG_FDIR_REQUIRES_REINIT))
4901                 return;
4902
4903         /* if interface is down do nothing */
4904         if (test_bit(__I40E_DOWN, &pf->state))
4905                 return;
4906         i40e_fdir_check_and_reenable(pf);
4907
4908         if ((pf->flags & I40E_FLAG_FD_ATR_ENABLED) &&
4909             (pf->flags & I40E_FLAG_FD_SB_ENABLED))
4910                 pf->flags &= ~I40E_FLAG_FDIR_REQUIRES_REINIT;
4911 }
4912
4913 /**
4914  * i40e_vsi_link_event - notify VSI of a link event
4915  * @vsi: vsi to be notified
4916  * @link_up: link up or down
4917  **/
4918 static void i40e_vsi_link_event(struct i40e_vsi *vsi, bool link_up)
4919 {
4920         if (!vsi)
4921                 return;
4922
4923         switch (vsi->type) {
4924         case I40E_VSI_MAIN:
4925                 if (!vsi->netdev || !vsi->netdev_registered)
4926                         break;
4927
4928                 if (link_up) {
4929                         netif_carrier_on(vsi->netdev);
4930                         netif_tx_wake_all_queues(vsi->netdev);
4931                 } else {
4932                         netif_carrier_off(vsi->netdev);
4933                         netif_tx_stop_all_queues(vsi->netdev);
4934                 }
4935                 break;
4936
4937         case I40E_VSI_SRIOV:
4938                 break;
4939
4940         case I40E_VSI_VMDQ2:
4941         case I40E_VSI_CTRL:
4942         case I40E_VSI_MIRROR:
4943         default:
4944                 /* there is no notification for other VSIs */
4945                 break;
4946         }
4947 }
4948
4949 /**
4950  * i40e_veb_link_event - notify elements on the veb of a link event
4951  * @veb: veb to be notified
4952  * @link_up: link up or down
4953  **/
4954 static void i40e_veb_link_event(struct i40e_veb *veb, bool link_up)
4955 {
4956         struct i40e_pf *pf;
4957         int i;
4958
4959         if (!veb || !veb->pf)
4960                 return;
4961         pf = veb->pf;
4962
4963         /* depth first... */
4964         for (i = 0; i < I40E_MAX_VEB; i++)
4965                 if (pf->veb[i] && (pf->veb[i]->uplink_seid == veb->seid))
4966                         i40e_veb_link_event(pf->veb[i], link_up);
4967
4968         /* ... now the local VSIs */
4969         for (i = 0; i < pf->num_alloc_vsi; i++)
4970                 if (pf->vsi[i] && (pf->vsi[i]->uplink_seid == veb->seid))
4971                         i40e_vsi_link_event(pf->vsi[i], link_up);
4972 }
4973
4974 /**
4975  * i40e_link_event - Update netif_carrier status
4976  * @pf: board private structure
4977  **/
4978 static void i40e_link_event(struct i40e_pf *pf)
4979 {
4980         bool new_link, old_link;
4981
4982         new_link = (pf->hw.phy.link_info.link_info & I40E_AQ_LINK_UP);
4983         old_link = (pf->hw.phy.link_info_old.link_info & I40E_AQ_LINK_UP);
4984
4985         if (new_link == old_link)
4986                 return;
4987         if (!test_bit(__I40E_DOWN, &pf->vsi[pf->lan_vsi]->state))
4988                 i40e_print_link_message(pf->vsi[pf->lan_vsi], new_link);
4989
4990         /* Notify the base of the switch tree connected to
4991          * the link.  Floating VEBs are not notified.
4992          */
4993         if (pf->lan_veb != I40E_NO_VEB && pf->veb[pf->lan_veb])
4994                 i40e_veb_link_event(pf->veb[pf->lan_veb], new_link);
4995         else
4996                 i40e_vsi_link_event(pf->vsi[pf->lan_vsi], new_link);
4997
4998         if (pf->vf)
4999                 i40e_vc_notify_link_state(pf);
5000
5001         if (pf->flags & I40E_FLAG_PTP)
5002                 i40e_ptp_set_increment(pf);
5003 }
5004
5005 /**
5006  * i40e_check_hang_subtask - Check for hung queues and dropped interrupts
5007  * @pf: board private structure
5008  *
5009  * Set the per-queue flags to request a check for stuck queues in the irq
5010  * clean functions, then force interrupts to be sure the irq clean is called.
5011  **/
5012 static void i40e_check_hang_subtask(struct i40e_pf *pf)
5013 {
5014         int i, v;
5015
5016         /* If we're down or resetting, just bail */
5017         if (test_bit(__I40E_CONFIG_BUSY, &pf->state))
5018                 return;
5019
5020         /* for each VSI/netdev
5021          *     for each Tx queue
5022          *         set the check flag
5023          *     for each q_vector
5024          *         force an interrupt
5025          */
5026         for (v = 0; v < pf->num_alloc_vsi; v++) {
5027                 struct i40e_vsi *vsi = pf->vsi[v];
5028                 int armed = 0;
5029
5030                 if (!pf->vsi[v] ||
5031                     test_bit(__I40E_DOWN, &vsi->state) ||
5032                     (vsi->netdev && !netif_carrier_ok(vsi->netdev)))
5033                         continue;
5034
5035                 for (i = 0; i < vsi->num_queue_pairs; i++) {
5036                         set_check_for_tx_hang(vsi->tx_rings[i]);
5037                         if (test_bit(__I40E_HANG_CHECK_ARMED,
5038                                      &vsi->tx_rings[i]->state))
5039                                 armed++;
5040                 }
5041
5042                 if (armed) {
5043                         if (!(pf->flags & I40E_FLAG_MSIX_ENABLED)) {
5044                                 wr32(&vsi->back->hw, I40E_PFINT_DYN_CTL0,
5045                                      (I40E_PFINT_DYN_CTL0_INTENA_MASK |
5046                                       I40E_PFINT_DYN_CTL0_SWINT_TRIG_MASK));
5047                         } else {
5048                                 u16 vec = vsi->base_vector - 1;
5049                                 u32 val = (I40E_PFINT_DYN_CTLN_INTENA_MASK |
5050                                            I40E_PFINT_DYN_CTLN_SWINT_TRIG_MASK);
5051                                 for (i = 0; i < vsi->num_q_vectors; i++, vec++)
5052                                         wr32(&vsi->back->hw,
5053                                              I40E_PFINT_DYN_CTLN(vec), val);
5054                         }
5055                         i40e_flush(&vsi->back->hw);
5056                 }
5057         }
5058 }
5059
5060 /**
5061  * i40e_watchdog_subtask - Check and bring link up
5062  * @pf: board private structure
5063  **/
5064 static void i40e_watchdog_subtask(struct i40e_pf *pf)
5065 {
5066         int i;
5067
5068         /* if interface is down do nothing */
5069         if (test_bit(__I40E_DOWN, &pf->state) ||
5070             test_bit(__I40E_CONFIG_BUSY, &pf->state))
5071                 return;
5072
5073         /* Update the stats for active netdevs so the network stack
5074          * can look at updated numbers whenever it cares to
5075          */
5076         for (i = 0; i < pf->num_alloc_vsi; i++)
5077                 if (pf->vsi[i] && pf->vsi[i]->netdev)
5078                         i40e_update_stats(pf->vsi[i]);
5079
5080         /* Update the stats for the active switching components */
5081         for (i = 0; i < I40E_MAX_VEB; i++)
5082                 if (pf->veb[i])
5083                         i40e_update_veb_stats(pf->veb[i]);
5084
5085         i40e_ptp_rx_hang(pf->vsi[pf->lan_vsi]);
5086 }
5087
5088 /**
5089  * i40e_reset_subtask - Set up for resetting the device and driver
5090  * @pf: board private structure
5091  **/
5092 static void i40e_reset_subtask(struct i40e_pf *pf)
5093 {
5094         u32 reset_flags = 0;
5095
5096         rtnl_lock();
5097         if (test_bit(__I40E_REINIT_REQUESTED, &pf->state)) {
5098                 reset_flags |= (1 << __I40E_REINIT_REQUESTED);
5099                 clear_bit(__I40E_REINIT_REQUESTED, &pf->state);
5100         }
5101         if (test_bit(__I40E_PF_RESET_REQUESTED, &pf->state)) {
5102                 reset_flags |= (1 << __I40E_PF_RESET_REQUESTED);
5103                 clear_bit(__I40E_PF_RESET_REQUESTED, &pf->state);
5104         }
5105         if (test_bit(__I40E_CORE_RESET_REQUESTED, &pf->state)) {
5106                 reset_flags |= (1 << __I40E_CORE_RESET_REQUESTED);
5107                 clear_bit(__I40E_CORE_RESET_REQUESTED, &pf->state);
5108         }
5109         if (test_bit(__I40E_GLOBAL_RESET_REQUESTED, &pf->state)) {
5110                 reset_flags |= (1 << __I40E_GLOBAL_RESET_REQUESTED);
5111                 clear_bit(__I40E_GLOBAL_RESET_REQUESTED, &pf->state);
5112         }
5113
5114         /* If there's a recovery already waiting, it takes
5115          * precedence before starting a new reset sequence.
5116          */
5117         if (test_bit(__I40E_RESET_INTR_RECEIVED, &pf->state)) {
5118                 i40e_handle_reset_warning(pf);
5119                 goto unlock;
5120         }
5121
5122         /* If we're already down or resetting, just bail */
5123         if (reset_flags &&
5124             !test_bit(__I40E_DOWN, &pf->state) &&
5125             !test_bit(__I40E_CONFIG_BUSY, &pf->state))
5126                 i40e_do_reset(pf, reset_flags);
5127
5128 unlock:
5129         rtnl_unlock();
5130 }
5131
5132 /**
5133  * i40e_handle_link_event - Handle link event
5134  * @pf: board private structure
5135  * @e: event info posted on ARQ
5136  **/
5137 static void i40e_handle_link_event(struct i40e_pf *pf,
5138                                    struct i40e_arq_event_info *e)
5139 {
5140         struct i40e_hw *hw = &pf->hw;
5141         struct i40e_aqc_get_link_status *status =
5142                 (struct i40e_aqc_get_link_status *)&e->desc.params.raw;
5143         struct i40e_link_status *hw_link_info = &hw->phy.link_info;
5144
5145         /* save off old link status information */
5146         memcpy(&pf->hw.phy.link_info_old, hw_link_info,
5147                sizeof(pf->hw.phy.link_info_old));
5148
5149         /* update link status */
5150         hw_link_info->phy_type = (enum i40e_aq_phy_type)status->phy_type;
5151         hw_link_info->link_speed = (enum i40e_aq_link_speed)status->link_speed;
5152         hw_link_info->link_info = status->link_info;
5153         hw_link_info->an_info = status->an_info;
5154         hw_link_info->ext_info = status->ext_info;
5155         hw_link_info->lse_enable =
5156                 le16_to_cpu(status->command_flags) &
5157                             I40E_AQ_LSE_ENABLE;
5158
5159         /* process the event */
5160         i40e_link_event(pf);
5161
5162         /* Do a new status request to re-enable LSE reporting
5163          * and load new status information into the hw struct,
5164          * then see if the status changed while processing the
5165          * initial event.
5166          */
5167         i40e_aq_get_link_info(&pf->hw, true, NULL, NULL);
5168         i40e_link_event(pf);
5169 }
5170
5171 /**
5172  * i40e_clean_adminq_subtask - Clean the AdminQ rings
5173  * @pf: board private structure
5174  **/
5175 static void i40e_clean_adminq_subtask(struct i40e_pf *pf)
5176 {
5177         struct i40e_arq_event_info event;
5178         struct i40e_hw *hw = &pf->hw;
5179         u16 pending, i = 0;
5180         i40e_status ret;
5181         u16 opcode;
5182         u32 oldval;
5183         u32 val;
5184
5185         if (!test_bit(__I40E_ADMINQ_EVENT_PENDING, &pf->state))
5186                 return;
5187
5188         /* check for error indications */
5189         val = rd32(&pf->hw, pf->hw.aq.arq.len);
5190         oldval = val;
5191         if (val & I40E_PF_ARQLEN_ARQVFE_MASK) {
5192                 dev_info(&pf->pdev->dev, "ARQ VF Error detected\n");
5193                 val &= ~I40E_PF_ARQLEN_ARQVFE_MASK;
5194         }
5195         if (val & I40E_PF_ARQLEN_ARQOVFL_MASK) {
5196                 dev_info(&pf->pdev->dev, "ARQ Overflow Error detected\n");
5197                 val &= ~I40E_PF_ARQLEN_ARQOVFL_MASK;
5198         }
5199         if (val & I40E_PF_ARQLEN_ARQCRIT_MASK) {
5200                 dev_info(&pf->pdev->dev, "ARQ Critical Error detected\n");
5201                 val &= ~I40E_PF_ARQLEN_ARQCRIT_MASK;
5202         }
5203         if (oldval != val)
5204                 wr32(&pf->hw, pf->hw.aq.arq.len, val);
5205
5206         val = rd32(&pf->hw, pf->hw.aq.asq.len);
5207         oldval = val;
5208         if (val & I40E_PF_ATQLEN_ATQVFE_MASK) {
5209                 dev_info(&pf->pdev->dev, "ASQ VF Error detected\n");
5210                 val &= ~I40E_PF_ATQLEN_ATQVFE_MASK;
5211         }
5212         if (val & I40E_PF_ATQLEN_ATQOVFL_MASK) {
5213                 dev_info(&pf->pdev->dev, "ASQ Overflow Error detected\n");
5214                 val &= ~I40E_PF_ATQLEN_ATQOVFL_MASK;
5215         }
5216         if (val & I40E_PF_ATQLEN_ATQCRIT_MASK) {
5217                 dev_info(&pf->pdev->dev, "ASQ Critical Error detected\n");
5218                 val &= ~I40E_PF_ATQLEN_ATQCRIT_MASK;
5219         }
5220         if (oldval != val)
5221                 wr32(&pf->hw, pf->hw.aq.asq.len, val);
5222
5223         event.msg_size = I40E_MAX_AQ_BUF_SIZE;
5224         event.msg_buf = kzalloc(event.msg_size, GFP_KERNEL);
5225         if (!event.msg_buf)
5226                 return;
5227
5228         do {
5229                 event.msg_size = I40E_MAX_AQ_BUF_SIZE; /* reinit each time */
5230                 ret = i40e_clean_arq_element(hw, &event, &pending);
5231                 if (ret == I40E_ERR_ADMIN_QUEUE_NO_WORK) {
5232                         dev_info(&pf->pdev->dev, "No ARQ event found\n");
5233                         break;
5234                 } else if (ret) {
5235                         dev_info(&pf->pdev->dev, "ARQ event error %d\n", ret);
5236                         break;
5237                 }
5238
5239                 opcode = le16_to_cpu(event.desc.opcode);
5240                 switch (opcode) {
5241
5242                 case i40e_aqc_opc_get_link_status:
5243                         i40e_handle_link_event(pf, &event);
5244                         break;
5245                 case i40e_aqc_opc_send_msg_to_pf:
5246                         ret = i40e_vc_process_vf_msg(pf,
5247                                         le16_to_cpu(event.desc.retval),
5248                                         le32_to_cpu(event.desc.cookie_high),
5249                                         le32_to_cpu(event.desc.cookie_low),
5250                                         event.msg_buf,
5251                                         event.msg_size);
5252                         break;
5253                 case i40e_aqc_opc_lldp_update_mib:
5254                         dev_dbg(&pf->pdev->dev, "ARQ: Update LLDP MIB event received\n");
5255 #ifdef CONFIG_I40E_DCB
5256                         rtnl_lock();
5257                         ret = i40e_handle_lldp_event(pf, &event);
5258                         rtnl_unlock();
5259 #endif /* CONFIG_I40E_DCB */
5260                         break;
5261                 case i40e_aqc_opc_event_lan_overflow:
5262                         dev_dbg(&pf->pdev->dev, "ARQ LAN queue overflow event received\n");
5263                         i40e_handle_lan_overflow_event(pf, &event);
5264                         break;
5265                 case i40e_aqc_opc_send_msg_to_peer:
5266                         dev_info(&pf->pdev->dev, "ARQ: Msg from other pf\n");
5267                         break;
5268                 default:
5269                         dev_info(&pf->pdev->dev,
5270                                  "ARQ Error: Unknown event 0x%04x received\n",
5271                                  opcode);
5272                         break;
5273                 }
5274         } while (pending && (i++ < pf->adminq_work_limit));
5275
5276         clear_bit(__I40E_ADMINQ_EVENT_PENDING, &pf->state);
5277         /* re-enable Admin queue interrupt cause */
5278         val = rd32(hw, I40E_PFINT_ICR0_ENA);
5279         val |=  I40E_PFINT_ICR0_ENA_ADMINQ_MASK;
5280         wr32(hw, I40E_PFINT_ICR0_ENA, val);
5281         i40e_flush(hw);
5282
5283         kfree(event.msg_buf);
5284 }
5285
5286 /**
5287  * i40e_verify_eeprom - make sure eeprom is good to use
5288  * @pf: board private structure
5289  **/
5290 static void i40e_verify_eeprom(struct i40e_pf *pf)
5291 {
5292         int err;
5293
5294         err = i40e_diag_eeprom_test(&pf->hw);
5295         if (err) {
5296                 /* retry in case of garbage read */
5297                 err = i40e_diag_eeprom_test(&pf->hw);
5298                 if (err) {
5299                         dev_info(&pf->pdev->dev, "eeprom check failed (%d), Tx/Rx traffic disabled\n",
5300                                  err);
5301                         set_bit(__I40E_BAD_EEPROM, &pf->state);
5302                 }
5303         }
5304
5305         if (!err && test_bit(__I40E_BAD_EEPROM, &pf->state)) {
5306                 dev_info(&pf->pdev->dev, "eeprom check passed, Tx/Rx traffic enabled\n");
5307                 clear_bit(__I40E_BAD_EEPROM, &pf->state);
5308         }
5309 }
5310
5311 /**
5312  * i40e_reconstitute_veb - rebuild the VEB and anything connected to it
5313  * @veb: pointer to the VEB instance
5314  *
5315  * This is a recursive function that first builds the attached VSIs then
5316  * recurses in to build the next layer of VEB.  We track the connections
5317  * through our own index numbers because the seid's from the HW could
5318  * change across the reset.
5319  **/
5320 static int i40e_reconstitute_veb(struct i40e_veb *veb)
5321 {
5322         struct i40e_vsi *ctl_vsi = NULL;
5323         struct i40e_pf *pf = veb->pf;
5324         int v, veb_idx;
5325         int ret;
5326
5327         /* build VSI that owns this VEB, temporarily attached to base VEB */
5328         for (v = 0; v < pf->num_alloc_vsi && !ctl_vsi; v++) {
5329                 if (pf->vsi[v] &&
5330                     pf->vsi[v]->veb_idx == veb->idx &&
5331                     pf->vsi[v]->flags & I40E_VSI_FLAG_VEB_OWNER) {
5332                         ctl_vsi = pf->vsi[v];
5333                         break;
5334                 }
5335         }
5336         if (!ctl_vsi) {
5337                 dev_info(&pf->pdev->dev,
5338                          "missing owner VSI for veb_idx %d\n", veb->idx);
5339                 ret = -ENOENT;
5340                 goto end_reconstitute;
5341         }
5342         if (ctl_vsi != pf->vsi[pf->lan_vsi])
5343                 ctl_vsi->uplink_seid = pf->vsi[pf->lan_vsi]->uplink_seid;
5344         ret = i40e_add_vsi(ctl_vsi);
5345         if (ret) {
5346                 dev_info(&pf->pdev->dev,
5347                          "rebuild of owner VSI failed: %d\n", ret);
5348                 goto end_reconstitute;
5349         }
5350         i40e_vsi_reset_stats(ctl_vsi);
5351
5352         /* create the VEB in the switch and move the VSI onto the VEB */
5353         ret = i40e_add_veb(veb, ctl_vsi);
5354         if (ret)
5355                 goto end_reconstitute;
5356
5357         /* create the remaining VSIs attached to this VEB */
5358         for (v = 0; v < pf->num_alloc_vsi; v++) {
5359                 if (!pf->vsi[v] || pf->vsi[v] == ctl_vsi)
5360                         continue;
5361
5362                 if (pf->vsi[v]->veb_idx == veb->idx) {
5363                         struct i40e_vsi *vsi = pf->vsi[v];
5364                         vsi->uplink_seid = veb->seid;
5365                         ret = i40e_add_vsi(vsi);
5366                         if (ret) {
5367                                 dev_info(&pf->pdev->dev,
5368                                          "rebuild of vsi_idx %d failed: %d\n",
5369                                          v, ret);
5370                                 goto end_reconstitute;
5371                         }
5372                         i40e_vsi_reset_stats(vsi);
5373                 }
5374         }
5375
5376         /* create any VEBs attached to this VEB - RECURSION */
5377         for (veb_idx = 0; veb_idx < I40E_MAX_VEB; veb_idx++) {
5378                 if (pf->veb[veb_idx] && pf->veb[veb_idx]->veb_idx == veb->idx) {
5379                         pf->veb[veb_idx]->uplink_seid = veb->seid;
5380                         ret = i40e_reconstitute_veb(pf->veb[veb_idx]);
5381                         if (ret)
5382                                 break;
5383                 }
5384         }
5385
5386 end_reconstitute:
5387         return ret;
5388 }
5389
5390 /**
5391  * i40e_get_capabilities - get info about the HW
5392  * @pf: the PF struct
5393  **/
5394 static int i40e_get_capabilities(struct i40e_pf *pf)
5395 {
5396         struct i40e_aqc_list_capabilities_element_resp *cap_buf;
5397         u16 data_size;
5398         int buf_len;
5399         int err;
5400
5401         buf_len = 40 * sizeof(struct i40e_aqc_list_capabilities_element_resp);
5402         do {
5403                 cap_buf = kzalloc(buf_len, GFP_KERNEL);
5404                 if (!cap_buf)
5405                         return -ENOMEM;
5406
5407                 /* this loads the data into the hw struct for us */
5408                 err = i40e_aq_discover_capabilities(&pf->hw, cap_buf, buf_len,
5409                                             &data_size,
5410                                             i40e_aqc_opc_list_func_capabilities,
5411                                             NULL);
5412                 /* data loaded, buffer no longer needed */
5413                 kfree(cap_buf);
5414
5415                 if (pf->hw.aq.asq_last_status == I40E_AQ_RC_ENOMEM) {
5416                         /* retry with a larger buffer */
5417                         buf_len = data_size;
5418                 } else if (pf->hw.aq.asq_last_status != I40E_AQ_RC_OK) {
5419                         dev_info(&pf->pdev->dev,
5420                                  "capability discovery failed: aq=%d\n",
5421                                  pf->hw.aq.asq_last_status);
5422                         return -ENODEV;
5423                 }
5424         } while (err);
5425
5426         if (((pf->hw.aq.fw_maj_ver == 2) && (pf->hw.aq.fw_min_ver < 22)) ||
5427             (pf->hw.aq.fw_maj_ver < 2)) {
5428                 pf->hw.func_caps.num_msix_vectors++;
5429                 pf->hw.func_caps.num_msix_vectors_vf++;
5430         }
5431
5432         if (pf->hw.debug_mask & I40E_DEBUG_USER)
5433                 dev_info(&pf->pdev->dev,
5434                          "pf=%d, num_vfs=%d, msix_pf=%d, msix_vf=%d, fd_g=%d, fd_b=%d, pf_max_q=%d num_vsi=%d\n",
5435                          pf->hw.pf_id, pf->hw.func_caps.num_vfs,
5436                          pf->hw.func_caps.num_msix_vectors,
5437                          pf->hw.func_caps.num_msix_vectors_vf,
5438                          pf->hw.func_caps.fd_filters_guaranteed,
5439                          pf->hw.func_caps.fd_filters_best_effort,
5440                          pf->hw.func_caps.num_tx_qp,
5441                          pf->hw.func_caps.num_vsis);
5442
5443 #define DEF_NUM_VSI (1 + (pf->hw.func_caps.fcoe ? 1 : 0) \
5444                        + pf->hw.func_caps.num_vfs)
5445         if (pf->hw.revision_id == 0 && (DEF_NUM_VSI > pf->hw.func_caps.num_vsis)) {
5446                 dev_info(&pf->pdev->dev,
5447                          "got num_vsis %d, setting num_vsis to %d\n",
5448                          pf->hw.func_caps.num_vsis, DEF_NUM_VSI);
5449                 pf->hw.func_caps.num_vsis = DEF_NUM_VSI;
5450         }
5451
5452         return 0;
5453 }
5454
5455 static int i40e_vsi_clear(struct i40e_vsi *vsi);
5456
5457 /**
5458  * i40e_fdir_sb_setup - initialize the Flow Director resources for Sideband
5459  * @pf: board private structure
5460  **/
5461 static void i40e_fdir_sb_setup(struct i40e_pf *pf)
5462 {
5463         struct i40e_vsi *vsi;
5464         int i;
5465
5466         if (!(pf->flags & I40E_FLAG_FD_SB_ENABLED))
5467                 return;
5468
5469         /* find existing VSI and see if it needs configuring */
5470         vsi = NULL;
5471         for (i = 0; i < pf->num_alloc_vsi; i++) {
5472                 if (pf->vsi[i] && pf->vsi[i]->type == I40E_VSI_FDIR) {
5473                         vsi = pf->vsi[i];
5474                         break;
5475                 }
5476         }
5477
5478         /* create a new VSI if none exists */
5479         if (!vsi) {
5480                 vsi = i40e_vsi_setup(pf, I40E_VSI_FDIR,
5481                                      pf->vsi[pf->lan_vsi]->seid, 0);
5482                 if (!vsi) {
5483                         dev_info(&pf->pdev->dev, "Couldn't create FDir VSI\n");
5484                         pf->flags &= ~I40E_FLAG_FD_SB_ENABLED;
5485                         return;
5486                 }
5487         }
5488
5489         i40e_vsi_setup_irqhandler(vsi, i40e_fdir_clean_ring);
5490 }
5491
5492 /**
5493  * i40e_fdir_teardown - release the Flow Director resources
5494  * @pf: board private structure
5495  **/
5496 static void i40e_fdir_teardown(struct i40e_pf *pf)
5497 {
5498         int i;
5499
5500         i40e_fdir_filter_exit(pf);
5501         for (i = 0; i < pf->num_alloc_vsi; i++) {
5502                 if (pf->vsi[i] && pf->vsi[i]->type == I40E_VSI_FDIR) {
5503                         i40e_vsi_release(pf->vsi[i]);
5504                         break;
5505                 }
5506         }
5507 }
5508
5509 /**
5510  * i40e_prep_for_reset - prep for the core to reset
5511  * @pf: board private structure
5512  *
5513  * Close up the VFs and other things in prep for pf Reset.
5514   **/
5515 static int i40e_prep_for_reset(struct i40e_pf *pf)
5516 {
5517         struct i40e_hw *hw = &pf->hw;
5518         i40e_status ret = 0;
5519         u32 v;
5520
5521         clear_bit(__I40E_RESET_INTR_RECEIVED, &pf->state);
5522         if (test_and_set_bit(__I40E_RESET_RECOVERY_PENDING, &pf->state))
5523                 return 0;
5524
5525         dev_dbg(&pf->pdev->dev, "Tearing down internal switch for reset\n");
5526
5527         /* quiesce the VSIs and their queues that are not already DOWN */
5528         i40e_pf_quiesce_all_vsi(pf);
5529
5530         for (v = 0; v < pf->num_alloc_vsi; v++) {
5531                 if (pf->vsi[v])
5532                         pf->vsi[v]->seid = 0;
5533         }
5534
5535         i40e_shutdown_adminq(&pf->hw);
5536
5537         /* call shutdown HMC */
5538         if (hw->hmc.hmc_obj) {
5539                 ret = i40e_shutdown_lan_hmc(hw);
5540                 if (ret) {
5541                         dev_warn(&pf->pdev->dev,
5542                                  "shutdown_lan_hmc failed: %d\n", ret);
5543                         clear_bit(__I40E_RESET_RECOVERY_PENDING, &pf->state);
5544                 }
5545         }
5546         return ret;
5547 }
5548
5549 /**
5550  * i40e_send_version - update firmware with driver version
5551  * @pf: PF struct
5552  */
5553 static void i40e_send_version(struct i40e_pf *pf)
5554 {
5555         struct i40e_driver_version dv;
5556
5557         dv.major_version = DRV_VERSION_MAJOR;
5558         dv.minor_version = DRV_VERSION_MINOR;
5559         dv.build_version = DRV_VERSION_BUILD;
5560         dv.subbuild_version = 0;
5561         strncpy(dv.driver_string, DRV_VERSION, sizeof(dv.driver_string));
5562         i40e_aq_send_driver_version(&pf->hw, &dv, NULL);
5563 }
5564
5565 /**
5566  * i40e_reset_and_rebuild - reset and rebuild using a saved config
5567  * @pf: board private structure
5568  * @reinit: if the Main VSI needs to re-initialized.
5569  **/
5570 static void i40e_reset_and_rebuild(struct i40e_pf *pf, bool reinit)
5571 {
5572         struct i40e_hw *hw = &pf->hw;
5573         i40e_status ret;
5574         u32 v;
5575
5576         /* Now we wait for GRST to settle out.
5577          * We don't have to delete the VEBs or VSIs from the hw switch
5578          * because the reset will make them disappear.
5579          */
5580         ret = i40e_pf_reset(hw);
5581         if (ret) {
5582                 dev_info(&pf->pdev->dev, "PF reset failed, %d\n", ret);
5583                 goto end_core_reset;
5584         }
5585         pf->pfr_count++;
5586
5587         if (test_bit(__I40E_DOWN, &pf->state))
5588                 goto end_core_reset;
5589         dev_dbg(&pf->pdev->dev, "Rebuilding internal switch\n");
5590
5591         /* rebuild the basics for the AdminQ, HMC, and initial HW switch */
5592         ret = i40e_init_adminq(&pf->hw);
5593         if (ret) {
5594                 dev_info(&pf->pdev->dev, "Rebuild AdminQ failed, %d\n", ret);
5595                 goto end_core_reset;
5596         }
5597
5598         /* re-verify the eeprom if we just had an EMP reset */
5599         if (test_bit(__I40E_EMP_RESET_REQUESTED, &pf->state)) {
5600                 clear_bit(__I40E_EMP_RESET_REQUESTED, &pf->state);
5601                 i40e_verify_eeprom(pf);
5602         }
5603
5604         i40e_clear_pxe_mode(hw);
5605         ret = i40e_get_capabilities(pf);
5606         if (ret) {
5607                 dev_info(&pf->pdev->dev, "i40e_get_capabilities failed, %d\n",
5608                          ret);
5609                 goto end_core_reset;
5610         }
5611
5612         ret = i40e_init_lan_hmc(hw, hw->func_caps.num_tx_qp,
5613                                 hw->func_caps.num_rx_qp,
5614                                 pf->fcoe_hmc_cntx_num, pf->fcoe_hmc_filt_num);
5615         if (ret) {
5616                 dev_info(&pf->pdev->dev, "init_lan_hmc failed: %d\n", ret);
5617                 goto end_core_reset;
5618         }
5619         ret = i40e_configure_lan_hmc(hw, I40E_HMC_MODEL_DIRECT_ONLY);
5620         if (ret) {
5621                 dev_info(&pf->pdev->dev, "configure_lan_hmc failed: %d\n", ret);
5622                 goto end_core_reset;
5623         }
5624
5625 #ifdef CONFIG_I40E_DCB
5626         ret = i40e_init_pf_dcb(pf);
5627         if (ret) {
5628                 dev_info(&pf->pdev->dev, "init_pf_dcb failed: %d\n", ret);
5629                 goto end_core_reset;
5630         }
5631 #endif /* CONFIG_I40E_DCB */
5632
5633         /* do basic switch setup */
5634         ret = i40e_setup_pf_switch(pf, reinit);
5635         if (ret)
5636                 goto end_core_reset;
5637
5638         /* Rebuild the VSIs and VEBs that existed before reset.
5639          * They are still in our local switch element arrays, so only
5640          * need to rebuild the switch model in the HW.
5641          *
5642          * If there were VEBs but the reconstitution failed, we'll try
5643          * try to recover minimal use by getting the basic PF VSI working.
5644          */
5645         if (pf->vsi[pf->lan_vsi]->uplink_seid != pf->mac_seid) {
5646                 dev_dbg(&pf->pdev->dev, "attempting to rebuild switch\n");
5647                 /* find the one VEB connected to the MAC, and find orphans */
5648                 for (v = 0; v < I40E_MAX_VEB; v++) {
5649                         if (!pf->veb[v])
5650                                 continue;
5651
5652                         if (pf->veb[v]->uplink_seid == pf->mac_seid ||
5653                             pf->veb[v]->uplink_seid == 0) {
5654                                 ret = i40e_reconstitute_veb(pf->veb[v]);
5655
5656                                 if (!ret)
5657                                         continue;
5658
5659                                 /* If Main VEB failed, we're in deep doodoo,
5660                                  * so give up rebuilding the switch and set up
5661                                  * for minimal rebuild of PF VSI.
5662                                  * If orphan failed, we'll report the error
5663                                  * but try to keep going.
5664                                  */
5665                                 if (pf->veb[v]->uplink_seid == pf->mac_seid) {
5666                                         dev_info(&pf->pdev->dev,
5667                                                  "rebuild of switch failed: %d, will try to set up simple PF connection\n",
5668                                                  ret);
5669                                         pf->vsi[pf->lan_vsi]->uplink_seid
5670                                                                 = pf->mac_seid;
5671                                         break;
5672                                 } else if (pf->veb[v]->uplink_seid == 0) {
5673                                         dev_info(&pf->pdev->dev,
5674                                                  "rebuild of orphan VEB failed: %d\n",
5675                                                  ret);
5676                                 }
5677                         }
5678                 }
5679         }
5680
5681         if (pf->vsi[pf->lan_vsi]->uplink_seid == pf->mac_seid) {
5682                 dev_info(&pf->pdev->dev, "attempting to rebuild PF VSI\n");
5683                 /* no VEB, so rebuild only the Main VSI */
5684                 ret = i40e_add_vsi(pf->vsi[pf->lan_vsi]);
5685                 if (ret) {
5686                         dev_info(&pf->pdev->dev,
5687                                  "rebuild of Main VSI failed: %d\n", ret);
5688                         goto end_core_reset;
5689                 }
5690         }
5691
5692         /* reinit the misc interrupt */
5693         if (pf->flags & I40E_FLAG_MSIX_ENABLED)
5694                 ret = i40e_setup_misc_vector(pf);
5695
5696         /* restart the VSIs that were rebuilt and running before the reset */
5697         i40e_pf_unquiesce_all_vsi(pf);
5698
5699         if (pf->num_alloc_vfs) {
5700                 for (v = 0; v < pf->num_alloc_vfs; v++)
5701                         i40e_reset_vf(&pf->vf[v], true);
5702         }
5703
5704         /* tell the firmware that we're starting */
5705         i40e_send_version(pf);
5706
5707 end_core_reset:
5708         clear_bit(__I40E_RESET_RECOVERY_PENDING, &pf->state);
5709 }
5710
5711 /**
5712  * i40e_handle_reset_warning - prep for the pf to reset, reset and rebuild
5713  * @pf: board private structure
5714  *
5715  * Close up the VFs and other things in prep for a Core Reset,
5716  * then get ready to rebuild the world.
5717  **/
5718 static void i40e_handle_reset_warning(struct i40e_pf *pf)
5719 {
5720         i40e_status ret;
5721
5722         ret = i40e_prep_for_reset(pf);
5723         if (!ret)
5724                 i40e_reset_and_rebuild(pf, false);
5725 }
5726
5727 /**
5728  * i40e_handle_mdd_event
5729  * @pf: pointer to the pf structure
5730  *
5731  * Called from the MDD irq handler to identify possibly malicious vfs
5732  **/
5733 static void i40e_handle_mdd_event(struct i40e_pf *pf)
5734 {
5735         struct i40e_hw *hw = &pf->hw;
5736         bool mdd_detected = false;
5737         struct i40e_vf *vf;
5738         u32 reg;
5739         int i;
5740
5741         if (!test_bit(__I40E_MDD_EVENT_PENDING, &pf->state))
5742                 return;
5743
5744         /* find what triggered the MDD event */
5745         reg = rd32(hw, I40E_GL_MDET_TX);
5746         if (reg & I40E_GL_MDET_TX_VALID_MASK) {
5747                 u8 func = (reg & I40E_GL_MDET_TX_FUNCTION_MASK)
5748                                 >> I40E_GL_MDET_TX_FUNCTION_SHIFT;
5749                 u8 event = (reg & I40E_GL_MDET_TX_EVENT_SHIFT)
5750                                 >> I40E_GL_MDET_TX_EVENT_SHIFT;
5751                 u8 queue = (reg & I40E_GL_MDET_TX_QUEUE_MASK)
5752                                 >> I40E_GL_MDET_TX_QUEUE_SHIFT;
5753                 dev_info(&pf->pdev->dev,
5754                          "Malicious Driver Detection event 0x%02x on TX queue %d of function 0x%02x\n",
5755                          event, queue, func);
5756                 wr32(hw, I40E_GL_MDET_TX, 0xffffffff);
5757                 mdd_detected = true;
5758         }
5759         reg = rd32(hw, I40E_GL_MDET_RX);
5760         if (reg & I40E_GL_MDET_RX_VALID_MASK) {
5761                 u8 func = (reg & I40E_GL_MDET_RX_FUNCTION_MASK)
5762                                 >> I40E_GL_MDET_RX_FUNCTION_SHIFT;
5763                 u8 event = (reg & I40E_GL_MDET_RX_EVENT_SHIFT)
5764                                 >> I40E_GL_MDET_RX_EVENT_SHIFT;
5765                 u8 queue = (reg & I40E_GL_MDET_RX_QUEUE_MASK)
5766                                 >> I40E_GL_MDET_RX_QUEUE_SHIFT;
5767                 dev_info(&pf->pdev->dev,
5768                          "Malicious Driver Detection event 0x%02x on RX queue %d of function 0x%02x\n",
5769                          event, queue, func);
5770                 wr32(hw, I40E_GL_MDET_RX, 0xffffffff);
5771                 mdd_detected = true;
5772         }
5773
5774         /* see if one of the VFs needs its hand slapped */
5775         for (i = 0; i < pf->num_alloc_vfs && mdd_detected; i++) {
5776                 vf = &(pf->vf[i]);
5777                 reg = rd32(hw, I40E_VP_MDET_TX(i));
5778                 if (reg & I40E_VP_MDET_TX_VALID_MASK) {
5779                         wr32(hw, I40E_VP_MDET_TX(i), 0xFFFF);
5780                         vf->num_mdd_events++;
5781                         dev_info(&pf->pdev->dev, "MDD TX event on VF %d\n", i);
5782                 }
5783
5784                 reg = rd32(hw, I40E_VP_MDET_RX(i));
5785                 if (reg & I40E_VP_MDET_RX_VALID_MASK) {
5786                         wr32(hw, I40E_VP_MDET_RX(i), 0xFFFF);
5787                         vf->num_mdd_events++;
5788                         dev_info(&pf->pdev->dev, "MDD RX event on VF %d\n", i);
5789                 }
5790
5791                 if (vf->num_mdd_events > I40E_DEFAULT_NUM_MDD_EVENTS_ALLOWED) {
5792                         dev_info(&pf->pdev->dev,
5793                                  "Too many MDD events on VF %d, disabled\n", i);
5794                         dev_info(&pf->pdev->dev,
5795                                  "Use PF Control I/F to re-enable the VF\n");
5796                         set_bit(I40E_VF_STAT_DISABLED, &vf->vf_states);
5797                 }
5798         }
5799
5800         /* re-enable mdd interrupt cause */
5801         clear_bit(__I40E_MDD_EVENT_PENDING, &pf->state);
5802         reg = rd32(hw, I40E_PFINT_ICR0_ENA);
5803         reg |=  I40E_PFINT_ICR0_ENA_MAL_DETECT_MASK;
5804         wr32(hw, I40E_PFINT_ICR0_ENA, reg);
5805         i40e_flush(hw);
5806 }
5807
5808 #ifdef CONFIG_I40E_VXLAN
5809 /**
5810  * i40e_sync_vxlan_filters_subtask - Sync the VSI filter list with HW
5811  * @pf: board private structure
5812  **/
5813 static void i40e_sync_vxlan_filters_subtask(struct i40e_pf *pf)
5814 {
5815         struct i40e_hw *hw = &pf->hw;
5816         i40e_status ret;
5817         u8 filter_index;
5818         __be16 port;
5819         int i;
5820
5821         if (!(pf->flags & I40E_FLAG_VXLAN_FILTER_SYNC))
5822                 return;
5823
5824         pf->flags &= ~I40E_FLAG_VXLAN_FILTER_SYNC;
5825
5826         for (i = 0; i < I40E_MAX_PF_UDP_OFFLOAD_PORTS; i++) {
5827                 if (pf->pending_vxlan_bitmap & (1 << i)) {
5828                         pf->pending_vxlan_bitmap &= ~(1 << i);
5829                         port = pf->vxlan_ports[i];
5830                         ret = port ?
5831                               i40e_aq_add_udp_tunnel(hw, ntohs(port),
5832                                                      I40E_AQC_TUNNEL_TYPE_VXLAN,
5833                                                      &filter_index, NULL)
5834                               : i40e_aq_del_udp_tunnel(hw, i, NULL);
5835
5836                         if (ret) {
5837                                 dev_info(&pf->pdev->dev, "Failed to execute AQ command for %s port %d with index %d\n",
5838                                          port ? "adding" : "deleting",
5839                                          ntohs(port), port ? i : i);
5840
5841                                 pf->vxlan_ports[i] = 0;
5842                         } else {
5843                                 dev_info(&pf->pdev->dev, "%s port %d with AQ command with index %d\n",
5844                                          port ? "Added" : "Deleted",
5845                                          ntohs(port), port ? i : filter_index);
5846                         }
5847                 }
5848         }
5849 }
5850
5851 #endif
5852 /**
5853  * i40e_service_task - Run the driver's async subtasks
5854  * @work: pointer to work_struct containing our data
5855  **/
5856 static void i40e_service_task(struct work_struct *work)
5857 {
5858         struct i40e_pf *pf = container_of(work,
5859                                           struct i40e_pf,
5860                                           service_task);
5861         unsigned long start_time = jiffies;
5862
5863         i40e_reset_subtask(pf);
5864         i40e_handle_mdd_event(pf);
5865         i40e_vc_process_vflr_event(pf);
5866         i40e_watchdog_subtask(pf);
5867         i40e_fdir_reinit_subtask(pf);
5868         i40e_check_hang_subtask(pf);
5869         i40e_sync_filters_subtask(pf);
5870 #ifdef CONFIG_I40E_VXLAN
5871         i40e_sync_vxlan_filters_subtask(pf);
5872 #endif
5873         i40e_clean_adminq_subtask(pf);
5874
5875         i40e_service_event_complete(pf);
5876
5877         /* If the tasks have taken longer than one timer cycle or there
5878          * is more work to be done, reschedule the service task now
5879          * rather than wait for the timer to tick again.
5880          */
5881         if (time_after(jiffies, (start_time + pf->service_timer_period)) ||
5882             test_bit(__I40E_ADMINQ_EVENT_PENDING, &pf->state)            ||
5883             test_bit(__I40E_MDD_EVENT_PENDING, &pf->state)               ||
5884             test_bit(__I40E_VFLR_EVENT_PENDING, &pf->state))
5885                 i40e_service_event_schedule(pf);
5886 }
5887
5888 /**
5889  * i40e_service_timer - timer callback
5890  * @data: pointer to PF struct
5891  **/
5892 static void i40e_service_timer(unsigned long data)
5893 {
5894         struct i40e_pf *pf = (struct i40e_pf *)data;
5895
5896         mod_timer(&pf->service_timer,
5897                   round_jiffies(jiffies + pf->service_timer_period));
5898         i40e_service_event_schedule(pf);
5899 }
5900
5901 /**
5902  * i40e_set_num_rings_in_vsi - Determine number of rings in the VSI
5903  * @vsi: the VSI being configured
5904  **/
5905 static int i40e_set_num_rings_in_vsi(struct i40e_vsi *vsi)
5906 {
5907         struct i40e_pf *pf = vsi->back;
5908
5909         switch (vsi->type) {
5910         case I40E_VSI_MAIN:
5911                 vsi->alloc_queue_pairs = pf->num_lan_qps;
5912                 vsi->num_desc = ALIGN(I40E_DEFAULT_NUM_DESCRIPTORS,
5913                                       I40E_REQ_DESCRIPTOR_MULTIPLE);
5914                 if (pf->flags & I40E_FLAG_MSIX_ENABLED)
5915                         vsi->num_q_vectors = pf->num_lan_msix;
5916                 else
5917                         vsi->num_q_vectors = 1;
5918
5919                 break;
5920
5921         case I40E_VSI_FDIR:
5922                 vsi->alloc_queue_pairs = 1;
5923                 vsi->num_desc = ALIGN(I40E_FDIR_RING_COUNT,
5924                                       I40E_REQ_DESCRIPTOR_MULTIPLE);
5925                 vsi->num_q_vectors = 1;
5926                 break;
5927
5928         case I40E_VSI_VMDQ2:
5929                 vsi->alloc_queue_pairs = pf->num_vmdq_qps;
5930                 vsi->num_desc = ALIGN(I40E_DEFAULT_NUM_DESCRIPTORS,
5931                                       I40E_REQ_DESCRIPTOR_MULTIPLE);
5932                 vsi->num_q_vectors = pf->num_vmdq_msix;
5933                 break;
5934
5935         case I40E_VSI_SRIOV:
5936                 vsi->alloc_queue_pairs = pf->num_vf_qps;
5937                 vsi->num_desc = ALIGN(I40E_DEFAULT_NUM_DESCRIPTORS,
5938                                       I40E_REQ_DESCRIPTOR_MULTIPLE);
5939                 break;
5940
5941         default:
5942                 WARN_ON(1);
5943                 return -ENODATA;
5944         }
5945
5946         return 0;
5947 }
5948
5949 /**
5950  * i40e_vsi_alloc_arrays - Allocate queue and vector pointer arrays for the vsi
5951  * @type: VSI pointer
5952  * @alloc_qvectors: a bool to specify if q_vectors need to be allocated.
5953  *
5954  * On error: returns error code (negative)
5955  * On success: returns 0
5956  **/
5957 static int i40e_vsi_alloc_arrays(struct i40e_vsi *vsi, bool alloc_qvectors)
5958 {
5959         int size;
5960         int ret = 0;
5961
5962         /* allocate memory for both Tx and Rx ring pointers */
5963         size = sizeof(struct i40e_ring *) * vsi->alloc_queue_pairs * 2;
5964         vsi->tx_rings = kzalloc(size, GFP_KERNEL);
5965         if (!vsi->tx_rings)
5966                 return -ENOMEM;
5967         vsi->rx_rings = &vsi->tx_rings[vsi->alloc_queue_pairs];
5968
5969         if (alloc_qvectors) {
5970                 /* allocate memory for q_vector pointers */
5971                 size = sizeof(struct i40e_q_vectors *) * vsi->num_q_vectors;
5972                 vsi->q_vectors = kzalloc(size, GFP_KERNEL);
5973                 if (!vsi->q_vectors) {
5974                         ret = -ENOMEM;
5975                         goto err_vectors;
5976                 }
5977         }
5978         return ret;
5979
5980 err_vectors:
5981         kfree(vsi->tx_rings);
5982         return ret;
5983 }
5984
5985 /**
5986  * i40e_vsi_mem_alloc - Allocates the next available struct vsi in the PF
5987  * @pf: board private structure
5988  * @type: type of VSI
5989  *
5990  * On error: returns error code (negative)
5991  * On success: returns vsi index in PF (positive)
5992  **/
5993 static int i40e_vsi_mem_alloc(struct i40e_pf *pf, enum i40e_vsi_type type)
5994 {
5995         int ret = -ENODEV;
5996         struct i40e_vsi *vsi;
5997         int vsi_idx;
5998         int i;
5999
6000         /* Need to protect the allocation of the VSIs at the PF level */
6001         mutex_lock(&pf->switch_mutex);
6002
6003         /* VSI list may be fragmented if VSI creation/destruction has
6004          * been happening.  We can afford to do a quick scan to look
6005          * for any free VSIs in the list.
6006          *
6007          * find next empty vsi slot, looping back around if necessary
6008          */
6009         i = pf->next_vsi;
6010         while (i < pf->num_alloc_vsi && pf->vsi[i])
6011                 i++;
6012         if (i >= pf->num_alloc_vsi) {
6013                 i = 0;
6014                 while (i < pf->next_vsi && pf->vsi[i])
6015                         i++;
6016         }
6017
6018         if (i < pf->num_alloc_vsi && !pf->vsi[i]) {
6019                 vsi_idx = i;             /* Found one! */
6020         } else {
6021                 ret = -ENODEV;
6022                 goto unlock_pf;  /* out of VSI slots! */
6023         }
6024         pf->next_vsi = ++i;
6025
6026         vsi = kzalloc(sizeof(*vsi), GFP_KERNEL);
6027         if (!vsi) {
6028                 ret = -ENOMEM;
6029                 goto unlock_pf;
6030         }
6031         vsi->type = type;
6032         vsi->back = pf;
6033         set_bit(__I40E_DOWN, &vsi->state);
6034         vsi->flags = 0;
6035         vsi->idx = vsi_idx;
6036         vsi->rx_itr_setting = pf->rx_itr_default;
6037         vsi->tx_itr_setting = pf->tx_itr_default;
6038         vsi->netdev_registered = false;
6039         vsi->work_limit = I40E_DEFAULT_IRQ_WORK;
6040         INIT_LIST_HEAD(&vsi->mac_filter_list);
6041         vsi->irqs_ready = false;
6042
6043         ret = i40e_set_num_rings_in_vsi(vsi);
6044         if (ret)
6045                 goto err_rings;
6046
6047         ret = i40e_vsi_alloc_arrays(vsi, true);
6048         if (ret)
6049                 goto err_rings;
6050
6051         /* Setup default MSIX irq handler for VSI */
6052         i40e_vsi_setup_irqhandler(vsi, i40e_msix_clean_rings);
6053
6054         pf->vsi[vsi_idx] = vsi;
6055         ret = vsi_idx;
6056         goto unlock_pf;
6057
6058 err_rings:
6059         pf->next_vsi = i - 1;
6060         kfree(vsi);
6061 unlock_pf:
6062         mutex_unlock(&pf->switch_mutex);
6063         return ret;
6064 }
6065
6066 /**
6067  * i40e_vsi_free_arrays - Free queue and vector pointer arrays for the VSI
6068  * @type: VSI pointer
6069  * @free_qvectors: a bool to specify if q_vectors need to be freed.
6070  *
6071  * On error: returns error code (negative)
6072  * On success: returns 0
6073  **/
6074 static void i40e_vsi_free_arrays(struct i40e_vsi *vsi, bool free_qvectors)
6075 {
6076         /* free the ring and vector containers */
6077         if (free_qvectors) {
6078                 kfree(vsi->q_vectors);
6079                 vsi->q_vectors = NULL;
6080         }
6081         kfree(vsi->tx_rings);
6082         vsi->tx_rings = NULL;
6083         vsi->rx_rings = NULL;
6084 }
6085
6086 /**
6087  * i40e_vsi_clear - Deallocate the VSI provided
6088  * @vsi: the VSI being un-configured
6089  **/
6090 static int i40e_vsi_clear(struct i40e_vsi *vsi)
6091 {
6092         struct i40e_pf *pf;
6093
6094         if (!vsi)
6095                 return 0;
6096
6097         if (!vsi->back)
6098                 goto free_vsi;
6099         pf = vsi->back;
6100
6101         mutex_lock(&pf->switch_mutex);
6102         if (!pf->vsi[vsi->idx]) {
6103                 dev_err(&pf->pdev->dev, "pf->vsi[%d] is NULL, just free vsi[%d](%p,type %d)\n",
6104                         vsi->idx, vsi->idx, vsi, vsi->type);
6105                 goto unlock_vsi;
6106         }
6107
6108         if (pf->vsi[vsi->idx] != vsi) {
6109                 dev_err(&pf->pdev->dev,
6110                         "pf->vsi[%d](%p, type %d) != vsi[%d](%p,type %d): no free!\n",
6111                         pf->vsi[vsi->idx]->idx,
6112                         pf->vsi[vsi->idx],
6113                         pf->vsi[vsi->idx]->type,
6114                         vsi->idx, vsi, vsi->type);
6115                 goto unlock_vsi;
6116         }
6117
6118         /* updates the pf for this cleared vsi */
6119         i40e_put_lump(pf->qp_pile, vsi->base_queue, vsi->idx);
6120         i40e_put_lump(pf->irq_pile, vsi->base_vector, vsi->idx);
6121
6122         i40e_vsi_free_arrays(vsi, true);
6123
6124         pf->vsi[vsi->idx] = NULL;
6125         if (vsi->idx < pf->next_vsi)
6126                 pf->next_vsi = vsi->idx;
6127
6128 unlock_vsi:
6129         mutex_unlock(&pf->switch_mutex);
6130 free_vsi:
6131         kfree(vsi);
6132
6133         return 0;
6134 }
6135
6136 /**
6137  * i40e_vsi_clear_rings - Deallocates the Rx and Tx rings for the provided VSI
6138  * @vsi: the VSI being cleaned
6139  **/
6140 static void i40e_vsi_clear_rings(struct i40e_vsi *vsi)
6141 {
6142         int i;
6143
6144         if (vsi->tx_rings && vsi->tx_rings[0]) {
6145                 for (i = 0; i < vsi->alloc_queue_pairs; i++) {
6146                         kfree_rcu(vsi->tx_rings[i], rcu);
6147                         vsi->tx_rings[i] = NULL;
6148                         vsi->rx_rings[i] = NULL;
6149                 }
6150         }
6151 }
6152
6153 /**
6154  * i40e_alloc_rings - Allocates the Rx and Tx rings for the provided VSI
6155  * @vsi: the VSI being configured
6156  **/
6157 static int i40e_alloc_rings(struct i40e_vsi *vsi)
6158 {
6159         struct i40e_ring *tx_ring, *rx_ring;
6160         struct i40e_pf *pf = vsi->back;
6161         int i;
6162
6163         /* Set basic values in the rings to be used later during open() */
6164         for (i = 0; i < vsi->alloc_queue_pairs; i++) {
6165                 /* allocate space for both Tx and Rx in one shot */
6166                 tx_ring = kzalloc(sizeof(struct i40e_ring) * 2, GFP_KERNEL);
6167                 if (!tx_ring)
6168                         goto err_out;
6169
6170                 tx_ring->queue_index = i;
6171                 tx_ring->reg_idx = vsi->base_queue + i;
6172                 tx_ring->ring_active = false;
6173                 tx_ring->vsi = vsi;
6174                 tx_ring->netdev = vsi->netdev;
6175                 tx_ring->dev = &pf->pdev->dev;
6176                 tx_ring->count = vsi->num_desc;
6177                 tx_ring->size = 0;
6178                 tx_ring->dcb_tc = 0;
6179                 vsi->tx_rings[i] = tx_ring;
6180
6181                 rx_ring = &tx_ring[1];
6182                 rx_ring->queue_index = i;
6183                 rx_ring->reg_idx = vsi->base_queue + i;
6184                 rx_ring->ring_active = false;
6185                 rx_ring->vsi = vsi;
6186                 rx_ring->netdev = vsi->netdev;
6187                 rx_ring->dev = &pf->pdev->dev;
6188                 rx_ring->count = vsi->num_desc;
6189                 rx_ring->size = 0;
6190                 rx_ring->dcb_tc = 0;
6191                 if (pf->flags & I40E_FLAG_16BYTE_RX_DESC_ENABLED)
6192                         set_ring_16byte_desc_enabled(rx_ring);
6193                 else
6194                         clear_ring_16byte_desc_enabled(rx_ring);
6195                 vsi->rx_rings[i] = rx_ring;
6196         }
6197
6198         return 0;
6199
6200 err_out:
6201         i40e_vsi_clear_rings(vsi);
6202         return -ENOMEM;
6203 }
6204
6205 /**
6206  * i40e_reserve_msix_vectors - Reserve MSI-X vectors in the kernel
6207  * @pf: board private structure
6208  * @vectors: the number of MSI-X vectors to request
6209  *
6210  * Returns the number of vectors reserved, or error
6211  **/
6212 static int i40e_reserve_msix_vectors(struct i40e_pf *pf, int vectors)
6213 {
6214         vectors = pci_enable_msix_range(pf->pdev, pf->msix_entries,
6215                                         I40E_MIN_MSIX, vectors);
6216         if (vectors < 0) {
6217                 dev_info(&pf->pdev->dev,
6218                          "MSI-X vector reservation failed: %d\n", vectors);
6219                 vectors = 0;
6220         }
6221
6222         return vectors;
6223 }
6224
6225 /**
6226  * i40e_init_msix - Setup the MSIX capability
6227  * @pf: board private structure
6228  *
6229  * Work with the OS to set up the MSIX vectors needed.
6230  *
6231  * Returns 0 on success, negative on failure
6232  **/
6233 static int i40e_init_msix(struct i40e_pf *pf)
6234 {
6235         i40e_status err = 0;
6236         struct i40e_hw *hw = &pf->hw;
6237         int v_budget, i;
6238         int vec;
6239
6240         if (!(pf->flags & I40E_FLAG_MSIX_ENABLED))
6241                 return -ENODEV;
6242
6243         /* The number of vectors we'll request will be comprised of:
6244          *   - Add 1 for "other" cause for Admin Queue events, etc.
6245          *   - The number of LAN queue pairs
6246          *      - Queues being used for RSS.
6247          *              We don't need as many as max_rss_size vectors.
6248          *              use rss_size instead in the calculation since that
6249          *              is governed by number of cpus in the system.
6250          *      - assumes symmetric Tx/Rx pairing
6251          *   - The number of VMDq pairs
6252          * Once we count this up, try the request.
6253          *
6254          * If we can't get what we want, we'll simplify to nearly nothing
6255          * and try again.  If that still fails, we punt.
6256          */
6257         pf->num_lan_msix = pf->num_lan_qps - (pf->rss_size_max - pf->rss_size);
6258         pf->num_vmdq_msix = pf->num_vmdq_qps;
6259         v_budget = 1 + pf->num_lan_msix;
6260         v_budget += (pf->num_vmdq_vsis * pf->num_vmdq_msix);
6261         if (pf->flags & I40E_FLAG_FD_SB_ENABLED)
6262                 v_budget++;
6263
6264         /* Scale down if necessary, and the rings will share vectors */
6265         v_budget = min_t(int, v_budget, hw->func_caps.num_msix_vectors);
6266
6267         pf->msix_entries = kcalloc(v_budget, sizeof(struct msix_entry),
6268                                    GFP_KERNEL);
6269         if (!pf->msix_entries)
6270                 return -ENOMEM;
6271
6272         for (i = 0; i < v_budget; i++)
6273                 pf->msix_entries[i].entry = i;
6274         vec = i40e_reserve_msix_vectors(pf, v_budget);
6275
6276         if (vec != v_budget) {
6277                 /* If we have limited resources, we will start with no vectors
6278                  * for the special features and then allocate vectors to some
6279                  * of these features based on the policy and at the end disable
6280                  * the features that did not get any vectors.
6281                  */
6282                 pf->num_vmdq_msix = 0;
6283         }
6284
6285         if (vec < I40E_MIN_MSIX) {
6286                 pf->flags &= ~I40E_FLAG_MSIX_ENABLED;
6287                 kfree(pf->msix_entries);
6288                 pf->msix_entries = NULL;
6289                 return -ENODEV;
6290
6291         } else if (vec == I40E_MIN_MSIX) {
6292                 /* Adjust for minimal MSIX use */
6293                 pf->num_vmdq_vsis = 0;
6294                 pf->num_vmdq_qps = 0;
6295                 pf->num_lan_qps = 1;
6296                 pf->num_lan_msix = 1;
6297
6298         } else if (vec != v_budget) {
6299                 /* reserve the misc vector */
6300                 vec--;
6301
6302                 /* Scale vector usage down */
6303                 pf->num_vmdq_msix = 1;    /* force VMDqs to only one vector */
6304                 pf->num_vmdq_vsis = 1;
6305
6306                 /* partition out the remaining vectors */
6307                 switch (vec) {
6308                 case 2:
6309                         pf->num_lan_msix = 1;
6310                         break;
6311                 case 3:
6312                         pf->num_lan_msix = 2;
6313                         break;
6314                 default:
6315                         pf->num_lan_msix = min_t(int, (vec / 2),
6316                                                  pf->num_lan_qps);
6317                         pf->num_vmdq_vsis = min_t(int, (vec - pf->num_lan_msix),
6318                                                   I40E_DEFAULT_NUM_VMDQ_VSI);
6319                         break;
6320                 }
6321         }
6322
6323         if ((pf->flags & I40E_FLAG_VMDQ_ENABLED) &&
6324             (pf->num_vmdq_msix == 0)) {
6325                 dev_info(&pf->pdev->dev, "VMDq disabled, not enough MSI-X vectors\n");
6326                 pf->flags &= ~I40E_FLAG_VMDQ_ENABLED;
6327         }
6328         return err;
6329 }
6330
6331 /**
6332  * i40e_vsi_alloc_q_vector - Allocate memory for a single interrupt vector
6333  * @vsi: the VSI being configured
6334  * @v_idx: index of the vector in the vsi struct
6335  *
6336  * We allocate one q_vector.  If allocation fails we return -ENOMEM.
6337  **/
6338 static int i40e_vsi_alloc_q_vector(struct i40e_vsi *vsi, int v_idx)
6339 {
6340         struct i40e_q_vector *q_vector;
6341
6342         /* allocate q_vector */
6343         q_vector = kzalloc(sizeof(struct i40e_q_vector), GFP_KERNEL);
6344         if (!q_vector)
6345                 return -ENOMEM;
6346
6347         q_vector->vsi = vsi;
6348         q_vector->v_idx = v_idx;
6349         cpumask_set_cpu(v_idx, &q_vector->affinity_mask);
6350         if (vsi->netdev)
6351                 netif_napi_add(vsi->netdev, &q_vector->napi,
6352                                i40e_napi_poll, NAPI_POLL_WEIGHT);
6353
6354         q_vector->rx.latency_range = I40E_LOW_LATENCY;
6355         q_vector->tx.latency_range = I40E_LOW_LATENCY;
6356
6357         /* tie q_vector and vsi together */
6358         vsi->q_vectors[v_idx] = q_vector;
6359
6360         return 0;
6361 }
6362
6363 /**
6364  * i40e_vsi_alloc_q_vectors - Allocate memory for interrupt vectors
6365  * @vsi: the VSI being configured
6366  *
6367  * We allocate one q_vector per queue interrupt.  If allocation fails we
6368  * return -ENOMEM.
6369  **/
6370 static int i40e_vsi_alloc_q_vectors(struct i40e_vsi *vsi)
6371 {
6372         struct i40e_pf *pf = vsi->back;
6373         int v_idx, num_q_vectors;
6374         int err;
6375
6376         /* if not MSIX, give the one vector only to the LAN VSI */
6377         if (pf->flags & I40E_FLAG_MSIX_ENABLED)
6378                 num_q_vectors = vsi->num_q_vectors;
6379         else if (vsi == pf->vsi[pf->lan_vsi])
6380                 num_q_vectors = 1;
6381         else
6382                 return -EINVAL;
6383
6384         for (v_idx = 0; v_idx < num_q_vectors; v_idx++) {
6385                 err = i40e_vsi_alloc_q_vector(vsi, v_idx);
6386                 if (err)
6387                         goto err_out;
6388         }
6389
6390         return 0;
6391
6392 err_out:
6393         while (v_idx--)
6394                 i40e_free_q_vector(vsi, v_idx);
6395
6396         return err;
6397 }
6398
6399 /**
6400  * i40e_init_interrupt_scheme - Determine proper interrupt scheme
6401  * @pf: board private structure to initialize
6402  **/
6403 static void i40e_init_interrupt_scheme(struct i40e_pf *pf)
6404 {
6405         int err = 0;
6406
6407         if (pf->flags & I40E_FLAG_MSIX_ENABLED) {
6408                 err = i40e_init_msix(pf);
6409                 if (err) {
6410                         pf->flags &= ~(I40E_FLAG_MSIX_ENABLED   |
6411                                        I40E_FLAG_RSS_ENABLED    |
6412                                        I40E_FLAG_DCB_CAPABLE    |
6413                                        I40E_FLAG_SRIOV_ENABLED  |
6414                                        I40E_FLAG_FD_SB_ENABLED  |
6415                                        I40E_FLAG_FD_ATR_ENABLED |
6416                                        I40E_FLAG_VMDQ_ENABLED);
6417
6418                         /* rework the queue expectations without MSIX */
6419                         i40e_determine_queue_usage(pf);
6420                 }
6421         }
6422
6423         if (!(pf->flags & I40E_FLAG_MSIX_ENABLED) &&
6424             (pf->flags & I40E_FLAG_MSI_ENABLED)) {
6425                 dev_info(&pf->pdev->dev, "MSI-X not available, trying MSI\n");
6426                 err = pci_enable_msi(pf->pdev);
6427                 if (err) {
6428                         dev_info(&pf->pdev->dev, "MSI init failed - %d\n", err);
6429                         pf->flags &= ~I40E_FLAG_MSI_ENABLED;
6430                 }
6431         }
6432
6433         if (!(pf->flags & (I40E_FLAG_MSIX_ENABLED | I40E_FLAG_MSI_ENABLED)))
6434                 dev_info(&pf->pdev->dev, "MSI-X and MSI not available, falling back to Legacy IRQ\n");
6435
6436         /* track first vector for misc interrupts */
6437         err = i40e_get_lump(pf, pf->irq_pile, 1, I40E_PILE_VALID_BIT-1);
6438 }
6439
6440 /**
6441  * i40e_setup_misc_vector - Setup the misc vector to handle non queue events
6442  * @pf: board private structure
6443  *
6444  * This sets up the handler for MSIX 0, which is used to manage the
6445  * non-queue interrupts, e.g. AdminQ and errors.  This is not used
6446  * when in MSI or Legacy interrupt mode.
6447  **/
6448 static int i40e_setup_misc_vector(struct i40e_pf *pf)
6449 {
6450         struct i40e_hw *hw = &pf->hw;
6451         int err = 0;
6452
6453         /* Only request the irq if this is the first time through, and
6454          * not when we're rebuilding after a Reset
6455          */
6456         if (!test_bit(__I40E_RESET_RECOVERY_PENDING, &pf->state)) {
6457                 err = request_irq(pf->msix_entries[0].vector,
6458                                   i40e_intr, 0, pf->misc_int_name, pf);
6459                 if (err) {
6460                         dev_info(&pf->pdev->dev,
6461                                  "request_irq for %s failed: %d\n",
6462                                  pf->misc_int_name, err);
6463                         return -EFAULT;
6464                 }
6465         }
6466
6467         i40e_enable_misc_int_causes(hw);
6468
6469         /* associate no queues to the misc vector */
6470         wr32(hw, I40E_PFINT_LNKLST0, I40E_QUEUE_END_OF_LIST);
6471         wr32(hw, I40E_PFINT_ITR0(I40E_RX_ITR), I40E_ITR_8K);
6472
6473         i40e_flush(hw);
6474
6475         i40e_irq_dynamic_enable_icr0(pf);
6476
6477         return err;
6478 }
6479
6480 /**
6481  * i40e_config_rss - Prepare for RSS if used
6482  * @pf: board private structure
6483  **/
6484 static int i40e_config_rss(struct i40e_pf *pf)
6485 {
6486         /* Set of random keys generated using kernel random number generator */
6487         static const u32 seed[I40E_PFQF_HKEY_MAX_INDEX + 1] = {0x41b01687,
6488                                 0x183cfd8c, 0xce880440, 0x580cbc3c, 0x35897377,
6489                                 0x328b25e1, 0x4fa98922, 0xb7d90c14, 0xd5bad70d,
6490                                 0xcd15a2c1, 0xe8580225, 0x4a1e9d11, 0xfe5731be};
6491         struct i40e_hw *hw = &pf->hw;
6492         u32 lut = 0;
6493         int i, j;
6494         u64 hena;
6495
6496         /* Fill out hash function seed */
6497         for (i = 0; i <= I40E_PFQF_HKEY_MAX_INDEX; i++)
6498                 wr32(hw, I40E_PFQF_HKEY(i), seed[i]);
6499
6500         /* By default we enable TCP/UDP with IPv4/IPv6 ptypes */
6501         hena = (u64)rd32(hw, I40E_PFQF_HENA(0)) |
6502                 ((u64)rd32(hw, I40E_PFQF_HENA(1)) << 32);
6503         hena |= I40E_DEFAULT_RSS_HENA;
6504         wr32(hw, I40E_PFQF_HENA(0), (u32)hena);
6505         wr32(hw, I40E_PFQF_HENA(1), (u32)(hena >> 32));
6506
6507         /* Populate the LUT with max no. of queues in round robin fashion */
6508         for (i = 0, j = 0; i < pf->hw.func_caps.rss_table_size; i++, j++) {
6509
6510                 /* The assumption is that lan qp count will be the highest
6511                  * qp count for any PF VSI that needs RSS.
6512                  * If multiple VSIs need RSS support, all the qp counts
6513                  * for those VSIs should be a power of 2 for RSS to work.
6514                  * If LAN VSI is the only consumer for RSS then this requirement
6515                  * is not necessary.
6516                  */
6517                 if (j == pf->rss_size)
6518                         j = 0;
6519                 /* lut = 4-byte sliding window of 4 lut entries */
6520                 lut = (lut << 8) | (j &
6521                          ((0x1 << pf->hw.func_caps.rss_table_entry_width) - 1));
6522                 /* On i = 3, we have 4 entries in lut; write to the register */
6523                 if ((i & 3) == 3)
6524                         wr32(hw, I40E_PFQF_HLUT(i >> 2), lut);
6525         }
6526         i40e_flush(hw);
6527
6528         return 0;
6529 }
6530
6531 /**
6532  * i40e_reconfig_rss_queues - change number of queues for rss and rebuild
6533  * @pf: board private structure
6534  * @queue_count: the requested queue count for rss.
6535  *
6536  * returns 0 if rss is not enabled, if enabled returns the final rss queue
6537  * count which may be different from the requested queue count.
6538  **/
6539 int i40e_reconfig_rss_queues(struct i40e_pf *pf, int queue_count)
6540 {
6541         if (!(pf->flags & I40E_FLAG_RSS_ENABLED))
6542                 return 0;
6543
6544         queue_count = min_t(int, queue_count, pf->rss_size_max);
6545
6546         if (queue_count != pf->rss_size) {
6547                 i40e_prep_for_reset(pf);
6548
6549                 pf->rss_size = queue_count;
6550
6551                 i40e_reset_and_rebuild(pf, true);
6552                 i40e_config_rss(pf);
6553         }
6554         dev_info(&pf->pdev->dev, "RSS count:  %d\n", pf->rss_size);
6555         return pf->rss_size;
6556 }
6557
6558 /**
6559  * i40e_sw_init - Initialize general software structures (struct i40e_pf)
6560  * @pf: board private structure to initialize
6561  *
6562  * i40e_sw_init initializes the Adapter private data structure.
6563  * Fields are initialized based on PCI device information and
6564  * OS network device settings (MTU size).
6565  **/
6566 static int i40e_sw_init(struct i40e_pf *pf)
6567 {
6568         int err = 0;
6569         int size;
6570
6571         pf->msg_enable = netif_msg_init(I40E_DEFAULT_MSG_ENABLE,
6572                                 (NETIF_MSG_DRV|NETIF_MSG_PROBE|NETIF_MSG_LINK));
6573         pf->hw.debug_mask = pf->msg_enable | I40E_DEBUG_DIAG;
6574         if (debug != -1 && debug != I40E_DEFAULT_MSG_ENABLE) {
6575                 if (I40E_DEBUG_USER & debug)
6576                         pf->hw.debug_mask = debug;
6577                 pf->msg_enable = netif_msg_init((debug & ~I40E_DEBUG_USER),
6578                                                 I40E_DEFAULT_MSG_ENABLE);
6579         }
6580
6581         /* Set default capability flags */
6582         pf->flags = I40E_FLAG_RX_CSUM_ENABLED |
6583                     I40E_FLAG_MSI_ENABLED     |
6584                     I40E_FLAG_MSIX_ENABLED    |
6585                     I40E_FLAG_RX_1BUF_ENABLED;
6586
6587         /* Set default ITR */
6588         pf->rx_itr_default = I40E_ITR_DYNAMIC | I40E_ITR_RX_DEF;
6589         pf->tx_itr_default = I40E_ITR_DYNAMIC | I40E_ITR_TX_DEF;
6590
6591         /* Depending on PF configurations, it is possible that the RSS
6592          * maximum might end up larger than the available queues
6593          */
6594         pf->rss_size_max = 0x1 << pf->hw.func_caps.rss_table_entry_width;
6595         pf->rss_size_max = min_t(int, pf->rss_size_max,
6596                                  pf->hw.func_caps.num_tx_qp);
6597         if (pf->hw.func_caps.rss) {
6598                 pf->flags |= I40E_FLAG_RSS_ENABLED;
6599                 pf->rss_size = min_t(int, pf->rss_size_max, num_online_cpus());
6600         } else {
6601                 pf->rss_size = 1;
6602         }
6603
6604         /* MFP mode enabled */
6605         if (pf->hw.func_caps.npar_enable || pf->hw.func_caps.mfp_mode_1) {
6606                 pf->flags |= I40E_FLAG_MFP_ENABLED;
6607                 dev_info(&pf->pdev->dev, "MFP mode Enabled\n");
6608         }
6609
6610         /* FW/NVM is not yet fixed in this regard */
6611         if ((pf->hw.func_caps.fd_filters_guaranteed > 0) ||
6612             (pf->hw.func_caps.fd_filters_best_effort > 0)) {
6613                 pf->flags |= I40E_FLAG_FD_ATR_ENABLED;
6614                 pf->atr_sample_rate = I40E_DEFAULT_ATR_SAMPLE_RATE;
6615                 /* Setup a counter for fd_atr per pf */
6616                 pf->fd_atr_cnt_idx = I40E_FD_ATR_STAT_IDX(pf->hw.pf_id);
6617                 if (!(pf->flags & I40E_FLAG_MFP_ENABLED)) {
6618                         pf->flags |= I40E_FLAG_FD_SB_ENABLED;
6619                         /* Setup a counter for fd_sb per pf */
6620                         pf->fd_sb_cnt_idx = I40E_FD_SB_STAT_IDX(pf->hw.pf_id);
6621                 } else {
6622                         dev_info(&pf->pdev->dev,
6623                                  "Flow Director Sideband mode Disabled in MFP mode\n");
6624                 }
6625                 pf->fdir_pf_filter_count =
6626                                  pf->hw.func_caps.fd_filters_guaranteed;
6627                 pf->hw.fdir_shared_filter_count =
6628                                  pf->hw.func_caps.fd_filters_best_effort;
6629         }
6630
6631         if (pf->hw.func_caps.vmdq) {
6632                 pf->flags |= I40E_FLAG_VMDQ_ENABLED;
6633                 pf->num_vmdq_vsis = I40E_DEFAULT_NUM_VMDQ_VSI;
6634                 pf->num_vmdq_qps = I40E_DEFAULT_QUEUES_PER_VMDQ;
6635         }
6636
6637 #ifdef CONFIG_PCI_IOV
6638         if (pf->hw.func_caps.num_vfs) {
6639                 pf->num_vf_qps = I40E_DEFAULT_QUEUES_PER_VF;
6640                 pf->flags |= I40E_FLAG_SRIOV_ENABLED;
6641                 pf->num_req_vfs = min_t(int,
6642                                         pf->hw.func_caps.num_vfs,
6643                                         I40E_MAX_VF_COUNT);
6644         }
6645 #endif /* CONFIG_PCI_IOV */
6646         pf->eeprom_version = 0xDEAD;
6647         pf->lan_veb = I40E_NO_VEB;
6648         pf->lan_vsi = I40E_NO_VSI;
6649
6650         /* set up queue assignment tracking */
6651         size = sizeof(struct i40e_lump_tracking)
6652                 + (sizeof(u16) * pf->hw.func_caps.num_tx_qp);
6653         pf->qp_pile = kzalloc(size, GFP_KERNEL);
6654         if (!pf->qp_pile) {
6655                 err = -ENOMEM;
6656                 goto sw_init_done;
6657         }
6658         pf->qp_pile->num_entries = pf->hw.func_caps.num_tx_qp;
6659         pf->qp_pile->search_hint = 0;
6660
6661         /* set up vector assignment tracking */
6662         size = sizeof(struct i40e_lump_tracking)
6663                 + (sizeof(u16) * pf->hw.func_caps.num_msix_vectors);
6664         pf->irq_pile = kzalloc(size, GFP_KERNEL);
6665         if (!pf->irq_pile) {
6666                 kfree(pf->qp_pile);
6667                 err = -ENOMEM;
6668                 goto sw_init_done;
6669         }
6670         pf->irq_pile->num_entries = pf->hw.func_caps.num_msix_vectors;
6671         pf->irq_pile->search_hint = 0;
6672
6673         mutex_init(&pf->switch_mutex);
6674
6675 sw_init_done:
6676         return err;
6677 }
6678
6679 /**
6680  * i40e_set_ntuple - set the ntuple feature flag and take action
6681  * @pf: board private structure to initialize
6682  * @features: the feature set that the stack is suggesting
6683  *
6684  * returns a bool to indicate if reset needs to happen
6685  **/
6686 bool i40e_set_ntuple(struct i40e_pf *pf, netdev_features_t features)
6687 {
6688         bool need_reset = false;
6689
6690         /* Check if Flow Director n-tuple support was enabled or disabled.  If
6691          * the state changed, we need to reset.
6692          */
6693         if (features & NETIF_F_NTUPLE) {
6694                 /* Enable filters and mark for reset */
6695                 if (!(pf->flags & I40E_FLAG_FD_SB_ENABLED))
6696                         need_reset = true;
6697                 pf->flags |= I40E_FLAG_FD_SB_ENABLED;
6698         } else {
6699                 /* turn off filters, mark for reset and clear SW filter list */
6700                 if (pf->flags & I40E_FLAG_FD_SB_ENABLED) {
6701                         need_reset = true;
6702                         i40e_fdir_filter_exit(pf);
6703                 }
6704                 pf->flags &= ~I40E_FLAG_FD_SB_ENABLED;
6705                 /* if ATR was disabled it can be re-enabled. */
6706                 if (!(pf->flags & I40E_FLAG_FD_ATR_ENABLED))
6707                         pf->flags |= I40E_FLAG_FD_ATR_ENABLED;
6708         }
6709         return need_reset;
6710 }
6711
6712 /**
6713  * i40e_set_features - set the netdev feature flags
6714  * @netdev: ptr to the netdev being adjusted
6715  * @features: the feature set that the stack is suggesting
6716  **/
6717 static int i40e_set_features(struct net_device *netdev,
6718                              netdev_features_t features)
6719 {
6720         struct i40e_netdev_priv *np = netdev_priv(netdev);
6721         struct i40e_vsi *vsi = np->vsi;
6722         struct i40e_pf *pf = vsi->back;
6723         bool need_reset;
6724
6725         if (features & NETIF_F_HW_VLAN_CTAG_RX)
6726                 i40e_vlan_stripping_enable(vsi);
6727         else
6728                 i40e_vlan_stripping_disable(vsi);
6729
6730         need_reset = i40e_set_ntuple(pf, features);
6731
6732         if (need_reset)
6733                 i40e_do_reset(pf, (1 << __I40E_PF_RESET_REQUESTED));
6734
6735         return 0;
6736 }
6737
6738 #ifdef CONFIG_I40E_VXLAN
6739 /**
6740  * i40e_get_vxlan_port_idx - Lookup a possibly offloaded for Rx UDP port
6741  * @pf: board private structure
6742  * @port: The UDP port to look up
6743  *
6744  * Returns the index number or I40E_MAX_PF_UDP_OFFLOAD_PORTS if port not found
6745  **/
6746 static u8 i40e_get_vxlan_port_idx(struct i40e_pf *pf, __be16 port)
6747 {
6748         u8 i;
6749
6750         for (i = 0; i < I40E_MAX_PF_UDP_OFFLOAD_PORTS; i++) {
6751                 if (pf->vxlan_ports[i] == port)
6752                         return i;
6753         }
6754
6755         return i;
6756 }
6757
6758 /**
6759  * i40e_add_vxlan_port - Get notifications about VXLAN ports that come up
6760  * @netdev: This physical port's netdev
6761  * @sa_family: Socket Family that VXLAN is notifying us about
6762  * @port: New UDP port number that VXLAN started listening to
6763  **/
6764 static void i40e_add_vxlan_port(struct net_device *netdev,
6765                                 sa_family_t sa_family, __be16 port)
6766 {
6767         struct i40e_netdev_priv *np = netdev_priv(netdev);
6768         struct i40e_vsi *vsi = np->vsi;
6769         struct i40e_pf *pf = vsi->back;
6770         u8 next_idx;
6771         u8 idx;
6772
6773         if (sa_family == AF_INET6)
6774                 return;
6775
6776         idx = i40e_get_vxlan_port_idx(pf, port);
6777
6778         /* Check if port already exists */
6779         if (idx < I40E_MAX_PF_UDP_OFFLOAD_PORTS) {
6780                 netdev_info(netdev, "Port %d already offloaded\n", ntohs(port));
6781                 return;
6782         }
6783
6784         /* Now check if there is space to add the new port */
6785         next_idx = i40e_get_vxlan_port_idx(pf, 0);
6786
6787         if (next_idx == I40E_MAX_PF_UDP_OFFLOAD_PORTS) {
6788                 netdev_info(netdev, "Maximum number of UDP ports reached, not adding port %d\n",
6789                             ntohs(port));
6790                 return;
6791         }
6792
6793         /* New port: add it and mark its index in the bitmap */
6794         pf->vxlan_ports[next_idx] = port;
6795         pf->pending_vxlan_bitmap |= (1 << next_idx);
6796
6797         pf->flags |= I40E_FLAG_VXLAN_FILTER_SYNC;
6798 }
6799
6800 /**
6801  * i40e_del_vxlan_port - Get notifications about VXLAN ports that go away
6802  * @netdev: This physical port's netdev
6803  * @sa_family: Socket Family that VXLAN is notifying us about
6804  * @port: UDP port number that VXLAN stopped listening to
6805  **/
6806 static void i40e_del_vxlan_port(struct net_device *netdev,
6807                                 sa_family_t sa_family, __be16 port)
6808 {
6809         struct i40e_netdev_priv *np = netdev_priv(netdev);
6810         struct i40e_vsi *vsi = np->vsi;
6811         struct i40e_pf *pf = vsi->back;
6812         u8 idx;
6813
6814         if (sa_family == AF_INET6)
6815                 return;
6816
6817         idx = i40e_get_vxlan_port_idx(pf, port);
6818
6819         /* Check if port already exists */
6820         if (idx < I40E_MAX_PF_UDP_OFFLOAD_PORTS) {
6821                 /* if port exists, set it to 0 (mark for deletion)
6822                  * and make it pending
6823                  */
6824                 pf->vxlan_ports[idx] = 0;
6825
6826                 pf->pending_vxlan_bitmap |= (1 << idx);
6827
6828                 pf->flags |= I40E_FLAG_VXLAN_FILTER_SYNC;
6829         } else {
6830                 netdev_warn(netdev, "Port %d was not found, not deleting\n",
6831                             ntohs(port));
6832         }
6833 }
6834
6835 #endif
6836 #ifdef HAVE_FDB_OPS
6837 #ifdef USE_CONST_DEV_UC_CHAR
6838 static int i40e_ndo_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],
6839                             struct net_device *dev,
6840                             const unsigned char *addr,
6841                             u16 flags)
6842 #else
6843 static int i40e_ndo_fdb_add(struct ndmsg *ndm,
6844                             struct net_device *dev,
6845                             unsigned char *addr,
6846                             u16 flags)
6847 #endif
6848 {
6849         struct i40e_netdev_priv *np = netdev_priv(dev);
6850         struct i40e_pf *pf = np->vsi->back;
6851         int err = 0;
6852
6853         if (!(pf->flags & I40E_FLAG_SRIOV_ENABLED))
6854                 return -EOPNOTSUPP;
6855
6856         /* Hardware does not support aging addresses so if a
6857          * ndm_state is given only allow permanent addresses
6858          */
6859         if (ndm->ndm_state && !(ndm->ndm_state & NUD_PERMANENT)) {
6860                 netdev_info(dev, "FDB only supports static addresses\n");
6861                 return -EINVAL;
6862         }
6863
6864         if (is_unicast_ether_addr(addr) || is_link_local_ether_addr(addr))
6865                 err = dev_uc_add_excl(dev, addr);
6866         else if (is_multicast_ether_addr(addr))
6867                 err = dev_mc_add_excl(dev, addr);
6868         else
6869                 err = -EINVAL;
6870
6871         /* Only return duplicate errors if NLM_F_EXCL is set */
6872         if (err == -EEXIST && !(flags & NLM_F_EXCL))
6873                 err = 0;
6874
6875         return err;
6876 }
6877
6878 #ifndef USE_DEFAULT_FDB_DEL_DUMP
6879 #ifdef USE_CONST_DEV_UC_CHAR
6880 static int i40e_ndo_fdb_del(struct ndmsg *ndm,
6881                             struct net_device *dev,
6882                             const unsigned char *addr)
6883 #else
6884 static int i40e_ndo_fdb_del(struct ndmsg *ndm,
6885                             struct net_device *dev,
6886                             unsigned char *addr)
6887 #endif
6888 {
6889         struct i40e_netdev_priv *np = netdev_priv(dev);
6890         struct i40e_pf *pf = np->vsi->back;
6891         int err = -EOPNOTSUPP;
6892
6893         if (ndm->ndm_state & NUD_PERMANENT) {
6894                 netdev_info(dev, "FDB only supports static addresses\n");
6895                 return -EINVAL;
6896         }
6897
6898         if (pf->flags & I40E_FLAG_SRIOV_ENABLED) {
6899                 if (is_unicast_ether_addr(addr))
6900                         err = dev_uc_del(dev, addr);
6901                 else if (is_multicast_ether_addr(addr))
6902                         err = dev_mc_del(dev, addr);
6903                 else
6904                         err = -EINVAL;
6905         }
6906
6907         return err;
6908 }
6909
6910 static int i40e_ndo_fdb_dump(struct sk_buff *skb,
6911                              struct netlink_callback *cb,
6912                              struct net_device *dev,
6913                              int idx)
6914 {
6915         struct i40e_netdev_priv *np = netdev_priv(dev);
6916         struct i40e_pf *pf = np->vsi->back;
6917
6918         if (pf->flags & I40E_FLAG_SRIOV_ENABLED)
6919                 idx = ndo_dflt_fdb_dump(skb, cb, dev, idx);
6920
6921         return idx;
6922 }
6923
6924 #endif /* USE_DEFAULT_FDB_DEL_DUMP */
6925 #endif /* HAVE_FDB_OPS */
6926 static const struct net_device_ops i40e_netdev_ops = {
6927         .ndo_open               = i40e_open,
6928         .ndo_stop               = i40e_close,
6929         .ndo_start_xmit         = i40e_lan_xmit_frame,
6930         .ndo_get_stats64        = i40e_get_netdev_stats_struct,
6931         .ndo_set_rx_mode        = i40e_set_rx_mode,
6932         .ndo_validate_addr      = eth_validate_addr,
6933         .ndo_set_mac_address    = i40e_set_mac,
6934         .ndo_change_mtu         = i40e_change_mtu,
6935         .ndo_do_ioctl           = i40e_ioctl,
6936         .ndo_tx_timeout         = i40e_tx_timeout,
6937         .ndo_vlan_rx_add_vid    = i40e_vlan_rx_add_vid,
6938         .ndo_vlan_rx_kill_vid   = i40e_vlan_rx_kill_vid,
6939 #ifdef CONFIG_NET_POLL_CONTROLLER
6940         .ndo_poll_controller    = i40e_netpoll,
6941 #endif
6942         .ndo_setup_tc           = i40e_setup_tc,
6943         .ndo_set_features       = i40e_set_features,
6944         .ndo_set_vf_mac         = i40e_ndo_set_vf_mac,
6945         .ndo_set_vf_vlan        = i40e_ndo_set_vf_port_vlan,
6946         .ndo_set_vf_rate        = i40e_ndo_set_vf_bw,
6947         .ndo_get_vf_config      = i40e_ndo_get_vf_config,
6948         .ndo_set_vf_link_state  = i40e_ndo_set_vf_link_state,
6949         .ndo_set_vf_spoofchk    = i40e_ndo_set_vf_spoofck,
6950 #ifdef CONFIG_I40E_VXLAN
6951         .ndo_add_vxlan_port     = i40e_add_vxlan_port,
6952         .ndo_del_vxlan_port     = i40e_del_vxlan_port,
6953 #endif
6954 #ifdef HAVE_FDB_OPS
6955         .ndo_fdb_add            = i40e_ndo_fdb_add,
6956 #ifndef USE_DEFAULT_FDB_DEL_DUMP
6957         .ndo_fdb_del            = i40e_ndo_fdb_del,
6958         .ndo_fdb_dump           = i40e_ndo_fdb_dump,
6959 #endif
6960 #endif
6961 };
6962
6963 /**
6964  * i40e_config_netdev - Setup the netdev flags
6965  * @vsi: the VSI being configured
6966  *
6967  * Returns 0 on success, negative value on failure
6968  **/
6969 static int i40e_config_netdev(struct i40e_vsi *vsi)
6970 {
6971         u8 brdcast[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
6972         struct i40e_pf *pf = vsi->back;
6973         struct i40e_hw *hw = &pf->hw;
6974         struct i40e_netdev_priv *np;
6975         struct net_device *netdev;
6976         u8 mac_addr[ETH_ALEN];
6977         int etherdev_size;
6978
6979         etherdev_size = sizeof(struct i40e_netdev_priv);
6980         netdev = alloc_etherdev_mq(etherdev_size, vsi->alloc_queue_pairs);
6981         if (!netdev)
6982                 return -ENOMEM;
6983
6984         vsi->netdev = netdev;
6985         np = netdev_priv(netdev);
6986         np->vsi = vsi;
6987
6988         netdev->hw_enc_features |= NETIF_F_IP_CSUM       |
6989                                   NETIF_F_GSO_UDP_TUNNEL |
6990                                   NETIF_F_TSO;
6991
6992         netdev->features = NETIF_F_SG                  |
6993                            NETIF_F_IP_CSUM             |
6994                            NETIF_F_SCTP_CSUM           |
6995                            NETIF_F_HIGHDMA             |
6996                            NETIF_F_GSO_UDP_TUNNEL      |
6997                            NETIF_F_HW_VLAN_CTAG_TX     |
6998                            NETIF_F_HW_VLAN_CTAG_RX     |
6999                            NETIF_F_HW_VLAN_CTAG_FILTER |
7000                            NETIF_F_IPV6_CSUM           |
7001                            NETIF_F_TSO                 |
7002                            NETIF_F_TSO_ECN             |
7003                            NETIF_F_TSO6                |
7004                            NETIF_F_RXCSUM              |
7005                            NETIF_F_RXHASH              |
7006                            0;
7007
7008         if (!(pf->flags & I40E_FLAG_MFP_ENABLED))
7009                 netdev->features |= NETIF_F_NTUPLE;
7010
7011         /* copy netdev features into list of user selectable features */
7012         netdev->hw_features |= netdev->features;
7013
7014         if (vsi->type == I40E_VSI_MAIN) {
7015                 SET_NETDEV_DEV(netdev, &pf->pdev->dev);
7016                 ether_addr_copy(mac_addr, hw->mac.perm_addr);
7017                 /* The following two steps are necessary to prevent reception
7018                  * of tagged packets - by default the NVM loads a MAC-VLAN
7019                  * filter that will accept any tagged packet.  This is to
7020                  * prevent that during normal operations until a specific
7021                  * VLAN tag filter has been set.
7022                  */
7023                 i40e_rm_default_mac_filter(vsi, mac_addr);
7024                 i40e_add_filter(vsi, mac_addr, I40E_VLAN_ANY, false, true);
7025         } else {
7026                 /* relate the VSI_VMDQ name to the VSI_MAIN name */
7027                 snprintf(netdev->name, IFNAMSIZ, "%sv%%d",
7028                          pf->vsi[pf->lan_vsi]->netdev->name);
7029                 random_ether_addr(mac_addr);
7030                 i40e_add_filter(vsi, mac_addr, I40E_VLAN_ANY, false, false);
7031         }
7032         i40e_add_filter(vsi, brdcast, I40E_VLAN_ANY, false, false);
7033
7034         ether_addr_copy(netdev->dev_addr, mac_addr);
7035         ether_addr_copy(netdev->perm_addr, mac_addr);
7036         /* vlan gets same features (except vlan offload)
7037          * after any tweaks for specific VSI types
7038          */
7039         netdev->vlan_features = netdev->features & ~(NETIF_F_HW_VLAN_CTAG_TX |
7040                                                      NETIF_F_HW_VLAN_CTAG_RX |
7041                                                    NETIF_F_HW_VLAN_CTAG_FILTER);
7042         netdev->priv_flags |= IFF_UNICAST_FLT;
7043         netdev->priv_flags |= IFF_SUPP_NOFCS;
7044         /* Setup netdev TC information */
7045         i40e_vsi_config_netdev_tc(vsi, vsi->tc_config.enabled_tc);
7046
7047         netdev->netdev_ops = &i40e_netdev_ops;
7048         netdev->watchdog_timeo = 5 * HZ;
7049         i40e_set_ethtool_ops(netdev);
7050
7051         return 0;
7052 }
7053
7054 /**
7055  * i40e_vsi_delete - Delete a VSI from the switch
7056  * @vsi: the VSI being removed
7057  *
7058  * Returns 0 on success, negative value on failure
7059  **/
7060 static void i40e_vsi_delete(struct i40e_vsi *vsi)
7061 {
7062         /* remove default VSI is not allowed */
7063         if (vsi == vsi->back->vsi[vsi->back->lan_vsi])
7064                 return;
7065
7066         i40e_aq_delete_element(&vsi->back->hw, vsi->seid, NULL);
7067 }
7068
7069 /**
7070  * i40e_add_vsi - Add a VSI to the switch
7071  * @vsi: the VSI being configured
7072  *
7073  * This initializes a VSI context depending on the VSI type to be added and
7074  * passes it down to the add_vsi aq command.
7075  **/
7076 static int i40e_add_vsi(struct i40e_vsi *vsi)
7077 {
7078         int ret = -ENODEV;
7079         struct i40e_mac_filter *f, *ftmp;
7080         struct i40e_pf *pf = vsi->back;
7081         struct i40e_hw *hw = &pf->hw;
7082         struct i40e_vsi_context ctxt;
7083         u8 enabled_tc = 0x1; /* TC0 enabled */
7084         int f_count = 0;
7085
7086         memset(&ctxt, 0, sizeof(ctxt));
7087         switch (vsi->type) {
7088         case I40E_VSI_MAIN:
7089                 /* The PF's main VSI is already setup as part of the
7090                  * device initialization, so we'll not bother with
7091                  * the add_vsi call, but we will retrieve the current
7092                  * VSI context.
7093                  */
7094                 ctxt.seid = pf->main_vsi_seid;
7095                 ctxt.pf_num = pf->hw.pf_id;
7096                 ctxt.vf_num = 0;
7097                 ret = i40e_aq_get_vsi_params(&pf->hw, &ctxt, NULL);
7098                 ctxt.flags = I40E_AQ_VSI_TYPE_PF;
7099                 if (ret) {
7100                         dev_info(&pf->pdev->dev,
7101                                  "couldn't get pf vsi config, err %d, aq_err %d\n",
7102                                  ret, pf->hw.aq.asq_last_status);
7103                         return -ENOENT;
7104                 }
7105                 memcpy(&vsi->info, &ctxt.info, sizeof(ctxt.info));
7106                 vsi->info.valid_sections = 0;
7107
7108                 vsi->seid = ctxt.seid;
7109                 vsi->id = ctxt.vsi_number;
7110
7111                 enabled_tc = i40e_pf_get_tc_map(pf);
7112
7113                 /* MFP mode setup queue map and update VSI */
7114                 if (pf->flags & I40E_FLAG_MFP_ENABLED) {
7115                         memset(&ctxt, 0, sizeof(ctxt));
7116                         ctxt.seid = pf->main_vsi_seid;
7117                         ctxt.pf_num = pf->hw.pf_id;
7118                         ctxt.vf_num = 0;
7119                         i40e_vsi_setup_queue_map(vsi, &ctxt, enabled_tc, false);
7120                         ret = i40e_aq_update_vsi_params(hw, &ctxt, NULL);
7121                         if (ret) {
7122                                 dev_info(&pf->pdev->dev,
7123                                          "update vsi failed, aq_err=%d\n",
7124                                          pf->hw.aq.asq_last_status);
7125                                 ret = -ENOENT;
7126                                 goto err;
7127                         }
7128                         /* update the local VSI info queue map */
7129                         i40e_vsi_update_queue_map(vsi, &ctxt);
7130                         vsi->info.valid_sections = 0;
7131                 } else {
7132                         /* Default/Main VSI is only enabled for TC0
7133                          * reconfigure it to enable all TCs that are
7134                          * available on the port in SFP mode.
7135                          */
7136                         ret = i40e_vsi_config_tc(vsi, enabled_tc);
7137                         if (ret) {
7138                                 dev_info(&pf->pdev->dev,
7139                                          "failed to configure TCs for main VSI tc_map 0x%08x, err %d, aq_err %d\n",
7140                                          enabled_tc, ret,
7141                                          pf->hw.aq.asq_last_status);
7142                                 ret = -ENOENT;
7143                         }
7144                 }
7145                 break;
7146
7147         case I40E_VSI_FDIR:
7148                 ctxt.pf_num = hw->pf_id;
7149                 ctxt.vf_num = 0;
7150                 ctxt.uplink_seid = vsi->uplink_seid;
7151                 ctxt.connection_type = 0x1;     /* regular data port */
7152                 ctxt.flags = I40E_AQ_VSI_TYPE_PF;
7153                 i40e_vsi_setup_queue_map(vsi, &ctxt, enabled_tc, true);
7154                 break;
7155
7156         case I40E_VSI_VMDQ2:
7157                 ctxt.pf_num = hw->pf_id;
7158                 ctxt.vf_num = 0;
7159                 ctxt.uplink_seid = vsi->uplink_seid;
7160                 ctxt.connection_type = 0x1;     /* regular data port */
7161                 ctxt.flags = I40E_AQ_VSI_TYPE_VMDQ2;
7162
7163                 ctxt.info.valid_sections |= cpu_to_le16(I40E_AQ_VSI_PROP_SWITCH_VALID);
7164
7165                 /* This VSI is connected to VEB so the switch_id
7166                  * should be set to zero by default.
7167                  */
7168                 ctxt.info.switch_id = 0;
7169                 ctxt.info.switch_id |= cpu_to_le16(I40E_AQ_VSI_SW_ID_FLAG_LOCAL_LB);
7170                 ctxt.info.switch_id |= cpu_to_le16(I40E_AQ_VSI_SW_ID_FLAG_ALLOW_LB);
7171
7172                 /* Setup the VSI tx/rx queue map for TC0 only for now */
7173                 i40e_vsi_setup_queue_map(vsi, &ctxt, enabled_tc, true);
7174                 break;
7175
7176         case I40E_VSI_SRIOV:
7177                 ctxt.pf_num = hw->pf_id;
7178                 ctxt.vf_num = vsi->vf_id + hw->func_caps.vf_base_id;
7179                 ctxt.uplink_seid = vsi->uplink_seid;
7180                 ctxt.connection_type = 0x1;     /* regular data port */
7181                 ctxt.flags = I40E_AQ_VSI_TYPE_VF;
7182
7183                 ctxt.info.valid_sections |= cpu_to_le16(I40E_AQ_VSI_PROP_SWITCH_VALID);
7184
7185                 /* This VSI is connected to VEB so the switch_id
7186                  * should be set to zero by default.
7187                  */
7188                 ctxt.info.switch_id = cpu_to_le16(I40E_AQ_VSI_SW_ID_FLAG_ALLOW_LB);
7189
7190                 ctxt.info.valid_sections |= cpu_to_le16(I40E_AQ_VSI_PROP_VLAN_VALID);
7191                 ctxt.info.port_vlan_flags |= I40E_AQ_VSI_PVLAN_MODE_ALL;
7192                 if (pf->vf[vsi->vf_id].spoofchk) {
7193                         ctxt.info.valid_sections |=
7194                                 cpu_to_le16(I40E_AQ_VSI_PROP_SECURITY_VALID);
7195                         ctxt.info.sec_flags |=
7196                                 (I40E_AQ_VSI_SEC_FLAG_ENABLE_VLAN_CHK |
7197                                  I40E_AQ_VSI_SEC_FLAG_ENABLE_MAC_CHK);
7198                 }
7199                 /* Setup the VSI tx/rx queue map for TC0 only for now */
7200                 i40e_vsi_setup_queue_map(vsi, &ctxt, enabled_tc, true);
7201                 break;
7202
7203         default:
7204                 return -ENODEV;
7205         }
7206
7207         if (vsi->type != I40E_VSI_MAIN) {
7208                 ret = i40e_aq_add_vsi(hw, &ctxt, NULL);
7209                 if (ret) {
7210                         dev_info(&vsi->back->pdev->dev,
7211                                  "add vsi failed, aq_err=%d\n",
7212                                  vsi->back->hw.aq.asq_last_status);
7213                         ret = -ENOENT;
7214                         goto err;
7215                 }
7216                 memcpy(&vsi->info, &ctxt.info, sizeof(ctxt.info));
7217                 vsi->info.valid_sections = 0;
7218                 vsi->seid = ctxt.seid;
7219                 vsi->id = ctxt.vsi_number;
7220         }
7221
7222         /* If macvlan filters already exist, force them to get loaded */
7223         list_for_each_entry_safe(f, ftmp, &vsi->mac_filter_list, list) {
7224                 f->changed = true;
7225                 f_count++;
7226         }
7227         if (f_count) {
7228                 vsi->flags |= I40E_VSI_FLAG_FILTER_CHANGED;
7229                 pf->flags |= I40E_FLAG_FILTER_SYNC;
7230         }
7231
7232         /* Update VSI BW information */
7233         ret = i40e_vsi_get_bw_info(vsi);
7234         if (ret) {
7235                 dev_info(&pf->pdev->dev,
7236                          "couldn't get vsi bw info, err %d, aq_err %d\n",
7237                          ret, pf->hw.aq.asq_last_status);
7238                 /* VSI is already added so not tearing that up */
7239                 ret = 0;
7240         }
7241
7242 err:
7243         return ret;
7244 }
7245
7246 /**
7247  * i40e_vsi_release - Delete a VSI and free its resources
7248  * @vsi: the VSI being removed
7249  *
7250  * Returns 0 on success or < 0 on error
7251  **/
7252 int i40e_vsi_release(struct i40e_vsi *vsi)
7253 {
7254         struct i40e_mac_filter *f, *ftmp;
7255         struct i40e_veb *veb = NULL;
7256         struct i40e_pf *pf;
7257         u16 uplink_seid;
7258         int i, n;
7259
7260         pf = vsi->back;
7261
7262         /* release of a VEB-owner or last VSI is not allowed */
7263         if (vsi->flags & I40E_VSI_FLAG_VEB_OWNER) {
7264                 dev_info(&pf->pdev->dev, "VSI %d has existing VEB %d\n",
7265                          vsi->seid, vsi->uplink_seid);
7266                 return -ENODEV;
7267         }
7268         if (vsi == pf->vsi[pf->lan_vsi] &&
7269             !test_bit(__I40E_DOWN, &pf->state)) {
7270                 dev_info(&pf->pdev->dev, "Can't remove PF VSI\n");
7271                 return -ENODEV;
7272         }
7273
7274         uplink_seid = vsi->uplink_seid;
7275         if (vsi->type != I40E_VSI_SRIOV) {
7276                 if (vsi->netdev_registered) {
7277                         vsi->netdev_registered = false;
7278                         if (vsi->netdev) {
7279                                 /* results in a call to i40e_close() */
7280                                 unregister_netdev(vsi->netdev);
7281                         }
7282                 } else {
7283                         i40e_vsi_close(vsi);
7284                 }
7285                 i40e_vsi_disable_irq(vsi);
7286         }
7287
7288         list_for_each_entry_safe(f, ftmp, &vsi->mac_filter_list, list)
7289                 i40e_del_filter(vsi, f->macaddr, f->vlan,
7290                                 f->is_vf, f->is_netdev);
7291         i40e_sync_vsi_filters(vsi);
7292
7293         i40e_vsi_delete(vsi);
7294         i40e_vsi_free_q_vectors(vsi);
7295         if (vsi->netdev) {
7296                 free_netdev(vsi->netdev);
7297                 vsi->netdev = NULL;
7298         }
7299         i40e_vsi_clear_rings(vsi);
7300         i40e_vsi_clear(vsi);
7301
7302         /* If this was the last thing on the VEB, except for the
7303          * controlling VSI, remove the VEB, which puts the controlling
7304          * VSI onto the next level down in the switch.
7305          *
7306          * Well, okay, there's one more exception here: don't remove
7307          * the orphan VEBs yet.  We'll wait for an explicit remove request
7308          * from up the network stack.
7309          */
7310         for (n = 0, i = 0; i < pf->num_alloc_vsi; i++) {
7311                 if (pf->vsi[i] &&
7312                     pf->vsi[i]->uplink_seid == uplink_seid &&
7313                     (pf->vsi[i]->flags & I40E_VSI_FLAG_VEB_OWNER) == 0) {
7314                         n++;      /* count the VSIs */
7315                 }
7316         }
7317         for (i = 0; i < I40E_MAX_VEB; i++) {
7318                 if (!pf->veb[i])
7319                         continue;
7320                 if (pf->veb[i]->uplink_seid == uplink_seid)
7321                         n++;     /* count the VEBs */
7322                 if (pf->veb[i]->seid == uplink_seid)
7323                         veb = pf->veb[i];
7324         }
7325         if (n == 0 && veb && veb->uplink_seid != 0)
7326                 i40e_veb_release(veb);
7327
7328         return 0;
7329 }
7330
7331 /**
7332  * i40e_vsi_setup_vectors - Set up the q_vectors for the given VSI
7333  * @vsi: ptr to the VSI
7334  *
7335  * This should only be called after i40e_vsi_mem_alloc() which allocates the
7336  * corresponding SW VSI structure and initializes num_queue_pairs for the
7337  * newly allocated VSI.
7338  *
7339  * Returns 0 on success or negative on failure
7340  **/
7341 static int i40e_vsi_setup_vectors(struct i40e_vsi *vsi)
7342 {
7343         int ret = -ENOENT;
7344         struct i40e_pf *pf = vsi->back;
7345
7346         if (vsi->q_vectors[0]) {
7347                 dev_info(&pf->pdev->dev, "VSI %d has existing q_vectors\n",
7348                          vsi->seid);
7349                 return -EEXIST;
7350         }
7351
7352         if (vsi->base_vector) {
7353                 dev_info(&pf->pdev->dev, "VSI %d has non-zero base vector %d\n",
7354                          vsi->seid, vsi->base_vector);
7355                 return -EEXIST;
7356         }
7357
7358         ret = i40e_vsi_alloc_q_vectors(vsi);
7359         if (ret) {
7360                 dev_info(&pf->pdev->dev,
7361                          "failed to allocate %d q_vector for VSI %d, ret=%d\n",
7362                          vsi->num_q_vectors, vsi->seid, ret);
7363                 vsi->num_q_vectors = 0;
7364                 goto vector_setup_out;
7365         }
7366
7367         if (vsi->num_q_vectors)
7368                 vsi->base_vector = i40e_get_lump(pf, pf->irq_pile,
7369                                                  vsi->num_q_vectors, vsi->idx);
7370         if (vsi->base_vector < 0) {
7371                 dev_info(&pf->pdev->dev,
7372                          "failed to get queue tracking for VSI %d, err=%d\n",
7373                          vsi->seid, vsi->base_vector);
7374                 i40e_vsi_free_q_vectors(vsi);
7375                 ret = -ENOENT;
7376                 goto vector_setup_out;
7377         }
7378
7379 vector_setup_out:
7380         return ret;
7381 }
7382
7383 /**
7384  * i40e_vsi_reinit_setup - return and reallocate resources for a VSI
7385  * @vsi: pointer to the vsi.
7386  *
7387  * This re-allocates a vsi's queue resources.
7388  *
7389  * Returns pointer to the successfully allocated and configured VSI sw struct
7390  * on success, otherwise returns NULL on failure.
7391  **/
7392 static struct i40e_vsi *i40e_vsi_reinit_setup(struct i40e_vsi *vsi)
7393 {
7394         struct i40e_pf *pf = vsi->back;
7395         u8 enabled_tc;
7396         int ret;
7397
7398         i40e_put_lump(pf->qp_pile, vsi->base_queue, vsi->idx);
7399         i40e_vsi_clear_rings(vsi);
7400
7401         i40e_vsi_free_arrays(vsi, false);
7402         i40e_set_num_rings_in_vsi(vsi);
7403         ret = i40e_vsi_alloc_arrays(vsi, false);
7404         if (ret)
7405                 goto err_vsi;
7406
7407         ret = i40e_get_lump(pf, pf->qp_pile, vsi->alloc_queue_pairs, vsi->idx);
7408         if (ret < 0) {
7409                 dev_info(&pf->pdev->dev, "VSI %d get_lump failed %d\n",
7410                          vsi->seid, ret);
7411                 goto err_vsi;
7412         }
7413         vsi->base_queue = ret;
7414
7415         /* Update the FW view of the VSI. Force a reset of TC and queue
7416          * layout configurations.
7417          */
7418         enabled_tc = pf->vsi[pf->lan_vsi]->tc_config.enabled_tc;
7419         pf->vsi[pf->lan_vsi]->tc_config.enabled_tc = 0;
7420         pf->vsi[pf->lan_vsi]->seid = pf->main_vsi_seid;
7421         i40e_vsi_config_tc(pf->vsi[pf->lan_vsi], enabled_tc);
7422
7423         /* assign it some queues */
7424         ret = i40e_alloc_rings(vsi);
7425         if (ret)
7426                 goto err_rings;
7427
7428         /* map all of the rings to the q_vectors */
7429         i40e_vsi_map_rings_to_vectors(vsi);
7430         return vsi;
7431
7432 err_rings:
7433         i40e_vsi_free_q_vectors(vsi);
7434         if (vsi->netdev_registered) {
7435                 vsi->netdev_registered = false;
7436                 unregister_netdev(vsi->netdev);
7437                 free_netdev(vsi->netdev);
7438                 vsi->netdev = NULL;
7439         }
7440         i40e_aq_delete_element(&pf->hw, vsi->seid, NULL);
7441 err_vsi:
7442         i40e_vsi_clear(vsi);
7443         return NULL;
7444 }
7445
7446 /**
7447  * i40e_vsi_setup - Set up a VSI by a given type
7448  * @pf: board private structure
7449  * @type: VSI type
7450  * @uplink_seid: the switch element to link to
7451  * @param1: usage depends upon VSI type. For VF types, indicates VF id
7452  *
7453  * This allocates the sw VSI structure and its queue resources, then add a VSI
7454  * to the identified VEB.
7455  *
7456  * Returns pointer to the successfully allocated and configure VSI sw struct on
7457  * success, otherwise returns NULL on failure.
7458  **/
7459 struct i40e_vsi *i40e_vsi_setup(struct i40e_pf *pf, u8 type,
7460                                 u16 uplink_seid, u32 param1)
7461 {
7462         struct i40e_vsi *vsi = NULL;
7463         struct i40e_veb *veb = NULL;
7464         int ret, i;
7465         int v_idx;
7466
7467         /* The requested uplink_seid must be either
7468          *     - the PF's port seid
7469          *              no VEB is needed because this is the PF
7470          *              or this is a Flow Director special case VSI
7471          *     - seid of an existing VEB
7472          *     - seid of a VSI that owns an existing VEB
7473          *     - seid of a VSI that doesn't own a VEB
7474          *              a new VEB is created and the VSI becomes the owner
7475          *     - seid of the PF VSI, which is what creates the first VEB
7476          *              this is a special case of the previous
7477          *
7478          * Find which uplink_seid we were given and create a new VEB if needed
7479          */
7480         for (i = 0; i < I40E_MAX_VEB; i++) {
7481                 if (pf->veb[i] && pf->veb[i]->seid == uplink_seid) {
7482                         veb = pf->veb[i];
7483                         break;
7484                 }
7485         }
7486
7487         if (!veb && uplink_seid != pf->mac_seid) {
7488
7489                 for (i = 0; i < pf->num_alloc_vsi; i++) {
7490                         if (pf->vsi[i] && pf->vsi[i]->seid == uplink_seid) {
7491                                 vsi = pf->vsi[i];
7492                                 break;
7493                         }
7494                 }
7495                 if (!vsi) {
7496                         dev_info(&pf->pdev->dev, "no such uplink_seid %d\n",
7497                                  uplink_seid);
7498                         return NULL;
7499                 }
7500
7501                 if (vsi->uplink_seid == pf->mac_seid)
7502                         veb = i40e_veb_setup(pf, 0, pf->mac_seid, vsi->seid,
7503                                              vsi->tc_config.enabled_tc);
7504                 else if ((vsi->flags & I40E_VSI_FLAG_VEB_OWNER) == 0)
7505                         veb = i40e_veb_setup(pf, 0, vsi->uplink_seid, vsi->seid,
7506                                              vsi->tc_config.enabled_tc);
7507
7508                 for (i = 0; i < I40E_MAX_VEB && !veb; i++) {
7509                         if (pf->veb[i] && pf->veb[i]->seid == vsi->uplink_seid)
7510                                 veb = pf->veb[i];
7511                 }
7512                 if (!veb) {
7513                         dev_info(&pf->pdev->dev, "couldn't add VEB\n");
7514                         return NULL;
7515                 }
7516
7517                 vsi->flags |= I40E_VSI_FLAG_VEB_OWNER;
7518                 uplink_seid = veb->seid;
7519         }
7520
7521         /* get vsi sw struct */
7522         v_idx = i40e_vsi_mem_alloc(pf, type);
7523         if (v_idx < 0)
7524                 goto err_alloc;
7525         vsi = pf->vsi[v_idx];
7526         if (!vsi)
7527                 goto err_alloc;
7528         vsi->type = type;
7529         vsi->veb_idx = (veb ? veb->idx : I40E_NO_VEB);
7530
7531         if (type == I40E_VSI_MAIN)
7532                 pf->lan_vsi = v_idx;
7533         else if (type == I40E_VSI_SRIOV)
7534                 vsi->vf_id = param1;
7535         /* assign it some queues */
7536         ret = i40e_get_lump(pf, pf->qp_pile, vsi->alloc_queue_pairs,
7537                                 vsi->idx);
7538         if (ret < 0) {
7539                 dev_info(&pf->pdev->dev, "VSI %d get_lump failed %d\n",
7540                          vsi->seid, ret);
7541                 goto err_vsi;
7542         }
7543         vsi->base_queue = ret;
7544
7545         /* get a VSI from the hardware */
7546         vsi->uplink_seid = uplink_seid;
7547         ret = i40e_add_vsi(vsi);
7548         if (ret)
7549                 goto err_vsi;
7550
7551         switch (vsi->type) {
7552         /* setup the netdev if needed */
7553         case I40E_VSI_MAIN:
7554         case I40E_VSI_VMDQ2:
7555                 ret = i40e_config_netdev(vsi);
7556                 if (ret)
7557                         goto err_netdev;
7558                 ret = register_netdev(vsi->netdev);
7559                 if (ret)
7560                         goto err_netdev;
7561                 vsi->netdev_registered = true;
7562                 netif_carrier_off(vsi->netdev);
7563 #ifdef CONFIG_I40E_DCB
7564                 /* Setup DCB netlink interface */
7565                 i40e_dcbnl_setup(vsi);
7566 #endif /* CONFIG_I40E_DCB */
7567                 /* fall through */
7568
7569         case I40E_VSI_FDIR:
7570                 /* set up vectors and rings if needed */
7571                 ret = i40e_vsi_setup_vectors(vsi);
7572                 if (ret)
7573                         goto err_msix;
7574
7575                 ret = i40e_alloc_rings(vsi);
7576                 if (ret)
7577                         goto err_rings;
7578
7579                 /* map all of the rings to the q_vectors */
7580                 i40e_vsi_map_rings_to_vectors(vsi);
7581
7582                 i40e_vsi_reset_stats(vsi);
7583                 break;
7584
7585         default:
7586                 /* no netdev or rings for the other VSI types */
7587                 break;
7588         }
7589
7590         return vsi;
7591
7592 err_rings:
7593         i40e_vsi_free_q_vectors(vsi);
7594 err_msix:
7595         if (vsi->netdev_registered) {
7596                 vsi->netdev_registered = false;
7597                 unregister_netdev(vsi->netdev);
7598                 free_netdev(vsi->netdev);
7599                 vsi->netdev = NULL;
7600         }
7601 err_netdev:
7602         i40e_aq_delete_element(&pf->hw, vsi->seid, NULL);
7603 err_vsi:
7604         i40e_vsi_clear(vsi);
7605 err_alloc:
7606         return NULL;
7607 }
7608
7609 /**
7610  * i40e_veb_get_bw_info - Query VEB BW information
7611  * @veb: the veb to query
7612  *
7613  * Query the Tx scheduler BW configuration data for given VEB
7614  **/
7615 static int i40e_veb_get_bw_info(struct i40e_veb *veb)
7616 {
7617         struct i40e_aqc_query_switching_comp_ets_config_resp ets_data;
7618         struct i40e_aqc_query_switching_comp_bw_config_resp bw_data;
7619         struct i40e_pf *pf = veb->pf;
7620         struct i40e_hw *hw = &pf->hw;
7621         u32 tc_bw_max;
7622         int ret = 0;
7623         int i;
7624
7625         ret = i40e_aq_query_switch_comp_bw_config(hw, veb->seid,
7626                                                   &bw_data, NULL);
7627         if (ret) {
7628                 dev_info(&pf->pdev->dev,
7629                          "query veb bw config failed, aq_err=%d\n",
7630                          hw->aq.asq_last_status);
7631                 goto out;
7632         }
7633
7634         ret = i40e_aq_query_switch_comp_ets_config(hw, veb->seid,
7635                                                    &ets_data, NULL);
7636         if (ret) {
7637                 dev_info(&pf->pdev->dev,
7638                          "query veb bw ets config failed, aq_err=%d\n",
7639                          hw->aq.asq_last_status);
7640                 goto out;
7641         }
7642
7643         veb->bw_limit = le16_to_cpu(ets_data.port_bw_limit);
7644         veb->bw_max_quanta = ets_data.tc_bw_max;
7645         veb->is_abs_credits = bw_data.absolute_credits_enable;
7646         tc_bw_max = le16_to_cpu(bw_data.tc_bw_max[0]) |
7647                     (le16_to_cpu(bw_data.tc_bw_max[1]) << 16);
7648         for (i = 0; i < I40E_MAX_TRAFFIC_CLASS; i++) {
7649                 veb->bw_tc_share_credits[i] = bw_data.tc_bw_share_credits[i];
7650                 veb->bw_tc_limit_credits[i] =
7651                                         le16_to_cpu(bw_data.tc_bw_limits[i]);
7652                 veb->bw_tc_max_quanta[i] = ((tc_bw_max >> (i*4)) & 0x7);
7653         }
7654
7655 out:
7656         return ret;
7657 }
7658
7659 /**
7660  * i40e_veb_mem_alloc - Allocates the next available struct veb in the PF
7661  * @pf: board private structure
7662  *
7663  * On error: returns error code (negative)
7664  * On success: returns vsi index in PF (positive)
7665  **/
7666 static int i40e_veb_mem_alloc(struct i40e_pf *pf)
7667 {
7668         int ret = -ENOENT;
7669         struct i40e_veb *veb;
7670         int i;
7671
7672         /* Need to protect the allocation of switch elements at the PF level */
7673         mutex_lock(&pf->switch_mutex);
7674
7675         /* VEB list may be fragmented if VEB creation/destruction has
7676          * been happening.  We can afford to do a quick scan to look
7677          * for any free slots in the list.
7678          *
7679          * find next empty veb slot, looping back around if necessary
7680          */
7681         i = 0;
7682         while ((i < I40E_MAX_VEB) && (pf->veb[i] != NULL))
7683                 i++;
7684         if (i >= I40E_MAX_VEB) {
7685                 ret = -ENOMEM;
7686                 goto err_alloc_veb;  /* out of VEB slots! */
7687         }
7688
7689         veb = kzalloc(sizeof(*veb), GFP_KERNEL);
7690         if (!veb) {
7691                 ret = -ENOMEM;
7692                 goto err_alloc_veb;
7693         }
7694         veb->pf = pf;
7695         veb->idx = i;
7696         veb->enabled_tc = 1;
7697
7698         pf->veb[i] = veb;
7699         ret = i;
7700 err_alloc_veb:
7701         mutex_unlock(&pf->switch_mutex);
7702         return ret;
7703 }
7704
7705 /**
7706  * i40e_switch_branch_release - Delete a branch of the switch tree
7707  * @branch: where to start deleting
7708  *
7709  * This uses recursion to find the tips of the branch to be
7710  * removed, deleting until we get back to and can delete this VEB.
7711  **/
7712 static void i40e_switch_branch_release(struct i40e_veb *branch)
7713 {
7714         struct i40e_pf *pf = branch->pf;
7715         u16 branch_seid = branch->seid;
7716         u16 veb_idx = branch->idx;
7717         int i;
7718
7719         /* release any VEBs on this VEB - RECURSION */
7720         for (i = 0; i < I40E_MAX_VEB; i++) {
7721                 if (!pf->veb[i])
7722                         continue;
7723                 if (pf->veb[i]->uplink_seid == branch->seid)
7724                         i40e_switch_branch_release(pf->veb[i]);
7725         }
7726
7727         /* Release the VSIs on this VEB, but not the owner VSI.
7728          *
7729          * NOTE: Removing the last VSI on a VEB has the SIDE EFFECT of removing
7730          *       the VEB itself, so don't use (*branch) after this loop.
7731          */
7732         for (i = 0; i < pf->num_alloc_vsi; i++) {
7733                 if (!pf->vsi[i])
7734                         continue;
7735                 if (pf->vsi[i]->uplink_seid == branch_seid &&
7736                    (pf->vsi[i]->flags & I40E_VSI_FLAG_VEB_OWNER) == 0) {
7737                         i40e_vsi_release(pf->vsi[i]);
7738                 }
7739         }
7740
7741         /* There's one corner case where the VEB might not have been
7742          * removed, so double check it here and remove it if needed.
7743          * This case happens if the veb was created from the debugfs
7744          * commands and no VSIs were added to it.
7745          */
7746         if (pf->veb[veb_idx])
7747                 i40e_veb_release(pf->veb[veb_idx]);
7748 }
7749
7750 /**
7751  * i40e_veb_clear - remove veb struct
7752  * @veb: the veb to remove
7753  **/
7754 static void i40e_veb_clear(struct i40e_veb *veb)
7755 {
7756         if (!veb)
7757                 return;
7758
7759         if (veb->pf) {
7760                 struct i40e_pf *pf = veb->pf;
7761
7762                 mutex_lock(&pf->switch_mutex);
7763                 if (pf->veb[veb->idx] == veb)
7764                         pf->veb[veb->idx] = NULL;
7765                 mutex_unlock(&pf->switch_mutex);
7766         }
7767
7768         kfree(veb);
7769 }
7770
7771 /**
7772  * i40e_veb_release - Delete a VEB and free its resources
7773  * @veb: the VEB being removed
7774  **/
7775 void i40e_veb_release(struct i40e_veb *veb)
7776 {
7777         struct i40e_vsi *vsi = NULL;
7778         struct i40e_pf *pf;
7779         int i, n = 0;
7780
7781         pf = veb->pf;
7782
7783         /* find the remaining VSI and check for extras */
7784         for (i = 0; i < pf->num_alloc_vsi; i++) {
7785                 if (pf->vsi[i] && pf->vsi[i]->uplink_seid == veb->seid) {
7786                         n++;
7787                         vsi = pf->vsi[i];
7788                 }
7789         }
7790         if (n != 1) {
7791                 dev_info(&pf->pdev->dev,
7792                          "can't remove VEB %d with %d VSIs left\n",
7793                          veb->seid, n);
7794                 return;
7795         }
7796
7797         /* move the remaining VSI to uplink veb */
7798         vsi->flags &= ~I40E_VSI_FLAG_VEB_OWNER;
7799         if (veb->uplink_seid) {
7800                 vsi->uplink_seid = veb->uplink_seid;
7801                 if (veb->uplink_seid == pf->mac_seid)
7802                         vsi->veb_idx = I40E_NO_VEB;
7803                 else
7804                         vsi->veb_idx = veb->veb_idx;
7805         } else {
7806                 /* floating VEB */
7807                 vsi->uplink_seid = pf->vsi[pf->lan_vsi]->uplink_seid;
7808                 vsi->veb_idx = pf->vsi[pf->lan_vsi]->veb_idx;
7809         }
7810
7811         i40e_aq_delete_element(&pf->hw, veb->seid, NULL);
7812         i40e_veb_clear(veb);
7813 }
7814
7815 /**
7816  * i40e_add_veb - create the VEB in the switch
7817  * @veb: the VEB to be instantiated
7818  * @vsi: the controlling VSI
7819  **/
7820 static int i40e_add_veb(struct i40e_veb *veb, struct i40e_vsi *vsi)
7821 {
7822         bool is_default = false;
7823         bool is_cloud = false;
7824         int ret;
7825
7826         /* get a VEB from the hardware */
7827         ret = i40e_aq_add_veb(&veb->pf->hw, veb->uplink_seid, vsi->seid,
7828                               veb->enabled_tc, is_default,
7829                               is_cloud, &veb->seid, NULL);
7830         if (ret) {
7831                 dev_info(&veb->pf->pdev->dev,
7832                          "couldn't add VEB, err %d, aq_err %d\n",
7833                          ret, veb->pf->hw.aq.asq_last_status);
7834                 return -EPERM;
7835         }
7836
7837         /* get statistics counter */
7838         ret = i40e_aq_get_veb_parameters(&veb->pf->hw, veb->seid, NULL, NULL,
7839                                          &veb->stats_idx, NULL, NULL, NULL);
7840         if (ret) {
7841                 dev_info(&veb->pf->pdev->dev,
7842                          "couldn't get VEB statistics idx, err %d, aq_err %d\n",
7843                          ret, veb->pf->hw.aq.asq_last_status);
7844                 return -EPERM;
7845         }
7846         ret = i40e_veb_get_bw_info(veb);
7847         if (ret) {
7848                 dev_info(&veb->pf->pdev->dev,
7849                          "couldn't get VEB bw info, err %d, aq_err %d\n",
7850                          ret, veb->pf->hw.aq.asq_last_status);
7851                 i40e_aq_delete_element(&veb->pf->hw, veb->seid, NULL);
7852                 return -ENOENT;
7853         }
7854
7855         vsi->uplink_seid = veb->seid;
7856         vsi->veb_idx = veb->idx;
7857         vsi->flags |= I40E_VSI_FLAG_VEB_OWNER;
7858
7859         return 0;
7860 }
7861
7862 /**
7863  * i40e_veb_setup - Set up a VEB
7864  * @pf: board private structure
7865  * @flags: VEB setup flags
7866  * @uplink_seid: the switch element to link to
7867  * @vsi_seid: the initial VSI seid
7868  * @enabled_tc: Enabled TC bit-map
7869  *
7870  * This allocates the sw VEB structure and links it into the switch
7871  * It is possible and legal for this to be a duplicate of an already
7872  * existing VEB.  It is also possible for both uplink and vsi seids
7873  * to be zero, in order to create a floating VEB.
7874  *
7875  * Returns pointer to the successfully allocated VEB sw struct on
7876  * success, otherwise returns NULL on failure.
7877  **/
7878 struct i40e_veb *i40e_veb_setup(struct i40e_pf *pf, u16 flags,
7879                                 u16 uplink_seid, u16 vsi_seid,
7880                                 u8 enabled_tc)
7881 {
7882         struct i40e_veb *veb, *uplink_veb = NULL;
7883         int vsi_idx, veb_idx;
7884         int ret;
7885
7886         /* if one seid is 0, the other must be 0 to create a floating relay */
7887         if ((uplink_seid == 0 || vsi_seid == 0) &&
7888             (uplink_seid + vsi_seid != 0)) {
7889                 dev_info(&pf->pdev->dev,
7890                          "one, not both seid's are 0: uplink=%d vsi=%d\n",
7891                          uplink_seid, vsi_seid);
7892                 return NULL;
7893         }
7894
7895         /* make sure there is such a vsi and uplink */
7896         for (vsi_idx = 0; vsi_idx < pf->num_alloc_vsi; vsi_idx++)
7897                 if (pf->vsi[vsi_idx] && pf->vsi[vsi_idx]->seid == vsi_seid)
7898                         break;
7899         if (vsi_idx >= pf->num_alloc_vsi && vsi_seid != 0) {
7900                 dev_info(&pf->pdev->dev, "vsi seid %d not found\n",
7901                          vsi_seid);
7902                 return NULL;
7903         }
7904
7905         if (uplink_seid && uplink_seid != pf->mac_seid) {
7906                 for (veb_idx = 0; veb_idx < I40E_MAX_VEB; veb_idx++) {
7907                         if (pf->veb[veb_idx] &&
7908                             pf->veb[veb_idx]->seid == uplink_seid) {
7909                                 uplink_veb = pf->veb[veb_idx];
7910                                 break;
7911                         }
7912                 }
7913                 if (!uplink_veb) {
7914                         dev_info(&pf->pdev->dev,
7915                                  "uplink seid %d not found\n", uplink_seid);
7916                         return NULL;
7917                 }
7918         }
7919
7920         /* get veb sw struct */
7921         veb_idx = i40e_veb_mem_alloc(pf);
7922         if (veb_idx < 0)
7923                 goto err_alloc;
7924         veb = pf->veb[veb_idx];
7925         veb->flags = flags;
7926         veb->uplink_seid = uplink_seid;
7927         veb->veb_idx = (uplink_veb ? uplink_veb->idx : I40E_NO_VEB);
7928         veb->enabled_tc = (enabled_tc ? enabled_tc : 0x1);
7929
7930         /* create the VEB in the switch */
7931         ret = i40e_add_veb(veb, pf->vsi[vsi_idx]);
7932         if (ret)
7933                 goto err_veb;
7934         if (vsi_idx == pf->lan_vsi)
7935                 pf->lan_veb = veb->idx;
7936
7937         return veb;
7938
7939 err_veb:
7940         i40e_veb_clear(veb);
7941 err_alloc:
7942         return NULL;
7943 }
7944
7945 /**
7946  * i40e_setup_pf_switch_element - set pf vars based on switch type
7947  * @pf: board private structure
7948  * @ele: element we are building info from
7949  * @num_reported: total number of elements
7950  * @printconfig: should we print the contents
7951  *
7952  * helper function to assist in extracting a few useful SEID values.
7953  **/
7954 static void i40e_setup_pf_switch_element(struct i40e_pf *pf,
7955                                 struct i40e_aqc_switch_config_element_resp *ele,
7956                                 u16 num_reported, bool printconfig)
7957 {
7958         u16 downlink_seid = le16_to_cpu(ele->downlink_seid);
7959         u16 uplink_seid = le16_to_cpu(ele->uplink_seid);
7960         u8 element_type = ele->element_type;
7961         u16 seid = le16_to_cpu(ele->seid);
7962
7963         if (printconfig)
7964                 dev_info(&pf->pdev->dev,
7965                          "type=%d seid=%d uplink=%d downlink=%d\n",
7966                          element_type, seid, uplink_seid, downlink_seid);
7967
7968         switch (element_type) {
7969         case I40E_SWITCH_ELEMENT_TYPE_MAC:
7970                 pf->mac_seid = seid;
7971                 break;
7972         case I40E_SWITCH_ELEMENT_TYPE_VEB:
7973                 /* Main VEB? */
7974                 if (uplink_seid != pf->mac_seid)
7975                         break;
7976                 if (pf->lan_veb == I40E_NO_VEB) {
7977                         int v;
7978
7979                         /* find existing or else empty VEB */
7980                         for (v = 0; v < I40E_MAX_VEB; v++) {
7981                                 if (pf->veb[v] && (pf->veb[v]->seid == seid)) {
7982                                         pf->lan_veb = v;
7983                                         break;
7984                                 }
7985                         }
7986                         if (pf->lan_veb == I40E_NO_VEB) {
7987                                 v = i40e_veb_mem_alloc(pf);
7988                                 if (v < 0)
7989                                         break;
7990                                 pf->lan_veb = v;
7991                         }
7992                 }
7993
7994                 pf->veb[pf->lan_veb]->seid = seid;
7995                 pf->veb[pf->lan_veb]->uplink_seid = pf->mac_seid;
7996                 pf->veb[pf->lan_veb]->pf = pf;
7997                 pf->veb[pf->lan_veb]->veb_idx = I40E_NO_VEB;
7998                 break;
7999         case I40E_SWITCH_ELEMENT_TYPE_VSI:
8000                 if (num_reported != 1)
8001                         break;
8002                 /* This is immediately after a reset so we can assume this is
8003                  * the PF's VSI
8004                  */
8005                 pf->mac_seid = uplink_seid;
8006                 pf->pf_seid = downlink_seid;
8007                 pf->main_vsi_seid = seid;
8008                 if (printconfig)
8009                         dev_info(&pf->pdev->dev,
8010                                  "pf_seid=%d main_vsi_seid=%d\n",
8011                                  pf->pf_seid, pf->main_vsi_seid);
8012                 break;
8013         case I40E_SWITCH_ELEMENT_TYPE_PF:
8014         case I40E_SWITCH_ELEMENT_TYPE_VF:
8015         case I40E_SWITCH_ELEMENT_TYPE_EMP:
8016         case I40E_SWITCH_ELEMENT_TYPE_BMC:
8017         case I40E_SWITCH_ELEMENT_TYPE_PE:
8018         case I40E_SWITCH_ELEMENT_TYPE_PA:
8019                 /* ignore these for now */
8020                 break;
8021         default:
8022                 dev_info(&pf->pdev->dev, "unknown element type=%d seid=%d\n",
8023                          element_type, seid);
8024                 break;
8025         }
8026 }
8027
8028 /**
8029  * i40e_fetch_switch_configuration - Get switch config from firmware
8030  * @pf: board private structure
8031  * @printconfig: should we print the contents
8032  *
8033  * Get the current switch configuration from the device and
8034  * extract a few useful SEID values.
8035  **/
8036 int i40e_fetch_switch_configuration(struct i40e_pf *pf, bool printconfig)
8037 {
8038         struct i40e_aqc_get_switch_config_resp *sw_config;
8039         u16 next_seid = 0;
8040         int ret = 0;
8041         u8 *aq_buf;
8042         int i;
8043
8044         aq_buf = kzalloc(I40E_AQ_LARGE_BUF, GFP_KERNEL);
8045         if (!aq_buf)
8046                 return -ENOMEM;
8047
8048         sw_config = (struct i40e_aqc_get_switch_config_resp *)aq_buf;
8049         do {
8050                 u16 num_reported, num_total;
8051
8052                 ret = i40e_aq_get_switch_config(&pf->hw, sw_config,
8053                                                 I40E_AQ_LARGE_BUF,
8054                                                 &next_seid, NULL);
8055                 if (ret) {
8056                         dev_info(&pf->pdev->dev,
8057                                  "get switch config failed %d aq_err=%x\n",
8058                                  ret, pf->hw.aq.asq_last_status);
8059                         kfree(aq_buf);
8060                         return -ENOENT;
8061                 }
8062
8063                 num_reported = le16_to_cpu(sw_config->header.num_reported);
8064                 num_total = le16_to_cpu(sw_config->header.num_total);
8065
8066                 if (printconfig)
8067                         dev_info(&pf->pdev->dev,
8068                                  "header: %d reported %d total\n",
8069                                  num_reported, num_total);
8070
8071                 for (i = 0; i < num_reported; i++) {
8072                         struct i40e_aqc_switch_config_element_resp *ele =
8073                                 &sw_config->element[i];
8074
8075                         i40e_setup_pf_switch_element(pf, ele, num_reported,
8076                                                      printconfig);
8077                 }
8078         } while (next_seid != 0);
8079
8080         kfree(aq_buf);
8081         return ret;
8082 }
8083
8084 /**
8085  * i40e_setup_pf_switch - Setup the HW switch on startup or after reset
8086  * @pf: board private structure
8087  * @reinit: if the Main VSI needs to re-initialized.
8088  *
8089  * Returns 0 on success, negative value on failure
8090  **/
8091 static int i40e_setup_pf_switch(struct i40e_pf *pf, bool reinit)
8092 {
8093         u32 rxfc = 0, txfc = 0, rxfc_reg;
8094         int ret;
8095
8096         /* find out what's out there already */
8097         ret = i40e_fetch_switch_configuration(pf, false);
8098         if (ret) {
8099                 dev_info(&pf->pdev->dev,
8100                          "couldn't fetch switch config, err %d, aq_err %d\n",
8101                          ret, pf->hw.aq.asq_last_status);
8102                 return ret;
8103         }
8104         i40e_pf_reset_stats(pf);
8105
8106         /* first time setup */
8107         if (pf->lan_vsi == I40E_NO_VSI || reinit) {
8108                 struct i40e_vsi *vsi = NULL;
8109                 u16 uplink_seid;
8110
8111                 /* Set up the PF VSI associated with the PF's main VSI
8112                  * that is already in the HW switch
8113                  */
8114                 if (pf->lan_veb != I40E_NO_VEB && pf->veb[pf->lan_veb])
8115                         uplink_seid = pf->veb[pf->lan_veb]->seid;
8116                 else
8117                         uplink_seid = pf->mac_seid;
8118                 if (pf->lan_vsi == I40E_NO_VSI)
8119                         vsi = i40e_vsi_setup(pf, I40E_VSI_MAIN, uplink_seid, 0);
8120                 else if (reinit)
8121                         vsi = i40e_vsi_reinit_setup(pf->vsi[pf->lan_vsi]);
8122                 if (!vsi) {
8123                         dev_info(&pf->pdev->dev, "setup of MAIN VSI failed\n");
8124                         i40e_fdir_teardown(pf);
8125                         return -EAGAIN;
8126                 }
8127         } else {
8128                 /* force a reset of TC and queue layout configurations */
8129                 u8 enabled_tc = pf->vsi[pf->lan_vsi]->tc_config.enabled_tc;
8130                 pf->vsi[pf->lan_vsi]->tc_config.enabled_tc = 0;
8131                 pf->vsi[pf->lan_vsi]->seid = pf->main_vsi_seid;
8132                 i40e_vsi_config_tc(pf->vsi[pf->lan_vsi], enabled_tc);
8133         }
8134         i40e_vlan_stripping_disable(pf->vsi[pf->lan_vsi]);
8135
8136         i40e_fdir_sb_setup(pf);
8137
8138         /* Setup static PF queue filter control settings */
8139         ret = i40e_setup_pf_filter_control(pf);
8140         if (ret) {
8141                 dev_info(&pf->pdev->dev, "setup_pf_filter_control failed: %d\n",
8142                          ret);
8143                 /* Failure here should not stop continuing other steps */
8144         }
8145
8146         /* enable RSS in the HW, even for only one queue, as the stack can use
8147          * the hash
8148          */
8149         if ((pf->flags & I40E_FLAG_RSS_ENABLED))
8150                 i40e_config_rss(pf);
8151
8152         /* fill in link information and enable LSE reporting */
8153         i40e_aq_get_link_info(&pf->hw, true, NULL, NULL);
8154         i40e_link_event(pf);
8155
8156         /* Initialize user-specific link properties */
8157         pf->fc_autoneg_status = ((pf->hw.phy.link_info.an_info &
8158                                   I40E_AQ_AN_COMPLETED) ? true : false);
8159         /* requested_mode is set in probe or by ethtool */
8160         if (!pf->fc_autoneg_status)
8161                 goto no_autoneg;
8162
8163         if ((pf->hw.phy.link_info.an_info & I40E_AQ_LINK_PAUSE_TX) &&
8164             (pf->hw.phy.link_info.an_info & I40E_AQ_LINK_PAUSE_RX))
8165                 pf->hw.fc.current_mode = I40E_FC_FULL;
8166         else if (pf->hw.phy.link_info.an_info & I40E_AQ_LINK_PAUSE_TX)
8167                 pf->hw.fc.current_mode = I40E_FC_TX_PAUSE;
8168         else if (pf->hw.phy.link_info.an_info & I40E_AQ_LINK_PAUSE_RX)
8169                 pf->hw.fc.current_mode = I40E_FC_RX_PAUSE;
8170         else
8171                 pf->hw.fc.current_mode = I40E_FC_NONE;
8172
8173         /* sync the flow control settings with the auto-neg values */
8174         switch (pf->hw.fc.current_mode) {
8175         case I40E_FC_FULL:
8176                 txfc = 1;
8177                 rxfc = 1;
8178                 break;
8179         case I40E_FC_TX_PAUSE:
8180                 txfc = 1;
8181                 rxfc = 0;
8182                 break;
8183         case I40E_FC_RX_PAUSE:
8184                 txfc = 0;
8185                 rxfc = 1;
8186                 break;
8187         case I40E_FC_NONE:
8188         case I40E_FC_DEFAULT:
8189                 txfc = 0;
8190                 rxfc = 0;
8191                 break;
8192         case I40E_FC_PFC:
8193                 /* TBD */
8194                 break;
8195         /* no default case, we have to handle all possibilities here */
8196         }
8197
8198         wr32(&pf->hw, I40E_PRTDCB_FCCFG, txfc << I40E_PRTDCB_FCCFG_TFCE_SHIFT);
8199
8200         rxfc_reg = rd32(&pf->hw, I40E_PRTDCB_MFLCN) &
8201                    ~I40E_PRTDCB_MFLCN_RFCE_MASK;
8202         rxfc_reg |= (rxfc << I40E_PRTDCB_MFLCN_RFCE_SHIFT);
8203
8204         wr32(&pf->hw, I40E_PRTDCB_MFLCN, rxfc_reg);
8205
8206         goto fc_complete;
8207
8208 no_autoneg:
8209         /* disable L2 flow control, user can turn it on if they wish */
8210         wr32(&pf->hw, I40E_PRTDCB_FCCFG, 0);
8211         wr32(&pf->hw, I40E_PRTDCB_MFLCN, rd32(&pf->hw, I40E_PRTDCB_MFLCN) &
8212                                          ~I40E_PRTDCB_MFLCN_RFCE_MASK);
8213
8214 fc_complete:
8215         i40e_ptp_init(pf);
8216
8217         return ret;
8218 }
8219
8220 /**
8221  * i40e_determine_queue_usage - Work out queue distribution
8222  * @pf: board private structure
8223  **/
8224 static void i40e_determine_queue_usage(struct i40e_pf *pf)
8225 {
8226         int queues_left;
8227
8228         pf->num_lan_qps = 0;
8229
8230         /* Find the max queues to be put into basic use.  We'll always be
8231          * using TC0, whether or not DCB is running, and TC0 will get the
8232          * big RSS set.
8233          */
8234         queues_left = pf->hw.func_caps.num_tx_qp;
8235
8236         if ((queues_left == 1) ||
8237             !(pf->flags & I40E_FLAG_MSIX_ENABLED)) {
8238                 /* one qp for PF, no queues for anything else */
8239                 queues_left = 0;
8240                 pf->rss_size = pf->num_lan_qps = 1;
8241
8242                 /* make sure all the fancies are disabled */
8243                 pf->flags &= ~(I40E_FLAG_RSS_ENABLED    |
8244                                I40E_FLAG_FD_SB_ENABLED  |
8245                                I40E_FLAG_FD_ATR_ENABLED |
8246                                I40E_FLAG_DCB_CAPABLE    |
8247                                I40E_FLAG_SRIOV_ENABLED  |
8248                                I40E_FLAG_VMDQ_ENABLED);
8249         } else if (!(pf->flags & (I40E_FLAG_RSS_ENABLED |
8250                                   I40E_FLAG_FD_SB_ENABLED |
8251                                   I40E_FLAG_FD_ATR_ENABLED |
8252                                   I40E_FLAG_DCB_CAPABLE))) {
8253                 /* one qp for PF */
8254                 pf->rss_size = pf->num_lan_qps = 1;
8255                 queues_left -= pf->num_lan_qps;
8256
8257                 pf->flags &= ~(I40E_FLAG_RSS_ENABLED    |
8258                                I40E_FLAG_FD_SB_ENABLED  |
8259                                I40E_FLAG_FD_ATR_ENABLED |
8260                                I40E_FLAG_DCB_ENABLED    |
8261                                I40E_FLAG_VMDQ_ENABLED);
8262         } else {
8263                 /* Not enough queues for all TCs */
8264                 if ((pf->flags & I40E_FLAG_DCB_CAPABLE) &&
8265                     (queues_left < I40E_MAX_TRAFFIC_CLASS)) {
8266                         pf->flags &= ~I40E_FLAG_DCB_CAPABLE;
8267                         dev_info(&pf->pdev->dev, "not enough queues for DCB. DCB is disabled.\n");
8268                 }
8269                 pf->num_lan_qps = pf->rss_size_max;
8270                 queues_left -= pf->num_lan_qps;
8271         }
8272
8273         if (pf->flags & I40E_FLAG_FD_SB_ENABLED) {
8274                 if (queues_left > 1) {
8275                         queues_left -= 1; /* save 1 queue for FD */
8276                 } else {
8277                         pf->flags &= ~I40E_FLAG_FD_SB_ENABLED;
8278                         dev_info(&pf->pdev->dev, "not enough queues for Flow Director. Flow Director feature is disabled\n");
8279                 }
8280         }
8281
8282         if ((pf->flags & I40E_FLAG_SRIOV_ENABLED) &&
8283             pf->num_vf_qps && pf->num_req_vfs && queues_left) {
8284                 pf->num_req_vfs = min_t(int, pf->num_req_vfs,
8285                                         (queues_left / pf->num_vf_qps));
8286                 queues_left -= (pf->num_req_vfs * pf->num_vf_qps);
8287         }
8288
8289         if ((pf->flags & I40E_FLAG_VMDQ_ENABLED) &&
8290             pf->num_vmdq_vsis && pf->num_vmdq_qps && queues_left) {
8291                 pf->num_vmdq_vsis = min_t(int, pf->num_vmdq_vsis,
8292                                           (queues_left / pf->num_vmdq_qps));
8293                 queues_left -= (pf->num_vmdq_vsis * pf->num_vmdq_qps);
8294         }
8295
8296         pf->queues_left = queues_left;
8297 }
8298
8299 /**
8300  * i40e_setup_pf_filter_control - Setup PF static filter control
8301  * @pf: PF to be setup
8302  *
8303  * i40e_setup_pf_filter_control sets up a pf's initial filter control
8304  * settings. If PE/FCoE are enabled then it will also set the per PF
8305  * based filter sizes required for them. It also enables Flow director,
8306  * ethertype and macvlan type filter settings for the pf.
8307  *
8308  * Returns 0 on success, negative on failure
8309  **/
8310 static int i40e_setup_pf_filter_control(struct i40e_pf *pf)
8311 {
8312         struct i40e_filter_control_settings *settings = &pf->filter_settings;
8313
8314         settings->hash_lut_size = I40E_HASH_LUT_SIZE_128;
8315
8316         /* Flow Director is enabled */
8317         if (pf->flags & (I40E_FLAG_FD_SB_ENABLED | I40E_FLAG_FD_ATR_ENABLED))
8318                 settings->enable_fdir = true;
8319
8320         /* Ethtype and MACVLAN filters enabled for PF */
8321         settings->enable_ethtype = true;
8322         settings->enable_macvlan = true;
8323
8324         if (i40e_set_filter_control(&pf->hw, settings))
8325                 return -ENOENT;
8326
8327         return 0;
8328 }
8329
8330 #define INFO_STRING_LEN 255
8331 static void i40e_print_features(struct i40e_pf *pf)
8332 {
8333         struct i40e_hw *hw = &pf->hw;
8334         char *buf, *string;
8335
8336         string = kzalloc(INFO_STRING_LEN, GFP_KERNEL);
8337         if (!string) {
8338                 dev_err(&pf->pdev->dev, "Features string allocation failed\n");
8339                 return;
8340         }
8341
8342         buf = string;
8343
8344         buf += sprintf(string, "Features: PF-id[%d] ", hw->pf_id);
8345 #ifdef CONFIG_PCI_IOV
8346         buf += sprintf(buf, "VFs: %d ", pf->num_req_vfs);
8347 #endif
8348         buf += sprintf(buf, "VSIs: %d QP: %d ", pf->hw.func_caps.num_vsis,
8349                        pf->vsi[pf->lan_vsi]->num_queue_pairs);
8350
8351         if (pf->flags & I40E_FLAG_RSS_ENABLED)
8352                 buf += sprintf(buf, "RSS ");
8353         if (pf->flags & I40E_FLAG_FD_ATR_ENABLED)
8354                 buf += sprintf(buf, "FD_ATR ");
8355         if (pf->flags & I40E_FLAG_FD_SB_ENABLED) {
8356                 buf += sprintf(buf, "FD_SB ");
8357                 buf += sprintf(buf, "NTUPLE ");
8358         }
8359         if (pf->flags & I40E_FLAG_DCB_CAPABLE)
8360                 buf += sprintf(buf, "DCB ");
8361         if (pf->flags & I40E_FLAG_PTP)
8362                 buf += sprintf(buf, "PTP ");
8363
8364         BUG_ON(buf > (string + INFO_STRING_LEN));
8365         dev_info(&pf->pdev->dev, "%s\n", string);
8366         kfree(string);
8367 }
8368
8369 /**
8370  * i40e_probe - Device initialization routine
8371  * @pdev: PCI device information struct
8372  * @ent: entry in i40e_pci_tbl
8373  *
8374  * i40e_probe initializes a pf identified by a pci_dev structure.
8375  * The OS initialization, configuring of the pf private structure,
8376  * and a hardware reset occur.
8377  *
8378  * Returns 0 on success, negative on failure
8379  **/
8380 static int i40e_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
8381 {
8382         struct i40e_pf *pf;
8383         struct i40e_hw *hw;
8384         static u16 pfs_found;
8385         u16 link_status;
8386         int err = 0;
8387         u32 len;
8388         u32 i;
8389
8390         err = pci_enable_device_mem(pdev);
8391         if (err)
8392                 return err;
8393
8394         /* set up for high or low dma */
8395         err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
8396         if (err) {
8397                 err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
8398                 if (err) {
8399                         dev_err(&pdev->dev,
8400                                 "DMA configuration failed: 0x%x\n", err);
8401                         goto err_dma;
8402                 }
8403         }
8404
8405         /* set up pci connections */
8406         err = pci_request_selected_regions(pdev, pci_select_bars(pdev,
8407                                            IORESOURCE_MEM), i40e_driver_name);
8408         if (err) {
8409                 dev_info(&pdev->dev,
8410                          "pci_request_selected_regions failed %d\n", err);
8411                 goto err_pci_reg;
8412         }
8413
8414         pci_enable_pcie_error_reporting(pdev);
8415         pci_set_master(pdev);
8416
8417         /* Now that we have a PCI connection, we need to do the
8418          * low level device setup.  This is primarily setting up
8419          * the Admin Queue structures and then querying for the
8420          * device's current profile information.
8421          */
8422         pf = kzalloc(sizeof(*pf), GFP_KERNEL);
8423         if (!pf) {
8424                 err = -ENOMEM;
8425                 goto err_pf_alloc;
8426         }
8427         pf->next_vsi = 0;
8428         pf->pdev = pdev;
8429         set_bit(__I40E_DOWN, &pf->state);
8430
8431         hw = &pf->hw;
8432         hw->back = pf;
8433         hw->hw_addr = ioremap(pci_resource_start(pdev, 0),
8434                               pci_resource_len(pdev, 0));
8435         if (!hw->hw_addr) {
8436                 err = -EIO;
8437                 dev_info(&pdev->dev, "ioremap(0x%04x, 0x%04x) failed: 0x%x\n",
8438                          (unsigned int)pci_resource_start(pdev, 0),
8439                          (unsigned int)pci_resource_len(pdev, 0), err);
8440                 goto err_ioremap;
8441         }
8442         hw->vendor_id = pdev->vendor;
8443         hw->device_id = pdev->device;
8444         pci_read_config_byte(pdev, PCI_REVISION_ID, &hw->revision_id);
8445         hw->subsystem_vendor_id = pdev->subsystem_vendor;
8446         hw->subsystem_device_id = pdev->subsystem_device;
8447         hw->bus.device = PCI_SLOT(pdev->devfn);
8448         hw->bus.func = PCI_FUNC(pdev->devfn);
8449         pf->instance = pfs_found;
8450
8451         /* do a special CORER for clearing PXE mode once at init */
8452         if (hw->revision_id == 0 &&
8453             (rd32(hw, I40E_GLLAN_RCTL_0) & I40E_GLLAN_RCTL_0_PXE_MODE_MASK)) {
8454                 wr32(hw, I40E_GLGEN_RTRIG, I40E_GLGEN_RTRIG_CORER_MASK);
8455                 i40e_flush(hw);
8456                 msleep(200);
8457                 pf->corer_count++;
8458
8459                 i40e_clear_pxe_mode(hw);
8460         }
8461
8462         /* Reset here to make sure all is clean and to define PF 'n' */
8463         err = i40e_pf_reset(hw);
8464         if (err) {
8465                 dev_info(&pdev->dev, "Initial pf_reset failed: %d\n", err);
8466                 goto err_pf_reset;
8467         }
8468         pf->pfr_count++;
8469
8470         hw->aq.num_arq_entries = I40E_AQ_LEN;
8471         hw->aq.num_asq_entries = I40E_AQ_LEN;
8472         hw->aq.arq_buf_size = I40E_MAX_AQ_BUF_SIZE;
8473         hw->aq.asq_buf_size = I40E_MAX_AQ_BUF_SIZE;
8474         pf->adminq_work_limit = I40E_AQ_WORK_LIMIT;
8475         snprintf(pf->misc_int_name, sizeof(pf->misc_int_name) - 1,
8476                  "%s-pf%d:misc",
8477                  dev_driver_string(&pf->pdev->dev), pf->hw.pf_id);
8478
8479         err = i40e_init_shared_code(hw);
8480         if (err) {
8481                 dev_info(&pdev->dev, "init_shared_code failed: %d\n", err);
8482                 goto err_pf_reset;
8483         }
8484
8485         /* set up a default setting for link flow control */
8486         pf->hw.fc.requested_mode = I40E_FC_NONE;
8487
8488         err = i40e_init_adminq(hw);
8489         dev_info(&pdev->dev, "%s\n", i40e_fw_version_str(hw));
8490         if (err) {
8491                 dev_info(&pdev->dev,
8492                          "init_adminq failed: %d expecting API %02x.%02x\n",
8493                          err,
8494                          I40E_FW_API_VERSION_MAJOR, I40E_FW_API_VERSION_MINOR);
8495                 goto err_pf_reset;
8496         }
8497
8498         i40e_verify_eeprom(pf);
8499
8500         /* Rev 0 hardware was never productized */
8501         if (hw->revision_id < 1)
8502                 dev_warn(&pdev->dev, "This device is a pre-production adapter/LOM. Please be aware there may be issues with your hardware. If you are experiencing problems please contact your Intel or hardware representative who provided you with this hardware.\n");
8503
8504         i40e_clear_pxe_mode(hw);
8505         err = i40e_get_capabilities(pf);
8506         if (err)
8507                 goto err_adminq_setup;
8508
8509         err = i40e_sw_init(pf);
8510         if (err) {
8511                 dev_info(&pdev->dev, "sw_init failed: %d\n", err);
8512                 goto err_sw_init;
8513         }
8514
8515         err = i40e_init_lan_hmc(hw, hw->func_caps.num_tx_qp,
8516                                 hw->func_caps.num_rx_qp,
8517                                 pf->fcoe_hmc_cntx_num, pf->fcoe_hmc_filt_num);
8518         if (err) {
8519                 dev_info(&pdev->dev, "init_lan_hmc failed: %d\n", err);
8520                 goto err_init_lan_hmc;
8521         }
8522
8523         err = i40e_configure_lan_hmc(hw, I40E_HMC_MODEL_DIRECT_ONLY);
8524         if (err) {
8525                 dev_info(&pdev->dev, "configure_lan_hmc failed: %d\n", err);
8526                 err = -ENOENT;
8527                 goto err_configure_lan_hmc;
8528         }
8529
8530         i40e_get_mac_addr(hw, hw->mac.addr);
8531         if (!is_valid_ether_addr(hw->mac.addr)) {
8532                 dev_info(&pdev->dev, "invalid MAC address %pM\n", hw->mac.addr);
8533                 err = -EIO;
8534                 goto err_mac_addr;
8535         }
8536         dev_info(&pdev->dev, "MAC address: %pM\n", hw->mac.addr);
8537         ether_addr_copy(hw->mac.perm_addr, hw->mac.addr);
8538
8539         pci_set_drvdata(pdev, pf);
8540         pci_save_state(pdev);
8541 #ifdef CONFIG_I40E_DCB
8542         err = i40e_init_pf_dcb(pf);
8543         if (err) {
8544                 dev_info(&pdev->dev, "init_pf_dcb failed: %d\n", err);
8545                 pf->flags &= ~I40E_FLAG_DCB_CAPABLE;
8546                 /* Continue without DCB enabled */
8547         }
8548 #endif /* CONFIG_I40E_DCB */
8549
8550         /* set up periodic task facility */
8551         setup_timer(&pf->service_timer, i40e_service_timer, (unsigned long)pf);
8552         pf->service_timer_period = HZ;
8553
8554         INIT_WORK(&pf->service_task, i40e_service_task);
8555         clear_bit(__I40E_SERVICE_SCHED, &pf->state);
8556         pf->flags |= I40E_FLAG_NEED_LINK_UPDATE;
8557         pf->link_check_timeout = jiffies;
8558
8559         /* WoL defaults to disabled */
8560         pf->wol_en = false;
8561         device_set_wakeup_enable(&pf->pdev->dev, pf->wol_en);
8562
8563         /* set up the main switch operations */
8564         i40e_determine_queue_usage(pf);
8565         i40e_init_interrupt_scheme(pf);
8566
8567         /* The number of VSIs reported by the FW is the minimum guaranteed
8568          * to us; HW supports far more and we share the remaining pool with
8569          * the other PFs. We allocate space for more than the guarantee with
8570          * the understanding that we might not get them all later.
8571          */
8572         if (pf->hw.func_caps.num_vsis < I40E_MIN_VSI_ALLOC)
8573                 pf->num_alloc_vsi = I40E_MIN_VSI_ALLOC;
8574         else
8575                 pf->num_alloc_vsi = pf->hw.func_caps.num_vsis;
8576
8577         /* Set up the *vsi struct and our local tracking of the MAIN PF vsi. */
8578         len = sizeof(struct i40e_vsi *) * pf->num_alloc_vsi;
8579         pf->vsi = kzalloc(len, GFP_KERNEL);
8580         if (!pf->vsi) {
8581                 err = -ENOMEM;
8582                 goto err_switch_setup;
8583         }
8584
8585         err = i40e_setup_pf_switch(pf, false);
8586         if (err) {
8587                 dev_info(&pdev->dev, "setup_pf_switch failed: %d\n", err);
8588                 goto err_vsis;
8589         }
8590         /* if FDIR VSI was set up, start it now */
8591         for (i = 0; i < pf->num_alloc_vsi; i++) {
8592                 if (pf->vsi[i] && pf->vsi[i]->type == I40E_VSI_FDIR) {
8593                         i40e_vsi_open(pf->vsi[i]);
8594                         break;
8595                 }
8596         }
8597
8598         /* The main driver is (mostly) up and happy. We need to set this state
8599          * before setting up the misc vector or we get a race and the vector
8600          * ends up disabled forever.
8601          */
8602         clear_bit(__I40E_DOWN, &pf->state);
8603
8604         /* In case of MSIX we are going to setup the misc vector right here
8605          * to handle admin queue events etc. In case of legacy and MSI
8606          * the misc functionality and queue processing is combined in
8607          * the same vector and that gets setup at open.
8608          */
8609         if (pf->flags & I40E_FLAG_MSIX_ENABLED) {
8610                 err = i40e_setup_misc_vector(pf);
8611                 if (err) {
8612                         dev_info(&pdev->dev,
8613                                  "setup of misc vector failed: %d\n", err);
8614                         goto err_vsis;
8615                 }
8616         }
8617
8618 #ifdef CONFIG_PCI_IOV
8619         /* prep for VF support */
8620         if ((pf->flags & I40E_FLAG_SRIOV_ENABLED) &&
8621             (pf->flags & I40E_FLAG_MSIX_ENABLED) &&
8622             !test_bit(__I40E_BAD_EEPROM, &pf->state)) {
8623                 u32 val;
8624
8625                 /* disable link interrupts for VFs */
8626                 val = rd32(hw, I40E_PFGEN_PORTMDIO_NUM);
8627                 val &= ~I40E_PFGEN_PORTMDIO_NUM_VFLINK_STAT_ENA_MASK;
8628                 wr32(hw, I40E_PFGEN_PORTMDIO_NUM, val);
8629                 i40e_flush(hw);
8630
8631                 if (pci_num_vf(pdev)) {
8632                         dev_info(&pdev->dev,
8633                                  "Active VFs found, allocating resources.\n");
8634                         err = i40e_alloc_vfs(pf, pci_num_vf(pdev));
8635                         if (err)
8636                                 dev_info(&pdev->dev,
8637                                          "Error %d allocating resources for existing VFs\n",
8638                                          err);
8639                 }
8640         }
8641 #endif /* CONFIG_PCI_IOV */
8642
8643         pfs_found++;
8644
8645         i40e_dbg_pf_init(pf);
8646
8647         /* tell the firmware that we're starting */
8648         i40e_send_version(pf);
8649
8650         /* since everything's happy, start the service_task timer */
8651         mod_timer(&pf->service_timer,
8652                   round_jiffies(jiffies + pf->service_timer_period));
8653
8654         /* Get the negotiated link width and speed from PCI config space */
8655         pcie_capability_read_word(pf->pdev, PCI_EXP_LNKSTA, &link_status);
8656
8657         i40e_set_pci_config_data(hw, link_status);
8658
8659         dev_info(&pdev->dev, "PCI-Express: %s %s\n",
8660                 (hw->bus.speed == i40e_bus_speed_8000 ? "Speed 8.0GT/s" :
8661                  hw->bus.speed == i40e_bus_speed_5000 ? "Speed 5.0GT/s" :
8662                  hw->bus.speed == i40e_bus_speed_2500 ? "Speed 2.5GT/s" :
8663                  "Unknown"),
8664                 (hw->bus.width == i40e_bus_width_pcie_x8 ? "Width x8" :
8665                  hw->bus.width == i40e_bus_width_pcie_x4 ? "Width x4" :
8666                  hw->bus.width == i40e_bus_width_pcie_x2 ? "Width x2" :
8667                  hw->bus.width == i40e_bus_width_pcie_x1 ? "Width x1" :
8668                  "Unknown"));
8669
8670         if (hw->bus.width < i40e_bus_width_pcie_x8 ||
8671             hw->bus.speed < i40e_bus_speed_8000) {
8672                 dev_warn(&pdev->dev, "PCI-Express bandwidth available for this device may be insufficient for optimal performance.\n");
8673                 dev_warn(&pdev->dev, "Please move the device to a different PCI-e link with more lanes and/or higher transfer rate.\n");
8674         }
8675
8676         /* print a string summarizing features */
8677         i40e_print_features(pf);
8678
8679         return 0;
8680
8681         /* Unwind what we've done if something failed in the setup */
8682 err_vsis:
8683         set_bit(__I40E_DOWN, &pf->state);
8684         i40e_clear_interrupt_scheme(pf);
8685         kfree(pf->vsi);
8686 err_switch_setup:
8687         i40e_reset_interrupt_capability(pf);
8688         del_timer_sync(&pf->service_timer);
8689 err_mac_addr:
8690 err_configure_lan_hmc:
8691         (void)i40e_shutdown_lan_hmc(hw);
8692 err_init_lan_hmc:
8693         kfree(pf->qp_pile);
8694         kfree(pf->irq_pile);
8695 err_sw_init:
8696 err_adminq_setup:
8697         (void)i40e_shutdown_adminq(hw);
8698 err_pf_reset:
8699         iounmap(hw->hw_addr);
8700 err_ioremap:
8701         kfree(pf);
8702 err_pf_alloc:
8703         pci_disable_pcie_error_reporting(pdev);
8704         pci_release_selected_regions(pdev,
8705                                      pci_select_bars(pdev, IORESOURCE_MEM));
8706 err_pci_reg:
8707 err_dma:
8708         pci_disable_device(pdev);
8709         return err;
8710 }
8711
8712 /**
8713  * i40e_remove - Device removal routine
8714  * @pdev: PCI device information struct
8715  *
8716  * i40e_remove is called by the PCI subsystem to alert the driver
8717  * that is should release a PCI device.  This could be caused by a
8718  * Hot-Plug event, or because the driver is going to be removed from
8719  * memory.
8720  **/
8721 static void i40e_remove(struct pci_dev *pdev)
8722 {
8723         struct i40e_pf *pf = pci_get_drvdata(pdev);
8724         i40e_status ret_code;
8725         u32 reg;
8726         int i;
8727
8728         i40e_dbg_pf_exit(pf);
8729
8730         i40e_ptp_stop(pf);
8731
8732         /* no more scheduling of any task */
8733         set_bit(__I40E_DOWN, &pf->state);
8734         del_timer_sync(&pf->service_timer);
8735         cancel_work_sync(&pf->service_task);
8736
8737         if (pf->flags & I40E_FLAG_SRIOV_ENABLED) {
8738                 i40e_free_vfs(pf);
8739                 pf->flags &= ~I40E_FLAG_SRIOV_ENABLED;
8740         }
8741
8742         i40e_fdir_teardown(pf);
8743
8744         /* If there is a switch structure or any orphans, remove them.
8745          * This will leave only the PF's VSI remaining.
8746          */
8747         for (i = 0; i < I40E_MAX_VEB; i++) {
8748                 if (!pf->veb[i])
8749                         continue;
8750
8751                 if (pf->veb[i]->uplink_seid == pf->mac_seid ||
8752                     pf->veb[i]->uplink_seid == 0)
8753                         i40e_switch_branch_release(pf->veb[i]);
8754         }
8755
8756         /* Now we can shutdown the PF's VSI, just before we kill
8757          * adminq and hmc.
8758          */
8759         if (pf->vsi[pf->lan_vsi])
8760                 i40e_vsi_release(pf->vsi[pf->lan_vsi]);
8761
8762         i40e_stop_misc_vector(pf);
8763         if (pf->flags & I40E_FLAG_MSIX_ENABLED) {
8764                 synchronize_irq(pf->msix_entries[0].vector);
8765                 free_irq(pf->msix_entries[0].vector, pf);
8766         }
8767
8768         /* shutdown and destroy the HMC */
8769         if (pf->hw.hmc.hmc_obj) {
8770                 ret_code = i40e_shutdown_lan_hmc(&pf->hw);
8771                 if (ret_code)
8772                         dev_warn(&pdev->dev,
8773                                  "Failed to destroy the HMC resources: %d\n",
8774                                  ret_code);
8775         }
8776
8777         /* shutdown the adminq */
8778         ret_code = i40e_shutdown_adminq(&pf->hw);
8779         if (ret_code)
8780                 dev_warn(&pdev->dev,
8781                          "Failed to destroy the Admin Queue resources: %d\n",
8782                          ret_code);
8783
8784         /* Clear all dynamic memory lists of rings, q_vectors, and VSIs */
8785         i40e_clear_interrupt_scheme(pf);
8786         for (i = 0; i < pf->num_alloc_vsi; i++) {
8787                 if (pf->vsi[i]) {
8788                         i40e_vsi_clear_rings(pf->vsi[i]);
8789                         i40e_vsi_clear(pf->vsi[i]);
8790                         pf->vsi[i] = NULL;
8791                 }
8792         }
8793
8794         for (i = 0; i < I40E_MAX_VEB; i++) {
8795                 kfree(pf->veb[i]);
8796                 pf->veb[i] = NULL;
8797         }
8798
8799         kfree(pf->qp_pile);
8800         kfree(pf->irq_pile);
8801         kfree(pf->vsi);
8802
8803         /* force a PF reset to clean anything leftover */
8804         reg = rd32(&pf->hw, I40E_PFGEN_CTRL);
8805         wr32(&pf->hw, I40E_PFGEN_CTRL, (reg | I40E_PFGEN_CTRL_PFSWR_MASK));
8806         i40e_flush(&pf->hw);
8807
8808         iounmap(pf->hw.hw_addr);
8809         kfree(pf);
8810         pci_release_selected_regions(pdev,
8811                                      pci_select_bars(pdev, IORESOURCE_MEM));
8812
8813         pci_disable_pcie_error_reporting(pdev);
8814         pci_disable_device(pdev);
8815 }
8816
8817 /**
8818  * i40e_pci_error_detected - warning that something funky happened in PCI land
8819  * @pdev: PCI device information struct
8820  *
8821  * Called to warn that something happened and the error handling steps
8822  * are in progress.  Allows the driver to quiesce things, be ready for
8823  * remediation.
8824  **/
8825 static pci_ers_result_t i40e_pci_error_detected(struct pci_dev *pdev,
8826                                                 enum pci_channel_state error)
8827 {
8828         struct i40e_pf *pf = pci_get_drvdata(pdev);
8829
8830         dev_info(&pdev->dev, "%s: error %d\n", __func__, error);
8831
8832         if (!pf) {
8833                 dev_info(&pdev->dev,
8834                          "Cannot recover - error happened during device probe\n");
8835                 return PCI_ERS_RESULT_DISCONNECT;
8836         }
8837
8838         /* shutdown all operations */
8839         if (!test_bit(__I40E_SUSPENDED, &pf->state)) {
8840                 rtnl_lock();
8841                 i40e_prep_for_reset(pf);
8842                 rtnl_unlock();
8843         }
8844
8845         /* Request a slot reset */
8846         return PCI_ERS_RESULT_NEED_RESET;
8847 }
8848
8849 /**
8850  * i40e_pci_error_slot_reset - a PCI slot reset just happened
8851  * @pdev: PCI device information struct
8852  *
8853  * Called to find if the driver can work with the device now that
8854  * the pci slot has been reset.  If a basic connection seems good
8855  * (registers are readable and have sane content) then return a
8856  * happy little PCI_ERS_RESULT_xxx.
8857  **/
8858 static pci_ers_result_t i40e_pci_error_slot_reset(struct pci_dev *pdev)
8859 {
8860         struct i40e_pf *pf = pci_get_drvdata(pdev);
8861         pci_ers_result_t result;
8862         int err;
8863         u32 reg;
8864
8865         dev_info(&pdev->dev, "%s\n", __func__);
8866         if (pci_enable_device_mem(pdev)) {
8867                 dev_info(&pdev->dev,
8868                          "Cannot re-enable PCI device after reset.\n");
8869                 result = PCI_ERS_RESULT_DISCONNECT;
8870         } else {
8871                 pci_set_master(pdev);
8872                 pci_restore_state(pdev);
8873                 pci_save_state(pdev);
8874                 pci_wake_from_d3(pdev, false);
8875
8876                 reg = rd32(&pf->hw, I40E_GLGEN_RTRIG);
8877                 if (reg == 0)
8878                         result = PCI_ERS_RESULT_RECOVERED;
8879                 else
8880                         result = PCI_ERS_RESULT_DISCONNECT;
8881         }
8882
8883         err = pci_cleanup_aer_uncorrect_error_status(pdev);
8884         if (err) {
8885                 dev_info(&pdev->dev,
8886                          "pci_cleanup_aer_uncorrect_error_status failed 0x%0x\n",
8887                          err);
8888                 /* non-fatal, continue */
8889         }
8890
8891         return result;
8892 }
8893
8894 /**
8895  * i40e_pci_error_resume - restart operations after PCI error recovery
8896  * @pdev: PCI device information struct
8897  *
8898  * Called to allow the driver to bring things back up after PCI error
8899  * and/or reset recovery has finished.
8900  **/
8901 static void i40e_pci_error_resume(struct pci_dev *pdev)
8902 {
8903         struct i40e_pf *pf = pci_get_drvdata(pdev);
8904
8905         dev_info(&pdev->dev, "%s\n", __func__);
8906         if (test_bit(__I40E_SUSPENDED, &pf->state))
8907                 return;
8908
8909         rtnl_lock();
8910         i40e_handle_reset_warning(pf);
8911         rtnl_lock();
8912 }
8913
8914 /**
8915  * i40e_shutdown - PCI callback for shutting down
8916  * @pdev: PCI device information struct
8917  **/
8918 static void i40e_shutdown(struct pci_dev *pdev)
8919 {
8920         struct i40e_pf *pf = pci_get_drvdata(pdev);
8921         struct i40e_hw *hw = &pf->hw;
8922
8923         set_bit(__I40E_SUSPENDED, &pf->state);
8924         set_bit(__I40E_DOWN, &pf->state);
8925         rtnl_lock();
8926         i40e_prep_for_reset(pf);
8927         rtnl_unlock();
8928
8929         wr32(hw, I40E_PFPM_APM, (pf->wol_en ? I40E_PFPM_APM_APME_MASK : 0));
8930         wr32(hw, I40E_PFPM_WUFC, (pf->wol_en ? I40E_PFPM_WUFC_MAG_MASK : 0));
8931
8932         if (system_state == SYSTEM_POWER_OFF) {
8933                 pci_wake_from_d3(pdev, pf->wol_en);
8934                 pci_set_power_state(pdev, PCI_D3hot);
8935         }
8936 }
8937
8938 #ifdef CONFIG_PM
8939 /**
8940  * i40e_suspend - PCI callback for moving to D3
8941  * @pdev: PCI device information struct
8942  **/
8943 static int i40e_suspend(struct pci_dev *pdev, pm_message_t state)
8944 {
8945         struct i40e_pf *pf = pci_get_drvdata(pdev);
8946         struct i40e_hw *hw = &pf->hw;
8947
8948         set_bit(__I40E_SUSPENDED, &pf->state);
8949         set_bit(__I40E_DOWN, &pf->state);
8950         rtnl_lock();
8951         i40e_prep_for_reset(pf);
8952         rtnl_unlock();
8953
8954         wr32(hw, I40E_PFPM_APM, (pf->wol_en ? I40E_PFPM_APM_APME_MASK : 0));
8955         wr32(hw, I40E_PFPM_WUFC, (pf->wol_en ? I40E_PFPM_WUFC_MAG_MASK : 0));
8956
8957         pci_wake_from_d3(pdev, pf->wol_en);
8958         pci_set_power_state(pdev, PCI_D3hot);
8959
8960         return 0;
8961 }
8962
8963 /**
8964  * i40e_resume - PCI callback for waking up from D3
8965  * @pdev: PCI device information struct
8966  **/
8967 static int i40e_resume(struct pci_dev *pdev)
8968 {
8969         struct i40e_pf *pf = pci_get_drvdata(pdev);
8970         u32 err;
8971
8972         pci_set_power_state(pdev, PCI_D0);
8973         pci_restore_state(pdev);
8974         /* pci_restore_state() clears dev->state_saves, so
8975          * call pci_save_state() again to restore it.
8976          */
8977         pci_save_state(pdev);
8978
8979         err = pci_enable_device_mem(pdev);
8980         if (err) {
8981                 dev_err(&pdev->dev,
8982                         "%s: Cannot enable PCI device from suspend\n",
8983                         __func__);
8984                 return err;
8985         }
8986         pci_set_master(pdev);
8987
8988         /* no wakeup events while running */
8989         pci_wake_from_d3(pdev, false);
8990
8991         /* handling the reset will rebuild the device state */
8992         if (test_and_clear_bit(__I40E_SUSPENDED, &pf->state)) {
8993                 clear_bit(__I40E_DOWN, &pf->state);
8994                 rtnl_lock();
8995                 i40e_reset_and_rebuild(pf, false);
8996                 rtnl_unlock();
8997         }
8998
8999         return 0;
9000 }
9001
9002 #endif
9003 static const struct pci_error_handlers i40e_err_handler = {
9004         .error_detected = i40e_pci_error_detected,
9005         .slot_reset = i40e_pci_error_slot_reset,
9006         .resume = i40e_pci_error_resume,
9007 };
9008
9009 static struct pci_driver i40e_driver = {
9010         .name     = i40e_driver_name,
9011         .id_table = i40e_pci_tbl,
9012         .probe    = i40e_probe,
9013         .remove   = i40e_remove,
9014 #ifdef CONFIG_PM
9015         .suspend  = i40e_suspend,
9016         .resume   = i40e_resume,
9017 #endif
9018         .shutdown = i40e_shutdown,
9019         .err_handler = &i40e_err_handler,
9020         .sriov_configure = i40e_pci_sriov_configure,
9021 };
9022
9023 /**
9024  * i40e_init_module - Driver registration routine
9025  *
9026  * i40e_init_module is the first routine called when the driver is
9027  * loaded. All it does is register with the PCI subsystem.
9028  **/
9029 static int __init i40e_init_module(void)
9030 {
9031         pr_info("%s: %s - version %s\n", i40e_driver_name,
9032                 i40e_driver_string, i40e_driver_version_str);
9033         pr_info("%s: %s\n", i40e_driver_name, i40e_copyright);
9034         i40e_dbg_init();
9035         return pci_register_driver(&i40e_driver);
9036 }
9037 module_init(i40e_init_module);
9038
9039 /**
9040  * i40e_exit_module - Driver exit cleanup routine
9041  *
9042  * i40e_exit_module is called just before the driver is removed
9043  * from memory.
9044  **/
9045 static void __exit i40e_exit_module(void)
9046 {
9047         pci_unregister_driver(&i40e_driver);
9048         i40e_dbg_exit();
9049 }
9050 module_exit(i40e_exit_module);