2021-05-26 06:57:54 +03:00
|
|
|
/*
|
|
|
|
* Copyright 2021, Haiku, Inc.
|
|
|
|
* Distributed under the terms of the MIT License.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _VIRTIO_DEFS_H_
|
|
|
|
#define _VIRTIO_DEFS_H_
|
|
|
|
|
|
|
|
|
|
|
|
#include <SupportDefs.h>
|
|
|
|
|
|
|
|
|
|
|
|
enum {
|
|
|
|
kVirtioRegsSize = 0x1000,
|
|
|
|
kVirtioSignature = 0x74726976,
|
|
|
|
kVirtioVendorId = 0x554d4551,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum {
|
|
|
|
kVirtioDevNet = 1,
|
|
|
|
kVirtioDevBlock = 2,
|
|
|
|
kVirtioDevConsole = 3,
|
|
|
|
kVirtioDev9p = 9,
|
|
|
|
kVirtioDevInput = 18,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum {
|
|
|
|
kVirtioConfigSAcknowledge = 1 << 0,
|
|
|
|
kVirtioConfigSDriver = 1 << 1,
|
|
|
|
kVirtioConfigSDriverOk = 1 << 2,
|
|
|
|
kVirtioConfigSFeaturesOk = 1 << 3,
|
|
|
|
};
|
|
|
|
|
2021-06-06 13:05:17 +03:00
|
|
|
// VirtioRegs.interruptStatus, interruptAck
|
|
|
|
enum {
|
|
|
|
kVirtioIntQueue = 1 << 0,
|
|
|
|
kVirtioIntConfig = 1 << 1,
|
|
|
|
};
|
|
|
|
|
2021-05-26 06:57:54 +03:00
|
|
|
enum {
|
|
|
|
kVringDescFlagsNext = 1 << 0,
|
|
|
|
kVringDescFlagsWrite = 1 << 1,
|
|
|
|
kVringDescFlagsIndirect = 1 << 2,
|
|
|
|
};
|
|
|
|
|
|
|
|
struct VirtioRegs {
|
|
|
|
uint32 signature;
|
|
|
|
uint32 version;
|
|
|
|
uint32 deviceId;
|
|
|
|
uint32 vendorId;
|
|
|
|
uint32 deviceFeatures;
|
|
|
|
uint32 unknown1[3];
|
|
|
|
uint32 driverFeatures;
|
|
|
|
uint32 unknown2[1];
|
|
|
|
uint32 guestPageSize; /* version 1 only */
|
|
|
|
uint32 unknown3[1];
|
|
|
|
uint32 queueSel;
|
|
|
|
uint32 queueNumMax;
|
|
|
|
uint32 queueNum;
|
|
|
|
uint32 queueAlign; /* version 1 only */
|
|
|
|
uint32 queuePfn; /* version 1 only */
|
|
|
|
uint32 queueReady;
|
|
|
|
uint32 unknown4[2];
|
|
|
|
uint32 queueNotify;
|
|
|
|
uint32 unknown5[3];
|
|
|
|
uint32 interruptStatus;
|
|
|
|
uint32 interruptAck;
|
|
|
|
uint32 unknown6[2];
|
|
|
|
uint32 status;
|
|
|
|
uint32 unknown7[3];
|
|
|
|
uint32 queueDescLow;
|
|
|
|
uint32 queueDescHi;
|
|
|
|
uint32 unknown8[2];
|
|
|
|
uint32 queueAvailLow;
|
|
|
|
uint32 queueAvailHi;
|
|
|
|
uint32 unknown9[2];
|
|
|
|
uint32 queueUsedLow;
|
|
|
|
uint32 queueUsedHi;
|
|
|
|
uint32 unknown10[21];
|
|
|
|
uint32 configGeneration;
|
|
|
|
uint8 config[3840];
|
|
|
|
};
|
|
|
|
|
|
|
|
struct VirtioDesc {
|
|
|
|
uint64 addr;
|
|
|
|
uint32 len;
|
|
|
|
uint16 flags;
|
|
|
|
uint16 next;
|
|
|
|
};
|
|
|
|
|
|
|
|
// filled by driver
|
|
|
|
struct VirtioAvail {
|
|
|
|
uint16 flags;
|
|
|
|
uint16 idx;
|
|
|
|
uint16 ring[0];
|
|
|
|
};
|
|
|
|
|
|
|
|
struct VirtioUsedItem
|
|
|
|
{
|
|
|
|
uint32 id;
|
|
|
|
uint32 len;
|
|
|
|
};
|
|
|
|
|
|
|
|
// filled by device
|
|
|
|
struct VirtioUsed {
|
|
|
|
uint16 flags;
|
|
|
|
uint16 idx;
|
|
|
|
VirtioUsedItem ring[0];
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// Input
|
|
|
|
|
|
|
|
// VirtioInputConfig::select
|
|
|
|
enum {
|
|
|
|
kVirtioInputCfgUnset = 0x00,
|
|
|
|
kVirtioInputCfgIdName = 0x01,
|
|
|
|
kVirtioInputCfgIdSerial = 0x02,
|
|
|
|
kVirtioInputCfgIdDevids = 0x03,
|
|
|
|
kVirtioInputCfgPropBits = 0x10,
|
|
|
|
kVirtioInputCfgEvBits = 0x11, // subsel: kVirtioInputEv*
|
|
|
|
kVirtioInputCfgAbsInfo = 0x12, // subsel: kVirtioInputAbs*
|
|
|
|
};
|
|
|
|
|
|
|
|
enum {
|
|
|
|
kVirtioInputEvSyn = 0,
|
|
|
|
kVirtioInputEvKey = 1,
|
|
|
|
kVirtioInputEvRel = 2,
|
|
|
|
kVirtioInputEvAbs = 3,
|
|
|
|
kVirtioInputEvRep = 4,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum {
|
|
|
|
kVirtioInputBtnLeft = 0x110,
|
|
|
|
kVirtioInputBtnRight = 0x111,
|
|
|
|
kVirtioInputBtnMiddle = 0x112,
|
|
|
|
kVirtioInputBtnGearDown = 0x150,
|
|
|
|
kVirtioInputBtnGearUp = 0x151,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum {
|
|
|
|
kVirtioInputRelX = 0,
|
|
|
|
kVirtioInputRelY = 1,
|
|
|
|
kVirtioInputRelZ = 2,
|
|
|
|
kVirtioInputRelWheel = 8,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum {
|
|
|
|
kVirtioInputAbsX = 0,
|
|
|
|
kVirtioInputAbsY = 1,
|
|
|
|
kVirtioInputAbsZ = 2,
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
struct VirtioInputAbsinfo {
|
|
|
|
int32 min;
|
|
|
|
int32 max;
|
|
|
|
int32 fuzz;
|
|
|
|
int32 flat;
|
|
|
|
int32 res;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct VirtioInputDevids {
|
|
|
|
uint16 bustype;
|
|
|
|
uint16 vendor;
|
|
|
|
uint16 product;
|
|
|
|
uint16 version;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct VirtioInputConfig {
|
|
|
|
uint8 select; // in
|
|
|
|
uint8 subsel; // in
|
|
|
|
uint8 size; // out, size of reply
|
|
|
|
uint8 reserved[5];
|
|
|
|
union {
|
|
|
|
char string[128];
|
|
|
|
uint8 bitmap[128];
|
|
|
|
VirtioInputAbsinfo abs;
|
|
|
|
VirtioInputDevids ids;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
struct VirtioInputPacket {
|
|
|
|
uint16 type;
|
|
|
|
uint16 code;
|
|
|
|
int32 value;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// Block
|
|
|
|
|
|
|
|
enum {
|
|
|
|
kVirtioBlockTypeIn = 0,
|
|
|
|
kVirtioBlockTypeOut = 1,
|
|
|
|
kVirtioBlockTypeFlush = 4,
|
|
|
|
kVirtioBlockTypeFlushOut = 5,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum {
|
|
|
|
kVirtioBlockStatusOk = 0,
|
|
|
|
kVirtioBlockStatusIoError = 1,
|
|
|
|
kVirtioBlockStatusUnsupported = 2,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum {
|
|
|
|
kVirtioBlockSectorSize = 512,
|
|
|
|
};
|
|
|
|
|
|
|
|
struct VirtioBlockRequest {
|
|
|
|
uint32 type;
|
|
|
|
uint32 ioprio;
|
|
|
|
uint64 sectorNum;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#endif // _VIRTIO_DEFS_H_
|