Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 425 → Rev 426

/SPARTAN/trunk/build.sparc64
1,3 → 1,6
#! /bin/sh
 
# Generate context_offset.h
(cd tools/sparc64/;make gencontext;./gencontext)
 
make all ARCH=sparc64
/SPARTAN/trunk/tools/sparc64/gencontext.c
0,0 → 1,49
#include <stdio.h>
 
typedef long long __u64;
typedef __u64 ipl_t;
typedef __u64 __address;
 
#define __sparc64_TYPES_H__
#define __ALIGN_H__
 
#include "../../arch/sparc64/include/context.h"
 
#define FILENAME "../../arch/sparc64/include/context_offset.h"
 
int main(void)
{
FILE *f;
struct context *pctx = NULL;
 
f = fopen(FILENAME,"w");
if (!f) {
perror(FILENAME);
return 1;
}
 
fprintf(f, "/* This file is automatically generated by %s. */\n", __FILE__);
 
fprintf(f,"/* struct context */\n");
 
fprintf(f,"#define OFFSET_SP 0x%x\n",((int)&pctx->sp) - (int )pctx);
fprintf(f,"#define OFFSET_PC 0x%x\n",((int)&pctx->pc) - (int )pctx);
fprintf(f,"#define OFFSET_L0 0x%x\n",((int)&pctx->l0) - (int )pctx);
fprintf(f,"#define OFFSET_L1 0x%x\n",((int)&pctx->l1) - (int )pctx);
fprintf(f,"#define OFFSET_L2 0x%x\n",((int)&pctx->l2) - (int )pctx);
fprintf(f,"#define OFFSET_L3 0x%x\n",((int)&pctx->l3) - (int )pctx);
fprintf(f,"#define OFFSET_L4 0x%x\n",((int)&pctx->l4) - (int )pctx);
fprintf(f,"#define OFFSET_L5 0x%x\n",((int)&pctx->l5) - (int )pctx);
fprintf(f,"#define OFFSET_L6 0x%x\n",((int)&pctx->l6) - (int )pctx);
fprintf(f,"#define OFFSET_L7 0x%x\n",((int)&pctx->l7) - (int )pctx);
fprintf(f,"#define OFFSET_I1 0x%x\n",((int)&pctx->i1) - (int )pctx);
fprintf(f,"#define OFFSET_I2 0x%x\n",((int)&pctx->i2) - (int )pctx);
fprintf(f,"#define OFFSET_I3 0x%x\n",((int)&pctx->i3) - (int )pctx);
fprintf(f,"#define OFFSET_I4 0x%x\n",((int)&pctx->i4) - (int )pctx);
fprintf(f,"#define OFFSET_I5 0x%x\n",((int)&pctx->i5) - (int )pctx);
 
fclose(f);
 
return 0;
}
/SPARTAN/trunk/clean.sparc64
1,3 → 1,6
#! /bin/sh
 
make dist-clean ARCH=sparc64
 
rm tools/sparc64/gencontext
rm arch/sparc64/include/context_offset.h
/SPARTAN/trunk/genarch/include/firmware/ofw/ofw.h
26,8 → 26,8
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
#ifndef __ppc32_OFW_H__
#define __ppc32_OFW_H__
#ifndef __OFW_H__
#define __OFW_H__
 
#include <arch/types.h>
 
58,6 → 58,5
extern phandle ofw_find_device(const char *name);
extern int ofw_get_property(const phandle device, const char *name, void *buf, const int buflen);
extern void *ofw_claim(const void *addr, const int size, const int align);
extern void putchar(const char ch);
 
#endif
/SPARTAN/trunk/genarch/src/firmware/ofw/ofw.c
98,8 → 98,3
{
return (void *) ofw_call("claim", 3, 1, addr, size, align);
}
 
void putchar(const char ch)
{
ofw_putchar(ch);
}
/SPARTAN/trunk/arch/sparc64/include/types.h
35,8 → 35,8
 
typedef unsigned char __u8;
typedef unsigned short __u16;
typedef unsigned long __u32;
typedef long long __u64;
typedef unsigned int __u32;
typedef unsigned long __u64;
 
typedef __u64 __address;
 
/SPARTAN/trunk/arch/sparc64/include/arg.h
29,6 → 29,6
#ifndef __sparc64_ARG_H__
#define __sparc64_ARG_H__
 
#include <stackarg.h>
#include <stdarg.h>
 
#endif
/SPARTAN/trunk/arch/sparc64/include/asm.h
78,6 → 78,11
*/
static inline __address get_stack_base(void)
{
__address v;
__asm__ volatile ("and %%o6, %1, %0\n" : "=r" (v) : "r" (~(STACK_SIZE-1)));
return v;
}
 
void cpu_halt(void);
/SPARTAN/trunk/arch/sparc64/include/context.h
29,10 → 29,15
#ifndef __sparc64_CONTEXT_H__
#define __sparc64_CONTEXT_H__
 
#include <arch/types.h>
#include <typedefs.h>
#include <align.h>
#ifndef __sparc64_TYPES_H__
# include <arch/types.h>
#endif
 
#ifndef __ALIGN_H__
# include <align.h>
#endif
 
#define STACK_ALIGNMENT 8
#define STACK_ITEM_SIZE 8
 
/*
40,16 → 45,35
*/
#define SP_DELTA (0+STACK_ITEM_SIZE)
 
#ifdef context_set
#undef context_set
#endif
 
#define context_set(c, _pc, stack, size) \
(c)->pc = ((__address) _pc) - 8; \
(c)->sp = ((__address) stack) + (ALIGN((size), STACK_ALIGNMENT) + 1) - SP_DELTA;
 
/*
* Only save registers that must be preserved across
* function calls.
*/
struct context {
 
__address bsp;
__address sp;
__address pc;
__u64 l0;
__u64 l1;
__u64 l2;
__u64 l3;
__u64 l4;
__u64 l5;
__u64 l6;
__u64 l7;
__u64 i1;
__u64 i2;
__u64 i3;
__u64 i4;
__u64 i5;
__address sp; /* %i6 */
__address pc; /* %i7 */
ipl_t ipl;
} __attribute__ ((packed));
};
 
#endif
/SPARTAN/trunk/arch/sparc64/Makefile.inc
14,11 → 14,17
ASFLAGS=
 
DEFS=-DARCH=$(ARCH)
CFLAGS=$(DEFS) -nostdlib -fno-builtin -O2
CFLAGS=$(DEFS) -nostdlib -fno-builtin -mcpu=ultrasparc -m64 -O2
LFLAGS=-M -no-check-sections -N
 
arch_sources= \
src/arch/asm.S \
src/arch/console.c \
src/arch/context.S \
src/arch/dummy.s \
src/arch/sparc64.c \
src/arch/start.S \
src/arch/sparc64.c
src/arch/mm/frame.c \
src/arch/mm/page.c
 
/SPARTAN/trunk/arch/sparc64/src/asm.S
0,0 → 1,41
#
# Copyright (C) 2005 Jakub Jermar
# 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.
#
 
.text
 
.global memcpy
.global memsetb
 
memcpy:
b _memcpy
nop
 
memsetb:
b _memsetb
nop
 
/SPARTAN/trunk/arch/sparc64/src/console.c
0,0 → 1,41
/*
* Copyright (C) 2005 Jakub Jermar
* 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 <putchar.h>
#include <genarch/firmware/ofw/ofw.h>
 
/** Print one character.
*
* @param ch Character to be printed.
*/
void putchar(const char ch)
{
if (ch == '\n')
ofw_putchar('\r');
ofw_putchar(ch);
}
/SPARTAN/trunk/arch/sparc64/src/context.S
0,0 → 1,91
#
# Copyright (C) 2005 Jakub Jermar
# 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.
#
 
#define __ASM__
#include <arch/context_offset.h>
.text
 
.global context_save_arch
.global context_restore_arch
 
.macro CONTEXT_STORE r
stx %l0, [\r + OFFSET_L0]
stx %l1, [\r + OFFSET_L1]
stx %l2, [\r + OFFSET_L2]
stx %l3, [\r + OFFSET_L3]
stx %l4, [\r + OFFSET_L4]
stx %l5, [\r + OFFSET_L5]
stx %l6, [\r + OFFSET_L6]
stx %l7, [\r + OFFSET_L7]
stx %i1, [\r + OFFSET_I1]
stx %i2, [\r + OFFSET_I2]
stx %i3, [\r + OFFSET_I3]
stx %i4, [\r + OFFSET_I4]
stx %i5, [\r + OFFSET_I5]
stx %i6, [\r + OFFSET_SP]
stx %i7, [\r + OFFSET_PC]
.endm
 
.macro CONTEXT_LOAD r
ldx [\r + OFFSET_L0], %l0
ldx [\r + OFFSET_L1], %l1
ldx [\r + OFFSET_L2], %l2
ldx [\r + OFFSET_L3], %l3
ldx [\r + OFFSET_L4], %l4
ldx [\r + OFFSET_L5], %l5
ldx [\r + OFFSET_L6], %l6
ldx [\r + OFFSET_L7], %l7
ldx [\r + OFFSET_I1], %i1
ldx [\r + OFFSET_I2], %i2
ldx [\r + OFFSET_I3], %i3
ldx [\r + OFFSET_I4], %i4
ldx [\r + OFFSET_I5], %i5
ldx [\r + OFFSET_SP], %i6
ldx [\r + OFFSET_PC], %i7
ldx [\r + OFFSET_SP], %sp
.endm
 
context_save_arch:
save %sp, 0, %sp
CONTEXT_STORE %i0
 
# context_save returns 1
mov 1, %i0
ret
restore %sp, 0, %sp
context_restore_arch:
save %sp, 0, %sp
CONTEXT_LOAD %i0
 
# context_restore returns 0
xor %i0, %i0, %i0
ret
restore %sp, 0, %sp
/SPARTAN/trunk/arch/sparc64/src/mm/frame.c
0,0 → 1,43
/*
* Copyright (C) 2005 Jakub Jermar
* 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/mm/frame.h>
#include <mm/frame.h>
#include <config.h>
#include <panic.h>
 
void frame_arch_init(void)
{
zone_t *z;
z = zone_create(0, config.memory_size, 0);
if (!z) {
panic("Can't allocate zone (%dB).\n", config.memory_size);
}
zone_attach(z);
}
/SPARTAN/trunk/arch/sparc64/src/mm/page.c
0,0 → 1,33
/*
* Copyright (C) 2005 Jakub Jermar
* 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/mm/page.h>
 
void page_arch_init(void)
{
}
/SPARTAN/trunk/arch/sparc64/src/dummy.s
30,8 → 30,6
 
.global asm_delay_loop
.global before_thread_runs_arch
.global context_restore_arch
.global context_save_arch
.global cpu_arch_init
.global cpu_halt
.global cpu_identify
46,10 → 44,6
.global fpu_context_save
.global fpu_enable
.global fpu_init
.global frame_arch_init
.global memcpy
.global memsetb
.global page_arch_init
.global panic_printf
.global userspace
 
57,8 → 51,6
 
asm_delay_loop:
before_thread_runs_arch:
context_restore_arch:
context_save_arch:
cpu_arch_init:
cpu_halt:
cpu_identify:
73,10 → 65,6
fpu_context_save:
fpu_enable:
fpu_init:
frame_arch_init:
memcpy:
memsetb:
page_arch_init:
panic_printf:
userspace:
 
/SPARTAN/trunk/arch/sparc64/src/start.S
26,6 → 26,11
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
 
.register %g2, #scratch
.register %g3, #scratch
.register %g6, #scratch
.register %g7, #scratch
 
.section K_TEXT_START, "ax"
 
.global kernel_image_start
51,7 → 56,11
call ofw_init
nop
 
call main_bsp
nop
 
/* Not reached. */
 
2:
b 2b
nop
 
/SPARTAN/trunk/arch/sparc64/_link.ld
30,7 → 30,7
hardcoded_kdata_size = .;
LONG(kdata_end - kdata_start);
hardcoded_load_address = .;
LONG(0x4000);
QUAD(0x4000);
*(.bss); /* uninitialized static variables */
*(COMMON); /* global variables */
 
/SPARTAN/trunk/arch/ppc32/Makefile.inc
18,6 → 18,7
LFLAGS=-M -no-check-sections -N
 
arch_sources= \
src/arch/console.c \
src/arch/context.S \
src/arch/debug/panic.s \
src/arch/fpu_context.c \
/SPARTAN/trunk/arch/ppc32/src/console.c
0,0 → 1,39
/*
* Copyright (C) 2005 Jakub Jermar
* 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 <putchar.h>
#include <genarch/firmware/ofw/ofw.h>
 
/** Print one character.
*
* @param ch Character to be printed.
*/
void putchar(const char ch)
{
ofw_putchar(ch);
}
/SPARTAN/trunk/arch/mips32/include/arg.h
29,8 → 29,6
#ifndef __mips32_ARG_H__
#define __mips32_ARG_H__
 
//#include <stackarg.h>
 
#include <arch/types.h>
 
typedef struct va_list {
39,13 → 37,13
} va_list;
 
#define va_start(ap, lst) \
(ap).pos = sizeof(lst); \
(ap).pos = sizeof(lst); \
(ap).last = (__u8 *) &(lst)
 
/**
* va_arg macro for MIPS32 - problem is that 64 bit values must be aligned on an 8-byte boundary (32bit values not)
* To satisfy this, paddings must be sometimes inserted.
*/
* va_arg macro for MIPS32 - problem is that 64 bit values must be aligned on an 8-byte boundary (32bit values not)
* To satisfy this, paddings must be sometimes inserted.
*/
#define va_arg(ap, type) \
(*((type *)((ap).last + ((ap).pos += sizeof(type) + ((sizeof(type)==8)&&(((ap).pos)&(4))?4:0)) - sizeof(type))))