mlx4_core: Move kernel doorbell management into core
In addition to mlx4_ib, there will be ethernet and FC consumers of mlx4_core, so move the code for managing kernel doorbells into the core module to avoid having to duplicate this multiple times. Signed-off-by: Yevgeny Petrilin <yevgenyp@mellanox.co.il> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
committed by
Roland Dreier
parent
14fb05b349
commit
6296883ca4
@@ -208,6 +208,32 @@ struct mlx4_mtt {
|
||||
int page_shift;
|
||||
};
|
||||
|
||||
enum {
|
||||
MLX4_DB_PER_PAGE = PAGE_SIZE / 4
|
||||
};
|
||||
|
||||
struct mlx4_db_pgdir {
|
||||
struct list_head list;
|
||||
DECLARE_BITMAP(order0, MLX4_DB_PER_PAGE);
|
||||
DECLARE_BITMAP(order1, MLX4_DB_PER_PAGE / 2);
|
||||
unsigned long *bits[2];
|
||||
__be32 *db_page;
|
||||
dma_addr_t db_dma;
|
||||
};
|
||||
|
||||
struct mlx4_ib_user_db_page;
|
||||
|
||||
struct mlx4_db {
|
||||
__be32 *db;
|
||||
union {
|
||||
struct mlx4_db_pgdir *pgdir;
|
||||
struct mlx4_ib_user_db_page *user_page;
|
||||
} u;
|
||||
dma_addr_t dma;
|
||||
int index;
|
||||
int order;
|
||||
};
|
||||
|
||||
struct mlx4_mr {
|
||||
struct mlx4_mtt mtt;
|
||||
u64 iova;
|
||||
@@ -341,6 +367,9 @@ int mlx4_write_mtt(struct mlx4_dev *dev, struct mlx4_mtt *mtt,
|
||||
int mlx4_buf_write_mtt(struct mlx4_dev *dev, struct mlx4_mtt *mtt,
|
||||
struct mlx4_buf *buf);
|
||||
|
||||
int mlx4_db_alloc(struct mlx4_dev *dev, struct mlx4_db *db, int order);
|
||||
void mlx4_db_free(struct mlx4_dev *dev, struct mlx4_db *db);
|
||||
|
||||
int mlx4_cq_alloc(struct mlx4_dev *dev, int nent, struct mlx4_mtt *mtt,
|
||||
struct mlx4_uar *uar, u64 db_rec, struct mlx4_cq *cq);
|
||||
void mlx4_cq_free(struct mlx4_dev *dev, struct mlx4_cq *cq);
|
||||
|
Reference in New Issue
Block a user