|
|
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: #include "virtio_def.h" ! 12: #include "mystring.h" ! 13: ! 14: /*static*/ std::string ! 15: VirtIO::DeviceIDStr(uint32 id) ! 16: { ! 17: static const char * const idnames[] = { ! 18: "invalid", ! 19: "Network Card", // 1 ! 20: "Block Device", // 2 ! 21: }; ! 22: assert(id < countof(idnames)); ! 23: return idnames[id]; ! 24: } ! 25: ! 26: /*static*/ std::string ! 27: VirtIO::StatusBits(uint32 status) ! 28: { ! 29: static struct { ! 30: uint32 bit; ! 31: const char *name; ! 32: } table[] = { ! 33: { STATUS_FAILED, "FAILED" }, ! 34: { STATUS_NEEDS_RESET, "NEEDS_RESET" }, ! 35: { STATUS_FEATURES_OK, "F_OK" }, ! 36: { STATUS_OK, "OK" }, ! 37: { STATUS_DRIVER, "DRIVER" }, ! 38: { STATUS_ACKNOWLEDGE, "ACK" }, ! 39: }; ! 40: ! 41: if (status == STATUS_RESET) { ! 42: return "(RESET)"; ! 43: } ! 44: ! 45: std::string str; ! 46: for (int i = 0; i < countof(table); i++) { ! 47: if ((status & table[i].bit) != 0) { ! 48: str += ','; ! 49: str += table[i].name; ! 50: } ! 51: } ! 52: ! 53: str[0] = '<'; ! 54: str += '>'; ! 55: return str; ! 56: } ! 57: ! 58: std::string ! 59: VirtQDesc::ToStr() const ! 60: { ! 61: std::string str; ! 62: ! 63: str = string_format("addr=$%08x len=$%08x flags=$%04x(%c%c%c) next=$%04x", ! 64: addr, len, flag, ! 65: ((flag & VIRTQ_DESC_F_INDIRECT) ? 'I' : '-'), ! 66: ((flag & VIRTQ_DESC_F_WRITE) ? 'W' : 'R'), ! 67: ((flag & VIRTQ_DESC_F_NEXT) ? 'N' : '-'), ! 68: next); ! 69: return str; ! 70: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.