Changeset 379d73f3 in mainline


Ignore:
Timestamp:
2005-08-30T22:11:45Z (19 years ago)
Author:
Ondrej Palkovsky <ondrap@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c5ae095
Parents:
b524f816
Message:

Added putchar to AMD

Files:
1 added
6 edited
1 moved

Legend:

Unmodified
Added
Removed
  • arch/amd64/Makefile.inc

    rb524f816 r379d73f3  
    1616arch_sources = arch/dummy.s \
    1717        arch/fpu_context.c \
    18         arch/putchar.c \
    1918        arch/boot/boot.S \
    2019        arch/boot/memmap.S \
    2120        arch/pm.c \
    22         arch/context.S
     21        arch/context.S \
     22        arch/drivers/ega.c \
     23        arch/supplib.c
  • arch/amd64/include/asm.h

    rb524f816 r379d73f3  
    3333#include <config.h>
    3434
     35
    3536void asm_delay_loop(__u32 t);
    3637
     
    4344static inline void cpu_sleep(void) { __asm__("hlt"); };
    4445
     46
     47static inline __u8 inb(__u16 port)
     48{
     49        __u8 out;
     50
     51        asm (
     52                "mov %0, %%dx;"
     53                "inb %%dx,%%al;"
     54                "mov %%al, %1;"
     55                :"=m"(out)
     56                :"m"(port)
     57                :"dx","al"
     58                );
     59        return out;
     60}
     61
     62static inline __u8 outb(__u16 port,__u8 b)
     63{
     64        asm (
     65                "mov %0,%%dx;"
     66                "mov %1,%%al;"
     67                "outb %%al,%%dx;"
     68                :
     69                :"m"( port), "m" (b)
     70                :"dx","al"
     71                );
     72}
     73
     74/** Set priority level low
     75 *
     76 * Enable interrupts and return previous
     77 * value of EFLAGS.
     78 */
     79static inline pri_t cpu_priority_low(void) {
     80        pri_t v;
     81        __asm__ volatile (
     82                "pushfq\n"
     83                "popq %0\n"
     84                "sti\n"
     85                : "=r" (v)
     86        );
     87        return v;
     88}
     89
     90/** Set priority level high
     91 *
     92 * Disable interrupts and return previous
     93 * value of EFLAGS.
     94 */
     95static inline pri_t cpu_priority_high(void) {
     96        pri_t v;
     97        __asm__ volatile (
     98                "pushfq\n"
     99                "popq %0\n"
     100                "cli\n"
     101                : "=r" (v)
     102                );
     103        return v;
     104}
     105
     106/** Restore priority level
     107 *
     108 * Restore EFLAGS.
     109 */
     110static inline void cpu_priority_restore(pri_t pri) {
     111        __asm__ volatile (
     112                "pushq %0\n"
     113                "popfq\n"
     114                : : "r" (pri)
     115                );
     116}
     117
     118
    45119#endif
  • arch/amd64/src/dummy.s

    rb524f816 r379d73f3  
    2929.text
    3030
    31 .global memcopy
    32 .global memcpy
    3331.global cpu_priority_high
    3432.global cpu_priority_low
    3533.global cpu_priority_read
    3634.global cpu_priority_restore
    37 .global memsetb
    3835.global userspace
    3936.global before_thread_runs_arch
     
    5552.global asm_delay_loop
    5653
    57 memcpy:
    58 memcopy:
    5954cpu_priority_high:
    6055cpu_priority_low:
    6156cpu_priority_restore:
    6257cpu_priority_read:
    63 memsetb:
    6458asm_delay_loop:
    6559before_thread_runs_arch:
  • arch/amd64/src/supplib.c

    rb524f816 r379d73f3  
    11/*
    2  * Copyright (C) 2005 Martin Decky
     2 * Copyright (C) 2005 Ondrej Palkovsky
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29 #include <putchar.h>
    30 #include <arch/types.h>
     29#include <memstr.h>
    3130
     31/* TODO: Rewrite to assembler */
    3232
    33 void putchar(const char ch)
     33char *memcpy(void *dst, const void *src, size_t cnt)
    3434{
     35        _memcopy(dst, src, cnt);
    3536}
     37
     38char *memcopy(void * dst, const void *src, size_t cnt)
     39{
     40        _memcopy(dst, src, cnt);
     41}
     42
     43void memsetw(__address dst, size_t cnt, __u16 x)
     44{
     45        _memsetw(dst, cnt, x);
     46}
     47
     48void memsetb(__address dst, size_t cnt, __u8 x)
     49{
     50        _memsetb(dst, cnt, x);
     51}
     52
  • include/memstr.h

    rb524f816 r379d73f3  
    3333#include <arch/types.h>
    3434
     35extern char *memcpy(void * dst, const void *src, size_t cnt);
    3536extern char *memcopy(void * dst, const void *src, size_t cnt);
    3637
     
    4546extern char *_memcopy(void *dst, const void *src, size_t cnt);
    4647extern void _memsetb(__address dst, size_t cnt, __u8 x);
     48extern void _memsetw(__address dst, size_t cnt, __u16 x);
    4749
    4850#endif
  • src/build.amd64

    rb524f816 r379d73f3  
    22
    33set -e
     4# Generate context_offset.h
     5(cd ../arch/amd64/src;make gencontext;./gencontext)
     6# Create links to ia32 architecture
     7ln -sf ../../../arch/ia32/src/drivers ../arch/amd64/src/
     8ln -sf ../../../arch/ia32/include/ega.h ../arch/amd64/include/
    49
    5 (cd ../arch/amd64/src;make gencontext;./gencontext)
    610make all ARCH=amd64
  • src/lib/memstr.c

    rb524f816 r379d73f3  
    7171                p[i] = x;
    7272}
     73
     74/** Fill block of memory
     75 *
     76 * Fill cnt words at dst address with the value x.
     77 * The filling is done word-by-word.
     78 *
     79 * @param dst Origin address to fill.
     80 * @param cnt Number of words to fill.
     81 * @param x   Value to fill.
     82 *
     83 */
     84void _memsetw(__address dst, size_t cnt, __u16 x)
     85{
     86        int i;
     87        __u8 *p = (__u8 *) dst;
     88       
     89        for(i=0; i<cnt; i++)
     90                p[i] = x;       
     91}
Note: See TracChangeset for help on using the changeset viewer.