Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 /*
  2  * Copyright (c) 2006, 2007 Cisco Systems, Inc.  All rights reserved.
  3  * Copyright (c) 2005 Mellanox Technologies. All rights reserved.
  4  *
  5  * This software is available to you under a choice of one of two
  6  * licenses.  You may choose to be licensed under the terms of the GNU
  7  * General Public License (GPL) Version 2, available from the file
  8  * COPYING in the main directory of this source tree, or the
  9  * OpenIB.org BSD license below:
 10  *
 11  *     Redistribution and use in source and binary forms, with or
 12  *     without modification, are permitted provided that the following
 13  *     conditions are met:
 14  *
 15  *      - Redistributions of source code must retain the above
 16  *        copyright notice, this list of conditions and the following
 17  *        disclaimer.
 18  *
 19  *      - Redistributions in binary form must reproduce the above
 20  *        copyright notice, this list of conditions and the following
 21  *        disclaimer in the documentation and/or other materials
 22  *        provided with the distribution.
 23  *
 24  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 25  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 26  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 27  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
 28  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 29  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 30  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 31  * SOFTWARE.
 32  */
 33 
 34 #include <linux/init.h>
 35 #include <linux/errno.h>
 36 
 37 #include <asm/page.h>
 38 
 39 #include "mlx4.h"
 40 #include "icm.h"
 41 
 42 int mlx4_pd_alloc(struct mlx4_dev *dev, u32 *pdn)
 43 {
 44         struct mlx4_priv *priv = mlx4_priv(dev);
 45 
 46         *pdn = mlx4_bitmap_alloc(&priv->pd_bitmap);
 47         if (*pdn == -1)
 48                 return -ENOMEM;
 49 
 50         return 0;
 51 }
 52 EXPORT_SYMBOL_GPL(mlx4_pd_alloc);
 53 
 54 void mlx4_pd_free(struct mlx4_dev *dev, u32 pdn)
 55 {
 56         mlx4_bitmap_free(&mlx4_priv(dev)->pd_bitmap, pdn);
 57 }
 58 EXPORT_SYMBOL_GPL(mlx4_pd_free);
 59 
 60 int mlx4_init_pd_table(struct mlx4_dev *dev)
 61 {
 62         struct mlx4_priv *priv = mlx4_priv(dev);
 63 
 64         return mlx4_bitmap_init(&priv->pd_bitmap, dev->caps.num_pds,
 65                                 (1 << 24) - 1, dev->caps.reserved_pds);
 66 }
 67 
 68 void mlx4_cleanup_pd_table(struct mlx4_dev *dev)
 69 {
 70         mlx4_bitmap_cleanup(&mlx4_priv(dev)->pd_bitmap);
 71 }
 72 
 73 
 74 int mlx4_uar_alloc(struct mlx4_dev *dev, struct mlx4_uar *uar)
 75 {
 76         uar->index = mlx4_bitmap_alloc(&mlx4_priv(dev)->uar_table.bitmap);
 77         if (uar->index == -1)
 78                 return -ENOMEM;
 79 
 80         uar->pfn = (pci_resource_start(dev->pdev, 2) >> PAGE_SHIFT) + uar->index;
 81 
 82         return 0;
 83 }
 84 EXPORT_SYMBOL_GPL(mlx4_uar_alloc);
 85 
 86 void mlx4_uar_free(struct mlx4_dev *dev, struct mlx4_uar *uar)
 87 {
 88         mlx4_bitmap_free(&mlx4_priv(dev)->uar_table.bitmap, uar->index);
 89 }
 90 EXPORT_SYMBOL_GPL(mlx4_uar_free);
 91 
 92 int mlx4_init_uar_table(struct mlx4_dev *dev)
 93 {
 94         return mlx4_bitmap_init(&mlx4_priv(dev)->uar_table.bitmap,
 95                                 dev->caps.num_uars, dev->caps.num_uars - 1,
 96                                 max(128, dev->caps.reserved_uars));
 97 }
 98 
 99 void mlx4_cleanup_uar_table(struct mlx4_dev *dev)
100 {
101         mlx4_bitmap_cleanup(&mlx4_priv(dev)->uar_table.bitmap);
102 }
103 
  This page was automatically generated by the LXR engine.