1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use core::intrinsics;
use core::sync::atomic::{AtomicUsize, Ordering};
const KMSG_SIZE: usize = 0x1000;
#[repr(align(64))]
#[repr(C)]
struct KmsgSection {
buffer: [u8; KMSG_SIZE + 1],
}
static mut KMSG: KmsgSection = KmsgSection {
buffer: [0; KMSG_SIZE + 1],
};
static BUFFER_INDEX: AtomicUsize = AtomicUsize::new(0);
pub fn write_byte(byte: u8) {
let index = BUFFER_INDEX.fetch_add(1, Ordering::SeqCst);
unsafe {
intrinsics::volatile_store(&mut KMSG.buffer[index % KMSG_SIZE], byte);
}
}