Skip to content

Commit

Permalink
PCI serial
Browse files Browse the repository at this point in the history
  • Loading branch information
sbarisic committed May 4, 2018
1 parent 6216083 commit c957443
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 20 deletions.
10 changes: 9 additions & 1 deletion mini_kernel/console_commands.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,17 +44,24 @@ void cmd_clear(int argc, const char** argv, const char* argi) {
}

void cmd_com(int argc, const char** argv, const char* argi) {
char buffer[64];

if (argc >= 2) {
if (!strcmp(argv[1], "hello")) {
com1_write_string("Hello COM1 World!\n");
} else if (!strcmp(argv[1], "init")) {
int num = _atoi(argv[2]);

char buffer[64];
stbsp_sprintf(buffer, "Initializing serial on port 0x%X (%d)\n", num, num);
write(buffer);

init_com(num);
} else if (!strcmp(argv[1], "info")) {
uint16_t cur_port = 0;
com_get_info(&cur_port);

stbsp_sprintf(buffer, "Active COM port: 0x%2X (%d)\nHello World!\n", cur_port, (uint32_t)cur_port);
write(buffer);
} else {
write(argv[1]);
write(": com subcommand not found\n");
Expand All @@ -64,6 +71,7 @@ void cmd_com(int argc, const char** argv, const char* argi) {
}

write("com hello\n");
write("com info\n");
write("com init [num]\n");
}

Expand Down
4 changes: 3 additions & 1 deletion mini_kernel/mini_kernel.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,14 @@ void syscall(int a, void* b);

// Serial
void init_com1();
void init_com(uint16_t PORT_N);
uint8_t com1_read();
void com1_write(uint8_t byte);
void com1_write_string(const char* data);
void com1_write_32(uint32_t num);

void init_com(uint16_t PORT_N);
void com_get_info(uint16_t* cur_port);

// Console input/output
void console_enable(int enable);
void write(const char* Msg);
Expand Down
8 changes: 6 additions & 2 deletions mini_kernel/pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -222,13 +222,17 @@ static void pci_visit(uint32_t bus, uint32_t dev, uint32_t func, int print_only)
if (PCI_CHECK_CLASS_NAME(info, PCI_COMM_SERIAL)) {
//pci_write32(id, PCI_CONFIG_COMMAND,)

for (uint32_t i = 0; i < 10; i++) {
PciBar bar0;
pci_getbar(&bar0, id, 0);
init_com(bar0.u.port);

/*for (uint32_t i = 0; i < 10; i++) {
PciBar bar;
pci_getbar(&bar, id, i * 2); // IO base
stbsp_sprintf(buffer, "BAR%d %x/%x %ld %d\n", i * 2, bar.u.address, bar.u.port, bar.size, bar.flags);
write(buffer);
}
}*/
}
}
}
Expand Down
39 changes: 23 additions & 16 deletions mini_kernel/serial.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,6 @@
static uint16_t PORT;
int com_initialized = 0;

void init_com1() {
init_com(COM1); // Init default COM port
}

void init_com(uint16_t PORT_N) {
PORT = PORT_N;

Expand All @@ -36,10 +32,6 @@ uint8_t com_read(uint16_t PORT) {
return __inbyte(PORT);
}

uint8_t com1_read() {
return com_read(PORT);
}

void com_write(uint16_t PORT, uint8_t byte) {
if (!com_initialized)
return;
Expand All @@ -50,10 +42,6 @@ void com_write(uint16_t PORT, uint8_t byte) {
__outbyte(PORT, byte);
}

void com1_write(uint8_t byte) {
com_write(PORT, byte);
}

void com_write_string(uint16_t PORT, const char* data) {
if (!com_initialized)
return;
Expand All @@ -62,10 +50,6 @@ void com_write_string(uint16_t PORT, const char* data) {
com_write(PORT, *data++);
}

void com1_write_string(const char* data) {
com_write_string(PORT, data);
}

void com_write_32(uint16_t PORT, uint32_t num) {
if (!com_initialized)
return;
Expand All @@ -76,6 +60,29 @@ void com_write_32(uint16_t PORT, uint32_t num) {
com_write(PORT, num);
}

void com_get_info(uint16_t* cur_port) {
if (cur_port)
*cur_port = PORT;
}

// COM1 stuff

void init_com1() {
init_com(COM1); // Init default COM port
}

uint8_t com1_read() {
return com_read(PORT);
}

void com1_write(uint8_t byte) {
com_write(PORT, byte);
}

void com1_write_string(const char* data) {
com_write_string(PORT, data);
}

void com1_write_32(uint32_t num) {
com_write_32(PORT, num);
}

0 comments on commit c957443

Please sign in to comment.