aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/mlx4/pd.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/mlx4/pd.c')
-rw-r--r--drivers/net/mlx4/pd.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/drivers/net/mlx4/pd.c b/drivers/net/mlx4/pd.c
index 1286b886dcea..3736163e30e9 100644
--- a/drivers/net/mlx4/pd.c
+++ b/drivers/net/mlx4/pd.c
@@ -61,6 +61,24 @@ void mlx4_pd_free(struct mlx4_dev *dev, u32 pdn)
61} 61}
62EXPORT_SYMBOL_GPL(mlx4_pd_free); 62EXPORT_SYMBOL_GPL(mlx4_pd_free);
63 63
64int mlx4_xrcd_alloc(struct mlx4_dev *dev, u32 *xrcdn)
65{
66 struct mlx4_priv *priv = mlx4_priv(dev);
67
68 *xrcdn = mlx4_bitmap_alloc(&priv->xrcd_bitmap);
69 if (*xrcdn == -1)
70 return -ENOMEM;
71
72 return 0;
73}
74EXPORT_SYMBOL_GPL(mlx4_xrcd_alloc);
75
76void mlx4_xrcd_free(struct mlx4_dev *dev, u32 xrcdn)
77{
78 mlx4_bitmap_free(&mlx4_priv(dev)->xrcd_bitmap, xrcdn);
79}
80EXPORT_SYMBOL_GPL(mlx4_xrcd_free);
81
64int mlx4_init_pd_table(struct mlx4_dev *dev) 82int mlx4_init_pd_table(struct mlx4_dev *dev)
65{ 83{
66 struct mlx4_priv *priv = mlx4_priv(dev); 84 struct mlx4_priv *priv = mlx4_priv(dev);
@@ -74,6 +92,18 @@ void mlx4_cleanup_pd_table(struct mlx4_dev *dev)
74 mlx4_bitmap_cleanup(&mlx4_priv(dev)->pd_bitmap); 92 mlx4_bitmap_cleanup(&mlx4_priv(dev)->pd_bitmap);
75} 93}
76 94
95int mlx4_init_xrcd_table(struct mlx4_dev *dev)
96{
97 struct mlx4_priv *priv = mlx4_priv(dev);
98
99 return mlx4_bitmap_init(&priv->xrcd_bitmap, (1 << 16),
100 (1 << 16) - 1, dev->caps.reserved_xrcds + 1, 0);
101}
102
103void mlx4_cleanup_xrcd_table(struct mlx4_dev *dev)
104{
105 mlx4_bitmap_cleanup(&mlx4_priv(dev)->xrcd_bitmap);
106}
77 107
78int mlx4_uar_alloc(struct mlx4_dev *dev, struct mlx4_uar *uar) 108int mlx4_uar_alloc(struct mlx4_dev *dev, struct mlx4_uar *uar)
79{ 109{