Changeset 82da5f5 in mainline for arch/sparc64/src/mm/page.c


Ignore:
Timestamp:
2006-05-24T13:38:39Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
567807b1
Parents:
8182031
Message:

Modify sparc64 to choose optimal page size in each invocation of hw_map().
Use hw_map() to map keyboard device memory.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • arch/sparc64/src/mm/page.c

    r8182031 r82da5f5  
    3232#include <mm/frame.h>
    3333#include <bitops.h>
     34#include <debug.h>
    3435
    3536void page_arch_init(void)
     
    4142{
    4243        unsigned int order;
     44        int i;
     45
     46        struct {
     47                int pagesize;
     48                size_t increment;
     49                count_t count;
     50        } sizemap[] = {
     51                { PAGESIZE_8K, 0, 1 },                  /* 8K */
     52                { PAGESIZE_8K, PAGE_SIZE, 2 },          /* 16K */
     53                { PAGESIZE_8K, PAGE_SIZE, 4 },          /* 32K */
     54                { PAGESIZE_64K, 0, 1},                  /* 64K */
     55                { PAGESIZE_64K, 8*PAGE_SIZE, 2 },       /* 128K */
     56                { PAGESIZE_64K, 8*PAGE_SIZE, 4 },       /* 256K */
     57                { PAGESIZE_512K, 0, 1 },                /* 512K */
     58                { PAGESIZE_512K, 64*PAGE_SIZE, 2 },     /* 1M */
     59                { PAGESIZE_512K, 64*PAGE_SIZE, 4 },     /* 2M */
     60                { PAGESIZE_4M, 0, 1 }                   /* 4M */
     61        };
     62       
     63        ASSERT(size <= 4*1024*1024);
    4364       
    4465        if (size <= FRAME_SIZE)
     
    4869       
    4970        __address virtaddr = PA2KA(PFN2ADDR(frame_alloc(order, FRAME_KA)));
    50        
    51         dtlb_insert_mapping(virtaddr, physaddr, PAGESIZE_512K, true, false);
    52         dtlb_insert_mapping(virtaddr + 512 * 1024, physaddr + 512 * 1024, PAGESIZE_512K, true, false);
     71
     72        for (i = 0; i < sizemap[order].count; i++)
     73                dtlb_insert_mapping(virtaddr + i*sizemap[order].increment,
     74                                    physaddr + i*sizemap[order].increment,
     75                                    sizemap[order].pagesize, true, false);
    5376       
    5477        return virtaddr;
Note: See TracChangeset for help on using the changeset viewer.