"use strict"; const { B } = require("../unit-bytes-iec"); const thirdFourthByteMask = parseInt("11111111111111110000000000000000", 2); const secondByteMask = parseInt("00000000000000001111111100000000", 2); const firstByteMask = parseInt("00000000000000000000000011111111", 2); module.exports = { vid: "vendorID", ssvi: "subsystemVendorID", sn: { name: "serialNumber", transform: (string) => string.trim() }, mn: { name: "modelNumber", transform: (string) => string.trim() }, fr: "firmwareRevision", rab: { name: "recommendedArbitrationBurst", transform: (value) => 2 ** value }, // FIXME: Is this correct? ieee: "ouiIdentifier", cmic: { name: "cmicCapabilities", transform: (bitField) => { return { anar: bitField & 8, virtualFunction: bitField & 4, multipleControllers: bitField & 2, multipleSubsystemPorts: bitField & 1 }; }}, mdts: { name: "maximumDataTransferSize", transform: (value) => { if (value === 0) { return null; } else { // Note: counted in multiples of the minimum memory page size // TODO: Can we grab this from somewhere and return the value in bytes instead? return 2 ** value; } }}, cntlid: "controllerID", ver: { name: "protocolVersion", transform: (value) => { return { major: value & thirdFourthByteMask, minor: value & secondByteMask, tertiary: value & firstByteMask }; }}, // MARKER rtd3r: { name: "rtd3ResumeLatency", transform: (value) => { if (value === 0) { return null; } else { // TODO: Unit? return value; } }}, rtd3e: { name: "rtd3EntryLatency", transform: (value) => { if (value === 0) { return null; } else { // TODO: Unit? return value; } }}, // TODO: // oaes, // ctratt, // rrls, // crdt1, // crdt2, // crdt3, // nvmsr, // vwci, // mec, // oacs, // acl, // aerl, // frmw, // lpa, // elpe, // npss, // avscc, // apsta, // wctemp, // cctemp, // mtfa, // hmpre, // hmmin, tnvmcap: { name: "totalSpace", transform: (value) => B(value) }, unvmcap: { name: "freeSpace", transform: (value) => B(value) }, // TOOD: // rpmbs, // edstt, // dsto, // fwug, // kas, // hctma, // mntmt, // mxtmt, // sanicap, // hmminds, // hmmaxd, // nsetidmax, // anatt, // anacap, // anagrpmax, // nanagrpid, // domainid, // megcap, // sqes, // cqes, // maxcmd, // nn, // oncs, // fuses, // fna, // vwc, // awun, // awupf, // icsvscc, // nwpc, // acwu, // ocfs, // sgls, // maxdna, // maxcna, // ioccsz, // iorcsz, // icdoff, // fcatt, // msdbd, // ofcs, // psds };