Annotation of nono/vm/message.h, revision 1.1.1.8

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)

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.