Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause 2 : : * Copyright(C) 2021 Marvell. 3 : : */ 4 : : 5 : : #include "roc_api.h" 6 : : #include "roc_priv.h" 7 : : 8 : : int 9 : 0 : roc_nix_npc_promisc_ena_dis(struct roc_nix *roc_nix, int enable) 10 : : { 11 : : struct nix *nix = roc_nix_to_nix_priv(roc_nix); 12 : : struct dev *dev = &nix->dev; 13 : 0 : struct mbox *mbox = mbox_get(dev->mbox); 14 : : struct nix_rx_mode *req; 15 : : int rc = -ENOSPC; 16 : : 17 [ # # ]: 0 : if (roc_nix_is_vf_or_sdp(roc_nix)) { 18 : : rc = NIX_ERR_PARAM; 19 : 0 : goto exit; 20 : : } 21 : : 22 : 0 : req = mbox_alloc_msg_nix_set_rx_mode(mbox); 23 [ # # ]: 0 : if (req == NULL) 24 : 0 : goto exit; 25 : : 26 [ # # ]: 0 : if (enable) 27 : 0 : req->mode = NIX_RX_MODE_UCAST | NIX_RX_MODE_PROMISC; 28 : : 29 : 0 : rc = mbox_process(mbox); 30 : 0 : exit: 31 : : mbox_put(mbox); 32 : 0 : return rc; 33 : : } 34 : : 35 : : int 36 : 0 : roc_nix_npc_mac_addr_set(struct roc_nix *roc_nix, uint8_t addr[]) 37 : : { 38 : : struct nix *nix = roc_nix_to_nix_priv(roc_nix); 39 : : struct dev *dev = &nix->dev; 40 : 0 : struct mbox *mbox = mbox_get(dev->mbox); 41 : : struct nix_set_mac_addr *req; 42 : : int rc; 43 : : 44 : 0 : req = mbox_alloc_msg_nix_set_mac_addr(mbox); 45 [ # # ]: 0 : mbox_memcpy(req->mac_addr, addr, PLT_ETHER_ADDR_LEN); 46 : 0 : rc = mbox_process(mbox); 47 : : mbox_put(mbox); 48 : 0 : return rc; 49 : : } 50 : : 51 : : int 52 : 0 : roc_nix_npc_mac_addr_get(struct roc_nix *roc_nix, uint8_t *addr) 53 : : { 54 : : struct nix *nix = roc_nix_to_nix_priv(roc_nix); 55 : : struct dev *dev = &nix->dev; 56 : 0 : struct mbox *mbox = mbox_get(dev->mbox); 57 : : struct nix_get_mac_addr_rsp *rsp; 58 : : int rc; 59 : : 60 : 0 : mbox_alloc_msg_nix_get_mac_addr(mbox); 61 : : rc = mbox_process_msg(mbox, (void *)&rsp); 62 [ # # ]: 0 : if (rc) 63 : 0 : goto exit; 64 : : 65 [ # # ]: 0 : mbox_memcpy(addr, rsp->mac_addr, PLT_ETHER_ADDR_LEN); 66 : : rc = 0; 67 : 0 : exit: 68 : : mbox_put(mbox); 69 : 0 : return rc; 70 : : } 71 : : 72 : : int 73 : 0 : roc_nix_npc_rx_ena_dis(struct roc_nix *roc_nix, bool enable) 74 : : { 75 : : struct nix *nix = roc_nix_to_nix_priv(roc_nix); 76 : : struct dev *dev = &nix->dev; 77 : 0 : struct mbox *mbox = mbox_get(dev->mbox); 78 : : int rc; 79 : : 80 [ # # ]: 0 : if (enable) 81 : 0 : mbox_alloc_msg_nix_lf_start_rx(mbox); 82 : : else 83 : 0 : mbox_alloc_msg_nix_lf_stop_rx(mbox); 84 : : 85 : 0 : rc = mbox_process(mbox); 86 [ # # ]: 0 : if (!rc) 87 : 0 : roc_nix->io_enabled = enable; 88 : : 89 : : mbox_put(mbox); 90 : 0 : return rc; 91 : : } 92 : : 93 : : int 94 : 0 : roc_nix_npc_mcast_config(struct roc_nix *roc_nix, bool mcast_enable, 95 : : bool prom_enable) 96 : : 97 : : { 98 : : struct nix *nix = roc_nix_to_nix_priv(roc_nix); 99 : : struct dev *dev = &nix->dev; 100 : 0 : struct mbox *mbox = mbox_get(dev->mbox); 101 : : struct nix_rx_mode *req; 102 : : int rc = -ENOSPC; 103 : : 104 [ # # ]: 0 : if (roc_nix_is_vf_or_sdp(roc_nix)) { 105 : : rc = 0; 106 : 0 : goto exit; 107 : : } 108 : : 109 : 0 : req = mbox_alloc_msg_nix_set_rx_mode(mbox); 110 [ # # ]: 0 : if (req == NULL) 111 : 0 : goto exit; 112 : : 113 [ # # ]: 0 : if (mcast_enable) 114 : 0 : req->mode = NIX_RX_MODE_ALLMULTI; 115 [ # # ]: 0 : if (prom_enable) 116 : 0 : req->mode = NIX_RX_MODE_PROMISC; 117 : : 118 : 0 : rc = mbox_process(mbox); 119 : 0 : exit: 120 : : mbox_put(mbox); 121 : 0 : return rc; 122 : : }