Working i386 paging and liballoc
This commit is contained in:
76
kernel/platform/i386_pc/sys/serialdbg.c
Normal file
76
kernel/platform/i386_pc/sys/serialdbg.c
Normal file
@@ -0,0 +1,76 @@
|
||||
/*
|
||||
Copyright 2025 Kamil Kowalczyk
|
||||
|
||||
Redistribution and use in source and binary forms, with or
|
||||
without modification, are permitted provided that the following
|
||||
conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. 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.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
“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 COPYRIGHT
|
||||
HOLDER OR CONTRIBUTORS 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.
|
||||
*/
|
||||
|
||||
#include <libk/types.h>
|
||||
#include <libk/string.h>
|
||||
#include <libk/stdarg.h>
|
||||
#include <libk/printf.h>
|
||||
#include <sys/serialdbg.h>
|
||||
#include <sys/ioport.h>
|
||||
#include <config.h>
|
||||
|
||||
static uint8_t serialdbg_tx_empty(void) {
|
||||
return ioport_in8(CFG_I386_PC_DEBUG_SERIAL_PORT + 5) & 0x20;
|
||||
}
|
||||
|
||||
static void serialdbg_writechr(char x) {
|
||||
while (!serialdbg_tx_empty());
|
||||
ioport_out8(CFG_I386_PC_DEBUG_SERIAL_PORT, (uint8_t)x);
|
||||
}
|
||||
|
||||
void serialdbg_printf(const char *fmt, ...) {
|
||||
char buffer[CFG_I386_PC_DEBUG_SERIAL_BUFFER_SIZE];
|
||||
memset(buffer, 0, sizeof(buffer));
|
||||
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
vsnprintf(buffer, sizeof(buffer), fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
buffer[sizeof(buffer) - 1] = '\0';
|
||||
|
||||
const char *p = buffer;
|
||||
while (*p) {
|
||||
serialdbg_writechr(*p);
|
||||
p++;
|
||||
}
|
||||
}
|
||||
|
||||
void serialdbg_init(void) {
|
||||
ioport_out8(CFG_I386_PC_DEBUG_SERIAL_PORT + 1, 0x00);
|
||||
ioport_out8(CFG_I386_PC_DEBUG_SERIAL_PORT + 3, 0x80);
|
||||
ioport_out8(CFG_I386_PC_DEBUG_SERIAL_PORT + 0, 0x03);
|
||||
ioport_out8(CFG_I386_PC_DEBUG_SERIAL_PORT + 1, 0x00);
|
||||
ioport_out8(CFG_I386_PC_DEBUG_SERIAL_PORT + 3, 0x03);
|
||||
ioport_out8(CFG_I386_PC_DEBUG_SERIAL_PORT + 2, 0xC7);
|
||||
ioport_out8(CFG_I386_PC_DEBUG_SERIAL_PORT + 4, 0x0B);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user