126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove/*  linux/drivers/scsi/esas2r/atvda.h
226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *       ATTO VDA interface definitions
326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *
426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  Copyright (c) 2001-2013 ATTO Technology, Inc.
526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  (mailto:linuxdrivers@attotech.com)
626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove */
726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove/*
926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  This program is free software; you can redistribute it and/or modify
1026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  it under the terms of the GNU General Public License as published by
1126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  the Free Software Foundation; version 2 of the License.
1226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *
1326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  This program is distributed in the hope that it will be useful,
1426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  but WITHOUT ANY WARRANTY; without even the implied warranty of
1526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  GNU General Public License for more details.
1726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *
1826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  NO WARRANTY
1926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
2026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT
2126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
2226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
2326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  solely responsible for determining the appropriateness of using and
2426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  distributing the Program and assumes all risks associated with its
2526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  exercise of rights under this Agreement, including but not limited to
2626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  the risks and costs of program errors, damage to or loss of data,
2726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  programs or equipment, and unavailability or interruption of operations.
2826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *
2926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  DISCLAIMER OF LIABILITY
3026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
3126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
3226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND
3326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
3426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
3526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
3626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES
3726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *
3826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  You should have received a copy of the GNU General Public License
3926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  along with this program; if not, write to the Free Software
4026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
4126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove */
4226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
4326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
4426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
4526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#ifndef ATVDA_H
4626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define ATVDA_H
4726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
4826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_dev_addr {
4926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 dev_port;
5026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 hba_port;
5126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 lun;
5226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 flags;
5326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	   #define VDA_DEVADDRF_SATA   0x01
5426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	   #define VDA_DEVADDRF_SSD    0x02
5526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 link_speed; /* VDALINKSPEED_xxx */
5626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 pad[1];
5726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
5826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
5926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove/* dev_addr2 was added for 64-bit alignment */
6026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
6126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_dev_addr2 {
6226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 dev_port;
6326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 hba_port;
6426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 lun;
6526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 flags;
6626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 link_speed;
6726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 pad[5];
6826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
6926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
7026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_sge {
7126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 length;
7226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 address;
7326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
7426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
7526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
7626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove/* VDA request function codes */
7726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
7826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDA_FUNC_SCSI     0x00
7926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDA_FUNC_FLASH    0x01
8026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDA_FUNC_DIAG     0x02
8126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDA_FUNC_AE       0x03
8226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDA_FUNC_CLI      0x04
8326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDA_FUNC_IOCTL    0x05
8426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDA_FUNC_CFG      0x06
8526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDA_FUNC_MGT      0x07
8626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDA_FUNC_GSV      0x08
8726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
8826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
8926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove/* VDA request status values.  for host driver considerations, values for
9026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove * SCSI requests start at zero.  other requests may use these values as well. */
9126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
9226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_SUCCESS          0x00        /*! successful completion            */
9326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_INV_FUNC         0x01        /*! invalid command function         */
9426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_BUSY             0x02        /*! insufficient resources           */
9526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_SEL              0x03        /*! no target at target_id           */
9626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_NO_LUN           0x04        /*! invalid LUN                      */
9726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_TIMEOUT          0x05        /*! request timeout                  */
9826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_OVERRUN          0x06        /*! data overrun                     */
9926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_UNDERRUN         0x07        /*! data underrun                    */
10026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_SCSI_ERROR       0x08        /*! SCSI error occurred              */
10126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_ABORTED          0x0A        /*! command aborted                  */
10226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_RESID_MISM       0x0B        /*! residual length incorrect        */
10326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_TM_FAILED        0x0C        /*! task management failed           */
10426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_RESET            0x0D        /*! aborted due to bus reset         */
10526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_ERR_DMA_SG       0x0E        /*! error reading SG list            */
10626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_ERR_DMA_DATA     0x0F        /*! error transferring data          */
10726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_UNSUPPORTED      0x10        /*! unsupported request              */
10826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_SEL2             0x70        /*! internal generated RS_SEL        */
10926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_VDA_BASE         0x80        /*! base of VDA-specific errors      */
11026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_MGT_BASE         0x80        /*! base of VDA management errors    */
11126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_SCAN_FAIL        (RS_MGT_BASE + 0x00)
11226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_DEV_INVALID      (RS_MGT_BASE + 0x01)
11326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_DEV_ASSIGNED     (RS_MGT_BASE + 0x02)
11426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_DEV_REMOVE       (RS_MGT_BASE + 0x03)
11526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_DEV_LOST         (RS_MGT_BASE + 0x04)
11626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_SCAN_GEN         (RS_MGT_BASE + 0x05)
11726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_GRP_INVALID      (RS_MGT_BASE + 0x08)
11826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_GRP_EXISTS       (RS_MGT_BASE + 0x09)
11926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_GRP_LIMIT        (RS_MGT_BASE + 0x0A)
12026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_GRP_INTLV        (RS_MGT_BASE + 0x0B)
12126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_GRP_SPAN         (RS_MGT_BASE + 0x0C)
12226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_GRP_TYPE         (RS_MGT_BASE + 0x0D)
12326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_GRP_MEMBERS      (RS_MGT_BASE + 0x0E)
12426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_GRP_COMMIT       (RS_MGT_BASE + 0x0F)
12526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_GRP_REBUILD      (RS_MGT_BASE + 0x10)
12626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_GRP_REBUILD_TYPE (RS_MGT_BASE + 0x11)
12726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_GRP_BLOCK_SIZE   (RS_MGT_BASE + 0x12)
12826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_CFG_SAVE         (RS_MGT_BASE + 0x14)
12926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_PART_LAST        (RS_MGT_BASE + 0x18)
13026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_ELEM_INVALID     (RS_MGT_BASE + 0x19)
13126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_PART_MAPPED      (RS_MGT_BASE + 0x1A)
13226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_PART_TARGET      (RS_MGT_BASE + 0x1B)
13326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_PART_LUN         (RS_MGT_BASE + 0x1C)
13426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_PART_DUP         (RS_MGT_BASE + 0x1D)
13526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_PART_NOMAP       (RS_MGT_BASE + 0x1E)
13626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_PART_MAX         (RS_MGT_BASE + 0x1F)
13726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_PART_CAP         (RS_MGT_BASE + 0x20)
13826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_PART_STATE       (RS_MGT_BASE + 0x21)
13926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_TEST_IN_PROG     (RS_MGT_BASE + 0x22)
14026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_METRICS_ERROR    (RS_MGT_BASE + 0x23)
14126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_HS_ERROR         (RS_MGT_BASE + 0x24)
14226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_NO_METRICS_TEST  (RS_MGT_BASE + 0x25)
14326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_BAD_PARAM        (RS_MGT_BASE + 0x26)
14426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_GRP_MEMBER_SIZE  (RS_MGT_BASE + 0x27)
14526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_FLS_BASE         0xB0        /*! base of VDA errors               */
14626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_FLS_ERR_AREA     (RS_FLS_BASE + 0x00)
14726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_FLS_ERR_BUSY     (RS_FLS_BASE + 0x01)
14826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_FLS_ERR_RANGE    (RS_FLS_BASE + 0x02)
14926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_FLS_ERR_BEGIN    (RS_FLS_BASE + 0x03)
15026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_FLS_ERR_CHECK    (RS_FLS_BASE + 0x04)
15126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_FLS_ERR_FAIL     (RS_FLS_BASE + 0x05)
15226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_FLS_ERR_RSRC     (RS_FLS_BASE + 0x06)
15326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_FLS_ERR_NOFILE   (RS_FLS_BASE + 0x07)
15426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_FLS_ERR_FSIZE    (RS_FLS_BASE + 0x08)
15526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_CFG_BASE         0xC0        /*! base of VDA configuration errors */
15626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_CFG_ERR_BUSY     (RS_CFG_BASE + 0)
15726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_CFG_ERR_SGE      (RS_CFG_BASE + 1)
15826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_CFG_ERR_DATE     (RS_CFG_BASE + 2)
15926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_CFG_ERR_TIME     (RS_CFG_BASE + 3)
16026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_DEGRADED         0xFB        /*! degraded mode                    */
16126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_CLI_INTERNAL     0xFC        /*! VDA CLI internal error           */
16226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_VDA_INTERNAL     0xFD        /*! catch-all                        */
16326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_PENDING          0xFE        /*! pending, not started             */
16426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define RS_STARTED          0xFF        /*! started                          */
16526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
16626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
16726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove/* flash request subfunctions.  these are used in both the IOCTL and the
16826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove * driver-firmware interface (VDA_FUNC_FLASH). */
16926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
17026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDA_FLASH_BEGINW  0x00
17126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDA_FLASH_READ    0x01
17226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDA_FLASH_WRITE   0x02
17326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDA_FLASH_COMMIT  0x03
17426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDA_FLASH_CANCEL  0x04
17526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDA_FLASH_INFO    0x05
17626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDA_FLASH_FREAD   0x06
17726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDA_FLASH_FWRITE  0x07
17826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDA_FLASH_FINFO   0x08
17926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
18026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
18126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove/* IOCTL request subfunctions.  these identify the payload type for
18226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove * VDA_FUNC_IOCTL.
18326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove */
18426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
18526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDA_IOCTL_HBA     0x00
18626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDA_IOCTL_CSMI    0x01
18726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDA_IOCTL_SMP     0x02
18826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
18926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_devinfo {
19026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_dev_addr dev_addr;
19126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 vendor_id[8];
19226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 product_id[16];
19326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 revision[4];
19426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 capacity;
19526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 block_size;
19626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 dev_type;
19726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
19826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	union {
19926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		u8 dev_status;
20026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	    #define VDADEVSTAT_INVALID   0x00
20126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	    #define VDADEVSTAT_CORRUPT   VDADEVSTAT_INVALID
20226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	    #define VDADEVSTAT_ASSIGNED  0x01
20326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	    #define VDADEVSTAT_SPARE     0x02
20426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	    #define VDADEVSTAT_UNAVAIL   0x03
20526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	    #define VDADEVSTAT_PT_MAINT  0x04
20626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	    #define VDADEVSTAT_LCLSPARE  0x05
20726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	    #define VDADEVSTAT_UNUSEABLE 0x06
20826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	    #define VDADEVSTAT_AVAIL     0xFF
20926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
21026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		u8 op_ctrl;
21126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	    #define VDA_DEV_OP_CTRL_START   0x01
21226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	    #define VDA_DEV_OP_CTRL_HALT    0x02
21326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	    #define VDA_DEV_OP_CTRL_RESUME  0x03
21426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	    #define VDA_DEV_OP_CTRL_CANCEL  0x04
21526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	};
21626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
21726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 member_state;
21826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMBRSTATE_ONLINE   0x00
21926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMBRSTATE_DEGRADED 0x01
22026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMBRSTATE_UNAVAIL  0x02
22126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMBRSTATE_FAULTED  0x03
22226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMBRSTATE_MISREAD  0x04
22326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMBRSTATE_INCOMPAT 0x05
22426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
22526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 operation;
22626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAOP_NONE           0x00
22726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAOP_REBUILD        0x01
22826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAOP_ERASE          0x02
22926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAOP_PATTERN        0x03
23026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAOP_CONVERSION     0x04
23126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAOP_FULL_INIT      0x05
23226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAOP_QUICK_INIT     0x06
23326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAOP_SECT_SCAN      0x07
23426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAOP_SECT_SCAN_PARITY      0x08
23526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAOP_SECT_SCAN_PARITY_FIX  0x09
23626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAOP_RECOV_REBUILD  0x0A
23726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
23826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 op_status;
23926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAOPSTAT_OK         0x00
24026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAOPSTAT_FAULTED    0x01
24126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAOPSTAT_HALTED     0x02
24226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAOPSTAT_INT        0x03
24326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
24426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 progress; /* 0 - 100% */
24526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u16 ses_dev_index;
24626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDASESDI_INVALID     0xFFFF
24726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
24826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 serial_no[32];
24926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
25026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	union {
25126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		u16 target_id;
25226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDATGTID_INVALID     0xFFFF
25326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
25426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		u16 features_mask;
25526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	};
25626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
25726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u16 lun;
25826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u16 features;
25926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADEVFEAT_ENC_SERV  0x0001
26026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADEVFEAT_IDENT     0x0002
26126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADEVFEAT_DH_SUPP   0x0004
26226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADEVFEAT_PHYS_ID   0x0008
26326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
26426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 ses_element_id;
26526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 link_speed;
26626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDALINKSPEED_UNKNOWN 0x00
26726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDALINKSPEED_1GB     0x01
26826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDALINKSPEED_1_5GB   0x02
26926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDALINKSPEED_2GB     0x03
27026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDALINKSPEED_3GB     0x04
27126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDALINKSPEED_4GB     0x05
27226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDALINKSPEED_6GB     0x06
27326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDALINKSPEED_8GB     0x07
27426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
27526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u16 phys_target_id;
27626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 reserved[2];
27726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
27826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
27926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
28026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove/*! struct atto_vda_devinfo2 is a replacement for atto_vda_devinfo.  it
28126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove * extends beyond the 0x70 bytes allowed in atto_vda_mgmt_req; therefore,
28226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove * the entire structure is DMaed between the firmware and host buffer and
28326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove * the data will always be in little endian format.
28426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove */
28526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
28626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_devinfo2 {
28726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_dev_addr dev_addr;
28826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 vendor_id[8];
28926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 product_id[16];
29026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 revision[4];
29126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 capacity;
29226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 block_size;
29326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 dev_type;
29426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 dev_status;
29526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 member_state;
29626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 operation;
29726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 op_status;
29826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 progress;
29926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u16 ses_dev_index;
30026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 serial_no[32];
30126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	union {
30226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		u16 target_id;
30326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		u16 features_mask;
30426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	};
30526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
30626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u16 lun;
30726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u16 features;
30826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 ses_element_id;
30926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 link_speed;
31026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u16 phys_target_id;
31126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 reserved[2];
31226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
31326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove/* This is where fields specific to struct atto_vda_devinfo2 begin.  Note
31426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove * that the structure version started at one so applications that unionize this
31526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove * structure with atto_vda_dev_info can differentiate them if desired.
31626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove */
31726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
31826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 version;
31926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADEVINFO_VERSION0         0x00
32026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADEVINFO_VERSION1         0x01
32126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADEVINFO_VERSION2         0x02
32226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADEVINFO_VERSION3         0x03
32326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADEVINFO_VERSION          VDADEVINFO_VERSION3
32426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
32526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 reserved2[3];
32626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
32726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	/* sector scanning fields */
32826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
32926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 ss_curr_errors;
33026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 ss_curr_scanned;
33126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 ss_curr_recvrd;
33226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 ss_scan_length;
33326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 ss_total_errors;
33426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 ss_total_recvrd;
33526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 ss_num_scans;
33626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
33726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	/* grp_name was added in version 2 of this structure. */
33826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
33926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	char grp_name[15];
34026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 reserved3[4];
34126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
34226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	/* dev_addr_list was added in version 3 of this structure. */
34326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
34426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 num_dev_addr;
34526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_dev_addr2 dev_addr_list[8];
34626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
34726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
34826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
34926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_grp_info {
35026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 grp_index;
35126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_MAX_RAID_GROUPS         32
35226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
35326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	char grp_name[15];
35426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 capacity;
35526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 block_size;
35626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 interleave;
35726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 type;
35826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_TYPE_RAID0          0
35926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_TYPE_RAID1          1
36026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_TYPE_RAID4          4
36126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_TYPE_RAID5          5
36226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_TYPE_RAID6          6
36326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_TYPE_RAID10         10
36426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_TYPE_RAID40         40
36526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_TYPE_RAID50         50
36626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_TYPE_RAID60         60
36726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_TYPE_DVRAID_HS      252
36826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_TYPE_DVRAID_NOHS    253
36926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_TYPE_JBOD           254
37026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_TYPE_SPARE          255
37126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
37226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	union {
37326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		u8 status;
37426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	    #define VDA_GRP_STAT_INVALID  0x00
37526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	    #define VDA_GRP_STAT_NEW      0x01
37626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	    #define VDA_GRP_STAT_WAITING  0x02
37726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	    #define VDA_GRP_STAT_ONLINE   0x03
37826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	    #define VDA_GRP_STAT_DEGRADED 0x04
37926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	    #define VDA_GRP_STAT_OFFLINE  0x05
38026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	    #define VDA_GRP_STAT_DELETED  0x06
38126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	    #define VDA_GRP_STAT_RECOV_BASIC    0x07
38226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	    #define VDA_GRP_STAT_RECOV_EXTREME  0x08
38326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
38426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		u8 op_ctrl;
38526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	    #define VDA_GRP_OP_CTRL_START   0x01
38626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	    #define VDA_GRP_OP_CTRL_HALT    0x02
38726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	    #define VDA_GRP_OP_CTRL_RESUME  0x03
38826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	    #define VDA_GRP_OP_CTRL_CANCEL  0x04
38926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	};
39026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
39126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 rebuild_state;
39226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_RBLD_NONE      0x00
39326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_RBLD_REBUILD   0x01
39426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_RBLD_ERASE     0x02
39526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_RBLD_PATTERN   0x03
39626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_RBLD_CONV      0x04
39726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_RBLD_FULL_INIT 0x05
39826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_RBLD_QUICK_INIT 0x06
39926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_RBLD_SECT_SCAN 0x07
40026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_RBLD_SECT_SCAN_PARITY     0x08
40126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_RBLD_SECT_SCAN_PARITY_FIX 0x09
40226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_RBLD_RECOV_REBUILD 0x0A
40326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_RBLD_RECOV_BASIC   0x0B
40426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_RBLD_RECOV_EXTREME 0x0C
40526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
40626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 span_depth;
40726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 progress;
40826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 mirror_width;
40926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 stripe_width;
41026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 member_cnt;
41126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
41226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	union {
41326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		u16 members[32];
41426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_MEMBER_MISSING  0xFFFF
41526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_MEMBER_NEW      0xFFFE
41626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		u16 features_mask;
41726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	};
41826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
41926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u16 features;
42026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_FEAT_HOTSWAP    0x0001
42126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_FEAT_SPDRD_MASK 0x0006
42226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_FEAT_SPDRD_DIS  0x0000
42326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_FEAT_SPDRD_ENB  0x0002
42426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_FEAT_SPDRD_AUTO 0x0004
42526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_FEAT_IDENT      0x0008
42626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_FEAT_RBLDPRI_MASK 0x0030
42726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_FEAT_RBLDPRI_LOW  0x0010
42826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_FEAT_RBLDPRI_SAME 0x0020
42926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_FEAT_RBLDPRI_HIGH 0x0030
43026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_FEAT_WRITE_CACHE  0x0040
43126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_FEAT_RBLD_RESUME  0x0080
43226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_FEAT_SECT_RESUME  0x0100
43326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_FEAT_INIT_RESUME  0x0200
43426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_FEAT_SSD          0x0400
43526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_GRP_FEAT_BOOT_DEV     0x0800
43626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
43726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	/*
43826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	 * for backward compatibility, a prefetch value of zero means the
43926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	 * setting is ignored/unsupported.  therefore, the firmware supported
44026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	 * 0-6 values are incremented to 1-7.
44126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	 */
44226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
44326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 prefetch;
44426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 op_status;
44526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAGRPOPSTAT_MASK       0x0F
44626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAGRPOPSTAT_INVALID    0x00
44726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAGRPOPSTAT_OK         0x01
44826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAGRPOPSTAT_FAULTED    0x02
44926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAGRPOPSTAT_HALTED     0x03
45026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAGRPOPSTAT_INT        0x04
45126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAGRPOPPROC_MASK       0xF0
45226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAGRPOPPROC_STARTABLE  0x10
45326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAGRPOPPROC_CANCELABLE 0x20
45426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAGRPOPPROC_RESUMABLE  0x40
45526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAGRPOPPROC_HALTABLE   0x80
45626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 over_provision;
45726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 reserved[3];
45826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
45926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
46026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
46126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
46226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vdapart_info {
46326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 part_no;
46426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_MAX_PARTITIONS   128
46526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
46626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	char grp_name[15];
46726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 part_size;
46826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 start_lba;
46926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 block_size;
47026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u16 target_id;
47126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 LUN;
47226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	char serial_no[41];
47326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 features;
47426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAPI_FEAT_WRITE_CACHE   0x01
47526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
47626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 reserved[7];
47726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
47826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
47926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
48026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_dh_info {
48126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 req_type;
48226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADH_RQTYPE_CACHE      0x01
48326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADH_RQTYPE_FETCH      0x02
48426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADH_RQTYPE_SET_STAT   0x03
48526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADH_RQTYPE_GET_STAT   0x04
48626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
48726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 req_qual;
48826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADH_RQQUAL_SMART      0x01
48926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADH_RQQUAL_MEDDEF     0x02
49026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADH_RQQUAL_INFOEXC    0x04
49126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
49226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 num_smart_attribs;
49326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 status;
49426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADH_STAT_DISABLE      0x00
49526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADH_STAT_ENABLE       0x01
49626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
49726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 med_defect_cnt;
49826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 info_exc_cnt;
49926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 smart_status;
50026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADH_SMARTSTAT_OK      0x00
50126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADH_SMARTSTAT_ERR     0x01
50226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
50326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 reserved[35];
50426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_sge sge[1];
50526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
50626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
50726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
50826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_dh_smart {
50926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 attrib_id;
51026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 current_val;
51126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 worst;
51226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 threshold;
51326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 raw_data[6];
51426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 raw_attrib_status;
51526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADHSM_RAWSTAT_PREFAIL_WARRANTY        0x01
51626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADHSM_RAWSTAT_ONLINE_COLLECTION       0x02
51726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADHSM_RAWSTAT_PERFORMANCE_ATTR        0x04
51826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADHSM_RAWSTAT_ERROR_RATE_ATTR         0x08
51926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADHSM_RAWSTAT_EVENT_COUNT_ATTR        0x10
52026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADHSM_RAWSTAT_SELF_PRESERVING_ATTR    0x20
52126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
52226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 calc_attrib_status;
52326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADHSM_CALCSTAT_UNKNOWN                0x00
52426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADHSM_CALCSTAT_GOOD                   0x01
52526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADHSM_CALCSTAT_PREFAIL                0x02
52626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDADHSM_CALCSTAT_OLDAGE                 0x03
52726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
52826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 reserved[4];
52926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
53026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
53126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
53226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_metrics_info {
53326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 data_version;
53426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMET_VERSION0         0x00
53526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMET_VERSION          VDAMET_VERSION0
53626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
53726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 metrics_action;
53826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMET_METACT_NONE      0x00
53926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMET_METACT_START     0x01
54026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMET_METACT_STOP      0x02
54126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMET_METACT_RETRIEVE  0x03
54226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMET_METACT_CLEAR     0x04
54326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
54426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 test_action;
54526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMET_TSTACT_NONE              0x00
54626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMET_TSTACT_STRT_INIT         0x01
54726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMET_TSTACT_STRT_READ         0x02
54826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMET_TSTACT_STRT_VERIFY       0x03
54926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMET_TSTACT_STRT_INIT_VERIFY  0x04
55026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMET_TSTACT_STOP              0x05
55126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
55226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 num_dev_indexes;
55326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMET_ALL_DEVICES      0xFF
55426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
55526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u16 dev_indexes[32];
55626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 reserved[12];
55726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_sge sge[1];
55826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
55926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
56026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
56126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_metrics_data {
56226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u16 dev_index;
56326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u16 length;
56426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMD_LEN_LAST          0x8000
56526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMD_LEN_MASK          0x0FFF
56626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
56726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 flags;
56826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMDF_RUN          0x00000007
56926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMDF_RUN_READ     0x00000001
57026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMDF_RUN_WRITE    0x00000002
57126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMDF_RUN_ALL      0x00000004
57226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMDF_READ         0x00000010
57326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMDF_WRITE        0x00000020
57426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMDF_ALL          0x00000040
57526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMDF_DRIVETEST    0x40000000
57626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAMDF_NEW          0x80000000
57726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
57826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 total_read_data;
57926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 total_write_data;
58026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 total_read_io;
58126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 total_write_io;
58226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 read_start_time;
58326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 read_stop_time;
58426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 write_start_time;
58526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 write_stop_time;
58626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 read_maxio_time;
58726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 wpvdadmetricsdatarite_maxio_time;
58826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 read_totalio_time;
58926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 write_totalio_time;
59026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 read_total_errs;
59126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 write_total_errs;
59226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 read_recvrd_errs;
59326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 write_recvrd_errs;
59426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 miscompares;
59526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
59626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
59726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
59826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_schedule_info {
59926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 schedule_type;
60026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDASI_SCHTYPE_ONETIME   0x01
60126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDASI_SCHTYPE_DAILY     0x02
60226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDASI_SCHTYPE_WEEKLY    0x03
60326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
60426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 operation;
60526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDASI_OP_NONE           0x00
60626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDASI_OP_CREATE         0x01
60726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDASI_OP_CANCEL         0x02
60826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
60926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 hour;
61026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 minute;
61126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 day;
61226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDASI_DAY_NONE          0x00
61326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
61426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 progress;
61526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDASI_PROG_NONE         0xFF
61626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
61726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 event_type;
61826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDASI_EVTTYPE_SECT_SCAN             0x01
61926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDASI_EVTTYPE_SECT_SCAN_PARITY      0x02
62026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDASI_EVTTYPE_SECT_SCAN_PARITY_FIX  0x03
62126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
62226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 recurrences;
62326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDASI_RECUR_FOREVER     0x00
62426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
62526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 id;
62626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDASI_ID_NONE           0x00
62726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
62826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	char grp_name[15];
62926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 reserved[85];
63026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
63126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
63226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
63326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_n_vcache_info {
63426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 super_cap_status;
63526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDANVCI_SUPERCAP_NOT_PRESENT       0x00
63626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDANVCI_SUPERCAP_FULLY_CHARGED     0x01
63726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDANVCI_SUPERCAP_NOT_CHARGED       0x02
63826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
63926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 nvcache_module_status;
64026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDANVCI_NVCACHEMODULE_NOT_PRESENT  0x00
64126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDANVCI_NVCACHEMODULE_PRESENT      0x01
64226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
64326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 protection_mode;
64426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDANVCI_PROTMODE_HI_PROTECT        0x00
64526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDANVCI_PROTMODE_HI_PERFORM        0x01
64626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
64726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 reserved[109];
64826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
64926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
65026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
65126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_buzzer_info {
65226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 status;
65326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDABUZZI_BUZZER_OFF           0x00
65426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDABUZZI_BUZZER_ON            0x01
65526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDABUZZI_BUZZER_LAST          0x02
65626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
65726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 reserved[3];
65826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 duration;
65926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDABUZZI_DURATION_INDEFINITE  0xffffffff
66026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
66126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 reserved2[104];
66226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
66326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
66426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
66526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct  __packed atto_vda_adapter_info {
66626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 version;
66726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAADAPINFO_VERSION0         0x00
66826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAADAPINFO_VERSION          VDAADAPINFO_VERSION0
66926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
67026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 reserved;
67126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	signed short utc_offset;
67226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 utc_time;
67326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 features;
67426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_ADAP_FEAT_IDENT     0x0001
67526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_ADAP_FEAT_BUZZ_ERR  0x0002
67626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_ADAP_FEAT_UTC_TIME  0x0004
67726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
67826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 valid_features;
67926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	char active_config[33];
68026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 temp_count;
68126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 fan_count;
68226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 reserved3[61];
68326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
68426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
68526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
68626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_temp_info {
68726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 temp_index;
68826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 max_op_temp;
68926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 min_op_temp;
69026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 op_temp_warn;
69126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 temperature;
69226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 type;
69326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_TEMP_TYPE_CPU  1
69426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
69526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 reserved[106];
69626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
69726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
69826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
69926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_fan_info {
70026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 fan_index;
70126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 status;
70226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_FAN_STAT_UNKNOWN 0
70326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_FAN_STAT_NORMAL  1
70426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_FAN_STAT_FAIL    2
70526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
70626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u16 crit_pvdafaninfothreshold;
70726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u16 warn_threshold;
70826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u16 speed;
70926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 reserved[104];
71026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
71126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
71226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
71326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove/* VDA management commands */
71426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
71526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_DEV_SCAN         0x00
71626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_DEV_INFO         0x01
71726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_DEV_CLEAN        0x02
71826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_DEV_IDENTIFY     0x03
71926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_DEV_IDENTSTOP    0x04
72026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_DEV_PT_INFO      0x05
72126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_DEV_FEATURES     0x06
72226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_DEV_PT_FEATURES  0x07
72326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_DEV_HEALTH_REQ   0x08
72426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_DEV_METRICS      0x09
72526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_DEV_INFO2        0x0A
72626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_DEV_OPERATION    0x0B
72726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_DEV_INFO2_BYADDR 0x0C
72826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_GRP_INFO         0x10
72926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_GRP_CREATE       0x11
73026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_GRP_DELETE       0x12
73126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_ADD_STORAGE      0x13
73226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_MEMBER_ADD       0x14
73326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_GRP_COMMIT       0x15
73426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_GRP_REBUILD      0x16
73526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_GRP_COMMIT_INIT  0x17
73626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_QUICK_RAID       0x18
73726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_GRP_FEATURES     0x19
73826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_GRP_COMMIT_INIT_AUTOMAP  0x1A
73926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_QUICK_RAID_INIT_AUTOMAP  0x1B
74026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_GRP_OPERATION    0x1C
74126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_CFG_SAVE         0x20
74226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_LAST_ERROR       0x21
74326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_ADAP_INFO        0x22
74426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_ADAP_FEATURES    0x23
74526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_TEMP_INFO        0x24
74626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_FAN_INFO         0x25
74726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_PART_INFO        0x30
74826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_PART_MAP         0x31
74926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_PART_UNMAP       0x32
75026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_PART_AUTOMAP     0x33
75126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_PART_SPLIT       0x34
75226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_PART_MERGE       0x35
75326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_SPARE_LIST       0x40
75426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_SPARE_ADD        0x41
75526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_SPARE_REMOVE     0x42
75626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_LOCAL_SPARE_ADD  0x43
75726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_SCHEDULE_EVENT   0x50
75826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_SCHEDULE_INFO    0x51
75926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_NVCACHE_INFO     0x60
76026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_NVCACHE_SET      0x61
76126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_BUZZER_INFO      0x70
76226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAMGT_BUZZER_SET       0x71
76326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
76426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
76526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_ae_hdr {
76626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 bylength;
76726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 byflags;
76826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_HDRF_EVENT_ACK    0x01
76926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
77026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 byversion;
77126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_HDR_VER_0         0
77226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
77326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 bytype;
77426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_HDR_TYPE_RAID     1
77526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_HDR_TYPE_LU       2
77626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_HDR_TYPE_DISK     3
77726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_HDR_TYPE_RESET    4
77826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_HDR_TYPE_LOG_INFO 5
77926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_HDR_TYPE_LOG_WARN 6
78026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_HDR_TYPE_LOG_CRIT 7
78126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_HDR_TYPE_LOG_FAIL 8
78226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_HDR_TYPE_NVC      9
78326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_HDR_TYPE_TLG_INFO 10
78426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_HDR_TYPE_TLG_WARN 11
78526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_HDR_TYPE_TLG_CRIT 12
78626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_HDR_TYPE_PWRMGT   13
78726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_HDR_TYPE_MUTE     14
78826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_HDR_TYPE_DEV      15
78926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
79026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
79126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
79226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct  __packed atto_vda_ae_raid {
79326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_ae_hdr hdr;
79426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 dwflags;
79526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_GROUP_STATE   0x00000001
79626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_RBLD_STATE    0x00000002
79726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_RBLD_PROG     0x00000004
79826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_MEMBER_CHG    0x00000008
79926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_PART_CHG      0x00000010
80026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_MEM_STATE_CHG 0x00000020
80126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
80226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 bygroup_state;
80326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_RAID_INVALID  0
80426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_RAID_NEW      1
80526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_RAID_WAITING  2
80626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_RAID_ONLINE   3
80726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_RAID_DEGRADED 4
80826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_RAID_OFFLINE  5
80926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_RAID_DELETED  6
81026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_RAID_BASIC    7
81126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_RAID_EXTREME  8
81226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_RAID_UNKNOWN  9
81326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
81426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 byrebuild_state;
81526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_RBLD_NONE       0
81626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_RBLD_REBUILD    1
81726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_RBLD_ERASE      2
81826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_RBLD_PATTERN    3
81926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_RBLD_CONV       4
82026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_RBLD_FULL_INIT  5
82126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_RBLD_QUICK_INIT 6
82226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_RBLD_SECT_SCAN  7
82326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_RBLD_SECT_SCAN_PARITY     8
82426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_RBLD_SECT_SCAN_PARITY_FIX 9
82526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_RBLD_RECOV_REBUILD 10
82626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_RBLD_UNKNOWN    11
82726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
82826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 byrebuild_progress;
82926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 op_status;
83026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_GRPOPSTAT_MASK       0x0F
83126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_GRPOPSTAT_INVALID    0x00
83226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_GRPOPSTAT_OK         0x01
83326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_GRPOPSTAT_FAULTED    0x02
83426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_GRPOPSTAT_HALTED     0x03
83526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_GRPOPSTAT_INT        0x04
83626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_GRPOPPROC_MASK       0xF0
83726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_GRPOPPROC_STARTABLE  0x10
83826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_GRPOPPROC_CANCELABLE 0x20
83926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_GRPOPPROC_RESUMABLE  0x40
84026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_GRPOPPROC_HALTABLE   0x80
84126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	char acname[15];
84226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 byreserved;
84326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 byreserved2[0x80 - 0x1C];
84426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
84526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
84626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
84726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_ae_lu_tgt_lun {
84826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u16 wtarget_id;
84926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 bylun;
85026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 byreserved;
85126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
85226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
85326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
85426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_ae_lu_tgt_lun_raid {
85526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u16 wtarget_id;
85626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 bylun;
85726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 byreserved;
85826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 dwinterleave;
85926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 dwblock_size;
86026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
86126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
86226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
86326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_ae_lu {
86426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_ae_hdr hdr;
86526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 dwevent;
86626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_LU_DISC        0x00000001
86726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_LU_LOST        0x00000002
86826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_LU_STATE       0x00000004
86926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_LU_PASSTHROUGH 0x10000000
87026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_LU_PHYS_ID     0x20000000
87126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
87226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 bystate;
87326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_LU_UNDEFINED        0
87426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_LU_NOT_PRESENT      1
87526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_LU_OFFLINE          2
87626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_LU_ONLINE           3
87726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_LU_DEGRADED         4
87826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_LU_FACTORY_DISABLED 5
87926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_LU_DELETED          6
88026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_LU_BUSSCAN          7
88126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDAAE_LU_UNKNOWN          8
88226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
88326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 byreserved;
88426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u16 wphys_target_id;
88526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
88626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	union {
88726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct atto_vda_ae_lu_tgt_lun tgtlun;
88826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct atto_vda_ae_lu_tgt_lun_raid tgtlun_raid;
88926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	} id;
89026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
89126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
89226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
89326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_ae_disk {
89426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_ae_hdr hdr;
89526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
89626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
89726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
89826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAAE_LOG_STRSZ 64
89926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
90026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_ae_log {
90126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_ae_hdr hdr;
90226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	char aclog_ascii[VDAAE_LOG_STRSZ];
90326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
90426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
90526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
90626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDAAE_TLG_STRSZ 56
90726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
90826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_ae_timestamp_log {
90926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_ae_hdr hdr;
91026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 dwtimestamp;
91126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	char aclog_ascii[VDAAE_TLG_STRSZ];
91226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
91326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
91426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
91526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_ae_nvc {
91626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_ae_hdr hdr;
91726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
91826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
91926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
92026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_ae_dev {
92126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_ae_hdr hdr;
92226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_dev_addr devaddr;
92326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
92426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
92526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
92626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Groveunion atto_vda_ae {
92726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_ae_hdr hdr;
92826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_ae_disk disk;
92926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_ae_lu lu;
93026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_ae_raid raid;
93126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_ae_log log;
93226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_ae_timestamp_log tslog;
93326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_ae_nvc nvcache;
93426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_ae_dev dev;
93526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
93626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
93726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
93826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_date_and_time {
93926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 flags;
94026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_DT_DAY_MASK   0x07
94126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_DT_DAY_NONE   0x00
94226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_DT_DAY_SUN    0x01
94326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_DT_DAY_MON    0x02
94426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_DT_DAY_TUE    0x03
94526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_DT_DAY_WED    0x04
94626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_DT_DAY_THU    0x05
94726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_DT_DAY_FRI    0x06
94826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_DT_DAY_SAT    0x07
94926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_DT_PM         0x40
95026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_DT_MILITARY   0x80
95126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
95226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 seconds;
95326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 minutes;
95426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 hours;
95526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 day;
95626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 month;
95726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u16 year;
95826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
95926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
96026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define SGE_LEN_LIMIT   0x003FFFFF      /*! mask of segment length            */
96126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define SGE_LEN_MAX     0x003FF000      /*! maximum segment length            */
96226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define SGE_LAST        0x01000000      /*! last entry                        */
96326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define SGE_ADDR_64     0x04000000      /*! 64-bit addressing flag            */
96426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define SGE_CHAIN       0x80000000      /*! chain descriptor flag             */
96526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define SGE_CHAIN_LEN   0x0000FFFF      /*! mask of length in chain entries   */
96626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define SGE_CHAIN_SZ    0x00FF0000      /*! mask of size of chained buffer    */
96726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
96826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
96926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_cfg_init {
97026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_date_and_time date_time;
97126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 sgl_page_size;
97226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 vda_version;
97326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 fw_version;
97426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 fw_build;
97526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 fw_release;
97626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 epoch_time;
97726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 ioctl_tunnel;
97826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_ITF_MEM_RW           0x00000001
97926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_ITF_TRACE            0x00000002
98026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_ITF_SCSI_PASS_THRU   0x00000004
98126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_ITF_GET_DEV_ADDR     0x00000008
98226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_ITF_PHY_CTRL         0x00000010
98326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_ITF_CONN_CTRL        0x00000020
98426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_ITF_GET_DEV_INFO     0x00000040
98526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
98626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 num_targets_backend;
98726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 reserved[0x48];
98826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
98926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
99026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
99126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove/* configuration commands */
99226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
99326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDA_CFG_INIT          0x00
99426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDA_CFG_GET_INIT      0x01
99526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define VDA_CFG_GET_INIT2     0x02
99626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
99726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
99826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove/*! physical region descriptor (PRD) aka scatter/gather entry */
99926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
100026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_physical_region_description {
100126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 address;
100226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 ctl_len;
100326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define PRD_LEN_LIMIT       0x003FFFFF
100426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define PRD_LEN_MAX         0x003FF000
100526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define PRD_NXT_PRD_CNT     0x0000007F
100626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define PRD_CHAIN           0x01000000
100726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define PRD_DATA            0x00000000
100826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define PRD_INT_SEL         0xF0000000
100926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	  #define PRD_INT_SEL_F0    0x00000000
101026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	  #define PRD_INT_SEL_F1    0x40000000
101126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	  #define PRD_INT_SEL_F2    0x80000000
101226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	  #define PRD_INT_SEL_F3    0xc0000000
101326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	  #define PRD_INT_SEL_SRAM  0x10000000
101426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	  #define PRD_INT_SEL_PBSR  0x20000000
101526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
101626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
101726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
101826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove/* Request types. NOTE that ALL requests have the same layout for the first
101926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove * few bytes.
102026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove */
102126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_req_header {
102226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 length;
102326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 function;
102426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 variable1;
102526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 chain_offset;
102626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 sg_list_offset;
102726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 handle;
102826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
102926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
103026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
103126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#define FCP_CDB_SIZE    16
103226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
103326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_scsi_req {
103426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 length;
103526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 function;  /* VDA_FUNC_SCSI */
103626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 sense_len;
103726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 chain_offset;
103826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 sg_list_offset;
103926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 handle;
104026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 flags;
104126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove     #define FCP_CMND_LUN_MASK    0x000000FF
104226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove     #define FCP_CMND_TA_MASK     0x00000700
104326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove      #define FCP_CMND_TA_SIMPL_Q 0x00000000
104426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove      #define FCP_CMND_TA_HEAD_Q  0x00000100
104526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove      #define FCP_CMND_TA_ORDRD_Q 0x00000200
104626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove      #define FCP_CMND_TA_ACA     0x00000400
104726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove     #define FCP_CMND_PRI_MASK    0x00007800
104826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove     #define FCP_CMND_TM_MASK     0x00FF0000
104926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove      #define FCP_CMND_ATS        0x00020000
105026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove      #define FCP_CMND_CTS        0x00040000
105126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove      #define FCP_CMND_LRS        0x00100000
105226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove      #define FCP_CMND_TRS        0x00200000
105326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove      #define FCP_CMND_CLA        0x00400000
105426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove      #define FCP_CMND_TRM        0x00800000
105526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove     #define FCP_CMND_DATA_DIR    0x03000000
105626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove      #define FCP_CMND_WRD        0x01000000
105726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove      #define FCP_CMND_RDD        0x02000000
105826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
105926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 cdb[FCP_CDB_SIZE];
106026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	union {
106126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct __packed {
106226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove			u64 ppsense_buf;
106326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove			u16 target_id;
106426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove			u8 iblk_cnt_prd;
106526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove			u8 reserved;
106626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		};
106726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
106826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct atto_physical_region_description sense_buff_prd;
106926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	};
107026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
107126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	union {
107226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct atto_vda_sge sge[1];
107326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
107426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		u32 abort_handle;
107526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		u32 dwords[245];
107626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct atto_physical_region_description prd[1];
107726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	} u;
107826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
107926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
108026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
108126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_flash_req {
108226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 length;
108326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 function; /* VDA_FUNC_FLASH */
108426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 sub_func;
108526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 chain_offset;
108626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 sg_list_offset;
108726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 handle;
108826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 flash_addr;
108926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 checksum;
109026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 rsvd[3];
109126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
109226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	union {
109326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct {
109426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove			char file_name[16]; /* 8.3 fname, NULL term, wc=* */
109526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove			struct atto_vda_sge sge[1];
109626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		} file;
109726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
109826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct atto_vda_sge sge[1];
109926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct atto_physical_region_description prde[2];
110026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	} data;
110126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
110226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
110326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
110426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_diag_req {
110526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 length;
110626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 function; /* VDA_FUNC_DIAG */
110726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 sub_func;
110826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_DIAG_STATUS   0x00
110926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_DIAG_RESET    0x01
111026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_DIAG_PAUSE    0x02
111126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_DIAG_RESUME   0x03
111226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_DIAG_READ     0x04
111326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define VDA_DIAG_WRITE    0x05
111426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
111526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 chain_offset;
111626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 sg_list_offset;
111726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 handle;
111826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 rsvd;
111926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u64 local_addr;
112026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_sge sge[1];
112126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
112226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
112326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
112426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_ae_req {
112526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 length;
112626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 function; /* VDA_FUNC_AE */
112726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 reserved1;
112826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 chain_offset;
112926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 sg_list_offset;
113026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 handle;
113126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
113226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	union {
113326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct atto_vda_sge sge[1];
113426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct atto_physical_region_description prde[1];
113526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	};
113626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
113726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
113826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
113926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_cli_req {
114026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 length;
114126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 function; /* VDA_FUNC_CLI */
114226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 reserved1;
114326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 chain_offset;
114426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 sg_list_offset;
114526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 handle;
114626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 cmd_rsp_len;
114726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_sge sge[1];
114826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
114926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
115026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
115126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_ioctl_req {
115226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 length;
115326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 function; /* VDA_FUNC_IOCTL */
115426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 sub_func;
115526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 chain_offset;
115626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 sg_list_offset;
115726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 handle;
115826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
115926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	union {
116026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct atto_vda_sge reserved_sge;
116126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct atto_physical_region_description reserved_prde;
116226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	};
116326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
116426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	union {
116526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct {
116626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove			u32 ctrl_code;
116726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove			u16 target_id;
116826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove			u8 lun;
116926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove			u8 reserved;
117026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		} csmi;
117126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	};
117226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
117326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	union {
117426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct atto_vda_sge sge[1];
117526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct atto_physical_region_description prde[1];
117626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	};
117726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
117826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
117926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
118026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_cfg_req {
118126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 length;
118226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 function; /* VDA_FUNC_CFG */
118326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 sub_func;
118426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 rsvd1;
118526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 sg_list_offset;
118626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 handle;
118726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
118826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	union {
118926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		u8 bytes[116];
119026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct atto_vda_cfg_init init;
119126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct atto_vda_sge sge;
119226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct atto_physical_region_description prde;
119326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	} data;
119426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
119526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
119626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
119726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_mgmt_req {
119826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 length;
119926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 function; /* VDA_FUNC_MGT */
120026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 mgt_func;
120126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 chain_offset;
120226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 sg_list_offset;
120326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 handle;
120426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 scan_generation;
120526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 payld_sglst_offset;
120626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u16 dev_index;
120726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 payld_length;
120826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 pad;
120926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	union {
121026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct atto_vda_sge sge[2];
121126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct atto_physical_region_description prde[2];
121226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	};
121326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_sge payld_sge[1];
121426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
121526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
121626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
121726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Groveunion atto_vda_req {
121826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_scsi_req scsi;
121926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_flash_req flash;
122026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_diag_req diag;
122126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_ae_req ae;
122226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_cli_req cli;
122326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_ioctl_req ioctl;
122426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_cfg_req cfg;
122526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_mgmt_req mgt;
122626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 bytes[1024];
122726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
122826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
122926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove/* Outbound response structures */
123026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
123126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_scsi_rsp {
123226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 scsi_stat;
123326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 sense_len;
123426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 rsvd[2];
123526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 residual_length;
123626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
123726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
123826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_flash_rsp {
123926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 file_size;
124026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
124126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
124226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_ae_rsp {
124326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 length;
124426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
124526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
124626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_cli_rsp {
124726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 cmd_rsp_len;
124826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
124926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
125026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_ioctl_rsp {
125126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	union {
125226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct {
125326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove			u32 csmi_status;
125426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove			u16 target_id;
125526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove			u8 lun;
125626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove			u8 reserved;
125726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		} csmi;
125826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	};
125926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
126026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
126126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_cfg_rsp {
126226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u16 vda_version;
126326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u16 fw_release;
126426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 fw_build;
126526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
126626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
126726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_mgmt_rsp {
126826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 length;
126926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u16 dev_index;
127026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 scan_generation;
127126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
127226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
127326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Groveunion atto_vda_func_rsp {
127426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_scsi_rsp scsi_rsp;
127526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_flash_rsp flash_rsp;
127626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_ae_rsp ae_rsp;
127726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_cli_rsp cli_rsp;
127826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_ioctl_rsp ioctl_rsp;
127926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_cfg_rsp cfg_rsp;
128026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_mgmt_rsp mgt_rsp;
128126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 dwords[2];
128226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
128326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
128426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_ob_rsp {
128526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u32 handle;
128626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 req_stat;
128726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 rsvd[3];
128826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
128926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	union atto_vda_func_rsp
129026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		func_rsp;
129126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
129226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
129326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_ae_data {
129426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 event_data[256];
129526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
129626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
129726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grovestruct __packed atto_vda_mgmt_data {
129826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	union {
129926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		u8 bytes[112];
130026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct atto_vda_devinfo dev_info;
130126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct atto_vda_grp_info grp_info;
130226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct atto_vdapart_info part_info;
130326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct atto_vda_dh_info dev_health_info;
130426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct atto_vda_metrics_info metrics_info;
130526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct atto_vda_schedule_info sched_info;
130626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct atto_vda_n_vcache_info nvcache_info;
130726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove		struct atto_vda_buzzer_info buzzer_info;
130826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	} data;
130926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
131026780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
131126780d9e12edf45c0b98315de272b1feff5a8e93Bradley Groveunion atto_vda_rsp_data {
131226780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_ae_data ae_data;
131326780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	struct atto_vda_mgmt_data mgt_data;
131426780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 sense_data[252];
131526780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	#define SENSE_DATA_SZ   252;
131626780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove	u8 bytes[256];
131726780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove};
131826780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove
131926780d9e12edf45c0b98315de272b1feff5a8e93Bradley Grove#endif
1320