11e66f787SSean Bruno /*- 2*7ea28254SJohn Hall * Copyright 2016-2023 Microchip Technology, Inc. and/or its subsidiaries. 31e66f787SSean Bruno * 41e66f787SSean Bruno * Redistribution and use in source and binary forms, with or without 51e66f787SSean Bruno * modification, are permitted provided that the following conditions 61e66f787SSean Bruno * are met: 71e66f787SSean Bruno * 1. Redistributions of source code must retain the above copyright 81e66f787SSean Bruno * notice, this list of conditions and the following disclaimer. 91e66f787SSean Bruno * 2. Redistributions in binary form must reproduce the above copyright 101e66f787SSean Bruno * notice, this list of conditions and the following disclaimer in the 111e66f787SSean Bruno * documentation and/or other materials provided with the distribution. 121e66f787SSean Bruno * 131e66f787SSean Bruno * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 141e66f787SSean Bruno * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 151e66f787SSean Bruno * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 161e66f787SSean Bruno * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 171e66f787SSean Bruno * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 181e66f787SSean Bruno * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 191e66f787SSean Bruno * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 201e66f787SSean Bruno * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 211e66f787SSean Bruno * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 221e66f787SSean Bruno * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 231e66f787SSean Bruno * SUCH DAMAGE. 241e66f787SSean Bruno */ 251e66f787SSean Bruno 261e66f787SSean Bruno 271e66f787SSean Bruno #ifndef _PQI_IOCTL_H_ 281e66f787SSean Bruno #define _PQI_IOCTL_H_ 291e66f787SSean Bruno 301e66f787SSean Bruno /* IOCTL passthrough macros and structures */ 311e66f787SSean Bruno 321e66f787SSean Bruno #define SENSEINFOBYTES 32 /* note that this value may vary 331e66f787SSean Bruno between host implementations */ 341e66f787SSean Bruno 351e66f787SSean Bruno /* transfer direction */ 361e66f787SSean Bruno #define PQIIOCTL_NONE 0x00 371e66f787SSean Bruno #define PQIIOCTL_WRITE 0x01 381e66f787SSean Bruno #define PQIIOCTL_READ 0x02 391e66f787SSean Bruno #define PQIIOCTL_BIDIRECTIONAL (PQIIOCTL_READ | PQIIOCTL_WRITE) 401e66f787SSean Bruno 419fac68fcSPAPANI SRIKANTH 421e66f787SSean Bruno /* Type defs used in the following structs */ 431e66f787SSean Bruno #define BYTE uint8_t 441e66f787SSean Bruno #define WORD uint16_t 451e66f787SSean Bruno #define HWORD uint16_t 461e66f787SSean Bruno #define DWORD uint32_t 471e66f787SSean Bruno 489fac68fcSPAPANI SRIKANTH 491e66f787SSean Bruno /* Command List Structure */ 501e66f787SSean Bruno typedef union _SCSI3Addr_struct { 511e66f787SSean Bruno struct { 521e66f787SSean Bruno BYTE Dev; 531e66f787SSean Bruno BYTE Bus:6; 541e66f787SSean Bruno BYTE Mode:2; /* b00 */ 551e66f787SSean Bruno } PeripDev; 561e66f787SSean Bruno struct { 571e66f787SSean Bruno BYTE DevLSB; 581e66f787SSean Bruno BYTE DevMSB:6; 591e66f787SSean Bruno BYTE Mode:2; /* b01 */ 601e66f787SSean Bruno } LogDev; 611e66f787SSean Bruno struct { 621e66f787SSean Bruno BYTE Dev:5; 631e66f787SSean Bruno BYTE Bus:3; 641e66f787SSean Bruno BYTE Targ:6; 651e66f787SSean Bruno BYTE Mode:2; /* b10 */ 661e66f787SSean Bruno } LogUnit; 671e66f787SSean Bruno 681e66f787SSean Bruno }OS_ATTRIBUTE_PACKED SCSI3Addr_struct; 691e66f787SSean Bruno 701e66f787SSean Bruno typedef struct _PhysDevAddr_struct { 711e66f787SSean Bruno DWORD TargetId:24; 721e66f787SSean Bruno DWORD Bus:6; 731e66f787SSean Bruno DWORD Mode:2; 741e66f787SSean Bruno SCSI3Addr_struct Target[2]; /* 2 level target device addr */ 751e66f787SSean Bruno 761e66f787SSean Bruno }OS_ATTRIBUTE_PACKED PhysDevAddr_struct; 771e66f787SSean Bruno 781e66f787SSean Bruno typedef struct _LogDevAddr_struct { 791e66f787SSean Bruno DWORD VolId:30; 801e66f787SSean Bruno DWORD Mode:2; 811e66f787SSean Bruno BYTE reserved[4]; 821e66f787SSean Bruno 831e66f787SSean Bruno }OS_ATTRIBUTE_PACKED LogDevAddr_struct; 841e66f787SSean Bruno 851e66f787SSean Bruno typedef union _LUNAddr_struct { 861e66f787SSean Bruno BYTE LunAddrBytes[8]; 871e66f787SSean Bruno SCSI3Addr_struct SCSI3Lun[4]; 881e66f787SSean Bruno PhysDevAddr_struct PhysDev; 891e66f787SSean Bruno LogDevAddr_struct LogDev; 901e66f787SSean Bruno 911e66f787SSean Bruno }OS_ATTRIBUTE_PACKED LUNAddr_struct; 921e66f787SSean Bruno 931e66f787SSean Bruno typedef struct _RequestBlock_struct { 941e66f787SSean Bruno BYTE CDBLen; 951e66f787SSean Bruno struct { 961e66f787SSean Bruno BYTE Type:3; 971e66f787SSean Bruno BYTE Attribute:3; 981e66f787SSean Bruno BYTE Direction:2; 991e66f787SSean Bruno } Type; 1001e66f787SSean Bruno HWORD Timeout; 1011e66f787SSean Bruno BYTE CDB[16]; 1021e66f787SSean Bruno 1031e66f787SSean Bruno }OS_ATTRIBUTE_PACKED RequestBlock_struct; 1041e66f787SSean Bruno 1051e66f787SSean Bruno typedef union _MoreErrInfo_struct{ 1061e66f787SSean Bruno struct { 1071e66f787SSean Bruno BYTE Reserved[3]; 1081e66f787SSean Bruno BYTE Type; 1091e66f787SSean Bruno DWORD ErrorInfo; 1101e66f787SSean Bruno } Common_Info; 1111e66f787SSean Bruno struct{ 1121e66f787SSean Bruno BYTE Reserved[2]; 1131e66f787SSean Bruno BYTE offense_size; /* size of offending entry */ 1141e66f787SSean Bruno BYTE offense_num; /* byte # of offense 0-base */ 1151e66f787SSean Bruno DWORD offense_value; 1161e66f787SSean Bruno } Invalid_Cmd; 1171e66f787SSean Bruno 1181e66f787SSean Bruno }OS_ATTRIBUTE_PACKED MoreErrInfo_struct; 1191e66f787SSean Bruno 1201e66f787SSean Bruno typedef struct _ErrorInfo_struct { 1211e66f787SSean Bruno BYTE ScsiStatus; 1221e66f787SSean Bruno BYTE SenseLen; 1231e66f787SSean Bruno HWORD CommandStatus; 1241e66f787SSean Bruno DWORD ResidualCnt; 1251e66f787SSean Bruno MoreErrInfo_struct MoreErrInfo; 1261e66f787SSean Bruno BYTE SenseInfo[SENSEINFOBYTES]; 1271e66f787SSean Bruno 1281e66f787SSean Bruno }OS_ATTRIBUTE_PACKED ErrorInfo_struct; 1291e66f787SSean Bruno 1309fac68fcSPAPANI SRIKANTH 1311e66f787SSean Bruno typedef struct pqi_ioctl_passthruCmd_struct { 1321e66f787SSean Bruno LUNAddr_struct LUN_info; 1331e66f787SSean Bruno RequestBlock_struct Request; 1341e66f787SSean Bruno ErrorInfo_struct error_info; 1351e66f787SSean Bruno WORD buf_size; /* size in bytes of the buf */ 1361e66f787SSean Bruno passthru_buf_type_t buf; 1371e66f787SSean Bruno 1381e66f787SSean Bruno }OS_ATTRIBUTE_PACKED IOCTL_Command_struct; 1391e66f787SSean Bruno 1409fac68fcSPAPANI SRIKANTH 1411e66f787SSean Bruno #endif /* _PQI_IOCTL_H_ */ 142