nfp: parse crypto opcode TLV
authorJakub Kicinski <jakub.kicinski@netronome.com>
Wed, 5 Jun 2019 21:11:35 +0000 (14:11 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 6 Jun 2019 21:13:39 +0000 (14:13 -0700)
Parse TLV containing a bitmask of supported crypto operations.
The TLV contains a capability bitmask (supported operations)
and enabled bitmask.  Each operation describes the crypto
protocol quite exhaustively (protocol, AEAD, direction).

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: Dirk van der Merwe <dirk.vandermerwe@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/netronome/nfp/nfp_net_ctrl.c
drivers/net/ethernet/netronome/nfp/nfp_net_ctrl.h

index 6c207c5..d835c14 100644 (file)
@@ -103,6 +103,17 @@ int nfp_net_tlv_caps_parse(struct device *dev, u8 __iomem *ctrl_mem,
                        if (length >= 4)
                                caps->mbox_cmsg_types = readl(data);
                        break;
+               case NFP_NET_CFG_TLV_TYPE_CRYPTO_OPS:
+                       if (length < 32) {
+                               dev_err(dev,
+                                       "CRYPTO OPS TLV should be at least 32B, is %dB offset:%u\n",
+                                       length, offset);
+                               return -EINVAL;
+                       }
+
+                       caps->crypto_ops = readl(data);
+                       caps->crypto_enable_off = data - ctrl_mem + 16;
+                       break;
                default:
                        if (!FIELD_GET(NFP_NET_CFG_TLV_HEADER_REQUIRED, hdr))
                                break;
index b94db7f..bd4e219 100644 (file)
  * Variable, bitmap of control message types supported by the mailbox handler.
  * Bit 0 corresponds to message type 0, bit 1 to 1, etc.  Control messages are
  * encapsulated into simple TLVs, with an end TLV and written to the Mailbox.
+ *
+ * %NFP_NET_CFG_TLV_TYPE_CRYPTO_OPS:
+ * 8 words, bitmaps of supported and enabled crypto operations.
+ * First 16B (4 words) contains a bitmap of supported crypto operations,
+ * and next 16B contain the enabled operations.
  */
 #define NFP_NET_CFG_TLV_TYPE_UNKNOWN           0
 #define NFP_NET_CFG_TLV_TYPE_RESERVED          1
 #define NFP_NET_CFG_TLV_TYPE_EXPERIMENTAL1     6
 #define NFP_NET_CFG_TLV_TYPE_REPR_CAP          7
 #define NFP_NET_CFG_TLV_TYPE_MBOX_CMSG_TYPES   10
+#define NFP_NET_CFG_TLV_TYPE_CRYPTO_OPS                11 /* see crypto/fw.h */
 
 struct device;
 
@@ -492,6 +498,8 @@ struct device;
  * @mbox_len:          vNIC mailbox area length
  * @repr_cap:          capabilities for representors
  * @mbox_cmsg_types:   cmsgs which can be passed through the mailbox
+ * @crypto_ops:                supported crypto operations
+ * @crypto_enable_off: offset of crypto ops enable region
  */
 struct nfp_net_tlv_caps {
        u32 me_freq_mhz;
@@ -499,6 +507,8 @@ struct nfp_net_tlv_caps {
        unsigned int mbox_len;
        u32 repr_cap;
        u32 mbox_cmsg_types;
+       u32 crypto_ops;
+       unsigned int crypto_enable_off;
 };
 
 int nfp_net_tlv_caps_parse(struct device *dev, u8 __iomem *ctrl_mem,