Function comments (v1)

This commit is contained in:
2026-03-13 12:51:29 +01:00
parent 8e2a612d88
commit 8026c33639
25 changed files with 560 additions and 48 deletions

View File

@@ -156,6 +156,14 @@ unsigned char kbdfr_shifted[128] =
0
};
/*
* keyboard_handler - Keyboard event handler
*
* Is called from the interrupt dispatcher.
* When a key is pressed or released, we get a scancode, and
* it is then translated to an ASCII character.
* Left Shift, Ctrl, and Alt keys are also taken into consideration.
*/
void keyboard_handler()
{
unsigned char scancode = inb(0x60);
@@ -212,6 +220,12 @@ void keyboard_handler()
}
}
/*
* keyboard_init - Keyboard initialization
* @layout: Desired layout
*
* Prepares the PS/2 keyboard to recieve input.
*/
void keyboard_init(unsigned char layout)
{
// Here we might go and select PS/2, USB, or other... (once we implement multiple keyboard protocols)

View File

@@ -9,11 +9,25 @@
extern struct init_status init;
/*
* outb - Writes a byte to a CPU port
* @port: CPU port to write to
* @data: Byte to write
*
* Writes a single byte to the serial interface.
*/
void outb(int port, unsigned char data)
{
__asm__ __volatile__("outb %%al, %%dx" :: "a" (data),"d" (port));
}
/*
* inb - Gets a byte in through a CPU port
* @port: The CPU port to get a byte from
*
* Return:
* <data> - byte got from port
*/
unsigned char inb(int port)
{
unsigned char data = 0;
@@ -21,6 +35,13 @@ unsigned char inb(int port)
return data;
}
/*
* serial_init - Initializes serial interface
*
* Return:
* %-EIO - Input/output error
* %0 - Success
*/
int serial_init()
{
outb(PORT + 1, 0x00); // Disable all interrupts
@@ -45,12 +66,23 @@ int serial_init()
return 0;
}
/*
* is_transmit_empty - Check if the serial transmit register is empty
*
* Return: Non-zero if the transmit register is empty and a new
* byte can be written to the serial port, 0 otherwise.
*/
static int is_transmit_empty()
{
return inb(PORT + 5) & 0x20;
}
// Serial kernel putchar
/*
* skputc - Serial kernel putchar
* @c: character to write
*
* Writes a single character to the serial interface.
*/
void skputc(char c)
{
// TODO: Spinlock here (serial access)
@@ -58,7 +90,12 @@ void skputc(char c)
outb(PORT, c);
}
// Serial kernel putstring
/*
* skputs - Serial kernel puts
* @str: Message to write
*
* Writes a non-formatted string to serial output.
*/
void skputs(const char* str)
{
unsigned int i=0;

View File

@@ -23,14 +23,22 @@ because this shitty implementation will be replaced one day by Flanterm
extern struct flanterm_context* ft_ctx;
extern struct init_status init;
// Overhead that could be avoided, right? (for printf)
/*
* _putchar - Writes a character to terminal
* @character: character to write
*/
void _putchar(char character)
{
// TODO: Spinlock here (terminal access)
flanterm_write(ft_ctx, &character, 1);
}
// Debug-printing
/*
* kputs - Kernel puts
* @str: String to write
*
* Writes a non-formatted string to terminal
*/
void kputs(const char* str)
{
size_t i=0;
@@ -44,12 +52,26 @@ void kputs(const char* str)
extern struct flanterm_context* ft_ctx;
extern struct boot_context boot_ctx;
/*
* flanterm_free_wrapper - free() wrapper for Flanterm
* @ptr: pointer to free
* @size: amount of bytes to free
*
* This function exists solely because the Flanterm initialization
* function only accepts a free() function with a size parameter,
* and the default one doesn't have it.
*/
void flanterm_free_wrapper(void* ptr, size_t size)
{
(void)size;
kfree(ptr);
}
/*
* term_init - Video output/terminal initialization
*
* Uses Flanterm and the framebuffer given by Limine.
*/
void term_init()
{
uint32_t bgColor = 0x252525;