net/sfc/base: separate limitations on Tx DMA descriptors
[dpdk.git] / drivers / net / sfc / base / efx.h
index 6c81d98..7c2fab7 100644 (file)
@@ -559,6 +559,10 @@ efx_mac_stats_get_mask(
 
 #define        EFX_MAC_STATS_SIZE 0x400
 
+extern __checkReturn                   efx_rc_t
+efx_mac_stats_clear(
+       __in                            efx_nic_t *enp);
+
 /*
  * Upload mac statistics supported by the hardware into the given buffer.
  *
@@ -1154,6 +1158,13 @@ typedef struct efx_nic_cfg_s {
        uint32_t                enc_rx_batch_max;
        /* Number of rx descriptors the hardware requires for a push. */
        uint32_t                enc_rx_push_align;
+       /* Maximum amount of data in DMA descriptor */
+       uint32_t                enc_tx_dma_desc_size_max;
+       /*
+        * Boundary which DMA descriptor data must not cross or 0 if no
+        * limitation.
+        */
+       uint32_t                enc_tx_dma_desc_boundary;
        /*
         * Maximum number of bytes into the packet the TCP header can start for
         * the hardware to apply TSO packet edits.
@@ -1241,6 +1252,88 @@ efx_nic_get_vi_pool(
        __out           uint32_t *txq_countp);
 
 
+#if EFSYS_OPT_VPD
+
+typedef enum efx_vpd_tag_e {
+       EFX_VPD_ID = 0x02,
+       EFX_VPD_END = 0x0f,
+       EFX_VPD_RO = 0x10,
+       EFX_VPD_RW = 0x11,
+} efx_vpd_tag_t;
+
+typedef uint16_t efx_vpd_keyword_t;
+
+typedef struct efx_vpd_value_s {
+       efx_vpd_tag_t           evv_tag;
+       efx_vpd_keyword_t       evv_keyword;
+       uint8_t                 evv_length;
+       uint8_t                 evv_value[0x100];
+} efx_vpd_value_t;
+
+
+#define        EFX_VPD_KEYWORD(x, y) ((x) | ((y) << 8))
+
+extern __checkReturn           efx_rc_t
+efx_vpd_init(
+       __in                    efx_nic_t *enp);
+
+extern __checkReturn           efx_rc_t
+efx_vpd_size(
+       __in                    efx_nic_t *enp,
+       __out                   size_t *sizep);
+
+extern __checkReturn           efx_rc_t
+efx_vpd_read(
+       __in                    efx_nic_t *enp,
+       __out_bcount(size)      caddr_t data,
+       __in                    size_t size);
+
+extern __checkReturn           efx_rc_t
+efx_vpd_verify(
+       __in                    efx_nic_t *enp,
+       __in_bcount(size)       caddr_t data,
+       __in                    size_t size);
+
+extern __checkReturn           efx_rc_t
+efx_vpd_reinit(
+       __in                    efx_nic_t *enp,
+       __in_bcount(size)       caddr_t data,
+       __in                    size_t size);
+
+extern __checkReturn           efx_rc_t
+efx_vpd_get(
+       __in                    efx_nic_t *enp,
+       __in_bcount(size)       caddr_t data,
+       __in                    size_t size,
+       __inout                 efx_vpd_value_t *evvp);
+
+extern __checkReturn           efx_rc_t
+efx_vpd_set(
+       __in                    efx_nic_t *enp,
+       __inout_bcount(size)    caddr_t data,
+       __in                    size_t size,
+       __in                    efx_vpd_value_t *evvp);
+
+extern __checkReturn           efx_rc_t
+efx_vpd_next(
+       __in                    efx_nic_t *enp,
+       __inout_bcount(size)    caddr_t data,
+       __in                    size_t size,
+       __out                   efx_vpd_value_t *evvp,
+       __inout                 unsigned int *contp);
+
+extern __checkReturn           efx_rc_t
+efx_vpd_write(
+       __in                    efx_nic_t *enp,
+       __in_bcount(size)       caddr_t data,
+       __in                    size_t size);
+
+extern                         void
+efx_vpd_fini(
+       __in                    efx_nic_t *enp);
+
+#endif /* EFSYS_OPT_VPD */
+
 /* NVRAM */
 
 #if EFSYS_OPT_NVRAM
@@ -1339,6 +1432,45 @@ efx_nvram_fini(
 
 #endif /* EFSYS_OPT_NVRAM */
 
+#if EFSYS_OPT_BOOTCFG
+
+/* Report size and offset of bootcfg sector in NVRAM partition. */
+extern __checkReturn           efx_rc_t
+efx_bootcfg_sector_info(
+       __in                    efx_nic_t *enp,
+       __in                    uint32_t pf,
+       __out_opt               uint32_t *sector_countp,
+       __out                   size_t *offsetp,
+       __out                   size_t *max_sizep);
+
+/*
+ * Copy bootcfg sector data to a target buffer which may differ in size.
+ * Optionally corrects format errors in source buffer.
+ */
+extern                         efx_rc_t
+efx_bootcfg_copy_sector(
+       __in                    efx_nic_t *enp,
+       __inout_bcount(sector_length)
+                               uint8_t *sector,
+       __in                    size_t sector_length,
+       __out_bcount(data_size) uint8_t *data,
+       __in                    size_t data_size,
+       __in                    boolean_t handle_format_errors);
+
+extern                         efx_rc_t
+efx_bootcfg_read(
+       __in                    efx_nic_t *enp,
+       __out_bcount(size)      caddr_t data,
+       __in                    size_t size);
+
+extern                         efx_rc_t
+efx_bootcfg_write(
+       __in                    efx_nic_t *enp,
+       __in_bcount(size)       caddr_t data,
+       __in                    size_t size);
+
+#endif /* EFSYS_OPT_BOOTCFG */
+
 #if EFSYS_OPT_DIAG
 
 typedef enum efx_pattern_type_t {
@@ -1730,12 +1862,12 @@ typedef enum efx_rx_hash_alg_e {
        EFX_RX_HASHALG_TOEPLITZ
 } efx_rx_hash_alg_t;
 
-typedef enum efx_rx_hash_type_e {
-       EFX_RX_HASH_IPV4 = 0,
-       EFX_RX_HASH_TCPIPV4,
-       EFX_RX_HASH_IPV6,
-       EFX_RX_HASH_TCPIPV6,
-} efx_rx_hash_type_t;
+#define        EFX_RX_HASH_IPV4        (1U << 0)
+#define        EFX_RX_HASH_TCPIPV4     (1U << 1)
+#define        EFX_RX_HASH_IPV6        (1U << 2)
+#define        EFX_RX_HASH_TCPIPV6     (1U << 3)
+
+typedef unsigned int efx_rx_hash_type_t;
 
 typedef enum efx_rx_hash_support_e {
        EFX_RX_HASH_UNAVAILABLE = 0,    /* Hardware hash not inserted */
@@ -2230,6 +2362,151 @@ efx_hash_bytes(
        __in                    size_t length,
        __in                    uint32_t init);
 
+#if EFSYS_OPT_LICENSING
+
+/* LICENSING */
+
+typedef struct efx_key_stats_s {
+       uint32_t        eks_valid;
+       uint32_t        eks_invalid;
+       uint32_t        eks_blacklisted;
+       uint32_t        eks_unverifiable;
+       uint32_t        eks_wrong_node;
+       uint32_t        eks_licensed_apps_lo;
+       uint32_t        eks_licensed_apps_hi;
+       uint32_t        eks_licensed_features_lo;
+       uint32_t        eks_licensed_features_hi;
+} efx_key_stats_t;
+
+extern __checkReturn           efx_rc_t
+efx_lic_init(
+       __in                    efx_nic_t *enp);
+
+extern                         void
+efx_lic_fini(
+       __in                    efx_nic_t *enp);
+
+extern __checkReturn   boolean_t
+efx_lic_check_support(
+       __in                    efx_nic_t *enp);
+
+extern __checkReturn   efx_rc_t
+efx_lic_update_licenses(
+       __in            efx_nic_t *enp);
+
+extern __checkReturn   efx_rc_t
+efx_lic_get_key_stats(
+       __in            efx_nic_t *enp,
+       __out           efx_key_stats_t *ksp);
+
+extern __checkReturn   efx_rc_t
+efx_lic_app_state(
+       __in            efx_nic_t *enp,
+       __in            uint64_t app_id,
+       __out           boolean_t *licensedp);
+
+extern __checkReturn   efx_rc_t
+efx_lic_get_id(
+       __in            efx_nic_t *enp,
+       __in            size_t buffer_size,
+       __out           uint32_t *typep,
+       __out           size_t *lengthp,
+       __out_opt       uint8_t *bufferp);
+
+
+extern __checkReturn           efx_rc_t
+efx_lic_find_start(
+       __in                    efx_nic_t *enp,
+       __in_bcount(buffer_size)
+                               caddr_t bufferp,
+       __in                    size_t buffer_size,
+       __out                   uint32_t *startp
+       );
+
+extern __checkReturn           efx_rc_t
+efx_lic_find_end(
+       __in                    efx_nic_t *enp,
+       __in_bcount(buffer_size)
+                               caddr_t bufferp,
+       __in                    size_t buffer_size,
+       __in                    uint32_t offset,
+       __out                   uint32_t *endp
+       );
+
+extern __checkReturn   __success(return != B_FALSE)    boolean_t
+efx_lic_find_key(
+       __in                    efx_nic_t *enp,
+       __in_bcount(buffer_size)
+                               caddr_t bufferp,
+       __in                    size_t buffer_size,
+       __in                    uint32_t offset,
+       __out                   uint32_t *startp,
+       __out                   uint32_t *lengthp
+       );
+
+extern __checkReturn   __success(return != B_FALSE)    boolean_t
+efx_lic_validate_key(
+       __in                    efx_nic_t *enp,
+       __in_bcount(length)     caddr_t keyp,
+       __in                    uint32_t length
+       );
+
+extern __checkReturn           efx_rc_t
+efx_lic_read_key(
+       __in                    efx_nic_t *enp,
+       __in_bcount(buffer_size)
+                               caddr_t bufferp,
+       __in                    size_t buffer_size,
+       __in                    uint32_t offset,
+       __in                    uint32_t length,
+       __out_bcount_part(key_max_size, *lengthp)
+                               caddr_t keyp,
+       __in                    size_t key_max_size,
+       __out                   uint32_t *lengthp
+       );
+
+extern __checkReturn           efx_rc_t
+efx_lic_write_key(
+       __in                    efx_nic_t *enp,
+       __in_bcount(buffer_size)
+                               caddr_t bufferp,
+       __in                    size_t buffer_size,
+       __in                    uint32_t offset,
+       __in_bcount(length)     caddr_t keyp,
+       __in                    uint32_t length,
+       __out                   uint32_t *lengthp
+       );
+
+       __checkReturn           efx_rc_t
+efx_lic_delete_key(
+       __in                    efx_nic_t *enp,
+       __in_bcount(buffer_size)
+                               caddr_t bufferp,
+       __in                    size_t buffer_size,
+       __in                    uint32_t offset,
+       __in                    uint32_t length,
+       __in                    uint32_t end,
+       __out                   uint32_t *deltap
+       );
+
+extern __checkReturn           efx_rc_t
+efx_lic_create_partition(
+       __in                    efx_nic_t *enp,
+       __in_bcount(buffer_size)
+                               caddr_t bufferp,
+       __in                    size_t buffer_size
+       );
+
+extern __checkReturn           efx_rc_t
+efx_lic_finish_partition(
+       __in                    efx_nic_t *enp,
+       __in_bcount(buffer_size)
+                               caddr_t bufferp,
+       __in                    size_t buffer_size
+       );
+
+#endif /* EFSYS_OPT_LICENSING */
+
 
 
 #ifdef __cplusplus