Mercurial > ecos-v3_0-branch
diff packages/hal/arm/sa11x0/sa1100mm/current/src/sa1100mm_misc.c @ 145:2e9a636d9de9 ecos-sw-2000-12-21
Merge from eCos master repository on 2000-12-21-14:18:40-GMT
| author | jlarmour |
|---|---|
| date | Fri, 22 Dec 2000 02:37:28 +0000 |
| parents | 450e4e1f1e80 |
| children | 8f2f7615e727 |
line wrap: on
line diff
--- a/packages/hal/arm/sa11x0/sa1100mm/current/src/sa1100mm_misc.c +++ b/packages/hal/arm/sa11x0/sa1100mm/current/src/sa1100mm_misc.c @@ -60,106 +60,8 @@ #include <cyg/infra/diag.h> // diag_printf -// ------------------------------------------------------------------------- -// MMU initialization: -// -// These structures are laid down in memory to define the translation -// table. -// - -/* - * SA-1100 Translation Table Base Bit Masks */ -#define ARM_TRANSLATION_TABLE_MASK 0xFFFFC000 - -/* - * SA-1100 Domain Access Control Bit Masks - */ -#define ARM_ACCESS_TYPE_NO_ACCESS(domain_num) (0x0 << (domain_num)*2) -#define ARM_ACCESS_TYPE_CLIENT(domain_num) (0x1 << (domain_num)*2) -#define ARM_ACCESS_TYPE_MANAGER(domain_num) (0x3 << (domain_num)*2) - -struct ARM_MMU_FIRST_LEVEL_FAULT { - int id : 2; - int sbz : 30; -}; -#define ARM_MMU_FIRST_LEVEL_FAULT_ID 0x0 - -struct ARM_MMU_FIRST_LEVEL_PAGE_TABLE { - int id : 2; - int imp : 2; - int domain : 4; - int sbz : 1; - int base_address : 23; -}; -#define ARM_MMU_FIRST_LEVEL_PAGE_TABLE_ID 0x1 - -struct ARM_MMU_FIRST_LEVEL_SECTION { - int id : 2; - int b : 1; - int c : 1; - int imp : 1; - int domain : 4; - int sbz0 : 1; - int ap : 2; - int sbz1 : 8; - int base_address : 12; -}; -#define ARM_MMU_FIRST_LEVEL_SECTION_ID 0x2 - -struct ARM_MMU_FIRST_LEVEL_RESERVED { - int id : 2; - int sbz : 30; -}; -#define ARM_MMU_FIRST_LEVEL_RESERVED_ID 0x3 - -#define ARM_MMU_FIRST_LEVEL_DESCRIPTOR_ADDRESS(ttb_base, table_index) \ - (unsigned long *)((unsigned long)(ttb_base) + ((table_index) << 2)) - -#define ARM_FIRST_LEVEL_PAGE_TABLE_SIZE 0x4000 - -#define ARM_MMU_SECTION(ttb_base, actual_base, virtual_base, \ - cacheable, bufferable, perm) \ - CYG_MACRO_START \ - register union ARM_MMU_FIRST_LEVEL_DESCRIPTOR desc; \ - \ - desc.word = 0; \ - desc.section.id = ARM_MMU_FIRST_LEVEL_SECTION_ID; \ - desc.section.domain = 0; \ - desc.section.c = (cacheable); \ - desc.section.b = (bufferable); \ - desc.section.ap = (perm); \ - desc.section.base_address = (actual_base); \ - *ARM_MMU_FIRST_LEVEL_DESCRIPTOR_ADDRESS(ttb_base, (virtual_base)) \ - = desc.word; \ - CYG_MACRO_END - -#define X_ARM_MMU_SECTION(abase,vbase,size,cache,buff,access) \ - { int i; int j = abase; int k = vbase; \ - for (i = size; i > 0 ; i--,j++,k++) \ - { \ - ARM_MMU_SECTION(ttb_base, j, k, cache, buff, access); \ - } \ - } - -union ARM_MMU_FIRST_LEVEL_DESCRIPTOR { - unsigned long word; - struct ARM_MMU_FIRST_LEVEL_FAULT fault; - struct ARM_MMU_FIRST_LEVEL_PAGE_TABLE page_table; - struct ARM_MMU_FIRST_LEVEL_SECTION section; - struct ARM_MMU_FIRST_LEVEL_RESERVED reserved; -}; - -#define ARM_UNCACHEABLE 0 -#define ARM_CACHEABLE 1 -#define ARM_UNBUFFERABLE 0 -#define ARM_BUFFERABLE 1 - -#define ARM_ACCESS_PERM_NONE_NONE 0 -#define ARM_ACCESS_PERM_RO_NONE 0 -#define ARM_ACCESS_PERM_RO_RO 0 -#define ARM_ACCESS_PERM_RW_NONE 1 -#define ARM_ACCESS_PERM_RW_RO 2 -#define ARM_ACCESS_PERM_RW_RW 3 +// All the MM table layout is here: +#include <cyg/hal/hal_mm.h> void hal_mmu_init(void) @@ -175,22 +77,7 @@ hal_mmu_init(void) /* * Set the Domain Access Control Register */ - i = ARM_ACCESS_TYPE_MANAGER(0) | - ARM_ACCESS_TYPE_NO_ACCESS(1) | - ARM_ACCESS_TYPE_NO_ACCESS(2) | - ARM_ACCESS_TYPE_NO_ACCESS(3) | - ARM_ACCESS_TYPE_NO_ACCESS(4) | - ARM_ACCESS_TYPE_NO_ACCESS(5) | - ARM_ACCESS_TYPE_NO_ACCESS(6) | - ARM_ACCESS_TYPE_NO_ACCESS(7) | - ARM_ACCESS_TYPE_NO_ACCESS(8) | - ARM_ACCESS_TYPE_NO_ACCESS(9) | - ARM_ACCESS_TYPE_NO_ACCESS(10) | - ARM_ACCESS_TYPE_NO_ACCESS(11) | - ARM_ACCESS_TYPE_NO_ACCESS(12) | - ARM_ACCESS_TYPE_NO_ACCESS(13) | - ARM_ACCESS_TYPE_NO_ACCESS(14) | - ARM_ACCESS_TYPE_NO_ACCESS(15); + i = ARM_ACCESS_DACR_DEFAULT; asm volatile ("mcr p15,0,%0,c3,c0,0" : : "r"(i) /*:*/); /* @@ -240,3 +127,6 @@ void sa1100mm_program_new_stack(void *fu stack_ptr = old_stack; return; } + +// ------------------------------------------------------------------------ +// EOF sa1100mm_misc.c
