Merge branch 'qemu_uart' into vogel

This commit is contained in:
Steffen Vogel 2013-10-10 11:42:27 +02:00 committed by Steffen Vogel
commit e757ac5c08
5 changed files with 22 additions and 23 deletions

View file

@ -96,7 +96,7 @@ $(NAME).elf:
$Q$(OBJCOPY_FOR_TARGET) $(STRIP_DEBUG) $(OUTPUT_FORMAT) $(NAME).elf $Q$(OBJCOPY_FOR_TARGET) $(STRIP_DEBUG) $(OUTPUT_FORMAT) $(NAME).elf
qemu: newlib tools $(NAME).elf qemu: newlib tools $(NAME).elf
$(QEMU) -monitor stdio -smp 2 -net nic,model=rtl8139 -net user,hostfwd=tcp::12345-:4711 -net dump -kernel metalsvm.elf -initrd tools/initrd.img $(QEMU) -monitor stdio -serial tcp::12346,server -smp 2 -net nic,model=rtl8139 -net user,hostfwd=tcp::12345-:4711 -net dump -kernel metalsvm.elf -initrd tools/initrd.img
qemudbg: newlib tools $(NAME).elf qemudbg: newlib tools $(NAME).elf
$(QEMU) -s -S -smp 2 -net nic,model=rtl8139 -net user,hostfwd=tcp::12345-:4711 -net dump -kernel metalsvm.elf -initrd tools/initrd.img $(QEMU) -s -S -smp 2 -net nic,model=rtl8139 -net user,hostfwd=tcp::12345-:4711 -net dump -kernel metalsvm.elf -initrd tools/initrd.img

View file

@ -102,7 +102,7 @@ inline static void outportl(unsigned short _port, unsigned int _data)
inline static void uart_putchar(unsigned char _data) inline static void uart_putchar(unsigned char _data)
{ {
outportb(0x2F8, _data); outportb(UART_PORT, _data);
} }
/** /**

View file

@ -86,11 +86,12 @@ static ssize_t stdio_write(fildes_t* file, uint8_t* buffer, size_t size)
for (i = 0; i<size; i++, buffer++) { for (i = 0; i<size; i++, buffer++) {
#ifdef CONFIG_VGA #ifdef CONFIG_VGA
vga_putchar(*buffer); vga_putchar(*buffer);
#elif defined(CONFIG_UART)
uart_putchar(*buffer);
#else
kputchar(*buffer);
#endif #endif
#ifdef CONFIG_UART
uart_putchar(*buffer);
#endif
kputchar(*buffer);
} }
file->offset += size; file->offset += size;

View file

@ -34,14 +34,14 @@ extern "C" {
#define PAGE_SHIFT 12 #define PAGE_SHIFT 12
#define CACHE_LINE 64 #define CACHE_LINE 64
#define MAILBOX_SIZE 32 #define MAILBOX_SIZE 32
#define TIMER_FREQ 100 /* in HZ */ #define TIMER_FREQ 100 // in HZ
#define CLOCK_TICK_RATE 1193182 /* 8254 chip's internal oscillator frequency */ #define CLOCK_TICK_RATE 1193182 // 8254 chip's internal oscillator frequency
#define INT_SYSCALL 0x80 #define INT_SYSCALL 0x80
#define KERNEL_SPACE (1*1024*1024*1024) #define KERNEL_SPACE (1*1024*1024*1024)
#define VIDEO_MEM_ADDR 0xB8000 // the video memora address #define VIDEO_MEM_ADDR 0xB8000 // the video memory address
#define SMP_SETUP_ADDR 0x07000 #define SMP_SETUP_ADDR 0x07000
#define UART_PORT 0x3F8 // 0x2F8 for SCC
#define BYTE_ORDER LITTLE_ENDIAN #define BYTE_ORDER LITTLE_ENDIAN
/* /*
* address space / (page_size * sizeof(uint8_t)) * address space / (page_size * sizeof(uint8_t))
@ -52,7 +52,7 @@ extern "C" {
#define CONFIG_PCI #define CONFIG_PCI
#define CONFIG_LWIP #define CONFIG_LWIP
#define CONFIG_VGA #define CONFIG_VGA
//#define CONFIG_UART #define CONFIG_UART
#define CONFIG_KEYBOARD #define CONFIG_KEYBOARD
#define CONFIG_MULTIBOOT #define CONFIG_MULTIBOOT
//#define CONFIG_ROCKCREEK //#define CONFIG_ROCKCREEK
@ -72,7 +72,7 @@ extern "C" {
//#define SHMADD //#define SHMADD
#define SHMDBG #define SHMDBG
//#define SHMADD_CACHEABLE //#define SHMADD_CACHEABLE
#define SCC_BOOTINFO 0x80000 #define SCC_BOOTINFO 0x80000
#define BUILTIN_EXPECT(exp, b) __builtin_expect((exp), (b)) #define BUILTIN_EXPECT(exp, b) __builtin_expect((exp), (b))
//#define BUILTIN_EXPECT(exp, b) (exp) //#define BUILTIN_EXPECT(exp, b) (exp)

View file

@ -34,13 +34,7 @@
#define VGA_EARLY_PRINT 1 #define VGA_EARLY_PRINT 1
#define UART_EARLY_PRINT 2 #define UART_EARLY_PRINT 2
#ifdef CONFIG_VGA
static uint32_t early_print = VGA_EARLY_PRINT;
#elif defined(CONFIG_UART)
static uint32_t early_print = UART_EARLY_PRINT;
#else
static uint32_t early_print = NO_EARLY_PRINT; static uint32_t early_print = NO_EARLY_PRINT;
#endif
static spinlock_irqsave_t olock = SPINLOCK_IRQSAVE_INIT; static spinlock_irqsave_t olock = SPINLOCK_IRQSAVE_INIT;
static atomic_int32_t kmsg_counter = ATOMIC_INIT(0); static atomic_int32_t kmsg_counter = ATOMIC_INIT(0);
static unsigned char kmessages[KMSG_SIZE] __attribute__ ((section(".kmsg"))) = {[0 ... KMSG_SIZE-1] = 0x00}; static unsigned char kmessages[KMSG_SIZE] __attribute__ ((section(".kmsg"))) = {[0 ... KMSG_SIZE-1] = 0x00};
@ -145,6 +139,10 @@ int koutput_init(void)
{ {
#ifdef CONFIG_VGA #ifdef CONFIG_VGA
vga_init(); vga_init();
early_print |= VGA_EARLY_PRINT;
#endif
#ifdef CONFIG_UART
early_print |= UART_EARLY_PRINT;
#endif #endif
return 0; return 0;
@ -161,11 +159,11 @@ int kputchar(int c)
kmessages[pos % KMSG_SIZE] = (unsigned char) c; kmessages[pos % KMSG_SIZE] = (unsigned char) c;
#ifdef CONFIG_VGA #ifdef CONFIG_VGA
if (early_print == VGA_EARLY_PRINT) if (early_print & VGA_EARLY_PRINT)
vga_putchar(c); vga_putchar(c);
#endif #endif
#ifdef CONFIG_UART #ifdef CONFIG_UART
if (early_print == UART_EARLY_PRINT) if (early_print & UART_EARLY_PRINT)
uart_putchar(c); uart_putchar(c);
#endif #endif
@ -186,11 +184,11 @@ int kputs(const char *str)
pos = atomic_int32_inc(&kmsg_counter); pos = atomic_int32_inc(&kmsg_counter);
kmessages[pos % KMSG_SIZE] = str[i]; kmessages[pos % KMSG_SIZE] = str[i];
#ifdef CONFIG_VGA #ifdef CONFIG_VGA
if (early_print == VGA_EARLY_PRINT) if (early_print & VGA_EARLY_PRINT)
vga_putchar(str[i]); vga_putchar(str[i]);
#endif #endif
#ifdef CONFIG_UART #ifdef CONFIG_UART
if (early_print == UART_EARLY_PRINT) if (early_print & UART_EARLY_PRINT)
uart_putchar(str[i]); uart_putchar(str[i]);
#endif #endif
} }