Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6
[pandora-kernel.git] / drivers / staging / tidspbridge / include / dspbridge / cmmdefs.h
1 /*
2  * cmmdefs.h
3  *
4  * DSP-BIOS Bridge driver support functions for TI OMAP processors.
5  *
6  * Global MEM constants and types.
7  *
8  * Copyright (C) 2008 Texas Instruments, Inc.
9  *
10  * This package is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License version 2 as
12  * published by the Free Software Foundation.
13  *
14  * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
15  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
16  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
17  */
18
19 #ifndef CMMDEFS_
20 #define CMMDEFS_
21
22 #include <dspbridge/list.h>
23
24 /* Cmm attributes used in cmm_create() */
25 struct cmm_mgrattrs {
26         /* Minimum SM allocation; default 32 bytes. */
27         u32 ul_min_block_size;
28 };
29
30 /* Attributes for CMM_AllocBuf() & CMM_AllocDesc() */
31 struct cmm_attrs {
32         u32 ul_seg_id;          /*  1,2... are SM segments. 0 is not. */
33         u32 ul_alignment;       /*  0,1,2,4....ul_min_block_size */
34 };
35
36 /*
37  *  DSPPa to GPPPa Conversion Factor.
38  *
39  *  For typical platforms:
40  *      converted Address = PaDSP + ( c_factor * addressToConvert).
41  */
42 #define CMM_SUBFROMDSPPA        -1
43 #define CMM_ADDTODSPPA          1
44
45 #define CMM_ALLSEGMENTS         0xFFFFFF        /* All SegIds */
46 #define CMM_MAXGPPSEGS          1       /* Maximum # of SM segs */
47
48 /*
49  *  SMSEGs are SM segments the DSP allocates from.
50  *
51  *  This info is used by the GPP to xlate DSP allocated PAs.
52  */
53
54 struct cmm_seginfo {
55         u32 dw_seg_base_pa;     /* Start Phys address of SM segment */
56         /* Total size in bytes of segment: DSP+GPP */
57         u32 ul_total_seg_size;
58         u32 dw_gpp_base_pa;     /* Start Phys addr of Gpp SM seg */
59         u32 ul_gpp_size;        /* Size of Gpp SM seg in bytes */
60         u32 dw_dsp_base_va;     /* DSP virt base byte address */
61         u32 ul_dsp_size;        /* DSP seg size in bytes */
62         /* # of current GPP allocations from this segment */
63         u32 ul_in_use_cnt;
64         u32 dw_seg_base_va;     /* Start Virt address of SM seg */
65
66 };
67
68 /* CMM useful information */
69 struct cmm_info {
70         /* # of SM segments registered with this Cmm. */
71         u32 ul_num_gppsm_segs;
72         /* Total # of allocations outstanding for CMM */
73         u32 ul_total_in_use_cnt;
74         /* Min SM block size allocation from cmm_create() */
75         u32 ul_min_block_size;
76         /* Info per registered SM segment. */
77         struct cmm_seginfo seg_info[CMM_MAXGPPSEGS];
78 };
79
80 /* XlatorCreate attributes */
81 struct cmm_xlatorattrs {
82         u32 ul_seg_id;          /* segment Id used for SM allocations */
83         u32 dw_dsp_bufs;        /* # of DSP-side bufs */
84         u32 dw_dsp_buf_size;    /* size of DSP-side bufs in GPP bytes */
85         /* Vm base address alloc'd in client process context */
86         void *vm_base;
87         /* dw_vm_size must be >= (dwMaxNumBufs * dwMaxSize) */
88         u32 dw_vm_size;
89 };
90
91 /*
92  * Cmm translation types. Use to map SM addresses to process context.
93  */
94 enum cmm_xlatetype {
95         CMM_VA2PA = 0,          /* Virtual to GPP physical address xlation */
96         CMM_PA2VA = 1,          /* GPP Physical to virtual */
97         CMM_VA2DSPPA = 2,       /* Va to DSP Pa */
98         CMM_PA2DSPPA = 3,       /* GPP Pa to DSP Pa */
99         CMM_DSPPA2PA = 4,       /* DSP Pa to GPP Pa */
100 };
101
102 struct cmm_object;
103 struct cmm_xlatorobject;
104
105 #endif /* CMMDEFS_ */