firmware for my Touchscreen E-Paper Input Module for Framework Laptop 16
1#[repr(u8)]
2#[derive(Copy, Clone, Debug, Eq, PartialEq, strum::FromRepr)]
3#[cfg_attr(feature = "defmt", derive(defmt::Format))]
4pub enum SyscallNumber {
5 Misc = 0,
6 Image = 1,
7 Input = 2,
8 Usb = 3,
9 Exec = 4,
10 CriticalSection = 5,
11 Flash = 6,
12 KvStore = 7,
13}
14
15/// Perform a raw system call.
16#[macro_export]
17#[cfg(all(target_os = "none", target_arch = "arm"))]
18macro_rules! syscall {
19 (
20 $syscall_num:expr,
21 $( out $r0out:ident )? $( in $r0in:expr )? $(,
22 $( out $r1out:ident )? $( in $r1in:expr )? $(,
23 $( out $r2out:ident )? $( in $r2in:expr )? $(,
24 $( out $r3out:ident )? $( in $r3in:expr )? $(,)?
25 )?
26 )?
27 )?
28 ) => {
29 ::core::arch::asm!(
30 "svc #{syscall_num}",
31 $( in("r0") $r0in as usize, )?
32 $( lateout("r0") $r0out, )?
33 $(
34 $( in("r1") $r1in as usize, )?
35 $( lateout("r1") $r1out, )?
36 $(
37 $( in("r2") $r2in as usize, )?
38 $( lateout("r2") $r2out, )?
39 $(
40 $( in("r3") $r3in as usize, )?
41 $( lateout("r3") $r3out, )?
42 )?
43 )?
44 )?
45 syscall_num = const $syscall_num as u8,
46 )
47 }
48}
49
50#[macro_export]
51#[cfg(not(all(target_os = "none", target_arch = "arm")))]
52macro_rules! syscall {
53 ( $( $_foo:tt )* ) => { compile_error!("Cannot use eepyOS syscalls on non-eepyOS platforms") };
54}