Changeset 94d614e in mainline


Ignore:
Timestamp:
2006-07-13T17:32:38Z (18 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
a5f76758
Parents:
63cda71
Message:

Remove OpenFirmware calls from kernel/ entirely.

Switch the sparc64 port to use bootinfo.

Copy memcpy from boot/ to sparc64 kernel/ and
adjust it for memcpy_from/to_uspace.

Files:
4 deleted
22 edited

Legend:

Unmodified
Added
Removed
  • boot/arch/sparc64/loader/asm.S

    r63cda71 r94d614e  
    9999
    100100jump_to_kernel:
    101         set ofw_cif, %l0
    102         jmp %o0                         ! jump to kernel
    103         ldx [%l0], %o4                  ! pass OpenFirmware address in %o4
     101        mov %o0, %l1
     102        mov %o1, %o0
     103        mov %o2, %o1
     104        jmp %l1                         ! jump to kernel
     105        nop
    104106
    105107.global ofw
  • boot/arch/sparc64/loader/main.c

    r63cda71 r94d614e  
    8181        printf("\nCopying components\n");
    8282        unsigned int top = 0;
    83         bootinfo.cnt = 0;
     83        bootinfo.taskmap.count = 0;
    8484        for (i = 0; i < COMPONENTS; i++) {
     85                void * base = (void *) KERNEL_VIRTUAL_ADDRESS;
     86       
    8587                printf(" %s...", components[i].name);
    8688                top = ALIGN_UP(top, PAGE_SIZE);
    87                 memcpy(((void *) KERNEL_VIRTUAL_ADDRESS) + top, components[i].start, components[i].size);
     89                memcpy(base + top, components[i].start, components[i].size);
    8890                if (i > 0) {
    89                         bootinfo.tasks[bootinfo.cnt].addr = ((void *) KERNEL_VIRTUAL_ADDRESS) + top;
    90                         bootinfo.tasks[bootinfo.cnt].size = components[i].size;
    91                         bootinfo.cnt++;
     91                        bootinfo.taskmap.tasks[bootinfo.taskmap.count].addr = base + top;
     92                        bootinfo.taskmap.tasks[bootinfo.taskmap.count].size = components[i].size;
     93                        bootinfo.taskmap.count++;
    9294                }
    9395                top += components[i].size;
  • boot/arch/sparc64/loader/main.h

    r63cda71 r94d614e  
    3131
    3232#include <ofw.h>
     33#include <types.h>
    3334
    3435#define TASKMAP_MAX_RECORDS 32
     
    3637typedef struct {
    3738        void *addr;
    38         unsigned int size;
     39        uint32_t size;
    3940} task_t;
    4041
    4142typedef struct {
    42         unsigned int cnt;
     43        uint32_t count;
    4344        task_t tasks[TASKMAP_MAX_RECORDS];
     45} taskmap_t;
     46
     47typedef struct {
     48        taskmap_t taskmap;
    4449        memmap_t memmap;
    4550        screen_t screen;
  • boot/genarch/ofw.c

    r63cda71 r94d614e  
    7575}
    7676
    77 
     77/** Perform a call to OpenFirmware client interface.
     78 *
     79 * @param service String identifying the service requested.
     80 * @param nargs Number of input arguments.
     81 * @param nret Number of output arguments. This includes the return value.
     82 * @param rets Buffer for output arguments or NULL. The buffer must accommodate nret - 1 items.
     83 *
     84 * @return Return value returned by the client interface.
     85 */
    7886static unsigned long ofw_call(const char *service, const int nargs, const int nret, ofw_arg_t *rets, ...)
    7987{
     
    8290        int i;
    8391       
    84         args.service = service;
     92        args.service = (ofw_arg_t) service;
    8593        args.nargs = nargs;
    8694        args.nret = nret;
  • boot/genarch/ofw.h

    r63cda71 r94d614e  
    4747 */
    4848typedef struct {
    49         const char *service;            /**< Command name */
    50         unsigned long nargs;            /**< Number of in arguments */
    51         unsigned long nret;             /**< Number of out arguments */
    52         ofw_arg_t args[MAX_OFW_ARGS];   /**< List of arguments */
     49        ofw_arg_t service;              /**< Command name. */
     50        ofw_arg_t nargs;                /**< Number of in arguments. */
     51        ofw_arg_t nret;                 /**< Number of out arguments. */
     52        ofw_arg_t args[MAX_OFW_ARGS];   /**< List of arguments. */
    5353} ofw_args_t;
    5454
    5555typedef struct {
    5656        void *start;
    57         unsigned int size;
     57        uint32_t size;
    5858} memzone_t;
    5959
    6060typedef struct {
    61         unsigned int total;
    62         unsigned int count;
     61        uint32_t total;
     62        uint32_t count;
    6363        memzone_t zones[MEMMAP_MAX_RECORDS];
    6464} memmap_t;
     
    6666typedef struct {
    6767        void *addr;
    68         unsigned int width;
    69         unsigned int height;
    70         unsigned int bpp;
    71         unsigned int scanline;
     68        uint32_t width;
     69        uint32_t height;
     70        uint32_t bpp;
     71        uint32_t scanline;
    7272} screen_t;
    7373
    7474typedef struct {
    7575        void *addr;
    76         unsigned int size;
     76        uint32_t size;
    7777} keyboard_t;
    7878
    7979typedef struct {
    80         unsigned int info;
    81         unsigned int addr_hi;
    82         unsigned int addr_lo;
     80        uint32_t info;
     81        uint32_t addr_hi;
     82        uint32_t addr_lo;
    8383} pci_addr_t;
    8484
    8585typedef struct {
    8686        pci_addr_t addr;
    87         unsigned int size_hi;
    88         unsigned int size_lo;
     87        uint32_t size_hi;
     88        uint32_t size_lo;
    8989} pci_reg_t;
    9090
  • kernel/arch/ppc32/src/ppc32.c

    r63cda71 r94d614e  
    7171{
    7272        if (config.cpu_active == 1) {
    73                 fb_init(bootinfo.screen.addr, bootinfo.screen.width, bootinfo.screen.height, bootinfo.screen.bpp, bootinfo.screen.scanline);   
     73                fb_init(bootinfo.screen.addr, bootinfo.screen.width, bootinfo.screen.height, bootinfo.screen.bpp, bootinfo.screen.scanline);
    7474       
    7575                /* Initialize PIC */
  • kernel/arch/sparc64/Makefile.inc

    r63cda71 r94d614e  
    4747#
    4848
    49 CONFIG_OFW = y
    50 
    5149## Compile with page hash table support.
    5250#
  • kernel/arch/sparc64/_link.ld.in

    r63cda71 r94d614e  
    77 */
    88
    9 #define __ASM__
     9#define __LINKER__
    1010#include <arch/boot/boot.h>
    1111
  • kernel/arch/sparc64/include/boot/boot.h

    r63cda71 r94d614e  
    3333 */
    3434
    35 #ifndef __sparc64_BOOT_H__
    36 #define __sparc64_BOOT_H__
     35#ifndef KERN_sparc64_BOOT_H_
     36#define KERN_sparc64_BOOT_H_
     37
    3738
    3839#define VMA                     0x400000
    3940#define LMA                     VMA
     41
     42#ifndef __LINKER__
     43
     44#include <arch/types.h>
     45#include <typedefs.h>
     46
     47#define TASKMAP_MAX_RECORDS     32
     48#define MEMMAP_MAX_RECORDS      32
     49
     50typedef struct {
     51        void * addr;
     52        uint32_t size;
     53} utask_t;
     54
     55typedef struct {
     56        uint32_t count;
     57        utask_t tasks[TASKMAP_MAX_RECORDS];
     58} taskmap_t;
     59
     60typedef struct {
     61        uintptr_t start;
     62        uint32_t size;
     63} memzone_t;
     64
     65typedef struct {
     66        uint32_t total;
     67        uint32_t count;
     68        memzone_t zones[MEMMAP_MAX_RECORDS];
     69} memmap_t;
     70
     71typedef struct {
     72        uintptr_t addr;
     73        uint32_t width;
     74        uint32_t height;
     75        uint32_t bpp;
     76        uint32_t scanline;
     77} screen_t;
     78
     79typedef struct {
     80        uintptr_t addr;
     81        uint32_t size;
     82} keyboard_t;
     83
     84typedef struct {
     85        taskmap_t taskmap;
     86        memmap_t memmap;
     87        screen_t screen;
     88        keyboard_t keyboard;
     89} bootinfo_t;
     90
     91extern bootinfo_t bootinfo;
     92
     93#endif
    4094
    4195#endif
  • kernel/arch/sparc64/include/drivers/fb.h

    r63cda71 r94d614e  
    3636#define KERN_sparc64_FB_H_
    3737
    38 #define FB_PHYS_ADDRESS         0x1c901000000ULL
    39 
    40 #define FB_X_RES                1152
    41 #define FB_Y_RES                900
    42 
    43 #define FB_COLOR_DEPTH          8
    44 
    4538#endif
    4639
  • kernel/arch/sparc64/include/drivers/i8042.h

    r63cda71 r94d614e  
    3838#include <arch/types.h>
    3939
    40 #define KBD_PHYS_ADDRESS        0x1fff8904000ULL
    41 
    4240#define STATUS_REG      4
    4341#define COMMAND_REG     4
  • kernel/arch/sparc64/include/drivers/tick.h

    r63cda71 r94d614e  
    2727 */
    2828
    29  /** @addtogroup sparc64       
     29/** @addtogroup sparc64
    3030 * @{
    3131 */
     
    4545#endif
    4646
    47  /** @}
     47/** @}
    4848 */
    49 
  • kernel/arch/sparc64/src/asm.S

    r63cda71 r94d614e  
    4343memcpy_from_uspace:
    4444memcpy_to_uspace:
     45        .register       %g2, #scratch
     46        .register       %g3, #scratch
     47        add     %o1, 7, %g1
     48        and     %g1, -8, %g1
     49        cmp     %o1, %g1
     50        be,pn   %xcc, 3f
     51        add     %o0, 7, %g1
     52        mov     0, %g3
     530:
     54        brz,pn  %o2, 2f
     55        mov     0, %g2
     561:
     57        ldub    [%g3 + %o1], %g1
     58        add     %g2, 1, %g2
     59        cmp     %o2, %g2
     60        stb     %g1, [%g3 + %o0]
     61        bne,pt  %xcc, 1b
     62        mov     %g2, %g3
     632:
     64        jmp     %o7 + 8                 ! exit point
     65        mov     %o1, %o0
     663:
     67        and     %g1, -8, %g1
     68        cmp     %o0, %g1
     69        bne,pt  %xcc, 0b
     70        mov     0, %g3
     71        srlx    %o2, 3, %g4
     72        brz,pn  %g4, 5f
     73        mov     0, %g5
     744:
     75        sllx    %g3, 3, %g2
     76        add     %g5, 1, %g3
     77        ldx     [%o1 + %g2], %g1
     78        mov     %g3, %g5
     79        cmp     %g4, %g3
     80        bne,pt  %xcc, 4b
     81        stx     %g1, [%o0 + %g2]
     825:
     83        and     %o2, 7, %o2
     84        brz,pn  %o2, 2b
     85        sllx    %g4, 3, %g1
     86        mov     0, %g2
     87        add     %g1, %o0, %o0
     88        add     %g1, %o1, %g4
     89        mov     0, %g3
     906:
     91        ldub    [%g2 + %g4], %g1
     92        stb     %g1, [%g2 + %o0]
     93        add     %g3, 1, %g2
     94        cmp     %o2, %g2
     95        bne,pt  %xcc, 6b
     96        mov     %g2, %g3
    4597
    46         b _memcpy
    47         nop
     98        jmp     %o7 + 8                 ! exit point
     99        mov     %o1, %o0
    48100
    49101memcpy_from_uspace_failover_address:
    50102memcpy_to_uspace_failover_address:
    51         b memcpy_from_uspace_failover_address
    52         nop
     103        jmp     %o7 + 8                 ! exit point
     104        mov     %g0, %o0                ! return 0 on failure
    53105
    54106memsetb:
    55107        b _memsetb
    56108        nop
    57 
    58 .global ofw
    59 ofw:
    60         save %sp, -STACK_WINDOW_SAVE_AREA_SIZE, %sp
    61         set ofw_cif, %l0
    62         ldx [%l0], %l0
    63 
    64         rdpr  %pstate, %l1
    65         and  %l1, ~PSTATE_AM_BIT, %l2
    66         wrpr  %l2, 0, %pstate
    67            
    68         jmpl %l0, %o7
    69         mov %i0, %o0
    70        
    71         wrpr  %l1, 0, %pstate
    72 
    73         ret
    74         restore %o0, 0, %o0
  • kernel/arch/sparc64/src/console.c

    r63cda71 r94d614e  
    4040#include <arch/drivers/i8042.h>
    4141#include <genarch/i8042/i8042.h>
    42 #include <genarch/ofw/ofw.h>
    4342#include <console/chardev.h>
    4443#include <console/console.h>
     
    4645#include <arch/register.h>
    4746#include <proc/thread.h>
    48 #include <synch/mutex.h>
    4947#include <arch/mm/tlb.h>
     48#include <arch/boot/boot.h>
    5049
    5150#define KEYBOARD_POLL_PAUSE     50000   /* 50ms */
    52 
    53 static void ofw_sparc64_putchar(chardev_t *d, const char ch);
    54 
    55 static volatile int ofw_console_active;
    56 
    57 static chardev_t ofw_sparc64_console;
    58 static chardev_operations_t ofw_sparc64_console_ops = {
    59         .write = ofw_sparc64_putchar,
    60 };
    61 
    62 /** Initialize kernel console to use OpenFirmware services. */
    63 void ofw_sparc64_console_init(void)
    64 {
    65         chardev_initialize("ofw_sparc64_console", &ofw_sparc64_console, &ofw_sparc64_console_ops);
    66         stdin = NULL;
    67         stdout = &ofw_sparc64_console;
    68         ofw_console_active = 1;
    69 }
    7051
    7152/** Initialize kernel console to use framebuffer and keyboard directly. */
    7253void standalone_sparc64_console_init(void)
    7354{
    74         ofw_console_active = 0;
    7555        stdin = NULL;
    7656
    7757        kbd_init();
    78         fb_init(FB_PHYS_ADDRESS, FB_X_RES, FB_Y_RES, FB_COLOR_DEPTH, FB_X_RES * FB_COLOR_DEPTH / 8);
    79 }
    80 
    81 /** Write one character using OpenFirmware.
    82  *
    83  * @param d Character device (ignored).
    84  * @param ch Character to be written.
    85  */
    86 void ofw_sparc64_putchar(chardev_t *d, const char ch)
    87 {
    88         if (ch == '\n')
    89                 ofw_putchar('\r');
    90         ofw_putchar(ch);
     58        fb_init(bootinfo.screen.addr, bootinfo.screen.width, bootinfo.screen.height,
     59                bootinfo.screen.bpp, bootinfo.screen.scanline);
    9160}
    9261
  • kernel/arch/sparc64/src/drivers/i8042.c

    r63cda71 r94d614e  
    3535#include <arch/drivers/i8042.h>
    3636#include <genarch/i8042/i8042.h>
     37#include <arch/boot/boot.h>
    3738#include <arch/types.h>
    3839#include <arch/mm/page.h>
     
    4243void kbd_init()
    4344{
    44         kbd_virt_address = (uint8_t *) hw_map(KBD_PHYS_ADDRESS, LAST_REG);
     45        kbd_virt_address = (uint8_t *) hw_map(bootinfo.keyboard.addr, LAST_REG);
    4546        i8042_init();
    4647}
  • kernel/arch/sparc64/src/mm/frame.c

    r63cda71 r94d614e  
    3434
    3535#include <arch/mm/frame.h>
    36 #include <genarch/ofw/memory_init.h>
    3736#include <mm/frame.h>
     37#include <arch/boot/boot.h>
    3838#include <config.h>
    3939#include <align.h>
    4040
     41/** Create memory zones according to information stored in bootinfo.
     42 *
     43 * Walk the bootinfo memory map and create frame zones according to it.
     44 * The first frame is not blacklisted here as it is done in generic
     45 * frame_init().
     46 */
    4147void frame_arch_init(void)
    4248{
    43         ofw_init_zones();
     49        int i;
     50        pfn_t confdata;
    4451
    45         /*
    46          * Workaround to prevent slab allocator from allocating frame 0.
    47          * Frame 0 is
    48          * a) not mapped by OFW
    49          * b) would be confused with NULL error return code
    50          */
    51         frame_mark_unavailable(0, 1);
     52        for (i = 0; i < bootinfo.memmap.count; i++) {
     53
     54                /*
     55                 * The memmap is created by HelenOS boot loader.
     56                 * It already contains no holes.
     57                 */
     58       
     59                confdata = ADDR2PFN(bootinfo.memmap.zones[i].start);
     60                if (confdata == 0)
     61                        confdata = 2;
     62                zone_create(ADDR2PFN(bootinfo.memmap.zones[i].start),
     63                        SIZE2FRAMES(ALIGN_DOWN(bootinfo.memmap.zones[i].size, PAGE_SIZE)),
     64                        confdata, 0);
     65        }
     66
    5267}
    5368
  • kernel/arch/sparc64/src/mm/memory_init.c

    r63cda71 r94d614e  
    3434
    3535#include <arch/mm/memory_init.h>
    36 #include <genarch/ofw/memory_init.h>
     36#include <arch/boot/boot.h>
    3737#include <typedefs.h>
    3838
     39/** Return total size of available memory in bytes.
     40 *
     41 * @return Size of available memory in bytes.
     42 */
    3943size_t get_memory_size(void)
    4044{
    41         return ofw_get_memory_size();
     45        return bootinfo.memmap.total;
    4246}
    4347
    4448/** @}
    4549 */
    46 
  • kernel/arch/sparc64/src/sparc64.c

    r63cda71 r94d614e  
    4040#include <proc/thread.h>
    4141#include <console/console.h>
     42#include <arch/boot/boot.h>
    4243
    43 #include <print.h>
    44 #include <genarch/ofw/ofw.h>
    45 #include <arch/asm.h>
    46 #include <arch/register.h>
     44bootinfo_t bootinfo;
     45
    4746void arch_pre_mm_init(void)
    4847{
    49         interrupts_disable();
    50         ofw_sparc64_console_init();
    51 
    5248        trap_init();
    5349        tick_init();
  • kernel/arch/sparc64/src/start.S

    r63cda71 r94d614e  
    2727#
    2828
    29 #include <arch/boot/boot.h>
    3029#include <arch/regdef.h>
    3130
     
    4039 * Here is where the kernel is passed control
    4140 * from the boot loader.
     41 *
     42 * The registers are expected to be in this state:
     43 * %o0 bootinfo structure address
     44 * %o1 bootinfo structure size
    4245 */
    4346
     
    4649        flushw                          ! flush all but the active register window
    4750
     51        /*
     52         * Disable interrupts and disable 32-bit address masking.
     53         */
    4854        rdpr %pstate, %l0
    49         and %l0, ~PSTATE_AM_BIT, %l0
     55        and %l0, ~(PSTATE_AM_BIT|PSTATE_IE_BIT), %l0
    5056        wrpr %l0, 0, %pstate
    5157
    52         set ofw_cif, %l0
    53 
    54         call ofw_init
    55         stx %o4, [%l0]
    56 
    57         call ofw_init_memmap
     58        /*
     59         * Copy the bootinfo structure passed from the boot loader
     60         * to the kernel bootinfo structure.
     61         */
     62        mov %o1, %o2
     63        mov %o0, %o1
     64        set bootinfo, %o0
     65        call memcpy
    5866        nop
    5967
  • kernel/genarch/Makefile.inc

    r63cda71 r94d614e  
    2929#
    3030
    31 ifeq ($(CONFIG_OFW),y)
    32         GENARCH_SOURCES += \
    33                 genarch/src/ofw/ofw.c \
    34                 genarch/src/ofw/memory_init.c
    35 endif
    3631ifeq ($(CONFIG_ACPI),y)
    3732        GENARCH_SOURCES += \
  • kernel/genarch/src/fb/fb.c

    r63cda71 r94d614e  
    2727 */
    2828
    29  /** @addtogroup genarch       
     29/** @addtogroup genarch
    3030 * @{
    3131 */
     
    420420}
    421421
    422  /** @}
    423  */
    424 
     422/** @}
     423 */
  • kernel/generic/src/mm/frame.c

    r63cda71 r94d614e  
    10781078
    10791079                /* Black list first frame, as allocating NULL would
    1080                  * fail on some places */
     1080                 * fail in some places */
    10811081                frame_mark_unavailable(0, 1);
    10821082        }
Note: See TracChangeset for help on using the changeset viewer.