Ticket #1653: sssraid.h.diff

File sssraid.h.diff, 3.5 KB (added by steven.song, 17 months ago)
  • new file sssraid.h

    diff --git a/sssraid.h b/sssraid.h
    new file mode 100644
    index 0000000..8e34dc0
    - +  
     1/*
     2 * sssraid.h
     3 *
     4 * Home page of code is: http://www.smartmontools.org
     5 *
     6 * Copyright (C) 2022 3SNIC Inc.
     7 *
     8 * SPDX-License-Identifier: GPL-2.0-or-later
     9 */
     10
     11#ifndef _SSSRAID_H_
     12#define _SSSRAID_H_
     13#include <stdint.h>
     14#define u8  uint8_t
     15#define u16 uint16_t
     16#define u32 uint32_t
     17#define u64 uint64_t
     18#define ADM_MAX_DATA_SIZE 0x1000U               // 4096
     19#define ADM_SCSI_CDB_MAX_LEN 32
     20#define ADM_SCSI_CDB_SENSE_MAX_LEN 96
     21#define ADM_SCSI_CDB_SENSE_LEN32 32
     22#define ADM_CMD_SHOW_PDLIST 0x502               // 1282
     23#define ADM_CMD_SCSI_PASSTHROUGH 0x51e  // 1310
     24#define BSG_APPEND_TIMEOUT_MS 600000
     25#define DEFAULT_CONMMAND_TIMEOUT_MS 180000
     26#define ADM_BSG_MSGCODE_SCSI_PTHRU  1
     27
     28#define ADM_RAID_SET 0xc0
     29#define ADM_RAID_WRITE 0xc1
     30#define ADM_RAID_READ 0xc2
     31#define ADM_RAID_PARAM_WRITE 0xc3
     32#define ADM_RAID_READ_FROM_CQE 0xc4
     33
     34// pdlist device type interface
     35enum adm_pdlist_intf {
     36    ADM_DEVICE_TYPE_SAS = 1,
     37    ADM_DEVICE_TYPE_EXP = 2,
     38    ADM_DEVICE_TYPE_SATA = 8,
     39    ADM_DEVICE_TYPE_PLANE = 9,
     40    ADM_DEVICE_TYPE_NVME = 10,
     41    ADM_DEVICE_TYPE_UNKNOW,
     42    ADM_DEVICE_TYPE_BUTT
     43};
     44
     45struct cmd_pdlist_idx {
     46    u16 start_idx;
     47    u16 count;
     48    u32 rsvd;
     49};
     50
     51struct cmd_pdlist_entry {
     52    u16 enc_id;
     53    u16 slot_id;
     54    u8 interface;
     55    u8 media_type;
     56    u8 logi_type;
     57    u8 logi_status;
     58        u32 reserve[26];
     59};
     60#define CMD_PDS_MAX_NUM 256U
     61#define CMD_PDLIST_ONCE_NUM ((ADM_MAX_DATA_SIZE - 64) / sizeof(struct cmd_pdlist_entry))
     62
     63struct cmd_show_pdlist {
     64    u16 num;
     65    u16 rsvd0;
     66    u32 rsvd1[15];
     67    struct cmd_pdlist_entry disks[CMD_PDLIST_ONCE_NUM];
     68};
     69
     70struct multi_disk_location {
     71    u16 enc_id;
     72    u16 slot_id;
     73    u16 did;
     74    u8 flag;
     75    u8 rsvd;
     76};
     77
     78struct cmd_scsi_passthrough {
     79    struct multi_disk_location loc;
     80    u8 lun;
     81    u8 cdb_len;
     82    u8 sense_buffer_len;
     83    u8 rsvd0;
     84    u8 cdb[32];
     85    u32 rsvd1;
     86    u8 *sense_buffer;
     87};
     88
     89struct sssraid_passthru_common_cmd {
     90        u8      opcode;
     91        u8      flags;
     92        u16     rsvd0;
     93        u32     nsid;
     94        union {
     95                struct {
     96                        u16 subopcode;
     97                        u16 rsvd1;
     98                } info_0;
     99                u32 cdw2;
     100        };
     101        union {
     102                struct {
     103                        u16 data_len;
     104                        u16 param_len;
     105                } info_1;
     106                u32 cdw3;
     107        };
     108        u64 metadata;
     109
     110        u64 addr;
     111    u32 metadata_len;
     112    u32 data_len;
     113
     114        u32 cdw10;
     115        u32 cdw11;
     116        u32 cdw12;
     117        u32 cdw13;
     118        u32 cdw14;
     119        u32 cdw15;
     120        u32 timeout_ms;
     121        u32 result0;
     122        u32 result1;
     123};
     124
     125struct sssraid_ioq_passthru_cmd {
     126        u8  opcode;
     127        u8  flags;
     128        u16 rsvd0;
     129        u32 nsid;
     130        union {
     131                struct {
     132                        u16 res_sense_len;
     133                        u8  cdb_len;
     134                        u8  rsvd0;
     135                } info_0;
     136                u32 cdw2;
     137        };
     138        union {
     139                struct {
     140                        u16 subopcode;
     141                        u16 rsvd1;
     142                } info_1;
     143                u32 cdw3;
     144        };
     145        union {
     146                struct {
     147                        u16 rsvd;
     148                        u16 param_len;
     149                } info_2;
     150                u32 cdw4;
     151        };
     152        u32 cdw5;
     153        u64 addr;
     154        u64 prp2;
     155        union {
     156                struct {
     157                        u16 eid;
     158                        u16 sid;
     159                } info_3;
     160                u32 cdw10;
     161        };
     162        union {
     163                struct {
     164                        u16 did;
     165                        u8  did_flag;
     166                        u8  rsvd2;
     167                } info_4;
     168                u32 cdw11;
     169        };
     170        u32 cdw12;
     171        u32 cdw13;
     172        u32 cdw14;
     173        u32 data_len;
     174        u32 cdw16;
     175        u32 cdw17;
     176        u32 cdw18;
     177        u32 cdw19;
     178        u32 cdw20;
     179        u32 cdw21;
     180        u32 cdw22;
     181        u32 cdw23;
     182        u64 sense_addr;
     183        u32 cdw26[4];
     184        u32 timeout_ms;
     185        u32 result0;
     186        u32 result1;
     187};
     188
     189struct bsg_ioctl_cmd {
     190    u32 msgcode;
     191    u32 control;
     192    union {
     193        struct sssraid_passthru_common_cmd ioctl_r64;
     194        struct sssraid_ioq_passthru_cmd ioctl_pthru;
     195    };
     196};
     197
     198#endif // _SSSRAID_H
     199 No newline at end of file