1*c4d1da1fSniklas /* $OpenBSD: aacreg.h,v 1.1 2000/11/10 09:39:36 niklas Exp $ */ 2*c4d1da1fSniklas 3*c4d1da1fSniklas /*- 4*c4d1da1fSniklas * Copyright (c) 2000 Michael Smith 5*c4d1da1fSniklas * Copyright (c) 2000 Scott Long 6*c4d1da1fSniklas * Copyright (c) 2000 BSDi 7*c4d1da1fSniklas * Copyright (c) 2000 Niklas Hallqvist 8*c4d1da1fSniklas * All rights reserved. 9*c4d1da1fSniklas * 10*c4d1da1fSniklas * Redistribution and use in source and binary forms, with or without 11*c4d1da1fSniklas * modification, are permitted provided that the following conditions 12*c4d1da1fSniklas * are met: 13*c4d1da1fSniklas * 1. Redistributions of source code must retain the above copyright 14*c4d1da1fSniklas * notice, this list of conditions and the following disclaimer. 15*c4d1da1fSniklas * 2. Redistributions in binary form must reproduce the above copyright 16*c4d1da1fSniklas * notice, this list of conditions and the following disclaimer in the 17*c4d1da1fSniklas * documentation and/or other materials provided with the distribution. 18*c4d1da1fSniklas * 19*c4d1da1fSniklas * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 20*c4d1da1fSniklas * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21*c4d1da1fSniklas * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22*c4d1da1fSniklas * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 23*c4d1da1fSniklas * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24*c4d1da1fSniklas * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25*c4d1da1fSniklas * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26*c4d1da1fSniklas * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27*c4d1da1fSniklas * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28*c4d1da1fSniklas * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29*c4d1da1fSniklas * SUCH DAMAGE. 30*c4d1da1fSniklas * 31*c4d1da1fSniklas * $FreeBSD: /c/ncvs/src/sys/dev/aac/aacreg.h,v 1.1 2000/09/13 03:20:34 msmith Exp $ 32*c4d1da1fSniklas */ 33*c4d1da1fSniklas 34*c4d1da1fSniklas /* 35*c4d1da1fSniklas * Data structures defining the interface between the driver and the Adaptec 36*c4d1da1fSniklas * 'FSA' adapters. Note that many field names and comments here are taken 37*c4d1da1fSniklas * verbatim from the Adaptec driver source in order to make comparing the 38*c4d1da1fSniklas * two slightly easier. 39*c4d1da1fSniklas */ 40*c4d1da1fSniklas 41*c4d1da1fSniklas /* 42*c4d1da1fSniklas * Misc. magic numbers. 43*c4d1da1fSniklas */ 44*c4d1da1fSniklas #define AAC_MAX_CONTAINERS 64 45*c4d1da1fSniklas #define AAC_BLOCK_SIZE 512 46*c4d1da1fSniklas 47*c4d1da1fSniklas /* 48*c4d1da1fSniklas * Communications interface. 49*c4d1da1fSniklas * 50*c4d1da1fSniklas * Where datastructure layouts are closely parallel to the Adaptec sample code, 51*c4d1da1fSniklas * retain their naming conventions (for now) to aid in cross-referencing. 52*c4d1da1fSniklas */ 53*c4d1da1fSniklas 54*c4d1da1fSniklas /* 55*c4d1da1fSniklas * We establish 4 command queues and matching response queues. Queues must 56*c4d1da1fSniklas * be 16-byte aligned, and are sized as follows: 57*c4d1da1fSniklas */ 58*c4d1da1fSniklas #define AAC_HOST_NORM_CMD_ENTRIES 8 /* cmd adapter->host, normal pri */ 59*c4d1da1fSniklas #define AAC_HOST_HIGH_CMD_ENTRIES 4 /* cmd adapter->host, high pri */ 60*c4d1da1fSniklas #define AAC_ADAP_NORM_CMD_ENTRIES 512 /* cmd host->adapter, normal pri */ 61*c4d1da1fSniklas #define AAC_ADAP_HIGH_CMD_ENTRIES 4 /* cmd host->adapter, high pri */ 62*c4d1da1fSniklas #define AAC_HOST_NORM_RESP_ENTRIES 512 /* resp, adapter->host, normal pri */ 63*c4d1da1fSniklas #define AAC_HOST_HIGH_RESP_ENTRIES 4 /* resp, adapter->host, high pri */ 64*c4d1da1fSniklas #define AAC_ADAP_NORM_RESP_ENTRIES 8 /* resp, host->adapter, normal pri */ 65*c4d1da1fSniklas #define AAC_ADAP_HIGH_RESP_ENTRIES 4 /* resp, host->adapter, high pri */ 66*c4d1da1fSniklas 67*c4d1da1fSniklas #define AAC_TOTALQ_LENGTH \ 68*c4d1da1fSniklas (AAC_HOST_HIGH_CMD_ENTRIES + AAC_HOST_NORM_CMD_ENTRIES + \ 69*c4d1da1fSniklas AAC_ADAP_HIGH_CMD_ENTRIES + AAC_ADAP_NORM_CMD_ENTRIES + \ 70*c4d1da1fSniklas AAC_HOST_HIGH_RESP_ENTRIES + AAC_HOST_NORM_RESP_ENTRIES + \ 71*c4d1da1fSniklas AAC_ADAP_HIGH_RESP_ENTRIES + AAC_ADAP_NORM_RESP_ENTRIES) 72*c4d1da1fSniklas 73*c4d1da1fSniklas #define AAC_QUEUE_COUNT 8 74*c4d1da1fSniklas #define AAC_QUEUE_ALIGN 16 75*c4d1da1fSniklas 76*c4d1da1fSniklas struct aac_queue_entry { 77*c4d1da1fSniklas u_int32_t aq_fib_size; /* FIB size in bytes */ 78*c4d1da1fSniklas u_int32_t aq_fib_addr; /* receiver-space address of the FIB */ 79*c4d1da1fSniklas } __attribute__ ((packed)); 80*c4d1da1fSniklas 81*c4d1da1fSniklas #define AAC_PRODUCER_INDEX 0 82*c4d1da1fSniklas #define AAC_CONSUMER_INDEX 1 83*c4d1da1fSniklas 84*c4d1da1fSniklas /* 85*c4d1da1fSniklas * Table of queue indices and queues used to communicate with the 86*c4d1da1fSniklas * controller. This structure must be aligned to AAC_QUEUE_ALIGN 87*c4d1da1fSniklas */ 88*c4d1da1fSniklas struct aac_queue_table { 89*c4d1da1fSniklas /* queue consumer/producer indexes (layout mandated by adapter) */ 90*c4d1da1fSniklas u_int32_t qt_qindex[AAC_QUEUE_COUNT][2]; 91*c4d1da1fSniklas 92*c4d1da1fSniklas /* queue entry structures (layout mandated by adapter) */ 93*c4d1da1fSniklas struct aac_queue_entry qt_HostNormCmdQueue[AAC_HOST_NORM_CMD_ENTRIES]; 94*c4d1da1fSniklas struct aac_queue_entry qt_HostHighCmdQueue[AAC_HOST_HIGH_CMD_ENTRIES]; 95*c4d1da1fSniklas struct aac_queue_entry qt_AdapNormCmdQueue[AAC_ADAP_NORM_CMD_ENTRIES]; 96*c4d1da1fSniklas struct aac_queue_entry qt_AdapHighCmdQueue[AAC_ADAP_HIGH_CMD_ENTRIES]; 97*c4d1da1fSniklas struct aac_queue_entry 98*c4d1da1fSniklas qt_HostNormRespQueue[AAC_HOST_NORM_RESP_ENTRIES]; 99*c4d1da1fSniklas struct aac_queue_entry 100*c4d1da1fSniklas qt_HostHighRespQueue[AAC_HOST_HIGH_RESP_ENTRIES]; 101*c4d1da1fSniklas struct aac_queue_entry 102*c4d1da1fSniklas qt_AdapNormRespQueue[AAC_ADAP_NORM_RESP_ENTRIES]; 103*c4d1da1fSniklas struct aac_queue_entry 104*c4d1da1fSniklas qt_AdapHighRespQueue[AAC_ADAP_HIGH_RESP_ENTRIES]; 105*c4d1da1fSniklas } __attribute__ ((packed)); 106*c4d1da1fSniklas 107*c4d1da1fSniklas /* 108*c4d1da1fSniklas * Adapter Init Structure: this is passed to the adapter with the 109*c4d1da1fSniklas * AAC_MONKER_INITSTRUCT command to point it at our control structures. 110*c4d1da1fSniklas */ 111*c4d1da1fSniklas struct aac_adapter_init { 112*c4d1da1fSniklas u_int32_t InitStructRevision; 113*c4d1da1fSniklas #define AAC_INIT_STRUCT_REVISION 3 114*c4d1da1fSniklas u_int32_t MiniPortRevision; 115*c4d1da1fSniklas u_int32_t FilesystemRevision; 116*c4d1da1fSniklas u_int32_t CommHeaderAddress; 117*c4d1da1fSniklas u_int32_t FastIoCommAreaAddress; 118*c4d1da1fSniklas u_int32_t AdapterFibsPhysicalAddress; 119*c4d1da1fSniklas void *AdapterFibsVirtualAddress; 120*c4d1da1fSniklas u_int32_t AdapterFibsSize; 121*c4d1da1fSniklas u_int32_t AdapterFibAlign; 122*c4d1da1fSniklas u_int32_t PrintfBufferAddress; 123*c4d1da1fSniklas u_int32_t PrintfBufferSize; 124*c4d1da1fSniklas u_int32_t HostPhysMemPages; 125*c4d1da1fSniklas u_int32_t HostElapsedSeconds; 126*c4d1da1fSniklas } __attribute__((packed)); 127*c4d1da1fSniklas 128*c4d1da1fSniklas /* 129*c4d1da1fSniklas * Shared data types 130*c4d1da1fSniklas */ 131*c4d1da1fSniklas 132*c4d1da1fSniklas /* 133*c4d1da1fSniklas * Container types 134*c4d1da1fSniklas */ 135*c4d1da1fSniklas typedef enum { 136*c4d1da1fSniklas CT_NONE = 0, 137*c4d1da1fSniklas CT_VOLUME, 138*c4d1da1fSniklas CT_MIRROR, 139*c4d1da1fSniklas CT_STRIPE, 140*c4d1da1fSniklas CT_RAID5, 141*c4d1da1fSniklas CT_SSRW, 142*c4d1da1fSniklas CT_SSRO, 143*c4d1da1fSniklas CT_MORPH, 144*c4d1da1fSniklas CT_PASSTHRU, 145*c4d1da1fSniklas CT_RAID4, 146*c4d1da1fSniklas CT_RAID10, /* stripe of mirror */ 147*c4d1da1fSniklas CT_RAID00, /* stripe of stripe */ 148*c4d1da1fSniklas CT_VOLUME_OF_MIRRORS, /* volume of mirror */ 149*c4d1da1fSniklas CT_PSEUDO_RAID3, /* really raid4 */ 150*c4d1da1fSniklas } AAC_FSAVolType; 151*c4d1da1fSniklas 152*c4d1da1fSniklas /* 153*c4d1da1fSniklas * Host-addressable object types 154*c4d1da1fSniklas */ 155*c4d1da1fSniklas typedef enum { 156*c4d1da1fSniklas FT_REG = 1, /* regular file */ 157*c4d1da1fSniklas FT_DIR, /* directory */ 158*c4d1da1fSniklas FT_BLK, /* "block" device - reserved */ 159*c4d1da1fSniklas FT_CHR, /* "character special" device - reserved */ 160*c4d1da1fSniklas FT_LNK, /* symbolic link */ 161*c4d1da1fSniklas FT_SOCK, /* socket */ 162*c4d1da1fSniklas FT_FIFO, /* fifo */ 163*c4d1da1fSniklas FT_FILESYS, /* ADAPTEC's "FSA"(tm) filesystem */ 164*c4d1da1fSniklas FT_DRIVE, /* phys disk - addressable in scsi by bus/target/lun */ 165*c4d1da1fSniklas FT_SLICE, /* virtual disk - raw volume - slice */ 166*c4d1da1fSniklas FT_PARTITION, /* FSA part, inside slice, container building block */ 167*c4d1da1fSniklas FT_VOLUME, /* Container - Volume Set */ 168*c4d1da1fSniklas FT_STRIPE, /* Container - Stripe Set */ 169*c4d1da1fSniklas FT_MIRROR, /* Container - Mirror Set */ 170*c4d1da1fSniklas FT_RAID5, /* Container - Raid 5 Set */ 171*c4d1da1fSniklas FT_DATABASE /* Storage object with "foreign" content manager */ 172*c4d1da1fSniklas } AAC_FType; 173*c4d1da1fSniklas 174*c4d1da1fSniklas /* 175*c4d1da1fSniklas * Host-side scatter/gather list for 32-bit commands. 176*c4d1da1fSniklas */ 177*c4d1da1fSniklas struct aac_sg_entry { 178*c4d1da1fSniklas u_int32_t SgAddress; 179*c4d1da1fSniklas u_int32_t SgByteCount; 180*c4d1da1fSniklas } __attribute__ ((packed)); 181*c4d1da1fSniklas 182*c4d1da1fSniklas struct aac_sg_table { 183*c4d1da1fSniklas u_int32_t SgCount; 184*c4d1da1fSniklas struct aac_sg_entry SgEntry[0]; 185*c4d1da1fSniklas } __attribute__ ((packed)); 186*c4d1da1fSniklas 187*c4d1da1fSniklas /* 188*c4d1da1fSniklas * Host-side scatter/gather list for 64-bit commands. 189*c4d1da1fSniklas */ 190*c4d1da1fSniklas struct aac_sg_table64 { 191*c4d1da1fSniklas u_int8_t SgCount; 192*c4d1da1fSniklas u_int8_t SgSectorsPerPage; 193*c4d1da1fSniklas u_int16_t SgByteOffset; 194*c4d1da1fSniklas u_int64_t SgEntry[0]; 195*c4d1da1fSniklas } __attribute__ ((packed)); 196*c4d1da1fSniklas 197*c4d1da1fSniklas /* 198*c4d1da1fSniklas * Container creation data 199*c4d1da1fSniklas */ 200*c4d1da1fSniklas struct aac_container_creation { 201*c4d1da1fSniklas u_int8_t ViaBuildNumber; 202*c4d1da1fSniklas u_int8_t MicroSecond; 203*c4d1da1fSniklas u_int8_t Via; /* 1 = FSU, 2 = API, etc. */ 204*c4d1da1fSniklas u_int8_t YearsSince1900; 205*c4d1da1fSniklas u_int32_t Month:4; /* 1-12 */ 206*c4d1da1fSniklas u_int32_t Day:6; /* 1-32 */ 207*c4d1da1fSniklas u_int32_t Hour:6; /* 0-23 */ 208*c4d1da1fSniklas u_int32_t Minute:6; /* 0-59 */ 209*c4d1da1fSniklas u_int32_t Second:6; /* 0-59 */ 210*c4d1da1fSniklas u_int64_t ViaAdapterSerialNumber; 211*c4d1da1fSniklas } __attribute__ ((packed)); 212*c4d1da1fSniklas 213*c4d1da1fSniklas struct FsaRevision { 214*c4d1da1fSniklas union { 215*c4d1da1fSniklas struct { 216*c4d1da1fSniklas u_int8_t dash; 217*c4d1da1fSniklas u_int8_t type; 218*c4d1da1fSniklas u_int8_t minor; 219*c4d1da1fSniklas u_int8_t major; 220*c4d1da1fSniklas } comp; 221*c4d1da1fSniklas u_int32_t ul; 222*c4d1da1fSniklas } external; 223*c4d1da1fSniklas u_int32_t buildNumber; 224*c4d1da1fSniklas } __attribute__((packed)); 225*c4d1da1fSniklas 226*c4d1da1fSniklas /* 227*c4d1da1fSniklas * Adapter Information 228*c4d1da1fSniklas */ 229*c4d1da1fSniklas 230*c4d1da1fSniklas typedef enum { 231*c4d1da1fSniklas CPU_NTSIM = 1, 232*c4d1da1fSniklas CPU_I960, 233*c4d1da1fSniklas CPU_ARM, 234*c4d1da1fSniklas CPU_SPARC, 235*c4d1da1fSniklas CPU_POWERPC, 236*c4d1da1fSniklas CPU_ALPHA, 237*c4d1da1fSniklas CPU_P7, 238*c4d1da1fSniklas CPU_I960_RX, 239*c4d1da1fSniklas CPU__last 240*c4d1da1fSniklas } AAC_CpuType; 241*c4d1da1fSniklas 242*c4d1da1fSniklas typedef enum { 243*c4d1da1fSniklas CPUI960_JX = 1, 244*c4d1da1fSniklas CPUI960_CX, 245*c4d1da1fSniklas CPUI960_HX, 246*c4d1da1fSniklas CPUI960_RX, 247*c4d1da1fSniklas CPUARM_SA110, 248*c4d1da1fSniklas CPUARM_xxx, 249*c4d1da1fSniklas CPUPPC_603e, 250*c4d1da1fSniklas CPUPPC_xxx, 251*c4d1da1fSniklas CPUSUBTYPE__last 252*c4d1da1fSniklas } AAC_CpuSubType; 253*c4d1da1fSniklas 254*c4d1da1fSniklas typedef enum { 255*c4d1da1fSniklas PLAT_NTSIM = 1, 256*c4d1da1fSniklas PLAT_V3ADU, 257*c4d1da1fSniklas PLAT_CYCLONE, 258*c4d1da1fSniklas PLAT_CYCLONE_HD, 259*c4d1da1fSniklas PLAT_BATBOARD, 260*c4d1da1fSniklas PLAT_BATBOARD_HD, 261*c4d1da1fSniklas PLAT_YOLO, 262*c4d1da1fSniklas PLAT_COBRA, 263*c4d1da1fSniklas PLAT_ANAHEIM, 264*c4d1da1fSniklas PLAT_JALAPENO, 265*c4d1da1fSniklas PLAT_QUEENS, 266*c4d1da1fSniklas PLAT_JALAPENO_DELL, 267*c4d1da1fSniklas PLAT_POBLANO, 268*c4d1da1fSniklas PLAT_POBLANO_OPAL, 269*c4d1da1fSniklas PLAT_POBLANO_SL0, 270*c4d1da1fSniklas PLAT_POBLANO_SL1, 271*c4d1da1fSniklas PLAT_POBLANO_SL2, 272*c4d1da1fSniklas PLAT_POBLANO_XXX, 273*c4d1da1fSniklas PLAT_JALAPENO_P2, 274*c4d1da1fSniklas PLAT_HABANERO, 275*c4d1da1fSniklas PLAT__last 276*c4d1da1fSniklas } AAC_Platform; 277*c4d1da1fSniklas 278*c4d1da1fSniklas typedef enum { 279*c4d1da1fSniklas OEM_FLAVOR_ADAPTEC = 1, 280*c4d1da1fSniklas OEM_FLAVOR_DELL, 281*c4d1da1fSniklas OEM_FLAVOR_HP, 282*c4d1da1fSniklas OEM_FLAVOR_IBM, 283*c4d1da1fSniklas OEM_FLAVOR_CPQ, 284*c4d1da1fSniklas OEM_FLAVOR_BRAND_X, 285*c4d1da1fSniklas OEM_FLAVOR_BRAND_Y, 286*c4d1da1fSniklas OEM_FLAVOR_BRAND_Z, 287*c4d1da1fSniklas OEM_FLAVOR__last 288*c4d1da1fSniklas } AAC_OemFlavor; 289*c4d1da1fSniklas 290*c4d1da1fSniklas /* 291*c4d1da1fSniklas * XXX the aac-2622 with no battery present reports PLATFORM_BAT_OPT_PRESENT 292*c4d1da1fSniklas */ 293*c4d1da1fSniklas typedef enum { 294*c4d1da1fSniklas PLATFORM_BAT_REQ_PRESENT = 1, /* BATTERY REQUIRED AND PRESENT */ 295*c4d1da1fSniklas PLATFORM_BAT_REQ_NOTPRESENT, /* BATTERY REQUIRED AND NOT PRESENT */ 296*c4d1da1fSniklas PLATFORM_BAT_OPT_PRESENT, /* BATTERY OPTIONAL AND PRESENT */ 297*c4d1da1fSniklas PLATFORM_BAT_OPT_NOTPRESENT, /* BATTERY OPTIONAL AND NOT PRESENT */ 298*c4d1da1fSniklas PLATFORM_BAT_NOT_SUPPORTED /* BATTERY NOT SUPPORTED */ 299*c4d1da1fSniklas } AAC_BatteryPlatform; 300*c4d1da1fSniklas 301*c4d1da1fSniklas /* 302*c4d1da1fSniklas * Structure used to respond to a RequestAdapterInfo fib. 303*c4d1da1fSniklas */ 304*c4d1da1fSniklas struct aac_adapter_info { 305*c4d1da1fSniklas AAC_Platform PlatformBase; /* adapter type */ 306*c4d1da1fSniklas AAC_CpuType CpuArchitecture; /* adapter CPU type */ 307*c4d1da1fSniklas AAC_CpuSubType CpuVariant; /* adapter CPU subtype */ 308*c4d1da1fSniklas u_int32_t ClockSpeed; /* adapter CPU clockspeed */ 309*c4d1da1fSniklas u_int32_t ExecutionMem; /* adapter Execution Memory size */ 310*c4d1da1fSniklas u_int32_t BufferMem; /* adapter Data Memory */ 311*c4d1da1fSniklas u_int32_t TotalMem; /* adapter Total Memory */ 312*c4d1da1fSniklas struct FsaRevision KernelRevision; /* adapter Kernel SW Revision */ 313*c4d1da1fSniklas struct FsaRevision MonitorRevision; /* adapter Monitor/Diag SW Rev */ 314*c4d1da1fSniklas struct FsaRevision HardwareRevision; /* TDB */ 315*c4d1da1fSniklas struct FsaRevision BIOSRevision; /* adapter BIOS Revision */ 316*c4d1da1fSniklas u_int32_t ClusteringEnabled; 317*c4d1da1fSniklas u_int32_t ClusterChannelMask; 318*c4d1da1fSniklas u_int64_t SerialNumber; 319*c4d1da1fSniklas AAC_BatteryPlatform batteryPlatform; 320*c4d1da1fSniklas u_int32_t SupportedOptions; /* supported features of this ctrlr */ 321*c4d1da1fSniklas AAC_OemFlavor OemVariant; 322*c4d1da1fSniklas } __attribute__((packed)); 323*c4d1da1fSniklas 324*c4d1da1fSniklas /* 325*c4d1da1fSniklas * Monitor/Kernel interface. 326*c4d1da1fSniklas */ 327*c4d1da1fSniklas 328*c4d1da1fSniklas /* 329*c4d1da1fSniklas * Synchronous commands to the monitor/kernel. 330*c4d1da1fSniklas */ 331*c4d1da1fSniklas #define AAC_MONKER_INITSTRUCT 0x05 332*c4d1da1fSniklas #define AAC_MONKER_SYNCFIB 0x0c 333*c4d1da1fSniklas 334*c4d1da1fSniklas /* 335*c4d1da1fSniklas * Command status values 336*c4d1da1fSniklas */ 337*c4d1da1fSniklas typedef enum { 338*c4d1da1fSniklas ST_OK = 0, 339*c4d1da1fSniklas ST_PERM = 1, 340*c4d1da1fSniklas ST_NOENT = 2, 341*c4d1da1fSniklas ST_IO = 5, 342*c4d1da1fSniklas ST_NXIO = 6, 343*c4d1da1fSniklas ST_E2BIG = 7, 344*c4d1da1fSniklas ST_ACCES = 13, 345*c4d1da1fSniklas ST_EXIST = 17, 346*c4d1da1fSniklas ST_XDEV = 18, 347*c4d1da1fSniklas ST_NODEV = 19, 348*c4d1da1fSniklas ST_NOTDIR = 20, 349*c4d1da1fSniklas ST_ISDIR = 21, 350*c4d1da1fSniklas ST_INVAL = 22, 351*c4d1da1fSniklas ST_FBIG = 27, 352*c4d1da1fSniklas ST_NOSPC = 28, 353*c4d1da1fSniklas ST_ROFS = 30, 354*c4d1da1fSniklas ST_MLINK = 31, 355*c4d1da1fSniklas ST_WOULDBLOCK = 35, 356*c4d1da1fSniklas ST_NAMETOOLONG = 63, 357*c4d1da1fSniklas ST_NOTEMPTY = 66, 358*c4d1da1fSniklas ST_DQUOT = 69, 359*c4d1da1fSniklas ST_STALE = 70, 360*c4d1da1fSniklas ST_REMOTE = 71, 361*c4d1da1fSniklas ST_BADHANDLE = 10001, 362*c4d1da1fSniklas ST_NOT_SYNC = 10002, 363*c4d1da1fSniklas ST_BAD_COOKIE = 10003, 364*c4d1da1fSniklas ST_NOTSUPP = 10004, 365*c4d1da1fSniklas ST_TOOSMALL = 10005, 366*c4d1da1fSniklas ST_SERVERFAULT = 10006, 367*c4d1da1fSniklas ST_BADTYPE = 10007, 368*c4d1da1fSniklas ST_JUKEBOX = 10008, 369*c4d1da1fSniklas ST_NOTMOUNTED = 10009, 370*c4d1da1fSniklas ST_MAINTMODE = 10010, 371*c4d1da1fSniklas ST_STALEACL = 10011 372*c4d1da1fSniklas } AAC_FSAStatus; 373*c4d1da1fSniklas 374*c4d1da1fSniklas /* 375*c4d1da1fSniklas * Volume manager commands 376*c4d1da1fSniklas */ 377*c4d1da1fSniklas typedef enum _VM_COMMANDS { 378*c4d1da1fSniklas VM_Null = 0, 379*c4d1da1fSniklas VM_NameServe, 380*c4d1da1fSniklas VM_ContainerConfig, 381*c4d1da1fSniklas VM_Ioctl, 382*c4d1da1fSniklas VM_FilesystemIoctl, 383*c4d1da1fSniklas VM_CloseAll, 384*c4d1da1fSniklas VM_CtBlockRead, 385*c4d1da1fSniklas VM_CtBlockWrite, 386*c4d1da1fSniklas VM_SliceBlockRead, /* raw access to configured "storage objects" */ 387*c4d1da1fSniklas VM_SliceBlockWrite, 388*c4d1da1fSniklas VM_DriveBlockRead, /* raw access to physical devices */ 389*c4d1da1fSniklas VM_DriveBlockWrite, 390*c4d1da1fSniklas VM_EnclosureMgt, /* enclosure management */ 391*c4d1da1fSniklas VM_Unused, /* used to be diskset management */ 392*c4d1da1fSniklas VM_CtBlockVerify, 393*c4d1da1fSniklas VM_CtPerf, /* performance test */ 394*c4d1da1fSniklas VM_CtBlockRead64, 395*c4d1da1fSniklas VM_CtBlockWrite64, 396*c4d1da1fSniklas VM_CtBlockVerify64, 397*c4d1da1fSniklas } AAC_VMCommand; 398*c4d1da1fSniklas 399*c4d1da1fSniklas /* 400*c4d1da1fSniklas * "Mountable object" 401*c4d1da1fSniklas */ 402*c4d1da1fSniklas struct aac_mntobj { 403*c4d1da1fSniklas u_int32_t ObjectId; 404*c4d1da1fSniklas char FileSystemName[16]; 405*c4d1da1fSniklas struct aac_container_creation CreateInfo; 406*c4d1da1fSniklas u_int32_t Capacity; 407*c4d1da1fSniklas AAC_FSAVolType VolType; 408*c4d1da1fSniklas AAC_FType ObjType; 409*c4d1da1fSniklas u_int32_t ContentState; 410*c4d1da1fSniklas #define AAC_FSCS_READONLY 0x0002 /* XXX need more information than this */ 411*c4d1da1fSniklas union { 412*c4d1da1fSniklas u_int32_t pad[8]; 413*c4d1da1fSniklas } ObjExtension; 414*c4d1da1fSniklas u_int32_t AlterEgoId; 415*c4d1da1fSniklas } __attribute__ ((packed)); 416*c4d1da1fSniklas 417*c4d1da1fSniklas struct aac_mntinfo { 418*c4d1da1fSniklas AAC_VMCommand Command; 419*c4d1da1fSniklas AAC_FType MntType; 420*c4d1da1fSniklas u_int32_t MntCount; 421*c4d1da1fSniklas } __attribute__ ((packed)); 422*c4d1da1fSniklas 423*c4d1da1fSniklas struct aac_mntinforesponse { 424*c4d1da1fSniklas AAC_FSAStatus Status; 425*c4d1da1fSniklas AAC_FType MntType; 426*c4d1da1fSniklas u_int32_t MntRespCount; 427*c4d1da1fSniklas struct aac_mntobj MntTable[1]; 428*c4d1da1fSniklas } __attribute__ ((packed)); 429*c4d1da1fSniklas 430*c4d1da1fSniklas /* 431*c4d1da1fSniklas * Write 'stability' options. 432*c4d1da1fSniklas */ 433*c4d1da1fSniklas typedef enum { 434*c4d1da1fSniklas CSTABLE = 1, 435*c4d1da1fSniklas CUNSTABLE 436*c4d1da1fSniklas } AAC_CacheLevel; 437*c4d1da1fSniklas 438*c4d1da1fSniklas /* 439*c4d1da1fSniklas * Commit level response for a write request. 440*c4d1da1fSniklas */ 441*c4d1da1fSniklas typedef enum { 442*c4d1da1fSniklas CMFILE_SYNC_NVRAM = 1, 443*c4d1da1fSniklas CMDATA_SYNC_NVRAM, 444*c4d1da1fSniklas CMFILE_SYNC, 445*c4d1da1fSniklas CMDATA_SYNC, 446*c4d1da1fSniklas CMUNSTABLE 447*c4d1da1fSniklas } AAC_CommitLevel; 448*c4d1da1fSniklas 449*c4d1da1fSniklas /* 450*c4d1da1fSniklas * Block read/write operations. 451*c4d1da1fSniklas * These structures are packed into the 'data' area in the FIB. 452*c4d1da1fSniklas */ 453*c4d1da1fSniklas 454*c4d1da1fSniklas struct aac_blockread { 455*c4d1da1fSniklas AAC_VMCommand Command; /* not FSACommand! */ 456*c4d1da1fSniklas u_int32_t ContainerId; 457*c4d1da1fSniklas u_int32_t BlockNumber; 458*c4d1da1fSniklas u_int32_t ByteCount; 459*c4d1da1fSniklas struct aac_sg_table SgMap; /* variable size */ 460*c4d1da1fSniklas } __attribute__ ((packed)); 461*c4d1da1fSniklas 462*c4d1da1fSniklas struct aac_blockread_response { 463*c4d1da1fSniklas AAC_FSAStatus Status; 464*c4d1da1fSniklas u_int32_t ByteCount; 465*c4d1da1fSniklas } __attribute__ ((packed)); 466*c4d1da1fSniklas 467*c4d1da1fSniklas struct aac_blockwrite { 468*c4d1da1fSniklas AAC_VMCommand Command; /* not FSACommand! */ 469*c4d1da1fSniklas u_int32_t ContainerId; 470*c4d1da1fSniklas u_int32_t BlockNumber; 471*c4d1da1fSniklas u_int32_t ByteCount; 472*c4d1da1fSniklas AAC_CacheLevel Stable; 473*c4d1da1fSniklas struct aac_sg_table SgMap; /* variable size */ 474*c4d1da1fSniklas } __attribute__ ((packed)); 475*c4d1da1fSniklas 476*c4d1da1fSniklas struct aac_blockwrite_response { 477*c4d1da1fSniklas AAC_FSAStatus Status; 478*c4d1da1fSniklas u_int32_t ByteCount; 479*c4d1da1fSniklas AAC_CommitLevel Committed; 480*c4d1da1fSniklas } __attribute__ ((packed)); 481*c4d1da1fSniklas 482*c4d1da1fSniklas /* 483*c4d1da1fSniklas * Register definitions for the Adaptec AAC-364 'Jalapeno I/II' adapters, based 484*c4d1da1fSniklas * on the SA110 'StrongArm'. 485*c4d1da1fSniklas */ 486*c4d1da1fSniklas 487*c4d1da1fSniklas /* doorbell 0 (adapter->host) */ 488*c4d1da1fSniklas #define AAC_SA_DOORBELL0_CLEAR 0x98 489*c4d1da1fSniklas #define AAC_SA_DOORBELL0_SET 0x9c 490*c4d1da1fSniklas #define AAC_SA_DOORBELL0 0x9c 491*c4d1da1fSniklas #define AAC_SA_MASK0_CLEAR 0xa0 492*c4d1da1fSniklas #define AAC_SA_MASK0_SET 0xa4 493*c4d1da1fSniklas 494*c4d1da1fSniklas /* doorbell 1 (host->adapter) */ 495*c4d1da1fSniklas #define AAC_SA_DOORBELL1_CLEAR 0x9a 496*c4d1da1fSniklas #define AAC_SA_DOORBELL1_SET 0x9e 497*c4d1da1fSniklas #define AAC_SA_MASK1_CLEAR 0xa2 498*c4d1da1fSniklas #define AAC_SA_MASK1_SET 0xa6 499*c4d1da1fSniklas 500*c4d1da1fSniklas /* mailbox (20 bytes) */ 501*c4d1da1fSniklas #define AAC_SA_MAILBOX 0xa8 502*c4d1da1fSniklas #define AAC_SA_FWSTATUS 0xc4 503*c4d1da1fSniklas 504*c4d1da1fSniklas /* 505*c4d1da1fSniklas * Register definitions for the Adaptec 'Pablano' adapters, based on the 506*c4d1da1fSniklas * i960Rx, and other related adapters. 507*c4d1da1fSniklas */ 508*c4d1da1fSniklas 509*c4d1da1fSniklas #define AAC_RX_IDBR 0x20 /* inbound doorbell */ 510*c4d1da1fSniklas #define AAC_RX_IISR 0x24 /* inbound interrupt status */ 511*c4d1da1fSniklas #define AAC_RX_IIMR 0x28 /* inbound interrupt mask */ 512*c4d1da1fSniklas #define AAC_RX_ODBR 0x2c /* outbound doorbell */ 513*c4d1da1fSniklas #define AAC_RX_OISR 0x30 /* outbound interrupt status */ 514*c4d1da1fSniklas #define AAC_RX_OIMR 0x34 /* outbound interrupt mask */ 515*c4d1da1fSniklas 516*c4d1da1fSniklas #define AAC_RX_MAILBOX 0x50 /* mailbox (20 bytes) */ 517*c4d1da1fSniklas #define AAC_RX_FWSTATUS 0x6c 518*c4d1da1fSniklas 519*c4d1da1fSniklas /* 520*c4d1da1fSniklas * Common bit definitions for the doorbell registers. 521*c4d1da1fSniklas */ 522*c4d1da1fSniklas 523*c4d1da1fSniklas /* 524*c4d1da1fSniklas * Status bits in the doorbell registers. 525*c4d1da1fSniklas */ 526*c4d1da1fSniklas #define AAC_DB_SYNC_COMMAND (1<<0) /* send/completed synchronous FIB */ 527*c4d1da1fSniklas #define AAC_DB_COMMAND_READY (1<<1) /* posted one or more commands */ 528*c4d1da1fSniklas #define AAC_DB_RESPONSE_READY (1<<2) /* one or more commands complete */ 529*c4d1da1fSniklas #define AAC_DB_COMMAND_NOT_FULL (1<<3) /* command queue not full */ 530*c4d1da1fSniklas #define AAC_DB_RESPONSE_NOT_FULL (1<<4) /* response queue not full */ 531*c4d1da1fSniklas 532*c4d1da1fSniklas /* 533*c4d1da1fSniklas * The adapter can request the host print a message by setting the 534*c4d1da1fSniklas * DB_PRINTF flag in DOORBELL0. The driver responds by collecting the 535*c4d1da1fSniklas * message from the printf buffer, clearing the DB_PRINTF flag in 536*c4d1da1fSniklas * DOORBELL0 and setting it in DOORBELL1. 537*c4d1da1fSniklas * (ODBR and IDBR respectively for the i960Rx adapters) 538*c4d1da1fSniklas */ 539*c4d1da1fSniklas #define AAC_DB_PRINTF (1<<5) 540*c4d1da1fSniklas 541*c4d1da1fSniklas /* 542*c4d1da1fSniklas * Mask containing the interrupt bits we care about. We don't anticipate 543*c4d1da1fSniklas * (or want) interrupts not in this mask. 544*c4d1da1fSniklas */ 545*c4d1da1fSniklas #define AAC_DB_INTERRUPTS \ 546*c4d1da1fSniklas (AAC_DB_COMMAND_READY | AAC_DB_RESPONSE_READY | AAC_DB_PRINTF) 547*c4d1da1fSniklas 548*c4d1da1fSniklas /* 549*c4d1da1fSniklas * Queue names 550*c4d1da1fSniklas * 551*c4d1da1fSniklas * Note that we base these at 0 in order to use them as array indices. Adaptec 552*c4d1da1fSniklas * used base 1 for some unknown reason, and sorted them in a different order. 553*c4d1da1fSniklas */ 554*c4d1da1fSniklas #define AAC_HOST_NORM_CMD_QUEUE 0 555*c4d1da1fSniklas #define AAC_HOST_HIGH_CMD_QUEUE 1 556*c4d1da1fSniklas #define AAC_ADAP_NORM_CMD_QUEUE 2 557*c4d1da1fSniklas #define AAC_ADAP_HIGH_CMD_QUEUE 3 558*c4d1da1fSniklas #define AAC_HOST_NORM_RESP_QUEUE 4 559*c4d1da1fSniklas #define AAC_HOST_HIGH_RESP_QUEUE 5 560*c4d1da1fSniklas #define AAC_ADAP_NORM_RESP_QUEUE 6 561*c4d1da1fSniklas #define AAC_ADAP_HIGH_RESP_QUEUE 7 562*c4d1da1fSniklas 563*c4d1da1fSniklas /* 564*c4d1da1fSniklas * List structure used to chain FIBs (used by the adapter - we hang FIBs off 565*c4d1da1fSniklas * our private command structure and don't touch these) 566*c4d1da1fSniklas */ 567*c4d1da1fSniklas struct aac_fib_list_entry { 568*c4d1da1fSniklas struct fib_list_entry *Flink; 569*c4d1da1fSniklas struct fib_list_entry *Blink; 570*c4d1da1fSniklas } __attribute__((packed)); 571*c4d1da1fSniklas 572*c4d1da1fSniklas /* 573*c4d1da1fSniklas * FIB (FSA Interface Block?); this is the datastructure passed between the 574*c4d1da1fSniklas * host and adapter. 575*c4d1da1fSniklas */ 576*c4d1da1fSniklas struct aac_fib_header { 577*c4d1da1fSniklas u_int32_t XferState; 578*c4d1da1fSniklas u_int16_t Command; 579*c4d1da1fSniklas u_int8_t StructType; 580*c4d1da1fSniklas u_int8_t Flags; 581*c4d1da1fSniklas u_int16_t Size; 582*c4d1da1fSniklas u_int16_t SenderSize; 583*c4d1da1fSniklas u_int32_t SenderFibAddress; 584*c4d1da1fSniklas u_int32_t ReceiverFibAddress; 585*c4d1da1fSniklas u_int32_t SenderData; 586*c4d1da1fSniklas union { 587*c4d1da1fSniklas struct { 588*c4d1da1fSniklas u_int32_t ReceiverTimeStart; 589*c4d1da1fSniklas u_int32_t ReceiverTimeDone; 590*c4d1da1fSniklas } _s; 591*c4d1da1fSniklas struct aac_fib_list_entry FibLinks; 592*c4d1da1fSniklas } _u; 593*c4d1da1fSniklas } __attribute__((packed)); 594*c4d1da1fSniklas 595*c4d1da1fSniklas #define AAC_FIB_DATASIZE (512 - sizeof(struct aac_fib_header)) 596*c4d1da1fSniklas 597*c4d1da1fSniklas struct aac_fib { 598*c4d1da1fSniklas struct aac_fib_header Header; 599*c4d1da1fSniklas u_int8_t data[AAC_FIB_DATASIZE]; 600*c4d1da1fSniklas } __attribute__((packed)); 601*c4d1da1fSniklas 602*c4d1da1fSniklas /* 603*c4d1da1fSniklas * FIB commands 604*c4d1da1fSniklas */ 605*c4d1da1fSniklas typedef enum { 606*c4d1da1fSniklas TestCommandResponse = 1, 607*c4d1da1fSniklas TestAdapterCommand = 2, 608*c4d1da1fSniklas 609*c4d1da1fSniklas /* lowlevel and comm commands */ 610*c4d1da1fSniklas LastTestCommand = 100, 611*c4d1da1fSniklas ReinitHostNormCommandQueue = 101, 612*c4d1da1fSniklas ReinitHostHighCommandQueue = 102, 613*c4d1da1fSniklas ReinitHostHighRespQueue = 103, 614*c4d1da1fSniklas ReinitHostNormRespQueue = 104, 615*c4d1da1fSniklas ReinitAdapNormCommandQueue = 105, 616*c4d1da1fSniklas ReinitAdapHighCommandQueue = 107, 617*c4d1da1fSniklas ReinitAdapHighRespQueue = 108, 618*c4d1da1fSniklas ReinitAdapNormRespQueue = 109, 619*c4d1da1fSniklas InterfaceShutdown = 110, 620*c4d1da1fSniklas DmaCommandFib = 120, 621*c4d1da1fSniklas StartProfile = 121, 622*c4d1da1fSniklas TermProfile = 122, 623*c4d1da1fSniklas SpeedTest = 123, 624*c4d1da1fSniklas TakeABreakPt = 124, 625*c4d1da1fSniklas RequestPerfData = 125, 626*c4d1da1fSniklas SetInterruptDefTimer= 126, 627*c4d1da1fSniklas SetInterruptDefCount= 127, 628*c4d1da1fSniklas GetInterruptDefStatus= 128, 629*c4d1da1fSniklas LastCommCommand = 129, 630*c4d1da1fSniklas 631*c4d1da1fSniklas /* filesystem commands */ 632*c4d1da1fSniklas NuFileSystem = 300, 633*c4d1da1fSniklas UFS = 301, 634*c4d1da1fSniklas HostFileSystem = 302, 635*c4d1da1fSniklas LastFileSystemCommand = 303, 636*c4d1da1fSniklas 637*c4d1da1fSniklas /* Container Commands */ 638*c4d1da1fSniklas ContainerCommand = 500, 639*c4d1da1fSniklas ContainerCommand64 = 501, 640*c4d1da1fSniklas 641*c4d1da1fSniklas /* Cluster Commands */ 642*c4d1da1fSniklas ClusterCommand = 550, 643*c4d1da1fSniklas 644*c4d1da1fSniklas /* Scsi Port commands (scsi passthrough) */ 645*c4d1da1fSniklas ScsiPortCommand = 600, 646*c4d1da1fSniklas 647*c4d1da1fSniklas /* misc house keeping and generic adapter initiated commands */ 648*c4d1da1fSniklas AifRequest = 700, 649*c4d1da1fSniklas CheckRevision = 701, 650*c4d1da1fSniklas FsaHostShutdown = 702, 651*c4d1da1fSniklas RequestAdapterInfo = 703, 652*c4d1da1fSniklas IsAdapterPaused = 704, 653*c4d1da1fSniklas SendHostTime = 705, 654*c4d1da1fSniklas LastMiscCommand = 706 655*c4d1da1fSniklas } AAC_FibCommands; 656*c4d1da1fSniklas 657*c4d1da1fSniklas /* 658*c4d1da1fSniklas * FIB types 659*c4d1da1fSniklas */ 660*c4d1da1fSniklas #define AAC_FIBTYPE_TFIB 1 661*c4d1da1fSniklas #define AAC_FIBTYPE_TQE 2 662*c4d1da1fSniklas #define AAC_FIBTYPE_TCTPERF 3 663*c4d1da1fSniklas 664*c4d1da1fSniklas /* 665*c4d1da1fSniklas * FIB transfer state 666*c4d1da1fSniklas */ 667*c4d1da1fSniklas #define AAC_FIBSTATE_HOSTOWNED (1<<0) /* owned by the host */ 668*c4d1da1fSniklas #define AAC_FIBSTATE_ADAPTEROWNED (1<<1) /* owned by the adapter */ 669*c4d1da1fSniklas #define AAC_FIBSTATE_INITIALISED (1<<2) /* initialised */ 670*c4d1da1fSniklas #define AAC_FIBSTATE_EMPTY (1<<3) /* empty */ 671*c4d1da1fSniklas #define AAC_FIBSTATE_FROMPOOL (1<<4) /* allocated from pool */ 672*c4d1da1fSniklas #define AAC_FIBSTATE_FROMHOST (1<<5) /* sent from the host */ 673*c4d1da1fSniklas #define AAC_FIBSTATE_FROMADAP (1<<6) /* sent from the adapter */ 674*c4d1da1fSniklas #define AAC_FIBSTATE_REXPECTED (1<<7) /* response is expected */ 675*c4d1da1fSniklas #define AAC_FIBSTATE_RNOTEXPECTED (1<<8) /* response is not expected */ 676*c4d1da1fSniklas #define AAC_FIBSTATE_DONEADAP (1<<9) /* processed by the adapter */ 677*c4d1da1fSniklas #define AAC_FIBSTATE_DONEHOST (1<<10) /* processed by the host */ 678*c4d1da1fSniklas #define AAC_FIBSTATE_HIGH (1<<11) /* high priority */ 679*c4d1da1fSniklas #define AAC_FIBSTATE_NORM (1<<12) /* normal priority */ 680*c4d1da1fSniklas #define AAC_FIBSTATE_ASYNC (1<<13) 681*c4d1da1fSniklas #define AAC_FIBSTATE_ASYNCIO (1<<13) /* to be removed */ 682*c4d1da1fSniklas #define AAC_FIBSTATE_PAGEFILEIO (1<<14) /* to be removed */ 683*c4d1da1fSniklas #define AAC_FIBSTATE_SHUTDOWN (1<<15) 684*c4d1da1fSniklas #define AAC_FIBSTATE_LAZYWRITE (1<<16) /* to be removed */ 685*c4d1da1fSniklas #define AAC_FIBSTATE_ADAPMICROFIB (1<<17) 686*c4d1da1fSniklas #define AAC_FIBSTATE_BIOSFIB (1<<18) 687*c4d1da1fSniklas #define AAC_FIBSTATE_FAST_RESPONSE (1<<19) /* fast response capable */ 688*c4d1da1fSniklas #define AAC_FIBSTATE_APIFIB (1<<20) 689*c4d1da1fSniklas 690*c4d1da1fSniklas /* 691*c4d1da1fSniklas * FIB error values 692*c4d1da1fSniklas */ 693*c4d1da1fSniklas #define AAC_ERROR_NORMAL 0x00 694*c4d1da1fSniklas #define AAC_ERROR_PENDING 0x01 695*c4d1da1fSniklas #define AAC_ERROR_FATAL 0x02 696*c4d1da1fSniklas #define AAC_ERROR_INVALID_QUEUE 0x03 697*c4d1da1fSniklas #define AAC_ERROR_NOENTRIES 0x04 698*c4d1da1fSniklas #define AAC_ERROR_SENDFAILED 0x05 699*c4d1da1fSniklas #define AAC_ERROR_INVALID_QUEUE_PRIORITY 0x06 700*c4d1da1fSniklas #define AAC_ERROR_FIB_ALLOCATION_FAILED 0x07 701*c4d1da1fSniklas #define AAC_ERROR_FIB_DEALLOCATION_FAILED 0x08 702*c4d1da1fSniklas 703*c4d1da1fSniklas /* 704*c4d1da1fSniklas * Adapter Status Register 705*c4d1da1fSniklas * 706*c4d1da1fSniklas * Phase Staus mailbox is 32bits: 707*c4d1da1fSniklas * <31:16> = Phase Status 708*c4d1da1fSniklas * <15:0> = Phase 709*c4d1da1fSniklas * 710*c4d1da1fSniklas * The adapter reports its present state through the phase. Only 711*c4d1da1fSniklas * a single phase should be ever be set. Each phase can have multiple 712*c4d1da1fSniklas * phase status bits to provide more detailed information about the 713*c4d1da1fSniklas * state of the adapter. 714*c4d1da1fSniklas */ 715*c4d1da1fSniklas #define AAC_SELF_TEST_FAILED 0x00000004 716*c4d1da1fSniklas #define AAC_UP_AND_RUNNING 0x00000080 717*c4d1da1fSniklas #define AAC_KERNEL_PANIC 0x00000100 718