//SPARTAN/trunk/arch/ppc/include/asm/macro.h |
---|
191,7 → 191,71 |
#define prv 287 |
.macro REGISTERS_STORE r |
stw r0, 0(\r) |
stw r1, 4(\r) |
stw r2, 8(\r) |
stw r3, 12(\r) |
stw r4, 16(\r) |
stw r5, 20(\r) |
stw r6, 24(\r) |
stw r7, 28(\r) |
stw r8, 32(\r) |
stw r9, 36(\r) |
stw r10, 40(\r) |
stw r11, 44(\r) |
stw r12, 48(\r) |
stw r13, 52(\r) |
stw r14, 56(\r) |
stw r15, 60(\r) |
stw r16, 64(\r) |
stw r17, 68(\r) |
stw r18, 72(\r) |
stw r19, 76(\r) |
stw r20, 80(\r) |
stw r21, 84(\r) |
stw r22, 88(\r) |
stw r23, 92(\r) |
stw r24, 96(\r) |
stw r25, 100(\r) |
stw r26, 104(\r) |
stw r27, 108(\r) |
stw r28, 112(\r) |
stw r29, 116(\r) |
stw r30, 120(\r) |
stw r31, 124(\r) |
.endm |
.macro REGISTERS_LOAD r |
lwz r0, 0(\r) |
lwz r1, 4(\r) |
lwz r2, 8(\r) |
lwz r3, 12(\r) |
lwz r4, 16(\r) |
lwz r5, 20(\r) |
lwz r6, 24(\r) |
lwz r7, 28(\r) |
lwz r8, 32(\r) |
lwz r9, 36(\r) |
lwz r10, 40(\r) |
lwz r11, 44(\r) |
lwz r12, 48(\r) |
lwz r13, 52(\r) |
lwz r14, 56(\r) |
lwz r15, 60(\r) |
lwz r16, 64(\r) |
lwz r17, 68(\r) |
lwz r18, 72(\r) |
lwz r19, 76(\r) |
lwz r20, 80(\r) |
lwz r21, 84(\r) |
lwz r22, 88(\r) |
lwz r23, 92(\r) |
lwz r24, 96(\r) |
lwz r25, 100(\r) |
lwz r26, 104(\r) |
lwz r27, 108(\r) |
lwz r28, 112(\r) |
lwz r29, 116(\r) |
lwz r30, 120(\r) |
lwz r31, 124(\r) |
.endm |
//SPARTAN/trunk/arch/ppc/include/context.h |
---|
31,12 → 31,42 |
#include <arch/types.h> |
#define SP_DELTA 0 |
#define SP_DELTA 4 |
struct context { |
__u32 r0; |
__u32 sp; |
__u32 r2; |
__u32 r3; |
__u32 r4; |
__u32 r5; |
__u32 r6; |
__u32 r7; |
__u32 r8; |
__u32 r9; |
__u32 r10; |
__u32 r11; |
__u32 r12; |
__u32 r13; |
__u32 r14; |
__u32 r15; |
__u32 r16; |
__u32 r17; |
__u32 r18; |
__u32 r19; |
__u32 r20; |
__u32 r21; |
__u32 r22; |
__u32 r23; |
__u32 r24; |
__u32 r25; |
__u32 r26; |
__u32 r27; |
__u32 r28; |
__u32 r29; |
__u32 r30; |
__u32 r31; |
__u32 pc; |
pri_t pri; |
} __attribute__ ((packed)); |
//SPARTAN/trunk/arch/ppc/Makefile.inc |
---|
15,6 → 15,7 |
LFLAGS=-M -no-check-sections -T ../arch/ppc/_link.ld |
arch_sources= \ |
arch/context.S \ |
arch/ppc.c \ |
arch/debug/panic.s \ |
arch/fpu_context.c \ |
//SPARTAN/trunk/arch/ppc/src/context.S |
---|
0,0 → 1,54 |
# |
# Copyright (C) 2005 Martin Decky |
# All rights reserved. |
# |
# Redistribution and use in source and binary forms, with or without |
# modification, are permitted provided that the following conditions |
# are met: |
# |
# - Redistributions of source code must retain the above copyright |
# notice, this list of conditions and the following disclaimer. |
# - Redistributions in binary form must reproduce the above copyright |
# notice, this list of conditions and the following disclaimer in the |
# documentation and/or other materials provided with the distribution. |
# - The name of the author may not be used to endorse or promote products |
# derived from this software without specific prior written permission. |
# |
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# |
#include <arch/asm/macro.h> |
.text |
.global context_save |
.global context_restore |
context_save: |
REGISTERS_STORE r3 |
mflr r3 |
stw r3, 128(r3) |
# context_save returns 1 |
li r3, 1 |
blr |
context_restore: |
REGISTERS_LOAD r3 |
lwz r3, 128(r3) |
mtlr r3 |
# context_restore returns 0 |
li r3, 0 |
blr |
//SPARTAN/trunk/arch/ppc/src/dummy.s |
---|
28,11 → 28,10 |
.text |
.global memcpy |
.global memcopy |
.global cpu_priority_read |
.global memsetb |
.global context_save |
.global context_restore |
.global userspace |
.global before_thread_runs_arch |
.global cpu_identify |
45,11 → 44,10 |
.global asm_delay_loop |
.global dummy |
memcpy: |
memcopy: |
cpu_priority_read: |
memsetb: |
context_save: |
context_restore: |
before_thread_runs_arch: |
userspace: |
calibrate_delay_loop: |
//SPARTAN/trunk/arch/ppc/src/start.S |
---|
35,4 → 35,22 |
kernel_image_start: |
bl early_init |
lis r3, _hardcoded_ktext_size@ha |
addi r3, r3, _hardcoded_ktext_size@l |
lis r4, hardcoded_ktext_size@ha |
addi r4, r4, hardcoded_ktext_size@l |
stw r3, 0(r4) |
lis r3, _hardcoded_kdata_size@ha |
addi r3, r3, _hardcoded_kdata_size@l |
lis r4, hardcoded_kdata_size@ha |
addi r4, r4, hardcoded_kdata_size@l |
stw r3, 0(r4) |
lis r3, _hardcoded_load_address@ha |
addi r3, r3, _hardcoded_load_address@l |
lis r4, hardcoded_load_address@ha |
addi r4, r4, hardcoded_load_address@l |
stw r3, 0(r4) |
b main_bsp |
//SPARTAN/trunk/arch/ppc/_link.ld |
---|
32,5 → 32,4 |
_hardcoded_ktext_size = ktext_end - ktext_start; |
_hardcoded_kdata_size = kdata_end - kdata_start; |
_hardcoded_load_address = 0x80000000; |
} |