|
1 | 1 | //! Chapter 5. Legacy Extensions (EIDs #0x00 - #0x0F)
|
2 | 2 |
|
3 |
| -const SBI_SET_TIMER: usize = 0; |
4 |
| -const SBI_CONSOLE_PUTCHAR: usize = 1; |
5 |
| -const SBI_CONSOLE_GETCHAR: usize = 2; |
6 |
| -const SBI_CLEAR_IPI: usize = 3; |
7 |
| -const SBI_SEND_IPI: usize = 4; |
8 |
| -const SBI_REMOTE_FENCE_I: usize = 5; |
9 |
| -const SBI_REMOTE_SFENCE_VMA: usize = 6; |
10 |
| -const SBI_REMOTE_SFENCE_VMA_ASID: usize = 7; |
11 |
| -const SBI_SHUTDOWN: usize = 8; |
| 3 | +pub use id::*; |
12 | 4 |
|
| 5 | +/// §5.1 |
| 6 | +/// |
| 7 | +/// No replacement. |
13 | 8 | #[deprecated = "replaced by `set_timer` from Timer extension"]
|
14 | 9 | #[inline]
|
15 | 10 | pub fn set_timer(stime_value: u64) -> usize {
|
16 | 11 | match () {
|
17 | 12 | #[cfg(target_pointer_width = "32")]
|
18 |
| - () => sbi_call_legacy_2(SBI_SET_TIMER, stime_value as _, (stime_value >> 32) as _), |
| 13 | + () => sbi_call_legacy_2(LEGACY_SET_TIMER, stime_value as _, (stime_value >> 32) as _), |
19 | 14 | #[cfg(target_pointer_width = "64")]
|
20 |
| - () => sbi_call_legacy_1(SBI_SET_TIMER, stime_value as _), |
| 15 | + () => sbi_call_legacy_1(LEGACY_SET_TIMER, stime_value as _), |
21 | 16 | }
|
22 | 17 | }
|
23 | 18 |
|
| 19 | +/// §5.2 |
| 20 | +/// |
| 21 | +/// No replacement. |
24 | 22 | #[deprecated = "no replacement"]
|
25 | 23 | #[inline]
|
26 | 24 | pub fn console_putchar(c: usize) -> usize {
|
27 |
| - sbi_call_legacy_1(SBI_CONSOLE_PUTCHAR, c) |
| 25 | + sbi_call_legacy_1(LEGACY_CONSOLE_PUTCHAR, c) |
28 | 26 | }
|
29 | 27 |
|
| 28 | +/// §5.3 |
30 | 29 | #[deprecated = "no replacement"]
|
31 | 30 | #[inline]
|
32 | 31 | pub fn console_getchar() -> usize {
|
33 |
| - sbi_call_legacy_0(SBI_CONSOLE_GETCHAR) |
| 32 | + sbi_call_legacy_0(LEGACY_CONSOLE_GETCHAR) |
34 | 33 | }
|
35 | 34 |
|
| 35 | +/// §5.4 |
| 36 | +/// |
| 37 | +/// No replacement. Just clear `sip.SSIP` directly. |
36 | 38 | #[deprecated = "you can clear `sip.SSIP` CSR bit directly"]
|
37 | 39 | #[inline]
|
38 | 40 | pub fn clear_ipi() -> usize {
|
39 |
| - sbi_call_legacy_0(SBI_CLEAR_IPI) |
| 41 | + sbi_call_legacy_0(LEGACY_CLEAR_IPI) |
40 | 42 | }
|
41 | 43 |
|
42 |
| -#[deprecated = "replaced by `send_ipi` from IPI extension"] |
| 44 | +/// §5.5 |
| 45 | +/// |
| 46 | +/// Replaced by [`send_ipi`](super::send_ipi) from [`sPI`](super::EID_SPI) extension. |
| 47 | +#[deprecated = "replaced by `send_ipi` from `sPI` extension"] |
43 | 48 | #[inline]
|
44 | 49 | pub fn send_ipi(hart_mask: usize) -> usize {
|
45 |
| - sbi_call_legacy_1(SBI_SEND_IPI, hart_mask) |
| 50 | + sbi_call_legacy_1(LEGACY_SEND_IPI, hart_mask) |
46 | 51 | }
|
47 | 52 |
|
48 |
| -#[deprecated = "replaced by `remote_fence_i` from RFENCE extension"] |
| 53 | +/// §5.6 |
| 54 | +/// |
| 55 | +/// Replaced by [`remote_fence_i`](super::remote_fence_i) from [`RFNC`](super::EID_RFNC) extension. |
| 56 | +#[deprecated = "replaced by `remote_fence_i` from `RFNC` extension"] |
49 | 57 | #[inline]
|
50 | 58 | pub fn remote_fence_i(hart_mask: usize) -> usize {
|
51 |
| - sbi_call_legacy_1(SBI_REMOTE_FENCE_I, hart_mask) |
| 59 | + sbi_call_legacy_1(LEGACY_REMOTE_FENCE_I, hart_mask) |
52 | 60 | }
|
53 | 61 |
|
54 |
| -#[deprecated = "replaced by `remote_fence_vma` from RFENCE extension"] |
| 62 | +/// §5.7 |
| 63 | +/// |
| 64 | +/// Replaced by [`remote_sfence_vma`](super::remote_sfence_vma) from [`RFNC`](super::EID_RFNC) extension. |
| 65 | +#[deprecated = "replaced by `remote_sfence_vma` from `RFNC` extension"] |
55 | 66 | #[inline]
|
56 | 67 | pub fn remote_fence_vma(hart_mask: usize, start: usize, size: usize) -> usize {
|
57 |
| - sbi_call_legacy_3(SBI_REMOTE_SFENCE_VMA, hart_mask, start, size) |
| 68 | + sbi_call_legacy_3(LEGACY_REMOTE_SFENCE_VMA, hart_mask, start, size) |
58 | 69 | }
|
59 | 70 |
|
60 |
| -#[deprecated = "replaced by `remote_fence_vma_asid` from RFENCE extension"] |
| 71 | +/// §5.8 |
| 72 | +/// |
| 73 | +/// Replaced by [`remote_sfence_vma_asid`](super::remote_sfence_vma_asid) from [`RFNC`](super::EID_RFNC) extension. |
| 74 | +#[deprecated = "replaced by `remote_sfence_vma_asid` from `RFNC` extension"] |
61 | 75 | #[inline]
|
62 | 76 | pub fn remote_fence_vma_asid(hart_mask: usize, start: usize, size: usize, asid: usize) -> usize {
|
63 |
| - sbi_call_legacy_4(SBI_REMOTE_SFENCE_VMA_ASID, hart_mask, start, size, asid) |
| 77 | + sbi_call_legacy_4(LEGACY_REMOTE_SFENCE_VMA_ASID, hart_mask, start, size, asid) |
64 | 78 | }
|
65 | 79 |
|
66 |
| -#[deprecated = "replaced by `system_reset` from System Reset extension"] |
| 80 | +/// §5.9 |
| 81 | +/// |
| 82 | +/// Replaced by [`system_reset`](super::system_reset) from [`SRST`](super::EID_SRST) extension. |
| 83 | +#[deprecated = "replaced by `system_reset` from System `SRST` extension"] |
67 | 84 | #[inline]
|
68 | 85 | pub fn shutdown() -> ! {
|
69 |
| - sbi_call_legacy_0(SBI_SHUTDOWN); |
| 86 | + sbi_call_legacy_0(LEGACY_SHUTDOWN); |
70 | 87 | core::unreachable!()
|
71 | 88 | }
|
72 | 89 |
|
| 90 | +/// §5.10 |
| 91 | +mod id { |
| 92 | + pub const LEGACY_SET_TIMER: usize = 0; |
| 93 | + pub const LEGACY_CONSOLE_PUTCHAR: usize = 1; |
| 94 | + pub const LEGACY_CONSOLE_GETCHAR: usize = 2; |
| 95 | + pub const LEGACY_CLEAR_IPI: usize = 3; |
| 96 | + pub const LEGACY_SEND_IPI: usize = 4; |
| 97 | + pub const LEGACY_REMOTE_FENCE_I: usize = 5; |
| 98 | + pub const LEGACY_REMOTE_SFENCE_VMA: usize = 6; |
| 99 | + pub const LEGACY_REMOTE_SFENCE_VMA_ASID: usize = 7; |
| 100 | + pub const LEGACY_SHUTDOWN: usize = 8; |
| 101 | +} |
| 102 | + |
73 | 103 | #[inline(always)]
|
74 | 104 | fn sbi_call_legacy_0(eid: usize) -> usize {
|
75 | 105 | let error;
|
|
0 commit comments