net/sfc/base: import SFN7xxx family support
[dpdk.git] / drivers / net / sfc / base / efx.h
index 1814aef..df56aa2 100644 (file)
@@ -182,6 +182,82 @@ efx_nic_check_pcie_link_speed(
        __in            uint32_t pcie_link_gen,
        __out           efx_pcie_link_performance_t *resultp);
 
+#if EFSYS_OPT_MCDI
+
+#if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD
+/* Huntington and Medford require MCDIv2 commands */
+#define        WITH_MCDI_V2 1
+#endif
+
+typedef struct efx_mcdi_req_s efx_mcdi_req_t;
+
+typedef enum efx_mcdi_exception_e {
+       EFX_MCDI_EXCEPTION_MC_REBOOT,
+       EFX_MCDI_EXCEPTION_MC_BADASSERT,
+} efx_mcdi_exception_t;
+
+#if EFSYS_OPT_MCDI_LOGGING
+typedef enum efx_log_msg_e {
+       EFX_LOG_INVALID,
+       EFX_LOG_MCDI_REQUEST,
+       EFX_LOG_MCDI_RESPONSE,
+} efx_log_msg_t;
+#endif /* EFSYS_OPT_MCDI_LOGGING */
+
+typedef struct efx_mcdi_transport_s {
+       void            *emt_context;
+       efsys_mem_t     *emt_dma_mem;
+       void            (*emt_execute)(void *, efx_mcdi_req_t *);
+       void            (*emt_ev_cpl)(void *);
+       void            (*emt_exception)(void *, efx_mcdi_exception_t);
+#if EFSYS_OPT_MCDI_LOGGING
+       void            (*emt_logger)(void *, efx_log_msg_t,
+                                       void *, size_t, void *, size_t);
+#endif /* EFSYS_OPT_MCDI_LOGGING */
+#if EFSYS_OPT_MCDI_PROXY_AUTH
+       void            (*emt_ev_proxy_response)(void *, uint32_t, efx_rc_t);
+#endif /* EFSYS_OPT_MCDI_PROXY_AUTH */
+} efx_mcdi_transport_t;
+
+extern __checkReturn   efx_rc_t
+efx_mcdi_init(
+       __in            efx_nic_t *enp,
+       __in            const efx_mcdi_transport_t *mtp);
+
+extern __checkReturn   efx_rc_t
+efx_mcdi_reboot(
+       __in            efx_nic_t *enp);
+
+                       void
+efx_mcdi_new_epoch(
+       __in            efx_nic_t *enp);
+
+extern                 void
+efx_mcdi_get_timeout(
+       __in            efx_nic_t *enp,
+       __in            efx_mcdi_req_t *emrp,
+       __out           uint32_t *usec_timeoutp);
+
+extern                 void
+efx_mcdi_request_start(
+       __in            efx_nic_t *enp,
+       __in            efx_mcdi_req_t *emrp,
+       __in            boolean_t ev_cpl);
+
+extern __checkReturn   boolean_t
+efx_mcdi_request_poll(
+       __in            efx_nic_t *enp);
+
+extern __checkReturn   boolean_t
+efx_mcdi_request_abort(
+       __in            efx_nic_t *enp);
+
+extern                 void
+efx_mcdi_fini(
+       __in            efx_nic_t *enp);
+
+#endif /* EFSYS_OPT_MCDI */
+
 /* INTR */
 
 #define        EFX_NINTR_SIENA 1024
@@ -507,6 +583,14 @@ typedef struct efx_nic_cfg_s {
        uint32_t                enc_rx_prefix_size;
        uint32_t                enc_rx_buf_align_start;
        uint32_t                enc_rx_buf_align_end;
+#if EFSYS_OPT_MCDI
+       uint8_t                 enc_mcdi_mdio_channel;
+#endif /* EFSYS_OPT_MCDI */
+#if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD
+       uint32_t                enc_pf;
+       uint32_t                enc_vf;
+       uint32_t                enc_privilege_mask;
+#endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD */
        boolean_t               enc_bug26807_workaround;
        boolean_t               enc_bug35388_workaround;
        boolean_t               enc_bug41750_workaround;