root/drivers/net/ethernet/netronome/nfp/ccm.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. nfp_ccm_get_type
  2. __nfp_ccm_get_tag
  3. nfp_ccm_get_tag

   1 /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
   2 /* Copyright (C) 2016-2019 Netronome Systems, Inc. */
   3 
   4 #ifndef NFP_CCM_H
   5 #define NFP_CCM_H 1
   6 
   7 #include <linux/bitmap.h>
   8 #include <linux/skbuff.h>
   9 #include <linux/wait.h>
  10 
  11 struct nfp_app;
  12 struct nfp_net;
  13 
  14 /* Firmware ABI */
  15 
  16 enum nfp_ccm_type {
  17         NFP_CCM_TYPE_BPF_MAP_ALLOC      = 1,
  18         NFP_CCM_TYPE_BPF_MAP_FREE       = 2,
  19         NFP_CCM_TYPE_BPF_MAP_LOOKUP     = 3,
  20         NFP_CCM_TYPE_BPF_MAP_UPDATE     = 4,
  21         NFP_CCM_TYPE_BPF_MAP_DELETE     = 5,
  22         NFP_CCM_TYPE_BPF_MAP_GETNEXT    = 6,
  23         NFP_CCM_TYPE_BPF_MAP_GETFIRST   = 7,
  24         NFP_CCM_TYPE_BPF_BPF_EVENT      = 8,
  25         NFP_CCM_TYPE_CRYPTO_RESET       = 9,
  26         NFP_CCM_TYPE_CRYPTO_ADD         = 10,
  27         NFP_CCM_TYPE_CRYPTO_DEL         = 11,
  28         NFP_CCM_TYPE_CRYPTO_UPDATE      = 12,
  29         __NFP_CCM_TYPE_MAX,
  30 };
  31 
  32 #define NFP_CCM_ABI_VERSION             1
  33 
  34 #define NFP_CCM_TYPE_REPLY_BIT          7
  35 #define __NFP_CCM_REPLY(req)            (BIT(NFP_CCM_TYPE_REPLY_BIT) | (req))
  36 
  37 struct nfp_ccm_hdr {
  38         union {
  39                 struct {
  40                         u8 type;
  41                         u8 ver;
  42                         __be16 tag;
  43                 };
  44                 __be32 raw;
  45         };
  46 };
  47 
  48 static inline u8 nfp_ccm_get_type(struct sk_buff *skb)
  49 {
  50         struct nfp_ccm_hdr *hdr;
  51 
  52         hdr = (struct nfp_ccm_hdr *)skb->data;
  53 
  54         return hdr->type;
  55 }
  56 
  57 static inline __be16 __nfp_ccm_get_tag(struct sk_buff *skb)
  58 {
  59         struct nfp_ccm_hdr *hdr;
  60 
  61         hdr = (struct nfp_ccm_hdr *)skb->data;
  62 
  63         return hdr->tag;
  64 }
  65 
  66 static inline unsigned int nfp_ccm_get_tag(struct sk_buff *skb)
  67 {
  68         return be16_to_cpu(__nfp_ccm_get_tag(skb));
  69 }
  70 
  71 #define NFP_NET_MBOX_TLV_TYPE           GENMASK(31, 16)
  72 #define NFP_NET_MBOX_TLV_LEN            GENMASK(15, 0)
  73 
  74 enum nfp_ccm_mbox_tlv_type {
  75         NFP_NET_MBOX_TLV_TYPE_UNKNOWN   = 0,
  76         NFP_NET_MBOX_TLV_TYPE_END       = 1,
  77         NFP_NET_MBOX_TLV_TYPE_MSG       = 2,
  78         NFP_NET_MBOX_TLV_TYPE_MSG_NOSUP = 3,
  79         NFP_NET_MBOX_TLV_TYPE_RESV      = 4,
  80 };
  81 
  82 /* Implementation */
  83 
  84 /**
  85  * struct nfp_ccm - common control message handling
  86  * @app:                APP handle
  87  *
  88  * @tag_allocator:      bitmap of control message tags in use
  89  * @tag_alloc_next:     next tag bit to allocate
  90  * @tag_alloc_last:     next tag bit to be freed
  91  *
  92  * @replies:            received cmsg replies waiting to be consumed
  93  * @wq:                 work queue for waiting for cmsg replies
  94  */
  95 struct nfp_ccm {
  96         struct nfp_app *app;
  97 
  98         DECLARE_BITMAP(tag_allocator, U16_MAX + 1);
  99         u16 tag_alloc_next;
 100         u16 tag_alloc_last;
 101 
 102         struct sk_buff_head replies;
 103         wait_queue_head_t wq;
 104 };
 105 
 106 int nfp_ccm_init(struct nfp_ccm *ccm, struct nfp_app *app);
 107 void nfp_ccm_clean(struct nfp_ccm *ccm);
 108 void nfp_ccm_rx(struct nfp_ccm *ccm, struct sk_buff *skb);
 109 struct sk_buff *
 110 nfp_ccm_communicate(struct nfp_ccm *ccm, struct sk_buff *skb,
 111                     enum nfp_ccm_type type, unsigned int reply_size);
 112 
 113 int nfp_ccm_mbox_alloc(struct nfp_net *nn);
 114 void nfp_ccm_mbox_free(struct nfp_net *nn);
 115 int nfp_ccm_mbox_init(struct nfp_net *nn);
 116 void nfp_ccm_mbox_clean(struct nfp_net *nn);
 117 bool nfp_ccm_mbox_fits(struct nfp_net *nn, unsigned int size);
 118 struct sk_buff *
 119 nfp_ccm_mbox_msg_alloc(struct nfp_net *nn, unsigned int req_size,
 120                        unsigned int reply_size, gfp_t flags);
 121 int __nfp_ccm_mbox_communicate(struct nfp_net *nn, struct sk_buff *skb,
 122                                enum nfp_ccm_type type,
 123                                unsigned int reply_size,
 124                                unsigned int max_reply_size, bool critical);
 125 int nfp_ccm_mbox_communicate(struct nfp_net *nn, struct sk_buff *skb,
 126                              enum nfp_ccm_type type,
 127                              unsigned int reply_size,
 128                              unsigned int max_reply_size);
 129 int nfp_ccm_mbox_post(struct nfp_net *nn, struct sk_buff *skb,
 130                       enum nfp_ccm_type type, unsigned int max_reply_size);
 131 #endif

/* [<][>][^][v][top][bottom][index][help] */