Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 1783 → Rev 1784

/kernel/trunk/arch/sparc64/include/console.h
26,16 → 26,15
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
/** @addtogroup sparc64
/** @addtogroup sparc64
* @{
*/
/** @file
*/
 
#ifndef __sparc64_CONSOLE_H__
#define __sparc64_CONSOLE_H__
#ifndef KERN_sparc64_CONSOLE_H_
#define KERN_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);
42,6 → 41,5
 
#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 __sparc64_STACK_H__
#define __sparc64_STACK_H__
#ifndef KERN_sparc64_STACK_H_
#define KERN_sparc64_STACK_H_
 
#define STACK_ITEM_SIZE 8
 
52,6 → 52,5
 
#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,6 → 41,5
 
#endif
 
/** @}
/** @}
*/
 
/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,6 → 99,5
 
#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 __sparc64_ASM_H__
#define __sparc64_ASM_H__
#ifndef KERN_sparc64_ASM_H_
#define KERN_sparc64_ASM_H_
 
#include <typedefs.h>
#include <arch/types.h>
304,8 → 304,6
__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);
312,6 → 310,5
 
#endif
 
/** @}
/** @}
*/
 
/kernel/trunk/arch/sparc64/include/trap/interrupt.h
78,4 → 78,3
 
/** @}
*/
 
/kernel/trunk/arch/sparc64/include/register.h
26,15 → 26,20
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
/** @addtogroup sparc64
/** @addtogroup sparc64
* @{
*/
/** @file
*/
 
#ifndef __sparc64_REGISTER_H__
#define __sparc64_REGISTER_H__
#ifndef KERN_sparc64_REGISTER_H_
#define KERN_sparc64_REGISTER_H_
 
#ifdef __ASM__
#define PSTATE_IE_BIT 2
#define PSTATE_AM_BIT 8
#else
 
#include <arch/types.h>
 
/** Version Register. */
106,6 → 111,7
 
#endif
 
/** @}
#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,6 → 69,5
 
#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 __sparc64_I8042_H__
#define __sparc64_I8042_H__
#ifndef KERN_sparc64_I8042_H_
#define KERN_sparc64_I8042_H_
 
#include <arch/types.h>
 
71,6 → 71,5
 
#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 __sparc64_FB_H__
#define __sparc64_FB_H__
#ifndef KERN_sparc64_FB_H_
#define KERN_sparc64_FB_H_
 
#define FB_PHYS_ADDRESS 0x1c901000000ULL
 
44,6 → 44,5
 
#endif
 
/** @}
/** @}
*/
 
/kernel/trunk/arch/sparc64/src/asm.S
26,6 → 26,9
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
 
#include <arch/stack.h>
#include <arch/register.h>
 
.text
 
.global memcpy
35,6 → 38,7
.global memcpy_to_uspace_failover_address
.global memsetb
 
 
memcpy:
memcpy_from_uspace:
memcpy_to_uspace:
51,3 → 55,20
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
/kernel/trunk/arch/sparc64/src/console.c
51,20 → 51,12
#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. */
71,9 → 63,8
void ofw_sparc64_console_init(void)
{
chardev_initialize("ofw_sparc64_console", &ofw_sparc64_console, &ofw_sparc64_console_ops);
stdin = &ofw_sparc64_console;
stdin = NULL;
stdout = &ofw_sparc64_console;
mutex_initialize(&canwork);
ofw_console_active = 1;
}
 
94,83 → 85,11
*/
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/proc/scheduler.c
26,7 → 26,7
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
/** @addtogroup sparc64proc
/** @addtogroup sparc64proc
* @{
*/
/** @file
79,6 → 79,5
}
}
 
/** @}
/** @}
*/
 
/kernel/trunk/arch/sparc64/src/sparc64.c
40,10 → 40,15
#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();
}
62,14 → 67,6
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/mm/frame.c
26,7 → 26,7
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
/** @addtogroup sparc64mm
/** @addtogroup sparc64mm
* @{
*/
/** @file
51,6 → 51,5
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,6 → 45,5
i8042_init();
}
 
/** @}
/** @}
*/
 
/kernel/trunk/arch/sparc64/src/start.S
27,6 → 27,7
#
 
#include <arch/boot/boot.h>
#include <arch/register.h>
 
.register %g2, #scratch
.register %g3, #scratch
37,8 → 38,6
 
/*
* 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
45,8 → 44,12
kernel_image_start:
flushw ! flush all but the active register window
 
set ofw, %l0
rdpr %pstate, %l0
and %l0, ~PSTATE_AM_BIT, %l0
wrpr %l0, 0, %pstate
 
set ofw_cif, %l0
 
call ofw_init
stx %o4, [%l0]