brintos

brintos / linux-shallow public Read only

0
0
Text · 34.5 KiB · 5fc1f99 Raw
1320 lines · c
1/*  linux/drivers/scsi/esas2r/atvda.h2 *       ATTO VDA interface definitions3 *4 *  Copyright (c) 2001-2013 ATTO Technology, Inc.5 *  (mailto:linuxdrivers@attotech.com)6 */7/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/8/*9 *  This program is free software; you can redistribute it and/or modify10 *  it under the terms of the GNU General Public License as published by11 *  the Free Software Foundation; version 2 of the License.12 *13 *  This program is distributed in the hope that it will be useful,14 *  but WITHOUT ANY WARRANTY; without even the implied warranty of15 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the16 *  GNU General Public License for more details.17 *18 *  NO WARRANTY19 *  THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR20 *  CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT21 *  LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,22 *  MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is23 *  solely responsible for determining the appropriateness of using and24 *  distributing the Program and assumes all risks associated with its25 *  exercise of rights under this Agreement, including but not limited to26 *  the risks and costs of program errors, damage to or loss of data,27 *  programs or equipment, and unavailability or interruption of operations.28 *29 *  DISCLAIMER OF LIABILITY30 *  NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY31 *  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL32 *  DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND33 *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR34 *  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE35 *  USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED36 *  HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES37 *38 *  You should have received a copy of the GNU General Public License39 *  along with this program; if not, write to the Free Software40 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA41 */42/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/43 44 45#ifndef ATVDA_H46#define ATVDA_H47 48struct __packed atto_dev_addr {49	u64 dev_port;50	u64 hba_port;51	u8 lun;52	u8 flags;53	   #define VDA_DEVADDRF_SATA   0x0154	   #define VDA_DEVADDRF_SSD    0x0255	u8 link_speed; /* VDALINKSPEED_xxx */56	u8 pad[1];57};58 59/* dev_addr2 was added for 64-bit alignment */60 61struct __packed atto_dev_addr2 {62	u64 dev_port;63	u64 hba_port;64	u8 lun;65	u8 flags;66	u8 link_speed;67	u8 pad[5];68};69 70struct __packed atto_vda_sge {71	u32 length;72	u64 address;73};74 75 76/* VDA request function codes */77 78#define VDA_FUNC_SCSI     0x0079#define VDA_FUNC_FLASH    0x0180#define VDA_FUNC_DIAG     0x0281#define VDA_FUNC_AE       0x0382#define VDA_FUNC_CLI      0x0483#define VDA_FUNC_IOCTL    0x0584#define VDA_FUNC_CFG      0x0685#define VDA_FUNC_MGT      0x0786#define VDA_FUNC_GSV      0x0887 88 89/* VDA request status values.  for host driver considerations, values for90 * SCSI requests start at zero.  other requests may use these values as well. */91 92#define RS_SUCCESS          0x00        /*! successful completion            */93#define RS_INV_FUNC         0x01        /*! invalid command function         */94#define RS_BUSY             0x02        /*! insufficient resources           */95#define RS_SEL              0x03        /*! no target at target_id           */96#define RS_NO_LUN           0x04        /*! invalid LUN                      */97#define RS_TIMEOUT          0x05        /*! request timeout                  */98#define RS_OVERRUN          0x06        /*! data overrun                     */99#define RS_UNDERRUN         0x07        /*! data underrun                    */100#define RS_SCSI_ERROR       0x08        /*! SCSI error occurred              */101#define RS_ABORTED          0x0A        /*! command aborted                  */102#define RS_RESID_MISM       0x0B        /*! residual length incorrect        */103#define RS_TM_FAILED        0x0C        /*! task management failed           */104#define RS_RESET            0x0D        /*! aborted due to bus reset         */105#define RS_ERR_DMA_SG       0x0E        /*! error reading SG list            */106#define RS_ERR_DMA_DATA     0x0F        /*! error transferring data          */107#define RS_UNSUPPORTED      0x10        /*! unsupported request              */108#define RS_SEL2             0x70        /*! internal generated RS_SEL        */109#define RS_VDA_BASE         0x80        /*! base of VDA-specific errors      */110#define RS_MGT_BASE         0x80        /*! base of VDA management errors    */111#define RS_SCAN_FAIL        (RS_MGT_BASE + 0x00)112#define RS_DEV_INVALID      (RS_MGT_BASE + 0x01)113#define RS_DEV_ASSIGNED     (RS_MGT_BASE + 0x02)114#define RS_DEV_REMOVE       (RS_MGT_BASE + 0x03)115#define RS_DEV_LOST         (RS_MGT_BASE + 0x04)116#define RS_SCAN_GEN         (RS_MGT_BASE + 0x05)117#define RS_GRP_INVALID      (RS_MGT_BASE + 0x08)118#define RS_GRP_EXISTS       (RS_MGT_BASE + 0x09)119#define RS_GRP_LIMIT        (RS_MGT_BASE + 0x0A)120#define RS_GRP_INTLV        (RS_MGT_BASE + 0x0B)121#define RS_GRP_SPAN         (RS_MGT_BASE + 0x0C)122#define RS_GRP_TYPE         (RS_MGT_BASE + 0x0D)123#define RS_GRP_MEMBERS      (RS_MGT_BASE + 0x0E)124#define RS_GRP_COMMIT       (RS_MGT_BASE + 0x0F)125#define RS_GRP_REBUILD      (RS_MGT_BASE + 0x10)126#define RS_GRP_REBUILD_TYPE (RS_MGT_BASE + 0x11)127#define RS_GRP_BLOCK_SIZE   (RS_MGT_BASE + 0x12)128#define RS_CFG_SAVE         (RS_MGT_BASE + 0x14)129#define RS_PART_LAST        (RS_MGT_BASE + 0x18)130#define RS_ELEM_INVALID     (RS_MGT_BASE + 0x19)131#define RS_PART_MAPPED      (RS_MGT_BASE + 0x1A)132#define RS_PART_TARGET      (RS_MGT_BASE + 0x1B)133#define RS_PART_LUN         (RS_MGT_BASE + 0x1C)134#define RS_PART_DUP         (RS_MGT_BASE + 0x1D)135#define RS_PART_NOMAP       (RS_MGT_BASE + 0x1E)136#define RS_PART_MAX         (RS_MGT_BASE + 0x1F)137#define RS_PART_CAP         (RS_MGT_BASE + 0x20)138#define RS_PART_STATE       (RS_MGT_BASE + 0x21)139#define RS_TEST_IN_PROG     (RS_MGT_BASE + 0x22)140#define RS_METRICS_ERROR    (RS_MGT_BASE + 0x23)141#define RS_HS_ERROR         (RS_MGT_BASE + 0x24)142#define RS_NO_METRICS_TEST  (RS_MGT_BASE + 0x25)143#define RS_BAD_PARAM        (RS_MGT_BASE + 0x26)144#define RS_GRP_MEMBER_SIZE  (RS_MGT_BASE + 0x27)145#define RS_FLS_BASE         0xB0        /*! base of VDA errors               */146#define RS_FLS_ERR_AREA     (RS_FLS_BASE + 0x00)147#define RS_FLS_ERR_BUSY     (RS_FLS_BASE + 0x01)148#define RS_FLS_ERR_RANGE    (RS_FLS_BASE + 0x02)149#define RS_FLS_ERR_BEGIN    (RS_FLS_BASE + 0x03)150#define RS_FLS_ERR_CHECK    (RS_FLS_BASE + 0x04)151#define RS_FLS_ERR_FAIL     (RS_FLS_BASE + 0x05)152#define RS_FLS_ERR_RSRC     (RS_FLS_BASE + 0x06)153#define RS_FLS_ERR_NOFILE   (RS_FLS_BASE + 0x07)154#define RS_FLS_ERR_FSIZE    (RS_FLS_BASE + 0x08)155#define RS_CFG_BASE         0xC0        /*! base of VDA configuration errors */156#define RS_CFG_ERR_BUSY     (RS_CFG_BASE + 0)157#define RS_CFG_ERR_SGE      (RS_CFG_BASE + 1)158#define RS_CFG_ERR_DATE     (RS_CFG_BASE + 2)159#define RS_CFG_ERR_TIME     (RS_CFG_BASE + 3)160#define RS_DEGRADED         0xFB        /*! degraded mode                    */161#define RS_CLI_INTERNAL     0xFC        /*! VDA CLI internal error           */162#define RS_VDA_INTERNAL     0xFD        /*! catch-all                        */163#define RS_PENDING          0xFE        /*! pending, not started             */164#define RS_STARTED          0xFF        /*! started                          */165 166 167/* flash request subfunctions.  these are used in both the IOCTL and the168 * driver-firmware interface (VDA_FUNC_FLASH). */169 170#define VDA_FLASH_BEGINW  0x00171#define VDA_FLASH_READ    0x01172#define VDA_FLASH_WRITE   0x02173#define VDA_FLASH_COMMIT  0x03174#define VDA_FLASH_CANCEL  0x04175#define VDA_FLASH_INFO    0x05176#define VDA_FLASH_FREAD   0x06177#define VDA_FLASH_FWRITE  0x07178#define VDA_FLASH_FINFO   0x08179 180 181/* IOCTL request subfunctions.  these identify the payload type for182 * VDA_FUNC_IOCTL.183 */184 185#define VDA_IOCTL_HBA     0x00186#define VDA_IOCTL_CSMI    0x01187#define VDA_IOCTL_SMP     0x02188 189struct __packed atto_vda_devinfo {190	struct atto_dev_addr dev_addr;191	u8 vendor_id[8];192	u8 product_id[16];193	u8 revision[4];194	u64 capacity;195	u32 block_size;196	u8 dev_type;197 198	union {199		u8 dev_status;200	    #define VDADEVSTAT_INVALID   0x00201	    #define VDADEVSTAT_CORRUPT   VDADEVSTAT_INVALID202	    #define VDADEVSTAT_ASSIGNED  0x01203	    #define VDADEVSTAT_SPARE     0x02204	    #define VDADEVSTAT_UNAVAIL   0x03205	    #define VDADEVSTAT_PT_MAINT  0x04206	    #define VDADEVSTAT_LCLSPARE  0x05207	    #define VDADEVSTAT_UNUSEABLE 0x06208	    #define VDADEVSTAT_AVAIL     0xFF209 210		u8 op_ctrl;211	    #define VDA_DEV_OP_CTRL_START   0x01212	    #define VDA_DEV_OP_CTRL_HALT    0x02213	    #define VDA_DEV_OP_CTRL_RESUME  0x03214	    #define VDA_DEV_OP_CTRL_CANCEL  0x04215	};216 217	u8 member_state;218	#define VDAMBRSTATE_ONLINE   0x00219	#define VDAMBRSTATE_DEGRADED 0x01220	#define VDAMBRSTATE_UNAVAIL  0x02221	#define VDAMBRSTATE_FAULTED  0x03222	#define VDAMBRSTATE_MISREAD  0x04223	#define VDAMBRSTATE_INCOMPAT 0x05224 225	u8 operation;226	#define VDAOP_NONE           0x00227	#define VDAOP_REBUILD        0x01228	#define VDAOP_ERASE          0x02229	#define VDAOP_PATTERN        0x03230	#define VDAOP_CONVERSION     0x04231	#define VDAOP_FULL_INIT      0x05232	#define VDAOP_QUICK_INIT     0x06233	#define VDAOP_SECT_SCAN      0x07234	#define VDAOP_SECT_SCAN_PARITY      0x08235	#define VDAOP_SECT_SCAN_PARITY_FIX  0x09236	#define VDAOP_RECOV_REBUILD  0x0A237 238	u8 op_status;239	#define VDAOPSTAT_OK         0x00240	#define VDAOPSTAT_FAULTED    0x01241	#define VDAOPSTAT_HALTED     0x02242	#define VDAOPSTAT_INT        0x03243 244	u8 progress; /* 0 - 100% */245	u16 ses_dev_index;246	#define VDASESDI_INVALID     0xFFFF247 248	u8 serial_no[32];249 250	union {251		u16 target_id;252	#define VDATGTID_INVALID     0xFFFF253 254		u16 features_mask;255	};256 257	u16 lun;258	u16 features;259	#define VDADEVFEAT_ENC_SERV  0x0001260	#define VDADEVFEAT_IDENT     0x0002261	#define VDADEVFEAT_DH_SUPP   0x0004262	#define VDADEVFEAT_PHYS_ID   0x0008263 264	u8 ses_element_id;265	u8 link_speed;266	#define VDALINKSPEED_UNKNOWN 0x00267	#define VDALINKSPEED_1GB     0x01268	#define VDALINKSPEED_1_5GB   0x02269	#define VDALINKSPEED_2GB     0x03270	#define VDALINKSPEED_3GB     0x04271	#define VDALINKSPEED_4GB     0x05272	#define VDALINKSPEED_6GB     0x06273	#define VDALINKSPEED_8GB     0x07274 275	u16 phys_target_id;276	u8 reserved[2];277};278 279 280/*! struct atto_vda_devinfo2 is a replacement for atto_vda_devinfo.  it281 * extends beyond the 0x70 bytes allowed in atto_vda_mgmt_req; therefore,282 * the entire structure is DMaed between the firmware and host buffer and283 * the data will always be in little endian format.284 */285 286struct __packed atto_vda_devinfo2 {287	struct atto_dev_addr dev_addr;288	u8 vendor_id[8];289	u8 product_id[16];290	u8 revision[4];291	u64 capacity;292	u32 block_size;293	u8 dev_type;294	u8 dev_status;295	u8 member_state;296	u8 operation;297	u8 op_status;298	u8 progress;299	u16 ses_dev_index;300	u8 serial_no[32];301	union {302		u16 target_id;303		u16 features_mask;304	};305 306	u16 lun;307	u16 features;308	u8 ses_element_id;309	u8 link_speed;310	u16 phys_target_id;311	u8 reserved[2];312 313/* This is where fields specific to struct atto_vda_devinfo2 begin.  Note314 * that the structure version started at one so applications that unionize this315 * structure with atto_vda_dev_info can differentiate them if desired.316 */317 318	u8 version;319	#define VDADEVINFO_VERSION0         0x00320	#define VDADEVINFO_VERSION1         0x01321	#define VDADEVINFO_VERSION2         0x02322	#define VDADEVINFO_VERSION3         0x03323	#define VDADEVINFO_VERSION          VDADEVINFO_VERSION3324 325	u8 reserved2[3];326 327	/* sector scanning fields */328 329	u32 ss_curr_errors;330	u64 ss_curr_scanned;331	u32 ss_curr_recvrd;332	u32 ss_scan_length;333	u32 ss_total_errors;334	u32 ss_total_recvrd;335	u32 ss_num_scans;336 337	/* grp_name was added in version 2 of this structure. */338 339	char grp_name[15];340	u8 reserved3[4];341 342	/* dev_addr_list was added in version 3 of this structure. */343 344	u8 num_dev_addr;345	struct atto_dev_addr2 dev_addr_list[8];346};347 348 349struct __packed atto_vda_grp_info {350	u8 grp_index;351	#define VDA_MAX_RAID_GROUPS         32352 353	char grp_name[15];354	u64 capacity;355	u32 block_size;356	u32 interleave;357	u8 type;358	#define VDA_GRP_TYPE_RAID0          0359	#define VDA_GRP_TYPE_RAID1          1360	#define VDA_GRP_TYPE_RAID4          4361	#define VDA_GRP_TYPE_RAID5          5362	#define VDA_GRP_TYPE_RAID6          6363	#define VDA_GRP_TYPE_RAID10         10364	#define VDA_GRP_TYPE_RAID40         40365	#define VDA_GRP_TYPE_RAID50         50366	#define VDA_GRP_TYPE_RAID60         60367	#define VDA_GRP_TYPE_DVRAID_HS      252368	#define VDA_GRP_TYPE_DVRAID_NOHS    253369	#define VDA_GRP_TYPE_JBOD           254370	#define VDA_GRP_TYPE_SPARE          255371 372	union {373		u8 status;374	    #define VDA_GRP_STAT_INVALID  0x00375	    #define VDA_GRP_STAT_NEW      0x01376	    #define VDA_GRP_STAT_WAITING  0x02377	    #define VDA_GRP_STAT_ONLINE   0x03378	    #define VDA_GRP_STAT_DEGRADED 0x04379	    #define VDA_GRP_STAT_OFFLINE  0x05380	    #define VDA_GRP_STAT_DELETED  0x06381	    #define VDA_GRP_STAT_RECOV_BASIC    0x07382	    #define VDA_GRP_STAT_RECOV_EXTREME  0x08383 384		u8 op_ctrl;385	    #define VDA_GRP_OP_CTRL_START   0x01386	    #define VDA_GRP_OP_CTRL_HALT    0x02387	    #define VDA_GRP_OP_CTRL_RESUME  0x03388	    #define VDA_GRP_OP_CTRL_CANCEL  0x04389	};390 391	u8 rebuild_state;392	#define VDA_RBLD_NONE      0x00393	#define VDA_RBLD_REBUILD   0x01394	#define VDA_RBLD_ERASE     0x02395	#define VDA_RBLD_PATTERN   0x03396	#define VDA_RBLD_CONV      0x04397	#define VDA_RBLD_FULL_INIT 0x05398	#define VDA_RBLD_QUICK_INIT 0x06399	#define VDA_RBLD_SECT_SCAN 0x07400	#define VDA_RBLD_SECT_SCAN_PARITY     0x08401	#define VDA_RBLD_SECT_SCAN_PARITY_FIX 0x09402	#define VDA_RBLD_RECOV_REBUILD 0x0A403	#define VDA_RBLD_RECOV_BASIC   0x0B404	#define VDA_RBLD_RECOV_EXTREME 0x0C405 406	u8 span_depth;407	u8 progress;408	u8 mirror_width;409	u8 stripe_width;410	u8 member_cnt;411 412	union {413		u16 members[32];414	#define VDA_MEMBER_MISSING  0xFFFF415	#define VDA_MEMBER_NEW      0xFFFE416		u16 features_mask;417	};418 419	u16 features;420	#define VDA_GRP_FEAT_HOTSWAP    0x0001421	#define VDA_GRP_FEAT_SPDRD_MASK 0x0006422	#define VDA_GRP_FEAT_SPDRD_DIS  0x0000423	#define VDA_GRP_FEAT_SPDRD_ENB  0x0002424	#define VDA_GRP_FEAT_SPDRD_AUTO 0x0004425	#define VDA_GRP_FEAT_IDENT      0x0008426	#define VDA_GRP_FEAT_RBLDPRI_MASK 0x0030427	#define VDA_GRP_FEAT_RBLDPRI_LOW  0x0010428	#define VDA_GRP_FEAT_RBLDPRI_SAME 0x0020429	#define VDA_GRP_FEAT_RBLDPRI_HIGH 0x0030430	#define VDA_GRP_FEAT_WRITE_CACHE  0x0040431	#define VDA_GRP_FEAT_RBLD_RESUME  0x0080432	#define VDA_GRP_FEAT_SECT_RESUME  0x0100433	#define VDA_GRP_FEAT_INIT_RESUME  0x0200434	#define VDA_GRP_FEAT_SSD          0x0400435	#define VDA_GRP_FEAT_BOOT_DEV     0x0800436 437	/*438	 * for backward compatibility, a prefetch value of zero means the439	 * setting is ignored/unsupported.  therefore, the firmware supported440	 * 0-6 values are incremented to 1-7.441	 */442 443	u8 prefetch;444	u8 op_status;445	#define VDAGRPOPSTAT_MASK       0x0F446	#define VDAGRPOPSTAT_INVALID    0x00447	#define VDAGRPOPSTAT_OK         0x01448	#define VDAGRPOPSTAT_FAULTED    0x02449	#define VDAGRPOPSTAT_HALTED     0x03450	#define VDAGRPOPSTAT_INT        0x04451	#define VDAGRPOPPROC_MASK       0xF0452	#define VDAGRPOPPROC_STARTABLE  0x10453	#define VDAGRPOPPROC_CANCELABLE 0x20454	#define VDAGRPOPPROC_RESUMABLE  0x40455	#define VDAGRPOPPROC_HALTABLE   0x80456	u8 over_provision;457	u8 reserved[3];458 459};460 461 462struct __packed atto_vdapart_info {463	u8 part_no;464	#define VDA_MAX_PARTITIONS   128465 466	char grp_name[15];467	u64 part_size;468	u64 start_lba;469	u32 block_size;470	u16 target_id;471	u8 LUN;472	char serial_no[41];473	u8 features;474	#define VDAPI_FEAT_WRITE_CACHE   0x01475 476	u8 reserved[7];477};478 479 480struct __packed atto_vda_dh_info {481	u8 req_type;482	#define VDADH_RQTYPE_CACHE      0x01483	#define VDADH_RQTYPE_FETCH      0x02484	#define VDADH_RQTYPE_SET_STAT   0x03485	#define VDADH_RQTYPE_GET_STAT   0x04486 487	u8 req_qual;488	#define VDADH_RQQUAL_SMART      0x01489	#define VDADH_RQQUAL_MEDDEF     0x02490	#define VDADH_RQQUAL_INFOEXC    0x04491 492	u8 num_smart_attribs;493	u8 status;494	#define VDADH_STAT_DISABLE      0x00495	#define VDADH_STAT_ENABLE       0x01496 497	u32 med_defect_cnt;498	u32 info_exc_cnt;499	u8 smart_status;500	#define VDADH_SMARTSTAT_OK      0x00501	#define VDADH_SMARTSTAT_ERR     0x01502 503	u8 reserved[35];504	struct atto_vda_sge sge[1];505};506 507 508struct __packed atto_vda_dh_smart {509	u8 attrib_id;510	u8 current_val;511	u8 worst;512	u8 threshold;513	u8 raw_data[6];514	u8 raw_attrib_status;515	#define VDADHSM_RAWSTAT_PREFAIL_WARRANTY        0x01516	#define VDADHSM_RAWSTAT_ONLINE_COLLECTION       0x02517	#define VDADHSM_RAWSTAT_PERFORMANCE_ATTR        0x04518	#define VDADHSM_RAWSTAT_ERROR_RATE_ATTR         0x08519	#define VDADHSM_RAWSTAT_EVENT_COUNT_ATTR        0x10520	#define VDADHSM_RAWSTAT_SELF_PRESERVING_ATTR    0x20521 522	u8 calc_attrib_status;523	#define VDADHSM_CALCSTAT_UNKNOWN                0x00524	#define VDADHSM_CALCSTAT_GOOD                   0x01525	#define VDADHSM_CALCSTAT_PREFAIL                0x02526	#define VDADHSM_CALCSTAT_OLDAGE                 0x03527 528	u8 reserved[4];529};530 531 532struct __packed atto_vda_metrics_info {533	u8 data_version;534	#define VDAMET_VERSION0         0x00535	#define VDAMET_VERSION          VDAMET_VERSION0536 537	u8 metrics_action;538	#define VDAMET_METACT_NONE      0x00539	#define VDAMET_METACT_START     0x01540	#define VDAMET_METACT_STOP      0x02541	#define VDAMET_METACT_RETRIEVE  0x03542	#define VDAMET_METACT_CLEAR     0x04543 544	u8 test_action;545	#define VDAMET_TSTACT_NONE              0x00546	#define VDAMET_TSTACT_STRT_INIT         0x01547	#define VDAMET_TSTACT_STRT_READ         0x02548	#define VDAMET_TSTACT_STRT_VERIFY       0x03549	#define VDAMET_TSTACT_STRT_INIT_VERIFY  0x04550	#define VDAMET_TSTACT_STOP              0x05551 552	u8 num_dev_indexes;553	#define VDAMET_ALL_DEVICES      0xFF554 555	u16 dev_indexes[32];556	u8 reserved[12];557	struct atto_vda_sge sge[1];558};559 560 561struct __packed atto_vda_metrics_data {562	u16 dev_index;563	u16 length;564	#define VDAMD_LEN_LAST          0x8000565	#define VDAMD_LEN_MASK          0x0FFF566 567	u32 flags;568	#define VDAMDF_RUN          0x00000007569	#define VDAMDF_RUN_READ     0x00000001570	#define VDAMDF_RUN_WRITE    0x00000002571	#define VDAMDF_RUN_ALL      0x00000004572	#define VDAMDF_READ         0x00000010573	#define VDAMDF_WRITE        0x00000020574	#define VDAMDF_ALL          0x00000040575	#define VDAMDF_DRIVETEST    0x40000000576	#define VDAMDF_NEW          0x80000000577 578	u64 total_read_data;579	u64 total_write_data;580	u64 total_read_io;581	u64 total_write_io;582	u64 read_start_time;583	u64 read_stop_time;584	u64 write_start_time;585	u64 write_stop_time;586	u64 read_maxio_time;587	u64 wpvdadmetricsdatarite_maxio_time;588	u64 read_totalio_time;589	u64 write_totalio_time;590	u64 read_total_errs;591	u64 write_total_errs;592	u64 read_recvrd_errs;593	u64 write_recvrd_errs;594	u64 miscompares;595};596 597 598struct __packed atto_vda_schedule_info {599	u8 schedule_type;600	#define VDASI_SCHTYPE_ONETIME   0x01601	#define VDASI_SCHTYPE_DAILY     0x02602	#define VDASI_SCHTYPE_WEEKLY    0x03603 604	u8 operation;605	#define VDASI_OP_NONE           0x00606	#define VDASI_OP_CREATE         0x01607	#define VDASI_OP_CANCEL         0x02608 609	u8 hour;610	u8 minute;611	u8 day;612	#define VDASI_DAY_NONE          0x00613 614	u8 progress;615	#define VDASI_PROG_NONE         0xFF616 617	u8 event_type;618	#define VDASI_EVTTYPE_SECT_SCAN             0x01619	#define VDASI_EVTTYPE_SECT_SCAN_PARITY      0x02620	#define VDASI_EVTTYPE_SECT_SCAN_PARITY_FIX  0x03621 622	u8 recurrences;623	#define VDASI_RECUR_FOREVER     0x00624 625	u32 id;626	#define VDASI_ID_NONE           0x00627 628	char grp_name[15];629	u8 reserved[85];630};631 632 633struct __packed atto_vda_n_vcache_info {634	u8 super_cap_status;635	#define VDANVCI_SUPERCAP_NOT_PRESENT       0x00636	#define VDANVCI_SUPERCAP_FULLY_CHARGED     0x01637	#define VDANVCI_SUPERCAP_NOT_CHARGED       0x02638 639	u8 nvcache_module_status;640	#define VDANVCI_NVCACHEMODULE_NOT_PRESENT  0x00641	#define VDANVCI_NVCACHEMODULE_PRESENT      0x01642 643	u8 protection_mode;644	#define VDANVCI_PROTMODE_HI_PROTECT        0x00645	#define VDANVCI_PROTMODE_HI_PERFORM        0x01646 647	u8 reserved[109];648};649 650 651struct __packed atto_vda_buzzer_info {652	u8 status;653	#define VDABUZZI_BUZZER_OFF           0x00654	#define VDABUZZI_BUZZER_ON            0x01655	#define VDABUZZI_BUZZER_LAST          0x02656 657	u8 reserved[3];658	u32 duration;659	#define VDABUZZI_DURATION_INDEFINITE  0xffffffff660 661	u8 reserved2[104];662};663 664 665struct  __packed atto_vda_adapter_info {666	u8 version;667	#define VDAADAPINFO_VERSION0         0x00668	#define VDAADAPINFO_VERSION          VDAADAPINFO_VERSION0669 670	u8 reserved;671	signed short utc_offset;672	u32 utc_time;673	u32 features;674	#define VDA_ADAP_FEAT_IDENT     0x0001675	#define VDA_ADAP_FEAT_BUZZ_ERR  0x0002676	#define VDA_ADAP_FEAT_UTC_TIME  0x0004677 678	u32 valid_features;679	char active_config[33];680	u8 temp_count;681	u8 fan_count;682	u8 reserved3[61];683};684 685 686struct __packed atto_vda_temp_info {687	u8 temp_index;688	u8 max_op_temp;689	u8 min_op_temp;690	u8 op_temp_warn;691	u8 temperature;692	u8 type;693	#define VDA_TEMP_TYPE_CPU  1694 695	u8 reserved[106];696};697 698 699struct __packed atto_vda_fan_info {700	u8 fan_index;701	u8 status;702	#define VDA_FAN_STAT_UNKNOWN 0703	#define VDA_FAN_STAT_NORMAL  1704	#define VDA_FAN_STAT_FAIL    2705 706	u16 crit_pvdafaninfothreshold;707	u16 warn_threshold;708	u16 speed;709	u8 reserved[104];710};711 712 713/* VDA management commands */714 715#define VDAMGT_DEV_SCAN         0x00716#define VDAMGT_DEV_INFO         0x01717#define VDAMGT_DEV_CLEAN        0x02718#define VDAMGT_DEV_IDENTIFY     0x03719#define VDAMGT_DEV_IDENTSTOP    0x04720#define VDAMGT_DEV_PT_INFO      0x05721#define VDAMGT_DEV_FEATURES     0x06722#define VDAMGT_DEV_PT_FEATURES  0x07723#define VDAMGT_DEV_HEALTH_REQ   0x08724#define VDAMGT_DEV_METRICS      0x09725#define VDAMGT_DEV_INFO2        0x0A726#define VDAMGT_DEV_OPERATION    0x0B727#define VDAMGT_DEV_INFO2_BYADDR 0x0C728#define VDAMGT_GRP_INFO         0x10729#define VDAMGT_GRP_CREATE       0x11730#define VDAMGT_GRP_DELETE       0x12731#define VDAMGT_ADD_STORAGE      0x13732#define VDAMGT_MEMBER_ADD       0x14733#define VDAMGT_GRP_COMMIT       0x15734#define VDAMGT_GRP_REBUILD      0x16735#define VDAMGT_GRP_COMMIT_INIT  0x17736#define VDAMGT_QUICK_RAID       0x18737#define VDAMGT_GRP_FEATURES     0x19738#define VDAMGT_GRP_COMMIT_INIT_AUTOMAP  0x1A739#define VDAMGT_QUICK_RAID_INIT_AUTOMAP  0x1B740#define VDAMGT_GRP_OPERATION    0x1C741#define VDAMGT_CFG_SAVE         0x20742#define VDAMGT_LAST_ERROR       0x21743#define VDAMGT_ADAP_INFO        0x22744#define VDAMGT_ADAP_FEATURES    0x23745#define VDAMGT_TEMP_INFO        0x24746#define VDAMGT_FAN_INFO         0x25747#define VDAMGT_PART_INFO        0x30748#define VDAMGT_PART_MAP         0x31749#define VDAMGT_PART_UNMAP       0x32750#define VDAMGT_PART_AUTOMAP     0x33751#define VDAMGT_PART_SPLIT       0x34752#define VDAMGT_PART_MERGE       0x35753#define VDAMGT_SPARE_LIST       0x40754#define VDAMGT_SPARE_ADD        0x41755#define VDAMGT_SPARE_REMOVE     0x42756#define VDAMGT_LOCAL_SPARE_ADD  0x43757#define VDAMGT_SCHEDULE_EVENT   0x50758#define VDAMGT_SCHEDULE_INFO    0x51759#define VDAMGT_NVCACHE_INFO     0x60760#define VDAMGT_NVCACHE_SET      0x61761#define VDAMGT_BUZZER_INFO      0x70762#define VDAMGT_BUZZER_SET       0x71763 764 765struct __packed atto_vda_ae_hdr {766	u8 bylength;767	u8 byflags;768	#define VDAAE_HDRF_EVENT_ACK    0x01769 770	u8 byversion;771	#define VDAAE_HDR_VER_0         0772 773	u8 bytype;774	#define VDAAE_HDR_TYPE_RAID     1775	#define VDAAE_HDR_TYPE_LU       2776	#define VDAAE_HDR_TYPE_DISK     3777	#define VDAAE_HDR_TYPE_RESET    4778	#define VDAAE_HDR_TYPE_LOG_INFO 5779	#define VDAAE_HDR_TYPE_LOG_WARN 6780	#define VDAAE_HDR_TYPE_LOG_CRIT 7781	#define VDAAE_HDR_TYPE_LOG_FAIL 8782	#define VDAAE_HDR_TYPE_NVC      9783	#define VDAAE_HDR_TYPE_TLG_INFO 10784	#define VDAAE_HDR_TYPE_TLG_WARN 11785	#define VDAAE_HDR_TYPE_TLG_CRIT 12786	#define VDAAE_HDR_TYPE_PWRMGT   13787	#define VDAAE_HDR_TYPE_MUTE     14788	#define VDAAE_HDR_TYPE_DEV      15789};790 791 792struct  __packed atto_vda_ae_raid {793	struct atto_vda_ae_hdr hdr;794	u32 dwflags;795	#define VDAAE_GROUP_STATE   0x00000001796	#define VDAAE_RBLD_STATE    0x00000002797	#define VDAAE_RBLD_PROG     0x00000004798	#define VDAAE_MEMBER_CHG    0x00000008799	#define VDAAE_PART_CHG      0x00000010800	#define VDAAE_MEM_STATE_CHG 0x00000020801 802	u8 bygroup_state;803	#define VDAAE_RAID_INVALID  0804	#define VDAAE_RAID_NEW      1805	#define VDAAE_RAID_WAITING  2806	#define VDAAE_RAID_ONLINE   3807	#define VDAAE_RAID_DEGRADED 4808	#define VDAAE_RAID_OFFLINE  5809	#define VDAAE_RAID_DELETED  6810	#define VDAAE_RAID_BASIC    7811	#define VDAAE_RAID_EXTREME  8812	#define VDAAE_RAID_UNKNOWN  9813 814	u8 byrebuild_state;815	#define VDAAE_RBLD_NONE       0816	#define VDAAE_RBLD_REBUILD    1817	#define VDAAE_RBLD_ERASE      2818	#define VDAAE_RBLD_PATTERN    3819	#define VDAAE_RBLD_CONV       4820	#define VDAAE_RBLD_FULL_INIT  5821	#define VDAAE_RBLD_QUICK_INIT 6822	#define VDAAE_RBLD_SECT_SCAN  7823	#define VDAAE_RBLD_SECT_SCAN_PARITY     8824	#define VDAAE_RBLD_SECT_SCAN_PARITY_FIX 9825	#define VDAAE_RBLD_RECOV_REBUILD 10826	#define VDAAE_RBLD_UNKNOWN    11827 828	u8 byrebuild_progress;829	u8 op_status;830	#define VDAAE_GRPOPSTAT_MASK       0x0F831	#define VDAAE_GRPOPSTAT_INVALID    0x00832	#define VDAAE_GRPOPSTAT_OK         0x01833	#define VDAAE_GRPOPSTAT_FAULTED    0x02834	#define VDAAE_GRPOPSTAT_HALTED     0x03835	#define VDAAE_GRPOPSTAT_INT        0x04836	#define VDAAE_GRPOPPROC_MASK       0xF0837	#define VDAAE_GRPOPPROC_STARTABLE  0x10838	#define VDAAE_GRPOPPROC_CANCELABLE 0x20839	#define VDAAE_GRPOPPROC_RESUMABLE  0x40840	#define VDAAE_GRPOPPROC_HALTABLE   0x80841	char acname[15];842	u8 byreserved;843	u8 byreserved2[0x80 - 0x1C];844};845 846 847struct __packed atto_vda_ae_lu_tgt_lun {848	u16 wtarget_id;849	u8 bylun;850	u8 byreserved;851};852 853 854struct __packed atto_vda_ae_lu_tgt_lun_raid {855	u16 wtarget_id;856	u8 bylun;857	u8 byreserved;858	u32 dwinterleave;859	u32 dwblock_size;860};861 862 863struct __packed atto_vda_ae_lu {864	struct atto_vda_ae_hdr hdr;865	u32 dwevent;866	#define VDAAE_LU_DISC        0x00000001867	#define VDAAE_LU_LOST        0x00000002868	#define VDAAE_LU_STATE       0x00000004869	#define VDAAE_LU_PASSTHROUGH 0x10000000870	#define VDAAE_LU_PHYS_ID     0x20000000871 872	u8 bystate;873	#define VDAAE_LU_UNDEFINED        0874	#define VDAAE_LU_NOT_PRESENT      1875	#define VDAAE_LU_OFFLINE          2876	#define VDAAE_LU_ONLINE           3877	#define VDAAE_LU_DEGRADED         4878	#define VDAAE_LU_FACTORY_DISABLED 5879	#define VDAAE_LU_DELETED          6880	#define VDAAE_LU_BUSSCAN          7881	#define VDAAE_LU_UNKNOWN          8882 883	u8 byreserved;884	u16 wphys_target_id;885 886	union {887		struct atto_vda_ae_lu_tgt_lun tgtlun;888		struct atto_vda_ae_lu_tgt_lun_raid tgtlun_raid;889	} id;890};891 892 893struct __packed atto_vda_ae_disk {894	struct atto_vda_ae_hdr hdr;895};896 897 898#define VDAAE_LOG_STRSZ 64899 900struct __packed atto_vda_ae_log {901	struct atto_vda_ae_hdr hdr;902	char aclog_ascii[VDAAE_LOG_STRSZ];903};904 905 906#define VDAAE_TLG_STRSZ 56907 908struct __packed atto_vda_ae_timestamp_log {909	struct atto_vda_ae_hdr hdr;910	u32 dwtimestamp;911	char aclog_ascii[VDAAE_TLG_STRSZ];912};913 914 915struct __packed atto_vda_ae_nvc {916	struct atto_vda_ae_hdr hdr;917};918 919 920struct __packed atto_vda_ae_dev {921	struct atto_vda_ae_hdr hdr;922	struct atto_dev_addr devaddr;923};924 925 926union atto_vda_ae {927	struct atto_vda_ae_hdr hdr;928	struct atto_vda_ae_disk disk;929	struct atto_vda_ae_lu lu;930	struct atto_vda_ae_raid raid;931	struct atto_vda_ae_log log;932	struct atto_vda_ae_timestamp_log tslog;933	struct atto_vda_ae_nvc nvcache;934	struct atto_vda_ae_dev dev;935};936 937 938struct __packed atto_vda_date_and_time {939	u8 flags;940	#define VDA_DT_DAY_MASK   0x07941	#define VDA_DT_DAY_NONE   0x00942	#define VDA_DT_DAY_SUN    0x01943	#define VDA_DT_DAY_MON    0x02944	#define VDA_DT_DAY_TUE    0x03945	#define VDA_DT_DAY_WED    0x04946	#define VDA_DT_DAY_THU    0x05947	#define VDA_DT_DAY_FRI    0x06948	#define VDA_DT_DAY_SAT    0x07949	#define VDA_DT_PM         0x40950	#define VDA_DT_MILITARY   0x80951 952	u8 seconds;953	u8 minutes;954	u8 hours;955	u8 day;956	u8 month;957	u16 year;958};959 960#define SGE_LEN_LIMIT   0x003FFFFF      /*! mask of segment length            */961#define SGE_LEN_MAX     0x003FF000      /*! maximum segment length            */962#define SGE_LAST        0x01000000      /*! last entry                        */963#define SGE_ADDR_64     0x04000000      /*! 64-bit addressing flag            */964#define SGE_CHAIN       0x80000000      /*! chain descriptor flag             */965#define SGE_CHAIN_LEN   0x0000FFFF      /*! mask of length in chain entries   */966#define SGE_CHAIN_SZ    0x00FF0000      /*! mask of size of chained buffer    */967 968 969struct __packed atto_vda_cfg_init {970	struct atto_vda_date_and_time date_time;971	u32 sgl_page_size;972	u32 vda_version;973	u32 fw_version;974	u32 fw_build;975	u32 fw_release;976	u32 epoch_time;977	u32 ioctl_tunnel;978	#define VDA_ITF_MEM_RW           0x00000001979	#define VDA_ITF_TRACE            0x00000002980	#define VDA_ITF_SCSI_PASS_THRU   0x00000004981	#define VDA_ITF_GET_DEV_ADDR     0x00000008982	#define VDA_ITF_PHY_CTRL         0x00000010983	#define VDA_ITF_CONN_CTRL        0x00000020984	#define VDA_ITF_GET_DEV_INFO     0x00000040985 986	u32 num_targets_backend;987	u8 reserved[0x48];988};989 990 991/* configuration commands */992 993#define VDA_CFG_INIT          0x00994#define VDA_CFG_GET_INIT      0x01995#define VDA_CFG_GET_INIT2     0x02996 997 998/*! physical region descriptor (PRD) aka scatter/gather entry */999 1000struct __packed atto_physical_region_description {1001	u64 address;1002	u32 ctl_len;1003	#define PRD_LEN_LIMIT       0x003FFFFF1004	#define PRD_LEN_MAX         0x003FF0001005	#define PRD_NXT_PRD_CNT     0x0000007F1006	#define PRD_CHAIN           0x010000001007	#define PRD_DATA            0x000000001008	#define PRD_INT_SEL         0xF00000001009	  #define PRD_INT_SEL_F0    0x000000001010	  #define PRD_INT_SEL_F1    0x400000001011	  #define PRD_INT_SEL_F2    0x800000001012	  #define PRD_INT_SEL_F3    0xc00000001013	  #define PRD_INT_SEL_SRAM  0x100000001014	  #define PRD_INT_SEL_PBSR  0x200000001015 1016};1017 1018/* Request types. NOTE that ALL requests have the same layout for the first1019 * few bytes.1020 */1021struct __packed atto_vda_req_header {1022	u32 length;1023	u8 function;1024	u8 variable1;1025	u8 chain_offset;1026	u8 sg_list_offset;1027	u32 handle;1028};1029 1030 1031#define FCP_CDB_SIZE    161032 1033struct __packed atto_vda_scsi_req {1034	u32 length;1035	u8 function;  /* VDA_FUNC_SCSI */1036	u8 sense_len;1037	u8 chain_offset;1038	u8 sg_list_offset;1039	u32 handle;1040	u32 flags;1041     #define FCP_CMND_LUN_MASK    0x000000FF1042     #define FCP_CMND_TA_MASK     0x000007001043      #define FCP_CMND_TA_SIMPL_Q 0x000000001044      #define FCP_CMND_TA_HEAD_Q  0x000001001045      #define FCP_CMND_TA_ORDRD_Q 0x000002001046      #define FCP_CMND_TA_ACA     0x000004001047     #define FCP_CMND_PRI_MASK    0x000078001048     #define FCP_CMND_TM_MASK     0x00FF00001049      #define FCP_CMND_ATS        0x000200001050      #define FCP_CMND_CTS        0x000400001051      #define FCP_CMND_LRS        0x001000001052      #define FCP_CMND_TRS        0x002000001053      #define FCP_CMND_CLA        0x004000001054      #define FCP_CMND_TRM        0x008000001055     #define FCP_CMND_DATA_DIR    0x030000001056      #define FCP_CMND_WRD        0x010000001057      #define FCP_CMND_RDD        0x020000001058 1059	u8 cdb[FCP_CDB_SIZE];1060	union {1061		struct __packed {1062			u64 ppsense_buf;1063			u16 target_id;1064			u8 iblk_cnt_prd;1065			u8 reserved;1066		};1067 1068		struct atto_physical_region_description sense_buff_prd;1069	};1070 1071	union {1072		struct atto_vda_sge sge[1];1073 1074		u32 abort_handle;1075		u32 dwords[245];1076		struct atto_physical_region_description prd[1];1077	} u;1078};1079 1080 1081struct __packed atto_vda_flash_req {1082	u32 length;1083	u8 function; /* VDA_FUNC_FLASH */1084	u8 sub_func;1085	u8 chain_offset;1086	u8 sg_list_offset;1087	u32 handle;1088	u32 flash_addr;1089	u8 checksum;1090	u8 rsvd[3];1091 1092	union {1093		struct {1094			char file_name[16]; /* 8.3 fname, NULL term, wc=* */1095			struct atto_vda_sge sge[1];1096		} file;1097 1098		struct atto_vda_sge sge[1];1099		struct atto_physical_region_description prde[2];1100	} data;1101};1102 1103 1104struct __packed atto_vda_diag_req {1105	u32 length;1106	u8 function; /* VDA_FUNC_DIAG */1107	u8 sub_func;1108	#define VDA_DIAG_STATUS   0x001109	#define VDA_DIAG_RESET    0x011110	#define VDA_DIAG_PAUSE    0x021111	#define VDA_DIAG_RESUME   0x031112	#define VDA_DIAG_READ     0x041113	#define VDA_DIAG_WRITE    0x051114 1115	u8 chain_offset;1116	u8 sg_list_offset;1117	u32 handle;1118	u32 rsvd;1119	u64 local_addr;1120	struct atto_vda_sge sge[1];1121};1122 1123 1124struct __packed atto_vda_ae_req {1125	u32 length;1126	u8 function; /* VDA_FUNC_AE */1127	u8 reserved1;1128	u8 chain_offset;1129	u8 sg_list_offset;1130	u32 handle;1131 1132	union {1133		struct atto_vda_sge sge[1];1134		struct atto_physical_region_description prde[1];1135	};1136};1137 1138 1139struct __packed atto_vda_cli_req {1140	u32 length;1141	u8 function; /* VDA_FUNC_CLI */1142	u8 reserved1;1143	u8 chain_offset;1144	u8 sg_list_offset;1145	u32 handle;1146	u32 cmd_rsp_len;1147	struct atto_vda_sge sge[1];1148};1149 1150 1151struct __packed atto_vda_ioctl_req {1152	u32 length;1153	u8 function; /* VDA_FUNC_IOCTL */1154	u8 sub_func;1155	u8 chain_offset;1156	u8 sg_list_offset;1157	u32 handle;1158 1159	union {1160		struct atto_vda_sge reserved_sge;1161		struct atto_physical_region_description reserved_prde;1162	};1163 1164	union {1165		struct {1166			u32 ctrl_code;1167			u16 target_id;1168			u8 lun;1169			u8 reserved;1170		} csmi;1171	};1172 1173	union {1174		struct atto_vda_sge sge[1];1175		struct atto_physical_region_description prde[1];1176	};1177};1178 1179 1180struct __packed atto_vda_cfg_req {1181	u32 length;1182	u8 function; /* VDA_FUNC_CFG */1183	u8 sub_func;1184	u8 rsvd1;1185	u8 sg_list_offset;1186	u32 handle;1187 1188	union {1189		u8 bytes[116];1190		struct atto_vda_cfg_init init;1191		struct atto_vda_sge sge;1192		struct atto_physical_region_description prde;1193	} data;1194};1195 1196 1197struct __packed atto_vda_mgmt_req {1198	u32 length;1199	u8 function; /* VDA_FUNC_MGT */1200	u8 mgt_func;1201	u8 chain_offset;1202	u8 sg_list_offset;1203	u32 handle;1204	u8 scan_generation;1205	u8 payld_sglst_offset;1206	u16 dev_index;1207	u32 payld_length;1208	u32 pad;1209	union {1210		struct atto_vda_sge sge[2];1211		struct atto_physical_region_description prde[2];1212	};1213	struct atto_vda_sge payld_sge[1];1214};1215 1216 1217union atto_vda_req {1218	struct atto_vda_scsi_req scsi;1219	struct atto_vda_flash_req flash;1220	struct atto_vda_diag_req diag;1221	struct atto_vda_ae_req ae;1222	struct atto_vda_cli_req cli;1223	struct atto_vda_ioctl_req ioctl;1224	struct atto_vda_cfg_req cfg;1225	struct atto_vda_mgmt_req mgt;1226	u8 bytes[1024];1227};1228 1229/* Outbound response structures */1230 1231struct __packed atto_vda_scsi_rsp {1232	u8 scsi_stat;1233	u8 sense_len;1234	u8 rsvd[2];1235	u32 residual_length;1236};1237 1238struct __packed atto_vda_flash_rsp {1239	u32 file_size;1240};1241 1242struct __packed atto_vda_ae_rsp {1243	u32 length;1244};1245 1246struct __packed atto_vda_cli_rsp {1247	u32 cmd_rsp_len;1248};1249 1250struct __packed atto_vda_ioctl_rsp {1251	union {1252		struct {1253			u32 csmi_status;1254			u16 target_id;1255			u8 lun;1256			u8 reserved;1257		} csmi;1258	};1259};1260 1261struct __packed atto_vda_cfg_rsp {1262	u16 vda_version;1263	u16 fw_release;1264	u32 fw_build;1265};1266 1267struct __packed atto_vda_mgmt_rsp {1268	u32 length;1269	u16 dev_index;1270	u8 scan_generation;1271};1272 1273union atto_vda_func_rsp {1274	struct atto_vda_scsi_rsp scsi_rsp;1275	struct atto_vda_flash_rsp flash_rsp;1276	struct atto_vda_ae_rsp ae_rsp;1277	struct atto_vda_cli_rsp cli_rsp;1278	struct atto_vda_ioctl_rsp ioctl_rsp;1279	struct atto_vda_cfg_rsp cfg_rsp;1280	struct atto_vda_mgmt_rsp mgt_rsp;1281	u32 dwords[2];1282};1283 1284struct __packed atto_vda_ob_rsp {1285	u32 handle;1286	u8 req_stat;1287	u8 rsvd[3];1288 1289	union atto_vda_func_rsp1290		func_rsp;1291};1292 1293struct __packed atto_vda_ae_data {1294	u8 event_data[256];1295};1296 1297struct __packed atto_vda_mgmt_data {1298	union {1299		u8 bytes[112];1300		struct atto_vda_devinfo dev_info;1301		struct atto_vda_grp_info grp_info;1302		struct atto_vdapart_info part_info;1303		struct atto_vda_dh_info dev_health_info;1304		struct atto_vda_metrics_info metrics_info;1305		struct atto_vda_schedule_info sched_info;1306		struct atto_vda_n_vcache_info nvcache_info;1307		struct atto_vda_buzzer_info buzzer_info;1308	} data;1309};1310 1311union atto_vda_rsp_data {1312	struct atto_vda_ae_data ae_data;1313	struct atto_vda_mgmt_data mgt_data;1314	u8 sense_data[252];1315	#define SENSE_DATA_SZ   252;1316	u8 bytes[256];1317};1318 1319#endif1320