1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- use system_error::SystemError;
- use crate::syscall::Syscall;
- use super::kmsg::KMSG;
- enum SyslogAction {
-
- Close = 0,
-
- Open = 1,
-
- Read = 2,
-
- ReadClear = 4,
-
- Clear = 5,
-
- ConsoleLevel = 8,
-
- SizeBuffer = 10,
-
- Inval,
- }
- impl From<usize> for SyslogAction {
- fn from(value: usize) -> Self {
- match value {
- 0 => SyslogAction::Close,
- 1 => SyslogAction::Open,
- 2 => SyslogAction::Read,
- 4 => SyslogAction::ReadClear,
- 5 => SyslogAction::Clear,
- 8 => SyslogAction::ConsoleLevel,
- 10 => SyslogAction::SizeBuffer,
- _ => SyslogAction::Inval,
- }
- }
- }
- impl Syscall {
-
-
-
-
-
-
-
-
-
-
-
- pub fn do_syslog(
- syslog_action_type: usize,
- buf: &mut [u8],
- len: usize,
- ) -> Result<usize, SystemError> {
- let syslog_action = SyslogAction::from(syslog_action_type);
- let mut kmsg_guard = unsafe { KMSG.as_ref().unwrap().lock_irqsave() };
- match syslog_action {
- SyslogAction::Close => Ok(0),
- SyslogAction::Open => Ok(0),
- SyslogAction::Read => kmsg_guard.read(buf),
- SyslogAction::ReadClear => kmsg_guard.read_clear(buf),
- SyslogAction::Clear => kmsg_guard.clear(),
- SyslogAction::SizeBuffer => kmsg_guard.data_size(),
- SyslogAction::ConsoleLevel => kmsg_guard.set_level(len),
- SyslogAction::Inval => return Err(SystemError::EINVAL),
- }
- }
- }
|