X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fionic%2Fionic_dev.h;h=38c078efdf967468deecfa1737d36b3b1459d3fd;hb=b3bc560bd6bdf3c9851d25bc0a66cb24aa1fd48c;hp=bacbe3f0538281bda7b7a2bd341f63cbdd4f13f5;hpb=561176361047ed180362343b8fb725390b387160;p=dpdk.git diff --git a/drivers/net/ionic/ionic_dev.h b/drivers/net/ionic/ionic_dev.h index bacbe3f053..38c078efdf 100644 --- a/drivers/net/ionic/ionic_dev.h +++ b/drivers/net/ionic/ionic_dev.h @@ -90,7 +90,6 @@ static inline void ionic_struct_size_checks(void) RTE_BUILD_BUG_ON(sizeof(struct ionic_rx_mode_set_cmd) != 64); RTE_BUILD_BUG_ON(sizeof(struct ionic_rx_filter_add_cmd) != 64); RTE_BUILD_BUG_ON(sizeof(struct ionic_rx_filter_add_comp) != 16); - RTE_BUILD_BUG_ON(sizeof(struct ionic_rx_filter_del_cmd) != 64); /* RDMA commands */ RTE_BUILD_BUG_ON(sizeof(struct ionic_rdma_reset_cmd) != 64); @@ -129,40 +128,28 @@ struct ionic_dev { uint32_t port_info_sz; }; -struct ionic_queue; -struct ionic_desc_info; +#define Q_NEXT_TO_POST(_q, _n) (((_q)->head_idx + (_n)) & ((_q)->size_mask)) +#define Q_NEXT_TO_SRVC(_q, _n) (((_q)->tail_idx + (_n)) & ((_q)->size_mask)) -typedef void (*desc_cb)(struct ionic_queue *q, - uint32_t q_desc_index, - uint32_t cq_desc_index, - void *cb_arg, void *service_cb_arg); - -struct ionic_desc_info { - desc_cb cb; - void *cb_arg; -}; +#define IONIC_INFO_IDX(_q, _i) (_i) +#define IONIC_INFO_PTR(_q, _i) (&(_q)->info[IONIC_INFO_IDX((_q), _i)]) struct ionic_queue { - struct ionic_dev *idev; - struct ionic_lif *lif; - struct ionic_cq *bound_cq; - uint32_t index; - uint32_t type; - uint32_t hw_index; - uint32_t hw_type; + uint16_t num_descs; + uint16_t head_idx; + uint16_t tail_idx; + uint16_t size_mask; + uint8_t type; + uint8_t hw_type; void *base; void *sg_base; + struct ionic_doorbell __iomem *db; + void **info; + + uint32_t index; + uint32_t hw_index; rte_iova_t base_pa; rte_iova_t sg_base_pa; - struct ionic_desc_info *info; - uint32_t tail_idx; - uint32_t head_idx; - uint32_t num_descs; - uint32_t desc_size; - uint32_t sg_desc_size; - uint32_t qid; - uint32_t qtype; - struct ionic_doorbell __iomem *db; }; #define IONIC_INTR_NONE (-1) @@ -174,27 +161,14 @@ struct ionic_intr_info { }; struct ionic_cq { - struct ionic_lif *lif; - struct ionic_queue *bound_q; - uint32_t tail_idx; - uint32_t num_descs; - uint32_t desc_size; + uint16_t tail_idx; + uint16_t num_descs; + uint16_t size_mask; bool done_color; void *base; rte_iova_t base_pa; }; -/** ionic_admin_ctx - Admin command context. - * @pending_work: Flag that indicates a completion. - * @cmd: Admin command (64B) to be copied to the queue. - * @comp: Admin completion (16B) copied from the queue. - */ -struct ionic_admin_ctx { - bool pending_work; - union ionic_adminq_cmd cmd; - union ionic_adminq_comp comp; -}; - struct ionic_lif; struct ionic_adapter; struct ionic_qcq; @@ -240,29 +214,21 @@ void ionic_dev_cmd_adminq_init(struct ionic_dev *idev, struct ionic_qcq *qcq); struct ionic_doorbell __iomem *ionic_db_map(struct ionic_lif *lif, struct ionic_queue *q); -int ionic_cq_init(struct ionic_lif *lif, struct ionic_cq *cq, - uint32_t num_descs, size_t desc_size); +int ionic_cq_init(struct ionic_cq *cq, uint16_t num_descs); void ionic_cq_map(struct ionic_cq *cq, void *base, rte_iova_t base_pa); -void ionic_cq_bind(struct ionic_cq *cq, struct ionic_queue *q); -typedef bool (*ionic_cq_cb)(struct ionic_cq *cq, uint32_t cq_desc_index, +typedef bool (*ionic_cq_cb)(struct ionic_cq *cq, uint16_t cq_desc_index, void *cb_arg); uint32_t ionic_cq_service(struct ionic_cq *cq, uint32_t work_to_do, ionic_cq_cb cb, void *cb_arg); -int ionic_q_init(struct ionic_lif *lif, struct ionic_dev *idev, - struct ionic_queue *q, uint32_t index, uint32_t num_descs, - size_t desc_size, size_t sg_desc_size); +int ionic_q_init(struct ionic_queue *q, uint32_t index, uint16_t num_descs); void ionic_q_map(struct ionic_queue *q, void *base, rte_iova_t base_pa); void ionic_q_sg_map(struct ionic_queue *q, void *base, rte_iova_t base_pa); -void ionic_q_post(struct ionic_queue *q, bool ring_doorbell, desc_cb cb, - void *cb_arg); -void ionic_q_service(struct ionic_queue *q, uint32_t cq_desc_index, - uint32_t stop_index, void *service_cb_arg); -static inline uint32_t +static inline uint16_t ionic_q_space_avail(struct ionic_queue *q) { - uint32_t avail = q->tail_idx; + uint16_t avail = q->tail_idx; if (q->head_idx >= avail) avail += q->num_descs - q->head_idx - 1; @@ -280,6 +246,4 @@ ionic_q_flush(struct ionic_queue *q) rte_write64(rte_cpu_to_le_64(val), q->db); } -int ionic_adminq_post(struct ionic_lif *lif, struct ionic_admin_ctx *ctx); - #endif /* _IONIC_DEV_H_ */