cmem.h

Go to the documentation of this file.
00001 /*
00002  * Copyright (c) 2009, Texas Instruments Incorporated
00003  * All rights reserved.
00004  *
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following conditions
00007  * are met:
00008  *
00009  * *  Redistributions of source code must retain the above copyright
00010  *    notice, this list of conditions and the following disclaimer.
00011  *
00012  * *  Redistributions in binary form must reproduce the above copyright
00013  *    notice, this list of conditions and the following disclaimer in the
00014  *    documentation and/or other materials provided with the distribution.
00015  *
00016  * *  Neither the name of Texas Instruments Incorporated nor the names of
00017  *    its contributors may be used to endorse or promote products derived
00018  *    from this software without specific prior written permission.
00019  *
00020  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00021  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
00022  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00023  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
00024  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00025  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00026  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
00027  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
00028  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
00029  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
00030  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00031  *
00032  */
00033 
00119 #ifndef ti_sdo_linuxutils_cmem_CMEM_H
00120 #define ti_sdo_linuxutils_cmem_CMEM_H
00121 
00122 #if defined (__cplusplus)
00123 extern "C" {
00124 #endif
00125 
00128 
00129 #define CMEM_VERSION    0x02200000U
00130 
00131 /* ioctl cmd "flavors" */
00132 #define CMEM_WB                         0x0100
00133 #define CMEM_INV                        0x0200
00134 #define CMEM_HEAP                       0x0400  
00135 #define CMEM_POOL                       0x0000  
00136 #define CMEM_CACHED                     0x0800  
00137 #define CMEM_NONCACHED                  0x0000  
00138 #define CMEM_PHYS                       0x1000
00139 
00140 /* supported "base" ioctl cmds for the driver. */
00141 #define CMEM_IOCALLOC                   1
00142 #define CMEM_IOCALLOCHEAP               2
00143 #define CMEM_IOCFREE                    3
00144 #define CMEM_IOCGETPHYS                 4
00145 #define CMEM_IOCGETSIZE                 5
00146 #define CMEM_IOCGETPOOL                 6
00147 #define CMEM_IOCCACHE                   7
00148 #define CMEM_IOCGETVERSION              8
00149 #define CMEM_IOCGETBLOCK                9
00150 /*
00151  * New ioctl cmds should use integers greater than the largest current cmd
00152  * in order to not break backward compatibility.
00153  */
00154 
00155 /* supported "flavors" to "base" ioctl cmds for the driver. */
00156 #define CMEM_IOCCACHEWBINV              CMEM_IOCCACHE | CMEM_WB | CMEM_INV
00157 #define CMEM_IOCCACHEWB                 CMEM_IOCCACHE | CMEM_WB
00158 #define CMEM_IOCCACHEINV                CMEM_IOCCACHE | CMEM_INV
00159 #define CMEM_IOCALLOCCACHED             CMEM_IOCALLOC | CMEM_CACHED
00160 #define CMEM_IOCALLOCHEAPCACHED         CMEM_IOCALLOCHEAP | CMEM_CACHED
00161 #define CMEM_IOCFREEHEAP                CMEM_IOCFREE | CMEM_HEAP
00162 #define CMEM_IOCFREEPHYS                CMEM_IOCFREE | CMEM_PHYS
00163 #define CMEM_IOCFREEHEAPPHYS            CMEM_IOCFREE | CMEM_HEAP | CMEM_PHYS
00164 
00165 #define CMEM_IOCCMDMASK                 0x000000ff
00166 
00171 typedef struct CMEM_AllocParams {
00172     int type;           
00173     int flags;          
00174     size_t alignment;   
00177 } CMEM_AllocParams;
00178 
00179 extern CMEM_AllocParams CMEM_DEFAULTPARAMS;
00180 
00181 typedef struct CMEM_BlockAttrs {
00182     unsigned long phys_base;
00183     size_t size;
00184 } CMEM_BlockAttrs;
00185 
00190 union CMEM_AllocUnion {
00191     struct {                    
00192         size_t size;
00193         size_t align;
00194         int blockid;
00195     } alloc_heap_inparams;      
00196     struct {                    
00197         int poolid;
00198         int blockid;
00199     } alloc_pool_inparams;      
00200     struct {                    
00201         int poolid;
00202         int blockid;
00203     } get_size_inparams;        
00204     struct {                    
00205         size_t size;
00206         int blockid;
00207     } get_pool_inparams;        
00208     struct {                    
00209         unsigned long physp;
00210         size_t size;
00211     } alloc_pool_outparams;     
00212     struct {                    
00213         unsigned long physp;
00214         size_t size;
00215     } get_block_outparams;      
00216     struct {                    
00217         int poolid;
00218         size_t size;
00219     } free_outparams;           
00220     unsigned long physp;
00221     unsigned long virtp;
00222     int size;
00223     int poolid;
00224     int blockid;
00225 };
00226 
00236 int CMEM_init(void);
00237 
00253 int CMEM_getPool(size_t size);
00254 
00271 int CMEM_getPool2(int blockid, size_t size);
00272 
00292 void *CMEM_allocPool(int poolid, CMEM_AllocParams *params);
00293 
00314 void *CMEM_allocPool2(int blockid, int poolid, CMEM_AllocParams *params);
00315 
00338 void *CMEM_alloc(size_t size, CMEM_AllocParams *params);
00339 
00364 void *CMEM_alloc2(int blockid, size_t size, CMEM_AllocParams *params);
00365 
00386 int CMEM_free(void *ptr, CMEM_AllocParams *params);
00387 
00397 unsigned long CMEM_getPhys(void *ptr);
00398 
00412 int CMEM_cacheWb(void *ptr, size_t size);
00413 
00427 int CMEM_cacheInv(void *ptr, size_t size);
00428 
00443 int CMEM_cacheWbInv(void *ptr, size_t size);
00444 
00452 int CMEM_getVersion(void);
00453 
00467 int CMEM_getBlock(unsigned long *pphys_base, size_t *psize);
00468 
00483 int CMEM_getBlockAttrs(int blockid, CMEM_BlockAttrs *pattrs);
00484 
00497 int CMEM_exit(void);
00498 
00501 #if defined (__cplusplus)
00502 }
00503 #endif
00504 
00505 #endif
00506 /*
00507  *  @(#) ti.sdo.linuxutils.cmem; 2, 2, 0,93; 1-27-2009 13:05:09; /db/atree/library/trees/linuxutils/linuxutils-c07x/src/
00508  */
00509 

Copyright 2009, Texas Instruments Incorporated