source: soft/giet_vm/xml/mapping_info.h @ 219

Last change on this file since 219 was 215, checked in by karaoui, 12 years ago

New components are now mandotory in the XML description:

The files giet_vsegs.ld and hard_config.h are now autogenerated by the xml2bin tool.

File size: 9.9 KB
RevLine 
[158]1////////////////////////////////////////////////////////////////////////////
2// File     : mapping_info.h
3// Date     : 01/04/2012
4// Author   : alain greiner
5// Copyright (c) UPMC-LIP6
6////////////////////////////////////////////////////////////////////////////
7// The MAPPING_INFO data structure can be used with the GIET.
8// It contains the mapping directive for one or several virtual spaces.
9// Ech virtual space contains a variable number of virtual segments
10// and a variable number of tasks. The number of virtual space can be one.
11//
12// The mapping table data structure is organised as the concatenation of
13// a fixed size header, and 6 variable size arrays:
14//
[189]15// - mapping_cluster_t  cluster[] 
16// - mapping_pseg_t     pseg[]       
17// - mapping_vspace_t   vspace[] 
18// - mapping_vseg_t     vseg[]     
19// - mapping_vseg_t     vobj[]   
20// - mapping_task_t     task[] 
21// - mapping_irq_t      irq[irqs]   
22// - mapping_coproc_t   coproc[]
23// - mapping_cp_port_t  cp_port[]
24// - mapping_periph_t   periph[]
[158]25//
26// It is intended to be stored in the boot ROM at address MAPPING_BOOT_BASE.
27////////////////////////////////////////////////////////////////////////////
28
29#ifndef _MAPPING_INFO_H_
30#define _MAPPING_INFO_H_
31
32#define MAPPING_HEADER_SIZE     sizeof(mapping_header_t)
33#define MAPPING_CLUSTER_SIZE    sizeof(mapping_cluster_t)
34#define MAPPING_VSPACE_SIZE     sizeof(mapping_vspace_t)
35#define MAPPING_VSEG_SIZE           sizeof(mapping_vseg_t)
[160]36#define MAPPING_VOBJ_SIZE           sizeof(mapping_vobj_t)
[158]37#define MAPPING_PSEG_SIZE           sizeof(mapping_pseg_t)
38#define MAPPING_TASK_SIZE           sizeof(mapping_task_t)
[181]39#define MAPPING_PROC_SIZE           sizeof(mapping_proc_t)
40#define MAPPING_IRQ_SIZE            sizeof(mapping_irq_t)
41#define MAPPING_COPROC_SIZE         sizeof(mapping_coproc_t)
[189]42#define MAPPING_CP_PORT_SIZE    sizeof(mapping_cp_port_t)
[158]43
44#define C_MODE_MASK     0b1000      // cacheable
45#define X_MODE_MASK     0b0100      // executable
46#define W_MODE_MASK     0b0010      // writable
47#define U_MODE_MASK     0b0001      // user access
48
49#define IN_MAPPING_SIGNATURE    0xDEADBEEF
50#define OUT_MAPPING_SIGNATURE   0xBABEF00D
51
[200]52enum vobjType
[160]53{
[173]54    VOBJ_TYPE_ELF     = 0,     // loadable code/data object of elf files
55    VOBJ_TYPE_BLOB    = 1,     // loadable blob object
56    VOBJ_TYPE_PTAB    = 2,     // page table
57    VOBJ_TYPE_PERI    = 3,     // hardware component
58    VOBJ_TYPE_MWMR    = 4,     // MWMR channel
59    VOBJ_TYPE_LOCK    = 5,     // Lock
60    VOBJ_TYPE_BUFFER  = 6,     // Any "no intialiasation needed" objects (stacks...)
61    VOBJ_TYPE_BARRIER = 7,     // Barrier
[160]62};
63
[200]64enum psegType
[181]65{
66    PSEG_TYPE_RAM     = 0,
67    PSEG_TYPE_ROM     = 1,
68    PSEG_TYPE_PERI    = 2,
69};
[160]70
[200]71enum periphType
[181]72{
[215]73    PERIPH_TYPE_ICU   = 0,
74    PERIPH_TYPE_TIM   = 1,
75    PERIPH_TYPE_XICU  = 2,
[189]76    PERIPH_TYPE_DMA   = 3,
[215]77    PERIPH_TYPE_IOC   = 4,
78    PERIPH_TYPE_TTY   = 5,
79    PERIPH_TYPE_FBF   = 6,
80    PERIPH_TYPE_NIC   = 7,
81    PERIPH_TYPE_IOB   = 8,
[181]82};
83
[200]84enum mwmrPortDirection
[181]85{
86    PORT_TO_COPROC    = 0,          // status register
87    PORT_FROM_COPROC  = 1,          // config register
88};
89
[158]90///////////////////////////////
[189]91
[158]92typedef struct mapping_header_s
93{
94    unsigned int    signature;      // must contain MAPPING_SIGNATURE
95        unsigned int    clusters;           // number of clusters
[215]96        unsigned int    cluster_x;          // number of cluster on the abcsisse axe
97        unsigned int    cluster_y;          // number of cluster on the ordinate axe
[158]98        unsigned int    globals;                // number of vsegs mapped in all vspaces
99        unsigned int    vspaces;                // number of virtual spaces
[189]100
101    unsigned int    tty_clusterid;  // index of cluster containing TTY controler
102    unsigned int    ioc_clusterid;  // index of cluster containing IOC controler
103    unsigned int    nic_clusterid;  // index of cluster containing NIC controler
104    unsigned int    fbf_clusterid;  // index of cluster containing FBF controler
105
[181]106    unsigned int    psegs;          // total number of physical segments (for all clusters)
[160]107        unsigned int    vsegs;                  // total number of virtual segments (for all vspaces)
[165]108        unsigned int    vobjs;                  // total number of virtual objects (for all vspaces)
[158]109        unsigned int    tasks;                  // total number of tasks (for all vspaces)
[189]110        unsigned int    procs;                  // total number of procs (for all clusters)
111        unsigned int    irqs;           // total number of irqs (for all processors)
112        unsigned int    coprocs;                // total number of coprocs (for all clusters)
113        unsigned int    cp_ports;               // total number of cp_ports (for all coprocs)
114    unsigned int    periphs;        // total number of peripherals (for all clusters)
115
[158]116    char            name[32];       // mapping name
117} mapping_header_t;
118
119////////////////////////////////
120typedef struct mapping_cluster_s
121{
[189]122    unsigned int    psegs;          // number of psegs in cluster
123    unsigned int    pseg_offset;    // index of first pseg in pseg set
124
[158]125    unsigned int    procs;          // number of processors in cluster
[181]126    unsigned int    proc_offset;    // index of first proc in proc set
[189]127
[181]128    unsigned int    coprocs;        // number of coprocessors in cluster
129    unsigned int    coproc_offset;  // index of first coproc in coproc set
[189]130
131    unsigned int    periphs;        // number of peripherals in cluster
132    unsigned int    periph_offset;  // index of first coproc in coproc set
[158]133} mapping_cluster_t;
134
135/////////////////////////////
136typedef struct mapping_pseg_s
137{
138    char            name[32];       // pseg name (unique in a cluster)
139        unsigned int    base;           // base address in physical space
140        unsigned int    length;         // size (bytes)
[181]141    unsigned int    type;           // RAM / ROM / PERI
142    unsigned int    cluster;        // index of cluster containing pseg
[167]143    unsigned int    next_base;      // first free page base address
[158]144} mapping_pseg_t;
145
146///////////////////////////////
147typedef struct mapping_vspace_s
148{
149    char            name[32];       // virtual space name
[165]150    unsigned int    start_offset;   // offset of the vobj containing the start vector
151        unsigned int    vsegs;              // number of vsegs in vspace
152        unsigned int    vobjs;              // number of vobjs in vspace
153        unsigned int    tasks;              // number of tasks in vspace
[158]154    unsigned int    vseg_offset;    // index of first vseg in vspace
[160]155    unsigned int    vobj_offset;    // index of first vobjs in vspace
[158]156    unsigned int    task_offset;    // index of first task in vspace
157} mapping_vspace_t;
158
159/////////////////////////////
160typedef struct mapping_vseg_s
161{
162        char            name[32];       // vseg name (unique in vspace)
163        unsigned int    vbase;          // base address in virtual space (hexa)
164        unsigned int    pbase;          // base address in physical space (hexa)
165        unsigned int    length;         // size (bytes)
[181]166        unsigned int    psegid;         // physical segment global index
[165]167        unsigned int    mode;           // C-X-W-U flags
168    unsigned int    ident;          // identity mapping if non zero
169        unsigned int    vobjs;              // number of vobjs in vseg
170    unsigned int    vobj_offset;    // index of first vobjs in vseg
[158]171} mapping_vseg_t;
172
173/////////////////////////////
174typedef struct mapping_task_s
175{
176        char            name[32];       // task name (unique in vspace)
177        unsigned int    clusterid;          // physical cluster index
178        unsigned int    proclocid;      // processor local index (inside cluster)
[160]179    unsigned int    vobjlocid;      // stack vobj index in vspace
[165]180    unsigned int    startid;        // index in start_vector
[189]181    unsigned int    use_tty;        // TTY terminal required (global)
182    unsigned int    use_nic;        // NIC channel required (global)
183    unsigned int    use_timer;      // user timer required (local)
184    unsigned int    use_fbdma;      // DMA channel to frame buffer required (local)
[158]185} mapping_task_t;
186
[160]187/////////////////////////////
188typedef struct mapping_vobj_s
189{
190    char            name[32];       // vobj name (unique in a vspace)
[165]191    char            binpath[64];    // path for the binary code ("*.elf")
[160]192        unsigned int    type;           // type of vobj
193        unsigned int    length;         // size (bytes)
194        unsigned int    align;          // required alignement (logarithm of 2)
[165]195        unsigned int    vaddr;          // virtual base addresse of the vobj
196        unsigned int    paddr;          // physical base addresse of the vobj
[181]197        unsigned int    init;           // init value (used by barrier or mwmr channel)
[160]198} mapping_vobj_t;
199
[181]200/////////////////////////////
201typedef struct mapping_proc_s
202{
203    unsigned int    irqs;           // number of IRQs allocated to processor
204    unsigned int    irq_offset;     // index of first IRQ allocated to processor
205} mapping_proc_t;
206
207/////////////////////////////
208typedef struct mapping_irq_s
209{
[189]210    unsigned int    type;           // 0 => HW_IRQ  / 1 => SW_IRQ
[181]211    unsigned int    icuid;          // IRQ Index for the ICU component
212    unsigned int    isr;            // Interrupt Service Routine Index
213    unsigned int    channel;        // Channel Index (for multi-cannels peripherals)
214} mapping_irq_t;
215
216///////////////////////////////
217typedef struct mapping_coproc_s
218{
219    char            name[32];       // coprocessor name
[200]220    unsigned int    psegid;         // global pseg index
[181]221    unsigned int    ports;          // number of MWMR ports used by coprocessor
222    unsigned int    port_offset;    // index of first MWMR port used by coprocessor
223} mapping_coproc_t;
224
[189]225////////////////////////////////
226typedef struct mapping_cp_port_s
[181]227{
228    unsigned int    direction;      // TO_COPROC == 0 / FROM_COPROC == 1
[189]229    unsigned int    vspaceid;       // index of the vspace containing the MWMR channel
230    unsigned int    vobjlocid;      // local index of the vobj containing the MWMR channel
231} mapping_cp_port_t;
[181]232
[189]233///////////////////////////////
234typedef struct mapping_periph_s
[181]235{
[189]236    unsigned int    type;           // IOC / TTY / TIM / DMA / FBF / NIC / IOB
237    unsigned int    psegid;         // pseg index in cluster
238    unsigned int    channels;       // number of channels
239} mapping_periph_t;
[181]240
[189]241
[158]242#endif
243
244// Local Variables:
245// tab-width: 4
246// c-basic-offset: 4
247// c-file-offsets:((innamespace . 0)(inline-open . 0))
248// indent-tabs-mode: nil
249// End:
250
251// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
252
Note: See TracBrowser for help on using the repository browser.