summaryrefslogtreecommitdiff
path: root/sys/include
diff options
context:
space:
mode:
authorIan Moffett <ian@osmora.org>2024-02-25 22:28:09 -0500
committerIan Moffett <ian@osmora.org>2024-02-25 22:30:15 -0500
commitd4372855f00cb47ccfa60db79c5ee35c17f96707 (patch)
tree6efffc5617fc4c66a38d2e41a7990ddd7534c922 /sys/include
parent752ae0d0c23d1edf9b2ce563c4e82283dffd273a (diff)
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 <ian@osmora.org>
Diffstat (limited to 'sys/include')
-rw-r--r--sys/include/dev/vcons/vcons.h71
-rw-r--r--sys/include/dev/vcons/vcons_io.h37
-rw-r--r--sys/include/lib/sysfont.h (renamed from sys/include/lib/tty_font.h)0
-rw-r--r--sys/include/sys/tty.h121
4 files changed, 108 insertions, 121 deletions
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 <sys/types.h>
+#include <sys/termios.h>
+#include <dev/video/fbdev.h>
+#include <sysfont.h>
+
+#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 <dev/vcons/vcons.h>
+
+int vcons_process_output(struct vcons_screen *scr, int c);
+
+#endif /* !_VCONS_IO_H_ */
diff --git a/sys/include/lib/tty_font.h b/sys/include/lib/sysfont.h
index 62b4ec0..62b4ec0 100644
--- a/sys/include/lib/tty_font.h
+++ b/sys/include/lib/sysfont.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 <sys/types.h>
-#include <sys/termios.h>
-#include <sys/queue.h>
-#include <sys/cdefs.h>
-#include <sys/spinlock.h>
-#include <dev/video/fbdev.h>
-
-/*
- * 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_ */