Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 195 → Rev 197

/SPARTAN/trunk/arch/amd64/include/asm.h
32,6 → 32,8
#include <arch/types.h>
#include <config.h>
 
void asm_delay_loop(__u32 t);
 
/* TODO: implement the real stuff */
static inline __address get_stack_base(void)
{
38,4 → 40,6
return NULL;
}
 
static inline void cpu_sleep(void) { __asm__("hlt"); };
 
#endif
/SPARTAN/trunk/arch/amd64/include/context.h
29,15 → 29,25
#ifndef __amd64_CONTEXT_H__
#define __amd64_CONTEXT_H__
 
#include <arch/types.h>
#ifndef __amd64_TYPES_H__
# include <arch/types.h>
#endif
 
#define SP_DELTA 0
#define SP_DELTA 8
 
struct context {
__u64 sp;
__u64 pc;
pri_t pri;
__u64 sp;
__u64 pc;
__u64 rbx;
__u64 rbp;
 
__u64 r12;
__u64 r13;
__u64 r14;
__u64 r15;
 
pri_t pri;
} __attribute__ ((packed));
 
#endif
/SPARTAN/trunk/arch/amd64/include/types.h
26,8 → 26,8
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
#ifndef __TYPES_H__
#define __TYPES_H__
#ifndef __amd64_TYPES_H__
#define __amd64_TYPES_H__
 
#define NULL 0
 
40,7 → 40,8
 
typedef __u64 __address;
 
typedef __u32 pri_t;
/* Flags of processor (return value of cpu_priority_high()) */
typedef __u64 pri_t;
 
typedef __u64 __native;
 
/SPARTAN/trunk/arch/amd64/Makefile.inc
18,4 → 18,5
arch/putchar.c \
arch/boot/boot.S \
arch/boot/memmap.S \
arch/pm.c
arch/pm.c \
arch/context.S
/SPARTAN/trunk/arch/amd64/src/context.S
0,0 → 1,78
#
# Copyright (C) 2001-2004 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 context_save
.global context_restore
 
#include "context_offset.h"
 
## Save current CPU context
#
# Save CPU context to the kernel_context variable
# pointed by the 1st argument. Returns 1 in EAX.
#
context_save:
movq (%rsp), %rdx # the caller's return %eip
# In %edi is passed 1st argument
movq %rdx, OFFSET_PC(%rdi)
movq %rsp, OFFSET_SP(%rdi)
movq %rbx, OFFSET_RBX(%rdi)
movq %rbp, OFFSET_RBP(%rdi)
movq %r12, OFFSET_R12(%rdi)
movq %r13, OFFSET_R13(%rdi)
movq %r14, OFFSET_R14(%rdi)
movq %r15, OFFSET_R15(%rdi)
xorq %rax,%rax # context_save returns 1
incq %rax
ret
 
 
## Restore current CPU context
#
# Restore CPU context from the kernel_context variable
# pointed by the 1st argument. Returns 0 in EAX.
#
context_restore:
movq OFFSET_R15(%rdi), %r15
movq OFFSET_R14(%rdi), %r14
movq OFFSET_R13(%rdi), %r13
movq OFFSET_R12(%rdi), %r12
movq OFFSET_RBP(%rdi), %rbp
movq OFFSET_RBX(%rdi), %rbx
movq OFFSET_SP(%rdi), %rsp # ctx->sp -> %rsp
movq OFFSET_PC(%rdi), %rdx
movq %rdx,(%rsp)
 
xorq %rax,%rax # context_restore returns 0
ret
/SPARTAN/trunk/arch/amd64/src/dummy.s
29,13 → 29,12
.text
 
.global memcopy
.global memcpy
.global cpu_priority_high
.global cpu_priority_low
.global cpu_priority_read
.global cpu_priority_restore
.global memsetb
.global context_save
.global context_restore
.global userspace
.global before_thread_runs_arch
.global panic_printf
53,7 → 52,9
.global page_arch_init
.global frame_arch_init
.global dummy
.global asm_delay_loop
 
memcpy:
memcopy:
cpu_priority_high:
cpu_priority_low:
60,8 → 61,7
cpu_priority_restore:
cpu_priority_read:
memsetb:
context_save:
context_restore:
asm_delay_loop:
before_thread_runs_arch:
userspace:
calibrate_delay_loop: