1 /* bnx2x_cmn.c: Broadcom Everest network driver. 2 * 3 * Copyright (c) 2007-2013 Broadcom Corporation 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation. 8 * 9 * Maintained by: Ariel Elior <ariel.elior@qlogic.com> 10 * Written by: Eliezer Tamir 11 * Based on code from Michael Chan's bnx2 driver 12 * UDP CSUM errata workaround by Arik Gendelman 13 * Slowpath and fastpath rework by Vladislav Zolotarov 14 * Statistics and Link management by Yitchak Gertner 15 * 16 */ 17 18 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 19 20 #include <linux/etherdevice.h> 21 #include <linux/if_vlan.h> 22 #include <linux/interrupt.h> 23 #include <linux/ip.h> 24 #include <net/tcp.h> 25 #include <net/ipv6.h> 26 #include <net/ip6_checksum.h> 27 #include <net/busy_poll.h> 28 #include <linux/prefetch.h> 29 #include "bnx2x_cmn.h" 30 #include "bnx2x_init.h" 31 #include "bnx2x_sp.h" 32 33 static void bnx2x_free_fp_mem_cnic(struct bnx2x *bp); 34 static int bnx2x_alloc_fp_mem_cnic(struct bnx2x *bp); 35 static int bnx2x_alloc_fp_mem(struct bnx2x *bp); 36 static int bnx2x_poll(struct napi_struct *napi, int budget); 37 38 static void bnx2x_add_all_napi_cnic(struct bnx2x *bp) 39 { 40 int i; 41 42 /* Add NAPI objects */ 43 for_each_rx_queue_cnic(bp, i) { 44 netif_napi_add(bp->dev, &bnx2x_fp(bp, i, napi), 45 bnx2x_poll, NAPI_POLL_WEIGHT); 46 napi_hash_add(&bnx2x_fp(bp, i, napi)); 47 } 48 } 49 50 static void bnx2x_add_all_napi(struct bnx2x *bp) 51 { 52 int i; 53 54 /* Add NAPI objects */ 55 for_each_eth_queue(bp, i) { 56 netif_napi_add(bp->dev, &bnx2x_fp(bp, i, napi), 57 bnx2x_poll, NAPI_POLL_WEIGHT); 58 napi_hash_add(&bnx2x_fp(bp, i, napi)); 59 } 60 } 61 62 static int bnx2x_calc_num_queues(struct bnx2x *bp) 63 { 64 int nq = bnx2x_num_queues ? : netif_get_num_default_rss_queues(); 65 66 /* Reduce memory usage in kdump environment by using only one queue */ 67 if (reset_devices) 68 nq = 1; 69 70 nq = clamp(nq, 1, BNX2X_MAX_QUEUES(bp)); 71 return nq; 72 } 73 74 /** 75 * bnx2x_move_fp - move content of the fastpath structure. 76 * 77 * @bp: driver handle 78 * @from: source FP index 79 * @to: destination FP index 80 * 81 * Makes sure the contents of the bp->fp[to].napi is kept 82 * intact. This is done by first copying the napi struct from 83 * the target to the source, and then mem copying the entire 84 * source onto the target. Update txdata pointers and related 85 * content. 86 */ 87 static inline void bnx2x_move_fp(struct bnx2x *bp, int from, int to) 88 { 89 struct bnx2x_fastpath *from_fp = &bp->fp[from]; 90 struct bnx2x_fastpath *to_fp = &bp->fp[to]; 91 struct bnx2x_sp_objs *from_sp_objs = &bp->sp_objs[from]; 92 struct bnx2x_sp_objs *to_sp_objs = &bp->sp_objs[to]; 93 struct bnx2x_fp_stats *from_fp_stats = &bp->fp_stats[from]; 94 struct bnx2x_fp_stats *to_fp_stats = &bp->fp_stats[to]; 95 int old_max_eth_txqs, new_max_eth_txqs; 96 int old_txdata_index = 0, new_txdata_index = 0; 97 struct bnx2x_agg_info *old_tpa_info = to_fp->tpa_info; 98 99 /* Copy the NAPI object as it has been already initialized */ 100 from_fp->napi = to_fp->napi; 101 102 /* Move bnx2x_fastpath contents */ 103 memcpy(to_fp, from_fp, sizeof(*to_fp)); 104 to_fp->index = to; 105 106 /* Retain the tpa_info of the original `to' version as we don't want 107 * 2 FPs to contain the same tpa_info pointer. 108 */ 109 to_fp->tpa_info = old_tpa_info; 110 111 /* move sp_objs contents as well, as their indices match fp ones */ 112 memcpy(to_sp_objs, from_sp_objs, sizeof(*to_sp_objs)); 113 114 /* move fp_stats contents as well, as their indices match fp ones */ 115 memcpy(to_fp_stats, from_fp_stats, sizeof(*to_fp_stats)); 116 117 /* Update txdata pointers in fp and move txdata content accordingly: 118 * Each fp consumes 'max_cos' txdata structures, so the index should be 119 * decremented by max_cos x delta. 120 */ 121 122 old_max_eth_txqs = BNX2X_NUM_ETH_QUEUES(bp) * (bp)->max_cos; 123 new_max_eth_txqs = (BNX2X_NUM_ETH_QUEUES(bp) - from + to) * 124 (bp)->max_cos; 125 if (from == FCOE_IDX(bp)) { 126 old_txdata_index = old_max_eth_txqs + FCOE_TXQ_IDX_OFFSET; 127 new_txdata_index = new_max_eth_txqs + FCOE_TXQ_IDX_OFFSET; 128 } 129 130 memcpy(&bp->bnx2x_txq[new_txdata_index], 131 &bp->bnx2x_txq[old_txdata_index], 132 sizeof(struct bnx2x_fp_txdata)); 133 to_fp->txdata_ptr[0] = &bp->bnx2x_txq[new_txdata_index]; 134 } 135 136 /** 137 * bnx2x_fill_fw_str - Fill buffer with FW version string. 138 * 139 * @bp: driver handle 140 * @buf: character buffer to fill with the fw name 141 * @buf_len: length of the above buffer 142 * 143 */ 144 void bnx2x_fill_fw_str(struct bnx2x *bp, char *buf, size_t buf_len) 145 { 146 if (IS_PF(bp)) { 147 u8 phy_fw_ver[PHY_FW_VER_LEN]; 148 149 phy_fw_ver[0] = '\0'; 150 bnx2x_get_ext_phy_fw_version(&bp->link_params, 151 phy_fw_ver, PHY_FW_VER_LEN); 152 strlcpy(buf, bp->fw_ver, buf_len); 153 snprintf(buf + strlen(bp->fw_ver), 32 - strlen(bp->fw_ver), 154 "bc %d.%d.%d%s%s", 155 (bp->common.bc_ver & 0xff0000) >> 16, 156 (bp->common.bc_ver & 0xff00) >> 8, 157 (bp->common.bc_ver & 0xff), 158 ((phy_fw_ver[0] != '\0') ? " phy " : ""), phy_fw_ver); 159 } else { 160 bnx2x_vf_fill_fw_str(bp, buf, buf_len); 161 } 162 } 163 164 /** 165 * bnx2x_shrink_eth_fp - guarantees fastpath structures stay intact 166 * 167 * @bp: driver handle 168 * @delta: number of eth queues which were not allocated 169 */ 170 static void bnx2x_shrink_eth_fp(struct bnx2x *bp, int delta) 171 { 172 int i, cos, old_eth_num = BNX2X_NUM_ETH_QUEUES(bp); 173 174 /* Queue pointer cannot be re-set on an fp-basis, as moving pointer 175 * backward along the array could cause memory to be overridden 176 */ 177 for (cos = 1; cos < bp->max_cos; cos++) { 178 for (i = 0; i < old_eth_num - delta; i++) { 179 struct bnx2x_fastpath *fp = &bp->fp[i]; 180 int new_idx = cos * (old_eth_num - delta) + i; 181 182 memcpy(&bp->bnx2x_txq[new_idx], fp->txdata_ptr[cos], 183 sizeof(struct bnx2x_fp_txdata)); 184 fp->txdata_ptr[cos] = &bp->bnx2x_txq[new_idx]; 185 } 186 } 187 } 188 189 int bnx2x_load_count[2][3] = { {0} }; /* per-path: 0-common, 1-port0, 2-port1 */ 190 191 /* free skb in the packet ring at pos idx 192 * return idx of last bd freed 193 */ 194 static u16 bnx2x_free_tx_pkt(struct bnx2x *bp, struct bnx2x_fp_txdata *txdata, 195 u16 idx, unsigned int *pkts_compl, 196 unsigned int *bytes_compl) 197 { 198 struct sw_tx_bd *tx_buf = &txdata->tx_buf_ring[idx]; 199 struct eth_tx_start_bd *tx_start_bd; 200 struct eth_tx_bd *tx_data_bd; 201 struct sk_buff *skb = tx_buf->skb; 202 u16 bd_idx = TX_BD(tx_buf->first_bd), new_cons; 203 int nbd; 204 u16 split_bd_len = 0; 205 206 /* prefetch skb end pointer to speedup dev_kfree_skb() */ 207 prefetch(&skb->end); 208 209 DP(NETIF_MSG_TX_DONE, "fp[%d]: pkt_idx %d buff @(%p)->skb %p\n", 210 txdata->txq_index, idx, tx_buf, skb); 211 212 tx_start_bd = &txdata->tx_desc_ring[bd_idx].start_bd; 213 214 nbd = le16_to_cpu(tx_start_bd->nbd) - 1; 215 #ifdef BNX2X_STOP_ON_ERROR 216 if ((nbd - 1) > (MAX_SKB_FRAGS + 2)) { 217 BNX2X_ERR("BAD nbd!\n"); 218 bnx2x_panic(); 219 } 220 #endif 221 new_cons = nbd + tx_buf->first_bd; 222 223 /* Get the next bd */ 224 bd_idx = TX_BD(NEXT_TX_IDX(bd_idx)); 225 226 /* Skip a parse bd... */ 227 --nbd; 228 bd_idx = TX_BD(NEXT_TX_IDX(bd_idx)); 229 230 /* TSO headers+data bds share a common mapping. See bnx2x_tx_split() */ 231 if (tx_buf->flags & BNX2X_TSO_SPLIT_BD) { 232 tx_data_bd = &txdata->tx_desc_ring[bd_idx].reg_bd; 233 split_bd_len = BD_UNMAP_LEN(tx_data_bd); 234 --nbd; 235 bd_idx = TX_BD(NEXT_TX_IDX(bd_idx)); 236 } 237 238 /* unmap first bd */ 239 dma_unmap_single(&bp->pdev->dev, BD_UNMAP_ADDR(tx_start_bd), 240 BD_UNMAP_LEN(tx_start_bd) + split_bd_len, 241 DMA_TO_DEVICE); 242 243 /* now free frags */ 244 while (nbd > 0) { 245 246 tx_data_bd = &txdata->tx_desc_ring[bd_idx].reg_bd; 247 dma_unmap_page(&bp->pdev->dev, BD_UNMAP_ADDR(tx_data_bd), 248 BD_UNMAP_LEN(tx_data_bd), DMA_TO_DEVICE); 249 if (--nbd) 250 bd_idx = TX_BD(NEXT_TX_IDX(bd_idx)); 251 } 252 253 /* release skb */ 254 WARN_ON(!skb); 255 if (likely(skb)) { 256 (*pkts_compl)++; 257 (*bytes_compl) += skb->len; 258 } 259 260 dev_kfree_skb_any(skb); 261 tx_buf->first_bd = 0; 262 tx_buf->skb = NULL; 263 264 return new_cons; 265 } 266 267 int bnx2x_tx_int(struct bnx2x *bp, struct bnx2x_fp_txdata *txdata) 268 { 269 struct netdev_queue *txq; 270 u16 hw_cons, sw_cons, bd_cons = txdata->tx_bd_cons; 271 unsigned int pkts_compl = 0, bytes_compl = 0; 272 273 #ifdef BNX2X_STOP_ON_ERROR 274 if (unlikely(bp->panic)) 275 return -1; 276 #endif 277 278 txq = netdev_get_tx_queue(bp->dev, txdata->txq_index); 279 hw_cons = le16_to_cpu(*txdata->tx_cons_sb); 280 sw_cons = txdata->tx_pkt_cons; 281 282 while (sw_cons != hw_cons) { 283 u16 pkt_cons; 284 285 pkt_cons = TX_BD(sw_cons); 286 287 DP(NETIF_MSG_TX_DONE, 288 "queue[%d]: hw_cons %u sw_cons %u pkt_cons %u\n", 289 txdata->txq_index, hw_cons, sw_cons, pkt_cons); 290 291 bd_cons = bnx2x_free_tx_pkt(bp, txdata, pkt_cons, 292 &pkts_compl, &bytes_compl); 293 294 sw_cons++; 295 } 296 297 netdev_tx_completed_queue(txq, pkts_compl, bytes_compl); 298 299 txdata->tx_pkt_cons = sw_cons; 300 txdata->tx_bd_cons = bd_cons; 301 302 /* Need to make the tx_bd_cons update visible to start_xmit() 303 * before checking for netif_tx_queue_stopped(). Without the 304 * memory barrier, there is a small possibility that 305 * start_xmit() will miss it and cause the queue to be stopped 306 * forever. 307 * On the other hand we need an rmb() here to ensure the proper 308 * ordering of bit testing in the following 309 * netif_tx_queue_stopped(txq) call. 310 */ 311 smp_mb(); 312 313 if (unlikely(netif_tx_queue_stopped(txq))) { 314 /* Taking tx_lock() is needed to prevent re-enabling the queue 315 * while it's empty. This could have happen if rx_action() gets 316 * suspended in bnx2x_tx_int() after the condition before 317 * netif_tx_wake_queue(), while tx_action (bnx2x_start_xmit()): 318 * 319 * stops the queue->sees fresh tx_bd_cons->releases the queue-> 320 * sends some packets consuming the whole queue again-> 321 * stops the queue 322 */ 323 324 __netif_tx_lock(txq, smp_processor_id()); 325 326 if ((netif_tx_queue_stopped(txq)) && 327 (bp->state == BNX2X_STATE_OPEN) && 328 (bnx2x_tx_avail(bp, txdata) >= MAX_DESC_PER_TX_PKT)) 329 netif_tx_wake_queue(txq); 330 331 __netif_tx_unlock(txq); 332 } 333 return 0; 334 } 335 336 static inline void bnx2x_update_last_max_sge(struct bnx2x_fastpath *fp, 337 u16 idx) 338 { 339 u16 last_max = fp->last_max_sge; 340 341 if (SUB_S16(idx, last_max) > 0) 342 fp->last_max_sge = idx; 343 } 344 345 static inline void bnx2x_update_sge_prod(struct bnx2x_fastpath *fp, 346 u16 sge_len, 347 struct eth_end_agg_rx_cqe *cqe) 348 { 349 struct bnx2x *bp = fp->bp; 350 u16 last_max, last_elem, first_elem; 351 u16 delta = 0; 352 u16 i; 353 354 if (!sge_len) 355 return; 356 357 /* First mark all used pages */ 358 for (i = 0; i < sge_len; i++) 359 BIT_VEC64_CLEAR_BIT(fp->sge_mask, 360 RX_SGE(le16_to_cpu(cqe->sgl_or_raw_data.sgl[i]))); 361 362 DP(NETIF_MSG_RX_STATUS, "fp_cqe->sgl[%d] = %d\n", 363 sge_len - 1, le16_to_cpu(cqe->sgl_or_raw_data.sgl[sge_len - 1])); 364 365 /* Here we assume that the last SGE index is the biggest */ 366 prefetch((void *)(fp->sge_mask)); 367 bnx2x_update_last_max_sge(fp, 368 le16_to_cpu(cqe->sgl_or_raw_data.sgl[sge_len - 1])); 369 370 last_max = RX_SGE(fp->last_max_sge); 371 last_elem = last_max >> BIT_VEC64_ELEM_SHIFT; 372 first_elem = RX_SGE(fp->rx_sge_prod) >> BIT_VEC64_ELEM_SHIFT; 373 374 /* If ring is not full */ 375 if (last_elem + 1 != first_elem) 376 last_elem++; 377 378 /* Now update the prod */ 379 for (i = first_elem; i != last_elem; i = NEXT_SGE_MASK_ELEM(i)) { 380 if (likely(fp->sge_mask[i])) 381 break; 382 383 fp->sge_mask[i] = BIT_VEC64_ELEM_ONE_MASK; 384 delta += BIT_VEC64_ELEM_SZ; 385 } 386 387 if (delta > 0) { 388 fp->rx_sge_prod += delta; 389 /* clear page-end entries */ 390 bnx2x_clear_sge_mask_next_elems(fp); 391 } 392 393 DP(NETIF_MSG_RX_STATUS, 394 "fp->last_max_sge = %d fp->rx_sge_prod = %d\n", 395 fp->last_max_sge, fp->rx_sge_prod); 396 } 397 398 /* Get Toeplitz hash value in the skb using the value from the 399 * CQE (calculated by HW). 400 */ 401 static u32 bnx2x_get_rxhash(const struct bnx2x *bp, 402 const struct eth_fast_path_rx_cqe *cqe, 403 enum pkt_hash_types *rxhash_type) 404 { 405 /* Get Toeplitz hash from CQE */ 406 if ((bp->dev->features & NETIF_F_RXHASH) && 407 (cqe->status_flags & ETH_FAST_PATH_RX_CQE_RSS_HASH_FLG)) { 408 enum eth_rss_hash_type htype; 409 410 htype = cqe->status_flags & ETH_FAST_PATH_RX_CQE_RSS_HASH_TYPE; 411 *rxhash_type = ((htype == TCP_IPV4_HASH_TYPE) || 412 (htype == TCP_IPV6_HASH_TYPE)) ? 413 PKT_HASH_TYPE_L4 : PKT_HASH_TYPE_L3; 414 415 return le32_to_cpu(cqe->rss_hash_result); 416 } 417 *rxhash_type = PKT_HASH_TYPE_NONE; 418 return 0; 419 } 420 421 static void bnx2x_tpa_start(struct bnx2x_fastpath *fp, u16 queue, 422 u16 cons, u16 prod, 423 struct eth_fast_path_rx_cqe *cqe) 424 { 425 struct bnx2x *bp = fp->bp; 426 struct sw_rx_bd *cons_rx_buf = &fp->rx_buf_ring[cons]; 427 struct sw_rx_bd *prod_rx_buf = &fp->rx_buf_ring[prod]; 428 struct eth_rx_bd *prod_bd = &fp->rx_desc_ring[prod]; 429 dma_addr_t mapping; 430 struct bnx2x_agg_info *tpa_info = &fp->tpa_info[queue]; 431 struct sw_rx_bd *first_buf = &tpa_info->first_buf; 432 433 /* print error if current state != stop */ 434 if (tpa_info->tpa_state != BNX2X_TPA_STOP) 435 BNX2X_ERR("start of bin not in stop [%d]\n", queue); 436 437 /* Try to map an empty data buffer from the aggregation info */ 438 mapping = dma_map_single(&bp->pdev->dev, 439 first_buf->data + NET_SKB_PAD, 440 fp->rx_buf_size, DMA_FROM_DEVICE); 441 /* 442 * ...if it fails - move the skb from the consumer to the producer 443 * and set the current aggregation state as ERROR to drop it 444 * when TPA_STOP arrives. 445 */ 446 447 if (unlikely(dma_mapping_error(&bp->pdev->dev, mapping))) { 448 /* Move the BD from the consumer to the producer */ 449 bnx2x_reuse_rx_data(fp, cons, prod); 450 tpa_info->tpa_state = BNX2X_TPA_ERROR; 451 return; 452 } 453 454 /* move empty data from pool to prod */ 455 prod_rx_buf->data = first_buf->data; 456 dma_unmap_addr_set(prod_rx_buf, mapping, mapping); 457 /* point prod_bd to new data */ 458 prod_bd->addr_hi = cpu_to_le32(U64_HI(mapping)); 459 prod_bd->addr_lo = cpu_to_le32(U64_LO(mapping)); 460 461 /* move partial skb from cons to pool (don't unmap yet) */ 462 *first_buf = *cons_rx_buf; 463 464 /* mark bin state as START */ 465 tpa_info->parsing_flags = 466 le16_to_cpu(cqe->pars_flags.flags); 467 tpa_info->vlan_tag = le16_to_cpu(cqe->vlan_tag); 468 tpa_info->tpa_state = BNX2X_TPA_START; 469 tpa_info->len_on_bd = le16_to_cpu(cqe->len_on_bd); 470 tpa_info->placement_offset = cqe->placement_offset; 471 tpa_info->rxhash = bnx2x_get_rxhash(bp, cqe, &tpa_info->rxhash_type); 472 if (fp->mode == TPA_MODE_GRO) { 473 u16 gro_size = le16_to_cpu(cqe->pkt_len_or_gro_seg_len); 474 tpa_info->full_page = SGE_PAGES / gro_size * gro_size; 475 tpa_info->gro_size = gro_size; 476 } 477 478 #ifdef BNX2X_STOP_ON_ERROR 479 fp->tpa_queue_used |= (1 << queue); 480 #ifdef _ASM_GENERIC_INT_L64_H 481 DP(NETIF_MSG_RX_STATUS, "fp->tpa_queue_used = 0x%lx\n", 482 #else 483 DP(NETIF_MSG_RX_STATUS, "fp->tpa_queue_used = 0x%llx\n", 484 #endif 485 fp->tpa_queue_used); 486 #endif 487 } 488 489 /* Timestamp option length allowed for TPA aggregation: 490 * 491 * nop nop kind length echo val 492 */ 493 #define TPA_TSTAMP_OPT_LEN 12 494 /** 495 * bnx2x_set_gro_params - compute GRO values 496 * 497 * @skb: packet skb 498 * @parsing_flags: parsing flags from the START CQE 499 * @len_on_bd: total length of the first packet for the 500 * aggregation. 501 * @pkt_len: length of all segments 502 * 503 * Approximate value of the MSS for this aggregation calculated using 504 * the first packet of it. 505 * Compute number of aggregated segments, and gso_type. 506 */ 507 static void bnx2x_set_gro_params(struct sk_buff *skb, u16 parsing_flags, 508 u16 len_on_bd, unsigned int pkt_len, 509 u16 num_of_coalesced_segs) 510 { 511 /* TPA aggregation won't have either IP options or TCP options 512 * other than timestamp or IPv6 extension headers. 513 */ 514 u16 hdrs_len = ETH_HLEN + sizeof(struct tcphdr); 515 516 if (GET_FLAG(parsing_flags, PARSING_FLAGS_OVER_ETHERNET_PROTOCOL) == 517 PRS_FLAG_OVERETH_IPV6) { 518 hdrs_len += sizeof(struct ipv6hdr); 519 skb_shinfo(skb)->gso_type = SKB_GSO_TCPV6; 520 } else { 521 hdrs_len += sizeof(struct iphdr); 522 skb_shinfo(skb)->gso_type = SKB_GSO_TCPV4; 523 } 524 525 /* Check if there was a TCP timestamp, if there is it's will 526 * always be 12 bytes length: nop nop kind length echo val. 527 * 528 * Otherwise FW would close the aggregation. 529 */ 530 if (parsing_flags & PARSING_FLAGS_TIME_STAMP_EXIST_FLAG) 531 hdrs_len += TPA_TSTAMP_OPT_LEN; 532 533 skb_shinfo(skb)->gso_size = len_on_bd - hdrs_len; 534 535 /* tcp_gro_complete() will copy NAPI_GRO_CB(skb)->count 536 * to skb_shinfo(skb)->gso_segs 537 */ 538 NAPI_GRO_CB(skb)->count = num_of_coalesced_segs; 539 } 540 541 static int bnx2x_alloc_rx_sge(struct bnx2x *bp, struct bnx2x_fastpath *fp, 542 u16 index, gfp_t gfp_mask) 543 { 544 struct page *page = alloc_pages(gfp_mask, PAGES_PER_SGE_SHIFT); 545 struct sw_rx_page *sw_buf = &fp->rx_page_ring[index]; 546 struct eth_rx_sge *sge = &fp->rx_sge_ring[index]; 547 dma_addr_t mapping; 548 549 if (unlikely(page == NULL)) { 550 BNX2X_ERR("Can't alloc sge\n"); 551 return -ENOMEM; 552 } 553 554 mapping = dma_map_page(&bp->pdev->dev, page, 0, 555 SGE_PAGES, DMA_FROM_DEVICE); 556 if (unlikely(dma_mapping_error(&bp->pdev->dev, mapping))) { 557 __free_pages(page, PAGES_PER_SGE_SHIFT); 558 BNX2X_ERR("Can't map sge\n"); 559 return -ENOMEM; 560 } 561 562 sw_buf->page = page; 563 dma_unmap_addr_set(sw_buf, mapping, mapping); 564 565 sge->addr_hi = cpu_to_le32(U64_HI(mapping)); 566 sge->addr_lo = cpu_to_le32(U64_LO(mapping)); 567 568 return 0; 569 } 570 571 static int bnx2x_fill_frag_skb(struct bnx2x *bp, struct bnx2x_fastpath *fp, 572 struct bnx2x_agg_info *tpa_info, 573 u16 pages, 574 struct sk_buff *skb, 575 struct eth_end_agg_rx_cqe *cqe, 576 u16 cqe_idx) 577 { 578 struct sw_rx_page *rx_pg, old_rx_pg; 579 u32 i, frag_len, frag_size; 580 int err, j, frag_id = 0; 581 u16 len_on_bd = tpa_info->len_on_bd; 582 u16 full_page = 0, gro_size = 0; 583 584 frag_size = le16_to_cpu(cqe->pkt_len) - len_on_bd; 585 586 if (fp->mode == TPA_MODE_GRO) { 587 gro_size = tpa_info->gro_size; 588 full_page = tpa_info->full_page; 589 } 590 591 /* This is needed in order to enable forwarding support */ 592 if (frag_size) 593 bnx2x_set_gro_params(skb, tpa_info->parsing_flags, len_on_bd, 594 le16_to_cpu(cqe->pkt_len), 595 le16_to_cpu(cqe->num_of_coalesced_segs)); 596 597 #ifdef BNX2X_STOP_ON_ERROR 598 if (pages > min_t(u32, 8, MAX_SKB_FRAGS) * SGE_PAGES) { 599 BNX2X_ERR("SGL length is too long: %d. CQE index is %d\n", 600 pages, cqe_idx); 601 BNX2X_ERR("cqe->pkt_len = %d\n", cqe->pkt_len); 602 bnx2x_panic(); 603 return -EINVAL; 604 } 605 #endif 606 607 /* Run through the SGL and compose the fragmented skb */ 608 for (i = 0, j = 0; i < pages; i += PAGES_PER_SGE, j++) { 609 u16 sge_idx = RX_SGE(le16_to_cpu(cqe->sgl_or_raw_data.sgl[j])); 610 611 /* FW gives the indices of the SGE as if the ring is an array 612 (meaning that "next" element will consume 2 indices) */ 613 if (fp->mode == TPA_MODE_GRO) 614 frag_len = min_t(u32, frag_size, (u32)full_page); 615 else /* LRO */ 616 frag_len = min_t(u32, frag_size, (u32)SGE_PAGES); 617 618 rx_pg = &fp->rx_page_ring[sge_idx]; 619 old_rx_pg = *rx_pg; 620 621 /* If we fail to allocate a substitute page, we simply stop 622 where we are and drop the whole packet */ 623 err = bnx2x_alloc_rx_sge(bp, fp, sge_idx, GFP_ATOMIC); 624 if (unlikely(err)) { 625 bnx2x_fp_qstats(bp, fp)->rx_skb_alloc_failed++; 626 return err; 627 } 628 629 /* Unmap the page as we're going to pass it to the stack */ 630 dma_unmap_page(&bp->pdev->dev, 631 dma_unmap_addr(&old_rx_pg, mapping), 632 SGE_PAGES, DMA_FROM_DEVICE); 633 /* Add one frag and update the appropriate fields in the skb */ 634 if (fp->mode == TPA_MODE_LRO) 635 skb_fill_page_desc(skb, j, old_rx_pg.page, 0, frag_len); 636 else { /* GRO */ 637 int rem; 638 int offset = 0; 639 for (rem = frag_len; rem > 0; rem -= gro_size) { 640 int len = rem > gro_size ? gro_size : rem; 641 skb_fill_page_desc(skb, frag_id++, 642 old_rx_pg.page, offset, len); 643 if (offset) 644 get_page(old_rx_pg.page); 645 offset += len; 646 } 647 } 648 649 skb->data_len += frag_len; 650 skb->truesize += SGE_PAGES; 651 skb->len += frag_len; 652 653 frag_size -= frag_len; 654 } 655 656 return 0; 657 } 658 659 static void bnx2x_frag_free(const struct bnx2x_fastpath *fp, void *data) 660 { 661 if (fp->rx_frag_size) 662 put_page(virt_to_head_page(data)); 663 else 664 kfree(data); 665 } 666 667 static void *bnx2x_frag_alloc(const struct bnx2x_fastpath *fp, gfp_t gfp_mask) 668 { 669 if (fp->rx_frag_size) { 670 /* GFP_KERNEL allocations are used only during initialization */ 671 if (unlikely(gfp_mask & __GFP_WAIT)) 672 return (void *)__get_free_page(gfp_mask); 673 674 return netdev_alloc_frag(fp->rx_frag_size); 675 } 676 677 return kmalloc(fp->rx_buf_size + NET_SKB_PAD, gfp_mask); 678 } 679 680 #ifdef CONFIG_INET 681 static void bnx2x_gro_ip_csum(struct bnx2x *bp, struct sk_buff *skb) 682 { 683 const struct iphdr *iph = ip_hdr(skb); 684 struct tcphdr *th; 685 686 skb_set_transport_header(skb, sizeof(struct iphdr)); 687 th = tcp_hdr(skb); 688 689 th->check = ~tcp_v4_check(skb->len - skb_transport_offset(skb), 690 iph->saddr, iph->daddr, 0); 691 } 692 693 static void bnx2x_gro_ipv6_csum(struct bnx2x *bp, struct sk_buff *skb) 694 { 695 struct ipv6hdr *iph = ipv6_hdr(skb); 696 struct tcphdr *th; 697 698 skb_set_transport_header(skb, sizeof(struct ipv6hdr)); 699 th = tcp_hdr(skb); 700 701 th->check = ~tcp_v6_check(skb->len - skb_transport_offset(skb), 702 &iph->saddr, &iph->daddr, 0); 703 } 704 705 static void bnx2x_gro_csum(struct bnx2x *bp, struct sk_buff *skb, 706 void (*gro_func)(struct bnx2x*, struct sk_buff*)) 707 { 708 skb_set_network_header(skb, 0); 709 gro_func(bp, skb); 710 tcp_gro_complete(skb); 711 } 712 #endif 713 714 static void bnx2x_gro_receive(struct bnx2x *bp, struct bnx2x_fastpath *fp, 715 struct sk_buff *skb) 716 { 717 #ifdef CONFIG_INET 718 if (skb_shinfo(skb)->gso_size) { 719 switch (be16_to_cpu(skb->protocol)) { 720 case ETH_P_IP: 721 bnx2x_gro_csum(bp, skb, bnx2x_gro_ip_csum); 722 break; 723 case ETH_P_IPV6: 724 bnx2x_gro_csum(bp, skb, bnx2x_gro_ipv6_csum); 725 break; 726 default: 727 BNX2X_ERR("Error: FW GRO supports only IPv4/IPv6, not 0x%04x\n", 728 be16_to_cpu(skb->protocol)); 729 } 730 } 731 #endif 732 skb_record_rx_queue(skb, fp->rx_queue); 733 napi_gro_receive(&fp->napi, skb); 734 } 735 736 static void bnx2x_tpa_stop(struct bnx2x *bp, struct bnx2x_fastpath *fp, 737 struct bnx2x_agg_info *tpa_info, 738 u16 pages, 739 struct eth_end_agg_rx_cqe *cqe, 740 u16 cqe_idx) 741 { 742 struct sw_rx_bd *rx_buf = &tpa_info->first_buf; 743 u8 pad = tpa_info->placement_offset; 744 u16 len = tpa_info->len_on_bd; 745 struct sk_buff *skb = NULL; 746 u8 *new_data, *data = rx_buf->data; 747 u8 old_tpa_state = tpa_info->tpa_state; 748 749 tpa_info->tpa_state = BNX2X_TPA_STOP; 750 751 /* If we there was an error during the handling of the TPA_START - 752 * drop this aggregation. 753 */ 754 if (old_tpa_state == BNX2X_TPA_ERROR) 755 goto drop; 756 757 /* Try to allocate the new data */ 758 new_data = bnx2x_frag_alloc(fp, GFP_ATOMIC); 759 /* Unmap skb in the pool anyway, as we are going to change 760 pool entry status to BNX2X_TPA_STOP even if new skb allocation 761 fails. */ 762 dma_unmap_single(&bp->pdev->dev, dma_unmap_addr(rx_buf, mapping), 763 fp->rx_buf_size, DMA_FROM_DEVICE); 764 if (likely(new_data)) 765 skb = build_skb(data, fp->rx_frag_size); 766 767 if (likely(skb)) { 768 #ifdef BNX2X_STOP_ON_ERROR 769 if (pad + len > fp->rx_buf_size) { 770 BNX2X_ERR("skb_put is about to fail... pad %d len %d rx_buf_size %d\n", 771 pad, len, fp->rx_buf_size); 772 bnx2x_panic(); 773 return; 774 } 775 #endif 776 777 skb_reserve(skb, pad + NET_SKB_PAD); 778 skb_put(skb, len); 779 skb_set_hash(skb, tpa_info->rxhash, tpa_info->rxhash_type); 780 781 skb->protocol = eth_type_trans(skb, bp->dev); 782 skb->ip_summed = CHECKSUM_UNNECESSARY; 783 784 if (!bnx2x_fill_frag_skb(bp, fp, tpa_info, pages, 785 skb, cqe, cqe_idx)) { 786 if (tpa_info->parsing_flags & PARSING_FLAGS_VLAN) 787 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), tpa_info->vlan_tag); 788 bnx2x_gro_receive(bp, fp, skb); 789 } else { 790 DP(NETIF_MSG_RX_STATUS, 791 "Failed to allocate new pages - dropping packet!\n"); 792 dev_kfree_skb_any(skb); 793 } 794 795 /* put new data in bin */ 796 rx_buf->data = new_data; 797 798 return; 799 } 800 bnx2x_frag_free(fp, new_data); 801 drop: 802 /* drop the packet and keep the buffer in the bin */ 803 DP(NETIF_MSG_RX_STATUS, 804 "Failed to allocate or map a new skb - dropping packet!\n"); 805 bnx2x_fp_stats(bp, fp)->eth_q_stats.rx_skb_alloc_failed++; 806 } 807 808 static int bnx2x_alloc_rx_data(struct bnx2x *bp, struct bnx2x_fastpath *fp, 809 u16 index, gfp_t gfp_mask) 810 { 811 u8 *data; 812 struct sw_rx_bd *rx_buf = &fp->rx_buf_ring[index]; 813 struct eth_rx_bd *rx_bd = &fp->rx_desc_ring[index]; 814 dma_addr_t mapping; 815 816 data = bnx2x_frag_alloc(fp, gfp_mask); 817 if (unlikely(data == NULL)) 818 return -ENOMEM; 819 820 mapping = dma_map_single(&bp->pdev->dev, data + NET_SKB_PAD, 821 fp->rx_buf_size, 822 DMA_FROM_DEVICE); 823 if (unlikely(dma_mapping_error(&bp->pdev->dev, mapping))) { 824 bnx2x_frag_free(fp, data); 825 BNX2X_ERR("Can't map rx data\n"); 826 return -ENOMEM; 827 } 828 829 rx_buf->data = data; 830 dma_unmap_addr_set(rx_buf, mapping, mapping); 831 832 rx_bd->addr_hi = cpu_to_le32(U64_HI(mapping)); 833 rx_bd->addr_lo = cpu_to_le32(U64_LO(mapping)); 834 835 return 0; 836 } 837 838 static 839 void bnx2x_csum_validate(struct sk_buff *skb, union eth_rx_cqe *cqe, 840 struct bnx2x_fastpath *fp, 841 struct bnx2x_eth_q_stats *qstats) 842 { 843 /* Do nothing if no L4 csum validation was done. 844 * We do not check whether IP csum was validated. For IPv4 we assume 845 * that if the card got as far as validating the L4 csum, it also 846 * validated the IP csum. IPv6 has no IP csum. 847 */ 848 if (cqe->fast_path_cqe.status_flags & 849 ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG) 850 return; 851 852 /* If L4 validation was done, check if an error was found. */ 853 854 if (cqe->fast_path_cqe.type_error_flags & 855 (ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG | 856 ETH_FAST_PATH_RX_CQE_L4_BAD_XSUM_FLG)) 857 qstats->hw_csum_err++; 858 else 859 skb->ip_summed = CHECKSUM_UNNECESSARY; 860 } 861 862 static int bnx2x_rx_int(struct bnx2x_fastpath *fp, int budget) 863 { 864 struct bnx2x *bp = fp->bp; 865 u16 bd_cons, bd_prod, bd_prod_fw, comp_ring_cons; 866 u16 sw_comp_cons, sw_comp_prod; 867 int rx_pkt = 0; 868 union eth_rx_cqe *cqe; 869 struct eth_fast_path_rx_cqe *cqe_fp; 870 871 #ifdef BNX2X_STOP_ON_ERROR 872 if (unlikely(bp->panic)) 873 return 0; 874 #endif 875 if (budget <= 0) 876 return rx_pkt; 877 878 bd_cons = fp->rx_bd_cons; 879 bd_prod = fp->rx_bd_prod; 880 bd_prod_fw = bd_prod; 881 sw_comp_cons = fp->rx_comp_cons; 882 sw_comp_prod = fp->rx_comp_prod; 883 884 comp_ring_cons = RCQ_BD(sw_comp_cons); 885 cqe = &fp->rx_comp_ring[comp_ring_cons]; 886 cqe_fp = &cqe->fast_path_cqe; 887 888 DP(NETIF_MSG_RX_STATUS, 889 "queue[%d]: sw_comp_cons %u\n", fp->index, sw_comp_cons); 890 891 while (BNX2X_IS_CQE_COMPLETED(cqe_fp)) { 892 struct sw_rx_bd *rx_buf = NULL; 893 struct sk_buff *skb; 894 u8 cqe_fp_flags; 895 enum eth_rx_cqe_type cqe_fp_type; 896 u16 len, pad, queue; 897 u8 *data; 898 u32 rxhash; 899 enum pkt_hash_types rxhash_type; 900 901 #ifdef BNX2X_STOP_ON_ERROR 902 if (unlikely(bp->panic)) 903 return 0; 904 #endif 905 906 bd_prod = RX_BD(bd_prod); 907 bd_cons = RX_BD(bd_cons); 908 909 /* A rmb() is required to ensure that the CQE is not read 910 * before it is written by the adapter DMA. PCI ordering 911 * rules will make sure the other fields are written before 912 * the marker at the end of struct eth_fast_path_rx_cqe 913 * but without rmb() a weakly ordered processor can process 914 * stale data. Without the barrier TPA state-machine might 915 * enter inconsistent state and kernel stack might be 916 * provided with incorrect packet description - these lead 917 * to various kernel crashed. 918 */ 919 rmb(); 920 921 cqe_fp_flags = cqe_fp->type_error_flags; 922 cqe_fp_type = cqe_fp_flags & ETH_FAST_PATH_RX_CQE_TYPE; 923 924 DP(NETIF_MSG_RX_STATUS, 925 "CQE type %x err %x status %x queue %x vlan %x len %u\n", 926 CQE_TYPE(cqe_fp_flags), 927 cqe_fp_flags, cqe_fp->status_flags, 928 le32_to_cpu(cqe_fp->rss_hash_result), 929 le16_to_cpu(cqe_fp->vlan_tag), 930 le16_to_cpu(cqe_fp->pkt_len_or_gro_seg_len)); 931 932 /* is this a slowpath msg? */ 933 if (unlikely(CQE_TYPE_SLOW(cqe_fp_type))) { 934 bnx2x_sp_event(fp, cqe); 935 goto next_cqe; 936 } 937 938 rx_buf = &fp->rx_buf_ring[bd_cons]; 939 data = rx_buf->data; 940 941 if (!CQE_TYPE_FAST(cqe_fp_type)) { 942 struct bnx2x_agg_info *tpa_info; 943 u16 frag_size, pages; 944 #ifdef BNX2X_STOP_ON_ERROR 945 /* sanity check */ 946 if (fp->disable_tpa && 947 (CQE_TYPE_START(cqe_fp_type) || 948 CQE_TYPE_STOP(cqe_fp_type))) 949 BNX2X_ERR("START/STOP packet while disable_tpa type %x\n", 950 CQE_TYPE(cqe_fp_type)); 951 #endif 952 953 if (CQE_TYPE_START(cqe_fp_type)) { 954 u16 queue = cqe_fp->queue_index; 955 DP(NETIF_MSG_RX_STATUS, 956 "calling tpa_start on queue %d\n", 957 queue); 958 959 bnx2x_tpa_start(fp, queue, 960 bd_cons, bd_prod, 961 cqe_fp); 962 963 goto next_rx; 964 } 965 queue = cqe->end_agg_cqe.queue_index; 966 tpa_info = &fp->tpa_info[queue]; 967 DP(NETIF_MSG_RX_STATUS, 968 "calling tpa_stop on queue %d\n", 969 queue); 970 971 frag_size = le16_to_cpu(cqe->end_agg_cqe.pkt_len) - 972 tpa_info->len_on_bd; 973 974 if (fp->mode == TPA_MODE_GRO) 975 pages = (frag_size + tpa_info->full_page - 1) / 976 tpa_info->full_page; 977 else 978 pages = SGE_PAGE_ALIGN(frag_size) >> 979 SGE_PAGE_SHIFT; 980 981 bnx2x_tpa_stop(bp, fp, tpa_info, pages, 982 &cqe->end_agg_cqe, comp_ring_cons); 983 #ifdef BNX2X_STOP_ON_ERROR 984 if (bp->panic) 985 return 0; 986 #endif 987 988 bnx2x_update_sge_prod(fp, pages, &cqe->end_agg_cqe); 989 goto next_cqe; 990 } 991 /* non TPA */ 992 len = le16_to_cpu(cqe_fp->pkt_len_or_gro_seg_len); 993 pad = cqe_fp->placement_offset; 994 dma_sync_single_for_cpu(&bp->pdev->dev, 995 dma_unmap_addr(rx_buf, mapping), 996 pad + RX_COPY_THRESH, 997 DMA_FROM_DEVICE); 998 pad += NET_SKB_PAD; 999 prefetch(data + pad); /* speedup eth_type_trans() */ 1000 /* is this an error packet? */ 1001 if (unlikely(cqe_fp_flags & ETH_RX_ERROR_FALGS)) { 1002 DP(NETIF_MSG_RX_ERR | NETIF_MSG_RX_STATUS, 1003 "ERROR flags %x rx packet %u\n", 1004 cqe_fp_flags, sw_comp_cons); 1005 bnx2x_fp_qstats(bp, fp)->rx_err_discard_pkt++; 1006 goto reuse_rx; 1007 } 1008 1009 /* Since we don't have a jumbo ring 1010 * copy small packets if mtu > 1500 1011 */ 1012 if ((bp->dev->mtu > ETH_MAX_PACKET_SIZE) && 1013 (len <= RX_COPY_THRESH)) { 1014 skb = netdev_alloc_skb_ip_align(bp->dev, len); 1015 if (skb == NULL) { 1016 DP(NETIF_MSG_RX_ERR | NETIF_MSG_RX_STATUS, 1017 "ERROR packet dropped because of alloc failure\n"); 1018 bnx2x_fp_qstats(bp, fp)->rx_skb_alloc_failed++; 1019 goto reuse_rx; 1020 } 1021 memcpy(skb->data, data + pad, len); 1022 bnx2x_reuse_rx_data(fp, bd_cons, bd_prod); 1023 } else { 1024 if (likely(bnx2x_alloc_rx_data(bp, fp, bd_prod, 1025 GFP_ATOMIC) == 0)) { 1026 dma_unmap_single(&bp->pdev->dev, 1027 dma_unmap_addr(rx_buf, mapping), 1028 fp->rx_buf_size, 1029 DMA_FROM_DEVICE); 1030 skb = build_skb(data, fp->rx_frag_size); 1031 if (unlikely(!skb)) { 1032 bnx2x_frag_free(fp, data); 1033 bnx2x_fp_qstats(bp, fp)-> 1034 rx_skb_alloc_failed++; 1035 goto next_rx; 1036 } 1037 skb_reserve(skb, pad); 1038 } else { 1039 DP(NETIF_MSG_RX_ERR | NETIF_MSG_RX_STATUS, 1040 "ERROR packet dropped because of alloc failure\n"); 1041 bnx2x_fp_qstats(bp, fp)->rx_skb_alloc_failed++; 1042 reuse_rx: 1043 bnx2x_reuse_rx_data(fp, bd_cons, bd_prod); 1044 goto next_rx; 1045 } 1046 } 1047 1048 skb_put(skb, len); 1049 skb->protocol = eth_type_trans(skb, bp->dev); 1050 1051 /* Set Toeplitz hash for a none-LRO skb */ 1052 rxhash = bnx2x_get_rxhash(bp, cqe_fp, &rxhash_type); 1053 skb_set_hash(skb, rxhash, rxhash_type); 1054 1055 skb_checksum_none_assert(skb); 1056 1057 if (bp->dev->features & NETIF_F_RXCSUM) 1058 bnx2x_csum_validate(skb, cqe, fp, 1059 bnx2x_fp_qstats(bp, fp)); 1060 1061 skb_record_rx_queue(skb, fp->rx_queue); 1062 1063 if (le16_to_cpu(cqe_fp->pars_flags.flags) & 1064 PARSING_FLAGS_VLAN) 1065 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), 1066 le16_to_cpu(cqe_fp->vlan_tag)); 1067 1068 skb_mark_napi_id(skb, &fp->napi); 1069 1070 if (bnx2x_fp_ll_polling(fp)) 1071 netif_receive_skb(skb); 1072 else 1073 napi_gro_receive(&fp->napi, skb); 1074 next_rx: 1075 rx_buf->data = NULL; 1076 1077 bd_cons = NEXT_RX_IDX(bd_cons); 1078 bd_prod = NEXT_RX_IDX(bd_prod); 1079 bd_prod_fw = NEXT_RX_IDX(bd_prod_fw); 1080 rx_pkt++; 1081 next_cqe: 1082 sw_comp_prod = NEXT_RCQ_IDX(sw_comp_prod); 1083 sw_comp_cons = NEXT_RCQ_IDX(sw_comp_cons); 1084 1085 /* mark CQE as free */ 1086 BNX2X_SEED_CQE(cqe_fp); 1087 1088 if (rx_pkt == budget) 1089 break; 1090 1091 comp_ring_cons = RCQ_BD(sw_comp_cons); 1092 cqe = &fp->rx_comp_ring[comp_ring_cons]; 1093 cqe_fp = &cqe->fast_path_cqe; 1094 } /* while */ 1095 1096 fp->rx_bd_cons = bd_cons; 1097 fp->rx_bd_prod = bd_prod_fw; 1098 fp->rx_comp_cons = sw_comp_cons; 1099 fp->rx_comp_prod = sw_comp_prod; 1100 1101 /* Update producers */ 1102 bnx2x_update_rx_prod(bp, fp, bd_prod_fw, sw_comp_prod, 1103 fp->rx_sge_prod); 1104 1105 fp->rx_pkt += rx_pkt; 1106 fp->rx_calls++; 1107 1108 return rx_pkt; 1109 } 1110 1111 static irqreturn_t bnx2x_msix_fp_int(int irq, void *fp_cookie) 1112 { 1113 struct bnx2x_fastpath *fp = fp_cookie; 1114 struct bnx2x *bp = fp->bp; 1115 u8 cos; 1116 1117 DP(NETIF_MSG_INTR, 1118 "got an MSI-X interrupt on IDX:SB [fp %d fw_sd %d igusb %d]\n", 1119 fp->index, fp->fw_sb_id, fp->igu_sb_id); 1120 1121 bnx2x_ack_sb(bp, fp->igu_sb_id, USTORM_ID, 0, IGU_INT_DISABLE, 0); 1122 1123 #ifdef BNX2X_STOP_ON_ERROR 1124 if (unlikely(bp->panic)) 1125 return IRQ_HANDLED; 1126 #endif 1127 1128 /* Handle Rx and Tx according to MSI-X vector */ 1129 for_each_cos_in_tx_queue(fp, cos) 1130 prefetch(fp->txdata_ptr[cos]->tx_cons_sb); 1131 1132 prefetch(&fp->sb_running_index[SM_RX_ID]); 1133 napi_schedule(&bnx2x_fp(bp, fp->index, napi)); 1134 1135 return IRQ_HANDLED; 1136 } 1137 1138 /* HW Lock for shared dual port PHYs */ 1139 void bnx2x_acquire_phy_lock(struct bnx2x *bp) 1140 { 1141 mutex_lock(&bp->port.phy_mutex); 1142 1143 bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_MDIO); 1144 } 1145 1146 void bnx2x_release_phy_lock(struct bnx2x *bp) 1147 { 1148 bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_MDIO); 1149 1150 mutex_unlock(&bp->port.phy_mutex); 1151 } 1152 1153 /* calculates MF speed according to current linespeed and MF configuration */ 1154 u16 bnx2x_get_mf_speed(struct bnx2x *bp) 1155 { 1156 u16 line_speed = bp->link_vars.line_speed; 1157 if (IS_MF(bp)) { 1158 u16 maxCfg = bnx2x_extract_max_cfg(bp, 1159 bp->mf_config[BP_VN(bp)]); 1160 1161 /* Calculate the current MAX line speed limit for the MF 1162 * devices 1163 */ 1164 if (IS_MF_SI(bp)) 1165 line_speed = (line_speed * maxCfg) / 100; 1166 else { /* SD mode */ 1167 u16 vn_max_rate = maxCfg * 100; 1168 1169 if (vn_max_rate < line_speed) 1170 line_speed = vn_max_rate; 1171 } 1172 } 1173 1174 return line_speed; 1175 } 1176 1177 /** 1178 * bnx2x_fill_report_data - fill link report data to report 1179 * 1180 * @bp: driver handle 1181 * @data: link state to update 1182 * 1183 * It uses a none-atomic bit operations because is called under the mutex. 1184 */ 1185 static void bnx2x_fill_report_data(struct bnx2x *bp, 1186 struct bnx2x_link_report_data *data) 1187 { 1188 u16 line_speed = bnx2x_get_mf_speed(bp); 1189 1190 memset(data, 0, sizeof(*data)); 1191 1192 /* Fill the report data: effective line speed */ 1193 data->line_speed = line_speed; 1194 1195 /* Link is down */ 1196 if (!bp->link_vars.link_up || (bp->flags & MF_FUNC_DIS)) 1197 __set_bit(BNX2X_LINK_REPORT_LINK_DOWN, 1198 &data->link_report_flags); 1199 1200 /* Full DUPLEX */ 1201 if (bp->link_vars.duplex == DUPLEX_FULL) 1202 __set_bit(BNX2X_LINK_REPORT_FD, &data->link_report_flags); 1203 1204 /* Rx Flow Control is ON */ 1205 if (bp->link_vars.flow_ctrl & BNX2X_FLOW_CTRL_RX) 1206 __set_bit(BNX2X_LINK_REPORT_RX_FC_ON, &data->link_report_flags); 1207 1208 /* Tx Flow Control is ON */ 1209 if (bp->link_vars.flow_ctrl & BNX2X_FLOW_CTRL_TX) 1210 __set_bit(BNX2X_LINK_REPORT_TX_FC_ON, &data->link_report_flags); 1211 } 1212 1213 /** 1214 * bnx2x_link_report - report link status to OS. 1215 * 1216 * @bp: driver handle 1217 * 1218 * Calls the __bnx2x_link_report() under the same locking scheme 1219 * as a link/PHY state managing code to ensure a consistent link 1220 * reporting. 1221 */ 1222 1223 void bnx2x_link_report(struct bnx2x *bp) 1224 { 1225 bnx2x_acquire_phy_lock(bp); 1226 __bnx2x_link_report(bp); 1227 bnx2x_release_phy_lock(bp); 1228 } 1229 1230 /** 1231 * __bnx2x_link_report - report link status to OS. 1232 * 1233 * @bp: driver handle 1234 * 1235 * None atomic implementation. 1236 * Should be called under the phy_lock. 1237 */ 1238 void __bnx2x_link_report(struct bnx2x *bp) 1239 { 1240 struct bnx2x_link_report_data cur_data; 1241 1242 /* reread mf_cfg */ 1243 if (IS_PF(bp) && !CHIP_IS_E1(bp)) 1244 bnx2x_read_mf_cfg(bp); 1245 1246 /* Read the current link report info */ 1247 bnx2x_fill_report_data(bp, &cur_data); 1248 1249 /* Don't report link down or exactly the same link status twice */ 1250 if (!memcmp(&cur_data, &bp->last_reported_link, sizeof(cur_data)) || 1251 (test_bit(BNX2X_LINK_REPORT_LINK_DOWN, 1252 &bp->last_reported_link.link_report_flags) && 1253 test_bit(BNX2X_LINK_REPORT_LINK_DOWN, 1254 &cur_data.link_report_flags))) 1255 return; 1256 1257 bp->link_cnt++; 1258 1259 /* We are going to report a new link parameters now - 1260 * remember the current data for the next time. 1261 */ 1262 memcpy(&bp->last_reported_link, &cur_data, sizeof(cur_data)); 1263 1264 if (test_bit(BNX2X_LINK_REPORT_LINK_DOWN, 1265 &cur_data.link_report_flags)) { 1266 netif_carrier_off(bp->dev); 1267 netdev_err(bp->dev, "NIC Link is Down\n"); 1268 return; 1269 } else { 1270 const char *duplex; 1271 const char *flow; 1272 1273 netif_carrier_on(bp->dev); 1274 1275 if (test_and_clear_bit(BNX2X_LINK_REPORT_FD, 1276 &cur_data.link_report_flags)) 1277 duplex = "full"; 1278 else 1279 duplex = "half"; 1280 1281 /* Handle the FC at the end so that only these flags would be 1282 * possibly set. This way we may easily check if there is no FC 1283 * enabled. 1284 */ 1285 if (cur_data.link_report_flags) { 1286 if (test_bit(BNX2X_LINK_REPORT_RX_FC_ON, 1287 &cur_data.link_report_flags)) { 1288 if (test_bit(BNX2X_LINK_REPORT_TX_FC_ON, 1289 &cur_data.link_report_flags)) 1290 flow = "ON - receive & transmit"; 1291 else 1292 flow = "ON - receive"; 1293 } else { 1294 flow = "ON - transmit"; 1295 } 1296 } else { 1297 flow = "none"; 1298 } 1299 netdev_info(bp->dev, "NIC Link is Up, %d Mbps %s duplex, Flow control: %s\n", 1300 cur_data.line_speed, duplex, flow); 1301 } 1302 } 1303 1304 static void bnx2x_set_next_page_sgl(struct bnx2x_fastpath *fp) 1305 { 1306 int i; 1307 1308 for (i = 1; i <= NUM_RX_SGE_PAGES; i++) { 1309 struct eth_rx_sge *sge; 1310 1311 sge = &fp->rx_sge_ring[RX_SGE_CNT * i - 2]; 1312 sge->addr_hi = 1313 cpu_to_le32(U64_HI(fp->rx_sge_mapping + 1314 BCM_PAGE_SIZE*(i % NUM_RX_SGE_PAGES))); 1315 1316 sge->addr_lo = 1317 cpu_to_le32(U64_LO(fp->rx_sge_mapping + 1318 BCM_PAGE_SIZE*(i % NUM_RX_SGE_PAGES))); 1319 } 1320 } 1321 1322 static void bnx2x_free_tpa_pool(struct bnx2x *bp, 1323 struct bnx2x_fastpath *fp, int last) 1324 { 1325 int i; 1326 1327 for (i = 0; i < last; i++) { 1328 struct bnx2x_agg_info *tpa_info = &fp->tpa_info[i]; 1329 struct sw_rx_bd *first_buf = &tpa_info->first_buf; 1330 u8 *data = first_buf->data; 1331 1332 if (data == NULL) { 1333 DP(NETIF_MSG_IFDOWN, "tpa bin %d empty on free\n", i); 1334 continue; 1335 } 1336 if (tpa_info->tpa_state == BNX2X_TPA_START) 1337 dma_unmap_single(&bp->pdev->dev, 1338 dma_unmap_addr(first_buf, mapping), 1339 fp->rx_buf_size, DMA_FROM_DEVICE); 1340 bnx2x_frag_free(fp, data); 1341 first_buf->data = NULL; 1342 } 1343 } 1344 1345 void bnx2x_init_rx_rings_cnic(struct bnx2x *bp) 1346 { 1347 int j; 1348 1349 for_each_rx_queue_cnic(bp, j) { 1350 struct bnx2x_fastpath *fp = &bp->fp[j]; 1351 1352 fp->rx_bd_cons = 0; 1353 1354 /* Activate BD ring */ 1355 /* Warning! 1356 * this will generate an interrupt (to the TSTORM) 1357 * must only be done after chip is initialized 1358 */ 1359 bnx2x_update_rx_prod(bp, fp, fp->rx_bd_prod, fp->rx_comp_prod, 1360 fp->rx_sge_prod); 1361 } 1362 } 1363 1364 void bnx2x_init_rx_rings(struct bnx2x *bp) 1365 { 1366 int func = BP_FUNC(bp); 1367 u16 ring_prod; 1368 int i, j; 1369 1370 /* Allocate TPA resources */ 1371 for_each_eth_queue(bp, j) { 1372 struct bnx2x_fastpath *fp = &bp->fp[j]; 1373 1374 DP(NETIF_MSG_IFUP, 1375 "mtu %d rx_buf_size %d\n", bp->dev->mtu, fp->rx_buf_size); 1376 1377 if (!fp->disable_tpa) { 1378 /* Fill the per-aggregation pool */ 1379 for (i = 0; i < MAX_AGG_QS(bp); i++) { 1380 struct bnx2x_agg_info *tpa_info = 1381 &fp->tpa_info[i]; 1382 struct sw_rx_bd *first_buf = 1383 &tpa_info->first_buf; 1384 1385 first_buf->data = 1386 bnx2x_frag_alloc(fp, GFP_KERNEL); 1387 if (!first_buf->data) { 1388 BNX2X_ERR("Failed to allocate TPA skb pool for queue[%d] - disabling TPA on this queue!\n", 1389 j); 1390 bnx2x_free_tpa_pool(bp, fp, i); 1391 fp->disable_tpa = 1; 1392 break; 1393 } 1394 dma_unmap_addr_set(first_buf, mapping, 0); 1395 tpa_info->tpa_state = BNX2X_TPA_STOP; 1396 } 1397 1398 /* "next page" elements initialization */ 1399 bnx2x_set_next_page_sgl(fp); 1400 1401 /* set SGEs bit mask */ 1402 bnx2x_init_sge_ring_bit_mask(fp); 1403 1404 /* Allocate SGEs and initialize the ring elements */ 1405 for (i = 0, ring_prod = 0; 1406 i < MAX_RX_SGE_CNT*NUM_RX_SGE_PAGES; i++) { 1407 1408 if (bnx2x_alloc_rx_sge(bp, fp, ring_prod, 1409 GFP_KERNEL) < 0) { 1410 BNX2X_ERR("was only able to allocate %d rx sges\n", 1411 i); 1412 BNX2X_ERR("disabling TPA for queue[%d]\n", 1413 j); 1414 /* Cleanup already allocated elements */ 1415 bnx2x_free_rx_sge_range(bp, fp, 1416 ring_prod); 1417 bnx2x_free_tpa_pool(bp, fp, 1418 MAX_AGG_QS(bp)); 1419 fp->disable_tpa = 1; 1420 ring_prod = 0; 1421 break; 1422 } 1423 ring_prod = NEXT_SGE_IDX(ring_prod); 1424 } 1425 1426 fp->rx_sge_prod = ring_prod; 1427 } 1428 } 1429 1430 for_each_eth_queue(bp, j) { 1431 struct bnx2x_fastpath *fp = &bp->fp[j]; 1432 1433 fp->rx_bd_cons = 0; 1434 1435 /* Activate BD ring */ 1436 /* Warning! 1437 * this will generate an interrupt (to the TSTORM) 1438 * must only be done after chip is initialized 1439 */ 1440 bnx2x_update_rx_prod(bp, fp, fp->rx_bd_prod, fp->rx_comp_prod, 1441 fp->rx_sge_prod); 1442 1443 if (j != 0) 1444 continue; 1445 1446 if (CHIP_IS_E1(bp)) { 1447 REG_WR(bp, BAR_USTRORM_INTMEM + 1448 USTORM_MEM_WORKAROUND_ADDRESS_OFFSET(func), 1449 U64_LO(fp->rx_comp_mapping)); 1450 REG_WR(bp, BAR_USTRORM_INTMEM + 1451 USTORM_MEM_WORKAROUND_ADDRESS_OFFSET(func) + 4, 1452 U64_HI(fp->rx_comp_mapping)); 1453 } 1454 } 1455 } 1456 1457 static void bnx2x_free_tx_skbs_queue(struct bnx2x_fastpath *fp) 1458 { 1459 u8 cos; 1460 struct bnx2x *bp = fp->bp; 1461 1462 for_each_cos_in_tx_queue(fp, cos) { 1463 struct bnx2x_fp_txdata *txdata = fp->txdata_ptr[cos]; 1464 unsigned pkts_compl = 0, bytes_compl = 0; 1465 1466 u16 sw_prod = txdata->tx_pkt_prod; 1467 u16 sw_cons = txdata->tx_pkt_cons; 1468 1469 while (sw_cons != sw_prod) { 1470 bnx2x_free_tx_pkt(bp, txdata, TX_BD(sw_cons), 1471 &pkts_compl, &bytes_compl); 1472 sw_cons++; 1473 } 1474 1475 netdev_tx_reset_queue( 1476 netdev_get_tx_queue(bp->dev, 1477 txdata->txq_index)); 1478 } 1479 } 1480 1481 static void bnx2x_free_tx_skbs_cnic(struct bnx2x *bp) 1482 { 1483 int i; 1484 1485 for_each_tx_queue_cnic(bp, i) { 1486 bnx2x_free_tx_skbs_queue(&bp->fp[i]); 1487 } 1488 } 1489 1490 static void bnx2x_free_tx_skbs(struct bnx2x *bp) 1491 { 1492 int i; 1493 1494 for_each_eth_queue(bp, i) { 1495 bnx2x_free_tx_skbs_queue(&bp->fp[i]); 1496 } 1497 } 1498 1499 static void bnx2x_free_rx_bds(struct bnx2x_fastpath *fp) 1500 { 1501 struct bnx2x *bp = fp->bp; 1502 int i; 1503 1504 /* ring wasn't allocated */ 1505 if (fp->rx_buf_ring == NULL) 1506 return; 1507 1508 for (i = 0; i < NUM_RX_BD; i++) { 1509 struct sw_rx_bd *rx_buf = &fp->rx_buf_ring[i]; 1510 u8 *data = rx_buf->data; 1511 1512 if (data == NULL) 1513 continue; 1514 dma_unmap_single(&bp->pdev->dev, 1515 dma_unmap_addr(rx_buf, mapping), 1516 fp->rx_buf_size, DMA_FROM_DEVICE); 1517 1518 rx_buf->data = NULL; 1519 bnx2x_frag_free(fp, data); 1520 } 1521 } 1522 1523 static void bnx2x_free_rx_skbs_cnic(struct bnx2x *bp) 1524 { 1525 int j; 1526 1527 for_each_rx_queue_cnic(bp, j) { 1528 bnx2x_free_rx_bds(&bp->fp[j]); 1529 } 1530 } 1531 1532 static void bnx2x_free_rx_skbs(struct bnx2x *bp) 1533 { 1534 int j; 1535 1536 for_each_eth_queue(bp, j) { 1537 struct bnx2x_fastpath *fp = &bp->fp[j]; 1538 1539 bnx2x_free_rx_bds(fp); 1540 1541 if (!fp->disable_tpa) 1542 bnx2x_free_tpa_pool(bp, fp, MAX_AGG_QS(bp)); 1543 } 1544 } 1545 1546 static void bnx2x_free_skbs_cnic(struct bnx2x *bp) 1547 { 1548 bnx2x_free_tx_skbs_cnic(bp); 1549 bnx2x_free_rx_skbs_cnic(bp); 1550 } 1551 1552 void bnx2x_free_skbs(struct bnx2x *bp) 1553 { 1554 bnx2x_free_tx_skbs(bp); 1555 bnx2x_free_rx_skbs(bp); 1556 } 1557 1558 void bnx2x_update_max_mf_config(struct bnx2x *bp, u32 value) 1559 { 1560 /* load old values */ 1561 u32 mf_cfg = bp->mf_config[BP_VN(bp)]; 1562 1563 if (value != bnx2x_extract_max_cfg(bp, mf_cfg)) { 1564 /* leave all but MAX value */ 1565 mf_cfg &= ~FUNC_MF_CFG_MAX_BW_MASK; 1566 1567 /* set new MAX value */ 1568 mf_cfg |= (value << FUNC_MF_CFG_MAX_BW_SHIFT) 1569 & FUNC_MF_CFG_MAX_BW_MASK; 1570 1571 bnx2x_fw_command(bp, DRV_MSG_CODE_SET_MF_BW, mf_cfg); 1572 } 1573 } 1574 1575 /** 1576 * bnx2x_free_msix_irqs - free previously requested MSI-X IRQ vectors 1577 * 1578 * @bp: driver handle 1579 * @nvecs: number of vectors to be released 1580 */ 1581 static void bnx2x_free_msix_irqs(struct bnx2x *bp, int nvecs) 1582 { 1583 int i, offset = 0; 1584 1585 if (nvecs == offset) 1586 return; 1587 1588 /* VFs don't have a default SB */ 1589 if (IS_PF(bp)) { 1590 free_irq(bp->msix_table[offset].vector, bp->dev); 1591 DP(NETIF_MSG_IFDOWN, "released sp irq (%d)\n", 1592 bp->msix_table[offset].vector); 1593 offset++; 1594 } 1595 1596 if (CNIC_SUPPORT(bp)) { 1597 if (nvecs == offset) 1598 return; 1599 offset++; 1600 } 1601 1602 for_each_eth_queue(bp, i) { 1603 if (nvecs == offset) 1604 return; 1605 DP(NETIF_MSG_IFDOWN, "about to release fp #%d->%d irq\n", 1606 i, bp->msix_table[offset].vector); 1607 1608 free_irq(bp->msix_table[offset++].vector, &bp->fp[i]); 1609 } 1610 } 1611 1612 void bnx2x_free_irq(struct bnx2x *bp) 1613 { 1614 if (bp->flags & USING_MSIX_FLAG && 1615 !(bp->flags & USING_SINGLE_MSIX_FLAG)) { 1616 int nvecs = BNX2X_NUM_ETH_QUEUES(bp) + CNIC_SUPPORT(bp); 1617 1618 /* vfs don't have a default status block */ 1619 if (IS_PF(bp)) 1620 nvecs++; 1621 1622 bnx2x_free_msix_irqs(bp, nvecs); 1623 } else { 1624 free_irq(bp->dev->irq, bp->dev); 1625 } 1626 } 1627 1628 int bnx2x_enable_msix(struct bnx2x *bp) 1629 { 1630 int msix_vec = 0, i, rc; 1631 1632 /* VFs don't have a default status block */ 1633 if (IS_PF(bp)) { 1634 bp->msix_table[msix_vec].entry = msix_vec; 1635 BNX2X_DEV_INFO("msix_table[0].entry = %d (slowpath)\n", 1636 bp->msix_table[0].entry); 1637 msix_vec++; 1638 } 1639 1640 /* Cnic requires an msix vector for itself */ 1641 if (CNIC_SUPPORT(bp)) { 1642 bp->msix_table[msix_vec].entry = msix_vec; 1643 BNX2X_DEV_INFO("msix_table[%d].entry = %d (CNIC)\n", 1644 msix_vec, bp->msix_table[msix_vec].entry); 1645 msix_vec++; 1646 } 1647 1648 /* We need separate vectors for ETH queues only (not FCoE) */ 1649 for_each_eth_queue(bp, i) { 1650 bp->msix_table[msix_vec].entry = msix_vec; 1651 BNX2X_DEV_INFO("msix_table[%d].entry = %d (fastpath #%u)\n", 1652 msix_vec, msix_vec, i); 1653 msix_vec++; 1654 } 1655 1656 DP(BNX2X_MSG_SP, "about to request enable msix with %d vectors\n", 1657 msix_vec); 1658 1659 rc = pci_enable_msix_range(bp->pdev, &bp->msix_table[0], 1660 BNX2X_MIN_MSIX_VEC_CNT(bp), msix_vec); 1661 /* 1662 * reconfigure number of tx/rx queues according to available 1663 * MSI-X vectors 1664 */ 1665 if (rc == -ENOSPC) { 1666 /* Get by with single vector */ 1667 rc = pci_enable_msix_range(bp->pdev, &bp->msix_table[0], 1, 1); 1668 if (rc < 0) { 1669 BNX2X_DEV_INFO("Single MSI-X is not attainable rc %d\n", 1670 rc); 1671 goto no_msix; 1672 } 1673 1674 BNX2X_DEV_INFO("Using single MSI-X vector\n"); 1675 bp->flags |= USING_SINGLE_MSIX_FLAG; 1676 1677 BNX2X_DEV_INFO("set number of queues to 1\n"); 1678 bp->num_ethernet_queues = 1; 1679 bp->num_queues = bp->num_ethernet_queues + bp->num_cnic_queues; 1680 } else if (rc < 0) { 1681 BNX2X_DEV_INFO("MSI-X is not attainable rc %d\n", rc); 1682 goto no_msix; 1683 } else if (rc < msix_vec) { 1684 /* how less vectors we will have? */ 1685 int diff = msix_vec - rc; 1686 1687 BNX2X_DEV_INFO("Trying to use less MSI-X vectors: %d\n", rc); 1688 1689 /* 1690 * decrease number of queues by number of unallocated entries 1691 */ 1692 bp->num_ethernet_queues -= diff; 1693 bp->num_queues = bp->num_ethernet_queues + bp->num_cnic_queues; 1694 1695 BNX2X_DEV_INFO("New queue configuration set: %d\n", 1696 bp->num_queues); 1697 } 1698 1699 bp->flags |= USING_MSIX_FLAG; 1700 1701 return 0; 1702 1703 no_msix: 1704 /* fall to INTx if not enough memory */ 1705 if (rc == -ENOMEM) 1706 bp->flags |= DISABLE_MSI_FLAG; 1707 1708 return rc; 1709 } 1710 1711 static int bnx2x_req_msix_irqs(struct bnx2x *bp) 1712 { 1713 int i, rc, offset = 0; 1714 1715 /* no default status block for vf */ 1716 if (IS_PF(bp)) { 1717 rc = request_irq(bp->msix_table[offset++].vector, 1718 bnx2x_msix_sp_int, 0, 1719 bp->dev->name, bp->dev); 1720 if (rc) { 1721 BNX2X_ERR("request sp irq failed\n"); 1722 return -EBUSY; 1723 } 1724 } 1725 1726 if (CNIC_SUPPORT(bp)) 1727 offset++; 1728 1729 for_each_eth_queue(bp, i) { 1730 struct bnx2x_fastpath *fp = &bp->fp[i]; 1731 snprintf(fp->name, sizeof(fp->name), "%s-fp-%d", 1732 bp->dev->name, i); 1733 1734 rc = request_irq(bp->msix_table[offset].vector, 1735 bnx2x_msix_fp_int, 0, fp->name, fp); 1736 if (rc) { 1737 BNX2X_ERR("request fp #%d irq (%d) failed rc %d\n", i, 1738 bp->msix_table[offset].vector, rc); 1739 bnx2x_free_msix_irqs(bp, offset); 1740 return -EBUSY; 1741 } 1742 1743 offset++; 1744 } 1745 1746 i = BNX2X_NUM_ETH_QUEUES(bp); 1747 if (IS_PF(bp)) { 1748 offset = 1 + CNIC_SUPPORT(bp); 1749 netdev_info(bp->dev, 1750 "using MSI-X IRQs: sp %d fp[%d] %d ... fp[%d] %d\n", 1751 bp->msix_table[0].vector, 1752 0, bp->msix_table[offset].vector, 1753 i - 1, bp->msix_table[offset + i - 1].vector); 1754 } else { 1755 offset = CNIC_SUPPORT(bp); 1756 netdev_info(bp->dev, 1757 "using MSI-X IRQs: fp[%d] %d ... fp[%d] %d\n", 1758 0, bp->msix_table[offset].vector, 1759 i - 1, bp->msix_table[offset + i - 1].vector); 1760 } 1761 return 0; 1762 } 1763 1764 int bnx2x_enable_msi(struct bnx2x *bp) 1765 { 1766 int rc; 1767 1768 rc = pci_enable_msi(bp->pdev); 1769 if (rc) { 1770 BNX2X_DEV_INFO("MSI is not attainable\n"); 1771 return -1; 1772 } 1773 bp->flags |= USING_MSI_FLAG; 1774 1775 return 0; 1776 } 1777 1778 static int bnx2x_req_irq(struct bnx2x *bp) 1779 { 1780 unsigned long flags; 1781 unsigned int irq; 1782 1783 if (bp->flags & (USING_MSI_FLAG | USING_MSIX_FLAG)) 1784 flags = 0; 1785 else 1786 flags = IRQF_SHARED; 1787 1788 if (bp->flags & USING_MSIX_FLAG) 1789 irq = bp->msix_table[0].vector; 1790 else 1791 irq = bp->pdev->irq; 1792 1793 return request_irq(irq, bnx2x_interrupt, flags, bp->dev->name, bp->dev); 1794 } 1795 1796 static int bnx2x_setup_irqs(struct bnx2x *bp) 1797 { 1798 int rc = 0; 1799 if (bp->flags & USING_MSIX_FLAG && 1800 !(bp->flags & USING_SINGLE_MSIX_FLAG)) { 1801 rc = bnx2x_req_msix_irqs(bp); 1802 if (rc) 1803 return rc; 1804 } else { 1805 rc = bnx2x_req_irq(bp); 1806 if (rc) { 1807 BNX2X_ERR("IRQ request failed rc %d, aborting\n", rc); 1808 return rc; 1809 } 1810 if (bp->flags & USING_MSI_FLAG) { 1811 bp->dev->irq = bp->pdev->irq; 1812 netdev_info(bp->dev, "using MSI IRQ %d\n", 1813 bp->dev->irq); 1814 } 1815 if (bp->flags & USING_MSIX_FLAG) { 1816 bp->dev->irq = bp->msix_table[0].vector; 1817 netdev_info(bp->dev, "using MSIX IRQ %d\n", 1818 bp->dev->irq); 1819 } 1820 } 1821 1822 return 0; 1823 } 1824 1825 static void bnx2x_napi_enable_cnic(struct bnx2x *bp) 1826 { 1827 int i; 1828 1829 for_each_rx_queue_cnic(bp, i) { 1830 bnx2x_fp_init_lock(&bp->fp[i]); 1831 napi_enable(&bnx2x_fp(bp, i, napi)); 1832 } 1833 } 1834 1835 static void bnx2x_napi_enable(struct bnx2x *bp) 1836 { 1837 int i; 1838 1839 for_each_eth_queue(bp, i) { 1840 bnx2x_fp_init_lock(&bp->fp[i]); 1841 napi_enable(&bnx2x_fp(bp, i, napi)); 1842 } 1843 } 1844 1845 static void bnx2x_napi_disable_cnic(struct bnx2x *bp) 1846 { 1847 int i; 1848 1849 for_each_rx_queue_cnic(bp, i) { 1850 napi_disable(&bnx2x_fp(bp, i, napi)); 1851 while (!bnx2x_fp_ll_disable(&bp->fp[i])) 1852 usleep_range(1000, 2000); 1853 } 1854 } 1855 1856 static void bnx2x_napi_disable(struct bnx2x *bp) 1857 { 1858 int i; 1859 1860 for_each_eth_queue(bp, i) { 1861 napi_disable(&bnx2x_fp(bp, i, napi)); 1862 while (!bnx2x_fp_ll_disable(&bp->fp[i])) 1863 usleep_range(1000, 2000); 1864 } 1865 } 1866 1867 void bnx2x_netif_start(struct bnx2x *bp) 1868 { 1869 if (netif_running(bp->dev)) { 1870 bnx2x_napi_enable(bp); 1871 if (CNIC_LOADED(bp)) 1872 bnx2x_napi_enable_cnic(bp); 1873 bnx2x_int_enable(bp); 1874 if (bp->state == BNX2X_STATE_OPEN) 1875 netif_tx_wake_all_queues(bp->dev); 1876 } 1877 } 1878 1879 void bnx2x_netif_stop(struct bnx2x *bp, int disable_hw) 1880 { 1881 bnx2x_int_disable_sync(bp, disable_hw); 1882 bnx2x_napi_disable(bp); 1883 if (CNIC_LOADED(bp)) 1884 bnx2x_napi_disable_cnic(bp); 1885 } 1886 1887 u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb, 1888 void *accel_priv, select_queue_fallback_t fallback) 1889 { 1890 struct bnx2x *bp = netdev_priv(dev); 1891 1892 if (CNIC_LOADED(bp) && !NO_FCOE(bp)) { 1893 struct ethhdr *hdr = (struct ethhdr *)skb->data; 1894 u16 ether_type = ntohs(hdr->h_proto); 1895 1896 /* Skip VLAN tag if present */ 1897 if (ether_type == ETH_P_8021Q) { 1898 struct vlan_ethhdr *vhdr = 1899 (struct vlan_ethhdr *)skb->data; 1900 1901 ether_type = ntohs(vhdr->h_vlan_encapsulated_proto); 1902 } 1903 1904 /* If ethertype is FCoE or FIP - use FCoE ring */ 1905 if ((ether_type == ETH_P_FCOE) || (ether_type == ETH_P_FIP)) 1906 return bnx2x_fcoe_tx(bp, txq_index); 1907 } 1908 1909 /* select a non-FCoE queue */ 1910 return fallback(dev, skb) % BNX2X_NUM_ETH_QUEUES(bp); 1911 } 1912 1913 void bnx2x_set_num_queues(struct bnx2x *bp) 1914 { 1915 /* RSS queues */ 1916 bp->num_ethernet_queues = bnx2x_calc_num_queues(bp); 1917 1918 /* override in STORAGE SD modes */ 1919 if (IS_MF_STORAGE_SD(bp) || IS_MF_FCOE_AFEX(bp)) 1920 bp->num_ethernet_queues = 1; 1921 1922 /* Add special queues */ 1923 bp->num_cnic_queues = CNIC_SUPPORT(bp); /* For FCOE */ 1924 bp->num_queues = bp->num_ethernet_queues + bp->num_cnic_queues; 1925 1926 BNX2X_DEV_INFO("set number of queues to %d\n", bp->num_queues); 1927 } 1928 1929 /** 1930 * bnx2x_set_real_num_queues - configure netdev->real_num_[tx,rx]_queues 1931 * 1932 * @bp: Driver handle 1933 * 1934 * We currently support for at most 16 Tx queues for each CoS thus we will 1935 * allocate a multiple of 16 for ETH L2 rings according to the value of the 1936 * bp->max_cos. 1937 * 1938 * If there is an FCoE L2 queue the appropriate Tx queue will have the next 1939 * index after all ETH L2 indices. 1940 * 1941 * If the actual number of Tx queues (for each CoS) is less than 16 then there 1942 * will be the holes at the end of each group of 16 ETh L2 indices (0..15, 1943 * 16..31,...) with indices that are not coupled with any real Tx queue. 1944 * 1945 * The proper configuration of skb->queue_mapping is handled by 1946 * bnx2x_select_queue() and __skb_tx_hash(). 1947 * 1948 * bnx2x_setup_tc() takes care of the proper TC mappings so that __skb_tx_hash() 1949 * will return a proper Tx index if TC is enabled (netdev->num_tc > 0). 1950 */ 1951 static int bnx2x_set_real_num_queues(struct bnx2x *bp, int include_cnic) 1952 { 1953 int rc, tx, rx; 1954 1955 tx = BNX2X_NUM_ETH_QUEUES(bp) * bp->max_cos; 1956 rx = BNX2X_NUM_ETH_QUEUES(bp); 1957 1958 /* account for fcoe queue */ 1959 if (include_cnic && !NO_FCOE(bp)) { 1960 rx++; 1961 tx++; 1962 } 1963 1964 rc = netif_set_real_num_tx_queues(bp->dev, tx); 1965 if (rc) { 1966 BNX2X_ERR("Failed to set real number of Tx queues: %d\n", rc); 1967 return rc; 1968 } 1969 rc = netif_set_real_num_rx_queues(bp->dev, rx); 1970 if (rc) { 1971 BNX2X_ERR("Failed to set real number of Rx queues: %d\n", rc); 1972 return rc; 1973 } 1974 1975 DP(NETIF_MSG_IFUP, "Setting real num queues to (tx, rx) (%d, %d)\n", 1976 tx, rx); 1977 1978 return rc; 1979 } 1980 1981 static void bnx2x_set_rx_buf_size(struct bnx2x *bp) 1982 { 1983 int i; 1984 1985 for_each_queue(bp, i) { 1986 struct bnx2x_fastpath *fp = &bp->fp[i]; 1987 u32 mtu; 1988 1989 /* Always use a mini-jumbo MTU for the FCoE L2 ring */ 1990 if (IS_FCOE_IDX(i)) 1991 /* 1992 * Although there are no IP frames expected to arrive to 1993 * this ring we still want to add an 1994 * IP_HEADER_ALIGNMENT_PADDING to prevent a buffer 1995 * overrun attack. 1996 */ 1997 mtu = BNX2X_FCOE_MINI_JUMBO_MTU; 1998 else 1999 mtu = bp->dev->mtu; 2000 fp->rx_buf_size = BNX2X_FW_RX_ALIGN_START + 2001 IP_HEADER_ALIGNMENT_PADDING + 2002 ETH_OVREHEAD + 2003 mtu + 2004 BNX2X_FW_RX_ALIGN_END; 2005 /* Note : rx_buf_size doesn't take into account NET_SKB_PAD */ 2006 if (fp->rx_buf_size + NET_SKB_PAD <= PAGE_SIZE) 2007 fp->rx_frag_size = fp->rx_buf_size + NET_SKB_PAD; 2008 else 2009 fp->rx_frag_size = 0; 2010 } 2011 } 2012 2013 static int bnx2x_init_rss(struct bnx2x *bp) 2014 { 2015 int i; 2016 u8 num_eth_queues = BNX2X_NUM_ETH_QUEUES(bp); 2017 2018 /* Prepare the initial contents for the indirection table if RSS is 2019 * enabled 2020 */ 2021 for (i = 0; i < sizeof(bp->rss_conf_obj.ind_table); i++) 2022 bp->rss_conf_obj.ind_table[i] = 2023 bp->fp->cl_id + 2024 ethtool_rxfh_indir_default(i, num_eth_queues); 2025 2026 /* 2027 * For 57710 and 57711 SEARCHER configuration (rss_keys) is 2028 * per-port, so if explicit configuration is needed , do it only 2029 * for a PMF. 2030 * 2031 * For 57712 and newer on the other hand it's a per-function 2032 * configuration. 2033 */ 2034 return bnx2x_config_rss_eth(bp, bp->port.pmf || !CHIP_IS_E1x(bp)); 2035 } 2036 2037 int bnx2x_rss(struct bnx2x *bp, struct bnx2x_rss_config_obj *rss_obj, 2038 bool config_hash, bool enable) 2039 { 2040 struct bnx2x_config_rss_params params = {NULL}; 2041 2042 /* Although RSS is meaningless when there is a single HW queue we 2043 * still need it enabled in order to have HW Rx hash generated. 2044 * 2045 * if (!is_eth_multi(bp)) 2046 * bp->multi_mode = ETH_RSS_MODE_DISABLED; 2047 */ 2048 2049 params.rss_obj = rss_obj; 2050 2051 __set_bit(RAMROD_COMP_WAIT, ¶ms.ramrod_flags); 2052 2053 if (enable) { 2054 __set_bit(BNX2X_RSS_MODE_REGULAR, ¶ms.rss_flags); 2055 2056 /* RSS configuration */ 2057 __set_bit(BNX2X_RSS_IPV4, ¶ms.rss_flags); 2058 __set_bit(BNX2X_RSS_IPV4_TCP, ¶ms.rss_flags); 2059 __set_bit(BNX2X_RSS_IPV6, ¶ms.rss_flags); 2060 __set_bit(BNX2X_RSS_IPV6_TCP, ¶ms.rss_flags); 2061 if (rss_obj->udp_rss_v4) 2062 __set_bit(BNX2X_RSS_IPV4_UDP, ¶ms.rss_flags); 2063 if (rss_obj->udp_rss_v6) 2064 __set_bit(BNX2X_RSS_IPV6_UDP, ¶ms.rss_flags); 2065 } else { 2066 __set_bit(BNX2X_RSS_MODE_DISABLED, ¶ms.rss_flags); 2067 } 2068 2069 /* Hash bits */ 2070 params.rss_result_mask = MULTI_MASK; 2071 2072 memcpy(params.ind_table, rss_obj->ind_table, sizeof(params.ind_table)); 2073 2074 if (config_hash) { 2075 /* RSS keys */ 2076 prandom_bytes(params.rss_key, T_ETH_RSS_KEY * 4); 2077 __set_bit(BNX2X_RSS_SET_SRCH, ¶ms.rss_flags); 2078 } 2079 2080 if (IS_PF(bp)) 2081 return bnx2x_config_rss(bp, ¶ms); 2082 else 2083 return bnx2x_vfpf_config_rss(bp, ¶ms); 2084 } 2085 2086 static int bnx2x_init_hw(struct bnx2x *bp, u32 load_code) 2087 { 2088 struct bnx2x_func_state_params func_params = {NULL}; 2089 2090 /* Prepare parameters for function state transitions */ 2091 __set_bit(RAMROD_COMP_WAIT, &func_params.ramrod_flags); 2092 2093 func_params.f_obj = &bp->func_obj; 2094 func_params.cmd = BNX2X_F_CMD_HW_INIT; 2095 2096 func_params.params.hw_init.load_phase = load_code; 2097 2098 return bnx2x_func_state_change(bp, &func_params); 2099 } 2100 2101 /* 2102 * Cleans the object that have internal lists without sending 2103 * ramrods. Should be run when interrupts are disabled. 2104 */ 2105 void bnx2x_squeeze_objects(struct bnx2x *bp) 2106 { 2107 int rc; 2108 unsigned long ramrod_flags = 0, vlan_mac_flags = 0; 2109 struct bnx2x_mcast_ramrod_params rparam = {NULL}; 2110 struct bnx2x_vlan_mac_obj *mac_obj = &bp->sp_objs->mac_obj; 2111 2112 /***************** Cleanup MACs' object first *************************/ 2113 2114 /* Wait for completion of requested */ 2115 __set_bit(RAMROD_COMP_WAIT, &ramrod_flags); 2116 /* Perform a dry cleanup */ 2117 __set_bit(RAMROD_DRV_CLR_ONLY, &ramrod_flags); 2118 2119 /* Clean ETH primary MAC */ 2120 __set_bit(BNX2X_ETH_MAC, &vlan_mac_flags); 2121 rc = mac_obj->delete_all(bp, &bp->sp_objs->mac_obj, &vlan_mac_flags, 2122 &ramrod_flags); 2123 if (rc != 0) 2124 BNX2X_ERR("Failed to clean ETH MACs: %d\n", rc); 2125 2126 /* Cleanup UC list */ 2127 vlan_mac_flags = 0; 2128 __set_bit(BNX2X_UC_LIST_MAC, &vlan_mac_flags); 2129 rc = mac_obj->delete_all(bp, mac_obj, &vlan_mac_flags, 2130 &ramrod_flags); 2131 if (rc != 0) 2132 BNX2X_ERR("Failed to clean UC list MACs: %d\n", rc); 2133 2134 /***************** Now clean mcast object *****************************/ 2135 rparam.mcast_obj = &bp->mcast_obj; 2136 __set_bit(RAMROD_DRV_CLR_ONLY, &rparam.ramrod_flags); 2137 2138 /* Add a DEL command... - Since we're doing a driver cleanup only, 2139 * we take a lock surrounding both the initial send and the CONTs, 2140 * as we don't want a true completion to disrupt us in the middle. 2141 */ 2142 netif_addr_lock_bh(bp->dev); 2143 rc = bnx2x_config_mcast(bp, &rparam, BNX2X_MCAST_CMD_DEL); 2144 if (rc < 0) 2145 BNX2X_ERR("Failed to add a new DEL command to a multi-cast object: %d\n", 2146 rc); 2147 2148 /* ...and wait until all pending commands are cleared */ 2149 rc = bnx2x_config_mcast(bp, &rparam, BNX2X_MCAST_CMD_CONT); 2150 while (rc != 0) { 2151 if (rc < 0) { 2152 BNX2X_ERR("Failed to clean multi-cast object: %d\n", 2153 rc); 2154 netif_addr_unlock_bh(bp->dev); 2155 return; 2156 } 2157 2158 rc = bnx2x_config_mcast(bp, &rparam, BNX2X_MCAST_CMD_CONT); 2159 } 2160 netif_addr_unlock_bh(bp->dev); 2161 } 2162 2163 #ifndef BNX2X_STOP_ON_ERROR 2164 #define LOAD_ERROR_EXIT(bp, label) \ 2165 do { \ 2166 (bp)->state = BNX2X_STATE_ERROR; \ 2167 goto label; \ 2168 } while (0) 2169 2170 #define LOAD_ERROR_EXIT_CNIC(bp, label) \ 2171 do { \ 2172 bp->cnic_loaded = false; \ 2173 goto label; \ 2174 } while (0) 2175 #else /*BNX2X_STOP_ON_ERROR*/ 2176 #define LOAD_ERROR_EXIT(bp, label) \ 2177 do { \ 2178 (bp)->state = BNX2X_STATE_ERROR; \ 2179 (bp)->panic = 1; \ 2180 return -EBUSY; \ 2181 } while (0) 2182 #define LOAD_ERROR_EXIT_CNIC(bp, label) \ 2183 do { \ 2184 bp->cnic_loaded = false; \ 2185 (bp)->panic = 1; \ 2186 return -EBUSY; \ 2187 } while (0) 2188 #endif /*BNX2X_STOP_ON_ERROR*/ 2189 2190 static void bnx2x_free_fw_stats_mem(struct bnx2x *bp) 2191 { 2192 BNX2X_PCI_FREE(bp->fw_stats, bp->fw_stats_mapping, 2193 bp->fw_stats_data_sz + bp->fw_stats_req_sz); 2194 return; 2195 } 2196 2197 static int bnx2x_alloc_fw_stats_mem(struct bnx2x *bp) 2198 { 2199 int num_groups, vf_headroom = 0; 2200 int is_fcoe_stats = NO_FCOE(bp) ? 0 : 1; 2201 2202 /* number of queues for statistics is number of eth queues + FCoE */ 2203 u8 num_queue_stats = BNX2X_NUM_ETH_QUEUES(bp) + is_fcoe_stats; 2204 2205 /* Total number of FW statistics requests = 2206 * 1 for port stats + 1 for PF stats + potential 2 for FCoE (fcoe proper 2207 * and fcoe l2 queue) stats + num of queues (which includes another 1 2208 * for fcoe l2 queue if applicable) 2209 */ 2210 bp->fw_stats_num = 2 + is_fcoe_stats + num_queue_stats; 2211 2212 /* vf stats appear in the request list, but their data is allocated by 2213 * the VFs themselves. We don't include them in the bp->fw_stats_num as 2214 * it is used to determine where to place the vf stats queries in the 2215 * request struct 2216 */ 2217 if (IS_SRIOV(bp)) 2218 vf_headroom = bnx2x_vf_headroom(bp); 2219 2220 /* Request is built from stats_query_header and an array of 2221 * stats_query_cmd_group each of which contains 2222 * STATS_QUERY_CMD_COUNT rules. The real number or requests is 2223 * configured in the stats_query_header. 2224 */ 2225 num_groups = 2226 (((bp->fw_stats_num + vf_headroom) / STATS_QUERY_CMD_COUNT) + 2227 (((bp->fw_stats_num + vf_headroom) % STATS_QUERY_CMD_COUNT) ? 2228 1 : 0)); 2229 2230 DP(BNX2X_MSG_SP, "stats fw_stats_num %d, vf headroom %d, num_groups %d\n", 2231 bp->fw_stats_num, vf_headroom, num_groups); 2232 bp->fw_stats_req_sz = sizeof(struct stats_query_header) + 2233 num_groups * sizeof(struct stats_query_cmd_group); 2234 2235 /* Data for statistics requests + stats_counter 2236 * stats_counter holds per-STORM counters that are incremented 2237 * when STORM has finished with the current request. 2238 * memory for FCoE offloaded statistics are counted anyway, 2239 * even if they will not be sent. 2240 * VF stats are not accounted for here as the data of VF stats is stored 2241 * in memory allocated by the VF, not here. 2242 */ 2243 bp->fw_stats_data_sz = sizeof(struct per_port_stats) + 2244 sizeof(struct per_pf_stats) + 2245 sizeof(struct fcoe_statistics_params) + 2246 sizeof(struct per_queue_stats) * num_queue_stats + 2247 sizeof(struct stats_counter); 2248 2249 bp->fw_stats = BNX2X_PCI_ALLOC(&bp->fw_stats_mapping, 2250 bp->fw_stats_data_sz + bp->fw_stats_req_sz); 2251 if (!bp->fw_stats) 2252 goto alloc_mem_err; 2253 2254 /* Set shortcuts */ 2255 bp->fw_stats_req = (struct bnx2x_fw_stats_req *)bp->fw_stats; 2256 bp->fw_stats_req_mapping = bp->fw_stats_mapping; 2257 bp->fw_stats_data = (struct bnx2x_fw_stats_data *) 2258 ((u8 *)bp->fw_stats + bp->fw_stats_req_sz); 2259 bp->fw_stats_data_mapping = bp->fw_stats_mapping + 2260 bp->fw_stats_req_sz; 2261 2262 DP(BNX2X_MSG_SP, "statistics request base address set to %x %x\n", 2263 U64_HI(bp->fw_stats_req_mapping), 2264 U64_LO(bp->fw_stats_req_mapping)); 2265 DP(BNX2X_MSG_SP, "statistics data base address set to %x %x\n", 2266 U64_HI(bp->fw_stats_data_mapping), 2267 U64_LO(bp->fw_stats_data_mapping)); 2268 return 0; 2269 2270 alloc_mem_err: 2271 bnx2x_free_fw_stats_mem(bp); 2272 BNX2X_ERR("Can't allocate FW stats memory\n"); 2273 return -ENOMEM; 2274 } 2275 2276 /* send load request to mcp and analyze response */ 2277 static int bnx2x_nic_load_request(struct bnx2x *bp, u32 *load_code) 2278 { 2279 u32 param; 2280 2281 /* init fw_seq */ 2282 bp->fw_seq = 2283 (SHMEM_RD(bp, func_mb[BP_FW_MB_IDX(bp)].drv_mb_header) & 2284 DRV_MSG_SEQ_NUMBER_MASK); 2285 BNX2X_DEV_INFO("fw_seq 0x%08x\n", bp->fw_seq); 2286 2287 /* Get current FW pulse sequence */ 2288 bp->fw_drv_pulse_wr_seq = 2289 (SHMEM_RD(bp, func_mb[BP_FW_MB_IDX(bp)].drv_pulse_mb) & 2290 DRV_PULSE_SEQ_MASK); 2291 BNX2X_DEV_INFO("drv_pulse 0x%x\n", bp->fw_drv_pulse_wr_seq); 2292 2293 param = DRV_MSG_CODE_LOAD_REQ_WITH_LFA; 2294 2295 if (IS_MF_SD(bp) && bnx2x_port_after_undi(bp)) 2296 param |= DRV_MSG_CODE_LOAD_REQ_FORCE_LFA; 2297 2298 /* load request */ 2299 (*load_code) = bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_REQ, param); 2300 2301 /* if mcp fails to respond we must abort */ 2302 if (!(*load_code)) { 2303 BNX2X_ERR("MCP response failure, aborting\n"); 2304 return -EBUSY; 2305 } 2306 2307 /* If mcp refused (e.g. other port is in diagnostic mode) we 2308 * must abort 2309 */ 2310 if ((*load_code) == FW_MSG_CODE_DRV_LOAD_REFUSED) { 2311 BNX2X_ERR("MCP refused load request, aborting\n"); 2312 return -EBUSY; 2313 } 2314 return 0; 2315 } 2316 2317 /* check whether another PF has already loaded FW to chip. In 2318 * virtualized environments a pf from another VM may have already 2319 * initialized the device including loading FW 2320 */ 2321 int bnx2x_compare_fw_ver(struct bnx2x *bp, u32 load_code, bool print_err) 2322 { 2323 /* is another pf loaded on this engine? */ 2324 if (load_code != FW_MSG_CODE_DRV_LOAD_COMMON_CHIP && 2325 load_code != FW_MSG_CODE_DRV_LOAD_COMMON) { 2326 /* build my FW version dword */ 2327 u32 my_fw = (BCM_5710_FW_MAJOR_VERSION) + 2328 (BCM_5710_FW_MINOR_VERSION << 8) + 2329 (BCM_5710_FW_REVISION_VERSION << 16) + 2330 (BCM_5710_FW_ENGINEERING_VERSION << 24); 2331 2332 /* read loaded FW from chip */ 2333 u32 loaded_fw = REG_RD(bp, XSEM_REG_PRAM); 2334 2335 DP(BNX2X_MSG_SP, "loaded fw %x, my fw %x\n", 2336 loaded_fw, my_fw); 2337 2338 /* abort nic load if version mismatch */ 2339 if (my_fw != loaded_fw) { 2340 if (print_err) 2341 BNX2X_ERR("bnx2x with FW %x was already loaded which mismatches my %x FW. Aborting\n", 2342 loaded_fw, my_fw); 2343 else 2344 BNX2X_DEV_INFO("bnx2x with FW %x was already loaded which mismatches my %x FW, possibly due to MF UNDI\n", 2345 loaded_fw, my_fw); 2346 return -EBUSY; 2347 } 2348 } 2349 return 0; 2350 } 2351 2352 /* returns the "mcp load_code" according to global load_count array */ 2353 static int bnx2x_nic_load_no_mcp(struct bnx2x *bp, int port) 2354 { 2355 int path = BP_PATH(bp); 2356 2357 DP(NETIF_MSG_IFUP, "NO MCP - load counts[%d] %d, %d, %d\n", 2358 path, bnx2x_load_count[path][0], bnx2x_load_count[path][1], 2359 bnx2x_load_count[path][2]); 2360 bnx2x_load_count[path][0]++; 2361 bnx2x_load_count[path][1 + port]++; 2362 DP(NETIF_MSG_IFUP, "NO MCP - new load counts[%d] %d, %d, %d\n", 2363 path, bnx2x_load_count[path][0], bnx2x_load_count[path][1], 2364 bnx2x_load_count[path][2]); 2365 if (bnx2x_load_count[path][0] == 1) 2366 return FW_MSG_CODE_DRV_LOAD_COMMON; 2367 else if (bnx2x_load_count[path][1 + port] == 1) 2368 return FW_MSG_CODE_DRV_LOAD_PORT; 2369 else 2370 return FW_MSG_CODE_DRV_LOAD_FUNCTION; 2371 } 2372 2373 /* mark PMF if applicable */ 2374 static void bnx2x_nic_load_pmf(struct bnx2x *bp, u32 load_code) 2375 { 2376 if ((load_code == FW_MSG_CODE_DRV_LOAD_COMMON) || 2377 (load_code == FW_MSG_CODE_DRV_LOAD_COMMON_CHIP) || 2378 (load_code == FW_MSG_CODE_DRV_LOAD_PORT)) { 2379 bp->port.pmf = 1; 2380 /* We need the barrier to ensure the ordering between the 2381 * writing to bp->port.pmf here and reading it from the 2382 * bnx2x_periodic_task(). 2383 */ 2384 smp_mb(); 2385 } else { 2386 bp->port.pmf = 0; 2387 } 2388 2389 DP(NETIF_MSG_LINK, "pmf %d\n", bp->port.pmf); 2390 } 2391 2392 static void bnx2x_nic_load_afex_dcc(struct bnx2x *bp, int load_code) 2393 { 2394 if (((load_code == FW_MSG_CODE_DRV_LOAD_COMMON) || 2395 (load_code == FW_MSG_CODE_DRV_LOAD_COMMON_CHIP)) && 2396 (bp->common.shmem2_base)) { 2397 if (SHMEM2_HAS(bp, dcc_support)) 2398 SHMEM2_WR(bp, dcc_support, 2399 (SHMEM_DCC_SUPPORT_DISABLE_ENABLE_PF_TLV | 2400 SHMEM_DCC_SUPPORT_BANDWIDTH_ALLOCATION_TLV)); 2401 if (SHMEM2_HAS(bp, afex_driver_support)) 2402 SHMEM2_WR(bp, afex_driver_support, 2403 SHMEM_AFEX_SUPPORTED_VERSION_ONE); 2404 } 2405 2406 /* Set AFEX default VLAN tag to an invalid value */ 2407 bp->afex_def_vlan_tag = -1; 2408 } 2409 2410 /** 2411 * bnx2x_bz_fp - zero content of the fastpath structure. 2412 * 2413 * @bp: driver handle 2414 * @index: fastpath index to be zeroed 2415 * 2416 * Makes sure the contents of the bp->fp[index].napi is kept 2417 * intact. 2418 */ 2419 static void bnx2x_bz_fp(struct bnx2x *bp, int index) 2420 { 2421 struct bnx2x_fastpath *fp = &bp->fp[index]; 2422 int cos; 2423 struct napi_struct orig_napi = fp->napi; 2424 struct bnx2x_agg_info *orig_tpa_info = fp->tpa_info; 2425 2426 /* bzero bnx2x_fastpath contents */ 2427 if (fp->tpa_info) 2428 memset(fp->tpa_info, 0, ETH_MAX_AGGREGATION_QUEUES_E1H_E2 * 2429 sizeof(struct bnx2x_agg_info)); 2430 memset(fp, 0, sizeof(*fp)); 2431 2432 /* Restore the NAPI object as it has been already initialized */ 2433 fp->napi = orig_napi; 2434 fp->tpa_info = orig_tpa_info; 2435 fp->bp = bp; 2436 fp->index = index; 2437 if (IS_ETH_FP(fp)) 2438 fp->max_cos = bp->max_cos; 2439 else 2440 /* Special queues support only one CoS */ 2441 fp->max_cos = 1; 2442 2443 /* Init txdata pointers */ 2444 if (IS_FCOE_FP(fp)) 2445 fp->txdata_ptr[0] = &bp->bnx2x_txq[FCOE_TXQ_IDX(bp)]; 2446 if (IS_ETH_FP(fp)) 2447 for_each_cos_in_tx_queue(fp, cos) 2448 fp->txdata_ptr[cos] = &bp->bnx2x_txq[cos * 2449 BNX2X_NUM_ETH_QUEUES(bp) + index]; 2450 2451 /* set the tpa flag for each queue. The tpa flag determines the queue 2452 * minimal size so it must be set prior to queue memory allocation 2453 */ 2454 fp->disable_tpa = !(bp->flags & TPA_ENABLE_FLAG || 2455 (bp->flags & GRO_ENABLE_FLAG && 2456 bnx2x_mtu_allows_gro(bp->dev->mtu))); 2457 if (bp->flags & TPA_ENABLE_FLAG) 2458 fp->mode = TPA_MODE_LRO; 2459 else if (bp->flags & GRO_ENABLE_FLAG) 2460 fp->mode = TPA_MODE_GRO; 2461 2462 /* We don't want TPA on an FCoE L2 ring */ 2463 if (IS_FCOE_FP(fp)) 2464 fp->disable_tpa = 1; 2465 } 2466 2467 int bnx2x_load_cnic(struct bnx2x *bp) 2468 { 2469 int i, rc, port = BP_PORT(bp); 2470 2471 DP(NETIF_MSG_IFUP, "Starting CNIC-related load\n"); 2472 2473 mutex_init(&bp->cnic_mutex); 2474 2475 if (IS_PF(bp)) { 2476 rc = bnx2x_alloc_mem_cnic(bp); 2477 if (rc) { 2478 BNX2X_ERR("Unable to allocate bp memory for cnic\n"); 2479 LOAD_ERROR_EXIT_CNIC(bp, load_error_cnic0); 2480 } 2481 } 2482 2483 rc = bnx2x_alloc_fp_mem_cnic(bp); 2484 if (rc) { 2485 BNX2X_ERR("Unable to allocate memory for cnic fps\n"); 2486 LOAD_ERROR_EXIT_CNIC(bp, load_error_cnic0); 2487 } 2488 2489 /* Update the number of queues with the cnic queues */ 2490 rc = bnx2x_set_real_num_queues(bp, 1); 2491 if (rc) { 2492 BNX2X_ERR("Unable to set real_num_queues including cnic\n"); 2493 LOAD_ERROR_EXIT_CNIC(bp, load_error_cnic0); 2494 } 2495 2496 /* Add all CNIC NAPI objects */ 2497 bnx2x_add_all_napi_cnic(bp); 2498 DP(NETIF_MSG_IFUP, "cnic napi added\n"); 2499 bnx2x_napi_enable_cnic(bp); 2500 2501 rc = bnx2x_init_hw_func_cnic(bp); 2502 if (rc) 2503 LOAD_ERROR_EXIT_CNIC(bp, load_error_cnic1); 2504 2505 bnx2x_nic_init_cnic(bp); 2506 2507 if (IS_PF(bp)) { 2508 /* Enable Timer scan */ 2509 REG_WR(bp, TM_REG_EN_LINEAR0_TIMER + port*4, 1); 2510 2511 /* setup cnic queues */ 2512 for_each_cnic_queue(bp, i) { 2513 rc = bnx2x_setup_queue(bp, &bp->fp[i], 0); 2514 if (rc) { 2515 BNX2X_ERR("Queue setup failed\n"); 2516 LOAD_ERROR_EXIT(bp, load_error_cnic2); 2517 } 2518 } 2519 } 2520 2521 /* Initialize Rx filter. */ 2522 bnx2x_set_rx_mode_inner(bp); 2523 2524 /* re-read iscsi info */ 2525 bnx2x_get_iscsi_info(bp); 2526 bnx2x_setup_cnic_irq_info(bp); 2527 bnx2x_setup_cnic_info(bp); 2528 bp->cnic_loaded = true; 2529 if (bp->state == BNX2X_STATE_OPEN) 2530 bnx2x_cnic_notify(bp, CNIC_CTL_START_CMD); 2531 2532 DP(NETIF_MSG_IFUP, "Ending successfully CNIC-related load\n"); 2533 2534 return 0; 2535 2536 #ifndef BNX2X_STOP_ON_ERROR 2537 load_error_cnic2: 2538 /* Disable Timer scan */ 2539 REG_WR(bp, TM_REG_EN_LINEAR0_TIMER + port*4, 0); 2540 2541 load_error_cnic1: 2542 bnx2x_napi_disable_cnic(bp); 2543 /* Update the number of queues without the cnic queues */ 2544 if (bnx2x_set_real_num_queues(bp, 0)) 2545 BNX2X_ERR("Unable to set real_num_queues not including cnic\n"); 2546 load_error_cnic0: 2547 BNX2X_ERR("CNIC-related load failed\n"); 2548 bnx2x_free_fp_mem_cnic(bp); 2549 bnx2x_free_mem_cnic(bp); 2550 return rc; 2551 #endif /* ! BNX2X_STOP_ON_ERROR */ 2552 } 2553 2554 /* must be called with rtnl_lock */ 2555 int bnx2x_nic_load(struct bnx2x *bp, int load_mode) 2556 { 2557 int port = BP_PORT(bp); 2558 int i, rc = 0, load_code = 0; 2559 2560 DP(NETIF_MSG_IFUP, "Starting NIC load\n"); 2561 DP(NETIF_MSG_IFUP, 2562 "CNIC is %s\n", CNIC_ENABLED(bp) ? "enabled" : "disabled"); 2563 2564 #ifdef BNX2X_STOP_ON_ERROR 2565 if (unlikely(bp->panic)) { 2566 BNX2X_ERR("Can't load NIC when there is panic\n"); 2567 return -EPERM; 2568 } 2569 #endif 2570 2571 bp->state = BNX2X_STATE_OPENING_WAIT4_LOAD; 2572 2573 /* zero the structure w/o any lock, before SP handler is initialized */ 2574 memset(&bp->last_reported_link, 0, sizeof(bp->last_reported_link)); 2575 __set_bit(BNX2X_LINK_REPORT_LINK_DOWN, 2576 &bp->last_reported_link.link_report_flags); 2577 2578 if (IS_PF(bp)) 2579 /* must be called before memory allocation and HW init */ 2580 bnx2x_ilt_set_info(bp); 2581 2582 /* 2583 * Zero fastpath structures preserving invariants like napi, which are 2584 * allocated only once, fp index, max_cos, bp pointer. 2585 * Also set fp->disable_tpa and txdata_ptr. 2586 */ 2587 DP(NETIF_MSG_IFUP, "num queues: %d", bp->num_queues); 2588 for_each_queue(bp, i) 2589 bnx2x_bz_fp(bp, i); 2590 memset(bp->bnx2x_txq, 0, (BNX2X_MAX_RSS_COUNT(bp) * BNX2X_MULTI_TX_COS + 2591 bp->num_cnic_queues) * 2592 sizeof(struct bnx2x_fp_txdata)); 2593 2594 bp->fcoe_init = false; 2595 2596 /* Set the receive queues buffer size */ 2597 bnx2x_set_rx_buf_size(bp); 2598 2599 if (IS_PF(bp)) { 2600 rc = bnx2x_alloc_mem(bp); 2601 if (rc) { 2602 BNX2X_ERR("Unable to allocate bp memory\n"); 2603 return rc; 2604 } 2605 } 2606 2607 /* need to be done after alloc mem, since it's self adjusting to amount 2608 * of memory available for RSS queues 2609 */ 2610 rc = bnx2x_alloc_fp_mem(bp); 2611 if (rc) { 2612 BNX2X_ERR("Unable to allocate memory for fps\n"); 2613 LOAD_ERROR_EXIT(bp, load_error0); 2614 } 2615 2616 /* Allocated memory for FW statistics */ 2617 if (bnx2x_alloc_fw_stats_mem(bp)) 2618 LOAD_ERROR_EXIT(bp, load_error0); 2619 2620 /* request pf to initialize status blocks */ 2621 if (IS_VF(bp)) { 2622 rc = bnx2x_vfpf_init(bp); 2623 if (rc) 2624 LOAD_ERROR_EXIT(bp, load_error0); 2625 } 2626 2627 /* As long as bnx2x_alloc_mem() may possibly update 2628 * bp->num_queues, bnx2x_set_real_num_queues() should always 2629 * come after it. At this stage cnic queues are not counted. 2630 */ 2631 rc = bnx2x_set_real_num_queues(bp, 0); 2632 if (rc) { 2633 BNX2X_ERR("Unable to set real_num_queues\n"); 2634 LOAD_ERROR_EXIT(bp, load_error0); 2635 } 2636 2637 /* configure multi cos mappings in kernel. 2638 * this configuration may be overridden by a multi class queue 2639 * discipline or by a dcbx negotiation result. 2640 */ 2641 bnx2x_setup_tc(bp->dev, bp->max_cos); 2642 2643 /* Add all NAPI objects */ 2644 bnx2x_add_all_napi(bp); 2645 DP(NETIF_MSG_IFUP, "napi added\n"); 2646 bnx2x_napi_enable(bp); 2647 2648 if (IS_PF(bp)) { 2649 /* set pf load just before approaching the MCP */ 2650 bnx2x_set_pf_load(bp); 2651 2652 /* if mcp exists send load request and analyze response */ 2653 if (!BP_NOMCP(bp)) { 2654 /* attempt to load pf */ 2655 rc = bnx2x_nic_load_request(bp, &load_code); 2656 if (rc) 2657 LOAD_ERROR_EXIT(bp, load_error1); 2658 2659 /* what did mcp say? */ 2660 rc = bnx2x_compare_fw_ver(bp, load_code, true); 2661 if (rc) { 2662 bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_DONE, 0); 2663 LOAD_ERROR_EXIT(bp, load_error2); 2664 } 2665 } else { 2666 load_code = bnx2x_nic_load_no_mcp(bp, port); 2667 } 2668 2669 /* mark pmf if applicable */ 2670 bnx2x_nic_load_pmf(bp, load_code); 2671 2672 /* Init Function state controlling object */ 2673 bnx2x__init_func_obj(bp); 2674 2675 /* Initialize HW */ 2676 rc = bnx2x_init_hw(bp, load_code); 2677 if (rc) { 2678 BNX2X_ERR("HW init failed, aborting\n"); 2679 bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_DONE, 0); 2680 LOAD_ERROR_EXIT(bp, load_error2); 2681 } 2682 } 2683 2684 bnx2x_pre_irq_nic_init(bp); 2685 2686 /* Connect to IRQs */ 2687 rc = bnx2x_setup_irqs(bp); 2688 if (rc) { 2689 BNX2X_ERR("setup irqs failed\n"); 2690 if (IS_PF(bp)) 2691 bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_DONE, 0); 2692 LOAD_ERROR_EXIT(bp, load_error2); 2693 } 2694 2695 /* Init per-function objects */ 2696 if (IS_PF(bp)) { 2697 /* Setup NIC internals and enable interrupts */ 2698 bnx2x_post_irq_nic_init(bp, load_code); 2699 2700 bnx2x_init_bp_objs(bp); 2701 bnx2x_iov_nic_init(bp); 2702 2703 /* Set AFEX default VLAN tag to an invalid value */ 2704 bp->afex_def_vlan_tag = -1; 2705 bnx2x_nic_load_afex_dcc(bp, load_code); 2706 bp->state = BNX2X_STATE_OPENING_WAIT4_PORT; 2707 rc = bnx2x_func_start(bp); 2708 if (rc) { 2709 BNX2X_ERR("Function start failed!\n"); 2710 bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_DONE, 0); 2711 2712 LOAD_ERROR_EXIT(bp, load_error3); 2713 } 2714 2715 /* Send LOAD_DONE command to MCP */ 2716 if (!BP_NOMCP(bp)) { 2717 load_code = bnx2x_fw_command(bp, 2718 DRV_MSG_CODE_LOAD_DONE, 0); 2719 if (!load_code) { 2720 BNX2X_ERR("MCP response failure, aborting\n"); 2721 rc = -EBUSY; 2722 LOAD_ERROR_EXIT(bp, load_error3); 2723 } 2724 } 2725 2726 /* initialize FW coalescing state machines in RAM */ 2727 bnx2x_update_coalesce(bp); 2728 } 2729 2730 /* setup the leading queue */ 2731 rc = bnx2x_setup_leading(bp); 2732 if (rc) { 2733 BNX2X_ERR("Setup leading failed!\n"); 2734 LOAD_ERROR_EXIT(bp, load_error3); 2735 } 2736 2737 /* set up the rest of the queues */ 2738 for_each_nondefault_eth_queue(bp, i) { 2739 if (IS_PF(bp)) 2740 rc = bnx2x_setup_queue(bp, &bp->fp[i], false); 2741 else /* VF */ 2742 rc = bnx2x_vfpf_setup_q(bp, &bp->fp[i], false); 2743 if (rc) { 2744 BNX2X_ERR("Queue %d setup failed\n", i); 2745 LOAD_ERROR_EXIT(bp, load_error3); 2746 } 2747 } 2748 2749 /* setup rss */ 2750 rc = bnx2x_init_rss(bp); 2751 if (rc) { 2752 BNX2X_ERR("PF RSS init failed\n"); 2753 LOAD_ERROR_EXIT(bp, load_error3); 2754 } 2755 2756 /* Now when Clients are configured we are ready to work */ 2757 bp->state = BNX2X_STATE_OPEN; 2758 2759 /* Configure a ucast MAC */ 2760 if (IS_PF(bp)) 2761 rc = bnx2x_set_eth_mac(bp, true); 2762 else /* vf */ 2763 rc = bnx2x_vfpf_config_mac(bp, bp->dev->dev_addr, bp->fp->index, 2764 true); 2765 if (rc) { 2766 BNX2X_ERR("Setting Ethernet MAC failed\n"); 2767 LOAD_ERROR_EXIT(bp, load_error3); 2768 } 2769 2770 if (IS_PF(bp) && bp->pending_max) { 2771 bnx2x_update_max_mf_config(bp, bp->pending_max); 2772 bp->pending_max = 0; 2773 } 2774 2775 if (bp->port.pmf) { 2776 rc = bnx2x_initial_phy_init(bp, load_mode); 2777 if (rc) 2778 LOAD_ERROR_EXIT(bp, load_error3); 2779 } 2780 bp->link_params.feature_config_flags &= ~FEATURE_CONFIG_BOOT_FROM_SAN; 2781 2782 /* Start fast path */ 2783 2784 /* Initialize Rx filter. */ 2785 bnx2x_set_rx_mode_inner(bp); 2786 2787 /* Start the Tx */ 2788 switch (load_mode) { 2789 case LOAD_NORMAL: 2790 /* Tx queue should be only re-enabled */ 2791 netif_tx_wake_all_queues(bp->dev); 2792 break; 2793 2794 case LOAD_OPEN: 2795 netif_tx_start_all_queues(bp->dev); 2796 smp_mb__after_atomic(); 2797 break; 2798 2799 case LOAD_DIAG: 2800 case LOAD_LOOPBACK_EXT: 2801 bp->state = BNX2X_STATE_DIAG; 2802 break; 2803 2804 default: 2805 break; 2806 } 2807 2808 if (bp->port.pmf) 2809 bnx2x_update_drv_flags(bp, 1 << DRV_FLAGS_PORT_MASK, 0); 2810 else 2811 bnx2x__link_status_update(bp); 2812 2813 /* start the timer */ 2814 mod_timer(&bp->timer, jiffies + bp->current_interval); 2815 2816 if (CNIC_ENABLED(bp)) 2817 bnx2x_load_cnic(bp); 2818 2819 if (IS_PF(bp)) 2820 bnx2x_schedule_sp_rtnl(bp, BNX2X_SP_RTNL_GET_DRV_VERSION, 0); 2821 2822 if (IS_PF(bp) && SHMEM2_HAS(bp, drv_capabilities_flag)) { 2823 /* mark driver is loaded in shmem2 */ 2824 u32 val; 2825 val = SHMEM2_RD(bp, drv_capabilities_flag[BP_FW_MB_IDX(bp)]); 2826 SHMEM2_WR(bp, drv_capabilities_flag[BP_FW_MB_IDX(bp)], 2827 val | DRV_FLAGS_CAPABILITIES_LOADED_SUPPORTED | 2828 DRV_FLAGS_CAPABILITIES_LOADED_L2); 2829 } 2830 2831 /* Wait for all pending SP commands to complete */ 2832 if (IS_PF(bp) && !bnx2x_wait_sp_comp(bp, ~0x0UL)) { 2833 BNX2X_ERR("Timeout waiting for SP elements to complete\n"); 2834 bnx2x_nic_unload(bp, UNLOAD_CLOSE, false); 2835 return -EBUSY; 2836 } 2837 2838 /* If PMF - send ADMIN DCBX msg to MFW to initiate DCBX FSM */ 2839 if (bp->port.pmf && (bp->state != BNX2X_STATE_DIAG)) 2840 bnx2x_dcbx_init(bp, false); 2841 2842 DP(NETIF_MSG_IFUP, "Ending successfully NIC load\n"); 2843 2844 return 0; 2845 2846 #ifndef BNX2X_STOP_ON_ERROR 2847 load_error3: 2848 if (IS_PF(bp)) { 2849 bnx2x_int_disable_sync(bp, 1); 2850 2851 /* Clean queueable objects */ 2852 bnx2x_squeeze_objects(bp); 2853 } 2854 2855 /* Free SKBs, SGEs, TPA pool and driver internals */ 2856 bnx2x_free_skbs(bp); 2857 for_each_rx_queue(bp, i) 2858 bnx2x_free_rx_sge_range(bp, bp->fp + i, NUM_RX_SGE); 2859 2860 /* Release IRQs */ 2861 bnx2x_free_irq(bp); 2862 load_error2: 2863 if (IS_PF(bp) && !BP_NOMCP(bp)) { 2864 bnx2x_fw_command(bp, DRV_MSG_CODE_UNLOAD_REQ_WOL_MCP, 0); 2865 bnx2x_fw_command(bp, DRV_MSG_CODE_UNLOAD_DONE, 0); 2866 } 2867 2868 bp->port.pmf = 0; 2869 load_error1: 2870 bnx2x_napi_disable(bp); 2871 bnx2x_del_all_napi(bp); 2872 2873 /* clear pf_load status, as it was already set */ 2874 if (IS_PF(bp)) 2875 bnx2x_clear_pf_load(bp); 2876 load_error0: 2877 bnx2x_free_fw_stats_mem(bp); 2878 bnx2x_free_fp_mem(bp); 2879 bnx2x_free_mem(bp); 2880 2881 return rc; 2882 #endif /* ! BNX2X_STOP_ON_ERROR */ 2883 } 2884 2885 int bnx2x_drain_tx_queues(struct bnx2x *bp) 2886 { 2887 u8 rc = 0, cos, i; 2888 2889 /* Wait until tx fastpath tasks complete */ 2890 for_each_tx_queue(bp, i) { 2891 struct bnx2x_fastpath *fp = &bp->fp[i]; 2892 2893 for_each_cos_in_tx_queue(fp, cos) 2894 rc = bnx2x_clean_tx_queue(bp, fp->txdata_ptr[cos]); 2895 if (rc) 2896 return rc; 2897 } 2898 return 0; 2899 } 2900 2901 /* must be called with rtnl_lock */ 2902 int bnx2x_nic_unload(struct bnx2x *bp, int unload_mode, bool keep_link) 2903 { 2904 int i; 2905 bool global = false; 2906 2907 DP(NETIF_MSG_IFUP, "Starting NIC unload\n"); 2908 2909 /* mark driver is unloaded in shmem2 */ 2910 if (IS_PF(bp) && SHMEM2_HAS(bp, drv_capabilities_flag)) { 2911 u32 val; 2912 val = SHMEM2_RD(bp, drv_capabilities_flag[BP_FW_MB_IDX(bp)]); 2913 SHMEM2_WR(bp, drv_capabilities_flag[BP_FW_MB_IDX(bp)], 2914 val & ~DRV_FLAGS_CAPABILITIES_LOADED_L2); 2915 } 2916 2917 if (IS_PF(bp) && bp->recovery_state != BNX2X_RECOVERY_DONE && 2918 (bp->state == BNX2X_STATE_CLOSED || 2919 bp->state == BNX2X_STATE_ERROR)) { 2920 /* We can get here if the driver has been unloaded 2921 * during parity error recovery and is either waiting for a 2922 * leader to complete or for other functions to unload and 2923 * then ifdown has been issued. In this case we want to 2924 * unload and let other functions to complete a recovery 2925 * process. 2926 */ 2927 bp->recovery_state = BNX2X_RECOVERY_DONE; 2928 bp->is_leader = 0; 2929 bnx2x_release_leader_lock(bp); 2930 smp_mb(); 2931 2932 DP(NETIF_MSG_IFDOWN, "Releasing a leadership...\n"); 2933 BNX2X_ERR("Can't unload in closed or error state\n"); 2934 return -EINVAL; 2935 } 2936 2937 /* Nothing to do during unload if previous bnx2x_nic_load() 2938 * have not completed successfully - all resources are released. 2939 * 2940 * we can get here only after unsuccessful ndo_* callback, during which 2941 * dev->IFF_UP flag is still on. 2942 */ 2943 if (bp->state == BNX2X_STATE_CLOSED || bp->state == BNX2X_STATE_ERROR) 2944 return 0; 2945 2946 /* It's important to set the bp->state to the value different from 2947 * BNX2X_STATE_OPEN and only then stop the Tx. Otherwise bnx2x_tx_int() 2948 * may restart the Tx from the NAPI context (see bnx2x_tx_int()). 2949 */ 2950 bp->state = BNX2X_STATE_CLOSING_WAIT4_HALT; 2951 smp_mb(); 2952 2953 /* indicate to VFs that the PF is going down */ 2954 bnx2x_iov_channel_down(bp); 2955 2956 if (CNIC_LOADED(bp)) 2957 bnx2x_cnic_notify(bp, CNIC_CTL_STOP_CMD); 2958 2959 /* Stop Tx */ 2960 bnx2x_tx_disable(bp); 2961 netdev_reset_tc(bp->dev); 2962 2963 bp->rx_mode = BNX2X_RX_MODE_NONE; 2964 2965 del_timer_sync(&bp->timer); 2966 2967 if (IS_PF(bp)) { 2968 /* Set ALWAYS_ALIVE bit in shmem */ 2969 bp->fw_drv_pulse_wr_seq |= DRV_PULSE_ALWAYS_ALIVE; 2970 bnx2x_drv_pulse(bp); 2971 bnx2x_stats_handle(bp, STATS_EVENT_STOP); 2972 bnx2x_save_statistics(bp); 2973 } 2974 2975 /* wait till consumers catch up with producers in all queues */ 2976 bnx2x_drain_tx_queues(bp); 2977 2978 /* if VF indicate to PF this function is going down (PF will delete sp 2979 * elements and clear initializations 2980 */ 2981 if (IS_VF(bp)) 2982 bnx2x_vfpf_close_vf(bp); 2983 else if (unload_mode != UNLOAD_RECOVERY) 2984 /* if this is a normal/close unload need to clean up chip*/ 2985 bnx2x_chip_cleanup(bp, unload_mode, keep_link); 2986 else { 2987 /* Send the UNLOAD_REQUEST to the MCP */ 2988 bnx2x_send_unload_req(bp, unload_mode); 2989 2990 /* Prevent transactions to host from the functions on the 2991 * engine that doesn't reset global blocks in case of global 2992 * attention once global blocks are reset and gates are opened 2993 * (the engine which leader will perform the recovery 2994 * last). 2995 */ 2996 if (!CHIP_IS_E1x(bp)) 2997 bnx2x_pf_disable(bp); 2998 2999 /* Disable HW interrupts, NAPI */ 3000 bnx2x_netif_stop(bp, 1); 3001 /* Delete all NAPI objects */ 3002 bnx2x_del_all_napi(bp); 3003 if (CNIC_LOADED(bp)) 3004 bnx2x_del_all_napi_cnic(bp); 3005 /* Release IRQs */ 3006 bnx2x_free_irq(bp); 3007 3008 /* Report UNLOAD_DONE to MCP */ 3009 bnx2x_send_unload_done(bp, false); 3010 } 3011 3012 /* 3013 * At this stage no more interrupts will arrive so we may safely clean 3014 * the queueable objects here in case they failed to get cleaned so far. 3015 */ 3016 if (IS_PF(bp)) 3017 bnx2x_squeeze_objects(bp); 3018 3019 /* There should be no more pending SP commands at this stage */ 3020 bp->sp_state = 0; 3021 3022 bp->port.pmf = 0; 3023 3024 /* clear pending work in rtnl task */ 3025 bp->sp_rtnl_state = 0; 3026 smp_mb(); 3027 3028 /* Free SKBs, SGEs, TPA pool and driver internals */ 3029 bnx2x_free_skbs(bp); 3030 if (CNIC_LOADED(bp)) 3031 bnx2x_free_skbs_cnic(bp); 3032 for_each_rx_queue(bp, i) 3033 bnx2x_free_rx_sge_range(bp, bp->fp + i, NUM_RX_SGE); 3034 3035 bnx2x_free_fp_mem(bp); 3036 if (CNIC_LOADED(bp)) 3037 bnx2x_free_fp_mem_cnic(bp); 3038 3039 if (IS_PF(bp)) { 3040 if (CNIC_LOADED(bp)) 3041 bnx2x_free_mem_cnic(bp); 3042 } 3043 bnx2x_free_mem(bp); 3044 3045 bp->state = BNX2X_STATE_CLOSED; 3046 bp->cnic_loaded = false; 3047 3048 /* Clear driver version indication in shmem */ 3049 if (IS_PF(bp)) 3050 bnx2x_update_mng_version(bp); 3051 3052 /* Check if there are pending parity attentions. If there are - set 3053 * RECOVERY_IN_PROGRESS. 3054 */ 3055 if (IS_PF(bp) && bnx2x_chk_parity_attn(bp, &global, false)) { 3056 bnx2x_set_reset_in_progress(bp); 3057 3058 /* Set RESET_IS_GLOBAL if needed */ 3059 if (global) 3060 bnx2x_set_reset_global(bp); 3061 } 3062 3063 /* The last driver must disable a "close the gate" if there is no 3064 * parity attention or "process kill" pending. 3065 */ 3066 if (IS_PF(bp) && 3067 !bnx2x_clear_pf_load(bp) && 3068 bnx2x_reset_is_done(bp, BP_PATH(bp))) 3069 bnx2x_disable_close_the_gate(bp); 3070 3071 DP(NETIF_MSG_IFUP, "Ending NIC unload\n"); 3072 3073 return 0; 3074 } 3075 3076 int bnx2x_set_power_state(struct bnx2x *bp, pci_power_t state) 3077 { 3078 u16 pmcsr; 3079 3080 /* If there is no power capability, silently succeed */ 3081 if (!bp->pdev->pm_cap) { 3082 BNX2X_DEV_INFO("No power capability. Breaking.\n"); 3083 return 0; 3084 } 3085 3086 pci_read_config_word(bp->pdev, bp->pdev->pm_cap + PCI_PM_CTRL, &pmcsr); 3087 3088 switch (state) { 3089 case PCI_D0: 3090 pci_write_config_word(bp->pdev, bp->pdev->pm_cap + PCI_PM_CTRL, 3091 ((pmcsr & ~PCI_PM_CTRL_STATE_MASK) | 3092 PCI_PM_CTRL_PME_STATUS)); 3093 3094 if (pmcsr & PCI_PM_CTRL_STATE_MASK) 3095 /* delay required during transition out of D3hot */ 3096 msleep(20); 3097 break; 3098 3099 case PCI_D3hot: 3100 /* If there are other clients above don't 3101 shut down the power */ 3102 if (atomic_read(&bp->pdev->enable_cnt) != 1) 3103 return 0; 3104 /* Don't shut down the power for emulation and FPGA */ 3105 if (CHIP_REV_IS_SLOW(bp)) 3106 return 0; 3107 3108 pmcsr &= ~PCI_PM_CTRL_STATE_MASK; 3109 pmcsr |= 3; 3110 3111 if (bp->wol) 3112 pmcsr |= PCI_PM_CTRL_PME_ENABLE; 3113 3114 pci_write_config_word(bp->pdev, bp->pdev->pm_cap + PCI_PM_CTRL, 3115 pmcsr); 3116 3117 /* No more memory access after this point until 3118 * device is brought back to D0. 3119 */ 3120 break; 3121 3122 default: 3123 dev_err(&bp->pdev->dev, "Can't support state = %d\n", state); 3124 return -EINVAL; 3125 } 3126 return 0; 3127 } 3128 3129 /* 3130 * net_device service functions 3131 */ 3132 static int bnx2x_poll(struct napi_struct *napi, int budget) 3133 { 3134 int work_done = 0; 3135 u8 cos; 3136 struct bnx2x_fastpath *fp = container_of(napi, struct bnx2x_fastpath, 3137 napi); 3138 struct bnx2x *bp = fp->bp; 3139 3140 while (1) { 3141 #ifdef BNX2X_STOP_ON_ERROR 3142 if (unlikely(bp->panic)) { 3143 napi_complete(napi); 3144 return 0; 3145 } 3146 #endif 3147 if (!bnx2x_fp_lock_napi(fp)) 3148 return work_done; 3149 3150 for_each_cos_in_tx_queue(fp, cos) 3151 if (bnx2x_tx_queue_has_work(fp->txdata_ptr[cos])) 3152 bnx2x_tx_int(bp, fp->txdata_ptr[cos]); 3153 3154 if (bnx2x_has_rx_work(fp)) { 3155 work_done += bnx2x_rx_int(fp, budget - work_done); 3156 3157 /* must not complete if we consumed full budget */ 3158 if (work_done >= budget) { 3159 bnx2x_fp_unlock_napi(fp); 3160 break; 3161 } 3162 } 3163 3164 /* Fall out from the NAPI loop if needed */ 3165 if (!bnx2x_fp_unlock_napi(fp) && 3166 !(bnx2x_has_rx_work(fp) || bnx2x_has_tx_work(fp))) { 3167 3168 /* No need to update SB for FCoE L2 ring as long as 3169 * it's connected to the default SB and the SB 3170 * has been updated when NAPI was scheduled. 3171 */ 3172 if (IS_FCOE_FP(fp)) { 3173 napi_complete(napi); 3174 break; 3175 } 3176 bnx2x_update_fpsb_idx(fp); 3177 /* bnx2x_has_rx_work() reads the status block, 3178 * thus we need to ensure that status block indices 3179 * have been actually read (bnx2x_update_fpsb_idx) 3180 * prior to this check (bnx2x_has_rx_work) so that 3181 * we won't write the "newer" value of the status block 3182 * to IGU (if there was a DMA right after 3183 * bnx2x_has_rx_work and if there is no rmb, the memory 3184 * reading (bnx2x_update_fpsb_idx) may be postponed 3185 * to right before bnx2x_ack_sb). In this case there 3186 * will never be another interrupt until there is 3187 * another update of the status block, while there 3188 * is still unhandled work. 3189 */ 3190 rmb(); 3191 3192 if (!(bnx2x_has_rx_work(fp) || bnx2x_has_tx_work(fp))) { 3193 napi_complete(napi); 3194 /* Re-enable interrupts */ 3195 DP(NETIF_MSG_RX_STATUS, 3196 "Update index to %d\n", fp->fp_hc_idx); 3197 bnx2x_ack_sb(bp, fp->igu_sb_id, USTORM_ID, 3198 le16_to_cpu(fp->fp_hc_idx), 3199 IGU_INT_ENABLE, 1); 3200 break; 3201 } 3202 } 3203 } 3204 3205 return work_done; 3206 } 3207 3208 #ifdef CONFIG_NET_RX_BUSY_POLL 3209 /* must be called with local_bh_disable()d */ 3210 int bnx2x_low_latency_recv(struct napi_struct *napi) 3211 { 3212 struct bnx2x_fastpath *fp = container_of(napi, struct bnx2x_fastpath, 3213 napi); 3214 struct bnx2x *bp = fp->bp; 3215 int found = 0; 3216 3217 if ((bp->state == BNX2X_STATE_CLOSED) || 3218 (bp->state == BNX2X_STATE_ERROR) || 3219 (bp->flags & (TPA_ENABLE_FLAG | GRO_ENABLE_FLAG))) 3220 return LL_FLUSH_FAILED; 3221 3222 if (!bnx2x_fp_lock_poll(fp)) 3223 return LL_FLUSH_BUSY; 3224 3225 if (bnx2x_has_rx_work(fp)) 3226 found = bnx2x_rx_int(fp, 4); 3227 3228 bnx2x_fp_unlock_poll(fp); 3229 3230 return found; 3231 } 3232 #endif 3233 3234 /* we split the first BD into headers and data BDs 3235 * to ease the pain of our fellow microcode engineers 3236 * we use one mapping for both BDs 3237 */ 3238 static u16 bnx2x_tx_split(struct bnx2x *bp, 3239 struct bnx2x_fp_txdata *txdata, 3240 struct sw_tx_bd *tx_buf, 3241 struct eth_tx_start_bd **tx_bd, u16 hlen, 3242 u16 bd_prod) 3243 { 3244 struct eth_tx_start_bd *h_tx_bd = *tx_bd; 3245 struct eth_tx_bd *d_tx_bd; 3246 dma_addr_t mapping; 3247 int old_len = le16_to_cpu(h_tx_bd->nbytes); 3248 3249 /* first fix first BD */ 3250 h_tx_bd->nbytes = cpu_to_le16(hlen); 3251 3252 DP(NETIF_MSG_TX_QUEUED, "TSO split header size is %d (%x:%x)\n", 3253 h_tx_bd->nbytes, h_tx_bd->addr_hi, h_tx_bd->addr_lo); 3254 3255 /* now get a new data BD 3256 * (after the pbd) and fill it */ 3257 bd_prod = TX_BD(NEXT_TX_IDX(bd_prod)); 3258 d_tx_bd = &txdata->tx_desc_ring[bd_prod].reg_bd; 3259 3260 mapping = HILO_U64(le32_to_cpu(h_tx_bd->addr_hi), 3261 le32_to_cpu(h_tx_bd->addr_lo)) + hlen; 3262 3263 d_tx_bd->addr_hi = cpu_to_le32(U64_HI(mapping)); 3264 d_tx_bd->addr_lo = cpu_to_le32(U64_LO(mapping)); 3265 d_tx_bd->nbytes = cpu_to_le16(old_len - hlen); 3266 3267 /* this marks the BD as one that has no individual mapping */ 3268 tx_buf->flags |= BNX2X_TSO_SPLIT_BD; 3269 3270 DP(NETIF_MSG_TX_QUEUED, 3271 "TSO split data size is %d (%x:%x)\n", 3272 d_tx_bd->nbytes, d_tx_bd->addr_hi, d_tx_bd->addr_lo); 3273 3274 /* update tx_bd */ 3275 *tx_bd = (struct eth_tx_start_bd *)d_tx_bd; 3276 3277 return bd_prod; 3278 } 3279 3280 #define bswab32(b32) ((__force __le32) swab32((__force __u32) (b32))) 3281 #define bswab16(b16) ((__force __le16) swab16((__force __u16) (b16))) 3282 static __le16 bnx2x_csum_fix(unsigned char *t_header, u16 csum, s8 fix) 3283 { 3284 __sum16 tsum = (__force __sum16) csum; 3285 3286 if (fix > 0) 3287 tsum = ~csum_fold(csum_sub((__force __wsum) csum, 3288 csum_partial(t_header - fix, fix, 0))); 3289 3290 else if (fix < 0) 3291 tsum = ~csum_fold(csum_add((__force __wsum) csum, 3292 csum_partial(t_header, -fix, 0))); 3293 3294 return bswab16(tsum); 3295 } 3296 3297 static u32 bnx2x_xmit_type(struct bnx2x *bp, struct sk_buff *skb) 3298 { 3299 u32 rc; 3300 __u8 prot = 0; 3301 __be16 protocol; 3302 3303 if (skb->ip_summed != CHECKSUM_PARTIAL) 3304 return XMIT_PLAIN; 3305 3306 protocol = vlan_get_protocol(skb); 3307 if (protocol == htons(ETH_P_IPV6)) { 3308 rc = XMIT_CSUM_V6; 3309 prot = ipv6_hdr(skb)->nexthdr; 3310 } else { 3311 rc = XMIT_CSUM_V4; 3312 prot = ip_hdr(skb)->protocol; 3313 } 3314 3315 if (!CHIP_IS_E1x(bp) && skb->encapsulation) { 3316 if (inner_ip_hdr(skb)->version == 6) { 3317 rc |= XMIT_CSUM_ENC_V6; 3318 if (inner_ipv6_hdr(skb)->nexthdr == IPPROTO_TCP) 3319 rc |= XMIT_CSUM_TCP; 3320 } else { 3321 rc |= XMIT_CSUM_ENC_V4; 3322 if (inner_ip_hdr(skb)->protocol == IPPROTO_TCP) 3323 rc |= XMIT_CSUM_TCP; 3324 } 3325 } 3326 if (prot == IPPROTO_TCP) 3327 rc |= XMIT_CSUM_TCP; 3328 3329 if (skb_is_gso(skb)) { 3330 if (skb_is_gso_v6(skb)) { 3331 rc |= (XMIT_GSO_V6 | XMIT_CSUM_TCP); 3332 if (rc & XMIT_CSUM_ENC) 3333 rc |= XMIT_GSO_ENC_V6; 3334 } else { 3335 rc |= (XMIT_GSO_V4 | XMIT_CSUM_TCP); 3336 if (rc & XMIT_CSUM_ENC) 3337 rc |= XMIT_GSO_ENC_V4; 3338 } 3339 } 3340 3341 return rc; 3342 } 3343 3344 #if (MAX_SKB_FRAGS >= MAX_FETCH_BD - 3) 3345 /* check if packet requires linearization (packet is too fragmented) 3346 no need to check fragmentation if page size > 8K (there will be no 3347 violation to FW restrictions) */ 3348 static int bnx2x_pkt_req_lin(struct bnx2x *bp, struct sk_buff *skb, 3349 u32 xmit_type) 3350 { 3351 int to_copy = 0; 3352 int hlen = 0; 3353 int first_bd_sz = 0; 3354 3355 /* 3 = 1 (for linear data BD) + 2 (for PBD and last BD) */ 3356 if (skb_shinfo(skb)->nr_frags >= (MAX_FETCH_BD - 3)) { 3357 3358 if (xmit_type & XMIT_GSO) { 3359 unsigned short lso_mss = skb_shinfo(skb)->gso_size; 3360 /* Check if LSO packet needs to be copied: 3361 3 = 1 (for headers BD) + 2 (for PBD and last BD) */ 3362 int wnd_size = MAX_FETCH_BD - 3; 3363 /* Number of windows to check */ 3364 int num_wnds = skb_shinfo(skb)->nr_frags - wnd_size; 3365 int wnd_idx = 0; 3366 int frag_idx = 0; 3367 u32 wnd_sum = 0; 3368 3369 /* Headers length */ 3370 hlen = (int)(skb_transport_header(skb) - skb->data) + 3371 tcp_hdrlen(skb); 3372 3373 /* Amount of data (w/o headers) on linear part of SKB*/ 3374 first_bd_sz = skb_headlen(skb) - hlen; 3375 3376 wnd_sum = first_bd_sz; 3377 3378 /* Calculate the first sum - it's special */ 3379 for (frag_idx = 0; frag_idx < wnd_size - 1; frag_idx++) 3380 wnd_sum += 3381 skb_frag_size(&skb_shinfo(skb)->frags[frag_idx]); 3382 3383 /* If there was data on linear skb data - check it */ 3384 if (first_bd_sz > 0) { 3385 if (unlikely(wnd_sum < lso_mss)) { 3386 to_copy = 1; 3387 goto exit_lbl; 3388 } 3389 3390 wnd_sum -= first_bd_sz; 3391 } 3392 3393 /* Others are easier: run through the frag list and 3394 check all windows */ 3395 for (wnd_idx = 0; wnd_idx <= num_wnds; wnd_idx++) { 3396 wnd_sum += 3397 skb_frag_size(&skb_shinfo(skb)->frags[wnd_idx + wnd_size - 1]); 3398 3399 if (unlikely(wnd_sum < lso_mss)) { 3400 to_copy = 1; 3401 break; 3402 } 3403 wnd_sum -= 3404 skb_frag_size(&skb_shinfo(skb)->frags[wnd_idx]); 3405 } 3406 } else { 3407 /* in non-LSO too fragmented packet should always 3408 be linearized */ 3409 to_copy = 1; 3410 } 3411 } 3412 3413 exit_lbl: 3414 if (unlikely(to_copy)) 3415 DP(NETIF_MSG_TX_QUEUED, 3416 "Linearization IS REQUIRED for %s packet. num_frags %d hlen %d first_bd_sz %d\n", 3417 (xmit_type & XMIT_GSO) ? "LSO" : "non-LSO", 3418 skb_shinfo(skb)->nr_frags, hlen, first_bd_sz); 3419 3420 return to_copy; 3421 } 3422 #endif 3423 3424 static void bnx2x_set_pbd_gso_e2(struct sk_buff *skb, u32 *parsing_data, 3425 u32 xmit_type) 3426 { 3427 struct ipv6hdr *ipv6; 3428 3429 *parsing_data |= (skb_shinfo(skb)->gso_size << 3430 ETH_TX_PARSE_BD_E2_LSO_MSS_SHIFT) & 3431 ETH_TX_PARSE_BD_E2_LSO_MSS; 3432 3433 if (xmit_type & XMIT_GSO_ENC_V6) 3434 ipv6 = inner_ipv6_hdr(skb); 3435 else if (xmit_type & XMIT_GSO_V6) 3436 ipv6 = ipv6_hdr(skb); 3437 else 3438 ipv6 = NULL; 3439 3440 if (ipv6 && ipv6->nexthdr == NEXTHDR_IPV6) 3441 *parsing_data |= ETH_TX_PARSE_BD_E2_IPV6_WITH_EXT_HDR; 3442 } 3443 3444 /** 3445 * bnx2x_set_pbd_gso - update PBD in GSO case. 3446 * 3447 * @skb: packet skb 3448 * @pbd: parse BD 3449 * @xmit_type: xmit flags 3450 */ 3451 static void bnx2x_set_pbd_gso(struct sk_buff *skb, 3452 struct eth_tx_parse_bd_e1x *pbd, 3453 struct eth_tx_start_bd *tx_start_bd, 3454 u32 xmit_type) 3455 { 3456 pbd->lso_mss = cpu_to_le16(skb_shinfo(skb)->gso_size); 3457 pbd->tcp_send_seq = bswab32(tcp_hdr(skb)->seq); 3458 pbd->tcp_flags = pbd_tcp_flags(tcp_hdr(skb)); 3459 3460 if (xmit_type & XMIT_GSO_V4) { 3461 pbd->ip_id = bswab16(ip_hdr(skb)->id); 3462 pbd->tcp_pseudo_csum = 3463 bswab16(~csum_tcpudp_magic(ip_hdr(skb)->saddr, 3464 ip_hdr(skb)->daddr, 3465 0, IPPROTO_TCP, 0)); 3466 3467 /* GSO on 57710/57711 needs FW to calculate IP checksum */ 3468 tx_start_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_IP_CSUM; 3469 } else { 3470 pbd->tcp_pseudo_csum = 3471 bswab16(~csum_ipv6_magic(&ipv6_hdr(skb)->saddr, 3472 &ipv6_hdr(skb)->daddr, 3473 0, IPPROTO_TCP, 0)); 3474 } 3475 3476 pbd->global_data |= 3477 cpu_to_le16(ETH_TX_PARSE_BD_E1X_PSEUDO_CS_WITHOUT_LEN); 3478 } 3479 3480 /** 3481 * bnx2x_set_pbd_csum_enc - update PBD with checksum and return header length 3482 * 3483 * @bp: driver handle 3484 * @skb: packet skb 3485 * @parsing_data: data to be updated 3486 * @xmit_type: xmit flags 3487 * 3488 * 57712/578xx related, when skb has encapsulation 3489 */ 3490 static u8 bnx2x_set_pbd_csum_enc(struct bnx2x *bp, struct sk_buff *skb, 3491 u32 *parsing_data, u32 xmit_type) 3492 { 3493 *parsing_data |= 3494 ((((u8 *)skb_inner_transport_header(skb) - skb->data) >> 1) << 3495 ETH_TX_PARSE_BD_E2_L4_HDR_START_OFFSET_W_SHIFT) & 3496 ETH_TX_PARSE_BD_E2_L4_HDR_START_OFFSET_W; 3497 3498 if (xmit_type & XMIT_CSUM_TCP) { 3499 *parsing_data |= ((inner_tcp_hdrlen(skb) / 4) << 3500 ETH_TX_PARSE_BD_E2_TCP_HDR_LENGTH_DW_SHIFT) & 3501 ETH_TX_PARSE_BD_E2_TCP_HDR_LENGTH_DW; 3502 3503 return skb_inner_transport_header(skb) + 3504 inner_tcp_hdrlen(skb) - skb->data; 3505 } 3506 3507 /* We support checksum offload for TCP and UDP only. 3508 * No need to pass the UDP header length - it's a constant. 3509 */ 3510 return skb_inner_transport_header(skb) + 3511 sizeof(struct udphdr) - skb->data; 3512 } 3513 3514 /** 3515 * bnx2x_set_pbd_csum_e2 - update PBD with checksum and return header length 3516 * 3517 * @bp: driver handle 3518 * @skb: packet skb 3519 * @parsing_data: data to be updated 3520 * @xmit_type: xmit flags 3521 * 3522 * 57712/578xx related 3523 */ 3524 static u8 bnx2x_set_pbd_csum_e2(struct bnx2x *bp, struct sk_buff *skb, 3525 u32 *parsing_data, u32 xmit_type) 3526 { 3527 *parsing_data |= 3528 ((((u8 *)skb_transport_header(skb) - skb->data) >> 1) << 3529 ETH_TX_PARSE_BD_E2_L4_HDR_START_OFFSET_W_SHIFT) & 3530 ETH_TX_PARSE_BD_E2_L4_HDR_START_OFFSET_W; 3531 3532 if (xmit_type & XMIT_CSUM_TCP) { 3533 *parsing_data |= ((tcp_hdrlen(skb) / 4) << 3534 ETH_TX_PARSE_BD_E2_TCP_HDR_LENGTH_DW_SHIFT) & 3535 ETH_TX_PARSE_BD_E2_TCP_HDR_LENGTH_DW; 3536 3537 return skb_transport_header(skb) + tcp_hdrlen(skb) - skb->data; 3538 } 3539 /* We support checksum offload for TCP and UDP only. 3540 * No need to pass the UDP header length - it's a constant. 3541 */ 3542 return skb_transport_header(skb) + sizeof(struct udphdr) - skb->data; 3543 } 3544 3545 /* set FW indication according to inner or outer protocols if tunneled */ 3546 static void bnx2x_set_sbd_csum(struct bnx2x *bp, struct sk_buff *skb, 3547 struct eth_tx_start_bd *tx_start_bd, 3548 u32 xmit_type) 3549 { 3550 tx_start_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_L4_CSUM; 3551 3552 if (xmit_type & (XMIT_CSUM_ENC_V6 | XMIT_CSUM_V6)) 3553 tx_start_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_IPV6; 3554 3555 if (!(xmit_type & XMIT_CSUM_TCP)) 3556 tx_start_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_IS_UDP; 3557 } 3558 3559 /** 3560 * bnx2x_set_pbd_csum - update PBD with checksum and return header length 3561 * 3562 * @bp: driver handle 3563 * @skb: packet skb 3564 * @pbd: parse BD to be updated 3565 * @xmit_type: xmit flags 3566 */ 3567 static u8 bnx2x_set_pbd_csum(struct bnx2x *bp, struct sk_buff *skb, 3568 struct eth_tx_parse_bd_e1x *pbd, 3569 u32 xmit_type) 3570 { 3571 u8 hlen = (skb_network_header(skb) - skb->data) >> 1; 3572 3573 /* for now NS flag is not used in Linux */ 3574 pbd->global_data = 3575 cpu_to_le16(hlen | 3576 ((skb->protocol == cpu_to_be16(ETH_P_8021Q)) << 3577 ETH_TX_PARSE_BD_E1X_LLC_SNAP_EN_SHIFT)); 3578 3579 pbd->ip_hlen_w = (skb_transport_header(skb) - 3580 skb_network_header(skb)) >> 1; 3581 3582 hlen += pbd->ip_hlen_w; 3583 3584 /* We support checksum offload for TCP and UDP only */ 3585 if (xmit_type & XMIT_CSUM_TCP) 3586 hlen += tcp_hdrlen(skb) / 2; 3587 else 3588 hlen += sizeof(struct udphdr) / 2; 3589 3590 pbd->total_hlen_w = cpu_to_le16(hlen); 3591 hlen = hlen*2; 3592 3593 if (xmit_type & XMIT_CSUM_TCP) { 3594 pbd->tcp_pseudo_csum = bswab16(tcp_hdr(skb)->check); 3595 3596 } else { 3597 s8 fix = SKB_CS_OFF(skb); /* signed! */ 3598 3599 DP(NETIF_MSG_TX_QUEUED, 3600 "hlen %d fix %d csum before fix %x\n", 3601 le16_to_cpu(pbd->total_hlen_w), fix, SKB_CS(skb)); 3602 3603 /* HW bug: fixup the CSUM */ 3604 pbd->tcp_pseudo_csum = 3605 bnx2x_csum_fix(skb_transport_header(skb), 3606 SKB_CS(skb), fix); 3607 3608 DP(NETIF_MSG_TX_QUEUED, "csum after fix %x\n", 3609 pbd->tcp_pseudo_csum); 3610 } 3611 3612 return hlen; 3613 } 3614 3615 static void bnx2x_update_pbds_gso_enc(struct sk_buff *skb, 3616 struct eth_tx_parse_bd_e2 *pbd_e2, 3617 struct eth_tx_parse_2nd_bd *pbd2, 3618 u16 *global_data, 3619 u32 xmit_type) 3620 { 3621 u16 hlen_w = 0; 3622 u8 outerip_off, outerip_len = 0; 3623 3624 /* from outer IP to transport */ 3625 hlen_w = (skb_inner_transport_header(skb) - 3626 skb_network_header(skb)) >> 1; 3627 3628 /* transport len */ 3629 hlen_w += inner_tcp_hdrlen(skb) >> 1; 3630 3631 pbd2->fw_ip_hdr_to_payload_w = hlen_w; 3632 3633 /* outer IP header info */ 3634 if (xmit_type & XMIT_CSUM_V4) { 3635 struct iphdr *iph = ip_hdr(skb); 3636 u32 csum = (__force u32)(~iph->check) - 3637 (__force u32)iph->tot_len - 3638 (__force u32)iph->frag_off; 3639 3640 pbd2->fw_ip_csum_wo_len_flags_frag = 3641 bswab16(csum_fold((__force __wsum)csum)); 3642 } else { 3643 pbd2->fw_ip_hdr_to_payload_w = 3644 hlen_w - ((sizeof(struct ipv6hdr)) >> 1); 3645 } 3646 3647 pbd2->tcp_send_seq = bswab32(inner_tcp_hdr(skb)->seq); 3648 3649 pbd2->tcp_flags = pbd_tcp_flags(inner_tcp_hdr(skb)); 3650 3651 if (xmit_type & XMIT_GSO_V4) { 3652 pbd2->hw_ip_id = bswab16(inner_ip_hdr(skb)->id); 3653 3654 pbd_e2->data.tunnel_data.pseudo_csum = 3655 bswab16(~csum_tcpudp_magic( 3656 inner_ip_hdr(skb)->saddr, 3657 inner_ip_hdr(skb)->daddr, 3658 0, IPPROTO_TCP, 0)); 3659 3660 outerip_len = ip_hdr(skb)->ihl << 1; 3661 } else { 3662 pbd_e2->data.tunnel_data.pseudo_csum = 3663 bswab16(~csum_ipv6_magic( 3664 &inner_ipv6_hdr(skb)->saddr, 3665 &inner_ipv6_hdr(skb)->daddr, 3666 0, IPPROTO_TCP, 0)); 3667 } 3668 3669 outerip_off = (skb_network_header(skb) - skb->data) >> 1; 3670 3671 *global_data |= 3672 outerip_off | 3673 (!!(xmit_type & XMIT_CSUM_V6) << 3674 ETH_TX_PARSE_2ND_BD_IP_HDR_TYPE_OUTER_SHIFT) | 3675 (outerip_len << 3676 ETH_TX_PARSE_2ND_BD_IP_HDR_LEN_OUTER_W_SHIFT) | 3677 ((skb->protocol == cpu_to_be16(ETH_P_8021Q)) << 3678 ETH_TX_PARSE_2ND_BD_LLC_SNAP_EN_SHIFT); 3679 3680 if (ip_hdr(skb)->protocol == IPPROTO_UDP) { 3681 SET_FLAG(*global_data, ETH_TX_PARSE_2ND_BD_TUNNEL_UDP_EXIST, 1); 3682 pbd2->tunnel_udp_hdr_start_w = skb_transport_offset(skb) >> 1; 3683 } 3684 } 3685 3686 /* called with netif_tx_lock 3687 * bnx2x_tx_int() runs without netif_tx_lock unless it needs to call 3688 * netif_wake_queue() 3689 */ 3690 netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev) 3691 { 3692 struct bnx2x *bp = netdev_priv(dev); 3693 3694 struct netdev_queue *txq; 3695 struct bnx2x_fp_txdata *txdata; 3696 struct sw_tx_bd *tx_buf; 3697 struct eth_tx_start_bd *tx_start_bd, *first_bd; 3698 struct eth_tx_bd *tx_data_bd, *total_pkt_bd = NULL; 3699 struct eth_tx_parse_bd_e1x *pbd_e1x = NULL; 3700 struct eth_tx_parse_bd_e2 *pbd_e2 = NULL; 3701 struct eth_tx_parse_2nd_bd *pbd2 = NULL; 3702 u32 pbd_e2_parsing_data = 0; 3703 u16 pkt_prod, bd_prod; 3704 int nbd, txq_index; 3705 dma_addr_t mapping; 3706 u32 xmit_type = bnx2x_xmit_type(bp, skb); 3707 int i; 3708 u8 hlen = 0; 3709 __le16 pkt_size = 0; 3710 struct ethhdr *eth; 3711 u8 mac_type = UNICAST_ADDRESS; 3712 3713 #ifdef BNX2X_STOP_ON_ERROR 3714 if (unlikely(bp->panic)) 3715 return NETDEV_TX_BUSY; 3716 #endif 3717 3718 txq_index = skb_get_queue_mapping(skb); 3719 txq = netdev_get_tx_queue(dev, txq_index); 3720 3721 BUG_ON(txq_index >= MAX_ETH_TXQ_IDX(bp) + (CNIC_LOADED(bp) ? 1 : 0)); 3722 3723 txdata = &bp->bnx2x_txq[txq_index]; 3724 3725 /* enable this debug print to view the transmission queue being used 3726 DP(NETIF_MSG_TX_QUEUED, "indices: txq %d, fp %d, txdata %d\n", 3727 txq_index, fp_index, txdata_index); */ 3728 3729 /* enable this debug print to view the transmission details 3730 DP(NETIF_MSG_TX_QUEUED, 3731 "transmitting packet cid %d fp index %d txdata_index %d tx_data ptr %p fp pointer %p\n", 3732 txdata->cid, fp_index, txdata_index, txdata, fp); */ 3733 3734 if (unlikely(bnx2x_tx_avail(bp, txdata) < 3735 skb_shinfo(skb)->nr_frags + 3736 BDS_PER_TX_PKT + 3737 NEXT_CNT_PER_TX_PKT(MAX_BDS_PER_TX_PKT))) { 3738 /* Handle special storage cases separately */ 3739 if (txdata->tx_ring_size == 0) { 3740 struct bnx2x_eth_q_stats *q_stats = 3741 bnx2x_fp_qstats(bp, txdata->parent_fp); 3742 q_stats->driver_filtered_tx_pkt++; 3743 dev_kfree_skb(skb); 3744 return NETDEV_TX_OK; 3745 } 3746 bnx2x_fp_qstats(bp, txdata->parent_fp)->driver_xoff++; 3747 netif_tx_stop_queue(txq); 3748 BNX2X_ERR("BUG! Tx ring full when queue awake!\n"); 3749 3750 return NETDEV_TX_BUSY; 3751 } 3752 3753 DP(NETIF_MSG_TX_QUEUED, 3754 "queue[%d]: SKB: summed %x protocol %x protocol(%x,%x) gso type %x xmit_type %x len %d\n", 3755 txq_index, skb->ip_summed, skb->protocol, ipv6_hdr(skb)->nexthdr, 3756 ip_hdr(skb)->protocol, skb_shinfo(skb)->gso_type, xmit_type, 3757 skb->len); 3758 3759 eth = (struct ethhdr *)skb->data; 3760 3761 /* set flag according to packet type (UNICAST_ADDRESS is default)*/ 3762 if (unlikely(is_multicast_ether_addr(eth->h_dest))) { 3763 if (is_broadcast_ether_addr(eth->h_dest)) 3764 mac_type = BROADCAST_ADDRESS; 3765 else 3766 mac_type = MULTICAST_ADDRESS; 3767 } 3768 3769 #if (MAX_SKB_FRAGS >= MAX_FETCH_BD - BDS_PER_TX_PKT) 3770 /* First, check if we need to linearize the skb (due to FW 3771 restrictions). No need to check fragmentation if page size > 8K 3772 (there will be no violation to FW restrictions) */ 3773 if (bnx2x_pkt_req_lin(bp, skb, xmit_type)) { 3774 /* Statistics of linearization */ 3775 bp->lin_cnt++; 3776 if (skb_linearize(skb) != 0) { 3777 DP(NETIF_MSG_TX_QUEUED, 3778 "SKB linearization failed - silently dropping this SKB\n"); 3779 dev_kfree_skb_any(skb); 3780 return NETDEV_TX_OK; 3781 } 3782 } 3783 #endif 3784 /* Map skb linear data for DMA */ 3785 mapping = dma_map_single(&bp->pdev->dev, skb->data, 3786 skb_headlen(skb), DMA_TO_DEVICE); 3787 if (unlikely(dma_mapping_error(&bp->pdev->dev, mapping))) { 3788 DP(NETIF_MSG_TX_QUEUED, 3789 "SKB mapping failed - silently dropping this SKB\n"); 3790 dev_kfree_skb_any(skb); 3791 return NETDEV_TX_OK; 3792 } 3793 /* 3794 Please read carefully. First we use one BD which we mark as start, 3795 then we have a parsing info BD (used for TSO or xsum), 3796 and only then we have the rest of the TSO BDs. 3797 (don't forget to mark the last one as last, 3798 and to unmap only AFTER you write to the BD ...) 3799 And above all, all pdb sizes are in words - NOT DWORDS! 3800 */ 3801 3802 /* get current pkt produced now - advance it just before sending packet 3803 * since mapping of pages may fail and cause packet to be dropped 3804 */ 3805 pkt_prod = txdata->tx_pkt_prod; 3806 bd_prod = TX_BD(txdata->tx_bd_prod); 3807 3808 /* get a tx_buf and first BD 3809 * tx_start_bd may be changed during SPLIT, 3810 * but first_bd will always stay first 3811 */ 3812 tx_buf = &txdata->tx_buf_ring[TX_BD(pkt_prod)]; 3813 tx_start_bd = &txdata->tx_desc_ring[bd_prod].start_bd; 3814 first_bd = tx_start_bd; 3815 3816 tx_start_bd->bd_flags.as_bitfield = ETH_TX_BD_FLAGS_START_BD; 3817 3818 /* header nbd: indirectly zero other flags! */ 3819 tx_start_bd->general_data = 1 << ETH_TX_START_BD_HDR_NBDS_SHIFT; 3820 3821 /* remember the first BD of the packet */ 3822 tx_buf->first_bd = txdata->tx_bd_prod; 3823 tx_buf->skb = skb; 3824 tx_buf->flags = 0; 3825 3826 DP(NETIF_MSG_TX_QUEUED, 3827 "sending pkt %u @%p next_idx %u bd %u @%p\n", 3828 pkt_prod, tx_buf, txdata->tx_pkt_prod, bd_prod, tx_start_bd); 3829 3830 if (vlan_tx_tag_present(skb)) { 3831 tx_start_bd->vlan_or_ethertype = 3832 cpu_to_le16(vlan_tx_tag_get(skb)); 3833 tx_start_bd->bd_flags.as_bitfield |= 3834 (X_ETH_OUTBAND_VLAN << ETH_TX_BD_FLAGS_VLAN_MODE_SHIFT); 3835 } else { 3836 /* when transmitting in a vf, start bd must hold the ethertype 3837 * for fw to enforce it 3838 */ 3839 if (IS_VF(bp)) 3840 tx_start_bd->vlan_or_ethertype = 3841 cpu_to_le16(ntohs(eth->h_proto)); 3842 else 3843 /* used by FW for packet accounting */ 3844 tx_start_bd->vlan_or_ethertype = cpu_to_le16(pkt_prod); 3845 } 3846 3847 nbd = 2; /* start_bd + pbd + frags (updated when pages are mapped) */ 3848 3849 /* turn on parsing and get a BD */ 3850 bd_prod = TX_BD(NEXT_TX_IDX(bd_prod)); 3851 3852 if (xmit_type & XMIT_CSUM) 3853 bnx2x_set_sbd_csum(bp, skb, tx_start_bd, xmit_type); 3854 3855 if (!CHIP_IS_E1x(bp)) { 3856 pbd_e2 = &txdata->tx_desc_ring[bd_prod].parse_bd_e2; 3857 memset(pbd_e2, 0, sizeof(struct eth_tx_parse_bd_e2)); 3858 3859 if (xmit_type & XMIT_CSUM_ENC) { 3860 u16 global_data = 0; 3861 3862 /* Set PBD in enc checksum offload case */ 3863 hlen = bnx2x_set_pbd_csum_enc(bp, skb, 3864 &pbd_e2_parsing_data, 3865 xmit_type); 3866 3867 /* turn on 2nd parsing and get a BD */ 3868 bd_prod = TX_BD(NEXT_TX_IDX(bd_prod)); 3869 3870 pbd2 = &txdata->tx_desc_ring[bd_prod].parse_2nd_bd; 3871 3872 memset(pbd2, 0, sizeof(*pbd2)); 3873 3874 pbd_e2->data.tunnel_data.ip_hdr_start_inner_w = 3875 (skb_inner_network_header(skb) - 3876 skb->data) >> 1; 3877 3878 if (xmit_type & XMIT_GSO_ENC) 3879 bnx2x_update_pbds_gso_enc(skb, pbd_e2, pbd2, 3880 &global_data, 3881 xmit_type); 3882 3883 pbd2->global_data = cpu_to_le16(global_data); 3884 3885 /* add addition parse BD indication to start BD */ 3886 SET_FLAG(tx_start_bd->general_data, 3887 ETH_TX_START_BD_PARSE_NBDS, 1); 3888 /* set encapsulation flag in start BD */ 3889 SET_FLAG(tx_start_bd->general_data, 3890 ETH_TX_START_BD_TUNNEL_EXIST, 1); 3891 nbd++; 3892 } else if (xmit_type & XMIT_CSUM) { 3893 /* Set PBD in checksum offload case w/o encapsulation */ 3894 hlen = bnx2x_set_pbd_csum_e2(bp, skb, 3895 &pbd_e2_parsing_data, 3896 xmit_type); 3897 } 3898 3899 /* Add the macs to the parsing BD if this is a vf or if 3900 * Tx Switching is enabled. 3901 */ 3902 if (IS_VF(bp)) { 3903 /* override GRE parameters in BD */ 3904 bnx2x_set_fw_mac_addr(&pbd_e2->data.mac_addr.src_hi, 3905 &pbd_e2->data.mac_addr.src_mid, 3906 &pbd_e2->data.mac_addr.src_lo, 3907 eth->h_source); 3908 3909 bnx2x_set_fw_mac_addr(&pbd_e2->data.mac_addr.dst_hi, 3910 &pbd_e2->data.mac_addr.dst_mid, 3911 &pbd_e2->data.mac_addr.dst_lo, 3912 eth->h_dest); 3913 } else if (bp->flags & TX_SWITCHING) { 3914 bnx2x_set_fw_mac_addr(&pbd_e2->data.mac_addr.dst_hi, 3915 &pbd_e2->data.mac_addr.dst_mid, 3916 &pbd_e2->data.mac_addr.dst_lo, 3917 eth->h_dest); 3918 } 3919 3920 SET_FLAG(pbd_e2_parsing_data, 3921 ETH_TX_PARSE_BD_E2_ETH_ADDR_TYPE, mac_type); 3922 } else { 3923 u16 global_data = 0; 3924 pbd_e1x = &txdata->tx_desc_ring[bd_prod].parse_bd_e1x; 3925 memset(pbd_e1x, 0, sizeof(struct eth_tx_parse_bd_e1x)); 3926 /* Set PBD in checksum offload case */ 3927 if (xmit_type & XMIT_CSUM) 3928 hlen = bnx2x_set_pbd_csum(bp, skb, pbd_e1x, xmit_type); 3929 3930 SET_FLAG(global_data, 3931 ETH_TX_PARSE_BD_E1X_ETH_ADDR_TYPE, mac_type); 3932 pbd_e1x->global_data |= cpu_to_le16(global_data); 3933 } 3934 3935 /* Setup the data pointer of the first BD of the packet */ 3936 tx_start_bd->addr_hi = cpu_to_le32(U64_HI(mapping)); 3937 tx_start_bd->addr_lo = cpu_to_le32(U64_LO(mapping)); 3938 tx_start_bd->nbytes = cpu_to_le16(skb_headlen(skb)); 3939 pkt_size = tx_start_bd->nbytes; 3940 3941 DP(NETIF_MSG_TX_QUEUED, 3942 "first bd @%p addr (%x:%x) nbytes %d flags %x vlan %x\n", 3943 tx_start_bd, tx_start_bd->addr_hi, tx_start_bd->addr_lo, 3944 le16_to_cpu(tx_start_bd->nbytes), 3945 tx_start_bd->bd_flags.as_bitfield, 3946 le16_to_cpu(tx_start_bd->vlan_or_ethertype)); 3947 3948 if (xmit_type & XMIT_GSO) { 3949 3950 DP(NETIF_MSG_TX_QUEUED, 3951 "TSO packet len %d hlen %d total len %d tso size %d\n", 3952 skb->len, hlen, skb_headlen(skb), 3953 skb_shinfo(skb)->gso_size); 3954 3955 tx_start_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_SW_LSO; 3956 3957 if (unlikely(skb_headlen(skb) > hlen)) { 3958 nbd++; 3959 bd_prod = bnx2x_tx_split(bp, txdata, tx_buf, 3960 &tx_start_bd, hlen, 3961 bd_prod); 3962 } 3963 if (!CHIP_IS_E1x(bp)) 3964 bnx2x_set_pbd_gso_e2(skb, &pbd_e2_parsing_data, 3965 xmit_type); 3966 else 3967 bnx2x_set_pbd_gso(skb, pbd_e1x, first_bd, xmit_type); 3968 } 3969 3970 /* Set the PBD's parsing_data field if not zero 3971 * (for the chips newer than 57711). 3972 */ 3973 if (pbd_e2_parsing_data) 3974 pbd_e2->parsing_data = cpu_to_le32(pbd_e2_parsing_data); 3975 3976 tx_data_bd = (struct eth_tx_bd *)tx_start_bd; 3977 3978 /* Handle fragmented skb */ 3979 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { 3980 skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 3981 3982 mapping = skb_frag_dma_map(&bp->pdev->dev, frag, 0, 3983 skb_frag_size(frag), DMA_TO_DEVICE); 3984 if (unlikely(dma_mapping_error(&bp->pdev->dev, mapping))) { 3985 unsigned int pkts_compl = 0, bytes_compl = 0; 3986 3987 DP(NETIF_MSG_TX_QUEUED, 3988 "Unable to map page - dropping packet...\n"); 3989 3990 /* we need unmap all buffers already mapped 3991 * for this SKB; 3992 * first_bd->nbd need to be properly updated 3993 * before call to bnx2x_free_tx_pkt 3994 */ 3995 first_bd->nbd = cpu_to_le16(nbd); 3996 bnx2x_free_tx_pkt(bp, txdata, 3997 TX_BD(txdata->tx_pkt_prod), 3998 &pkts_compl, &bytes_compl); 3999 return NETDEV_TX_OK; 4000 } 4001 4002 bd_prod = TX_BD(NEXT_TX_IDX(bd_prod)); 4003 tx_data_bd = &txdata->tx_desc_ring[bd_prod].reg_bd; 4004 if (total_pkt_bd == NULL) 4005 total_pkt_bd = &txdata->tx_desc_ring[bd_prod].reg_bd; 4006 4007 tx_data_bd->addr_hi = cpu_to_le32(U64_HI(mapping)); 4008 tx_data_bd->addr_lo = cpu_to_le32(U64_LO(mapping)); 4009 tx_data_bd->nbytes = cpu_to_le16(skb_frag_size(frag)); 4010 le16_add_cpu(&pkt_size, skb_frag_size(frag)); 4011 nbd++; 4012 4013 DP(NETIF_MSG_TX_QUEUED, 4014 "frag %d bd @%p addr (%x:%x) nbytes %d\n", 4015 i, tx_data_bd, tx_data_bd->addr_hi, tx_data_bd->addr_lo, 4016 le16_to_cpu(tx_data_bd->nbytes)); 4017 } 4018 4019 DP(NETIF_MSG_TX_QUEUED, "last bd @%p\n", tx_data_bd); 4020 4021 /* update with actual num BDs */ 4022 first_bd->nbd = cpu_to_le16(nbd); 4023 4024 bd_prod = TX_BD(NEXT_TX_IDX(bd_prod)); 4025 4026 /* now send a tx doorbell, counting the next BD 4027 * if the packet contains or ends with it 4028 */ 4029 if (TX_BD_POFF(bd_prod) < nbd) 4030 nbd++; 4031 4032 /* total_pkt_bytes should be set on the first data BD if 4033 * it's not an LSO packet and there is more than one 4034 * data BD. In this case pkt_size is limited by an MTU value. 4035 * However we prefer to set it for an LSO packet (while we don't 4036 * have to) in order to save some CPU cycles in a none-LSO 4037 * case, when we much more care about them. 4038 */ 4039 if (total_pkt_bd != NULL) 4040 total_pkt_bd->total_pkt_bytes = pkt_size; 4041 4042 if (pbd_e1x) 4043 DP(NETIF_MSG_TX_QUEUED, 4044 "PBD (E1X) @%p ip_data %x ip_hlen %u ip_id %u lso_mss %u tcp_flags %x xsum %x seq %u hlen %u\n", 4045 pbd_e1x, pbd_e1x->global_data, pbd_e1x->ip_hlen_w, 4046 pbd_e1x->ip_id, pbd_e1x->lso_mss, pbd_e1x->tcp_flags, 4047 pbd_e1x->tcp_pseudo_csum, pbd_e1x->tcp_send_seq, 4048 le16_to_cpu(pbd_e1x->total_hlen_w)); 4049 if (pbd_e2) 4050 DP(NETIF_MSG_TX_QUEUED, 4051 "PBD (E2) @%p dst %x %x %x src %x %x %x parsing_data %x\n", 4052 pbd_e2, 4053 pbd_e2->data.mac_addr.dst_hi, 4054 pbd_e2->data.mac_addr.dst_mid, 4055 pbd_e2->data.mac_addr.dst_lo, 4056 pbd_e2->data.mac_addr.src_hi, 4057 pbd_e2->data.mac_addr.src_mid, 4058 pbd_e2->data.mac_addr.src_lo, 4059 pbd_e2->parsing_data); 4060 DP(NETIF_MSG_TX_QUEUED, "doorbell: nbd %d bd %u\n", nbd, bd_prod); 4061 4062 netdev_tx_sent_queue(txq, skb->len); 4063 4064 skb_tx_timestamp(skb); 4065 4066 txdata->tx_pkt_prod++; 4067 /* 4068 * Make sure that the BD data is updated before updating the producer 4069 * since FW might read the BD right after the producer is updated. 4070 * This is only applicable for weak-ordered memory model archs such 4071 * as IA-64. The following barrier is also mandatory since FW will 4072 * assumes packets must have BDs. 4073 */ 4074 wmb(); 4075 4076 txdata->tx_db.data.prod += nbd; 4077 barrier(); 4078 4079 DOORBELL(bp, txdata->cid, txdata->tx_db.raw); 4080 4081 mmiowb(); 4082 4083 txdata->tx_bd_prod += nbd; 4084 4085 if (unlikely(bnx2x_tx_avail(bp, txdata) < MAX_DESC_PER_TX_PKT)) { 4086 netif_tx_stop_queue(txq); 4087 4088 /* paired memory barrier is in bnx2x_tx_int(), we have to keep 4089 * ordering of set_bit() in netif_tx_stop_queue() and read of 4090 * fp->bd_tx_cons */ 4091 smp_mb(); 4092 4093 bnx2x_fp_qstats(bp, txdata->parent_fp)->driver_xoff++; 4094 if (bnx2x_tx_avail(bp, txdata) >= MAX_DESC_PER_TX_PKT) 4095 netif_tx_wake_queue(txq); 4096 } 4097 txdata->tx_pkt++; 4098 4099 return NETDEV_TX_OK; 4100 } 4101 4102 /** 4103 * bnx2x_setup_tc - routine to configure net_device for multi tc 4104 * 4105 * @netdev: net device to configure 4106 * @tc: number of traffic classes to enable 4107 * 4108 * callback connected to the ndo_setup_tc function pointer 4109 */ 4110 int bnx2x_setup_tc(struct net_device *dev, u8 num_tc) 4111 { 4112 int cos, prio, count, offset; 4113 struct bnx2x *bp = netdev_priv(dev); 4114 4115 /* setup tc must be called under rtnl lock */ 4116 ASSERT_RTNL(); 4117 4118 /* no traffic classes requested. Aborting */ 4119 if (!num_tc) { 4120 netdev_reset_tc(dev); 4121 return 0; 4122 } 4123 4124 /* requested to support too many traffic classes */ 4125 if (num_tc > bp->max_cos) { 4126 BNX2X_ERR("support for too many traffic classes requested: %d. Max supported is %d\n", 4127 num_tc, bp->max_cos); 4128 return -EINVAL; 4129 } 4130 4131 /* declare amount of supported traffic classes */ 4132 if (netdev_set_num_tc(dev, num_tc)) { 4133 BNX2X_ERR("failed to declare %d traffic classes\n", num_tc); 4134 return -EINVAL; 4135 } 4136 4137 /* configure priority to traffic class mapping */ 4138 for (prio = 0; prio < BNX2X_MAX_PRIORITY; prio++) { 4139 netdev_set_prio_tc_map(dev, prio, bp->prio_to_cos[prio]); 4140 DP(BNX2X_MSG_SP | NETIF_MSG_IFUP, 4141 "mapping priority %d to tc %d\n", 4142 prio, bp->prio_to_cos[prio]); 4143 } 4144 4145 /* Use this configuration to differentiate tc0 from other COSes 4146 This can be used for ets or pfc, and save the effort of setting 4147 up a multio class queue disc or negotiating DCBX with a switch 4148 netdev_set_prio_tc_map(dev, 0, 0); 4149 DP(BNX2X_MSG_SP, "mapping priority %d to tc %d\n", 0, 0); 4150 for (prio = 1; prio < 16; prio++) { 4151 netdev_set_prio_tc_map(dev, prio, 1); 4152 DP(BNX2X_MSG_SP, "mapping priority %d to tc %d\n", prio, 1); 4153 } */ 4154 4155 /* configure traffic class to transmission queue mapping */ 4156 for (cos = 0; cos < bp->max_cos; cos++) { 4157 count = BNX2X_NUM_ETH_QUEUES(bp); 4158 offset = cos * BNX2X_NUM_NON_CNIC_QUEUES(bp); 4159 netdev_set_tc_queue(dev, cos, count, offset); 4160 DP(BNX2X_MSG_SP | NETIF_MSG_IFUP, 4161 "mapping tc %d to offset %d count %d\n", 4162 cos, offset, count); 4163 } 4164 4165 return 0; 4166 } 4167 4168 /* called with rtnl_lock */ 4169 int bnx2x_change_mac_addr(struct net_device *dev, void *p) 4170 { 4171 struct sockaddr *addr = p; 4172 struct bnx2x *bp = netdev_priv(dev); 4173 int rc = 0; 4174 4175 if (!bnx2x_is_valid_ether_addr(bp, addr->sa_data)) { 4176 BNX2X_ERR("Requested MAC address is not valid\n"); 4177 return -EINVAL; 4178 } 4179 4180 if ((IS_MF_STORAGE_SD(bp) || IS_MF_FCOE_AFEX(bp)) && 4181 !is_zero_ether_addr(addr->sa_data)) { 4182 BNX2X_ERR("Can't configure non-zero address on iSCSI or FCoE functions in MF-SD mode\n"); 4183 return -EINVAL; 4184 } 4185 4186 if (netif_running(dev)) { 4187 rc = bnx2x_set_eth_mac(bp, false); 4188 if (rc) 4189 return rc; 4190 } 4191 4192 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); 4193 4194 if (netif_running(dev)) 4195 rc = bnx2x_set_eth_mac(bp, true); 4196 4197 return rc; 4198 } 4199 4200 static void bnx2x_free_fp_mem_at(struct bnx2x *bp, int fp_index) 4201 { 4202 union host_hc_status_block *sb = &bnx2x_fp(bp, fp_index, status_blk); 4203 struct bnx2x_fastpath *fp = &bp->fp[fp_index]; 4204 u8 cos; 4205 4206 /* Common */ 4207 4208 if (IS_FCOE_IDX(fp_index)) { 4209 memset(sb, 0, sizeof(union host_hc_status_block)); 4210 fp->status_blk_mapping = 0; 4211 } else { 4212 /* status blocks */ 4213 if (!CHIP_IS_E1x(bp)) 4214 BNX2X_PCI_FREE(sb->e2_sb, 4215 bnx2x_fp(bp, fp_index, 4216 status_blk_mapping), 4217 sizeof(struct host_hc_status_block_e2)); 4218 else 4219 BNX2X_PCI_FREE(sb->e1x_sb, 4220 bnx2x_fp(bp, fp_index, 4221 status_blk_mapping), 4222 sizeof(struct host_hc_status_block_e1x)); 4223 } 4224 4225 /* Rx */ 4226 if (!skip_rx_queue(bp, fp_index)) { 4227 bnx2x_free_rx_bds(fp); 4228 4229 /* fastpath rx rings: rx_buf rx_desc rx_comp */ 4230 BNX2X_FREE(bnx2x_fp(bp, fp_index, rx_buf_ring)); 4231 BNX2X_PCI_FREE(bnx2x_fp(bp, fp_index, rx_desc_ring), 4232 bnx2x_fp(bp, fp_index, rx_desc_mapping), 4233 sizeof(struct eth_rx_bd) * NUM_RX_BD); 4234 4235 BNX2X_PCI_FREE(bnx2x_fp(bp, fp_index, rx_comp_ring), 4236 bnx2x_fp(bp, fp_index, rx_comp_mapping), 4237 sizeof(struct eth_fast_path_rx_cqe) * 4238 NUM_RCQ_BD); 4239 4240 /* SGE ring */ 4241 BNX2X_FREE(bnx2x_fp(bp, fp_index, rx_page_ring)); 4242 BNX2X_PCI_FREE(bnx2x_fp(bp, fp_index, rx_sge_ring), 4243 bnx2x_fp(bp, fp_index, rx_sge_mapping), 4244 BCM_PAGE_SIZE * NUM_RX_SGE_PAGES); 4245 } 4246 4247 /* Tx */ 4248 if (!skip_tx_queue(bp, fp_index)) { 4249 /* fastpath tx rings: tx_buf tx_desc */ 4250 for_each_cos_in_tx_queue(fp, cos) { 4251 struct bnx2x_fp_txdata *txdata = fp->txdata_ptr[cos]; 4252 4253 DP(NETIF_MSG_IFDOWN, 4254 "freeing tx memory of fp %d cos %d cid %d\n", 4255 fp_index, cos, txdata->cid); 4256 4257 BNX2X_FREE(txdata->tx_buf_ring); 4258 BNX2X_PCI_FREE(txdata->tx_desc_ring, 4259 txdata->tx_desc_mapping, 4260 sizeof(union eth_tx_bd_types) * NUM_TX_BD); 4261 } 4262 } 4263 /* end of fastpath */ 4264 } 4265 4266 static void bnx2x_free_fp_mem_cnic(struct bnx2x *bp) 4267 { 4268 int i; 4269 for_each_cnic_queue(bp, i) 4270 bnx2x_free_fp_mem_at(bp, i); 4271 } 4272 4273 void bnx2x_free_fp_mem(struct bnx2x *bp) 4274 { 4275 int i; 4276 for_each_eth_queue(bp, i) 4277 bnx2x_free_fp_mem_at(bp, i); 4278 } 4279 4280 static void set_sb_shortcuts(struct bnx2x *bp, int index) 4281 { 4282 union host_hc_status_block status_blk = bnx2x_fp(bp, index, status_blk); 4283 if (!CHIP_IS_E1x(bp)) { 4284 bnx2x_fp(bp, index, sb_index_values) = 4285 (__le16 *)status_blk.e2_sb->sb.index_values; 4286 bnx2x_fp(bp, index, sb_running_index) = 4287 (__le16 *)status_blk.e2_sb->sb.running_index; 4288 } else { 4289 bnx2x_fp(bp, index, sb_index_values) = 4290 (__le16 *)status_blk.e1x_sb->sb.index_values; 4291 bnx2x_fp(bp, index, sb_running_index) = 4292 (__le16 *)status_blk.e1x_sb->sb.running_index; 4293 } 4294 } 4295 4296 /* Returns the number of actually allocated BDs */ 4297 static int bnx2x_alloc_rx_bds(struct bnx2x_fastpath *fp, 4298 int rx_ring_size) 4299 { 4300 struct bnx2x *bp = fp->bp; 4301 u16 ring_prod, cqe_ring_prod; 4302 int i, failure_cnt = 0; 4303 4304 fp->rx_comp_cons = 0; 4305 cqe_ring_prod = ring_prod = 0; 4306 4307 /* This routine is called only during fo init so 4308 * fp->eth_q_stats.rx_skb_alloc_failed = 0 4309 */ 4310 for (i = 0; i < rx_ring_size; i++) { 4311 if (bnx2x_alloc_rx_data(bp, fp, ring_prod, GFP_KERNEL) < 0) { 4312 failure_cnt++; 4313 continue; 4314 } 4315 ring_prod = NEXT_RX_IDX(ring_prod); 4316 cqe_ring_prod = NEXT_RCQ_IDX(cqe_ring_prod); 4317 WARN_ON(ring_prod <= (i - failure_cnt)); 4318 } 4319 4320 if (failure_cnt) 4321 BNX2X_ERR("was only able to allocate %d rx skbs on queue[%d]\n", 4322 i - failure_cnt, fp->index); 4323 4324 fp->rx_bd_prod = ring_prod; 4325 /* Limit the CQE producer by the CQE ring size */ 4326 fp->rx_comp_prod = min_t(u16, NUM_RCQ_RINGS*RCQ_DESC_CNT, 4327 cqe_ring_prod); 4328 fp->rx_pkt = fp->rx_calls = 0; 4329 4330 bnx2x_fp_stats(bp, fp)->eth_q_stats.rx_skb_alloc_failed += failure_cnt; 4331 4332 return i - failure_cnt; 4333 } 4334 4335 static void bnx2x_set_next_page_rx_cq(struct bnx2x_fastpath *fp) 4336 { 4337 int i; 4338 4339 for (i = 1; i <= NUM_RCQ_RINGS; i++) { 4340 struct eth_rx_cqe_next_page *nextpg; 4341 4342 nextpg = (struct eth_rx_cqe_next_page *) 4343 &fp->rx_comp_ring[RCQ_DESC_CNT * i - 1]; 4344 nextpg->addr_hi = 4345 cpu_to_le32(U64_HI(fp->rx_comp_mapping + 4346 BCM_PAGE_SIZE*(i % NUM_RCQ_RINGS))); 4347 nextpg->addr_lo = 4348 cpu_to_le32(U64_LO(fp->rx_comp_mapping + 4349 BCM_PAGE_SIZE*(i % NUM_RCQ_RINGS))); 4350 } 4351 } 4352 4353 static int bnx2x_alloc_fp_mem_at(struct bnx2x *bp, int index) 4354 { 4355 union host_hc_status_block *sb; 4356 struct bnx2x_fastpath *fp = &bp->fp[index]; 4357 int ring_size = 0; 4358 u8 cos; 4359 int rx_ring_size = 0; 4360 4361 if (!bp->rx_ring_size && 4362 (IS_MF_STORAGE_SD(bp) || IS_MF_FCOE_AFEX(bp))) { 4363 rx_ring_size = MIN_RX_SIZE_NONTPA; 4364 bp->rx_ring_size = rx_ring_size; 4365 } else if (!bp->rx_ring_size) { 4366 rx_ring_size = MAX_RX_AVAIL/BNX2X_NUM_RX_QUEUES(bp); 4367 4368 if (CHIP_IS_E3(bp)) { 4369 u32 cfg = SHMEM_RD(bp, 4370 dev_info.port_hw_config[BP_PORT(bp)]. 4371 default_cfg); 4372 4373 /* Decrease ring size for 1G functions */ 4374 if ((cfg & PORT_HW_CFG_NET_SERDES_IF_MASK) == 4375 PORT_HW_CFG_NET_SERDES_IF_SGMII) 4376 rx_ring_size /= 10; 4377 } 4378 4379 /* allocate at least number of buffers required by FW */ 4380 rx_ring_size = max_t(int, bp->disable_tpa ? MIN_RX_SIZE_NONTPA : 4381 MIN_RX_SIZE_TPA, rx_ring_size); 4382 4383 bp->rx_ring_size = rx_ring_size; 4384 } else /* if rx_ring_size specified - use it */ 4385 rx_ring_size = bp->rx_ring_size; 4386 4387 DP(BNX2X_MSG_SP, "calculated rx_ring_size %d\n", rx_ring_size); 4388 4389 /* Common */ 4390 sb = &bnx2x_fp(bp, index, status_blk); 4391 4392 if (!IS_FCOE_IDX(index)) { 4393 /* status blocks */ 4394 if (!CHIP_IS_E1x(bp)) { 4395 sb->e2_sb = BNX2X_PCI_ALLOC(&bnx2x_fp(bp, index, status_blk_mapping), 4396 sizeof(struct host_hc_status_block_e2)); 4397 if (!sb->e2_sb) 4398 goto alloc_mem_err; 4399 } else { 4400 sb->e1x_sb = BNX2X_PCI_ALLOC(&bnx2x_fp(bp, index, status_blk_mapping), 4401 sizeof(struct host_hc_status_block_e1x)); 4402 if (!sb->e1x_sb) 4403 goto alloc_mem_err; 4404 } 4405 } 4406 4407 /* FCoE Queue uses Default SB and doesn't ACK the SB, thus no need to 4408 * set shortcuts for it. 4409 */ 4410 if (!IS_FCOE_IDX(index)) 4411 set_sb_shortcuts(bp, index); 4412 4413 /* Tx */ 4414 if (!skip_tx_queue(bp, index)) { 4415 /* fastpath tx rings: tx_buf tx_desc */ 4416 for_each_cos_in_tx_queue(fp, cos) { 4417 struct bnx2x_fp_txdata *txdata = fp->txdata_ptr[cos]; 4418 4419 DP(NETIF_MSG_IFUP, 4420 "allocating tx memory of fp %d cos %d\n", 4421 index, cos); 4422 4423 txdata->tx_buf_ring = kcalloc(NUM_TX_BD, 4424 sizeof(struct sw_tx_bd), 4425 GFP_KERNEL); 4426 if (!txdata->tx_buf_ring) 4427 goto alloc_mem_err; 4428 txdata->tx_desc_ring = BNX2X_PCI_ALLOC(&txdata->tx_desc_mapping, 4429 sizeof(union eth_tx_bd_types) * NUM_TX_BD); 4430 if (!txdata->tx_desc_ring) 4431 goto alloc_mem_err; 4432 } 4433 } 4434 4435 /* Rx */ 4436 if (!skip_rx_queue(bp, index)) { 4437 /* fastpath rx rings: rx_buf rx_desc rx_comp */ 4438 bnx2x_fp(bp, index, rx_buf_ring) = 4439 kcalloc(NUM_RX_BD, sizeof(struct sw_rx_bd), GFP_KERNEL); 4440 if (!bnx2x_fp(bp, index, rx_buf_ring)) 4441 goto alloc_mem_err; 4442 bnx2x_fp(bp, index, rx_desc_ring) = 4443 BNX2X_PCI_ALLOC(&bnx2x_fp(bp, index, rx_desc_mapping), 4444 sizeof(struct eth_rx_bd) * NUM_RX_BD); 4445 if (!bnx2x_fp(bp, index, rx_desc_ring)) 4446 goto alloc_mem_err; 4447 4448 /* Seed all CQEs by 1s */ 4449 bnx2x_fp(bp, index, rx_comp_ring) = 4450 BNX2X_PCI_FALLOC(&bnx2x_fp(bp, index, rx_comp_mapping), 4451 sizeof(struct eth_fast_path_rx_cqe) * NUM_RCQ_BD); 4452 if (!bnx2x_fp(bp, index, rx_comp_ring)) 4453 goto alloc_mem_err; 4454 4455 /* SGE ring */ 4456 bnx2x_fp(bp, index, rx_page_ring) = 4457 kcalloc(NUM_RX_SGE, sizeof(struct sw_rx_page), 4458 GFP_KERNEL); 4459 if (!bnx2x_fp(bp, index, rx_page_ring)) 4460 goto alloc_mem_err; 4461 bnx2x_fp(bp, index, rx_sge_ring) = 4462 BNX2X_PCI_ALLOC(&bnx2x_fp(bp, index, rx_sge_mapping), 4463 BCM_PAGE_SIZE * NUM_RX_SGE_PAGES); 4464 if (!bnx2x_fp(bp, index, rx_sge_ring)) 4465 goto alloc_mem_err; 4466 /* RX BD ring */ 4467 bnx2x_set_next_page_rx_bd(fp); 4468 4469 /* CQ ring */ 4470 bnx2x_set_next_page_rx_cq(fp); 4471 4472 /* BDs */ 4473 ring_size = bnx2x_alloc_rx_bds(fp, rx_ring_size); 4474 if (ring_size < rx_ring_size) 4475 goto alloc_mem_err; 4476 } 4477 4478 return 0; 4479 4480 /* handles low memory cases */ 4481 alloc_mem_err: 4482 BNX2X_ERR("Unable to allocate full memory for queue %d (size %d)\n", 4483 index, ring_size); 4484 /* FW will drop all packets if queue is not big enough, 4485 * In these cases we disable the queue 4486 * Min size is different for OOO, TPA and non-TPA queues 4487 */ 4488 if (ring_size < (fp->disable_tpa ? 4489 MIN_RX_SIZE_NONTPA : MIN_RX_SIZE_TPA)) { 4490 /* release memory allocated for this queue */ 4491 bnx2x_free_fp_mem_at(bp, index); 4492 return -ENOMEM; 4493 } 4494 return 0; 4495 } 4496 4497 static int bnx2x_alloc_fp_mem_cnic(struct bnx2x *bp) 4498 { 4499 if (!NO_FCOE(bp)) 4500 /* FCoE */ 4501 if (bnx2x_alloc_fp_mem_at(bp, FCOE_IDX(bp))) 4502 /* we will fail load process instead of mark 4503 * NO_FCOE_FLAG 4504 */ 4505 return -ENOMEM; 4506 4507 return 0; 4508 } 4509 4510 static int bnx2x_alloc_fp_mem(struct bnx2x *bp) 4511 { 4512 int i; 4513 4514 /* 1. Allocate FP for leading - fatal if error 4515 * 2. Allocate RSS - fix number of queues if error 4516 */ 4517 4518 /* leading */ 4519 if (bnx2x_alloc_fp_mem_at(bp, 0)) 4520 return -ENOMEM; 4521 4522 /* RSS */ 4523 for_each_nondefault_eth_queue(bp, i) 4524 if (bnx2x_alloc_fp_mem_at(bp, i)) 4525 break; 4526 4527 /* handle memory failures */ 4528 if (i != BNX2X_NUM_ETH_QUEUES(bp)) { 4529 int delta = BNX2X_NUM_ETH_QUEUES(bp) - i; 4530 4531 WARN_ON(delta < 0); 4532 bnx2x_shrink_eth_fp(bp, delta); 4533 if (CNIC_SUPPORT(bp)) 4534 /* move non eth FPs next to last eth FP 4535 * must be done in that order 4536 * FCOE_IDX < FWD_IDX < OOO_IDX 4537 */ 4538 4539 /* move FCoE fp even NO_FCOE_FLAG is on */ 4540 bnx2x_move_fp(bp, FCOE_IDX(bp), FCOE_IDX(bp) - delta); 4541 bp->num_ethernet_queues -= delta; 4542 bp->num_queues = bp->num_ethernet_queues + 4543 bp->num_cnic_queues; 4544 BNX2X_ERR("Adjusted num of queues from %d to %d\n", 4545 bp->num_queues + delta, bp->num_queues); 4546 } 4547 4548 return 0; 4549 } 4550 4551 void bnx2x_free_mem_bp(struct bnx2x *bp) 4552 { 4553 int i; 4554 4555 for (i = 0; i < bp->fp_array_size; i++) 4556 kfree(bp->fp[i].tpa_info); 4557 kfree(bp->fp); 4558 kfree(bp->sp_objs); 4559 kfree(bp->fp_stats); 4560 kfree(bp->bnx2x_txq); 4561 kfree(bp->msix_table); 4562 kfree(bp->ilt); 4563 } 4564 4565 int bnx2x_alloc_mem_bp(struct bnx2x *bp) 4566 { 4567 struct bnx2x_fastpath *fp; 4568 struct msix_entry *tbl; 4569 struct bnx2x_ilt *ilt; 4570 int msix_table_size = 0; 4571 int fp_array_size, txq_array_size; 4572 int i; 4573 4574 /* 4575 * The biggest MSI-X table we might need is as a maximum number of fast 4576 * path IGU SBs plus default SB (for PF only). 4577 */ 4578 msix_table_size = bp->igu_sb_cnt; 4579 if (IS_PF(bp)) 4580 msix_table_size++; 4581 BNX2X_DEV_INFO("msix_table_size %d\n", msix_table_size); 4582 4583 /* fp array: RSS plus CNIC related L2 queues */ 4584 fp_array_size = BNX2X_MAX_RSS_COUNT(bp) + CNIC_SUPPORT(bp); 4585 bp->fp_array_size = fp_array_size; 4586 BNX2X_DEV_INFO("fp_array_size %d\n", bp->fp_array_size); 4587 4588 fp = kcalloc(bp->fp_array_size, sizeof(*fp), GFP_KERNEL); 4589 if (!fp) 4590 goto alloc_err; 4591 for (i = 0; i < bp->fp_array_size; i++) { 4592 fp[i].tpa_info = 4593 kcalloc(ETH_MAX_AGGREGATION_QUEUES_E1H_E2, 4594 sizeof(struct bnx2x_agg_info), GFP_KERNEL); 4595 if (!(fp[i].tpa_info)) 4596 goto alloc_err; 4597 } 4598 4599 bp->fp = fp; 4600 4601 /* allocate sp objs */ 4602 bp->sp_objs = kcalloc(bp->fp_array_size, sizeof(struct bnx2x_sp_objs), 4603 GFP_KERNEL); 4604 if (!bp->sp_objs) 4605 goto alloc_err; 4606 4607 /* allocate fp_stats */ 4608 bp->fp_stats = kcalloc(bp->fp_array_size, sizeof(struct bnx2x_fp_stats), 4609 GFP_KERNEL); 4610 if (!bp->fp_stats) 4611 goto alloc_err; 4612 4613 /* Allocate memory for the transmission queues array */ 4614 txq_array_size = 4615 BNX2X_MAX_RSS_COUNT(bp) * BNX2X_MULTI_TX_COS + CNIC_SUPPORT(bp); 4616 BNX2X_DEV_INFO("txq_array_size %d", txq_array_size); 4617 4618 bp->bnx2x_txq = kcalloc(txq_array_size, sizeof(struct bnx2x_fp_txdata), 4619 GFP_KERNEL); 4620 if (!bp->bnx2x_txq) 4621 goto alloc_err; 4622 4623 /* msix table */ 4624 tbl = kcalloc(msix_table_size, sizeof(*tbl), GFP_KERNEL); 4625 if (!tbl) 4626 goto alloc_err; 4627 bp->msix_table = tbl; 4628 4629 /* ilt */ 4630 ilt = kzalloc(sizeof(*ilt), GFP_KERNEL); 4631 if (!ilt) 4632 goto alloc_err; 4633 bp->ilt = ilt; 4634 4635 return 0; 4636 alloc_err: 4637 bnx2x_free_mem_bp(bp); 4638 return -ENOMEM; 4639 } 4640 4641 int bnx2x_reload_if_running(struct net_device *dev) 4642 { 4643 struct bnx2x *bp = netdev_priv(dev); 4644 4645 if (unlikely(!netif_running(dev))) 4646 return 0; 4647 4648 bnx2x_nic_unload(bp, UNLOAD_NORMAL, true); 4649 return bnx2x_nic_load(bp, LOAD_NORMAL); 4650 } 4651 4652 int bnx2x_get_cur_phy_idx(struct bnx2x *bp) 4653 { 4654 u32 sel_phy_idx = 0; 4655 if (bp->link_params.num_phys <= 1) 4656 return INT_PHY; 4657 4658 if (bp->link_vars.link_up) { 4659 sel_phy_idx = EXT_PHY1; 4660 /* In case link is SERDES, check if the EXT_PHY2 is the one */ 4661 if ((bp->link_vars.link_status & LINK_STATUS_SERDES_LINK) && 4662 (bp->link_params.phy[EXT_PHY2].supported & SUPPORTED_FIBRE)) 4663 sel_phy_idx = EXT_PHY2; 4664 } else { 4665 4666 switch (bnx2x_phy_selection(&bp->link_params)) { 4667 case PORT_HW_CFG_PHY_SELECTION_HARDWARE_DEFAULT: 4668 case PORT_HW_CFG_PHY_SELECTION_FIRST_PHY: 4669 case PORT_HW_CFG_PHY_SELECTION_FIRST_PHY_PRIORITY: 4670 sel_phy_idx = EXT_PHY1; 4671 break; 4672 case PORT_HW_CFG_PHY_SELECTION_SECOND_PHY: 4673 case PORT_HW_CFG_PHY_SELECTION_SECOND_PHY_PRIORITY: 4674 sel_phy_idx = EXT_PHY2; 4675 break; 4676 } 4677 } 4678 4679 return sel_phy_idx; 4680 } 4681 int bnx2x_get_link_cfg_idx(struct bnx2x *bp) 4682 { 4683 u32 sel_phy_idx = bnx2x_get_cur_phy_idx(bp); 4684 /* 4685 * The selected activated PHY is always after swapping (in case PHY 4686 * swapping is enabled). So when swapping is enabled, we need to reverse 4687 * the configuration 4688 */ 4689 4690 if (bp->link_params.multi_phy_config & 4691 PORT_HW_CFG_PHY_SWAPPED_ENABLED) { 4692 if (sel_phy_idx == EXT_PHY1) 4693 sel_phy_idx = EXT_PHY2; 4694 else if (sel_phy_idx == EXT_PHY2) 4695 sel_phy_idx = EXT_PHY1; 4696 } 4697 return LINK_CONFIG_IDX(sel_phy_idx); 4698 } 4699 4700 #ifdef NETDEV_FCOE_WWNN 4701 int bnx2x_fcoe_get_wwn(struct net_device *dev, u64 *wwn, int type) 4702 { 4703 struct bnx2x *bp = netdev_priv(dev); 4704 struct cnic_eth_dev *cp = &bp->cnic_eth_dev; 4705 4706 switch (type) { 4707 case NETDEV_FCOE_WWNN: 4708 *wwn = HILO_U64(cp->fcoe_wwn_node_name_hi, 4709 cp->fcoe_wwn_node_name_lo); 4710 break; 4711 case NETDEV_FCOE_WWPN: 4712 *wwn = HILO_U64(cp->fcoe_wwn_port_name_hi, 4713 cp->fcoe_wwn_port_name_lo); 4714 break; 4715 default: 4716 BNX2X_ERR("Wrong WWN type requested - %d\n", type); 4717 return -EINVAL; 4718 } 4719 4720 return 0; 4721 } 4722 #endif 4723 4724 /* called with rtnl_lock */ 4725 int bnx2x_change_mtu(struct net_device *dev, int new_mtu) 4726 { 4727 struct bnx2x *bp = netdev_priv(dev); 4728 4729 if (bp->recovery_state != BNX2X_RECOVERY_DONE) { 4730 BNX2X_ERR("Can't perform change MTU during parity recovery\n"); 4731 return -EAGAIN; 4732 } 4733 4734 if ((new_mtu > ETH_MAX_JUMBO_PACKET_SIZE) || 4735 ((new_mtu + ETH_HLEN) < ETH_MIN_PACKET_SIZE)) { 4736 BNX2X_ERR("Can't support requested MTU size\n"); 4737 return -EINVAL; 4738 } 4739 4740 /* This does not race with packet allocation 4741 * because the actual alloc size is 4742 * only updated as part of load 4743 */ 4744 dev->mtu = new_mtu; 4745 4746 return bnx2x_reload_if_running(dev); 4747 } 4748 4749 netdev_features_t bnx2x_fix_features(struct net_device *dev, 4750 netdev_features_t features) 4751 { 4752 struct bnx2x *bp = netdev_priv(dev); 4753 4754 /* TPA requires Rx CSUM offloading */ 4755 if (!(features & NETIF_F_RXCSUM) || bp->disable_tpa) { 4756 features &= ~NETIF_F_LRO; 4757 features &= ~NETIF_F_GRO; 4758 } 4759 4760 return features; 4761 } 4762 4763 int bnx2x_set_features(struct net_device *dev, netdev_features_t features) 4764 { 4765 struct bnx2x *bp = netdev_priv(dev); 4766 u32 flags = bp->flags; 4767 u32 changes; 4768 bool bnx2x_reload = false; 4769 4770 if (features & NETIF_F_LRO) 4771 flags |= TPA_ENABLE_FLAG; 4772 else 4773 flags &= ~TPA_ENABLE_FLAG; 4774 4775 if (features & NETIF_F_GRO) 4776 flags |= GRO_ENABLE_FLAG; 4777 else 4778 flags &= ~GRO_ENABLE_FLAG; 4779 4780 if (features & NETIF_F_LOOPBACK) { 4781 if (bp->link_params.loopback_mode != LOOPBACK_BMAC) { 4782 bp->link_params.loopback_mode = LOOPBACK_BMAC; 4783 bnx2x_reload = true; 4784 } 4785 } else { 4786 if (bp->link_params.loopback_mode != LOOPBACK_NONE) { 4787 bp->link_params.loopback_mode = LOOPBACK_NONE; 4788 bnx2x_reload = true; 4789 } 4790 } 4791 4792 changes = flags ^ bp->flags; 4793 4794 /* if GRO is changed while LRO is enabled, don't force a reload */ 4795 if ((changes & GRO_ENABLE_FLAG) && (flags & TPA_ENABLE_FLAG)) 4796 changes &= ~GRO_ENABLE_FLAG; 4797 4798 if (changes) 4799 bnx2x_reload = true; 4800 4801 bp->flags = flags; 4802 4803 if (bnx2x_reload) { 4804 if (bp->recovery_state == BNX2X_RECOVERY_DONE) 4805 return bnx2x_reload_if_running(dev); 4806 /* else: bnx2x_nic_load() will be called at end of recovery */ 4807 } 4808 4809 return 0; 4810 } 4811 4812 void bnx2x_tx_timeout(struct net_device *dev) 4813 { 4814 struct bnx2x *bp = netdev_priv(dev); 4815 4816 #ifdef BNX2X_STOP_ON_ERROR 4817 if (!bp->panic) 4818 bnx2x_panic(); 4819 #endif 4820 4821 /* This allows the netif to be shutdown gracefully before resetting */ 4822 bnx2x_schedule_sp_rtnl(bp, BNX2X_SP_RTNL_TX_TIMEOUT, 0); 4823 } 4824 4825 int bnx2x_suspend(struct pci_dev *pdev, pm_message_t state) 4826 { 4827 struct net_device *dev = pci_get_drvdata(pdev); 4828 struct bnx2x *bp; 4829 4830 if (!dev) { 4831 dev_err(&pdev->dev, "BAD net device from bnx2x_init_one\n"); 4832 return -ENODEV; 4833 } 4834 bp = netdev_priv(dev); 4835 4836 rtnl_lock(); 4837 4838 pci_save_state(pdev); 4839 4840 if (!netif_running(dev)) { 4841 rtnl_unlock(); 4842 return 0; 4843 } 4844 4845 netif_device_detach(dev); 4846 4847 bnx2x_nic_unload(bp, UNLOAD_CLOSE, false); 4848 4849 bnx2x_set_power_state(bp, pci_choose_state(pdev, state)); 4850 4851 rtnl_unlock(); 4852 4853 return 0; 4854 } 4855 4856 int bnx2x_resume(struct pci_dev *pdev) 4857 { 4858 struct net_device *dev = pci_get_drvdata(pdev); 4859 struct bnx2x *bp; 4860 int rc; 4861 4862 if (!dev) { 4863 dev_err(&pdev->dev, "BAD net device from bnx2x_init_one\n"); 4864 return -ENODEV; 4865 } 4866 bp = netdev_priv(dev); 4867 4868 if (bp->recovery_state != BNX2X_RECOVERY_DONE) { 4869 BNX2X_ERR("Handling parity error recovery. Try again later\n"); 4870 return -EAGAIN; 4871 } 4872 4873 rtnl_lock(); 4874 4875 pci_restore_state(pdev); 4876 4877 if (!netif_running(dev)) { 4878 rtnl_unlock(); 4879 return 0; 4880 } 4881 4882 bnx2x_set_power_state(bp, PCI_D0); 4883 netif_device_attach(dev); 4884 4885 rc = bnx2x_nic_load(bp, LOAD_OPEN); 4886 4887 rtnl_unlock(); 4888 4889 return rc; 4890 } 4891 4892 void bnx2x_set_ctx_validation(struct bnx2x *bp, struct eth_context *cxt, 4893 u32 cid) 4894 { 4895 if (!cxt) { 4896 BNX2X_ERR("bad context pointer %p\n", cxt); 4897 return; 4898 } 4899 4900 /* ustorm cxt validation */ 4901 cxt->ustorm_ag_context.cdu_usage = 4902 CDU_RSRVD_VALUE_TYPE_A(HW_CID(bp, cid), 4903 CDU_REGION_NUMBER_UCM_AG, ETH_CONNECTION_TYPE); 4904 /* xcontext validation */ 4905 cxt->xstorm_ag_context.cdu_reserved = 4906 CDU_RSRVD_VALUE_TYPE_A(HW_CID(bp, cid), 4907 CDU_REGION_NUMBER_XCM_AG, ETH_CONNECTION_TYPE); 4908 } 4909 4910 static void storm_memset_hc_timeout(struct bnx2x *bp, u8 port, 4911 u8 fw_sb_id, u8 sb_index, 4912 u8 ticks) 4913 { 4914 u32 addr = BAR_CSTRORM_INTMEM + 4915 CSTORM_STATUS_BLOCK_DATA_TIMEOUT_OFFSET(fw_sb_id, sb_index); 4916 REG_WR8(bp, addr, ticks); 4917 DP(NETIF_MSG_IFUP, 4918 "port %x fw_sb_id %d sb_index %d ticks %d\n", 4919 port, fw_sb_id, sb_index, ticks); 4920 } 4921 4922 static void storm_memset_hc_disable(struct bnx2x *bp, u8 port, 4923 u16 fw_sb_id, u8 sb_index, 4924 u8 disable) 4925 { 4926 u32 enable_flag = disable ? 0 : (1 << HC_INDEX_DATA_HC_ENABLED_SHIFT); 4927 u32 addr = BAR_CSTRORM_INTMEM + 4928 CSTORM_STATUS_BLOCK_DATA_FLAGS_OFFSET(fw_sb_id, sb_index); 4929 u8 flags = REG_RD8(bp, addr); 4930 /* clear and set */ 4931 flags &= ~HC_INDEX_DATA_HC_ENABLED; 4932 flags |= enable_flag; 4933 REG_WR8(bp, addr, flags); 4934 DP(NETIF_MSG_IFUP, 4935 "port %x fw_sb_id %d sb_index %d disable %d\n", 4936 port, fw_sb_id, sb_index, disable); 4937 } 4938 4939 void bnx2x_update_coalesce_sb_index(struct bnx2x *bp, u8 fw_sb_id, 4940 u8 sb_index, u8 disable, u16 usec) 4941 { 4942 int port = BP_PORT(bp); 4943 u8 ticks = usec / BNX2X_BTR; 4944 4945 storm_memset_hc_timeout(bp, port, fw_sb_id, sb_index, ticks); 4946 4947 disable = disable ? 1 : (usec ? 0 : 1); 4948 storm_memset_hc_disable(bp, port, fw_sb_id, sb_index, disable); 4949 } 4950 4951 void bnx2x_schedule_sp_rtnl(struct bnx2x *bp, enum sp_rtnl_flag flag, 4952 u32 verbose) 4953 { 4954 smp_mb__before_atomic(); 4955 set_bit(flag, &bp->sp_rtnl_state); 4956 smp_mb__after_atomic(); 4957 DP((BNX2X_MSG_SP | verbose), "Scheduling sp_rtnl task [Flag: %d]\n", 4958 flag); 4959 schedule_delayed_work(&bp->sp_rtnl_task, 0); 4960 } 4961 EXPORT_SYMBOL(bnx2x_schedule_sp_rtnl); 4962