Changeset 82da5f5 in mainline


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.

Location:
arch/sparc64
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • arch/sparc64/Makefile.inc

    r8182031 r82da5f5  
    6262
    6363## Compile with support for framebuffer.
    64 ## Mapping of the framebuffer is implemented by a sparc64-specific function.
    6564#
    6665
     
    9291        arch/$(ARCH)/src/trap/interrupt.c \
    9392        arch/$(ARCH)/src/ddi/ddi.c \
    94         arch/$(ARCH)/src/drivers/tick.c
     93        arch/$(ARCH)/src/drivers/tick.c \
     94        arch/$(ARCH)/src/drivers/i8042.c
  • arch/sparc64/include/drivers/i8042.h

    r8182031 r82da5f5  
    3333
    3434#define KBD_PHYS_ADDRESS        0x1fff8904000ULL
    35 #define KBD_VIRT_ADDRESS        0x000d0000000ULL
    3635
    3736#define STATUS_REG      4
     
    3938#define DATA_REG        6
    4039
     40#define LAST_REG        DATA_REG
     41
     42extern volatile __u8 *kbd_virt_address;
     43
    4144static inline void i8042_data_write(__u8 data)
    4245{
    43         ((volatile __u8 *)(KBD_VIRT_ADDRESS))[DATA_REG] = data;
     46        kbd_virt_address[DATA_REG] = data;
    4447}
    4548
    4649static inline __u8 i8042_data_read(void)
    4750{
    48         return ((volatile __u8 *)(KBD_VIRT_ADDRESS))[DATA_REG];
     51        return kbd_virt_address[DATA_REG];
    4952}
    5053
    5154static inline __u8 i8042_status_read(void)
    5255{
    53         return ((volatile __u8 *)(KBD_VIRT_ADDRESS))[STATUS_REG];
     56        return kbd_virt_address[STATUS_REG];
    5457}
    5558
    5659static inline void i8042_command_write(__u8 command)
    5760{
    58         ((volatile __u8 *)(KBD_VIRT_ADDRESS))[COMMAND_REG] = command;
     61        kbd_virt_address[COMMAND_REG] = command;
    5962}
    6063
     64extern void kbd_init(void);
     65
    6166#endif
  • arch/sparc64/src/console.c

    r8182031 r82da5f5  
    7878        stdin = NULL;
    7979
    80         dtlb_insert_mapping(KBD_VIRT_ADDRESS, KBD_PHYS_ADDRESS, PAGESIZE_8K, true, false);
    81 
     80        kbd_init();
    8281        fb_init(FB_PHYS_ADDRESS, FB_X_RES, FB_Y_RES, FB_COLOR_DEPTH, FB_X_RES * FB_COLOR_DEPTH / 8);
    83         i8042_init();
    8482}
    8583
  • 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.