| /* |
| * cmmdefs.h |
| * |
| * DSP-BIOS Bridge driver support functions for TI OMAP processors. |
| * |
| * Global MEM constants and types. |
| * |
| * Copyright (C) 2008 Texas Instruments, Inc. |
| * |
| * This package is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License version 2 as |
| * published by the Free Software Foundation. |
| * |
| * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR |
| * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED |
| * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
| */ |
| |
| #ifndef CMMDEFS_ |
| #define CMMDEFS_ |
| |
| |
| /* Cmm attributes used in cmm_create() */ |
| struct cmm_mgrattrs { |
| /* Minimum SM allocation; default 32 bytes. */ |
| u32 min_block_size; |
| }; |
| |
| /* Attributes for CMM_AllocBuf() & CMM_AllocDesc() */ |
| struct cmm_attrs { |
| u32 seg_id; /* 1,2... are SM segments. 0 is not. */ |
| u32 alignment; /* 0,1,2,4....min_block_size */ |
| }; |
| |
| /* |
| * DSPPa to GPPPa Conversion Factor. |
| * |
| * For typical platforms: |
| * converted Address = PaDSP + ( c_factor * addressToConvert). |
| */ |
| #define CMM_SUBFROMDSPPA -1 |
| #define CMM_ADDTODSPPA 1 |
| |
| #define CMM_ALLSEGMENTS 0xFFFFFF /* All SegIds */ |
| #define CMM_MAXGPPSEGS 1 /* Maximum # of SM segs */ |
| |
| /* |
| * SMSEGs are SM segments the DSP allocates from. |
| * |
| * This info is used by the GPP to xlate DSP allocated PAs. |
| */ |
| |
| struct cmm_seginfo { |
| u32 seg_base_pa; /* Start Phys address of SM segment */ |
| /* Total size in bytes of segment: DSP+GPP */ |
| u32 total_seg_size; |
| u32 gpp_base_pa; /* Start Phys addr of Gpp SM seg */ |
| u32 gpp_size; /* Size of Gpp SM seg in bytes */ |
| u32 dsp_base_va; /* DSP virt base byte address */ |
| u32 dsp_size; /* DSP seg size in bytes */ |
| /* # of current GPP allocations from this segment */ |
| u32 in_use_cnt; |
| u32 seg_base_va; /* Start Virt address of SM seg */ |
| |
| }; |
| |
| /* CMM useful information */ |
| struct cmm_info { |
| /* # of SM segments registered with this Cmm. */ |
| u32 num_gppsm_segs; |
| /* Total # of allocations outstanding for CMM */ |
| u32 total_in_use_cnt; |
| /* Min SM block size allocation from cmm_create() */ |
| u32 min_block_size; |
| /* Info per registered SM segment. */ |
| struct cmm_seginfo seg_info[CMM_MAXGPPSEGS]; |
| }; |
| |
| /* XlatorCreate attributes */ |
| struct cmm_xlatorattrs { |
| u32 seg_id; /* segment Id used for SM allocations */ |
| u32 dsp_bufs; /* # of DSP-side bufs */ |
| u32 dsp_buf_size; /* size of DSP-side bufs in GPP bytes */ |
| /* Vm base address alloc'd in client process context */ |
| void *vm_base; |
| /* vm_size must be >= (dwMaxNumBufs * dwMaxSize) */ |
| u32 vm_size; |
| }; |
| |
| /* |
| * Cmm translation types. Use to map SM addresses to process context. |
| */ |
| enum cmm_xlatetype { |
| CMM_VA2PA = 0, /* Virtual to GPP physical address xlation */ |
| CMM_PA2VA = 1, /* GPP Physical to virtual */ |
| CMM_VA2DSPPA = 2, /* Va to DSP Pa */ |
| CMM_PA2DSPPA = 3, /* GPP Pa to DSP Pa */ |
| CMM_DSPPA2PA = 4, /* DSP Pa to GPP Pa */ |
| }; |
| |
| struct cmm_object; |
| struct cmm_xlatorobject; |
| |
| #endif /* CMMDEFS_ */ |