summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/drivers/drivers.c1
-rw-r--r--kernel/drivers/tty.c15
-rw-r--r--kernel/include/comus/drivers/tty.h5
-rw-r--r--kernel/memory/physalloc.c27
4 files changed, 14 insertions, 34 deletions
diff --git a/kernel/drivers/drivers.c b/kernel/drivers/drivers.c
index b4c2c90..00ee247 100644
--- a/kernel/drivers/drivers.c
+++ b/kernel/drivers/drivers.c
@@ -7,7 +7,6 @@
void drivers_init(void)
{
uart_init();
- tty_init();
pci_init();
clock_update();
}
diff --git a/kernel/drivers/tty.c b/kernel/drivers/tty.c
index 88e161f..20a8f14 100644
--- a/kernel/drivers/tty.c
+++ b/kernel/drivers/tty.c
@@ -9,13 +9,13 @@
static const uint8_t width = 80;
static const uint8_t height = 25;
-static volatile uint16_t *buffer = NULL;
+static volatile uint16_t *buffer = (uint16_t*)VGA_ADDR;
// position
-static uint32_t x, y;
+static uint32_t x = 0, y = 0;
// color
-static uint8_t fg, bg;
+static uint8_t fg = 15, bg = 0;
// blank color
const uint16_t blank = (uint16_t)0 | 0 << 12 | 15 << 8;
@@ -54,15 +54,6 @@ static void term_scroll(int lines)
sti();
}
-void tty_init(void)
-{
- buffer = mapaddr((void *)VGA_ADDR, width * height * sizeof(uint16_t));
- x = 0;
- y = 0;
- fg = 15;
- bg = 0;
-}
-
void tty_out(char c)
{
if (buffer == NULL)
diff --git a/kernel/include/comus/drivers/tty.h b/kernel/include/comus/drivers/tty.h
index c951c3e..4f8a5f1 100644
--- a/kernel/include/comus/drivers/tty.h
+++ b/kernel/include/comus/drivers/tty.h
@@ -10,11 +10,6 @@
#define TTY_H_
/**
- * Initalize the terminal
- */
-void tty_init(void);
-
-/**
* Output a character to the terminal
*/
void tty_out(char c);
diff --git a/kernel/memory/physalloc.c b/kernel/memory/physalloc.c
index de0e4a7..53f8aaf 100644
--- a/kernel/memory/physalloc.c
+++ b/kernel/memory/physalloc.c
@@ -11,19 +11,14 @@ extern char kernel_end;
// between memory_start and kernel_start will be the bitmap
static uintptr_t memory_start = 0;
-struct memory_area {
- uint64_t len;
- uintptr_t addr;
-};
-
static uint64_t *bitmap;
static uint64_t total_memory;
static uint64_t free_memory;
static uint64_t page_count;
static uint64_t segment_count;
-struct memory_area *page_start;
+struct memory_segment *page_start;
-static int n_pages(const struct memory_area *m)
+static int n_pages(const struct memory_segment *m)
{
return m->len / PAGE_SIZE;
}
@@ -32,7 +27,7 @@ static void *page_at(int i)
{
int cur_page = 0;
for (uint64_t idx = 0; idx < segment_count; idx++) {
- const struct memory_area *m = page_start;
+ const struct memory_segment *m = page_start;
int pages = n_pages(m);
if (i - cur_page < pages) {
return (void *)(m->addr + (PAGE_SIZE * (i - cur_page)));
@@ -47,7 +42,7 @@ static long page_idx(void *page)
uintptr_t addr = (uintptr_t)page;
int cur_page = 0;
for (uint64_t idx = 0; idx < segment_count; idx++) {
- const struct memory_area *m = page_start;
+ const struct memory_segment *m = page_start;
if ((uintptr_t)m + m->len > addr) {
return cur_page + ((addr - m->addr) / PAGE_SIZE);
}
@@ -129,7 +124,7 @@ static bool segment_invalid(const struct memory_segment *segment)
return false;
}
-static struct memory_area segment_to_area(const struct memory_segment *segment)
+static struct memory_segment clamp_segment(const struct memory_segment *segment)
{
uint64_t length = segment->len;
uintptr_t addr = segment->addr;
@@ -147,7 +142,7 @@ static struct memory_area segment_to_area(const struct memory_segment *segment)
addr = segment->addr;
}
- struct memory_area temp;
+ struct memory_segment temp;
temp.len = length;
temp.addr = addr;
@@ -175,7 +170,7 @@ void physalloc_init(struct memory_map *map)
if (segment_invalid(segment))
continue;
- struct memory_area temp = segment_to_area(segment);
+ struct memory_segment temp = clamp_segment(segment);
page_count += n_pages(&temp);
segment_count++;
}
@@ -184,7 +179,7 @@ void physalloc_init(struct memory_map *map)
long bitmap_size = bitmap_pages * PAGE_SIZE;
bitmap = (uint64_t *)page_align(kaddr(kernel_end));
- long page_area_size = segment_count * sizeof(struct memory_area);
+ long page_area_size = segment_count * sizeof(struct memory_segment);
char *page_area_addr = (char *)bitmap + bitmap_size;
page_area_addr = (char *)page_align((uintptr_t)page_area_addr);
@@ -195,9 +190,9 @@ void physalloc_init(struct memory_map *map)
page_area_addr = mapaddr(page_area_addr, page_area_size);
memset(page_area_addr, 0, page_area_size);
- page_start = (struct memory_area *)page_area_addr;
+ page_start = (struct memory_segment *)page_area_addr;
- struct memory_area *area = page_start;
+ struct memory_segment *area = page_start;
for (uint32_t i = 0; i < map->entry_count; i++) {
struct memory_segment *segment = &map->entries[i];
@@ -205,7 +200,7 @@ void physalloc_init(struct memory_map *map)
if (segment_invalid(segment))
continue;
- struct memory_area temp = segment_to_area(segment);
+ struct memory_segment temp = clamp_segment(segment);
*area = temp;
area++;
}