Annotation of nono/vm/virtio_block.h, revision 1.1.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.