Add packets for SCSI, ATA and SDHCI commands.

This commit is contained in:
2019-10-14 00:42:26 +01:00
parent 81f83b257c
commit a0201665a3

184
dicmote.h
View File

@@ -29,6 +29,16 @@
#define DICMOTE_PACKET_TYPE_COMMAND_LIST_DEVICES 2
#define DICMOTE_PACKET_TYPE_RESPONSE_LIST_DEVICES 3
#define DICMOTE_PACKET_TYPE_COMMAND_OPEN_DEVICE 4
#define DICMOTE_PACKET_TYPE_COMMAND_SCSI 5
#define DICMOTE_PACKET_TYPE_RESPONSE_SCSI 6
#define DICMOTE_PACKET_TYPE_COMMAND_ATA_CHS 7
#define DICMOTE_PACKET_TYPE_RESPONSE_ATA_CHS 8
#define DICMOTE_PACKET_TYPE_COMMAND_ATA_LBA28 9
#define DICMOTE_PACKET_TYPE_RESPONSE_ATA_LBA28 10
#define DICMOTE_PACKET_TYPE_COMMAND_ATA_LBA48 11
#define DICMOTE_PACKET_TYPE_RESPONSE_ATA_LBA48 12
#define DICMOTE_PACKET_TYPE_COMMAND_SDHCI 13
#define DICMOTE_PACKET_TYPE_RESPONSE_SDHCI 14
#define DICMOTE_PROTOCOL_MAX 1
#define DICMOTE_PACKET_NOP_REASON_OOO 0
#define DICMOTE_PACKET_NOP_REASON_NOT_IMPLEMENTED 1
@@ -103,6 +113,180 @@ typedef struct
char device_path[1024];
} DicPacketCmdOpen;
typedef struct
{
DicPacketHeader hdr;
uint32_t cdb_len;
uint32_t buf_len;
int32_t direction;
uint32_t timeout;
} DicPacketCmdScsi;
typedef struct
{
DicPacketHeader hdr;
uint32_t sense_len;
uint32_t buf_len;
uint32_t duration;
uint32_t sense;
uint32_t errno;
} DicPacketResScsi;
typedef struct
{
uint8_t Feature;
uint8_t SectorCount;
uint8_t Sector;
uint8_t CylinderLow;
uint8_t CylinderHigh;
uint8_t DeviceHead;
uint8_t Command;
} AtaRegistersChs;
typedef struct
{
uint8_t Status;
uint8_t Error;
uint8_t SectorCount;
uint8_t Sector;
uint8_t CylinderLow;
uint8_t CylinderHigh;
uint8_t DeviceHead;
} AtaErrorRegistersChs;
typedef struct
{
DicPacketHeader hdr;
uint32_t buf_len;
AtaRegistersChs registers;
uint8_t protocol;
uint8_t transferRegister;
uint8_t transferBlocks;
uint8_t spare;
uint32_t timeout;
} DicPacketCmdAtaChs;
typedef struct
{
DicPacketHeader hdr;
uint32_t buf_len;
AtaErrorRegistersChs registers;
uint32_t duration;
uint32_t sense;
uint32_t errno;
} DicPacketResAtaChs;
typedef struct
{
uint8_t Feature;
uint8_t SectorCount;
uint8_t LbaLow;
uint8_t LbaMid;
uint8_t LbaHigh;
uint8_t DeviceHead;
uint8_t Command;
} AtaRegistersLba28;
typedef struct
{
uint8_t Status;
uint8_t Error;
uint8_t SectorCount;
uint8_t LbaLow;
uint8_t LbaMid;
uint8_t LbaHigh;
uint8_t DeviceHead;
} AtaErrorRegistersLba28;
typedef struct
{
DicPacketHeader hdr;
uint32_t buf_len;
AtaRegistersLba28 registers;
uint8_t protocol;
uint8_t transferRegister;
uint8_t transferBlocks;
uint8_t spare;
uint32_t timeout;
} DicPacketCmdAtaLba28;
typedef struct
{
DicPacketHeader hdr;
uint32_t buf_len;
AtaErrorRegistersLba28 registers;
uint32_t duration;
uint32_t sense;
uint32_t errno;
} DicPacketResAtaLba28;
typedef struct
{
uint16_t Feature;
uint16_t SectorCount;
uint16_t LbaLow;
uint16_t LbaMid;
uint16_t LbaHigh;
uint8_t DeviceHead;
uint8_t Command;
} AtaRegistersLba48;
typedef struct
{
uint8_t Status;
uint8_t Error;
uint16_t SectorCount;
uint16_t LbaLow;
uint16_t LbaMid;
uint16_t LbaHigh;
uint8_t DeviceHead;
} AtaErrorRegistersLba48;
typedef struct
{
DicPacketHeader hdr;
uint32_t buf_len;
AtaRegistersLba48 registers;
uint8_t protocol;
uint8_t transferRegister;
uint8_t transferBlocks;
uint8_t spare;
uint32_t timeout;
} DicPacketCmdAtaLba48;
typedef struct
{
DicPacketHeader hdr;
uint32_t buf_len;
AtaErrorRegistersLba48 registers;
uint32_t duration;
uint32_t sense;
uint32_t errno;
} DicPacketResAtaLba48;
typedef struct
{
DicPacketHeader hdr;
uint8_t command;
uint8_t write;
uint8_t application;
uint32_t flags;
uint32_t argument;
uint32_t block_size;
uint32_t blocks;
uint32_t buf_len;
uint32_t timeout;
} DicPacketCmdSdhci;
typedef struct
{
DicPacketHeader hdr;
uint32_t buf_len;
uint32_t response[4];
uint32_t duration;
uint32_t sense;
uint32_t errno;
} DicPacketResSdhci;
#pragma pack(pop)
DeviceInfoList* ListDevices();