Annotation of nono/vm/virtio_block.h, revision 1.1

1.1     ! root        1: //
        !             2: // nono
        !             3: // Copyright (C) 2024 nono project
        !             4: // Licensed under nono-license.txt
        !             5: //
        !             6: 
        !             7: //
        !             8: // VirtIO ブロックデバイス
        !             9: //
        !            10: 
        !            11: #pragma once
        !            12: 
        !            13: #include "virtio_base.h"
        !            14: #include "diskimage.h"
        !            15: #include "monitor.h"
        !            16: #include "scsidev.h"
        !            17: 
        !            18: class VirtIOBlockReq;
        !            19: 
        !            20: class VirtIOBlockDevice : public VirtIODevice
        !            21: {
        !            22:        using inherited = VirtIODevice;
        !            23:  public:
        !            24:        static const uint32 ACCESS_READ         = 0x01;
        !            25:        static const uint32 ACCESS_WRITE        = 0x02;
        !            26: 
        !            27:  public:
        !            28:        VirtIOBlockDevice(int slot_, int id_);
        !            29:        ~VirtIOBlockDevice() override;
        !            30: 
        !            31:        bool Init() override;
        !            32: 
        !            33:        // メディアの書き込みモードを返す
        !            34:        SCSIDisk::RW GetWriteMode() const { return write_mode; }
        !            35: 
        !            36:        // 現在のアクセス状況を返す
        !            37:        uint32 GetAccessRead() const    { return access_read; }
        !            38:        uint32 GetAccessWrite() const   { return access_write; }
        !            39: 
        !            40:  private:
        !            41:        DECLARE_MONITOR_CALLBACK(MonitorUpdate);
        !            42: 
        !            43:        const char *GetFeatureName(int feature) const override;
        !            44: 
        !            45:        bool LoadDisk(const std::string& pathname_);
        !            46: 
        !            47:        // ディスクリプタを一つ処理する。
        !            48:        void ProcessDesc(VirtQueue *) override;
        !            49:        uint32 CmdRead(VirtIOBlockReq&);
        !            50:        uint32 CmdWrite(VirtIOBlockReq&);
        !            51:        void ReadVirtIOBlockReq(VirtIOBlockReq&);
        !            52: 
        !            53:        int id {};                                      // 識別番号
        !            54:        std::string pathname {};        // イメージファイルのフルパス
        !            55:        bool write_ignore {};           // 書き込み無視オプション
        !            56: 
        !            57:        DiskImage image {};                     // イメージファイル
        !            58:        uint32 blocksize {};            // 論理ブロック長
        !            59:        SCSIDisk::RW write_mode {};     // メディアの書き込みモード
        !            60: 
        !            61:        // アクセスインジケータ (GUI) 用のカウンタ。
        !            62:        uint32 access_read {};
        !            63:        uint32 access_write {};
        !            64: 
        !            65:        Monitor monitor { this };
        !            66: };

unix.superglobalmegacorp.com

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