source: soft/giet_vm/sys/vm_handler.h @ 249

Last change on this file since 249 was 228, checked in by meunier, 11 years ago

Added support for memspaces and const.
Added an interrupt masking to the "giet_context_switch" syscall
Corrected two bugs in boot/boot_init.c (one minor and one regarding barriers initialization)
Reformatted the code in all files.

File size: 3.2 KB
Line 
1///////////////////////////////////////////////////////////////////////////////////
2// File     : vm_handler.h
3// Date     : 01/07/2012
4// Author   : alain greiner
5// Copyright (c) UPMC-LIP6
6///////////////////////////////////////////////////////////////////////////////////
7
8#ifndef _VM_HANDLER_H_
9#define _VM_HANDLER_H_
10
11#include <giet_config.h>
12#include <mapping_info.h>
13
14/////////////////////////////////////////////////////////////////////////////////////
15// Page Table sizes definition
16/////////////////////////////////////////////////////////////////////////////////////
17
18#define PT1_SIZE    8192
19#define PT2_SIZE    4096
20
21/////////////////////////////////////////////////////////////////////////////////////
22// PTE flags masks definition
23/////////////////////////////////////////////////////////////////////////////////////
24
25#define PTE_V  0x80000000
26#define PTE_T  0x40000000
27#define PTE_L  0x20000000
28#define PTE_R  0x10000000
29#define PTE_C  0x08000000
30#define PTE_W  0x04000000
31#define PTE_X  0x02000000
32#define PTE_U  0x01000000
33#define PTE_G  0x00800000
34#define PTE_D  0x00400000
35
36/////////////////////////////////////////////////////////////////////////////////////
37// MMU error codes definition
38/////////////////////////////////////////////////////////////////////////////////////
39
40#define MMU_ERR_PT1_UNMAPPED         0x001 // Page fault on Table1 (invalid PTE)
41#define MMU_ERR_PT2_UNMAPPED         0x002 // Page fault on Table 2 (invalid PTE)
42#define MMU_ERR_PRIVILEGE_VIOLATION  0x004 // Protected access in user mode
43#define MMU_ERR_WRITE_VIOLATION      0x008 // Write access to a non write page
44#define MMU_ERR_EXEC_VIOLATION       0x010 // Exec access to a non exec page
45#define MMU_ERR_UNDEFINED_XTN        0x020 // Undefined external access address
46#define MMU_ERR_PT1_ILLEGAL_ACCESS   0x040 // Bus Error in Table1 access
47#define MMU_ERR_PT2_ILLEGAL_ACCESS   0x080 // Bus Error in Table2 access
48#define MMU_ERR_CACHE_ILLEGAL_ACCESS 0x100 // Bus Error during the cache access
49
50/////////////////////////////////////////////////////////////////////////////////////
51// Page table structure definition
52/////////////////////////////////////////////////////////////////////////////////////
53typedef struct PageTable {
54    unsigned int pt1[PT1_SIZE / 4];    // PT1 (index is ix1)
55    unsigned int pt2[1][PT2_SIZE / 4]; // PT2s (index is 2*ix2)
56} page_table_t;
57
58
59////////////////////////////////////////////////////////////////////////////////////
60// Global variable
61////////////////////////////////////////////////////////////////////////////////////
62
63extern page_table_t _iommu_ptab;
64
65////////////////////////////////////////////////////////////////////////////////////
66// functions prototypes
67////////////////////////////////////////////////////////////////////////////////////
68
69void _iommu_add_pte2(unsigned int ix1, unsigned int ix2, unsigned int ppn, unsigned int flags);
70void _iommu_inval_pte2(unsigned int ix1, unsigned int ix2);
71unsigned int _v2p_translate(page_table_t * pt, unsigned int vpn, unsigned int * ppn, unsigned int * flags);
72
73#endif
74
75// Local Variables:
76// tab-width: 4
77// c-basic-offset: 4
78// c-file-offsets:((innamespace . 0)(inline-open . 0))
79// indent-tabs-mode: nil
80// End:
81// vim: filetype=c:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
82
Note: See TracBrowser for help on using the repository browser.