diff options
Diffstat (limited to '')
-rw-r--r-- | sssraid.h | 198 |
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 |