From owner-svn-src-projects@FreeBSD.ORG Thu Jul 15 21:44:27 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 773171065678; Thu, 15 Jul 2010 21:44:27 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 377C18FC17; Thu, 15 Jul 2010 21:44:27 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o6FLiQNT009712; Thu, 15 Jul 2010 21:44:27 GMT (envelope-from jeff@svn.freebsd.org) Received: (from jeff@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o6FLiQ3P009711; Thu, 15 Jul 2010 21:44:26 GMT (envelope-from jeff@svn.freebsd.org) Message-Id: <201007152144.o6FLiQ3P009711@svn.freebsd.org> From: Jeff Roberson Date: Thu, 15 Jul 2010 21:44:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r210139 - projects/ofed/head/sys/ofed/include/linux X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 Jul 2010 21:44:27 -0000 Author: jeff Date: Thu Jul 15 21:44:26 2010 New Revision: 210139 URL: http://svn.freebsd.org/changeset/base/210139 Log: - Add a dma pool implementation which simply uses uma. This is not fully compatible with the linux implementation but satisfies the needs of existing consumers. Any further requirements can be met by using contigmalloc as the backing for the zone. Sponsored by: Isilon Systems, iX Systems, and Panasas. Modified: projects/ofed/head/sys/ofed/include/linux/dmapool.h Modified: projects/ofed/head/sys/ofed/include/linux/dmapool.h ============================================================================== --- projects/ofed/head/sys/ofed/include/linux/dmapool.h Thu Jul 15 20:24:37 2010 (r210138) +++ projects/ofed/head/sys/ofed/include/linux/dmapool.h Thu Jul 15 21:44:26 2010 (r210139) @@ -29,15 +29,57 @@ #ifndef _LINUX_DMAPOOL_H_ #define _LINUX_DMAPOOL_H_ +#include #include #include #include +#include + +struct dma_pool { + uma_zone_t pool_zone; +}; + +static inline struct dma_pool * +dma_pool_create(char *name, struct linux_device *dev, size_t size, + size_t align, size_t boundary) +{ + struct dma_pool *pool; + + pool = kmalloc(sizeof(*pool), GFP_KERNEL); + align--; + /* + * XXX Eventually this could use a seperate allocf to honor boundary + * and physical address requirements of the device. + */ + pool->pool_zone = uma_zcreate(name, size, NULL, NULL, NULL, NULL, + align, UMA_ZONE_OFFPAGE); + + return (pool); +} + +static inline void +dma_pool_destroy(struct dma_pool *pool) +{ + uma_zdestroy(pool->pool_zone); + kfree(pool); +} + +static inline void * +dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags, dma_addr_t *handle) +{ + void *vaddr; + + vaddr = uma_zalloc(pool->pool_zone, mem_flags); + if (vaddr) + *handle = vtophys(vaddr); + return (vaddr); +} + +static inline void +dma_pool_free(struct dma_pool *pool, void *vaddr, dma_addr_t addr) +{ + uma_zfree(pool->pool_zone, vaddr); +} -struct dma_pool *dma_pool_create(const char *name, struct linux_device *dev, - size_t size, size_t align, size_t allocation); -void dma_pool_destroy(struct dma_pool *pool); -void *dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags, - dma_addr_t *handle); -void dma_pool_free(struct dma_pool *pool, void *vaddr, dma_addr_t addr); #endif /* _LINUX_DMAPOOL_H_ */