|
|
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.8 ! root 24: HOSTCOM0_RX,
! 25: HOSTCOM1_RX,
! 26: HOSTCOM2_RX,
1.1.1.4 root 27: HOSTNET0_RX,
28: HOSTNET1_RX,
1.1.1.3 root 29:
30: MAX_REQUEST,
31:
1.1.1.5 root 32: // ここ以降はキューイングされるメッセージ。
33: // 整数。
1.1.1.3 root 34:
1.1 root 35: RESET,
36: POWEROFF_EXIT,
37: POWEROFF_RESTART,
1.1.1.2 root 38: POWER_BUTTON,
1.1 root 39:
40: SCSIDEV_LOAD_0,
41: SCSIDEV_LOAD_1,
42: SCSIDEV_LOAD_2,
43: SCSIDEV_LOAD_3,
44: SCSIDEV_LOAD_4,
45: SCSIDEV_LOAD_5,
46: SCSIDEV_LOAD_6,
47: SCSIDEV_LOAD_7,
48: SCSIDEV_UNLOAD_0,
49: SCSIDEV_UNLOAD_1,
50: SCSIDEV_UNLOAD_2,
51: SCSIDEV_UNLOAD_3,
52: SCSIDEV_UNLOAD_4,
53: SCSIDEV_UNLOAD_5,
54: SCSIDEV_UNLOAD_6,
55: SCSIDEV_UNLOAD_7,
56:
1.1.1.2 root 57: FDD_LOAD_0,
58: FDD_LOAD_1,
59: FDD_LOAD_2,
60: FDD_LOAD_3,
61: FDD_UNLOAD_0,
62: FDD_UNLOAD_1,
63: FDD_UNLOAD_2,
64: FDD_UNLOAD_3,
65:
1.1.1.5 root 66: VIRTIO_BLOCK_DONE_0,
67: VIRTIO_BLOCK_DONE_1,
68: VIRTIO_BLOCK_DONE_2,
69: VIRTIO_BLOCK_DONE_3,
70: VIRTIO_BLOCK_DONE_4,
71: VIRTIO_BLOCK_DONE_5,
72: VIRTIO_BLOCK_DONE_6,
73: VIRTIO_BLOCK_DONE_7,
74: VIRTIO_NET_DONE,
1.1.1.6 root 75: VIRTIO_ENTROPY_DONE,
1.1.1.7 root 76: VIRTIO_SCSI_DONE,
1.1.1.5 root 77:
1.1 root 78: KEY_INPUT,
79:
80: NMI,
81:
82: SCHEDULER_SYNCMODE,
83:
1.1.1.3 root 84: MPU_TRACE_MAIN,
85: MPU_TRACE_XP,
1.1 root 86:
1.1.1.3 root 87: // MAX は宛先を確保する際の最大値。
1.1 root 88: MAX,
1.1.1.3 root 89:
90: // ここ以降は、経路中だけで使われるメッセージ。
91:
92: MPU_TRACE_ALL,
1.1 root 93: };
94:
95: public:
96: MessageID() {
97: id = NONE;
98: }
1.1.1.7 root 99: // enum からの自動変換のため explicit つけない。
1.1 root 100: MessageID(int id_) {
101: id = id_;
102: }
103:
104: MessageID& operator=(int id_) {
105: id = id_;
106: return *this;
107: }
108: operator int() const {
109: return id;
110: }
111:
112: static MessageID SCSIDEV_LOAD(int n) {
113: return MessageID(SCSIDEV_LOAD_0 + n);
114: }
115: static MessageID SCSIDEV_UNLOAD(int n) {
116: return MessageID(SCSIDEV_UNLOAD_0 + n);
117: }
118:
1.1.1.2 root 119: static MessageID FDD_LOAD(int n) {
120: return MessageID(FDD_LOAD_0 + n);
121: }
122: static MessageID FDD_UNLOAD(int n) {
123: return MessageID(FDD_UNLOAD_0 + n);
124: }
125:
1.1.1.5 root 126: static MessageID VIRTIO_BLOCK_DONE(int n) {
127: return MessageID(VIRTIO_BLOCK_DONE_0 + n);
128: }
129:
1.1.1.8 ! root 130: static MessageID HOSTCOM_RX(int n) {
! 131: return MessageID(HOSTCOM0_RX + n);
! 132: }
! 133:
1.1.1.4 root 134: static MessageID HOSTNET_RX(int n) {
135: return MessageID(HOSTNET0_RX + n);
136: }
137:
1.1 root 138: private:
139: int id;
140: };
141:
142: using MessageCallback_t = void (Device::*)(MessageID, uint32);
143: #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.