Move serial driver code to kernel/dev
This commit is contained in:
@ -58,7 +58,6 @@ SRCFILES += $(call GRABSRC, \
|
|||||||
path \
|
path \
|
||||||
rbuf \
|
rbuf \
|
||||||
ipc/pipe \
|
ipc/pipe \
|
||||||
drivers/serial \
|
|
||||||
dev \
|
dev \
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -6,8 +6,47 @@
|
|||||||
#include "util/util.h"
|
#include "util/util.h"
|
||||||
#include "hshtb.h"
|
#include "hshtb.h"
|
||||||
#include "sysdefs/devctl.h"
|
#include "sysdefs/devctl.h"
|
||||||
#include "drivers/serial/serial.h"
|
|
||||||
#include "kprintf.h"
|
#include "kprintf.h"
|
||||||
|
#include "hal/hal.h"
|
||||||
|
|
||||||
|
// https://wiki.osdev.org/Serial_Ports
|
||||||
|
|
||||||
|
#define PORT 0x3f8
|
||||||
|
|
||||||
|
void serial_init(void) {
|
||||||
|
io_out8(PORT+1, 0x00);
|
||||||
|
io_out8(PORT+3, 0x80);
|
||||||
|
io_out8(PORT+0, 0x03);
|
||||||
|
io_out8(PORT+1, 0x00);
|
||||||
|
io_out8(PORT+3, 0x03);
|
||||||
|
io_out8(PORT+2, 0xC7);
|
||||||
|
io_out8(PORT+4, 0x0B);
|
||||||
|
io_out8(PORT+4, 0x1E);
|
||||||
|
io_out8(PORT+0, 0xAE);
|
||||||
|
|
||||||
|
if (io_in8(PORT+0) != 0xAE) {
|
||||||
|
ERR("serial", "serial is faulty!\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
io_out8(PORT+4, 0x0F);
|
||||||
|
}
|
||||||
|
|
||||||
|
int serial_recvready(void) {
|
||||||
|
return io_in8(PORT+5) & 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t serial_recvb(void) {
|
||||||
|
return io_in8(PORT);
|
||||||
|
}
|
||||||
|
|
||||||
|
int serial_sendready(void) {
|
||||||
|
return io_in8(PORT+5) & 0x20;
|
||||||
|
}
|
||||||
|
|
||||||
|
void serial_sendb(uint8_t b) {
|
||||||
|
io_out8(PORT, b);
|
||||||
|
}
|
||||||
|
|
||||||
int32_t serialdev_sendb(uint8_t *buffer, size_t len, void *extra) {
|
int32_t serialdev_sendb(uint8_t *buffer, size_t len, void *extra) {
|
||||||
(void)len; (void)extra;
|
(void)len; (void)extra;
|
||||||
|
@ -1,42 +0,0 @@
|
|||||||
#include <stdint.h>
|
|
||||||
#include "hal/hal.h"
|
|
||||||
#include "kprintf.h"
|
|
||||||
|
|
||||||
// https://wiki.osdev.org/Serial_Ports
|
|
||||||
|
|
||||||
#define PORT 0x3f8
|
|
||||||
|
|
||||||
void serial_init(void) {
|
|
||||||
io_out8(PORT+1, 0x00);
|
|
||||||
io_out8(PORT+3, 0x80);
|
|
||||||
io_out8(PORT+0, 0x03);
|
|
||||||
io_out8(PORT+1, 0x00);
|
|
||||||
io_out8(PORT+3, 0x03);
|
|
||||||
io_out8(PORT+2, 0xC7);
|
|
||||||
io_out8(PORT+4, 0x0B);
|
|
||||||
io_out8(PORT+4, 0x1E);
|
|
||||||
io_out8(PORT+0, 0xAE);
|
|
||||||
|
|
||||||
if (io_in8(PORT+0) != 0xAE) {
|
|
||||||
ERR("serial", "serial is faulty!\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
io_out8(PORT+4, 0x0F);
|
|
||||||
}
|
|
||||||
|
|
||||||
int serial_recvready(void) {
|
|
||||||
return io_in8(PORT+5) & 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t serial_recvb(void) {
|
|
||||||
return io_in8(PORT);
|
|
||||||
}
|
|
||||||
|
|
||||||
int serial_sendready(void) {
|
|
||||||
return io_in8(PORT+5) & 0x20;
|
|
||||||
}
|
|
||||||
|
|
||||||
void serial_sendb(uint8_t b) {
|
|
||||||
io_out8(PORT, b);
|
|
||||||
}
|
|
@ -1,12 +0,0 @@
|
|||||||
#ifndef DRIVERS_SERIAL_SERIAL_H_
|
|
||||||
#define DRIVERS_SERIAL_SERIAL_H_
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
void serial_init(void);
|
|
||||||
int serial_recvready(void);
|
|
||||||
uint8_t serial_recvb(void);
|
|
||||||
int serial_sendready(void);
|
|
||||||
void serial_sendb(uint8_t b);
|
|
||||||
|
|
||||||
#endif // DRIVERS_SERIAL_SERIAL_H_
|
|
Reference in New Issue
Block a user