Changeset 6b781c0 in mainline for kernel/arch/arm32/src/arm32.c


Ignore:
Timestamp:
2007-06-08T15:02:49Z (18 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c03ee1c
Parents:
3ee8a075
Message:

Merge arm32 into trunk.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/arm32/src/arm32.c

    r3ee8a075 r6b781c0  
    11/*
    2  * Copyright (c) 2003-2004 Jakub Jermar
     2 * Copyright (c) 2007 Michal Kebrt
    33 * All rights reserved.
    44 *
     
    3131 */
    3232/** @file
     33 *  @brief ARM32 architecture specific functions.
    3334 */
    3435
     36#include <arch.h>
     37#include <arch/boot.h>
     38#include <config.h>
     39#include <arch/console.h>
     40#include <ddi/device.h>
     41#include <genarch/fb/fb.h>
     42#include <genarch/fb/visuals.h>
     43#include <ddi/irq.h>
     44#include <arch/debug/print.h>
     45#include <print.h>
     46#include <config.h>
     47#include <interrupt.h>
     48#include <arch/regutils.h>
     49#include <arch/machine.h>
     50#include <userspace.h>
    3551
    36 #include <arch.h>
     52/** Information about loaded tasks. */
     53bootinfo_t bootinfo;
    3754
     55/** Performs arm32 specific initialization before main_bsp() is called. */
    3856void arch_pre_main(void)
    3957{
    40         /* TODO */
     58        int i;
     59
     60        init.cnt = bootinfo.cnt;
     61
     62        for (i = 0; i < bootinfo.cnt; ++i) {
     63                init.tasks[i].addr = bootinfo.tasks[i].addr;
     64                init.tasks[i].size = bootinfo.tasks[i].size;
     65        }
     66       
    4167}
    4268
     69/** Performs arm32 specific initialization before mm is initialized. */
    4370void arch_pre_mm_init(void)
    4471{
    45         /* TODO */
     72        /* It is not assumed by default */
     73        interrupts_disable();
    4674}
    4775
     76/** Performs arm32 specific initialization afterr mm is initialized. */
    4877void arch_post_mm_init(void)
    4978{
    50         /* TODO */
     79        machine_hw_map_init();
     80
     81        /* Initialize exception dispatch table */
     82        exception_init();
     83
     84        interrupt_init();
     85       
     86        console_init(device_assign_devno());
     87
     88#ifdef CONFIG_FB
     89        fb_init(machine_get_fb_address(), 640, 480, 1920, VISUAL_RGB_8_8_8);
     90#endif
    5191}
    5292
     93/** Performs arm32 specific tasks needed after cpu is initialized.
     94 *
     95 * Currently the function is empty.
     96 */
    5397void arch_post_cpu_init(void)
    5498{
    55         /* TODO */
    5699}
    57100
     101
     102/** Performs arm32 specific tasks needed before the multiprocessing is
     103 * initialized.
     104 *
     105 * Currently the function is empty because SMP is not supported.
     106 */
    58107void arch_pre_smp_init(void)
    59108{
    60         /* TODO */
    61109}
    62110
     111
     112/** Performs arm32 specific tasks needed after the multiprocessing is
     113 * initialized.
     114 *
     115 * Currently the function is empty because SMP is not supported.
     116 */
    63117void arch_post_smp_init(void)
    64118{
    65         /* TODO */
    66119}
    67120
    68 /** Perform arm32 specific tasks needed before the new task is run. */
     121
     122/** Performs arm32 specific tasks needed before the new task is run. */
    69123void before_task_runs_arch(void)
    70124{
    71         /* TODO */
     125        tlb_invalidate_all();
    72126}
    73127
    74 /** Perform arm32 specific tasks needed before the new thread is scheduled. */
     128
     129/** Performs arm32 specific tasks needed before the new thread is scheduled.
     130 *
     131 * It sets supervisor_sp.
     132 */
    75133void before_thread_runs_arch(void)
    76134{
    77         /* TODO */
     135        uint8_t *stck;
     136       
     137        stck = &THREAD->kstack[THREAD_STACK_SIZE - SP_DELTA];
     138        supervisor_sp = (uintptr_t) stck;
    78139}
    79140
     141/** Performs arm32 specific tasks before a thread stops running.
     142 *
     143 * Currently the function is empty.
     144 */
    80145void after_thread_ran_arch(void)
    81146{
    82         /* TODO */
    83147}
    84148
    85 void arch_reboot(void)
     149/** Halts CPU. */
     150void cpu_halt(void)
    86151{
    87         // TODO
    88         while (1);
     152        machine_cpu_halt();
     153}
     154
     155/** Reboot. */
     156void arch_reboot()
     157{
     158        /* not implemented */
     159        for (;;)
     160                ;
    89161}
    90162
Note: See TracChangeset for help on using the changeset viewer.