Changeset ae318d3 in mainline for kernel/arch


Ignore:
Timestamp:
2009-02-16T18:50:48Z (17 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
06da55b
Parents:
17f168e
Message:

overhaul pareas: use one single physical area for the physical address space not belonging to physical memory

Location:
kernel/arch
Files:
22 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/amd64/include/mm/frame.h

    r17f168e rae318d3  
    4545#ifndef __ASM__
    4646extern uintptr_t last_frame;
     47extern uintptr_t end_frame;
    4748extern void frame_arch_init(void);
    4849extern void physmem_print(void);
  • kernel/arch/amd64/src/mm/page.c

    r17f168e rae318d3  
    215215}
    216216
     217void hw_area(uintptr_t *physaddr, pfn_t *frames)
     218{
     219        *physaddr = end_frame;
     220        *frames = ADDR2PFN(0xfffffffffffff - end_frame);
     221}
     222
    217223/** @}
    218224 */
  • kernel/arch/arm32/include/mm/frame.h

    r17f168e rae318d3  
    5252
    5353extern uintptr_t last_frame;
     54extern uintptr_t end_frame;
    5455
    5556extern void frame_arch_init(void);
  • kernel/arch/arm32/src/mm/frame.c

    r17f168e rae318d3  
    4242/** Address of the last frame in the memory. */
    4343uintptr_t last_frame = 0;
     44uintptr_t end_frame = 0;
    4445
    4546/** Creates memory zones. */
     
    5051            BOOT_PAGE_TABLE_START_FRAME + BOOT_PAGE_TABLE_SIZE_IN_FRAMES, 0);
    5152        last_frame = machine_get_memory_size();
    52 
     53        end_frame = last_frame;
     54       
    5355        /* blacklist boot page table */
    5456        frame_mark_unavailable(BOOT_PAGE_TABLE_START_FRAME,
  • kernel/arch/arm32/src/mm/page.c

    r17f168e rae318d3  
    107107}
    108108
     109void hw_area(uintptr_t *physaddr, pfn_t *frames)
     110{
     111        *physaddr = end_frame;
     112        *frames = ADDR2PFN(0xffffffff - end_frame);
     113}
     114
    109115/** @}
    110116 */
  • kernel/arch/ia32/include/mm/frame.h

    r17f168e rae318d3  
    4545
    4646extern uintptr_t last_frame;
     47extern uintptr_t end_frame;
    4748
    4849extern void frame_arch_init(void);
  • kernel/arch/ia32/src/mm/frame.c

    r17f168e rae318d3  
    5151
    5252uintptr_t last_frame = 0;
     53uintptr_t end_frame = 0;
    5354
    5455static void init_e820_memory(pfn_t minconf)
     
    7475                                last_frame =
    7576                                    ALIGN_UP(e820table[i].base_address + e820table[i].size, FRAME_SIZE);
    76                 }                       
     77                }
    7778        }
     79       
     80        end_frame = last_frame;
    7881}
    7982
     
    114117        if (config.cpu_active == 1) {
    115118                minconf = 1;
     119               
    116120#ifdef CONFIG_SMP
    117121                minconf = max(minconf,
     
    120124#endif
    121125                init_e820_memory(minconf);
    122 
     126               
    123127                /* Reserve frame 0 (BIOS data) */
    124128                frame_mark_unavailable(0, 1);
  • kernel/arch/ia32/src/mm/page.c

    r17f168e rae318d3  
    9494}
    9595
     96void hw_area(uintptr_t *physaddr, pfn_t *frames)
     97{
     98        *physaddr = end_frame;
     99        *frames = ADDR2PFN(0xffffffff - end_frame);
     100}
     101
    96102void page_fault(int n __attribute__((unused)), istate_t *istate)
    97103{
     
    103109        if (istate->error_word & PFERR_CODE_RSVD)
    104110                panic("Reserved bit set in page directory.");
    105 
     111       
    106112        if (istate->error_word & PFERR_CODE_RW)
    107113                access = PF_ACCESS_WRITE;
  • kernel/arch/ia64/include/mm/frame.h

    r17f168e rae318d3  
    4545
    4646extern uintptr_t last_frame;
     47extern uintptr_t end_frame;
    4748
    4849extern void frame_arch_init(void);
  • kernel/arch/ia64/src/mm/frame.c

    r17f168e rae318d3  
    5252
    5353uintptr_t last_frame = 0;
     54uintptr_t end_frame = 0;
    5455
    5556void frame_arch_init(void)
  • kernel/arch/ia64/src/mm/page.c

    r17f168e rae318d3  
    275275}
    276276
     277void hw_area(uintptr_t *physaddr, pfn_t *frames)
     278{
     279        *physaddr = end_frame;
     280        *frames = ADDR2PFN(0x7fffffffffffffffUL - end_frame);
     281}
     282
    277283/** @}
    278284 */
  • kernel/arch/mips32/include/mm/frame.h

    r17f168e rae318d3  
    3636#define KERN_mips32_FRAME_H_
    3737
    38 #define FRAME_WIDTH             14      /* 16K */
    39 #define FRAME_SIZE              (1 << FRAME_WIDTH)
     38#define FRAME_WIDTH  14  /* 16K */
     39#define FRAME_SIZE   (1 << FRAME_WIDTH)
    4040
    4141#ifdef KERNEL
    4242#ifndef __ASM__
    4343
     44#include <typedefs.h>
     45
    4446extern void frame_arch_init(void);
    4547extern void physmem_print(void);
     48
     49extern uintptr_t end_frame;
    4650
    4751#endif /* __ASM__ */
  • kernel/arch/mips32/src/drivers/msim.c

    r17f168e rae318d3  
    4242#include <ddi/ddi.h>
    4343
    44 static parea_t msim_parea;
    4544static chardev_t console;
    4645static irq_t msim_irq;
     
    157156        sysinfo_set_item_val("kbd.address.virtual", NULL, MSIM_KBD_ADDRESS);
    158157       
    159         msim_parea.pbase = KA2PA(MSIM_VIDEORAM);
    160         msim_parea.vbase = MSIM_VIDEORAM;
    161         msim_parea.frames = 1;
    162         msim_parea.cacheable = false;
    163         ddi_parea_register(&msim_parea);
    164        
    165158        sysinfo_set_item_val("fb", NULL, true);
    166159        sysinfo_set_item_val("fb.kind", NULL, 3);
  • kernel/arch/mips32/src/mm/frame.c

    r17f168e rae318d3  
    6565static count_t phys_regions_count = 0;
    6666static phys_region_t phys_regions[MAX_REGIONS];
     67
     68uintptr_t end_frame = 0;
    6769
    6870
     
    237239        }
    238240       
    239         frame_add_region(start_frame, frame);
     241        end_frame = frame;
     242       
     243        frame_add_region(start_frame, end_frame);
    240244       
    241245        /* Blacklist interrupt vector frame */
  • kernel/arch/mips32/src/mm/page.c

    r17f168e rae318d3  
    2727 */
    2828
    29 /** @addtogroup mips32mm       
     29/** @addtogroup mips32mm
    3030 * @{
    3131 */
     
    3636#include <genarch/mm/page_pt.h>
    3737#include <mm/page.h>
     38#include <mm/frame.h>
    3839
    3940void page_arch_init(void)
     
    5152}
    5253
     54void hw_area(uintptr_t *physaddr, pfn_t *frames)
     55{
     56        *physaddr = end_frame;
     57        *frames = ADDR2PFN(0xffffffff - end_frame);
     58}
     59
    5360/** @}
    5461 */
  • kernel/arch/ppc32/include/mm/frame.h

    r17f168e rae318d3  
    4242#ifndef __ASM__
    4343
    44 #include <arch/types.h> 
     44#include <arch/types.h>
    4545
    4646extern uintptr_t last_frame;
     47extern uintptr_t end_frame;
    4748
    4849extern void frame_arch_init(void);
  • kernel/arch/ppc32/src/mm/frame.c

    r17f168e rae318d3  
    4141
    4242uintptr_t last_frame = 0;
     43uintptr_t end_frame = 0;
    4344
    4445void physmem_print(void)
     
    7576                        last_frame = ALIGN_UP(bootinfo.memmap.zones[i].start + bootinfo.memmap.zones[i].size, FRAME_SIZE);
    7677        }
    77 
     78       
     79        end_frame = last_frame;
     80       
    7881        /* First is exception vector, second is 'implementation specific',
    7982           third and fourth is reserved, other contain real mode code */
  • kernel/arch/ppc32/src/mm/page.c

    r17f168e rae318d3  
    6464}
    6565
     66void hw_area(uintptr_t *physaddr, pfn_t *frames)
     67{
     68        *physaddr = end_frame;
     69        *frames = ADDR2PFN(0xffffffff - end_frame);
     70}
     71
    6672/** @}
    6773 */
  • kernel/arch/sparc64/include/mm/frame.h

    r17f168e rae318d3  
    7474
    7575extern uintptr_t last_frame;
     76extern uintptr_t end_frame;
    7677extern void frame_arch_init(void);
    7778#define physmem_print()
  • kernel/arch/sparc64/src/drivers/sgcn.c

    r17f168e rae318d3  
    162162
    163163/**
    164  * Registers the physical area of the SRAM so that the userspace SGCN
    165  * driver can map it. Moreover, it sets some sysinfo values (SRAM address
    166  * and SRAM size).
    167  */
    168 static void register_sram_parea(uintptr_t sram_begin_physical)
    169 {
    170         static parea_t sram_parea;
    171         sram_parea.pbase = sram_begin_physical;
    172         sram_parea.vbase = (uintptr_t) sram_begin;
    173         sram_parea.frames = MAPPED_AREA_SIZE / FRAME_SIZE;
    174         sram_parea.cacheable = false;
    175         ddi_parea_register(&sram_parea);
    176        
     164 * Set some sysinfo values (SRAM address and SRAM size).
     165 */
     166static void register_sram(uintptr_t sram_begin_physical)
     167{
    177168        sysinfo_set_item_val("sram.area.size", NULL, MAPPED_AREA_SIZE);
    178169        sysinfo_set_item_val("sram.address.physical", NULL,
     
    212203        sram_begin = hw_map(sram_begin_physical, MAPPED_AREA_SIZE);
    213204       
    214         register_sram_parea(sram_begin_physical);
     205        register_sram(sram_begin_physical);
    215206}
    216207
  • kernel/arch/sparc64/src/mm/frame.c

    r17f168e rae318d3  
    4242
    4343uintptr_t last_frame = NULL;
     44uintptr_t end_frame = NULL;
    4445
    4546/** Create memory zones according to information stored in bootinfo.
     
    8182        }
    8283       
     84        end_frame = last_frame;
    8385}
    8486
  • kernel/arch/sparc64/src/mm/page.c

    r17f168e rae318d3  
    148148                    sizemap[order].pagesize_code, true, false);
    149149       
    150 #ifdef CONFIG_SMP       
     150#ifdef CONFIG_SMP
    151151                /*
    152152                 * Second, save the information about the mapping for APs.
     
    165165}
    166166
     167void hw_area(uintptr_t *physaddr, pfn_t *frames)
     168{
     169        *physaddr = end_frame;
     170        *frames = ADDR2PFN(0x7ffffffffff - end_frame);
     171}
     172
    167173/** @}
    168174 */
    169 
Note: See TracChangeset for help on using the changeset viewer.