Changeset 10caad0 in mainline


Ignore:
Timestamp:
2005-08-30T17:37:50Z (19 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
7ce9284
Parents:
db5e25f
Message:

PPC memory size detection

Location:
arch/ppc
Files:
1 added
8 edited

Legend:

Unmodified
Added
Removed
  • arch/ppc/Makefile.inc

    rdb5e25f r10caad0  
    1717arch_sources= \
    1818        arch/ppc.c \
     19        arch/debug/panic.s \
    1920        arch/fpu_context.c \
    2021        arch/dummy.s \
     
    2223        arch/asm.s \
    2324        arch/mm/frame.c \
     25        arch/mm/memory_init.c \
    2426        arch/mm/page.c \
    2527        arch/drivers/ofw.c
  • arch/ppc/include/asm.h

    rdb5e25f r10caad0  
    11/*
    2  * Copyright (C) 2005 Jakub Jermar
     2 * Copyright (C) 2005 Martin Decky
    33 * All rights reserved.
    44 *
     
    3333#include <config.h>
    3434
     35/** Set priority level low
     36 *
     37 * Enable interrupts and return previous
     38 * value of EE.
     39 */
     40static inline pri_t cpu_priority_low(void) {
     41        pri_t v;
     42        __asm__ volatile (
     43                "\n"
     44                : "=r" (v)
     45        );
     46        return v;
     47}
     48
     49/** Set priority level high
     50 *
     51 * Disable interrupts and return previous
     52 * value of EE.
     53 */
     54static inline pri_t cpu_priority_high(void) {
     55        pri_t v;
     56        __asm__ volatile (
     57                "\n"
     58                : "=r" (v)
     59        );
     60        return v;
     61}
     62
     63/** Restore priority level
     64 *
     65 * Restore EE.
     66 */
     67static inline void cpu_priority_restore(pri_t pri) {
     68        __asm__ volatile (
     69                "\n"
     70                : : "r" (pri)
     71        );
     72}
     73
    3574/* TODO: implement the real stuff */
    3675static inline __address get_stack_base(void)
  • arch/ppc/include/asm/macro.h

    rdb5e25f r10caad0  
    7474#define r30     30
    7575#define r31     31
     76
     77/* GPR Aliases */
     78#define sp      1
    7679
    7780/* Floating Point Registers (FPRs) */
  • arch/ppc/include/drivers/ofw.h

    rdb5e25f r10caad0  
    3636typedef __u32 ofw_arg_t;
    3737typedef __u32 ihandle;
     38typedef __u32 phandle;
    3839
    39 struct ofw_args_t {
    40         const char *service;
    41         int nargs;
    42         int nret;
    43         ofw_arg_t args[MAX_OFW_ARGS];
    44 };
     40/** OpenFirmware command structure
     41 *
     42 */
     43typedef struct {
     44        const char *service;          /**< Command name */
     45        __u32 nargs;                  /**< Number of in arguments */
     46        __u32 nret;                   /**< Number of out arguments */
     47        ofw_arg_t args[MAX_OFW_ARGS]; /**< List of arguments */
     48} ofw_args_t;
    4549
    46 typedef void (*ofw_entry)(struct ofw_args_t *);
     50/** OpenFirmware device address range structure
     51 *
     52 */
     53typedef struct {
     54        __u32 space;
     55        __u32 address;
     56        __u32 size;
     57} address_range_t;
     58
     59/** OpenFirmware device interrupt structure
     60 *
     61 */
     62typedef struct {
     63        __u32 line;  /**< Interrupt number */
     64        __u32 flags; /**< Interrupt flags/logic */
     65} interrupt_info_t;
     66
     67/** OpenFirmware property structure
     68 *
     69 */
     70typedef struct property_t {
     71        char *name;              /**< Property name */
     72        __u32 length;            /**< Value length */
     73        char *value;             /**< Property value */
     74        struct property_t *next; /**< Next property in list */
     75} property_t;
     76
     77/** OpenFirmware device descritor
     78 *
     79 */
     80typedef struct device_node_t {
     81        char *name;                     /**< Device name */
     82        char *type;                     /**< Device type */
     83        phandle node;                   /**< Device handle */
     84       
     85        __u32 n_addrs;                  /**< Number of address ranges */
     86        address_range_t *addrs;         /**< Address ranges list */
     87       
     88        __u32 n_intrs;                  /**< Number of interrupts */
     89        interrupt_info_t *intrs;        /**< Interrupts list */
     90       
     91        char *full_name;                /**< Device full name */
     92       
     93        property_t *properties;         /**< Device properties */
     94       
     95        struct device_node_t *parent;   /**< Parent device */
     96        struct device_node_t *child;    /**< First child in tree */
     97        struct device_node_t *sibling;  /**< Next device on tree level */
     98        struct device_node_t *next;     /**< Next device of the same type */
     99        struct device_node_t *next_all; /**< Next device in list of all nodes */
     100} device_node_t;
     101
     102typedef void (*ofw_entry)(ofw_args_t *);
    47103
    48104extern ofw_entry ofw;
     
    52108extern int ofw_call(const char *service, const int nargs, const int nret, ...);
    53109extern void ofw_putchar(const char ch);
     110extern phandle ofw_find_device(const char *name);
     111extern int ofw_get_property(const phandle device, const char *name, void *buf, const int buflen);
    54112extern void putchar(const char ch);
    55113
  • arch/ppc/src/asm.s

    rdb5e25f r10caad0  
    2727#
    2828
     29#include <arch/asm/macro.h>
     30
    2931.text
    3032
  • arch/ppc/src/drivers/ofw.c

    rdb5e25f r10caad0  
    3030#include <stdarg.h>
    3131
    32 ihandle ofw_chosen;
     32ofw_entry ofw;
     33
     34phandle ofw_chosen;
    3335ihandle ofw_stdout;
    34 ofw_entry ofw;
    3536
    3637void ofw_init(void)
    3738{
    38         ofw_chosen = ofw_call("finddevice", 1, 1, "/chosen");
     39        ofw_chosen = ofw_find_device("/chosen");
    3940        if (ofw_chosen == -1)
    4041                ofw_done();
     
    5354{
    5455        va_list list;
    55         struct ofw_args_t args;
     56        ofw_args_t args;
    5657        int i;
    5758       
     
    7879                return;
    7980       
    80         ofw_call("write", 3, 1, ofw_stdout, ch, 1);
     81        ofw_call("write", 3, 1, ofw_stdout, &ch, 1);
     82}
     83
     84phandle ofw_find_device(const char *name)
     85{
     86        return ofw_call("finddevice", 1, 1, name);
     87}
     88
     89int ofw_get_property(const phandle device, const char *name, void *buf, const int buflen)
     90{
     91        return ofw_call("getprop", 4, 1, device, name, buf, buflen);
    8192}
    8293
  • arch/ppc/src/dummy.s

    rdb5e25f r10caad0  
    3030
    3131.global memcopy
    32 .global cpu_priority_high
    33 .global cpu_priority_low
    3432.global cpu_priority_read
    35 .global cpu_priority_restore
    3633.global memsetb
    3734.global context_save
     
    3936.global userspace
    4037.global before_thread_runs_arch
    41 .global panic_printf
    4238.global cpu_identify
    4339.global cpu_arch_init
    4440.global cpu_print_report
    45 .global get_memory_size
    4641.global arch_pre_mm_init
    4742.global arch_post_mm_init
     
    5247
    5348memcopy:
    54 cpu_priority_high:
    55 cpu_priority_low:
    56 cpu_priority_restore:
    5749cpu_priority_read:
    5850memsetb:
     
    6355calibrate_delay_loop:
    6456asm_delay_loop:
    65 panic_printf:
    6657cpu_identify:
    6758cpu_arch_init:
    6859cpu_print_report:
    69 get_memory_size:
    7060arch_pre_mm_init:
    7161arch_post_mm_init:
  • arch/ppc/src/start.S

    rdb5e25f r10caad0  
    2727#
    2828
     29#include <arch/asm/macro.h>
     30
    2931.section K_TEXT_START
    3032
Note: See TracChangeset for help on using the changeset viewer.