Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause 2 : : * Copyright (c) 2023 Corigine, Inc. 3 : : * All rights reserved. 4 : : */ 5 : : 6 : : #include "nfp_net_cmsg.h" 7 : : 8 : : #include <rte_malloc.h> 9 : : 10 : : #include "nfp_logs.h" 11 : : 12 : : struct nfp_net_cmsg * 13 : 0 : nfp_net_cmsg_alloc(uint32_t msg_size) 14 : : { 15 : : struct nfp_net_cmsg *cmsg; 16 : : 17 : 0 : cmsg = rte_zmalloc(NULL, msg_size, 0); 18 [ # # ]: 0 : if (cmsg == NULL) { 19 : 0 : PMD_DRV_LOG(ERR, "Failed malloc memory."); 20 : 0 : return NULL; 21 : : } 22 : : 23 : : return cmsg; 24 : : } 25 : : 26 : : void 27 : 0 : nfp_net_cmsg_free(struct nfp_net_cmsg *cmsg) 28 : : { 29 : 0 : rte_free(cmsg); 30 : 0 : } 31 : : 32 : : int 33 : 0 : nfp_net_cmsg_xmit(struct nfp_net_hw *hw, 34 : : struct nfp_net_cmsg *cmsg, 35 : : uint32_t msg_size) 36 : : { 37 : : int ret; 38 : : uint32_t i; 39 : : 40 [ # # ]: 0 : for (i = 0; i < msg_size; i++) 41 : 0 : nn_cfg_writel(&hw->super, NFP_NET_CFG_MBOX_VAL + 4 * i, *((uint32_t *)cmsg + i)); 42 : : 43 : 0 : ret = nfp_net_mbox_reconfig(hw, NFP_NET_CFG_MBOX_CMD_FLOW_STEER); 44 [ # # # # : 0 : switch (ret) { # ] 45 : : case NFP_NET_CFG_MBOX_RET_FS_OK: 46 : : break; 47 : 0 : case NFP_NET_CFG_MBOX_RET_FS_ERR_NO_SPACE: 48 : 0 : PMD_DRV_LOG(ERR, "Not enough space for cmd %u.", cmsg->cmd); 49 : : ret = -ENOSPC; 50 : 0 : break; 51 : 0 : case NFP_NET_CFG_MBOX_RET_FS_ERR_MASK_FULL: 52 : 0 : PMD_DRV_LOG(ERR, "The mask table is full for cmd %u.", cmsg->cmd); 53 : : ret = -EXFULL; 54 : 0 : break; 55 : 0 : case NFP_NET_CFG_MBOX_RET_FS_ERR_CMD_INVALID: 56 : 0 : PMD_DRV_LOG(ERR, "The mbox cmd %u invalid.", cmsg->cmd); 57 : : ret = -EINVAL; 58 : 0 : break; 59 : 0 : default: 60 : 0 : PMD_DRV_LOG(ERR, "Unrecognized mbox cmd %u.", cmsg->cmd); 61 : : ret = -EINVAL; 62 : 0 : break; 63 : : } 64 : : 65 : 0 : return ret; 66 : : }