/* aacraid.h
* Copyright (C) 2014 Raghava Aditya <Raghava.Aditya@pmcs.com>
+ * Copyright (C) 2015 Nidhi Malhotra <Nidhi.Malhotra@pmcs.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
*/
// Check windows
-#if _WIN32 || _WIN64
-#if _WIN64
+#if defined(_WIN32) || defined(_WIN64)
+#ifdef _WIN64
#define ENVIRONMENT64
#else
#define ENVIRONMENT32
#define METHOD_BUFFERED 0
#define METHOD_NEITHER 3
+#if defined(_WIN32) || defined(_WIN64)
+#define FSAMPCTL_SCSI_BASE IOCTL_SCSI_BASE
+#define ARCIOCTL_SEND_RAW_SRB CTL_CODE(FSAMPCTL_SCSI_BASE, 2201, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define AACRAID_SAS_SIGNATURE "ARCSAS"
+#define SRB_FLAGS_DATA_IN 0x00000040
+#define SRB_FLAGS_DATA_OUT 0x00000080
+#define SRB_FLAGS_NO_DATA_TRANSFER 0x00000000
+#else
#define CTL_CODE(function, method) ((4<< 16) | ((function) << 2) | (method) )
#define FSACTL_SEND_RAW_SRB CTL_CODE(2067, METHOD_BUFFERED)
-
+#endif
#define SRB_FUNCTION_EXECUTE_SCSI 0X00
#define SRB_DataIn 0x0040
user_sgentry32 sg32[1];
} user_sgmap32;
+#if defined(_WIN32) || defined(_WIN64)
+typedef struct _SCSI_REQUEST_BLOCK {
+ USHORT Length; // offset 0
+ UCHAR Function; // offset 2
+ UCHAR SrbStatus; // offset 3
+ UCHAR ScsiStatus; // offset 4
+ UCHAR PathId; // offset 5
+ UCHAR TargetId; // offset 6
+ UCHAR Lun; // offset 7
+ UCHAR QueueTag; // offset 8
+ UCHAR QueueAction; // offset 9
+ UCHAR CdbLength; // offset a
+ UCHAR SenseInfoBufferLength; // offset b
+ ULONG SrbFlags; // offset c
+ ULONG DataTransferLength; // offset 10
+ ULONG TimeOutValue; // offset 14
+ PVOID DataBuffer; // offset 18
+ PVOID SenseInfoBuffer; // offset 1c
+ struct _SCSI_REQUEST_BLOCK *NextSrb; // offset 20
+ PVOID OriginalRequest; // offset 24
+ PVOID SrbExtension; // offset 28
+ union {
+ ULONG InternalStatus; // offset 2c
+ ULONG QueueSortKey; // offset 2c
+ };
+
+#if defined(_WIN64)
+ //
+ // Force PVOID alignment of Cdb
+ //
+ ULONG Reserved;
+#endif
+
+ UCHAR Cdb[16]; // offset 30
+} SCSI_REQUEST_BLOCK, *PSCSI_REQUEST_BLOCK;
+
+#define SCSI_REQUEST_BLOCK_SIZE sizeof(SCSI_REQUEST_BLOCK)
+
+#else
typedef struct {
uint32_t function; //SRB_FUNCTION_EXECUTE_SCSI 0x00
uint32_t channel; //bus
uint32_t sense_data_size;
uint8_t sense_data[30];
} user_aac_reply;
+#endif