Changeset 36df4109 in mainline for kernel/generic


Ignore:
Timestamp:
2016-06-06T16:29:56Z (10 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
7510326
Parents:
7f0580d
Message:

Introduce architecure-specific operations

This replaces the arch_*_init() functions with an arch_ops_t structure
defined for each architecture. Undefined operations are treated as NOPs.

Location:
kernel/generic
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/include/arch.h

    r7f0580d r36df4109  
    3636#define KERN_ARCH_H_
    3737
    38 #include <arch/arch.h>  /* arch_pre_main() */
    3938#include <arch/asm.h>   /* get_stack_base() */
    4039#include <config.h>
     
    8079} the_t;
    8180
     81typedef struct {
     82        void (* pre_mm_init)(void);
     83        void (* post_mm_init)(void);
     84        void (* post_cpu_init)(void);
     85        void (* pre_smp_init)(void);
     86        void (* post_smp_init)(void);
     87} arch_ops_t;
     88
     89extern arch_ops_t *arch_ops;
     90
     91#define ARCH_OP(op) \
     92        do { \
     93                if (arch_ops->op) \
     94                        arch_ops->op(); \
     95        } while (0)
     96
    8297extern void the_initialize(the_t *);
    8398extern void the_copy(the_t *, the_t *);
    84 
    85 extern void arch_pre_mm_init(void);
    86 extern void arch_post_mm_init(void);
    87 extern void arch_post_cpu_init(void);
    88 extern void arch_pre_smp_init(void);
    89 extern void arch_post_smp_init(void);
    9099
    91100extern void calibrate_delay_loop(void);
     
    95104extern void *arch_construct_function(fncptr_t *, void *, void *);
    96105
    97 
    98106#endif
    99107
  • kernel/generic/src/main/kinit.c

    r7f0580d r36df4109  
    160160         * At this point SMP, if present, is configured.
    161161         */
    162         arch_post_smp_init();
     162        ARCH_OP(post_smp_init);
    163163       
    164164        /* Start thread computing system load */
  • kernel/generic/src/main/main.c

    r7f0580d r36df4109  
    238238         * Memory management subsystems initialization.
    239239         */
    240         arch_pre_mm_init();
     240        ARCH_OP(pre_mm_init);
    241241        km_identity_init();
    242242        frame_init();
     
    250250        km_non_identity_init();
    251251        ddi_init();
    252         arch_post_mm_init();
     252        ARCH_OP(post_mm_init);
    253253        reserve_init();
    254         arch_pre_smp_init();
     254        ARCH_OP(pre_smp_init);
    255255        smp_init();
    256256       
     
    266266        cpu_init();
    267267        calibrate_delay_loop();
    268         arch_post_cpu_init();
     268        ARCH_OP(post_cpu_init);
    269269
    270270        smp_call_init();
     
    341341        the_initialize(THE);
    342342       
    343         arch_pre_mm_init();
     343        ARCH_OP(pre_mm_init);
    344344        frame_init();
    345345        page_init();
    346346        tlb_init();
    347         arch_post_mm_init();
     347        ARCH_OP(post_mm_init);
    348348       
    349349        cpu_init();
    350350        calibrate_delay_loop();
    351         arch_post_cpu_init();
     351        ARCH_OP(post_cpu_init);
    352352       
    353353        the_copy(THE, (the_t *) CPU->stack);
Note: See TracChangeset for help on using the changeset viewer.