smartmontools
SVN Rev 5617
Utility to control and monitor storage systems with "S.M.A.R.T."
aacraid.h
Go to the documentation of this file.
1
/* aacraid.h
2
* Copyright (C) 2014 Raghava Aditya <Raghava.Aditya@pmcs.com>
3
* Copyright (C) 2015 Nidhi Malhotra <Nidhi.Malhotra@pmcs.com>
4
*
5
* SPDX-License-Identifier: GPL-2.0-or-later
6
*/
7
8
// Check windows
9
#if defined(_WIN32) || defined(_WIN64)
10
#ifdef _WIN64
11
#define ENVIRONMENT64
12
#else
13
#define ENVIRONMENT32
14
#endif
15
#endif
16
17
// Check GCC
18
#if __GNUC__
19
#if __x86_64__ || __ppc64__
20
#define ENVIRONMENT64
21
#else
22
#define ENVIRONMENT32
23
#endif
24
#endif
25
26
#define METHOD_BUFFERED 0
27
#define METHOD_NEITHER 3
28
29
#if defined(_WIN32) || defined(_WIN64)
30
#define FSAMPCTL_SCSI_BASE IOCTL_SCSI_BASE
31
#define ARCIOCTL_SEND_RAW_SRB CTL_CODE(FSAMPCTL_SCSI_BASE, 2201, METHOD_BUFFERED, FILE_ANY_ACCESS)
32
#define AACRAID_SAS_SIGNATURE "ARCSAS"
33
#define SRB_FLAGS_DATA_IN 0x00000040
34
#define SRB_FLAGS_DATA_OUT 0x00000080
35
#define SRB_FLAGS_NO_DATA_TRANSFER 0x00000000
36
#else
37
#define CTL_CODE(function, method) ((4<< 16) | ((function) << 2) | (method) )
38
39
#define FSACTL_SEND_RAW_SRB CTL_CODE(2067, METHOD_BUFFERED)
40
#endif
41
#define SRB_FUNCTION_EXECUTE_SCSI 0X00
42
43
#define SRB_DataIn 0x0040
44
#define SRB_DataOut 0x0080
45
#define SRB_NoDataXfer 0x0000
46
47
typedef
struct
{
48
uint32_t
lo32
;
49
uint32_t
hi32
;
50
}
address64
;
51
52
typedef
struct
{
53
address64
addr64
;
54
uint32_t
length
;
/* Length. */
55
}
user_sgentry64
;
56
57
typedef
struct
{
58
uint32_t
addr32
;
59
uint32_t
length
;
60
}
user_sgentry32
;
61
62
typedef
struct
{
63
uint32_t
count
;
64
user_sgentry64
sg64[1];
65
}
user_sgmap64
;
66
67
typedef
struct
{
68
uint32_t
count
;
69
user_sgentry32
sg32[1];
70
}
user_sgmap32
;
71
72
#if defined(_WIN32) || defined(_WIN64)
73
typedef
struct
_SCSI_REQUEST_BLOCK {
74
USHORT Length;
// offset 0
75
UCHAR Function;
// offset 2
76
UCHAR SrbStatus;
// offset 3
77
UCHAR ScsiStatus;
// offset 4
78
UCHAR PathId;
// offset 5
79
UCHAR TargetId;
// offset 6
80
UCHAR Lun;
// offset 7
81
UCHAR QueueTag;
// offset 8
82
UCHAR QueueAction;
// offset 9
83
UCHAR CdbLength;
// offset a
84
UCHAR SenseInfoBufferLength;
// offset b
85
ULONG SrbFlags;
// offset c
86
ULONG DataTransferLength;
// offset 10
87
ULONG TimeOutValue;
// offset 14
88
PVOID DataBuffer;
// offset 18
89
PVOID SenseInfoBuffer;
// offset 1c
90
struct
_SCSI_REQUEST_BLOCK *NextSrb;
// offset 20
91
PVOID OriginalRequest;
// offset 24
92
PVOID SrbExtension;
// offset 28
93
union
{
94
ULONG InternalStatus;
// offset 2c
95
ULONG QueueSortKey;
// offset 2c
96
};
97
98
#if defined(_WIN64)
99
//
100
// Force PVOID alignment of Cdb
101
//
102
ULONG Reserved;
103
#endif
104
105
UCHAR Cdb[16];
// offset 30
106
} SCSI_REQUEST_BLOCK, *PSCSI_REQUEST_BLOCK;
107
108
#define SCSI_REQUEST_BLOCK_SIZE sizeof(SCSI_REQUEST_BLOCK)
109
110
#else
111
typedef
struct
{
112
uint32_t
function
;
//SRB_FUNCTION_EXECUTE_SCSI 0x00
113
uint32_t
channel
;
//bus
114
uint32_t
id
;
//use the ID number this is wrong
115
uint32_t
lun
;
//Logical unit number
116
uint32_t
timeout
;
117
uint32_t
flags
;
//Interesting stuff I must say
118
uint32_t
count
;
// Data xfer size
119
uint32_t
retry_limit
;
// We shall see
120
uint32_t
cdb_size
;
// Length of CDB
121
uint8_t
cdb
[16];
// The actual cdb command
122
user_sgmap64
sg64
;
// pDatabuffer and address of Databuffer
123
}
user_aac_srb64
;
124
125
typedef
struct
{
126
uint32_t
function
;
//SRB_FUNCTION_EXECUTE_SCSI 0x00
127
uint32_t
channel
;
//bus
128
uint32_t
id
;
//use the ID number this is wrong
129
uint32_t
lun
;
//Logical unit number
130
uint32_t
timeout
;
131
uint32_t
flags
;
//Interesting stuff I must say
132
uint32_t
count
;
// Data xfer size
133
uint32_t
retry_limit
;
// We shall see
134
uint32_t
cdb_size
;
// Length of CDB
135
uint8_t
cdb
[16];
// The actual cdb command
136
user_sgmap32
sg32
;
// pDatabuffer and address of Databuffer
137
}
user_aac_srb32
;
138
139
typedef
struct
{
140
uint32_t
status
;
141
uint32_t
srb_status
;
142
uint32_t
scsi_status
;
143
uint32_t
data_xfer_length
;
144
uint32_t
sense_data_size
;
145
uint8_t sense_data[30];
146
}
user_aac_reply
;
147
#endif
cdb
u8 cdb[16]
Definition:
megaraid.h:21
address64
Definition:
aacraid.h:47
address64::hi32
uint32_t hi32
Definition:
aacraid.h:49
address64::lo32
uint32_t lo32
Definition:
aacraid.h:48
user_aac_reply
Definition:
aacraid.h:139
user_aac_reply::srb_status
uint32_t srb_status
Definition:
aacraid.h:141
user_aac_reply::sense_data_size
uint32_t sense_data_size
Definition:
aacraid.h:144
user_aac_reply::data_xfer_length
uint32_t data_xfer_length
Definition:
aacraid.h:143
user_aac_reply::scsi_status
uint32_t scsi_status
Definition:
aacraid.h:142
user_aac_reply::status
uint32_t status
Definition:
aacraid.h:140
user_aac_srb32
Definition:
aacraid.h:125
user_aac_srb32::flags
uint32_t flags
Definition:
aacraid.h:131
user_aac_srb32::timeout
uint32_t timeout
Definition:
aacraid.h:130
user_aac_srb32::count
uint32_t count
Definition:
aacraid.h:132
user_aac_srb32::retry_limit
uint32_t retry_limit
Definition:
aacraid.h:133
user_aac_srb32::cdb_size
uint32_t cdb_size
Definition:
aacraid.h:134
user_aac_srb32::sg32
user_sgmap32 sg32
Definition:
aacraid.h:136
user_aac_srb32::function
uint32_t function
Definition:
aacraid.h:126
user_aac_srb32::id
uint32_t id
Definition:
aacraid.h:128
user_aac_srb32::channel
uint32_t channel
Definition:
aacraid.h:127
user_aac_srb32::lun
uint32_t lun
Definition:
aacraid.h:129
user_aac_srb64
Definition:
aacraid.h:111
user_aac_srb64::id
uint32_t id
Definition:
aacraid.h:114
user_aac_srb64::function
uint32_t function
Definition:
aacraid.h:112
user_aac_srb64::cdb_size
uint32_t cdb_size
Definition:
aacraid.h:120
user_aac_srb64::timeout
uint32_t timeout
Definition:
aacraid.h:116
user_aac_srb64::sg64
user_sgmap64 sg64
Definition:
aacraid.h:122
user_aac_srb64::retry_limit
uint32_t retry_limit
Definition:
aacraid.h:119
user_aac_srb64::count
uint32_t count
Definition:
aacraid.h:118
user_aac_srb64::flags
uint32_t flags
Definition:
aacraid.h:117
user_aac_srb64::channel
uint32_t channel
Definition:
aacraid.h:113
user_aac_srb64::lun
uint32_t lun
Definition:
aacraid.h:115
user_sgentry32
Definition:
aacraid.h:57
user_sgentry32::length
uint32_t length
Definition:
aacraid.h:59
user_sgentry32::addr32
uint32_t addr32
Definition:
aacraid.h:58
user_sgentry64
Definition:
aacraid.h:52
user_sgentry64::length
uint32_t length
Definition:
aacraid.h:54
user_sgentry64::addr64
address64 addr64
Definition:
aacraid.h:53
user_sgmap32
Definition:
aacraid.h:67
user_sgmap32::count
uint32_t count
Definition:
aacraid.h:68
user_sgmap64
Definition:
aacraid.h:62
user_sgmap64::count
uint32_t count
Definition:
aacraid.h:63
Generated on Sun Sep 29 2024 22:05:01 for smartmontools by
1.9.6