From d4372855f00cb47ccfa60db79c5ee35c17f96707 Mon Sep 17 00:00:00 2001 From: Ian Moffett Date: Sun, 25 Feb 2024 22:28:09 -0500 Subject: kernel: Move video console code This commit introduces a video console driver to Hyra and replaces that weird tty.c file used only for video console logic Signed-off-by: Ian Moffett --- sys/include/dev/vcons/vcons.h | 71 +++++++++++++++++++++++ sys/include/dev/vcons/vcons_io.h | 37 ++++++++++++ sys/include/lib/sysfont.h | 40 +++++++++++++ sys/include/lib/tty_font.h | 40 ------------- sys/include/sys/tty.h | 121 --------------------------------------- 5 files changed, 148 insertions(+), 161 deletions(-) create mode 100644 sys/include/dev/vcons/vcons.h create mode 100644 sys/include/dev/vcons/vcons_io.h create mode 100644 sys/include/lib/sysfont.h delete mode 100644 sys/include/lib/tty_font.h delete mode 100644 sys/include/sys/tty.h (limited to 'sys/include') diff --git a/sys/include/dev/vcons/vcons.h b/sys/include/dev/vcons/vcons.h new file mode 100644 index 0000000..fc59f6e --- /dev/null +++ b/sys/include/dev/vcons/vcons.h @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2023-2024 Ian Marco Moffett and the Osmora Team. + * All rights reserved. + * + * 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 Hyra 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 OWNER 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. + */ + +#ifndef _DEV_VCONS_H_ +#define _DEV_VCONS_H_ + +#include +#include +#include +#include + +#define VCONS_TAB_WIDTH 4 +#define VCONS_CURSOR_WIDTH FONT_WIDTH +#define VCONS_CURSOR_HEIGHT FONT_HEIGHT + +struct vcons_cursor { + size_t xpos, ypos; + uint32_t rgb; + + /* Internal */ + uint32_t old_xpos, old_ypos; + volatile bool is_drawing; + volatile bool is_drawn; /* If it has been drawn before */ +}; + +struct vcons_screen { + size_t nrows, ncols; + size_t cpy_x, cpy_y; /* In chars */ + size_t cpy_len; + + uint32_t bg; + uint32_t fg; + void *fbdev_mem; + + struct fbdev fbdev; + struct vcons_cursor cursor; + struct termios termios; +}; + +#define is_cursor_drawing(screenptr) (screenptr)->cursor.is_drawing + +void vcons_attach(struct vcons_screen *scr); +int vcons_putch(struct vcons_screen *scr, char c); + +#endif /* !_DEV_VCONS_H_ */ diff --git a/sys/include/dev/vcons/vcons_io.h b/sys/include/dev/vcons/vcons_io.h new file mode 100644 index 0000000..a75d811 --- /dev/null +++ b/sys/include/dev/vcons/vcons_io.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2023-2024 Ian Marco Moffett and the Osmora Team. + * All rights reserved. + * + * 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 Hyra 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 OWNER 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. + */ + +#ifndef _VCONS_IO_H_ +#define _VCONS_IO_H_ + +#include + +int vcons_process_output(struct vcons_screen *scr, int c); + +#endif /* !_VCONS_IO_H_ */ diff --git a/sys/include/lib/sysfont.h b/sys/include/lib/sysfont.h new file mode 100644 index 0000000..62b4ec0 --- /dev/null +++ b/sys/include/lib/sysfont.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2023-2024 Ian Marco Moffett and the Osmora Team. + * All rights reserved. + * + * 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 Hyra 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 OWNER 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. + */ + +#ifndef _LIB_TTY_FONT_H_ +#define _LIB_TTY_FONT_H_ + +#include + +#define FONT_WIDTH 8 +#define FONT_HEIGHT 16 + +extern const uint8_t DEFAULT_FONT_DATA[]; + +#endif /* !_LIB_TTY_FONT_H_ */ diff --git a/sys/include/lib/tty_font.h b/sys/include/lib/tty_font.h deleted file mode 100644 index 62b4ec0..0000000 --- a/sys/include/lib/tty_font.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2023-2024 Ian Marco Moffett and the Osmora Team. - * All rights reserved. - * - * 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 Hyra 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 OWNER 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. - */ - -#ifndef _LIB_TTY_FONT_H_ -#define _LIB_TTY_FONT_H_ - -#include - -#define FONT_WIDTH 8 -#define FONT_HEIGHT 16 - -extern const uint8_t DEFAULT_FONT_DATA[]; - -#endif /* !_LIB_TTY_FONT_H_ */ diff --git a/sys/include/sys/tty.h b/sys/include/sys/tty.h deleted file mode 100644 index f245966..0000000 --- a/sys/include/sys/tty.h +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (c) 2023-2024 Ian Marco Moffett and the Osmora Team. - * All rights reserved. - * - * 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 Hyra 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 OWNER 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. - */ - -#ifndef _SYS_TTY_H_ -#define _SYS_TTY_H_ - -#include -#include -#include -#include -#include -#include - -/* - * Max chars an entire line can hold: - * 2^9 => 512 bytes - */ -#define LINE_RING_SIZE __POW2(9) - -/* Default TTY tab width */ -#define DEFAULT_TAB_WIDTH 4 - -/* - * Describes the size - * of a TTY window. - */ -struct winsize { - uint16_t ws_row; /* Rows, in chars */ - uint16_t ws_col; /* Columns, in chars */ - uint16_t ws_xpixel; /* Horizontal size, in pixels */ - uint16_t ws_ypixel; /* Vertical size, in pixels */ -}; - -/* - * TTY ring buffer. - */ -struct tty_ring { - char buf[LINE_RING_SIZE]; /* Actual buffer */ - size_t len; -}; - -/* - * Describes a TTY. Each TTY - * shall be described by a - * `struct tty`. - */ -struct tty { - uint32_t chpos_x; /* Next char X position */ - uint32_t chpos_y; /* Next char Y position */ - uint32_t curspos_x; /* Cursor X position */ - uint32_t curspos_y; /* Cursor Y position */ - uint32_t fg; /* Foreground (hex color) */ - uint32_t bg; /* Background (hex color) */ - uint8_t tab_width; /* Width of a tab (in chars) */ - struct fbdev fbdev; /* Framebuffer device */ - struct termios termios; /* Termios state */ - struct winsize winsize; /* Window size */ - struct tty_ring ring; /* Ring buffer */ - struct spinlock lock; /* Protects TTY */ - TAILQ_ENTRY(tty) link; /* TTY list link */ -}; - -/* - * Some helper macros to facilitate - * locking/unlocking a TTY. - */ -#define TTY_LOCK(tty_ptr) spinlock_acquire(&(tty_ptr)->lock) -#define TTY_UNLOCK(tty_ptr) spinlock_release(&(tty_ptr)->lock) - -/* - * Macros to allow easy access for - * termios and winsize flags, e.g usage: - * - * struct tty *tty = ... - * tty->t_cflag = ... - */ -#define t_cflag termios.c_cflag -#define t_iflag termios.c_iflag -#define t_lflag termios.c_lflag -#define t_oflag termios.c_oflag -#define t_ispeed termios.c_ispeed -#define t_ospeed termios.c_ospeed -#define t_ws_row winsize.ws_row -#define t_ws_col winsize.ws_col -#define t_ws_xpixel winsize.ws_xpixel -#define t_ws_ypixel winsize.ws_ypixel - -void tty_push_char(struct tty *tty, int c); -void tty_flush(struct tty *tty); -ssize_t tty_write(struct tty *tty, const char *buf, size_t len); -void tty_set_defaults(struct tty *tty); -void tty_attach(struct tty *tty); -void tty_init(void); - -#endif /* !_SYS_TTY_H_ */ -- cgit v1.2.3