#ifndef NFP_CCM_H
#define NFP_CCM_H …
#include <linux/bitmap.h>
#include <linux/skbuff.h>
#include <linux/wait.h>
struct nfp_app;
struct nfp_net;
enum nfp_ccm_type { … };
#define NFP_CCM_ABI_VERSION …
#define NFP_CCM_TYPE_REPLY_BIT …
#define __NFP_CCM_REPLY(req) …
struct nfp_ccm_hdr { … };
static inline u8 nfp_ccm_get_type(struct sk_buff *skb)
{ … }
static inline __be16 __nfp_ccm_get_tag(struct sk_buff *skb)
{ … }
static inline unsigned int nfp_ccm_get_tag(struct sk_buff *skb)
{ … }
#define NFP_NET_MBOX_TLV_TYPE …
#define NFP_NET_MBOX_TLV_LEN …
enum nfp_ccm_mbox_tlv_type { … };
struct nfp_ccm { … };
int nfp_ccm_init(struct nfp_ccm *ccm, struct nfp_app *app);
void nfp_ccm_clean(struct nfp_ccm *ccm);
void nfp_ccm_rx(struct nfp_ccm *ccm, struct sk_buff *skb);
struct sk_buff *
nfp_ccm_communicate(struct nfp_ccm *ccm, struct sk_buff *skb,
enum nfp_ccm_type type, unsigned int reply_size);
int nfp_ccm_mbox_alloc(struct nfp_net *nn);
void nfp_ccm_mbox_free(struct nfp_net *nn);
int nfp_ccm_mbox_init(struct nfp_net *nn);
void nfp_ccm_mbox_clean(struct nfp_net *nn);
bool nfp_ccm_mbox_fits(struct nfp_net *nn, unsigned int size);
struct sk_buff *
nfp_ccm_mbox_msg_alloc(struct nfp_net *nn, unsigned int req_size,
unsigned int reply_size, gfp_t flags);
int __nfp_ccm_mbox_communicate(struct nfp_net *nn, struct sk_buff *skb,
enum nfp_ccm_type type,
unsigned int reply_size,
unsigned int max_reply_size, bool critical);
int nfp_ccm_mbox_communicate(struct nfp_net *nn, struct sk_buff *skb,
enum nfp_ccm_type type,
unsigned int reply_size,
unsigned int max_reply_size);
int nfp_ccm_mbox_post(struct nfp_net *nn, struct sk_buff *skb,
enum nfp_ccm_type type, unsigned int max_reply_size);
#endif