X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=aacraid.h;h=d62fbca0ca35dad41e56857b518144e1e95e3428;hb=6c5eb127c873bd2414f28b25ba1f9bae494cf516;hp=de7527a7259d30988220234e9b410c0f186a4440;hpb=d2e702cfb9891eb94c5b32ca86169a49ffe6f77e;p=mirror_smartmontools-debian.git diff --git a/aacraid.h b/aacraid.h index de7527a..d62fbca 100644 --- a/aacraid.h +++ b/aacraid.h @@ -1,5 +1,6 @@ /* aacraid.h * Copyright (C) 2014 Raghava Aditya + * Copyright (C) 2015 Nidhi Malhotra * * 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 @@ -12,8 +13,8 @@ */ // Check windows -#if _WIN32 || _WIN64 -#if _WIN64 +#if defined(_WIN32) || defined(_WIN64) +#ifdef _WIN64 #define ENVIRONMENT64 #else #define ENVIRONMENT32 @@ -32,10 +33,18 @@ #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 @@ -67,6 +76,45 @@ typedef struct { 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 @@ -103,3 +151,4 @@ typedef struct { uint32_t sense_data_size; uint8_t sense_data[30]; } user_aac_reply; +#endif