^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* linux/drivers/scsi/esas2r/atvda.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) * ATTO VDA interface definitions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * Copyright (c) 2001-2013 ATTO Technology, Inc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * (mailto:linuxdrivers@attotech.com)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) * This program is free software; you can redistribute it and/or modify
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) * it under the terms of the GNU General Public License as published by
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) * the Free Software Foundation; version 2 of the License.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) * This program is distributed in the hope that it will be useful,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) * but WITHOUT ANY WARRANTY; without even the implied warranty of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) * GNU General Public License for more details.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) * NO WARRANTY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) * THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) * CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) * LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) * solely responsible for determining the appropriateness of using and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) * distributing the Program and assumes all risks associated with its
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) * exercise of rights under this Agreement, including but not limited to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) * the risks and costs of program errors, damage to or loss of data,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) * programs or equipment, and unavailability or interruption of operations.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) * DISCLAIMER OF LIABILITY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) * NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) * USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) * HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) * You should have received a copy of the GNU General Public License
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) * along with this program; if not, write to the Free Software
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) #ifndef ATVDA_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) #define ATVDA_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) struct __packed atto_dev_addr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) u64 dev_port;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) u64 hba_port;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) u8 lun;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) u8 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) #define VDA_DEVADDRF_SATA 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) #define VDA_DEVADDRF_SSD 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) u8 link_speed; /* VDALINKSPEED_xxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) u8 pad[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) /* dev_addr2 was added for 64-bit alignment */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) struct __packed atto_dev_addr2 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) u64 dev_port;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) u64 hba_port;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) u8 lun;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) u8 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) u8 link_speed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) u8 pad[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) struct __packed atto_vda_sge {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) u32 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) u64 address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) /* VDA request function codes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #define VDA_FUNC_SCSI 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) #define VDA_FUNC_FLASH 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) #define VDA_FUNC_DIAG 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) #define VDA_FUNC_AE 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) #define VDA_FUNC_CLI 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) #define VDA_FUNC_IOCTL 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) #define VDA_FUNC_CFG 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) #define VDA_FUNC_MGT 0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) #define VDA_FUNC_GSV 0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) /* VDA request status values. for host driver considerations, values for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) * SCSI requests start at zero. other requests may use these values as well. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) #define RS_SUCCESS 0x00 /*! successful completion */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) #define RS_INV_FUNC 0x01 /*! invalid command function */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) #define RS_BUSY 0x02 /*! insufficient resources */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) #define RS_SEL 0x03 /*! no target at target_id */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) #define RS_NO_LUN 0x04 /*! invalid LUN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) #define RS_TIMEOUT 0x05 /*! request timeout */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) #define RS_OVERRUN 0x06 /*! data overrun */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) #define RS_UNDERRUN 0x07 /*! data underrun */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) #define RS_SCSI_ERROR 0x08 /*! SCSI error occurred */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) #define RS_ABORTED 0x0A /*! command aborted */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) #define RS_RESID_MISM 0x0B /*! residual length incorrect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) #define RS_TM_FAILED 0x0C /*! task management failed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) #define RS_RESET 0x0D /*! aborted due to bus reset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) #define RS_ERR_DMA_SG 0x0E /*! error reading SG list */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) #define RS_ERR_DMA_DATA 0x0F /*! error transferring data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) #define RS_UNSUPPORTED 0x10 /*! unsupported request */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) #define RS_SEL2 0x70 /*! internal generated RS_SEL */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) #define RS_VDA_BASE 0x80 /*! base of VDA-specific errors */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) #define RS_MGT_BASE 0x80 /*! base of VDA management errors */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) #define RS_SCAN_FAIL (RS_MGT_BASE + 0x00)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) #define RS_DEV_INVALID (RS_MGT_BASE + 0x01)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) #define RS_DEV_ASSIGNED (RS_MGT_BASE + 0x02)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) #define RS_DEV_REMOVE (RS_MGT_BASE + 0x03)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) #define RS_DEV_LOST (RS_MGT_BASE + 0x04)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) #define RS_SCAN_GEN (RS_MGT_BASE + 0x05)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) #define RS_GRP_INVALID (RS_MGT_BASE + 0x08)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) #define RS_GRP_EXISTS (RS_MGT_BASE + 0x09)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) #define RS_GRP_LIMIT (RS_MGT_BASE + 0x0A)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) #define RS_GRP_INTLV (RS_MGT_BASE + 0x0B)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) #define RS_GRP_SPAN (RS_MGT_BASE + 0x0C)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) #define RS_GRP_TYPE (RS_MGT_BASE + 0x0D)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) #define RS_GRP_MEMBERS (RS_MGT_BASE + 0x0E)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) #define RS_GRP_COMMIT (RS_MGT_BASE + 0x0F)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) #define RS_GRP_REBUILD (RS_MGT_BASE + 0x10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) #define RS_GRP_REBUILD_TYPE (RS_MGT_BASE + 0x11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) #define RS_GRP_BLOCK_SIZE (RS_MGT_BASE + 0x12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) #define RS_CFG_SAVE (RS_MGT_BASE + 0x14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) #define RS_PART_LAST (RS_MGT_BASE + 0x18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) #define RS_ELEM_INVALID (RS_MGT_BASE + 0x19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) #define RS_PART_MAPPED (RS_MGT_BASE + 0x1A)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) #define RS_PART_TARGET (RS_MGT_BASE + 0x1B)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) #define RS_PART_LUN (RS_MGT_BASE + 0x1C)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) #define RS_PART_DUP (RS_MGT_BASE + 0x1D)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) #define RS_PART_NOMAP (RS_MGT_BASE + 0x1E)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) #define RS_PART_MAX (RS_MGT_BASE + 0x1F)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) #define RS_PART_CAP (RS_MGT_BASE + 0x20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) #define RS_PART_STATE (RS_MGT_BASE + 0x21)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) #define RS_TEST_IN_PROG (RS_MGT_BASE + 0x22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) #define RS_METRICS_ERROR (RS_MGT_BASE + 0x23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) #define RS_HS_ERROR (RS_MGT_BASE + 0x24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) #define RS_NO_METRICS_TEST (RS_MGT_BASE + 0x25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) #define RS_BAD_PARAM (RS_MGT_BASE + 0x26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) #define RS_GRP_MEMBER_SIZE (RS_MGT_BASE + 0x27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) #define RS_FLS_BASE 0xB0 /*! base of VDA errors */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) #define RS_FLS_ERR_AREA (RS_FLS_BASE + 0x00)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) #define RS_FLS_ERR_BUSY (RS_FLS_BASE + 0x01)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) #define RS_FLS_ERR_RANGE (RS_FLS_BASE + 0x02)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) #define RS_FLS_ERR_BEGIN (RS_FLS_BASE + 0x03)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) #define RS_FLS_ERR_CHECK (RS_FLS_BASE + 0x04)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) #define RS_FLS_ERR_FAIL (RS_FLS_BASE + 0x05)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) #define RS_FLS_ERR_RSRC (RS_FLS_BASE + 0x06)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) #define RS_FLS_ERR_NOFILE (RS_FLS_BASE + 0x07)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) #define RS_FLS_ERR_FSIZE (RS_FLS_BASE + 0x08)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) #define RS_CFG_BASE 0xC0 /*! base of VDA configuration errors */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) #define RS_CFG_ERR_BUSY (RS_CFG_BASE + 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) #define RS_CFG_ERR_SGE (RS_CFG_BASE + 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) #define RS_CFG_ERR_DATE (RS_CFG_BASE + 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) #define RS_CFG_ERR_TIME (RS_CFG_BASE + 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) #define RS_DEGRADED 0xFB /*! degraded mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) #define RS_CLI_INTERNAL 0xFC /*! VDA CLI internal error */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) #define RS_VDA_INTERNAL 0xFD /*! catch-all */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) #define RS_PENDING 0xFE /*! pending, not started */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) #define RS_STARTED 0xFF /*! started */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) /* flash request subfunctions. these are used in both the IOCTL and the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) * driver-firmware interface (VDA_FUNC_FLASH). */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) #define VDA_FLASH_BEGINW 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) #define VDA_FLASH_READ 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) #define VDA_FLASH_WRITE 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) #define VDA_FLASH_COMMIT 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) #define VDA_FLASH_CANCEL 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) #define VDA_FLASH_INFO 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) #define VDA_FLASH_FREAD 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) #define VDA_FLASH_FWRITE 0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) #define VDA_FLASH_FINFO 0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) /* IOCTL request subfunctions. these identify the payload type for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) * VDA_FUNC_IOCTL.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) #define VDA_IOCTL_HBA 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) #define VDA_IOCTL_CSMI 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) #define VDA_IOCTL_SMP 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) struct __packed atto_vda_devinfo {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) struct atto_dev_addr dev_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) u8 vendor_id[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) u8 product_id[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) u8 revision[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) u64 capacity;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) u32 block_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) u8 dev_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) u8 dev_status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) #define VDADEVSTAT_INVALID 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) #define VDADEVSTAT_CORRUPT VDADEVSTAT_INVALID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) #define VDADEVSTAT_ASSIGNED 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) #define VDADEVSTAT_SPARE 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) #define VDADEVSTAT_UNAVAIL 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) #define VDADEVSTAT_PT_MAINT 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) #define VDADEVSTAT_LCLSPARE 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) #define VDADEVSTAT_UNUSEABLE 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) #define VDADEVSTAT_AVAIL 0xFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) u8 op_ctrl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) #define VDA_DEV_OP_CTRL_START 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) #define VDA_DEV_OP_CTRL_HALT 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) #define VDA_DEV_OP_CTRL_RESUME 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) #define VDA_DEV_OP_CTRL_CANCEL 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) u8 member_state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) #define VDAMBRSTATE_ONLINE 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) #define VDAMBRSTATE_DEGRADED 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) #define VDAMBRSTATE_UNAVAIL 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) #define VDAMBRSTATE_FAULTED 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) #define VDAMBRSTATE_MISREAD 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) #define VDAMBRSTATE_INCOMPAT 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) u8 operation;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) #define VDAOP_NONE 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) #define VDAOP_REBUILD 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) #define VDAOP_ERASE 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) #define VDAOP_PATTERN 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) #define VDAOP_CONVERSION 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) #define VDAOP_FULL_INIT 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) #define VDAOP_QUICK_INIT 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) #define VDAOP_SECT_SCAN 0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) #define VDAOP_SECT_SCAN_PARITY 0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) #define VDAOP_SECT_SCAN_PARITY_FIX 0x09
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) #define VDAOP_RECOV_REBUILD 0x0A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) u8 op_status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) #define VDAOPSTAT_OK 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) #define VDAOPSTAT_FAULTED 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) #define VDAOPSTAT_HALTED 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) #define VDAOPSTAT_INT 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) u8 progress; /* 0 - 100% */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) u16 ses_dev_index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) #define VDASESDI_INVALID 0xFFFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) u8 serial_no[32];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) u16 target_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) #define VDATGTID_INVALID 0xFFFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) u16 features_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) u16 lun;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) u16 features;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) #define VDADEVFEAT_ENC_SERV 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) #define VDADEVFEAT_IDENT 0x0002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) #define VDADEVFEAT_DH_SUPP 0x0004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) #define VDADEVFEAT_PHYS_ID 0x0008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) u8 ses_element_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) u8 link_speed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) #define VDALINKSPEED_UNKNOWN 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) #define VDALINKSPEED_1GB 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) #define VDALINKSPEED_1_5GB 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) #define VDALINKSPEED_2GB 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) #define VDALINKSPEED_3GB 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) #define VDALINKSPEED_4GB 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) #define VDALINKSPEED_6GB 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) #define VDALINKSPEED_8GB 0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) u16 phys_target_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) u8 reserved[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) /*! struct atto_vda_devinfo2 is a replacement for atto_vda_devinfo. it
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) * extends beyond the 0x70 bytes allowed in atto_vda_mgmt_req; therefore,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) * the entire structure is DMaed between the firmware and host buffer and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) * the data will always be in little endian format.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) struct __packed atto_vda_devinfo2 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) struct atto_dev_addr dev_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) u8 vendor_id[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) u8 product_id[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) u8 revision[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) u64 capacity;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) u32 block_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) u8 dev_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) u8 dev_status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) u8 member_state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) u8 operation;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) u8 op_status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) u8 progress;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) u16 ses_dev_index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) u8 serial_no[32];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) u16 target_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) u16 features_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) u16 lun;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) u16 features;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) u8 ses_element_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) u8 link_speed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) u16 phys_target_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) u8 reserved[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) /* This is where fields specific to struct atto_vda_devinfo2 begin. Note
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) * that the structure version started at one so applications that unionize this
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) * structure with atto_vda_dev_info can differentiate them if desired.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) u8 version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) #define VDADEVINFO_VERSION0 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) #define VDADEVINFO_VERSION1 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) #define VDADEVINFO_VERSION2 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) #define VDADEVINFO_VERSION3 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) #define VDADEVINFO_VERSION VDADEVINFO_VERSION3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) u8 reserved2[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) /* sector scanning fields */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) u32 ss_curr_errors;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) u64 ss_curr_scanned;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) u32 ss_curr_recvrd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) u32 ss_scan_length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) u32 ss_total_errors;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) u32 ss_total_recvrd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) u32 ss_num_scans;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) /* grp_name was added in version 2 of this structure. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) char grp_name[15];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) u8 reserved3[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) /* dev_addr_list was added in version 3 of this structure. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) u8 num_dev_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) struct atto_dev_addr2 dev_addr_list[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) struct __packed atto_vda_grp_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) u8 grp_index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) #define VDA_MAX_RAID_GROUPS 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) char grp_name[15];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) u64 capacity;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) u32 block_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) u32 interleave;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) u8 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) #define VDA_GRP_TYPE_RAID0 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) #define VDA_GRP_TYPE_RAID1 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) #define VDA_GRP_TYPE_RAID4 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) #define VDA_GRP_TYPE_RAID5 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) #define VDA_GRP_TYPE_RAID6 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) #define VDA_GRP_TYPE_RAID10 10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) #define VDA_GRP_TYPE_RAID40 40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) #define VDA_GRP_TYPE_RAID50 50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) #define VDA_GRP_TYPE_RAID60 60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) #define VDA_GRP_TYPE_DVRAID_HS 252
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) #define VDA_GRP_TYPE_DVRAID_NOHS 253
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) #define VDA_GRP_TYPE_JBOD 254
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) #define VDA_GRP_TYPE_SPARE 255
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) u8 status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) #define VDA_GRP_STAT_INVALID 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) #define VDA_GRP_STAT_NEW 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) #define VDA_GRP_STAT_WAITING 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) #define VDA_GRP_STAT_ONLINE 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) #define VDA_GRP_STAT_DEGRADED 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) #define VDA_GRP_STAT_OFFLINE 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) #define VDA_GRP_STAT_DELETED 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) #define VDA_GRP_STAT_RECOV_BASIC 0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) #define VDA_GRP_STAT_RECOV_EXTREME 0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) u8 op_ctrl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) #define VDA_GRP_OP_CTRL_START 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) #define VDA_GRP_OP_CTRL_HALT 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) #define VDA_GRP_OP_CTRL_RESUME 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) #define VDA_GRP_OP_CTRL_CANCEL 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) u8 rebuild_state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) #define VDA_RBLD_NONE 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) #define VDA_RBLD_REBUILD 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) #define VDA_RBLD_ERASE 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) #define VDA_RBLD_PATTERN 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) #define VDA_RBLD_CONV 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) #define VDA_RBLD_FULL_INIT 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) #define VDA_RBLD_QUICK_INIT 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) #define VDA_RBLD_SECT_SCAN 0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) #define VDA_RBLD_SECT_SCAN_PARITY 0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) #define VDA_RBLD_SECT_SCAN_PARITY_FIX 0x09
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) #define VDA_RBLD_RECOV_REBUILD 0x0A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) #define VDA_RBLD_RECOV_BASIC 0x0B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) #define VDA_RBLD_RECOV_EXTREME 0x0C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) u8 span_depth;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) u8 progress;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) u8 mirror_width;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) u8 stripe_width;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) u8 member_cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) u16 members[32];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) #define VDA_MEMBER_MISSING 0xFFFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) #define VDA_MEMBER_NEW 0xFFFE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) u16 features_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) u16 features;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) #define VDA_GRP_FEAT_HOTSWAP 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) #define VDA_GRP_FEAT_SPDRD_MASK 0x0006
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) #define VDA_GRP_FEAT_SPDRD_DIS 0x0000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) #define VDA_GRP_FEAT_SPDRD_ENB 0x0002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) #define VDA_GRP_FEAT_SPDRD_AUTO 0x0004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) #define VDA_GRP_FEAT_IDENT 0x0008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) #define VDA_GRP_FEAT_RBLDPRI_MASK 0x0030
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) #define VDA_GRP_FEAT_RBLDPRI_LOW 0x0010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) #define VDA_GRP_FEAT_RBLDPRI_SAME 0x0020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) #define VDA_GRP_FEAT_RBLDPRI_HIGH 0x0030
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) #define VDA_GRP_FEAT_WRITE_CACHE 0x0040
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) #define VDA_GRP_FEAT_RBLD_RESUME 0x0080
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) #define VDA_GRP_FEAT_SECT_RESUME 0x0100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) #define VDA_GRP_FEAT_INIT_RESUME 0x0200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) #define VDA_GRP_FEAT_SSD 0x0400
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) #define VDA_GRP_FEAT_BOOT_DEV 0x0800
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) * for backward compatibility, a prefetch value of zero means the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) * setting is ignored/unsupported. therefore, the firmware supported
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) * 0-6 values are incremented to 1-7.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) u8 prefetch;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) u8 op_status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) #define VDAGRPOPSTAT_MASK 0x0F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) #define VDAGRPOPSTAT_INVALID 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) #define VDAGRPOPSTAT_OK 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) #define VDAGRPOPSTAT_FAULTED 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) #define VDAGRPOPSTAT_HALTED 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) #define VDAGRPOPSTAT_INT 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) #define VDAGRPOPPROC_MASK 0xF0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) #define VDAGRPOPPROC_STARTABLE 0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) #define VDAGRPOPPROC_CANCELABLE 0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) #define VDAGRPOPPROC_RESUMABLE 0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) #define VDAGRPOPPROC_HALTABLE 0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) u8 over_provision;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) u8 reserved[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) struct __packed atto_vdapart_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) u8 part_no;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) #define VDA_MAX_PARTITIONS 128
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) char grp_name[15];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) u64 part_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) u64 start_lba;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) u32 block_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) u16 target_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) u8 LUN;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) char serial_no[41];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) u8 features;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) #define VDAPI_FEAT_WRITE_CACHE 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) u8 reserved[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) struct __packed atto_vda_dh_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) u8 req_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) #define VDADH_RQTYPE_CACHE 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) #define VDADH_RQTYPE_FETCH 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) #define VDADH_RQTYPE_SET_STAT 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) #define VDADH_RQTYPE_GET_STAT 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) u8 req_qual;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) #define VDADH_RQQUAL_SMART 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) #define VDADH_RQQUAL_MEDDEF 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) #define VDADH_RQQUAL_INFOEXC 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) u8 num_smart_attribs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) u8 status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) #define VDADH_STAT_DISABLE 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) #define VDADH_STAT_ENABLE 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) u32 med_defect_cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) u32 info_exc_cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) u8 smart_status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) #define VDADH_SMARTSTAT_OK 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) #define VDADH_SMARTSTAT_ERR 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) u8 reserved[35];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) struct atto_vda_sge sge[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) struct __packed atto_vda_dh_smart {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) u8 attrib_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) u8 current_val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) u8 worst;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) u8 threshold;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) u8 raw_data[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) u8 raw_attrib_status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) #define VDADHSM_RAWSTAT_PREFAIL_WARRANTY 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) #define VDADHSM_RAWSTAT_ONLINE_COLLECTION 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) #define VDADHSM_RAWSTAT_PERFORMANCE_ATTR 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) #define VDADHSM_RAWSTAT_ERROR_RATE_ATTR 0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) #define VDADHSM_RAWSTAT_EVENT_COUNT_ATTR 0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) #define VDADHSM_RAWSTAT_SELF_PRESERVING_ATTR 0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) u8 calc_attrib_status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) #define VDADHSM_CALCSTAT_UNKNOWN 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) #define VDADHSM_CALCSTAT_GOOD 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) #define VDADHSM_CALCSTAT_PREFAIL 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) #define VDADHSM_CALCSTAT_OLDAGE 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) u8 reserved[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) struct __packed atto_vda_metrics_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) u8 data_version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) #define VDAMET_VERSION0 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) #define VDAMET_VERSION VDAMET_VERSION0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) u8 metrics_action;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) #define VDAMET_METACT_NONE 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) #define VDAMET_METACT_START 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) #define VDAMET_METACT_STOP 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) #define VDAMET_METACT_RETRIEVE 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) #define VDAMET_METACT_CLEAR 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) u8 test_action;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) #define VDAMET_TSTACT_NONE 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) #define VDAMET_TSTACT_STRT_INIT 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) #define VDAMET_TSTACT_STRT_READ 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) #define VDAMET_TSTACT_STRT_VERIFY 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) #define VDAMET_TSTACT_STRT_INIT_VERIFY 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) #define VDAMET_TSTACT_STOP 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) u8 num_dev_indexes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) #define VDAMET_ALL_DEVICES 0xFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) u16 dev_indexes[32];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) u8 reserved[12];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) struct atto_vda_sge sge[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) struct __packed atto_vda_metrics_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) u16 dev_index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) u16 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) #define VDAMD_LEN_LAST 0x8000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) #define VDAMD_LEN_MASK 0x0FFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) #define VDAMDF_RUN 0x00000007
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) #define VDAMDF_RUN_READ 0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) #define VDAMDF_RUN_WRITE 0x00000002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) #define VDAMDF_RUN_ALL 0x00000004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) #define VDAMDF_READ 0x00000010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) #define VDAMDF_WRITE 0x00000020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) #define VDAMDF_ALL 0x00000040
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) #define VDAMDF_DRIVETEST 0x40000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) #define VDAMDF_NEW 0x80000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) u64 total_read_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) u64 total_write_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) u64 total_read_io;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) u64 total_write_io;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) u64 read_start_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) u64 read_stop_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) u64 write_start_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) u64 write_stop_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) u64 read_maxio_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) u64 wpvdadmetricsdatarite_maxio_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) u64 read_totalio_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) u64 write_totalio_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) u64 read_total_errs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) u64 write_total_errs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) u64 read_recvrd_errs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) u64 write_recvrd_errs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) u64 miscompares;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) struct __packed atto_vda_schedule_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) u8 schedule_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) #define VDASI_SCHTYPE_ONETIME 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) #define VDASI_SCHTYPE_DAILY 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) #define VDASI_SCHTYPE_WEEKLY 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) u8 operation;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) #define VDASI_OP_NONE 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) #define VDASI_OP_CREATE 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) #define VDASI_OP_CANCEL 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) u8 hour;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) u8 minute;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) u8 day;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) #define VDASI_DAY_NONE 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) u8 progress;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) #define VDASI_PROG_NONE 0xFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) u8 event_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) #define VDASI_EVTTYPE_SECT_SCAN 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) #define VDASI_EVTTYPE_SECT_SCAN_PARITY 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) #define VDASI_EVTTYPE_SECT_SCAN_PARITY_FIX 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) u8 recurrences;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) #define VDASI_RECUR_FOREVER 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) u32 id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) #define VDASI_ID_NONE 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) char grp_name[15];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) u8 reserved[85];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) struct __packed atto_vda_n_vcache_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) u8 super_cap_status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) #define VDANVCI_SUPERCAP_NOT_PRESENT 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) #define VDANVCI_SUPERCAP_FULLY_CHARGED 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) #define VDANVCI_SUPERCAP_NOT_CHARGED 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) u8 nvcache_module_status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) #define VDANVCI_NVCACHEMODULE_NOT_PRESENT 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) #define VDANVCI_NVCACHEMODULE_PRESENT 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) u8 protection_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) #define VDANVCI_PROTMODE_HI_PROTECT 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) #define VDANVCI_PROTMODE_HI_PERFORM 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647) u8 reserved[109];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) struct __packed atto_vda_buzzer_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652) u8 status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) #define VDABUZZI_BUZZER_OFF 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654) #define VDABUZZI_BUZZER_ON 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) #define VDABUZZI_BUZZER_LAST 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) u8 reserved[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658) u32 duration;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659) #define VDABUZZI_DURATION_INDEFINITE 0xffffffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) u8 reserved2[104];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665) struct __packed atto_vda_adapter_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) u8 version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) #define VDAADAPINFO_VERSION0 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) #define VDAADAPINFO_VERSION VDAADAPINFO_VERSION0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) u8 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671) signed short utc_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672) u32 utc_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) u32 features;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674) #define VDA_ADAP_FEAT_IDENT 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675) #define VDA_ADAP_FEAT_BUZZ_ERR 0x0002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) #define VDA_ADAP_FEAT_UTC_TIME 0x0004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) u32 valid_features;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) char active_config[33];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680) u8 temp_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) u8 fan_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682) u8 reserved3[61];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) struct __packed atto_vda_temp_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) u8 temp_index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688) u8 max_op_temp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689) u8 min_op_temp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690) u8 op_temp_warn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691) u8 temperature;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692) u8 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) #define VDA_TEMP_TYPE_CPU 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 695) u8 reserved[106];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 696) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 697)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 698)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 699) struct __packed atto_vda_fan_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 700) u8 fan_index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 701) u8 status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 702) #define VDA_FAN_STAT_UNKNOWN 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 703) #define VDA_FAN_STAT_NORMAL 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 704) #define VDA_FAN_STAT_FAIL 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 705)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 706) u16 crit_pvdafaninfothreshold;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 707) u16 warn_threshold;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 708) u16 speed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 709) u8 reserved[104];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 710) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 711)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 712)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 713) /* VDA management commands */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 714)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 715) #define VDAMGT_DEV_SCAN 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 716) #define VDAMGT_DEV_INFO 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 717) #define VDAMGT_DEV_CLEAN 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 718) #define VDAMGT_DEV_IDENTIFY 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 719) #define VDAMGT_DEV_IDENTSTOP 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 720) #define VDAMGT_DEV_PT_INFO 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 721) #define VDAMGT_DEV_FEATURES 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 722) #define VDAMGT_DEV_PT_FEATURES 0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 723) #define VDAMGT_DEV_HEALTH_REQ 0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 724) #define VDAMGT_DEV_METRICS 0x09
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 725) #define VDAMGT_DEV_INFO2 0x0A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 726) #define VDAMGT_DEV_OPERATION 0x0B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 727) #define VDAMGT_DEV_INFO2_BYADDR 0x0C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 728) #define VDAMGT_GRP_INFO 0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 729) #define VDAMGT_GRP_CREATE 0x11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 730) #define VDAMGT_GRP_DELETE 0x12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 731) #define VDAMGT_ADD_STORAGE 0x13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 732) #define VDAMGT_MEMBER_ADD 0x14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 733) #define VDAMGT_GRP_COMMIT 0x15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 734) #define VDAMGT_GRP_REBUILD 0x16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 735) #define VDAMGT_GRP_COMMIT_INIT 0x17
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 736) #define VDAMGT_QUICK_RAID 0x18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 737) #define VDAMGT_GRP_FEATURES 0x19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 738) #define VDAMGT_GRP_COMMIT_INIT_AUTOMAP 0x1A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 739) #define VDAMGT_QUICK_RAID_INIT_AUTOMAP 0x1B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 740) #define VDAMGT_GRP_OPERATION 0x1C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 741) #define VDAMGT_CFG_SAVE 0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 742) #define VDAMGT_LAST_ERROR 0x21
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 743) #define VDAMGT_ADAP_INFO 0x22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 744) #define VDAMGT_ADAP_FEATURES 0x23
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 745) #define VDAMGT_TEMP_INFO 0x24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 746) #define VDAMGT_FAN_INFO 0x25
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 747) #define VDAMGT_PART_INFO 0x30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 748) #define VDAMGT_PART_MAP 0x31
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 749) #define VDAMGT_PART_UNMAP 0x32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 750) #define VDAMGT_PART_AUTOMAP 0x33
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 751) #define VDAMGT_PART_SPLIT 0x34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 752) #define VDAMGT_PART_MERGE 0x35
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 753) #define VDAMGT_SPARE_LIST 0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 754) #define VDAMGT_SPARE_ADD 0x41
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 755) #define VDAMGT_SPARE_REMOVE 0x42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 756) #define VDAMGT_LOCAL_SPARE_ADD 0x43
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 757) #define VDAMGT_SCHEDULE_EVENT 0x50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 758) #define VDAMGT_SCHEDULE_INFO 0x51
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 759) #define VDAMGT_NVCACHE_INFO 0x60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 760) #define VDAMGT_NVCACHE_SET 0x61
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 761) #define VDAMGT_BUZZER_INFO 0x70
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 762) #define VDAMGT_BUZZER_SET 0x71
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 763)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 764)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 765) struct __packed atto_vda_ae_hdr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 766) u8 bylength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 767) u8 byflags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 768) #define VDAAE_HDRF_EVENT_ACK 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 769)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 770) u8 byversion;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 771) #define VDAAE_HDR_VER_0 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 772)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 773) u8 bytype;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 774) #define VDAAE_HDR_TYPE_RAID 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 775) #define VDAAE_HDR_TYPE_LU 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 776) #define VDAAE_HDR_TYPE_DISK 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 777) #define VDAAE_HDR_TYPE_RESET 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 778) #define VDAAE_HDR_TYPE_LOG_INFO 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 779) #define VDAAE_HDR_TYPE_LOG_WARN 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 780) #define VDAAE_HDR_TYPE_LOG_CRIT 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 781) #define VDAAE_HDR_TYPE_LOG_FAIL 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 782) #define VDAAE_HDR_TYPE_NVC 9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 783) #define VDAAE_HDR_TYPE_TLG_INFO 10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 784) #define VDAAE_HDR_TYPE_TLG_WARN 11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 785) #define VDAAE_HDR_TYPE_TLG_CRIT 12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 786) #define VDAAE_HDR_TYPE_PWRMGT 13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 787) #define VDAAE_HDR_TYPE_MUTE 14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 788) #define VDAAE_HDR_TYPE_DEV 15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 789) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 790)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 791)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 792) struct __packed atto_vda_ae_raid {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 793) struct atto_vda_ae_hdr hdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 794) u32 dwflags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 795) #define VDAAE_GROUP_STATE 0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 796) #define VDAAE_RBLD_STATE 0x00000002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 797) #define VDAAE_RBLD_PROG 0x00000004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 798) #define VDAAE_MEMBER_CHG 0x00000008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 799) #define VDAAE_PART_CHG 0x00000010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 800) #define VDAAE_MEM_STATE_CHG 0x00000020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 801)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 802) u8 bygroup_state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 803) #define VDAAE_RAID_INVALID 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 804) #define VDAAE_RAID_NEW 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 805) #define VDAAE_RAID_WAITING 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 806) #define VDAAE_RAID_ONLINE 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 807) #define VDAAE_RAID_DEGRADED 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 808) #define VDAAE_RAID_OFFLINE 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 809) #define VDAAE_RAID_DELETED 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 810) #define VDAAE_RAID_BASIC 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 811) #define VDAAE_RAID_EXTREME 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 812) #define VDAAE_RAID_UNKNOWN 9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 813)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 814) u8 byrebuild_state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 815) #define VDAAE_RBLD_NONE 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 816) #define VDAAE_RBLD_REBUILD 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 817) #define VDAAE_RBLD_ERASE 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 818) #define VDAAE_RBLD_PATTERN 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 819) #define VDAAE_RBLD_CONV 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 820) #define VDAAE_RBLD_FULL_INIT 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 821) #define VDAAE_RBLD_QUICK_INIT 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 822) #define VDAAE_RBLD_SECT_SCAN 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 823) #define VDAAE_RBLD_SECT_SCAN_PARITY 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 824) #define VDAAE_RBLD_SECT_SCAN_PARITY_FIX 9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 825) #define VDAAE_RBLD_RECOV_REBUILD 10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 826) #define VDAAE_RBLD_UNKNOWN 11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 827)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 828) u8 byrebuild_progress;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 829) u8 op_status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 830) #define VDAAE_GRPOPSTAT_MASK 0x0F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 831) #define VDAAE_GRPOPSTAT_INVALID 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 832) #define VDAAE_GRPOPSTAT_OK 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 833) #define VDAAE_GRPOPSTAT_FAULTED 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 834) #define VDAAE_GRPOPSTAT_HALTED 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 835) #define VDAAE_GRPOPSTAT_INT 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 836) #define VDAAE_GRPOPPROC_MASK 0xF0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 837) #define VDAAE_GRPOPPROC_STARTABLE 0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 838) #define VDAAE_GRPOPPROC_CANCELABLE 0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 839) #define VDAAE_GRPOPPROC_RESUMABLE 0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 840) #define VDAAE_GRPOPPROC_HALTABLE 0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 841) char acname[15];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 842) u8 byreserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 843) u8 byreserved2[0x80 - 0x1C];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 844) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 845)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 846)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 847) struct __packed atto_vda_ae_lu_tgt_lun {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 848) u16 wtarget_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 849) u8 bylun;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 850) u8 byreserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 851) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 852)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 853)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 854) struct __packed atto_vda_ae_lu_tgt_lun_raid {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 855) u16 wtarget_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 856) u8 bylun;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 857) u8 byreserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 858) u32 dwinterleave;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 859) u32 dwblock_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 860) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 861)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 862)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 863) struct __packed atto_vda_ae_lu {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 864) struct atto_vda_ae_hdr hdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 865) u32 dwevent;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 866) #define VDAAE_LU_DISC 0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 867) #define VDAAE_LU_LOST 0x00000002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 868) #define VDAAE_LU_STATE 0x00000004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 869) #define VDAAE_LU_PASSTHROUGH 0x10000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 870) #define VDAAE_LU_PHYS_ID 0x20000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 871)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 872) u8 bystate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 873) #define VDAAE_LU_UNDEFINED 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 874) #define VDAAE_LU_NOT_PRESENT 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 875) #define VDAAE_LU_OFFLINE 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 876) #define VDAAE_LU_ONLINE 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 877) #define VDAAE_LU_DEGRADED 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 878) #define VDAAE_LU_FACTORY_DISABLED 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 879) #define VDAAE_LU_DELETED 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 880) #define VDAAE_LU_BUSSCAN 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 881) #define VDAAE_LU_UNKNOWN 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 882)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 883) u8 byreserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 884) u16 wphys_target_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 885)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 886) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 887) struct atto_vda_ae_lu_tgt_lun tgtlun;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 888) struct atto_vda_ae_lu_tgt_lun_raid tgtlun_raid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 889) } id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 890) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 891)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 892)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 893) struct __packed atto_vda_ae_disk {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 894) struct atto_vda_ae_hdr hdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 895) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 896)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 897)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 898) #define VDAAE_LOG_STRSZ 64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 899)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 900) struct __packed atto_vda_ae_log {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 901) struct atto_vda_ae_hdr hdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 902) char aclog_ascii[VDAAE_LOG_STRSZ];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 903) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 904)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 905)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 906) #define VDAAE_TLG_STRSZ 56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 907)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 908) struct __packed atto_vda_ae_timestamp_log {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 909) struct atto_vda_ae_hdr hdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 910) u32 dwtimestamp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 911) char aclog_ascii[VDAAE_TLG_STRSZ];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 912) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 913)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 914)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 915) struct __packed atto_vda_ae_nvc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 916) struct atto_vda_ae_hdr hdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 917) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 918)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 919)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 920) struct __packed atto_vda_ae_dev {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 921) struct atto_vda_ae_hdr hdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 922) struct atto_dev_addr devaddr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 923) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 924)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 925)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 926) union atto_vda_ae {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 927) struct atto_vda_ae_hdr hdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 928) struct atto_vda_ae_disk disk;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 929) struct atto_vda_ae_lu lu;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 930) struct atto_vda_ae_raid raid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 931) struct atto_vda_ae_log log;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 932) struct atto_vda_ae_timestamp_log tslog;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 933) struct atto_vda_ae_nvc nvcache;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 934) struct atto_vda_ae_dev dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 935) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 936)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 937)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 938) struct __packed atto_vda_date_and_time {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 939) u8 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 940) #define VDA_DT_DAY_MASK 0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 941) #define VDA_DT_DAY_NONE 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 942) #define VDA_DT_DAY_SUN 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 943) #define VDA_DT_DAY_MON 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 944) #define VDA_DT_DAY_TUE 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 945) #define VDA_DT_DAY_WED 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 946) #define VDA_DT_DAY_THU 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 947) #define VDA_DT_DAY_FRI 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 948) #define VDA_DT_DAY_SAT 0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 949) #define VDA_DT_PM 0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 950) #define VDA_DT_MILITARY 0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 951)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 952) u8 seconds;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 953) u8 minutes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 954) u8 hours;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 955) u8 day;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 956) u8 month;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 957) u16 year;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 958) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 959)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 960) #define SGE_LEN_LIMIT 0x003FFFFF /*! mask of segment length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 961) #define SGE_LEN_MAX 0x003FF000 /*! maximum segment length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 962) #define SGE_LAST 0x01000000 /*! last entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 963) #define SGE_ADDR_64 0x04000000 /*! 64-bit addressing flag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 964) #define SGE_CHAIN 0x80000000 /*! chain descriptor flag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 965) #define SGE_CHAIN_LEN 0x0000FFFF /*! mask of length in chain entries */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 966) #define SGE_CHAIN_SZ 0x00FF0000 /*! mask of size of chained buffer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 967)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 968)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 969) struct __packed atto_vda_cfg_init {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 970) struct atto_vda_date_and_time date_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 971) u32 sgl_page_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 972) u32 vda_version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 973) u32 fw_version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 974) u32 fw_build;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 975) u32 fw_release;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 976) u32 epoch_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 977) u32 ioctl_tunnel;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 978) #define VDA_ITF_MEM_RW 0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 979) #define VDA_ITF_TRACE 0x00000002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 980) #define VDA_ITF_SCSI_PASS_THRU 0x00000004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 981) #define VDA_ITF_GET_DEV_ADDR 0x00000008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 982) #define VDA_ITF_PHY_CTRL 0x00000010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 983) #define VDA_ITF_CONN_CTRL 0x00000020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 984) #define VDA_ITF_GET_DEV_INFO 0x00000040
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 985)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 986) u32 num_targets_backend;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 987) u8 reserved[0x48];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 988) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 989)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 990)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 991) /* configuration commands */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 992)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 993) #define VDA_CFG_INIT 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 994) #define VDA_CFG_GET_INIT 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 995) #define VDA_CFG_GET_INIT2 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 996)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 997)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 998) /*! physical region descriptor (PRD) aka scatter/gather entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 999)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1000) struct __packed atto_physical_region_description {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1001) u64 address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1002) u32 ctl_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1003) #define PRD_LEN_LIMIT 0x003FFFFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1004) #define PRD_LEN_MAX 0x003FF000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1005) #define PRD_NXT_PRD_CNT 0x0000007F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1006) #define PRD_CHAIN 0x01000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1007) #define PRD_DATA 0x00000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1008) #define PRD_INT_SEL 0xF0000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1009) #define PRD_INT_SEL_F0 0x00000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1010) #define PRD_INT_SEL_F1 0x40000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1011) #define PRD_INT_SEL_F2 0x80000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1012) #define PRD_INT_SEL_F3 0xc0000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1013) #define PRD_INT_SEL_SRAM 0x10000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1014) #define PRD_INT_SEL_PBSR 0x20000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1015)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1016) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1017)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1018) /* Request types. NOTE that ALL requests have the same layout for the first
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1019) * few bytes.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1020) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1021) struct __packed atto_vda_req_header {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1022) u32 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1023) u8 function;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1024) u8 variable1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1025) u8 chain_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1026) u8 sg_list_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1027) u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1028) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1029)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1030)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1031) #define FCP_CDB_SIZE 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1032)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1033) struct __packed atto_vda_scsi_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1034) u32 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1035) u8 function; /* VDA_FUNC_SCSI */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1036) u8 sense_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1037) u8 chain_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1038) u8 sg_list_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1039) u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1040) u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1041) #define FCP_CMND_LUN_MASK 0x000000FF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1042) #define FCP_CMND_TA_MASK 0x00000700
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1043) #define FCP_CMND_TA_SIMPL_Q 0x00000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1044) #define FCP_CMND_TA_HEAD_Q 0x00000100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1045) #define FCP_CMND_TA_ORDRD_Q 0x00000200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1046) #define FCP_CMND_TA_ACA 0x00000400
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1047) #define FCP_CMND_PRI_MASK 0x00007800
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1048) #define FCP_CMND_TM_MASK 0x00FF0000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1049) #define FCP_CMND_ATS 0x00020000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1050) #define FCP_CMND_CTS 0x00040000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1051) #define FCP_CMND_LRS 0x00100000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1052) #define FCP_CMND_TRS 0x00200000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1053) #define FCP_CMND_CLA 0x00400000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1054) #define FCP_CMND_TRM 0x00800000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1055) #define FCP_CMND_DATA_DIR 0x03000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1056) #define FCP_CMND_WRD 0x01000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1057) #define FCP_CMND_RDD 0x02000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1058)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1059) u8 cdb[FCP_CDB_SIZE];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1060) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1061) struct __packed {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1062) u64 ppsense_buf;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1063) u16 target_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1064) u8 iblk_cnt_prd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1065) u8 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1066) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1067)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1068) struct atto_physical_region_description sense_buff_prd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1069) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1070)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1071) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1072) struct atto_vda_sge sge[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1073)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1074) u32 abort_handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1075) u32 dwords[245];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1076) struct atto_physical_region_description prd[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1077) } u;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1078) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1079)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1080)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1081) struct __packed atto_vda_flash_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1082) u32 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1083) u8 function; /* VDA_FUNC_FLASH */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1084) u8 sub_func;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1085) u8 chain_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1086) u8 sg_list_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1087) u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1088) u32 flash_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1089) u8 checksum;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1090) u8 rsvd[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1091)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1092) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1093) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1094) char file_name[16]; /* 8.3 fname, NULL term, wc=* */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1095) struct atto_vda_sge sge[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1096) } file;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1097)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1098) struct atto_vda_sge sge[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1099) struct atto_physical_region_description prde[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1100) } data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1101) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1102)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1103)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1104) struct __packed atto_vda_diag_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1105) u32 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1106) u8 function; /* VDA_FUNC_DIAG */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1107) u8 sub_func;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1108) #define VDA_DIAG_STATUS 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1109) #define VDA_DIAG_RESET 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1110) #define VDA_DIAG_PAUSE 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1111) #define VDA_DIAG_RESUME 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1112) #define VDA_DIAG_READ 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1113) #define VDA_DIAG_WRITE 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1114)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1115) u8 chain_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1116) u8 sg_list_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1117) u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1118) u32 rsvd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1119) u64 local_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1120) struct atto_vda_sge sge[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1121) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1122)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1123)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1124) struct __packed atto_vda_ae_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1125) u32 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1126) u8 function; /* VDA_FUNC_AE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1127) u8 reserved1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1128) u8 chain_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1129) u8 sg_list_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1130) u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1131)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1132) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1133) struct atto_vda_sge sge[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1134) struct atto_physical_region_description prde[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1135) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1136) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1137)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1138)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1139) struct __packed atto_vda_cli_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1140) u32 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1141) u8 function; /* VDA_FUNC_CLI */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1142) u8 reserved1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1143) u8 chain_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1144) u8 sg_list_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1145) u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1146) u32 cmd_rsp_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1147) struct atto_vda_sge sge[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1148) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1149)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1150)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1151) struct __packed atto_vda_ioctl_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1152) u32 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1153) u8 function; /* VDA_FUNC_IOCTL */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1154) u8 sub_func;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1155) u8 chain_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1156) u8 sg_list_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1157) u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1158)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1159) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1160) struct atto_vda_sge reserved_sge;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1161) struct atto_physical_region_description reserved_prde;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1162) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1163)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1164) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1165) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1166) u32 ctrl_code;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1167) u16 target_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1168) u8 lun;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1169) u8 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1170) } csmi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1171) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1172)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1173) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1174) struct atto_vda_sge sge[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1175) struct atto_physical_region_description prde[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1176) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1177) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1178)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1179)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1180) struct __packed atto_vda_cfg_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1181) u32 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1182) u8 function; /* VDA_FUNC_CFG */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1183) u8 sub_func;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1184) u8 rsvd1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1185) u8 sg_list_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1186) u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1187)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1188) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1189) u8 bytes[116];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1190) struct atto_vda_cfg_init init;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1191) struct atto_vda_sge sge;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1192) struct atto_physical_region_description prde;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1193) } data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1194) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1195)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1196)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1197) struct __packed atto_vda_mgmt_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1198) u32 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1199) u8 function; /* VDA_FUNC_MGT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1200) u8 mgt_func;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1201) u8 chain_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1202) u8 sg_list_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1203) u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1204) u8 scan_generation;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1205) u8 payld_sglst_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1206) u16 dev_index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1207) u32 payld_length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1208) u32 pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1209) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1210) struct atto_vda_sge sge[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1211) struct atto_physical_region_description prde[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1212) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1213) struct atto_vda_sge payld_sge[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1214) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1215)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1216)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1217) union atto_vda_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1218) struct atto_vda_scsi_req scsi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1219) struct atto_vda_flash_req flash;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1220) struct atto_vda_diag_req diag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1221) struct atto_vda_ae_req ae;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1222) struct atto_vda_cli_req cli;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1223) struct atto_vda_ioctl_req ioctl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1224) struct atto_vda_cfg_req cfg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1225) struct atto_vda_mgmt_req mgt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1226) u8 bytes[1024];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1227) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1228)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1229) /* Outbound response structures */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1230)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1231) struct __packed atto_vda_scsi_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1232) u8 scsi_stat;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1233) u8 sense_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1234) u8 rsvd[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1235) u32 residual_length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1236) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1237)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1238) struct __packed atto_vda_flash_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1239) u32 file_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1240) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1241)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1242) struct __packed atto_vda_ae_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1243) u32 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1244) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1245)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1246) struct __packed atto_vda_cli_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1247) u32 cmd_rsp_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1248) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1249)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1250) struct __packed atto_vda_ioctl_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1251) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1252) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1253) u32 csmi_status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1254) u16 target_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1255) u8 lun;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1256) u8 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1257) } csmi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1258) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1259) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1260)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1261) struct __packed atto_vda_cfg_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1262) u16 vda_version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1263) u16 fw_release;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1264) u32 fw_build;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1265) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1266)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1267) struct __packed atto_vda_mgmt_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1268) u32 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1269) u16 dev_index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1270) u8 scan_generation;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1271) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1272)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1273) union atto_vda_func_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1274) struct atto_vda_scsi_rsp scsi_rsp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1275) struct atto_vda_flash_rsp flash_rsp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1276) struct atto_vda_ae_rsp ae_rsp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1277) struct atto_vda_cli_rsp cli_rsp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1278) struct atto_vda_ioctl_rsp ioctl_rsp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1279) struct atto_vda_cfg_rsp cfg_rsp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1280) struct atto_vda_mgmt_rsp mgt_rsp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1281) u32 dwords[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1282) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1283)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1284) struct __packed atto_vda_ob_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1285) u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1286) u8 req_stat;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1287) u8 rsvd[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1288)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1289) union atto_vda_func_rsp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1290) func_rsp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1291) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1292)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1293) struct __packed atto_vda_ae_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1294) u8 event_data[256];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1295) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1296)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1297) struct __packed atto_vda_mgmt_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1298) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1299) u8 bytes[112];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1300) struct atto_vda_devinfo dev_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1301) struct atto_vda_grp_info grp_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1302) struct atto_vdapart_info part_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1303) struct atto_vda_dh_info dev_health_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1304) struct atto_vda_metrics_info metrics_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1305) struct atto_vda_schedule_info sched_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1306) struct atto_vda_n_vcache_info nvcache_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1307) struct atto_vda_buzzer_info buzzer_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1308) } data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1309) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1310)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1311) union atto_vda_rsp_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1312) struct atto_vda_ae_data ae_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1313) struct atto_vda_mgmt_data mgt_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1314) u8 sense_data[252];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1315) #define SENSE_DATA_SZ 252;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1316) u8 bytes[256];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1317) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1318)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1319) #endif