2010-04-01 12:44:57 +00:00
/*
* Copyright ( c ) Red Hat Inc .
* Permission is hereby granted , free of charge , to any person obtaining a
* copy of this software and associated documentation files ( the " Software " ) ,
* to deal in the Software without restriction , including without limitation
* the rights to use , copy , modify , merge , publish , distribute , sub license ,
* and / or sell copies of the Software , and to permit persons to whom the
* Software is furnished to do so , subject to the following conditions :
*
* The above copyright notice and this permission notice ( including the
* next paragraph ) shall be included in all copies or substantial portions
* of the Software .
*
* THE SOFTWARE IS PROVIDED " AS IS " , WITHOUT WARRANTY OF ANY KIND , EXPRESS OR
* IMPLIED , INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY ,
* FITNESS FOR A PARTICULAR PURPOSE AND NON - INFRINGEMENT . IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM , DAMAGES OR OTHER
* LIABILITY , WHETHER IN AN ACTION OF CONTRACT , TORT OR OTHERWISE , ARISING
* FROM , OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE .
*
* Authors : Dave Airlie < airlied @ redhat . com >
* Jerome Glisse < jglisse @ redhat . com >
*/
# ifndef TTM_PAGE_ALLOC
# define TTM_PAGE_ALLOC
# include "ttm_bo_driver.h"
# include "ttm_memory.h"
/**
* Get count number of pages from pool to pages list .
*
2011-06-08 17:06:15 +00:00
* @ pages : head of empty linked list where pages are filled .
2010-04-01 12:44:57 +00:00
* @ flags : ttm flags for page allocation .
* @ cstate : ttm caching state for the page .
* @ count : number of pages to allocate .
2010-11-29 13:52:18 -05:00
* @ dma_address : The DMA ( bus ) address of pages ( if TTM_PAGE_FLAG_DMA32 set ) .
2010-04-01 12:44:57 +00:00
*/
2011-11-10 18:24:09 -05:00
int ttm_get_pages ( struct page * * pages ,
2010-04-01 12:44:57 +00:00
int flags ,
enum ttm_caching_state cstate ,
2011-11-10 18:24:09 -05:00
unsigned npages ,
2011-02-23 14:24:01 +10:00
dma_addr_t * dma_address ) ;
2010-04-01 12:44:57 +00:00
/**
* Put linked list of pages to pool .
*
* @ pages : list of pages to free .
* @ page_count : number of pages in the list . Zero can be passed for unknown
* count .
* @ flags : ttm flags for page allocation .
* @ cstate : ttm caching state .
2010-11-29 13:52:18 -05:00
* @ dma_address : The DMA ( bus ) address of pages ( if TTM_PAGE_FLAG_DMA32 set ) .
2010-04-01 12:44:57 +00:00
*/
2011-11-10 18:24:09 -05:00
void ttm_put_pages ( struct page * * pages ,
unsigned npages ,
2010-04-01 12:44:57 +00:00
int flags ,
2010-11-29 13:52:18 -05:00
enum ttm_caching_state cstate ,
2011-02-23 14:24:01 +10:00
dma_addr_t * dma_address ) ;
2010-04-01 12:44:57 +00:00
/**
* Initialize pool allocator .
*/
2010-04-01 12:45:03 +00:00
int ttm_page_alloc_init ( struct ttm_mem_global * glob , unsigned max_pages ) ;
2010-04-01 12:44:57 +00:00
/**
* Free pool allocator .
*/
void ttm_page_alloc_fini ( void ) ;
2011-11-02 23:59:28 -04:00
/**
* ttm_pool_populate :
*
* @ ttm : The struct ttm_tt to contain the backing pages .
*
* Add backing pages to all of @ ttm
*/
extern int ttm_pool_populate ( struct ttm_tt * ttm ) ;
/**
* ttm_pool_unpopulate :
*
* @ ttm : The struct ttm_tt which to free backing pages .
*
* Free all pages of @ ttm
*/
extern void ttm_pool_unpopulate ( struct ttm_tt * ttm ) ;
2010-04-01 12:44:58 +00:00
/**
* Output the state of pools to debugfs file
*/
extern int ttm_page_alloc_debugfs ( struct seq_file * m , void * data ) ;
2010-04-01 12:44:57 +00:00
# endif