|
|
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.7 ! root 74: VIRTIO_SCSI_DONE,
1.1.1.5 root 75:
1.1 root 76: KEY_INPUT,
77:
78: NMI,
79:
80: SCHEDULER_SYNCMODE,
81:
1.1.1.3 root 82: MPU_TRACE_MAIN,
83: MPU_TRACE_XP,
1.1 root 84:
1.1.1.3 root 85: // MAX は宛先を確保する際の最大値。
1.1 root 86: MAX,
1.1.1.3 root 87:
88: // ここ以降は、経路中だけで使われるメッセージ。
89:
90: MPU_TRACE_ALL,
1.1 root 91: };
92:
93: public:
94: MessageID() {
95: id = NONE;
96: }
1.1.1.7 ! root 97: // enum からの自動変換のため explicit つけない。
1.1 root 98: MessageID(int id_) {
99: id = id_;
100: }
101:
102: MessageID& operator=(int id_) {
103: id = id_;
104: return *this;
105: }
106: operator int() const {
107: return id;
108: }
109:
110: static MessageID SCSIDEV_LOAD(int n) {
111: return MessageID(SCSIDEV_LOAD_0 + n);
112: }
113: static MessageID SCSIDEV_UNLOAD(int n) {
114: return MessageID(SCSIDEV_UNLOAD_0 + n);
115: }
116:
1.1.1.2 root 117: static MessageID FDD_LOAD(int n) {
118: return MessageID(FDD_LOAD_0 + n);
119: }
120: static MessageID FDD_UNLOAD(int n) {
121: return MessageID(FDD_UNLOAD_0 + n);
122: }
123:
1.1.1.5 root 124: static MessageID VIRTIO_BLOCK_DONE(int n) {
125: return MessageID(VIRTIO_BLOCK_DONE_0 + n);
126: }
127:
1.1.1.4 root 128: static MessageID HOSTNET_RX(int n) {
129: return MessageID(HOSTNET0_RX + n);
130: }
131:
1.1 root 132: private:
133: int id;
134: };
135:
136: using MessageCallback_t = void (Device::*)(MessageID, uint32);
137: #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.