162306a36Sopenharmony_ci/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ 262306a36Sopenharmony_ci/* Copyright (C) 2017-2018 Netronome Systems, Inc. */ 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci#ifndef NFP_BPF_FW_H 562306a36Sopenharmony_ci#define NFP_BPF_FW_H 1 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#include <linux/bitops.h> 862306a36Sopenharmony_ci#include <linux/types.h> 962306a36Sopenharmony_ci#include "../ccm.h" 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci/* Kernel's enum bpf_reg_type is not uABI so people may change it breaking 1262306a36Sopenharmony_ci * our FW ABI. In that case we will do translation in the driver. 1362306a36Sopenharmony_ci */ 1462306a36Sopenharmony_ci#define NFP_BPF_SCALAR_VALUE 1 1562306a36Sopenharmony_ci#define NFP_BPF_MAP_VALUE 4 1662306a36Sopenharmony_ci#define NFP_BPF_STACK 6 1762306a36Sopenharmony_ci#define NFP_BPF_PACKET_DATA 8 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_cienum bpf_cap_tlv_type { 2062306a36Sopenharmony_ci NFP_BPF_CAP_TYPE_FUNC = 1, 2162306a36Sopenharmony_ci NFP_BPF_CAP_TYPE_ADJUST_HEAD = 2, 2262306a36Sopenharmony_ci NFP_BPF_CAP_TYPE_MAPS = 3, 2362306a36Sopenharmony_ci NFP_BPF_CAP_TYPE_RANDOM = 4, 2462306a36Sopenharmony_ci NFP_BPF_CAP_TYPE_QUEUE_SELECT = 5, 2562306a36Sopenharmony_ci NFP_BPF_CAP_TYPE_ADJUST_TAIL = 6, 2662306a36Sopenharmony_ci NFP_BPF_CAP_TYPE_ABI_VERSION = 7, 2762306a36Sopenharmony_ci NFP_BPF_CAP_TYPE_CMSG_MULTI_ENT = 8, 2862306a36Sopenharmony_ci}; 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_cistruct nfp_bpf_cap_tlv_func { 3162306a36Sopenharmony_ci __le32 func_id; 3262306a36Sopenharmony_ci __le32 func_addr; 3362306a36Sopenharmony_ci}; 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_cistruct nfp_bpf_cap_tlv_adjust_head { 3662306a36Sopenharmony_ci __le32 flags; 3762306a36Sopenharmony_ci __le32 off_min; 3862306a36Sopenharmony_ci __le32 off_max; 3962306a36Sopenharmony_ci __le32 guaranteed_sub; 4062306a36Sopenharmony_ci __le32 guaranteed_add; 4162306a36Sopenharmony_ci}; 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci#define NFP_BPF_ADJUST_HEAD_NO_META BIT(0) 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_cistruct nfp_bpf_cap_tlv_maps { 4662306a36Sopenharmony_ci __le32 types; 4762306a36Sopenharmony_ci __le32 max_maps; 4862306a36Sopenharmony_ci __le32 max_elems; 4962306a36Sopenharmony_ci __le32 max_key_sz; 5062306a36Sopenharmony_ci __le32 max_val_sz; 5162306a36Sopenharmony_ci __le32 max_elem_sz; 5262306a36Sopenharmony_ci}; 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci/* 5562306a36Sopenharmony_ci * Types defined for map related control messages 5662306a36Sopenharmony_ci */ 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci/* BPF ABIv2 fixed-length control message fields */ 5962306a36Sopenharmony_ci#define CMSG_MAP_KEY_LW 16 6062306a36Sopenharmony_ci#define CMSG_MAP_VALUE_LW 16 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_cienum nfp_bpf_cmsg_status { 6362306a36Sopenharmony_ci CMSG_RC_SUCCESS = 0, 6462306a36Sopenharmony_ci CMSG_RC_ERR_MAP_FD = 1, 6562306a36Sopenharmony_ci CMSG_RC_ERR_MAP_NOENT = 2, 6662306a36Sopenharmony_ci CMSG_RC_ERR_MAP_ERR = 3, 6762306a36Sopenharmony_ci CMSG_RC_ERR_MAP_PARSE = 4, 6862306a36Sopenharmony_ci CMSG_RC_ERR_MAP_EXIST = 5, 6962306a36Sopenharmony_ci CMSG_RC_ERR_MAP_NOMEM = 6, 7062306a36Sopenharmony_ci CMSG_RC_ERR_MAP_E2BIG = 7, 7162306a36Sopenharmony_ci}; 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_cistruct cmsg_reply_map_simple { 7462306a36Sopenharmony_ci struct nfp_ccm_hdr hdr; 7562306a36Sopenharmony_ci __be32 rc; 7662306a36Sopenharmony_ci}; 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_cistruct cmsg_req_map_alloc_tbl { 7962306a36Sopenharmony_ci struct nfp_ccm_hdr hdr; 8062306a36Sopenharmony_ci __be32 key_size; /* in bytes */ 8162306a36Sopenharmony_ci __be32 value_size; /* in bytes */ 8262306a36Sopenharmony_ci __be32 max_entries; 8362306a36Sopenharmony_ci __be32 map_type; 8462306a36Sopenharmony_ci __be32 map_flags; /* reserved */ 8562306a36Sopenharmony_ci}; 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_cistruct cmsg_reply_map_alloc_tbl { 8862306a36Sopenharmony_ci struct cmsg_reply_map_simple reply_hdr; 8962306a36Sopenharmony_ci __be32 tid; 9062306a36Sopenharmony_ci}; 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_cistruct cmsg_req_map_free_tbl { 9362306a36Sopenharmony_ci struct nfp_ccm_hdr hdr; 9462306a36Sopenharmony_ci __be32 tid; 9562306a36Sopenharmony_ci}; 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_cistruct cmsg_reply_map_free_tbl { 9862306a36Sopenharmony_ci struct cmsg_reply_map_simple reply_hdr; 9962306a36Sopenharmony_ci __be32 count; 10062306a36Sopenharmony_ci}; 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_cistruct cmsg_req_map_op { 10362306a36Sopenharmony_ci struct nfp_ccm_hdr hdr; 10462306a36Sopenharmony_ci __be32 tid; 10562306a36Sopenharmony_ci __be32 count; 10662306a36Sopenharmony_ci __be32 flags; 10762306a36Sopenharmony_ci u8 data[]; 10862306a36Sopenharmony_ci}; 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_cistruct cmsg_reply_map_op { 11162306a36Sopenharmony_ci struct cmsg_reply_map_simple reply_hdr; 11262306a36Sopenharmony_ci __be32 count; 11362306a36Sopenharmony_ci __be32 resv; 11462306a36Sopenharmony_ci u8 data[]; 11562306a36Sopenharmony_ci}; 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_cistruct cmsg_bpf_event { 11862306a36Sopenharmony_ci struct nfp_ccm_hdr hdr; 11962306a36Sopenharmony_ci __be32 cpu_id; 12062306a36Sopenharmony_ci __be64 map_ptr; 12162306a36Sopenharmony_ci __be32 data_size; 12262306a36Sopenharmony_ci __be32 pkt_size; 12362306a36Sopenharmony_ci u8 data[]; 12462306a36Sopenharmony_ci}; 12562306a36Sopenharmony_ci#endif 126