On 26-Feb-19 22:09, Steve Wise wrote: >> +struct efa_com_dev { >> + struct efa_com_admin_queue aq; >> + struct efa_com_aenq aenq; >> + u8 __iomem *reg_bar; >> + void *dmadev; >> + u32 supported_features; >> + u32 dma_addr_bits; >> + >> + struct efa_com_mmio_read mmio_read; >> +}; >> + > > > nit: Some structs align the field names, and others don't... Right, I'll remove the alignments. > >> +typedef void (*efa_aenq_handler)(void *data, >> + struct efa_admin_aenq_entry *aenq_e); >> + >> +/* Holds aenq handlers. Indexed by AENQ event group */ >> +struct efa_aenq_handlers { >> + efa_aenq_handler handlers[EFA_MAX_HANDLERS]; >> + efa_aenq_handler unimplemented_handler; >> +}; >> + >> +int efa_com_admin_init(struct efa_com_dev *edev, >> + struct efa_aenq_handlers *aenq_handlers); >> +void efa_com_admin_destroy(struct efa_com_dev *edev); >> +int efa_com_dev_reset(struct efa_com_dev *edev, >> + enum efa_regs_reset_reason_types reset_reason); >> +void efa_com_set_admin_polling_mode(struct efa_com_dev *edev, bool polling); >> +void efa_com_admin_q_comp_intr_handler(struct efa_com_dev *edev); >> +int efa_com_mmio_reg_read_init(struct efa_com_dev *edev); >> +void efa_com_mmio_reg_read_destroy(struct efa_com_dev *edev); >> + >> +int efa_com_validate_version(struct efa_com_dev *edev); >> +int efa_com_get_dma_width(struct efa_com_dev *edev); >> + >> +int efa_com_cmd_exec(struct efa_com_admin_queue *aq, >> + struct efa_admin_aq_entry *cmd, >> + size_t cmd_size, >> + struct efa_admin_acq_entry *comp, >> + size_t comp_size); >> +void efa_com_aenq_intr_handler(struct efa_com_dev *edev, void *data); >> + >> +#endif /* _EFA_COM_H_ */ > > > Reviewed-by: Steve Wise <swise@xxxxxxxxxxxxxxxxxxxxx> Thanks Steve!