diff options
Diffstat (limited to 'c/src/lib/libcpu/i386/page.c')
-rw-r--r-- | c/src/lib/libcpu/i386/page.c | 78 |
1 files changed, 39 insertions, 39 deletions
diff --git a/c/src/lib/libcpu/i386/page.c b/c/src/lib/libcpu/i386/page.c index b27dc2b920..45d9aaadd2 100644 --- a/c/src/lib/libcpu/i386/page.c +++ b/c/src/lib/libcpu/i386/page.c @@ -80,22 +80,22 @@ int init_paging(void) page_table *pageTable; unsigned int physPage; int nbTables=0; - + /* * rtemsFreeMemStart is the last valid 32-bits address * so the size is rtemsFreeMemStart + 4 */ memorySize = rtemsFreeMemStart + 4; - + nbPages = ( (memorySize - 1) / PG_SIZE ) + 1; nbTables = ( (memorySize - 1) / FOUR_MB ) + 2; /* allocate 1 page more to page alignement */ - Tables = (char *)malloc( (nbTables + 1)*sizeof(page_table) ); + Tables = (char *)malloc( (nbTables + 1)*sizeof(page_table) ); if ( Tables == NULL ){ return -1; /*unable to allocate memory */ } - + /* 4K-page alignement */ Tables += (PG_SIZE - (int)Tables) & 0xFFF; @@ -139,7 +139,7 @@ int init_paging(void) directoryEntry ++; pageTable ++; } - + nbInitPages++; } @@ -149,8 +149,8 @@ int init_paging(void) i386_set_cr3( regCr3.i ); - _CPU_enable_cache(); - _CPU_enable_paging(); + _CPU_enable_cache(); + _CPU_enable_paging(); return 0; } @@ -189,13 +189,13 @@ int _CPU_map_phys_address( int size, int flag ) -{ +{ page_table *localPageTable; unsigned int lastAddress, countAddress; char *Tables; linear_address virtualAddress; unsigned char pagingWasEnabled; - + pagingWasEnabled = 0; if (_CPU_is_paging_enabled()){ @@ -215,7 +215,7 @@ int _CPU_map_phys_address( /* Need to allocate a new page table */ if (pageDirectory->pageDirEntry[directoryEntry].bits.page_frame_address == 0){ /* We allocate 2 pages to perform 4k-page alignement */ - Tables = (char *)malloc(2*sizeof(page_table)); + Tables = (char *)malloc(2*sizeof(page_table)); if ( Tables == NULL ){ if (pagingWasEnabled) _CPU_enable_paging(); @@ -225,7 +225,7 @@ int _CPU_map_phys_address( Tables += (PG_SIZE - (int)Tables) & 0xFFF; /* Reset Table */ - memset( Tables, 0, sizeof(page_table) ); + memset( Tables, 0, sizeof(page_table) ); pageDirectory->pageDirEntry[directoryEntry].bits.page_frame_address = (unsigned int)Tables >> 12; pageDirectory->pageDirEntry[directoryEntry].bits.available = 0; @@ -237,7 +237,7 @@ int _CPU_map_phys_address( pageDirectory->pageDirEntry[directoryEntry].bits.writable = 1; pageDirectory->pageDirEntry[directoryEntry].bits.present = 1; } - + localPageTable = (page_table *)(pageDirectory-> pageDirEntry[directoryEntry].bits. @@ -264,7 +264,7 @@ int _CPU_map_phys_address( countAddress += PG_SIZE; tableEntry++; - if (tableEntry >= MAX_ENTRY){ + if (tableEntry >= MAX_ENTRY){ tableEntry = 0; directoryEntry++; } @@ -285,7 +285,7 @@ static void Paging_Table_Compress(void) { unsigned int dirCount, pageCount; page_table *localPageTable; - + if (tableEntry == 0){ dirCount = directoryEntry - 1; pageCount = MAX_ENTRY - 1; @@ -294,7 +294,7 @@ static void Paging_Table_Compress(void) dirCount = directoryEntry; pageCount = tableEntry - 1; } - + while (1){ localPageTable = (page_table *)(pageDirectory-> @@ -303,7 +303,7 @@ static void Paging_Table_Compress(void) if (localPageTable->pageTableEntry[pageCount].bits.present == 1){ pageCount++; - if (pageCount >= MAX_ENTRY){ + if (pageCount >= MAX_ENTRY){ pageCount = 0; dirCount++; } @@ -312,13 +312,13 @@ static void Paging_Table_Compress(void) if (pageCount == 0) { - if (dirCount == 0){ + if (dirCount == 0){ break; } else { pageCount = MAX_ENTRY - 1; dirCount-- ; - } + } } else pageCount-- ; @@ -327,8 +327,8 @@ static void Paging_Table_Compress(void) directoryEntry = dirCount; tableEntry = pageCount; } - - + + /* * Unmap the virtual address from the tables * (we do not deallocate the table already allocated) @@ -338,14 +338,14 @@ int _CPU_unmap_virt_address( void *mappedAddress, int size ) -{ +{ linear_address linearAddr; page_table *localPageTable; unsigned int lastAddr ; unsigned int dirCount ; unsigned char pagingWasEnabled; - + pagingWasEnabled = 0; if (_CPU_is_paging_enabled()){ @@ -371,15 +371,15 @@ int _CPU_unmap_virt_address( localPageTable = (page_table *)(pageDirectory-> pageDirEntry[linearAddr.bits.directory].bits. page_frame_address << 12); - + if (localPageTable->pageTableEntry[linearAddr.bits.page].bits.present == 0){ if (pagingWasEnabled) _CPU_enable_paging(); return -1; } - - localPageTable->pageTableEntry[linearAddr.bits.page].bits.present = 0; - + + localPageTable->pageTableEntry[linearAddr.bits.page].bits.present = 0; + linearAddr.address += PG_SIZE ; } Paging_Table_Compress(); @@ -390,7 +390,7 @@ int _CPU_unmap_virt_address( } /* - * Modify the flags PRESENT, WRITABLE, USER, WRITE_TROUGH, CACHE_DISABLE + * Modify the flags PRESENT, WRITABLE, USER, WRITE_TROUGH, CACHE_DISABLE * of the page's descriptor. */ @@ -400,20 +400,20 @@ int _CPU_change_memory_mapping_attribute( unsigned int size, unsigned int flag ) -{ +{ linear_address linearAddr; page_table *localPageTable; unsigned int lastAddr ; unsigned char pagingWasEnabled; - + pagingWasEnabled = 0; if (_CPU_is_paging_enabled()){ pagingWasEnabled = 1; _CPU_disable_paging(); } - + linearAddr.address = (unsigned int)mappedAddress; lastAddr = (unsigned int)mappedAddress + (size - 1); @@ -430,18 +430,18 @@ int _CPU_change_memory_mapping_attribute( localPageTable = (page_table *)(pageDirectory-> pageDirEntry[linearAddr.bits.directory].bits. page_frame_address << 12); - + if (localPageTable->pageTableEntry[linearAddr.bits.page].bits.present == 0){ if (pagingWasEnabled) _CPU_enable_paging(); return -1; } - + localPageTable->pageTableEntry[linearAddr.bits.page].table_entry &= ~MASK_FLAGS ; localPageTable->pageTableEntry[linearAddr.bits.page].table_entry |= flag ; - + linearAddr.address += PG_SIZE ; - } + } if (newAddress != NULL) *newAddress = mappedAddress ; @@ -460,7 +460,7 @@ int _CPU_change_memory_mapping_attribute( #include <rtems/bspIo.h> int _CPU_display_memory_attribute(void) -{ +{ unsigned int dirCount, pageCount; cr0 regCr0; page_table *localPageTable; @@ -468,9 +468,9 @@ int _CPU_display_memory_attribute(void) unsigned int prevPresent; unsigned int maxPage; unsigned char pagingWasEnabled; - + regCr0.i = i386_get_cr0(); - + printk("\n\n********* MEMORY CACHE CONFIGURATION *****\n"); printk("CR0 -> paging : %s\n",(regCr0.cr0.paging ? "ENABLE ":"DISABLE")); @@ -478,10 +478,10 @@ int _CPU_display_memory_attribute(void) if (regCr0.cr0.paging == 0) return 0; - + prevPresent = 0; prevCache = 1; - + pagingWasEnabled = 0; if (_CPU_is_paging_enabled()){ |