pub struct ConsoleScheme;Expand description
Kernel console scheme : thin redirect to serial/VGA.
Architecture:
- Writes always go to serial (for debug / early boot).
- Before the display server starts, writes also go to VGA (boot mode).
- Once the display server is active, VGA writes are skipped because the display server owns the framebuffer. Full redirect-to-display-server logic will be added when the console silo is integrated.
VgaWriter remains boot-only; the display server takes over the
framebuffer at userspace startup.
Implementations§
Source§impl ConsoleScheme
impl ConsoleScheme
Trait Implementations§
Source§impl Scheme for ConsoleScheme
impl Scheme for ConsoleScheme
Source§fn open(
&self,
_path: &str,
_flags: OpenFlags,
) -> Result<OpenResult, SyscallError>
fn open( &self, _path: &str, _flags: OpenFlags, ) -> Result<OpenResult, SyscallError>
Performs the open operation.
Source§fn read(
&self,
_file_id: u64,
_offset: u64,
_buf: &mut [u8],
) -> Result<usize, SyscallError>
fn read( &self, _file_id: u64, _offset: u64, _buf: &mut [u8], ) -> Result<usize, SyscallError>
Performs the read operation.
The console scheme is write-only (output to serial/VGA).
Keyboard input must come from /dev/input/kbd via InputScheme.
Reading from the keyboard buffer here would compete with the userspace
console (strate-console) and silently steal keystrokes.
Source§fn write(
&self,
_file_id: u64,
_offset: u64,
buf: &[u8],
) -> Result<usize, SyscallError>
fn write( &self, _file_id: u64, _offset: u64, buf: &[u8], ) -> Result<usize, SyscallError>
Performs the write operation.
Boot mode: serial + VGA (when VGA hardware is present). Runtime mode: serial only : the display server owns the framebuffer. TODO: skip VGA writes once the display server signals readiness.
Source§fn async_read(
&self,
file_id: u64,
offset: u64,
user_buf_vaddr: u64,
len: usize,
_ring_id: u64,
_user_data: u64,
) -> Result<AsyncSubmitResult, SyscallError>
fn async_read( &self, file_id: u64, offset: u64, user_buf_vaddr: u64, len: usize, _ring_id: u64, _user_data: u64, ) -> Result<AsyncSubmitResult, SyscallError>
Submit a read against a userspace buffer for async I/O. Read more
Source§fn async_write(
&self,
file_id: u64,
offset: u64,
user_buf_vaddr: u64,
len: usize,
_ring_id: u64,
_user_data: u64,
) -> Result<AsyncSubmitResult, SyscallError>
fn async_write( &self, file_id: u64, offset: u64, user_buf_vaddr: u64, len: usize, _ring_id: u64, _user_data: u64, ) -> Result<AsyncSubmitResult, SyscallError>
Submit a write sourced from a userspace buffer for async I/O. Read more
Source§fn truncate(&self, file_id: u64, new_size: u64) -> Result<(), SyscallError>
fn truncate(&self, file_id: u64, new_size: u64) -> Result<(), SyscallError>
Truncate/resize a file (if supported).
Source§fn truncate_by_path(
&self,
_path: &str,
_new_size: u64,
) -> Result<(), SyscallError>
fn truncate_by_path( &self, _path: &str, _new_size: u64, ) -> Result<(), SyscallError>
Truncate a file by path (avoids open/close round-trip). Read more
Source§fn sync(&self, file_id: u64) -> Result<(), SyscallError>
fn sync(&self, file_id: u64) -> Result<(), SyscallError>
Sync file to storage (if applicable).
Source§fn create_file(&self, path: &str, mode: u32) -> Result<OpenResult, SyscallError>
fn create_file(&self, path: &str, mode: u32) -> Result<OpenResult, SyscallError>
Create a new regular file.
Source§fn create_directory(
&self,
path: &str,
mode: u32,
) -> Result<OpenResult, SyscallError>
fn create_directory( &self, path: &str, mode: u32, ) -> Result<OpenResult, SyscallError>
Create a new directory.
Source§fn readdir(&self, file_id: u64) -> Result<Vec<DirEntry>, SyscallError>
fn readdir(&self, file_id: u64) -> Result<Vec<DirEntry>, SyscallError>
Read directory entries from an open directory handle.
Source§fn rename(&self, old_path: &str, new_path: &str) -> Result<(), SyscallError>
fn rename(&self, old_path: &str, new_path: &str) -> Result<(), SyscallError>
Rename/move an entry within this scheme.
Source§fn chmod(&self, path: &str, mode: u32) -> Result<(), SyscallError>
fn chmod(&self, path: &str, mode: u32) -> Result<(), SyscallError>
Change permission bits on a path.
Source§fn fchmod(&self, file_id: u64, mode: u32) -> Result<(), SyscallError>
fn fchmod(&self, file_id: u64, mode: u32) -> Result<(), SyscallError>
Change permission bits on an open file handle.
Source§fn link(&self, old_path: &str, new_path: &str) -> Result<(), SyscallError>
fn link(&self, old_path: &str, new_path: &str) -> Result<(), SyscallError>
Create a hard link.
Auto Trait Implementations§
impl Freeze for ConsoleScheme
impl RefUnwindSafe for ConsoleScheme
impl Send for ConsoleScheme
impl Sync for ConsoleScheme
impl Unpin for ConsoleScheme
impl UnsafeUnpin for ConsoleScheme
impl UnwindSafe for ConsoleScheme
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more