summaryrefslogtreecommitdiffstats
path: root/sssraid.h
diff options
context:
space:
mode:
Diffstat (limited to 'sssraid.h')
-rw-r--r--sssraid.h198
1 files changed, 198 insertions, 0 deletions
diff --git a/sssraid.h b/sssraid.h
new file mode 100644
index 0000000..fe751d4
--- /dev/null
+++ b/sssraid.h
@@ -0,0 +1,198 @@
+/*
+ * sssraid.h
+ *
+ * Home page of code is: http://www.smartmontools.org
+ *
+ * Copyright (C) 2022 3SNIC Inc.
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#ifndef _SSSRAID_H_
+#define _SSSRAID_H_
+#include <stdint.h>
+#define u8 uint8_t
+#define u16 uint16_t
+#define u32 uint32_t
+#define u64 uint64_t
+#define ADM_MAX_DATA_SIZE 0x1000U // 4096
+#define ADM_SCSI_CDB_MAX_LEN 32
+#define ADM_SCSI_CDB_SENSE_MAX_LEN 96
+#define ADM_SCSI_CDB_SENSE_LEN32 32
+#define ADM_CMD_SHOW_PDLIST 0x502 // 1282
+#define ADM_CMD_SCSI_PASSTHROUGH 0x51e // 1310
+#define BSG_APPEND_TIMEOUT_MS 600000
+#define DEFAULT_CONMMAND_TIMEOUT_MS 180000
+#define ADM_BSG_MSGCODE_SCSI_PTHRU 1
+
+#define ADM_RAID_SET 0xc0
+#define ADM_RAID_WRITE 0xc1
+#define ADM_RAID_READ 0xc2
+#define ADM_RAID_PARAM_WRITE 0xc3
+#define ADM_RAID_READ_FROM_CQE 0xc4
+
+// pdlist device type interface
+enum adm_pdlist_intf {
+ ADM_DEVICE_TYPE_SAS = 1,
+ ADM_DEVICE_TYPE_EXP = 2,
+ ADM_DEVICE_TYPE_SATA = 8,
+ ADM_DEVICE_TYPE_PLANE = 9,
+ ADM_DEVICE_TYPE_NVME = 10,
+ ADM_DEVICE_TYPE_UNKNOW,
+ ADM_DEVICE_TYPE_BUTT
+};
+
+struct cmd_pdlist_idx {
+ u16 start_idx;
+ u16 count;
+ u32 rsvd;
+};
+
+struct cmd_pdlist_entry {
+ u16 enc_id;
+ u16 slot_id;
+ u8 interface;
+ u8 media_type;
+ u8 logi_type;
+ u8 logi_status;
+ u32 reserve[26];
+};
+#define CMD_PDS_MAX_NUM 256U
+#define CMD_PDLIST_ONCE_NUM ((ADM_MAX_DATA_SIZE - 64) / sizeof(struct cmd_pdlist_entry))
+
+struct cmd_show_pdlist {
+ u16 num;
+ u16 rsvd0;
+ u32 rsvd1[15];
+ struct cmd_pdlist_entry disks[CMD_PDLIST_ONCE_NUM];
+};
+
+struct multi_disk_location {
+ u16 enc_id;
+ u16 slot_id;
+ u16 did;
+ u8 flag;
+ u8 rsvd;
+};
+
+struct cmd_scsi_passthrough {
+ struct multi_disk_location loc;
+ u8 lun;
+ u8 cdb_len;
+ u8 sense_buffer_len;
+ u8 rsvd0;
+ u8 cdb[32];
+ u32 rsvd1;
+ u8 *sense_buffer;
+};
+
+struct sssraid_passthru_common_cmd {
+ u8 opcode;
+ u8 flags;
+ u16 rsvd0;
+ u32 nsid;
+ union {
+ struct {
+ u16 subopcode;
+ u16 rsvd1;
+ } info_0;
+ u32 cdw2;
+ };
+ union {
+ struct {
+ u16 data_len;
+ u16 param_len;
+ } info_1;
+ u32 cdw3;
+ };
+ u64 metadata;
+
+ u64 addr;
+ u32 metadata_len;
+ u32 data_len;
+
+ u32 cdw10;
+ u32 cdw11;
+ u32 cdw12;
+ u32 cdw13;
+ u32 cdw14;
+ u32 cdw15;
+ u32 timeout_ms;
+ u32 result0;
+ u32 result1;
+};
+
+struct sssraid_ioq_passthru_cmd {
+ u8 opcode;
+ u8 flags;
+ u16 rsvd0;
+ u32 nsid;
+ union {
+ struct {
+ u16 res_sense_len;
+ u8 cdb_len;
+ u8 rsvd0;
+ } info_0;
+ u32 cdw2;
+ };
+ union {
+ struct {
+ u16 subopcode;
+ u16 rsvd1;
+ } info_1;
+ u32 cdw3;
+ };
+ union {
+ struct {
+ u16 rsvd;
+ u16 param_len;
+ } info_2;
+ u32 cdw4;
+ };
+ u32 cdw5;
+ u64 addr;
+ u64 prp2;
+ union {
+ struct {
+ u16 eid;
+ u16 sid;
+ } info_3;
+ u32 cdw10;
+ };
+ union {
+ struct {
+ u16 did;
+ u8 did_flag;
+ u8 rsvd2;
+ } info_4;
+ u32 cdw11;
+ };
+ u32 cdw12;
+ u32 cdw13;
+ u32 cdw14;
+ u32 data_len;
+ u32 cdw16;
+ u32 cdw17;
+ u32 cdw18;
+ u32 cdw19;
+ u32 cdw20;
+ u32 cdw21;
+ u32 cdw22;
+ u32 cdw23;
+ u64 sense_addr;
+ u32 cdw26[4];
+ u32 timeout_ms;
+ u32 result0;
+ u32 result1;
+};
+
+struct bsg_ioctl_cmd {
+ u32 msgcode;
+ u32 control;
+ union {
+ struct sssraid_passthru_common_cmd ioctl_r64;
+ struct sssraid_ioq_passthru_cmd ioctl_pthru;
+ };
+};
+
+#endif // _SSSRAID_H