summaryrefslogtreecommitdiffstats
path: root/sys/dev/aac/aacreg.h
diff options
context:
space:
mode:
authorscottl <scottl@FreeBSD.org>2003-03-26 17:50:11 +0000
committerscottl <scottl@FreeBSD.org>2003-03-26 17:50:11 +0000
commitd1aad9d09f03e87d7de8a4cd8c362fa7a0617007 (patch)
tree92e990283b189ad46204b84551373713cdfe2f3d /sys/dev/aac/aacreg.h
parent5fcb866f5f8ec0347da871e9bc413fbf92e9e51c (diff)
downloadFreeBSD-src-d1aad9d09f03e87d7de8a4cd8c362fa7a0617007.zip
FreeBSD-src-d1aad9d09f03e87d7de8a4cd8c362fa7a0617007.tar.gz
Begin support for 64-bit address support and workarounds for newer cards:
- Add data structuress for doing 64-bit scatter/gather - Move busdma tag creations around so that only the parent is created in aac_pci.c. - Retrieve the capabilities word from the firmware before setting up command structures and tags. This allows the driver to decide whether to do 64-bit commands, and if work-arounds are needed for systems with >2GB of RAM. - Only enable the SCSI passthrough if it's enabled in the capabilities word in the firmware. This should fix problems with the 2120S and 2200S cards in systems with more than 2GB of RAM. Full 64-bit support is forthcoming. MFC-After: 1 week
Diffstat (limited to 'sys/dev/aac/aacreg.h')
-rw-r--r--sys/dev/aac/aacreg.h41
1 files changed, 37 insertions, 4 deletions
diff --git a/sys/dev/aac/aacreg.h b/sys/dev/aac/aacreg.h
index 75bb21c..dd08437 100644
--- a/sys/dev/aac/aacreg.h
+++ b/sys/dev/aac/aacreg.h
@@ -341,6 +341,11 @@ struct aac_sg_entry {
u_int32_t SgByteCount;
} __packed;
+struct aac_sg_entry64 {
+ u_int64_t SgAddress;
+ u_int32_t SgByteCount;
+} __packed;
+
struct aac_sg_table {
u_int32_t SgCount;
struct aac_sg_entry SgEntry[0];
@@ -350,10 +355,8 @@ struct aac_sg_table {
* Host-side scatter/gather list for 64-bit commands.
*/
struct aac_sg_table64 {
- u_int8_t SgCount;
- u_int8_t SgSectorsPerPage;
- u_int16_t SgByteOffset;
- u_int64_t SgEntry[0];
+ u_int32_t SgCount;
+ struct aac_sg_entry64 SgEntry64[0];
} __packed;
/*
@@ -488,6 +491,13 @@ typedef enum
#define AAC_SUPPORTED_64BIT_DATA 0x08
#define AAC_SUPPORTED_HOST_TIME_FIB 0x10
#define AAC_SUPPORTED_RAID50 0x20
+#define AAC_SUPPORTED_4GB_WINDOW 0x40
+#define AAC_SUPPORTED_SCSI_UPGRADEABLE 0x80
+#define AAC_SUPPORTED_SOFT_ERR_REPORT 0x100
+#define AAC_SUPPORTED_NOT_RECONDITION 0x200
+#define AAC_SUPPORTED_SGMAP_HOST64 0x400
+#define AAC_SUPPORTED_ALARM 0x800
+#define AAC_SUPPORTED_NONDASD 0x1000
/*
* Structure used to respond to a RequestAdapterInfo fib.
@@ -526,6 +536,7 @@ struct aac_adapter_info {
#define AAC_MONKER_INITSTRUCT 0x05
#define AAC_MONKER_SYNCFIB 0x0c
#define AAC_MONKER_GETKERNVER 0x11
+#define AAC_MONKER_GETINFO 0x19
/*
* Adapter Status Register
@@ -961,6 +972,8 @@ typedef enum _VM_COMMANDS {
VM_CtBlockRead64,
VM_CtBlockWrite64,
VM_CtBlockVerify64,
+ VM_CtHostRead64,
+ VM_CtHostWrite64,
} AAC_VMCommand;
/*
@@ -1134,6 +1147,16 @@ struct aac_blockread {
struct aac_sg_table SgMap; /* variable size */
} __packed;
+struct aac_blockread64 {
+ u_int32_t Command;
+ u_int16_t ContainerId;
+ u_int16_t SectorCount;
+ u_int32_t BlockNumber;
+ u_int16_t Pad;
+ u_int16_t Flags;
+ struct aac_sg_table64 SgMap64;
+} __packed;
+
struct aac_blockread_response {
u_int32_t Status;
u_int32_t ByteCount;
@@ -1148,6 +1171,16 @@ struct aac_blockwrite {
struct aac_sg_table SgMap; /* variable size */
} __packed;
+struct aac_blockwrite64 {
+ u_int32_t Command; /* not FSACommand! */
+ u_int16_t ContainerId;
+ u_int16_t SectorCount;
+ u_int32_t BlockNumber;
+ u_int16_t Pad;
+ u_int16_t Flags;
+ struct aac_sg_table64 SgMap64; /* variable size */
+} __packed;
+
struct aac_blockwrite_response {
u_int32_t Status;
u_int32_t ByteCount;
OpenPOWER on IntegriCloud