Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 1784 → Rev 1780

/kernel/trunk/arch/sparc64/include/atomic.h
26,7 → 26,7
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
/** @addtogroup sparc64
/** @addtogroup sparc64
* @{
*/
/** @file
99,5 → 99,6
 
#endif
 
/** @}
/** @}
*/
 
/kernel/trunk/arch/sparc64/include/asm.h
26,14 → 26,14
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
/** @addtogroup sparc64
/** @addtogroup sparc64
* @{
*/
/** @file
*/
 
#ifndef KERN_sparc64_ASM_H_
#define KERN_sparc64_ASM_H_
#ifndef __sparc64_ASM_H__
#define __sparc64_ASM_H__
 
#include <typedefs.h>
#include <arch/types.h>
304,6 → 304,8
__asm__ volatile ("stxa %0, [%1] %2\n" : : "r" (v), "r" (va), "i" (asi) : "memory");
}
 
 
 
void cpu_halt(void);
void cpu_sleep(void);
void asm_delay_loop(uint32_t t);
310,5 → 312,6
 
#endif
 
/** @}
/** @}
*/
 
/kernel/trunk/arch/sparc64/include/trap/interrupt.h
78,3 → 78,4
 
/** @}
*/
 
/kernel/trunk/arch/sparc64/include/register.h
26,20 → 26,15
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
/** @addtogroup sparc64
/** @addtogroup sparc64
* @{
*/
/** @file
*/
 
#ifndef KERN_sparc64_REGISTER_H_
#define KERN_sparc64_REGISTER_H_
#ifndef __sparc64_REGISTER_H__
#define __sparc64_REGISTER_H__
 
#ifdef __ASM__
#define PSTATE_IE_BIT 2
#define PSTATE_AM_BIT 8
#else
 
#include <arch/types.h>
 
/** Version Register. */
111,7 → 106,6
 
#endif
 
#endif
/** @}
*/
 
/** @}
*/
/kernel/trunk/arch/sparc64/include/drivers/i8042.h
26,14 → 26,14
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
/** @addtogroup sparc64
/** @addtogroup sparc64
* @{
*/
/** @file
*/
 
#ifndef KERN_sparc64_I8042_H_
#define KERN_sparc64_I8042_H_
#ifndef __sparc64_I8042_H__
#define __sparc64_I8042_H__
 
#include <arch/types.h>
 
71,5 → 71,6
 
#endif
 
/** @}
/** @}
*/
 
/kernel/trunk/arch/sparc64/include/drivers/fb.h
26,14 → 26,14
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
/** @addtogroup sparc64
/** @addtogroup sparc64
* @{
*/
/** @file
*/
 
#ifndef KERN_sparc64_FB_H_
#define KERN_sparc64_FB_H_
#ifndef __sparc64_FB_H__
#define __sparc64_FB_H__
 
#define FB_PHYS_ADDRESS 0x1c901000000ULL
 
44,5 → 44,6
 
#endif
 
/** @}
/** @}
*/
 
/kernel/trunk/arch/sparc64/include/console.h
26,15 → 26,16
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
/** @addtogroup sparc64
/** @addtogroup sparc64
* @{
*/
/** @file
*/
 
#ifndef KERN_sparc64_CONSOLE_H_
#define KERN_sparc64_CONSOLE_H_
#ifndef __sparc64_CONSOLE_H__
#define __sparc64_CONSOLE_H__
 
extern void kofwinput(void *arg);
extern void kkbdpoll(void *arg);
extern void ofw_sparc64_console_init(void);
extern void standalone_sparc64_console_init(void);
41,5 → 42,6
 
#endif
 
/** @}
/** @}
*/
 
/kernel/trunk/arch/sparc64/include/stack.h
26,14 → 26,14
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
/** @addtogroup sparc64
/** @addtogroup sparc64
* @{
*/
/** @file
*/
 
#ifndef KERN_sparc64_STACK_H_
#define KERN_sparc64_STACK_H_
#ifndef __sparc64_STACK_H__
#define __sparc64_STACK_H__
 
#define STACK_ITEM_SIZE 8
 
52,5 → 52,6
 
#endif
 
/** @}
/** @}
*/
 
/kernel/trunk/arch/sparc64/include/elf.h
26,7 → 26,7
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
/** @addtogroup sparc64
/** @addtogroup sparc64
* @{
*/
/** @file
41,5 → 41,6
 
#endif
 
/** @}
/** @}
*/
 
/kernel/trunk/arch/sparc64/include/barrier.h
26,7 → 26,7
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
/** @addtogroup sparc64
/** @addtogroup sparc64
* @{
*/
/** @file
69,5 → 69,6
 
#endif
 
/** @}
/** @}
*/
 
/kernel/trunk/arch/sparc64/src/proc/scheduler.c
26,7 → 26,7
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
/** @addtogroup sparc64proc
/** @addtogroup sparc64proc
* @{
*/
/** @file
79,5 → 79,6
}
}
 
/** @}
/** @}
*/
 
/kernel/trunk/arch/sparc64/src/mm/frame.c
26,7 → 26,7
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
/** @addtogroup sparc64mm
/** @addtogroup sparc64mm
* @{
*/
/** @file
51,5 → 51,6
frame_mark_unavailable(0, 1);
}
 
/** @}
/** @}
*/
 
/kernel/trunk/arch/sparc64/src/mm/memory_init.c
26,7 → 26,7
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
/** @addtogroup sparc64mm
/** @addtogroup sparc64mm
* @{
*/
/** @file
41,6 → 41,6
return ofw_get_memory_size();
}
 
/** @}
/** @}
*/
 
/kernel/trunk/arch/sparc64/src/drivers/i8042.c
26,7 → 26,7
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
/** @addtogroup sparc64
/** @addtogroup sparc64
* @{
*/
/** @file
45,5 → 45,6
i8042_init();
}
 
/** @}
/** @}
*/
 
/kernel/trunk/arch/sparc64/src/start.S
27,7 → 27,6
#
 
#include <arch/boot/boot.h>
#include <arch/register.h>
 
.register %g2, #scratch
.register %g3, #scratch
38,6 → 37,8
 
/*
* Here is where the kernel is passed control.
* The code must be position independent until
* the kernel relocates itself to its VMA.
*/
 
.global kernel_image_start
44,12 → 45,8
kernel_image_start:
flushw ! flush all but the active register window
 
rdpr %pstate, %l0
and %l0, ~PSTATE_AM_BIT, %l0
wrpr %l0, 0, %pstate
set ofw, %l0
 
set ofw_cif, %l0
 
call ofw_init
stx %o4, [%l0]
 
/kernel/trunk/arch/sparc64/src/console.c
51,12 → 51,20
#define KEYBOARD_POLL_PAUSE 50000 /* 50ms */
 
static void ofw_sparc64_putchar(chardev_t *d, const char ch);
static char ofw_sparc64_getchar(chardev_t *d);
static void ofw_sparc64_suspend(chardev_t *d);
static void ofw_sparc64_resume(chardev_t *d);
 
mutex_t canwork;
 
static volatile int ofw_console_active;
 
static chardev_t ofw_sparc64_console;
static chardev_operations_t ofw_sparc64_console_ops = {
.write = ofw_sparc64_putchar,
.read = ofw_sparc64_getchar,
.resume = ofw_sparc64_resume,
.suspend = ofw_sparc64_suspend
};
 
/** Initialize kernel console to use OpenFirmware services. */
63,8 → 71,9
void ofw_sparc64_console_init(void)
{
chardev_initialize("ofw_sparc64_console", &ofw_sparc64_console, &ofw_sparc64_console_ops);
stdin = NULL;
stdin = &ofw_sparc64_console;
stdout = &ofw_sparc64_console;
mutex_initialize(&canwork);
ofw_console_active = 1;
}
 
85,11 → 94,83
*/
void ofw_sparc64_putchar(chardev_t *d, const char ch)
{
pstate_reg_t pstate;
 
/*
* 32-bit OpenFirmware depends on PSTATE.AM bit set.
*/
pstate.value = pstate_read();
pstate.am = true;
pstate_write(pstate.value);
 
if (ch == '\n')
ofw_putchar('\r');
ofw_putchar(ch);
pstate.am = false;
pstate_write(pstate.value);
}
 
/** Read one character using OpenFirmware.
*
* The call is non-blocking.
*
* @param d Character device (ignored).
* @return Character read or zero if no character was read.
*/
char ofw_sparc64_getchar(chardev_t *d)
{
char ch;
pstate_reg_t pstate;
 
/*
* 32-bit OpenFirmware depends on PSTATE.AM bit set.
*/
pstate.value = pstate_read();
pstate.am = true;
pstate_write(pstate.value);
 
ch = ofw_getchar();
pstate.am = false;
pstate_write(pstate.value);
return ch;
}
 
void ofw_sparc64_suspend(chardev_t *d)
{
mutex_lock(&canwork);
}
 
void ofw_sparc64_resume(chardev_t *d)
{
mutex_unlock(&canwork);
}
 
/** Kernel thread for pushing characters read from OFW to input buffer.
*
* @param arg Ignored.
*/
void kofwinput(void *arg)
{
 
while (ofw_console_active) {
char ch = 0;
mutex_lock(&canwork);
mutex_unlock(&canwork);
ch = ofw_sparc64_getchar(NULL);
if (ch) {
if (ch == '\r')
ch = '\n';
chardev_push_character(&ofw_sparc64_console, ch);
}
thread_usleep(KEYBOARD_POLL_PAUSE);
}
}
 
/** Kernel thread for polling keyboard.
*
* @param arg Ignored.
/kernel/trunk/arch/sparc64/src/sparc64.c
40,15 → 40,10
#include <proc/thread.h>
#include <console/console.h>
 
#include <print.h>
#include <genarch/ofw/ofw.h>
#include <arch/asm.h>
#include <arch/register.h>
void arch_pre_mm_init(void)
{
interrupts_disable();
ofw_sparc64_console_init();
 
trap_init();
tick_init();
}
67,6 → 62,14
thread_t *t;
 
/*
* Create thread that reads characters from OFW's input.
*/
t = thread_create(kofwinput, NULL, TASK, 0, "kofwinput");
if (!t)
panic("cannot create kofwinput\n");
thread_ready(t);
 
/*
* Create thread that polls keyboard.
*/
t = thread_create(kkbdpoll, NULL, TASK, 0, "kkbdpoll");
/kernel/trunk/arch/sparc64/src/asm.S
26,9 → 26,6
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
 
#include <arch/stack.h>
#include <arch/register.h>
 
.text
 
.global memcpy
38,7 → 35,6
.global memcpy_to_uspace_failover_address
.global memsetb
 
 
memcpy:
memcpy_from_uspace:
memcpy_to_uspace:
55,20 → 51,3
b _memsetb
nop
 
.global ofw
ofw:
save %sp, -STACK_WINDOW_SAVE_AREA_SIZE, %sp
set ofw_cif, %l0
ldx [%l0], %l0
 
rdpr %pstate, %l1
and %l1, ~PSTATE_AM_BIT, %l2
wrpr %l2, 0, %pstate
jmpl %l0, %o7
mov %i0, %o0
wrpr %l1, 0, %pstate
 
ret
restore %o0, 0, %o0