aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/smartpqi/smartpqi_ioctl.h
blob: 1c8c32ac64a3fe4744fab64d2d597b7e6b904c4e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/*-
 * Copyright (c) 2018 Microsemi Corporation.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

/* $FreeBSD$ */

#ifndef	_PQI_IOCTL_H_
#define	_PQI_IOCTL_H_

/* IOCTL passthrough macros and structures */

#define SENSEINFOBYTES	32              /* note that this value may vary
 										 between host implementations */

/* transfer direction */
#define PQIIOCTL_NONE			0x00
#define PQIIOCTL_WRITE			0x01
#define PQIIOCTL_READ			0x02
#define PQIIOCTL_BIDIRECTIONAL		(PQIIOCTL_READ | PQIIOCTL_WRITE)

/* Type defs used in the following structs */
#define BYTE  	uint8_t
#define WORD  	uint16_t
#define HWORD 	uint16_t
#define DWORD 	uint32_t

/* Command List Structure */
typedef union _SCSI3Addr_struct {
	  struct {
	   BYTE Dev;
	   BYTE Bus:6;
	   BYTE Mode:2; 	   /* b00 */
	 } PeripDev;
	  struct {
	   BYTE DevLSB;
	   BYTE DevMSB:6;
	   BYTE Mode:2; 	   /* b01 */
	 } LogDev;
	  struct {
	   BYTE Dev:5;
	   BYTE Bus:3;
	   BYTE Targ:6;
	   BYTE Mode:2; 	   /* b10 */
	 } LogUnit;

}OS_ATTRIBUTE_PACKED SCSI3Addr_struct;

typedef struct _PhysDevAddr_struct {
	 DWORD			   TargetId:24;
	 DWORD			   Bus:6;
	 DWORD			   Mode:2;
	 SCSI3Addr_struct  Target[2]; 	/* 2 level target device addr */
    
}OS_ATTRIBUTE_PACKED PhysDevAddr_struct;

typedef struct _LogDevAddr_struct {
	 DWORD			  VolId:30;
	 DWORD			  Mode:2;
	 BYTE			  reserved[4];
    
}OS_ATTRIBUTE_PACKED LogDevAddr_struct;

typedef union _LUNAddr_struct {
    BYTE               LunAddrBytes[8];
    SCSI3Addr_struct   SCSI3Lun[4];
    PhysDevAddr_struct PhysDev;
    LogDevAddr_struct  LogDev;

}OS_ATTRIBUTE_PACKED LUNAddr_struct;

typedef struct _RequestBlock_struct {
    BYTE  CDBLen;
    struct {
      BYTE Type:3;
      BYTE Attribute:3;
      BYTE Direction:2;
    } Type;
    HWORD  Timeout;
    BYTE   CDB[16];

}OS_ATTRIBUTE_PACKED RequestBlock_struct; 

typedef union _MoreErrInfo_struct{
   struct {
    BYTE  Reserved[3];
    BYTE  Type;
    DWORD ErrorInfo;
   } Common_Info;
   struct{
     BYTE  Reserved[2];
     BYTE  offense_size; /* size of offending entry */
     BYTE  offense_num;  /* byte # of offense 0-base */
     DWORD offense_value;
   } Invalid_Cmd;

}OS_ATTRIBUTE_PACKED MoreErrInfo_struct;

typedef struct _ErrorInfo_struct {
   BYTE               ScsiStatus;
   BYTE               SenseLen;
   HWORD              CommandStatus;
   DWORD              ResidualCnt;
   MoreErrInfo_struct MoreErrInfo;
   BYTE               SenseInfo[SENSEINFOBYTES];

}OS_ATTRIBUTE_PACKED ErrorInfo_struct;

typedef struct pqi_ioctl_passthruCmd_struct {
	LUNAddr_struct           LUN_info;
	RequestBlock_struct      Request;
	ErrorInfo_struct         error_info; 
   	WORD                     buf_size;  /* size in bytes of the buf */
	passthru_buf_type_t		buf;

}OS_ATTRIBUTE_PACKED IOCTL_Command_struct;

#endif  /* _PQI_IOCTL_H_ */