* V |.dev_close
* +---------------+------------+
* | CONFIGURED |
+ * +---------------+<-----------+
+ * |.dev_start |
+ * V |
+ * +---------------+ |
+ * | STARTING |------------^
+ * +---------------+ failed |
+ * |success |
+ * | +---------------+
+ * | | STOPPING |
+ * | +---------------+
+ * | ^
+ * V |.dev_stop
+ * +---------------+------------+
+ * | STARTED |
* +---------------+
*/
enum sfc_adapter_state {
SFC_ADAPTER_CONFIGURING,
SFC_ADAPTER_CONFIGURED,
SFC_ADAPTER_CLOSING,
+ SFC_ADAPTER_STARTING,
+ SFC_ADAPTER_STARTED,
+ SFC_ADAPTER_STOPPING,
SFC_ADAPTER_NSTATES
};
efx_mcdi_transport_t transport;
};
+struct sfc_intr {
+ efx_intr_type_t type;
+};
+
+struct sfc_evq_info;
+
+struct sfc_port {
+ unsigned int flow_ctrl;
+ boolean_t flow_ctrl_autoneg;
+ size_t pdu;
+};
+
/* Adapter private data */
struct sfc_adapter {
/*
rte_spinlock_t nic_lock;
struct sfc_mcdi mcdi;
+ struct sfc_intr intr;
+ struct sfc_port port;
unsigned int rxq_max;
unsigned int txq_max;
+
+ unsigned int evq_count;
+ struct sfc_evq_info *evq_info;
+
+ unsigned int mgmt_evq_index;
+ rte_spinlock_t mgmt_evq_lock;
};
/*
int sfc_attach(struct sfc_adapter *sa);
void sfc_detach(struct sfc_adapter *sa);
+int sfc_start(struct sfc_adapter *sa);
+void sfc_stop(struct sfc_adapter *sa);
int sfc_mcdi_init(struct sfc_adapter *sa);
void sfc_mcdi_fini(struct sfc_adapter *sa);
int sfc_configure(struct sfc_adapter *sa);
void sfc_close(struct sfc_adapter *sa);
+int sfc_intr_attach(struct sfc_adapter *sa);
+void sfc_intr_detach(struct sfc_adapter *sa);
+int sfc_intr_init(struct sfc_adapter *sa);
+void sfc_intr_fini(struct sfc_adapter *sa);
+int sfc_intr_start(struct sfc_adapter *sa);
+void sfc_intr_stop(struct sfc_adapter *sa);
+
+int sfc_port_init(struct sfc_adapter *sa);
+void sfc_port_fini(struct sfc_adapter *sa);
+int sfc_port_start(struct sfc_adapter *sa);
+void sfc_port_stop(struct sfc_adapter *sa);
+
#ifdef __cplusplus
}
#endif