common/
config.rs

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
//! rel4-linux-kit 配置 crate
//!
//! 这个 crate 中包含了整个系统的配置,需要在多个 crarte 中共享的配置信息。

use sel4::{Word, cap::Endpoint};

/// 服务任务在启动的时候使用的栈的地址。
pub const SERVICE_BOOT_STACK_TOP: usize = 0x1_0000_0000;

/// 服务任务在启动的时候使用的栈的大小
pub const SERVICE_BOOT_STACK_SIZE: usize = 0x1_0000;

/// 服务任务默认的堆大小
pub const SERVICE_HEAP_SIZE: usize = 0x10_0000;

/// VIRTIO_MMIO 使用的地址
pub const VIRTIO_MMIO_ADDR: usize = 0xa003e00;

/// PL011 设备使用过的地址
pub const PL011_ADDR: usize = 0x0900_0000;
/// PL011 对应的虚拟地址
pub const VIRT_PL011_ADDR: usize = 0x1_2020_0000;

/// 将要被映射的偏移地址,设备虚拟地址 = VIRT_ADDR + 设备物理地址
pub const VIRTIO_MMIO_VIRT_ADDR: usize = 0x1_2000_0000;

const VIRTIO_BLK_OFFSET: usize = 0x3e00;
const VIRTIO_NET_OFFSET: usize = 0x3c00;

/// VIRTIO 块设备使用的虚拟地址
pub const VIRTIO_MMIO_BLK_VIRT_ADDR: usize = VIRTIO_MMIO_VIRT_ADDR + VIRTIO_BLK_OFFSET;
/// VIRTIO 网络设备使用的虚拟地址
pub const VIRTIO_MMIO_NET_VIRT_ADDR: usize = VIRTIO_MMIO_VIRT_ADDR + VIRTIO_NET_OFFSET;

/// 串口的中断号
pub const SERIAL_DEVICE_IRQ: usize = 33;
/// VIRTIO 网络设备的中断号
pub const VIRTIO_NET_IRQ: usize = 0x2f + 0x20;

/// 默认的 DMA 分配开始的地址
pub const DMA_ADDR_START: usize = 0x1_0000_3000;

/// 默认 CSpace 一级占用的 bits
pub const CNODE_RADIX_BITS: usize = 12;

/// Linux App 使用的 CNode bits
pub const LINUX_APP_CNODE_RADIX_BITS: usize = 6;

/// 默认的物理页大小
pub const PAGE_SIZE: usize = 0x1000;

/// 默认的页的 mask 位
pub const PAGE_MASK: usize = !0xfff;

/// 默认存储自定义 Capability 的 SLOT
pub const DEFAULT_CUSTOM_SLOT: u64 = 26;

/// 默认服务可分配的 SLOT 开始的地址
pub const DEFAULT_EMPTY_SLOT_INDEX: usize = 32;

/// 默认的栈对齐的大小
pub const STACK_ALIGN_SIZE: usize = 16;

/// 页共享使用的初始地址
pub const SHARE_PAGE_START: usize = 0x1_001F_0000;

/// 通过 [sel4::cap::Endpoint] 发送一次数据最大数量
pub const IPC_DATA_LEN: usize = 120 * 8;

/// 通过 [sel4::cap::Endpoint] 发送数据时,reg 的大小
pub const REG_LEN: usize = size_of::<Word>();

/// 默认的线程的提示
pub const DEFAULT_THREAD_NOTIFICATION: u64 = 17;

/// 默认的父进程的 Endpoint
pub const DEFAULT_PARENT_EP: Endpoint = Endpoint::from_bits(18);

/// 默认的自身提供服务的 Endpoint
pub const DEFAULT_SERVE_EP: Endpoint = Endpoint::from_bits(19);