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 nfp_net_cmsg_alloc(uint32_t msg_size) 14 { 15 struct nfp_net_cmsg *cmsg; 16 17 cmsg = rte_zmalloc(NULL, msg_size, 0); 18 if (cmsg == NULL) { 19 PMD_DRV_LOG(ERR, "Failed malloc memory."); 20 return NULL; 21 } 22 23 return cmsg; 24 } 25 26 void 27 nfp_net_cmsg_free(struct nfp_net_cmsg *cmsg) 28 { 29 rte_free(cmsg); 30 } 31 32 int 33 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 for (i = 0; i < msg_size; i++) 41 nn_cfg_writel(&hw->super, NFP_NET_CFG_MBOX_VAL + 4 * i, *((uint32_t *)cmsg + i)); 42 43 ret = nfp_net_mbox_reconfig(hw, NFP_NET_CFG_MBOX_CMD_FLOW_STEER); 44 switch (ret) { 45 case NFP_NET_CFG_MBOX_RET_FS_OK: 46 break; 47 case NFP_NET_CFG_MBOX_RET_FS_ERR_NO_SPACE: 48 PMD_DRV_LOG(ERR, "Not enough space for cmd %u.", cmsg->cmd); 49 ret = -ENOSPC; 50 break; 51 case NFP_NET_CFG_MBOX_RET_FS_ERR_MASK_FULL: 52 PMD_DRV_LOG(ERR, "The mask table is full for cmd %u.", cmsg->cmd); 53 ret = -EXFULL; 54 break; 55 case NFP_NET_CFG_MBOX_RET_FS_ERR_CMD_INVALID: 56 PMD_DRV_LOG(ERR, "The mbox cmd %u invalid.", cmsg->cmd); 57 ret = -EINVAL; 58 break; 59 default: 60 PMD_DRV_LOG(ERR, "Unrecognized mbox cmd %u.", cmsg->cmd); 61 ret = -EINVAL; 62 break; 63 } 64 65 return ret; 66 } 67