1b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise/* 2b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * Copyright (c) 2006 Chelsio, Inc. All rights reserved. 3b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * 4b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * This software is available to you under a choice of one of two 5b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * licenses. You may choose to be licensed under the terms of the GNU 6b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * General Public License (GPL) Version 2, available from the file 7b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * COPYING in the main directory of this source tree, or the 8b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * OpenIB.org BSD license below: 9b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * 10b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * Redistribution and use in source and binary forms, with or 11b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * without modification, are permitted provided that the following 12b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * conditions are met: 13b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * 14b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * - Redistributions of source code must retain the above 15b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * copyright notice, this list of conditions and the following 16b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * disclaimer. 17b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * 18b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * - Redistributions in binary form must reproduce the above 19b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * copyright notice, this list of conditions and the following 20b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * disclaimer in the documentation and/or other materials 21b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * provided with the distribution. 22b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * 23b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 27b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 28b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 29b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 30b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * SOFTWARE. 31b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise */ 32b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#ifndef __CXIO_RESOURCE_H__ 33b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#define __CXIO_RESOURCE_H__ 34b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 35b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#include <linux/kernel.h> 36b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#include <linux/random.h> 37b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#include <linux/slab.h> 38b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#include <linux/kfifo.h> 39b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#include <linux/spinlock.h> 40b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#include <linux/errno.h> 41b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#include <linux/genalloc.h> 42b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#include "cxio_hal.h" 43b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 44b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseextern int cxio_hal_init_rhdl_resource(u32 nr_rhdl); 45b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseextern void cxio_hal_destroy_rhdl_resource(void); 46b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseextern int cxio_hal_init_resource(struct cxio_rdev *rdev_p, 47b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise u32 nr_tpt, u32 nr_pbl, 48b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise u32 nr_rqt, u32 nr_qpid, u32 nr_cqid, 49b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise u32 nr_pdid); 50b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseextern u32 cxio_hal_get_stag(struct cxio_hal_resource *rscp); 51b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseextern void cxio_hal_put_stag(struct cxio_hal_resource *rscp, u32 stag); 52b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseextern u32 cxio_hal_get_qpid(struct cxio_hal_resource *rscp); 53b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseextern void cxio_hal_put_qpid(struct cxio_hal_resource *rscp, u32 qpid); 54b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseextern u32 cxio_hal_get_cqid(struct cxio_hal_resource *rscp); 55b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseextern void cxio_hal_put_cqid(struct cxio_hal_resource *rscp, u32 cqid); 56b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseextern void cxio_hal_destroy_resource(struct cxio_hal_resource *rscp); 57b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 58b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#define PBL_OFF(rdev_p, a) ( (a) - (rdev_p)->rnic_info.pbl_base ) 59b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseextern int cxio_hal_pblpool_create(struct cxio_rdev *rdev_p); 60b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseextern void cxio_hal_pblpool_destroy(struct cxio_rdev *rdev_p); 61b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseextern u32 cxio_hal_pblpool_alloc(struct cxio_rdev *rdev_p, int size); 62b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseextern void cxio_hal_pblpool_free(struct cxio_rdev *rdev_p, u32 addr, int size); 63b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 64b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#define RQT_OFF(rdev_p, a) ( (a) - (rdev_p)->rnic_info.rqt_base ) 65b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseextern int cxio_hal_rqtpool_create(struct cxio_rdev *rdev_p); 66b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseextern void cxio_hal_rqtpool_destroy(struct cxio_rdev *rdev_p); 67b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseextern u32 cxio_hal_rqtpool_alloc(struct cxio_rdev *rdev_p, int size); 68b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseextern void cxio_hal_rqtpool_free(struct cxio_rdev *rdev_p, u32 addr, int size); 69b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#endif 70