|
|
1.1 root 1: //
2: // nono
3: // Copyright (C) 2022 nono project
4: // Licensed under nono-license.txt
5: //
6:
7: //
8: // メッセージ
9: //
10:
11: #pragma once
12:
13: #include "device.h"
14:
15: class MessageID
16: {
17: public:
18: enum {
1.1.1.5 root 19: // リクエストフラグにビット割付されるメッセージ。
1.1.1.3 root 20: // Bit0 は REQUEST_EXIT で使用しているため
21: // こちらでは NONE に割り付けて衝突しないようにしている。
1.1 root 22: NONE = 0,
23:
1.1.1.3 root 24: HOSTCOM_RX,
1.1.1.4 root 25: HOSTNET0_RX,
26: HOSTNET1_RX,
1.1.1.3 root 27:
28: MAX_REQUEST,
29:
1.1.1.5 root 30: // ここ以降はキューイングされるメッセージ。
31: // 整数。
1.1.1.3 root 32:
1.1 root 33: RESET,
34: POWEROFF_EXIT,
35: POWEROFF_RESTART,
1.1.1.2 root 36: POWER_BUTTON,
1.1 root 37:
38: SCSIDEV_LOAD_0,
39: SCSIDEV_LOAD_1,
40: SCSIDEV_LOAD_2,
41: SCSIDEV_LOAD_3,
42: SCSIDEV_LOAD_4,
43: SCSIDEV_LOAD_5,
44: SCSIDEV_LOAD_6,
45: SCSIDEV_LOAD_7,
46: SCSIDEV_UNLOAD_0,
47: SCSIDEV_UNLOAD_1,
48: SCSIDEV_UNLOAD_2,
49: SCSIDEV_UNLOAD_3,
50: SCSIDEV_UNLOAD_4,
51: SCSIDEV_UNLOAD_5,
52: SCSIDEV_UNLOAD_6,
53: SCSIDEV_UNLOAD_7,
54:
1.1.1.2 root 55: FDD_LOAD_0,
56: FDD_LOAD_1,
57: FDD_LOAD_2,
58: FDD_LOAD_3,
59: FDD_UNLOAD_0,
60: FDD_UNLOAD_1,
61: FDD_UNLOAD_2,
62: FDD_UNLOAD_3,
63:
1.1.1.5 root 64: VIRTIO_BLOCK_DONE_0,
65: VIRTIO_BLOCK_DONE_1,
66: VIRTIO_BLOCK_DONE_2,
67: VIRTIO_BLOCK_DONE_3,
68: VIRTIO_BLOCK_DONE_4,
69: VIRTIO_BLOCK_DONE_5,
70: VIRTIO_BLOCK_DONE_6,
71: VIRTIO_BLOCK_DONE_7,
72: VIRTIO_NET_DONE,
1.1.1.6 ! root 73: VIRTIO_ENTROPY_DONE,
1.1.1.5 root 74:
1.1 root 75: KEY_INPUT,
76:
77: NMI,
78:
79: SCHEDULER_SYNCMODE,
80:
1.1.1.3 root 81: MPU_TRACE_MAIN,
82: MPU_TRACE_XP,
1.1 root 83:
1.1.1.3 root 84: // MAX は宛先を確保する際の最大値。
1.1 root 85: MAX,
1.1.1.3 root 86:
87: // ここ以降は、経路中だけで使われるメッセージ。
88:
89: MPU_TRACE_ALL,
1.1 root 90: };
91:
92: public:
93: MessageID() {
94: id = NONE;
95: }
96: MessageID(int id_) {
97: id = id_;
98: }
99:
100: MessageID& operator=(int id_) {
101: id = id_;
102: return *this;
103: }
104: operator int() const {
105: return id;
106: }
107:
108: static MessageID SCSIDEV_LOAD(int n) {
109: return MessageID(SCSIDEV_LOAD_0 + n);
110: }
111: static MessageID SCSIDEV_UNLOAD(int n) {
112: return MessageID(SCSIDEV_UNLOAD_0 + n);
113: }
114:
1.1.1.2 root 115: static MessageID FDD_LOAD(int n) {
116: return MessageID(FDD_LOAD_0 + n);
117: }
118: static MessageID FDD_UNLOAD(int n) {
119: return MessageID(FDD_UNLOAD_0 + n);
120: }
121:
1.1.1.5 root 122: static MessageID VIRTIO_BLOCK_DONE(int n) {
123: return MessageID(VIRTIO_BLOCK_DONE_0 + n);
124: }
125:
1.1.1.4 root 126: static MessageID HOSTNET_RX(int n) {
127: return MessageID(HOSTNET0_RX + n);
128: }
129:
1.1 root 130: private:
131: int id;
132: };
133:
134: using MessageCallback_t = void (Device::*)(MessageID, uint32);
135: #define ToMessageCallback(f) static_cast<MessageCallback_t>(f)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.