Beruflich Dokumente
Kultur Dokumente
NOTE: This version of the firmware specification is being released to the public as reference for
writing device drivers for operating systems such as Linux.
Technical documentation
www.compaq.com
Introduction
The purpose of this document is to specify the command interface as well as other technical
details of Compaqs internal PCI-bus array controllers. This non-Confidential document is being
released to the public in order to facilitate development of device drivers for Compaq array
controller products. Specifically, the following Compaq array controllers are described in this
document:
SMART-2/P
SMART-2DH
SMART-2SL
Smart Array 221
Smart Array 3100ES
Smart Array 3200
Features
The following chart summarizes some of the basic differences between the different Compaq
array controller products:
Feature
SMART-2 /P,
SMART-2DH
32
SMART-2SL
Maximum
physical
drives
Host hardware
interface
Slot based
(board-level)
Drive interface
Yes
Maximum
logical
volumes
SCSI
channels
Cache
RAID levels
supported
On-board
BIOS
FLASH ROMs
Multiple
logical
volumes on
same physical
drives
Smart Array
3100ES
32
Smart Array
3200
32
Smart Array
221
32
4 (one reserved
for intercontroller link)
42 (IDs 6 & 7
reserved)
30
15
PCI (bridge)
PCI (bridge)
Yes
PCI (bridge)
special extended
PCI connector
Yes
Yes
Yes
16-bit Ultra
Wide SCSI
4-16mb
Read/Write
0, 1 (10), 4, 5
16-bit Wide
Ultra SCSI
6mb ReadAhead only
0, 1 (10), 4, 5
16-bit Wide
Ultra-2 SCSI
56mb
Read/Write
0, 1 (10), 4, 5
16-bit Wide
Ultra-2 SCSI
6mb ReadAhead only
0, 1 (10), 4, 5
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
32
Technical documentation
www.compaq.com
PCI Identification
Product
Vendor/Device ID of
PCI-to-PCI bridge
Vendor/Device ID of
PDPI device behind
bridge
SMART-2/P or
SMART-2DH
0x00221014 (revision=1
for SMART-2/P,
revision>=3 for SMART2DH)
0xAE104030
0x40300E11
SMART-2SL
0x00221014
0xAE104030
0x40310E11
Smart Array
3200
0x00221014
0xAE104030
0x40320E11
Smart Array
3100ES
0x00221014
0xAE104030
0x40330E11
Smart Array
221
0x00221014
0xAE104030
0x40340E11
Technical documentation
www.compaq.com
LEDs
For problem diagnosis purposes, the LEDs can be interpreted as follows. The LED numbering
convention is as follows, looking at the board from the top with the system side panel removed
(upside down). LEDs 14 & 15 are amber in color, and the other LEDs are green.
SMART-2SL, Smart Array 221, Smart Array 3200:
15 14 13 12 11 10 9
8
7
6
SMART-2/P, SMART-2DH:
15 14 6
5
4
3
13 12 11 10
2
9
1
8
9
1
8
0
LED
bits
0-4(0-5
w/ f/w
<2.50)
5 (6 w/
f/w
<2.50)
6
7
8
9
10
11
12
13
14
15
10
2
0
7
Function
Except on Smart Array 3100ES, graphically indicates available processor
bandwidth, sampled 10 times per second. All LEDs ON means processor is
IDLE; all LEDs OFF means processor is out of horsepower. If the firmware is
hung with interrupts enabled (IDLE task not running), LEDs 1-4(5) will be OFF
and LED 0 will blink every 2 seconds.
On Smart Array 3100ES these LEDs are redefined as follows:
LED 0: Same as above (blinks when interrupts enabled and IDLE task not
running).
LED 1: Controller operating in standby mode (redundant controller).
LEDs 2-4: SCSI bus activity for bus 0, 1, & 2.
IDLE TICK. Blinks to indicate board is alive (interrupts enabled & firmware
not locked up).
Reserved
ON = OUTPUT ENABLED. Indicates that 9600 baud serial output is available
on the serial connector. Output can be enabled by setting a jumper on the
cache daughter-board.
ON = Controllers are currently operating redundantly (Smart Array 3100ES
only)
ON = BAD_LIST or BAD_REQUEST errors have been returned by the
controller since the last controller reset.
WCXC active. ON when WCXC ASIC is actively transferring data.
Logical I/O. ON when logical requests from the host are queued up on the
controller.
Except on Smart Array 3100ES: Bus 0 activity. Indicates requests are
outstanding on the first SCSI bus.
On Smart Array 3100ES, indicates inter-controller link requests are
outstanding.
Bus 1 activity. Indicates requests are outstanding on the second SCSI bus.
Cache activity/error. Flickers during posted-write activity. ON solid if postedwrites are turned off due to an error condition.
Drive failure. ON if any configured drive is failed.
Technical documentation
www.compaq.com
Command lists, built in host memory, contain all of the necessary information concerning
individual commands that is needed by the controller for execution. Command lists can each
have multiple requests. Scatter/Gather is supported.
At the completion of a command list, the request status field in each request block will be
updated with an error code (only if there was an error associated with that request).
Feature
FIFO Interface
Maximum Scatter/Gather
Elements per Request.
32 (recommended)
Yes
4K Bytes
Theory of Operation
In general, a FIFO Interface OS driver builds command list data structures in host memory and
then tells the controller to execute them by specifying their physical addresses. When the
controller has completed processing the command lists, it notifies the OS driver of their physical
addresses.
The FIFO Interface is based upon two FIFOs. One FIFO is for sending command lists and the
other is for receiving completed command lists. Each FIFO is accessed through an individual 32
bit register. The name of each FIFO is used interchangeably with the name of its register.
The first FIFO is called the Command Pointer FIFO. The purpose of this FIFO is to provide a
channel to send commands to the controller. This FIFO can hold up to 16 DWORDs. Each
DWORD is the address of an individual command list that has been prepared by the OS driver
and resides in host memory. When this register is read, it will return the number of positions
available in the FIFO. A value of zero indicates that there is not room for another command
pointer at this time. When a non-zero value is read, the driver can submit that many command
pointers consecutively without having to
Note: The driver must read the Command
read it. The OS driver may choose to
Pointer FIFO before the very first command is
unmask the interrupt that is generated when
issued. It should also be read after the number
the Command Pointer FIFO is NOT FULL.
of commands consecutively submitted is equal
to the value that was last read from this register.
Technical documentation
www.compaq.com
This can be done by setting the appropriate bit in the Interrupt Mask Register. The same bit in the
Interrupt Status register shows the status of the interrupt at any point in time.
The second FIFO is called the Command Completion Pointer FIFO. The purpose of this FIFO is
to provide a channel to receive notifications of completed command lists from the controller. This
FIFO can also hold up to 16 DWORDs. Each DWORD is the address of an individual command
list that has been completed by the controller and resides in host memory. This a read-only
register since its only purpose is to indicate command list completions to the OS driver. When
this register is read, it will either return the address of a completed command list or a value of
zero. A value of zero indicates that there are
Note: When a command list completes
no completions available at this time. When a
with a Bad List status, the Command
non-zero value is read from this register, the
Completion FIFO register will contain the
OS driver has the address of a completed
address of the command list and also
command list and should check the status field
have bit 0 set (command lists must start
in host memory to see if there was an error
on a 32-bit boundary). This is primarily a
associated with the command list. Note that
driver debug issue since Bad List errors
the read of this register is destructive each
should never occur in production. Always
read causes a list pointer to be removed from
mask bit 0 and 1 to get the correct
the Command Completion FIFO. The OS
address of the completed command
driver may choose to unmask the interrupt that
list.
is generated when this FIFO has something in
it. This can be accomplished by setting the appropriate bit in the Interrupt Mask Register. The
same bit in the Interrupt Status register shows the status of the interrupt at any point in time.
Note: The FIFO Interface DOES NOT return command list error status values in a
mailbox or any other type of I/O register as does the BMIC Interface. All error values
(except Bad List status) are returned in the request status field of each completed
request block residing in host memory, the same as the BMIC Interface. The request
status field should be set to zero by the driver before each command is submitted
because its value is only updated when there is an error.
The command list data structure in host memory for the FIFO Interface is similar to that of the
BMIC Interface. The Command List data structures are found later in this document. Command
List data structures must begin on a DWORD address boundary with the FIFO Interface. Multiple
requests per command list are permitted as well as scatter gather arrays of up to 256 elements.
One list of scatter/gather elements is
Note: The hardware has been optimized to
allowed per request. The maximum
automatically load in command lists of 32 bytes or less
size of a single command list is 4
in size. Therefore, it is suggested that OS drivers strive
Kbytes. The host can submit as
to send command lists that are of this size or less for
many command lists at a time as the
the most efficient performance. Command lists larger
controller can handle.
than 32 bytes in size will be loaded by a slower
firmware driven process.
Very Important Note: All command lists and
request blocks in host memory MUST begin
on a physical DWORD address boundary.
This is not optional.
Location
Command
Registers
of
PCI
Interface
Read the register values from PDPIs PCI Configuration space to determine the address assigned
by the System ROM during POST. Base Address Register 0 indicates the I/O-mapped address
range; Base Address Register 1 indicates the memory-mapped address range. Add the address
to the Relative register address from the table below to get the physical address of the register.
The table below contains the relative offsets.
Register Name
Command Pointer FIFO
Command Completion
Technical documentation
www.compaq.com
FIFO
Interrupt Mask
Interrupt Status
Interrupt Pending
0x000C
0x0010
0x0014
The register set is located in either memory or I/O space depending on how the system configures
the board. To determine where the register set is located, software must do PCI BIOS calls to
read the PCI configuration registers.
Register Definitions
Command Pointer FIFO register, 32 Bits Wide, offset 0x04
Read: The number of available positions in the Command Pointer FIFO. This register should
be read before the first command has been submitted and each time the number of
consecutive submissions is equal to the value that was last read from this register.
Write: The physical address of a valid command list residing in host memory.
Command Completion FIFO register, 32 Bits Wide, offset 0x08
Read: The physical address of a completed command list when non-zero. When a value of
zero is read, there are not any command list completions at this time. Bit 0 indicates that there
is a Bad List error status on the completed command list. Mask the bottom 2 bits of this
register to get the correct command list address.
Write: This is a read-only register.
For each Read or Write command in a command list, an internal array controller adds up all the bytes specified in
the S/G elements to make sure they equal the total number of sectors requested in the command. If they do not,
the assumption is that the controller may not have received the correct command list address from the driver, or the
list is corrupted. In this case (and in some other cases such as a failed controller), a "Bad List" is indicated by the
low bit set in the Completion Status Pointer returned via the Command Completion FIFO. In this case, the request
header is NOT touched by the controller since it assumes that the command list address may be incorrect. Thus, all
drivers must always check for the low bit set in the Completion Status Pointer and not just the status in the request
header.
A "BAD REQUEST" (0x10) returned in the request header, on the other hand, may indicate that the command
specified is not supported, or not supported at this time (such as if a read command is attempted from a logical drive
that does not exist).
Technical documentation
www.compaq.com
register. This register would typically be used in an interrupt service procedure to determine
why the interface is interrupting the host system. The bit position meanings are relative to the
Interrupt Mask register (above).
Technical documentation
www.compaq.com
Command List
Field Name
Command List Header
Size in Bytes
4
Meaning
This structure is defined below.
Request Block
There may be
one or more
Request
Blocks here.
Field Name
Size in Bytes
Meaning
Reserved
Must be 0.
List Size
Size in Bytes
12
8 times the
number of
array elements
indicated in
the SG Count
field in the
Request
Header.
Variable
Meaning
This structure is defined below.
Address and size of each host data buffer.
See below for the Scatter/Gather element data
structure.
Request Block
Field Name
Request Header
Scatter/Gather Array
Pass-Through Command
Data
Technical documentation
www.compaq.com
Request Header
Field Name
Next Request Offset
Size in Bytes
2
Command Code
Request Status
Meaning
This field is used to indicate that an additional
request blocks follows this request block. A
value of zero indicates that this is the last
request block in the command list. Otherwise
this field indicates the number of bytes from
the beginning of this request block to the
beginning of the next request block.
This is the command code for this request.
See the specific controller specification for the
meaning of supported command codes.
This field is updated by the controller with an
error status code if an error was encountered.
This field should be initialized to 0 before a
command list is sent because it is only
updated by the controller when there was an
error.
Each bit position indicates the following errors:
Bit 0: Reserved. No meaning.
Bit 1: Non-Fatal Error.
Bit 2: Fatal Error.
Bit 3: Reserved. No meaning.
Bit 4: Invalid Request Block.
Bit 6: Reserved. No meaning.
Bit 7: Reserved. No meaning.
Block Number
Block Count
4
2
Reserved
Technical documentation
Size in Bytes
4
4
Meaning
Number of bytes in the buffer.
Host physical address of the buffer. A value of
0xFFFFFFFF defines the bit-bucket address.
10
www.compaq.com
BMIC
Code
SMART-2/P, SMART-2DH,
SMART-2SL, Smart Array 221
Identify controller
Identify logical drive
Sense logical drive status
Start recover
Identify physical drive
Blink drive tray LEDs
Sense Blinking drive tray LEDs
Identify logical drive, Extended
Read
Write
Write media
Reset controller
Label logical drive
Set surface delay
Sense bus parameters
Sense Subsystem Information
Sense surface analysis task status
Pass-through operation
Reset SCSI device
Pause Background Activity
Resume Background Activity
Sense drive error log
Start controller performance
monitoring
Sense controller performance
Stop controller performance
monitoring
Flush/disable write cache
Accept Media Exchange
0x11
0x10
0x12
0x13
0x15
0x16
0x17
0x18
0x20
0x30
0x31
0x40
0x57
0x60
0x65
0x66
0x70
0x90
0x94
0x98
0x99
0xa6
0xa7
Yes
Yes
Yes
Yes
Yes
Yes (1.50)
Yes (1.50)
Yes (2.62)
Yes
Yes
Yes
Yes
Yes (2.58)
Yes
Yes
Yes (2.60)
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
0xa8
0xa9
Yes
Yes
Yes
Yes
0xc2
0xe0
Yes
Yes
Yes
Yes
Technical documentation
11
www.compaq.com
Name
configured logical
drives
Configuration signature
4 Bytes
4 Bytes
Byte
4 Bytes
DWord
hardware revision
Reserved
drive present bit map
DWord
DWord
Board id
Byte
Reserved
Technical documentation
Meaning
Number of configured logical drives.
Other
12
This map
only shows
the first 7
drives per
SCSI bus.
For >7
drives/bus
support, see
additional
map at end
of this data
structure.
This map
only shows
the first 7
drives per
SCSI bus.
For >7
drives/bus
support, see
additional
map at end
of this data
structure.
www.compaq.com
DWord
Non-disk map
5 Bytes
Byte
Reserved
Marketing_revision
Byte
Controller_flags
This map
only shows
the first 7
drives per
SCSI bus.
For >7
drives/bus
support, see
additional
map at end
of this data
structure.
f/w 1.50
only
Reserved
SCSI chip count
Dword
Dword
Reserved
Controller Clock
Byte
8 Hwords
(128 bits)
8 Hwords
(128 bits)
Technical documentation
13
f/w 3.00
only
big_map
support only.
big_map
support only.
big_map
support only.
www.compaq.com
8 Hwords
(128 bits)
big_map
support only.
Bus 2
Bus 1
Bus 0
ID
0
ID
1
ID
2
ID
3
ID
4
ID
5
ID
6
21
14
7
0
22
15
8
1
23
16
9
2
24
17
10
3
25
18
11
4
26
19
12
5
27
20
13
6
ID
7
ID
8
ID
9
ID
10
ID
11
ID
12
ID
13
ID
14
ID
15
Bus 7
Bus 6
Bus 5
Bus 4
Bus 3
Bus 2
Bus 1
Bus 0
ID
0
ID
1
ID
2
ID
3
ID
4
ID
5
ID
6
ID
7
ID
8
ID
9
ID
10
ID
11
ID
12
ID
13
ID
14
ID
15
F0h
F1h
F2h
F3h
F4h
F5h
F6h
F7h
F8h
F9h
Fah
Fbh
Fch
Fdh
Feh
Ffh
E0h
E1h
E2h
E3h
E4h
E5h
E6h
E7h
E8h
E9h
Eah
Ebh
Ech
Edh
Eeh
Efh
D0h
D1h
D2h
D3h
D4h
D5h
D6h
D7h
D8h
D9h
Dah
Dbh
Dch
Ddh
Deh
Dfh
C0h
C1h
C2h
C3h
C4h
C5h
C6h
C7h
C8h
C9h
Cah
Cbh
Cch
Cdh
Ceh
Cfh
B0h
B1h
B2h
B3h
B4h
B5h
B6h
B7h
B8h
B9h
Bah
Bbh
Bch
Bdh
Beh
Bfh
A0h
A1h
A2h
A3h
A4h
A5h
A6h
A7h
A8h
A9h
Aah
Abh
Ach
Adh
Aeh
Afh
90h
91h
92h
93h
94h
95h
96h
97h
98h
99h
9ah
9bh
9ch
9dh
9eh
9fh
80h
81h
82h
83h
84h
85h
86h
87h
88h
89h
8ah
8bh
8ch
8dh
8eh
8fh
Technical documentation
14
www.compaq.com
Name
block size in bytes
blocks available
logical drive parameter table
Byte
fault tolerance
2 Bytes
Reserved
Meaning
In addition to the fields above, the following additional fields are returned by the Identify Logical
Drive Extended command code (0x18) - (f/w version 2.62 only):
Byte
Dword
Reserved
Logical drive identifier
64 Bytes
Technical documentation
15
www.compaq.com
Name
unit status
DWord
416
Bytes
DWord
Reserved
blocks left to
recover
Technical documentation
Meaning
0 = Logical drive ok
1 = Logical drive failed
2 = Logical drive not configured
3 = Logical drive using interim recovery mode
4 = Logical drive ready for recovery operation
5 = Logical drive is currently recovering
6 = Wrong physical drive was replaced
7 = A physical drive is not properly connected
10 = Logical drive is currently expanding
11 = Logical drive is not yet available
12 = Logical drive is queued for expansion
Note: If the unit_status value is 6 or 7, the
unit_status of all other configured logical
drives will be marked as 1 (Logical drive
failed). This is to force the user to correct the
problem and to insure that once the problem
is corrected, the data will not have been
corrupted by any user action.
On SCSI port 1, bit x represents the physical
drive with ID x, starting at 0. Drive IDs 0-6 on
SCSI port 2 are assigned to bit positions 7-13
in drive bit maps. Drive maps indicate only
those physical drives that make up the
selected logical drive.
Other
16
www.compaq.com
Byte
drive rebuilding
32
Words
remap count
The number of blocks that have been remapped on each physical drive since the
array was configured.
DWord
replacement drive
map
DWord
Technical documentation
17
The drive
number
returned in
this field uses
the original (7
drives/bus
numbering
scheme); for
>7 drives/bus
support, see
additional field
at the end of
this data
structure.
This table only
shows the first
7 drives per
SCSI bus.
For >7
drives/bus
support, see
additional
map at the
end of this
data structure.
This map only
shows the first
7 drives per
SCSI bus.
For >7
drives/bus
support, see
additional
map at end of
this data
structure.
This map only
shows the first
7 drives per
SCSI bus.
For >7
drives/bus
support, see
additional
map at end of
this data
structure.
www.compaq.com
Byte
spare status
32 Bytes
spare to replace
map
DWord
replaced marked ok
map
Byte
Byte
cache failure
Byte
expand failure
Technical documentation
18
www.compaq.com
Byte
Unit_flags
8 Hwords
(128 bits)
128
Hwords
8 Hwords
(128 bits)
Big replacement
drive map
8 Hwords
(128 bits)
128
Bytes
8 Hwords
(128 bits)
Big replaced
marked OK map
Byte
Technical documentation
19
big_map
support only.
big_map
support only.
big_map
support only.
big_map
support only.
big_map
support only.
big_map
support only.
big_map
support only.
www.compaq.com
Name
SCSI Bus
SCSI ID
block size in bytes
total blocks
reserved blocks
40 Bytes
drive model
40 Bytes
8 Bytes
Byte
Byte
Byte
Byte
Reserved
Reserved
physical drive flags
Technical documentation
Meaning
The SCSI bus of this drive. Starting at 0.
The SCSI ID of the drive.
Number of bytes per sector according to the drive.
Total number of sectors on the disk including RIS sectors
Number of unusable sectors (reserved for RIS info at the
beginning of the disk). Normally 1088.
ASCII text. All zeroes if drive was missing or failed during
controller initialization.
ASCII text. All zeroes if serial number could not be read or
if drive was missing or failed during controller initialization.
ASCII text. All zeroes if drive was missing or failed during
controller initialization.
SCSI inquiry data byte 7 from this drive (one of the bits
can be used to determine if drive is wide or narrow)
20
www.compaq.com
Byte
Byte
Byte
Reserved
Yet More Physical
Drive Flags
5 Bytes
2 Bytes
Reserved
Phys_Connector
Byte
Byte
Reserved
Phys_Bay_in_Box
Name
Blink duration
Dword
Reserved
Technical documentation
Meaning
Duration of time to blink the LEDs, in tenths of seconds. 0
= forever (not recommended).
Should be 0.
21
www.compaq.com
256 Bytes
Blink/seek enable
248 Bytes
Reserved
Should be 0
Name
Blink duration
Dword
256 Bytes
Blink enable
Meaning
Duration passed in previous Blink Drive Tray LEDs
command. Firmware resets this field to 0 when the
previously specified duration has elapsed (it may also be 0
if forever was specified in a previous Blink Drive Tray
LEDs command in which case youll want to check the
blink_enable bytes).
Length of time the LEDs have already been blinking, in
tenths of seconds. Field is only valid if blink_duration is
non-zero.
For each drive on the controller, this byte indicates whether
the LEDs on the corresponding drive tray are currently
blinking.
0 = Not blinking (i.e. normal operation).
1 = Blinking.
All other values reserved.
Firmware resets all bytes to 0 when the previously
specified blink duration has elapsed.
On controllers with firmware that does not support more than 7 drives per
bus, bytes 0-6 correspond to drives on the first SCSI bus and bytes 7-13
correspond to drives on the second SCSI bus. On controllers with
firmware that DOES support more than 7 drives per bus, bytes 80-8Fh
correspond to SCSI IDs on the first SCSI bus and bytes 90h-9Fh
correspond to SCSI IDs on the second SCSI bus.
248 Bytes
reserved
0x20: Read
This command transfers data from the logical volume to the host. The data structure associated
with this command is merely the buffer that will contain the data read from the drives.
Technical documentation
22
www.compaq.com
0x30: Write
This command transfers data from the host to the logical volume. The data structure associated
with this command is merely the buffer of data that will be written to the drives. If posted write
operations are enabled for the destination volume, the data may be transferred into the posted
write cache memory. If this occurs, a completion indication will be given to the host before the
data has actually been written to the drives.
Name
Logical drive identifier
Logical drive label
Meaning
ASCII label or other data all 64 bytes will be stored and
returned to the host.
Name
delay
Pad to
512 Bytes
reserved
Meaning
The delay field is in tenths of a second. A value of zero will
disable surface analysis. 150 = default (15 seconds).
Must be 0
Other
Technical documentation
Rsvd (must be 0)
Rsvd (must be 0)
23
SCSI Bus
www.compaq.com
Name
inquiry
Byte
inquiry valid
Dword
32 Words
2 Bytes
Alarm Structure
Word
reserved
alarm data
connection_info
Technical documentation
Meaning
The Inquiry_data buffer is the standard inquiry data as
returned by ProLiant enclosure:
struct inquiry_data{
Byte
peripheral_type;
Byte
rmb;
Byte
versions;
Byte
misc;
Byte
additional_length;
Byte
reserved[2];
Byte
support_bits;
Byte
vendor_id[8];
Byte
product_id[16];
Byte
product_revision[4];
}; (see below for recently added fields)
A flag that indicates if there is inquiry data In-otherwords, this flag would be true if a ProLiant enclosure
was attached to this bus, but false if there wasnt a
ProLiant enclosure.
A bit map of the SCSI IDs attached to this bus. This
map only shows the first 7 drives per SCSI bus. For >7
drives/bus support, see additional map at end of this
data structure.
Each word in the array represents a SCSI ID. Each
time the counter is incremented, a drive has been
added (hot-plugged) at this SCSI ID position. This
could mean a drive has failed and been replaced, or
could mean a new drive has been added to the system.
This could also indicate the SAME drive has been
removed and then re-installed. This counter is set to
zero at power-up.
See structure definition following.
Bit 0 set = External SCSI connector is being used (may
be routed internally).
Bit 1 set = Internal SCSI bus connector is being used
(may be routed externally). If bit 0 and 1 are both set,
this is a cabling error and the SCSI bus is automatically
disabled by the controller firmware.
Bit 2 set = Wide data transfers failed on all Wide drives
attached to this bus. Firmware reverted to narrow
mode on these drives. May indicate bad SCSI cable.
Bit 3 set = Set if the firmware thinks there is a Compaq
ProLiant Storage Enclosure attached to this bus.
Bit 4 = Reserved.
Bit 5 set = Enclosure Interrupt Test failed.
Bit 6 set = SCSI chip corresponding to this bus is not
present.
Bits 7 set = Enclosure Selection Error (backplane
responding at multiple SCSI ID positions), due to a bad
backplane or use of a narrow cable to a wide
backplane.
Bits 8-15: Reserved.
24
www.compaq.com
Byte
Byte
scsi device
revision
fan status
64 Bytes
more_inquiry_data
Dword
scsi_device_type
Dword
bus_bit_map
8 Bytes
Byte
Byte
2 Bytes
Reserved
SCSI initiator ID
SCSI target ID
Phys_Connector
8 Hwords (128
bits)
8 Hwords (128
bits)
8 Hwords (128
bits)
Byte
Byte
More connection
info
2 Bytes
40 Bytes
reserved
Chassis serial
number
Technical documentation
25
www.compaq.com
Name
alarm status
Byte
temp status
Byte
Word
8 Words
Meaning
The current state of the Enclosure Alarm Page alarm_status
(bit_alarms) field. If bit 0 is set, for example, the fan is
currently in an alarm state. All bits are not supported in all
versions of enclosure firmware.
For most enclosures:
Bit 0 = Fan Alert
Bit 1 = Temperature Alert
Bit 2 = Door Alert
Bit 3 = Power Supply Alert
Bits 4-7 = Reserved
The current state of the Enclosure Alarm Page temp_status
field (byte 5).
The current state of the Enclosure Alarm Page valid_bits field.
The number of times the enclosure has alerted the controller
firmware due to an alarm_status bit changing to the set state
(since controller power up or reset).
The number of times the enclosure alerted the controller
firmware due to a specific alarm_status bit changing to the
set state. For example, specific_alarm_counts[0] would
indicate the number of times the fan alarm bit (bit 0) in the
alarm_status field was changed to a set state;
specific_alarm_counts[1] would indicate the number of times
the temp alarm bit (bit 1) in the alarm_status field was
changed to a set state. These counts are since power-up or
reset of the controller.
Name
Meaning
Byte
3 Bytes
Reserved
32 Bytes
8 Bytes
Reserved
32 Bytes
32 Bytes
8 bytes
Reserved
Technical documentation
26
www.compaq.com
32 Bytes
32 Bytes
Technical documentation
27
www.compaq.com
Name
Reserved
Timer
remaining
Surface delay
32
Dwords
Current block
8 Bytes
Surface
analysis
status
8 Dwords
Inconsistent
block
Surface
analysis pass
time
Surface
Analysis
Passes
Controller
Resets
32
Dwords
32
Dwords
32
Hwords
32
Dwords
128
Dwords
32 Bytes
32
Dwords
Blocks
Reassigned
Big current
block
Big surface
analysis
status
Big
inconsistent
block
Technical documentation
Meaning
Other
big_map
support only.
28
www.compaq.com
Name
command list
header
request
Technical documentation
29
www.compaq.com
Name
unit
reserved
list size in
dwords
Meaning
Must be 0
Must be 0
Name
logical request
header
scatter/gather array
parameters
Name
next request offset
command
return error
block number
block count
sg count 1
sg count 2
Meaning
Must be 0.
Scatter/Gather Structure
Size
DWord
DWord
Name
byte count
host address
Name
SCSI target
ID
Byte
Byte
SCSI bus
SCSI Lun
Dword
time out
value
Technical documentation
Meaning
SCSI device ID. Specify ID 7 or the SCSI ID of the initiator
(available via Sense Bus Params) to perform a self-selection and
thus send requests to attached ProLiant Storage enclosure
processors.
SCSI bus number (0 for first SCSI bus)
Devices SCSI Logical Unit Number (LUN). 0 must be specified
when sending requests to disk drives; this field doesnt actually do
anything in firmware versions under 3.0.
In seconds. The timeout period does not actually begin until the
request is submitted to the drive, which may take additional time
on active controllers since other requests may already be queued
up on the drive and these requests might also be timing out.
30
www.compaq.com
Dword
flags
Byte
device status
Byte
machine
error
CDB length
sense error
code
Byte
Byte
Byte
sense key
Dword
sense info
Byte
sense code
Byte
sense
qualifier
reserved
CDB
8 Bytes
Length of CDB
Name
SCSI bus
SCSI ID
Technical documentation
Meaning
SCSI bus (0 or 1)
SCSI device ID (specify ID for a specific device to issue a BDR or
0xFF to perform a SCSI bus reset for the entire bus). A BDR is
issued to target lun 0 of the selected SCSI ID.
31
www.compaq.com
bit 0
PUnit
Rsvd
Where:
*
PUnit =
Rsvd =
Rsvd
Rsvd
Physical drive (0-13, or 0x80+). Drives 0-6 are on the first SCSI
controller and 7-13 correspond to SCSI ID's 0-6 on the second SCSI
controller. Note that the drive does not need to be part of a logical
volume in order for this command to work. In firmware with BIG_MAP
support, bit 31 of the block_number field allows access to more drives
per SCSI bus (i.e. PUnit=0x80 to 0x80+Drives_Per_SCSI_Bus for
drive IDs 0 to Drives_Per_SCSI_Bus on the first SCSI bus).
Bytes reserved for future expansion (must be set to 0).
The data structure returned by this function consists of a header followed by a variable number of
error log entries as follows:
struct error_log_buffer {
struct error_log_headerheader;
struct error_log_entrylog[error_log_size];
unsigned long reference_time;
};
Where:
struct error_log_header {
unsigned char error_log_entry_length;
unsigned short error_log_size;
unsigned char error_log_offset;
unsigned long errors_logged;
};
struct error_log_entry {
unsigned char error_type;
unsigned char scsi_operation;
unsigned char scsi_status;
unsigned char cam_status;
unsigned char sense_key;
unsigned char qualifier;
unsigned char sense_code;
unsigned char block_valid;
};
Technical documentation
32
www.compaq.com
This is a circular list. There is only room for error log size errors in the list. The error log offset
field indicates the index where the next error log entry will be placed in the list, not the index of the
last error that occurred (subtract 1 [wrap to the bottom if necessary] to find the last error that was
logged). The errors_logged field is the total number of errors that have occurred, and may be
much larger than the actual number of errors currently recorded. errors_logged mod
error_log_size should always equal error_log_offset.
32
21 (128 w/ big_map support)
typedef struct {
DWORD
Logical_writes
DWORD
Logical_reads
DWORD
Avg_queue_depth
DWORD
Cache_hits
DWORD
DWORD
DWORD
Cache_misses
Read_ahead_sector_count
Sectors_read
DWORD
Sectors_written
DWORD
Unaligned_reads
Technical documentation
33
101
www.compaq.com
DWORD
Unaligned_writes
DWORD
Non_seq_reads
DWORD
Non_seq_writes
DWORD
Avg_read_latency
DWORD
Avg_write_latency
2 DWORDs
Reserved
101
101
101
101
101
} VolumeData;
typedef struct {
DWORD
Read_requests
DWORD
Write_requests
DWORD
Max_queue_depth
10 DWORDs
Reserved
101
101
101
} PhysicalData;
typedef struct {
DWORD
Sample_interval
DWORD
DWORD
DWORD
Structure_version
Volume_mask
Percent_busy
Technical documentation
34
N/a
www.compaq.com
DWORD
DWORD
Command_list_count
Avg_command_list_latency
DWORD
Percent_active
DWORD
DWORD
13 DWORDs
VolumeData
PhysicalData
Logical_request_count
Max_outstanding_cmd_lists
Reserved
Volumes[MAX_UNITS];
Drives[MAX_DRIVES];
101
101
101
} PMSRecord;
Name
Meaning
Technical documentation
35
www.compaq.com
Word
disable
flag
1 = If posted write operations are configured and enabled, flush all of the
dirty buffers in the posted write memory for ALL logical drives. Also,
temporarily disable posted write and read-ahead operations to all logical
drives until either the adapter is reset or this command is issued again with
this flag set to 0. A command completion will not be given to the host until
an attempt was made to flush all dirty buffers to the drives media. If any
dirty buffers could not be flushed (due to a logical drive failure), this
command will return with a fatal error status, otherwise the status will be
ok.
0 = If posted write operations are configured and enabled, flush all of the
dirty buffers in the posted write memory for ALL logical drives. A command
completion will not be given to the host until an attempt was made to flush
all dirty buffers to the drives media. If any dirty buffers could not be flushed
(due to a logical drive failure), this command will return with a fatal error
status, otherwise the status will be ok. If posted write operations are
configured but temporarily disabled due to the previous use of this
command, the operations will once again be enabled (along with readahead operations).
510
Bytes
reserved
Technical documentation
36
www.compaq.com
Option ROM
A Compaq internal PCI array controller must be configured as First via the System Configuration
Utility in order for Interrupt 13h BIOS (boot) support to be enabled. BIOS support in the Option
ROM includes Virtual DMA Services (VDS) support for running under Windows 3.1/95/98 without
necessitating a device driver.
BIOS
Function
Actual
Function
in BIOS
AX
0x00
Reset
Exit:
Success
Drive
0x01
Get Status
Read
0x03
Write
Write
0x04
Verify
0x05
Format Track
0x08
Get Drive
Parameters
Write from
bit bucket
Return drive
params
Exit: Status
of previous
BIOS call
Entry:
AL=Sector
Count, Exit:
Status
Entry:
AL=Sector
Count, Exit:
Status
Entry:
AL=Sector
Count, Exit:
Status
Exit: Status
Drive
0x02
Nothing
(Pass along
to prior int13
handlers)
Return byte
in 40:74 (HD
Status)
Read
0x09
Nothing
0x0C
Init Drive
Parameters
Seek
0x0D
Alt Reset
Nothing
0x10
Test Drive
Ready
Checks unit
status
0x11
Recalibrate
Nothing
0x12
RAM
Diagnostic
Drive
Diagnostic
Nothing
Controller
Diagnostic
Nothing
0x13
0x14
Checks C/H
params
Checks unit
status
Technical documentation
ES:BX
CX
DL
DH
Buffer Addr
Cyl/Sector
Drive
Head
Buffer Addr
Cyl/Sector
Drive
Head
Cyl/Sector
Drive
Head
Cyl
Drive
Head
Max
Cyl/Sector
Entry:
Drive, Exit:
Total # of
int13 hard
drives in
system
(from
40:75)
Drive
Exit: Max
head
Cyl
Drive
Head
Exit:
Success
Exit:
Success
Exit: Error if
hung ctlr or
invalid C/H
Exit:
Success
Exit: Error if
volume not
OK
Exit: Error if
hung ctlr
Exit: Error if
hung ctlr
Exit: Error if
volume not
OK
Exit: Error if
hung ctlr
Drive
Drive
Drive
Drive
Drive
Drive
37
www.compaq.com
DS:SI
0x15
Read Drive
Type
Return drive
type info
Exit: AH=3,
AL=0
0x19
0x41
Park Heads
Check
Extensions
Present
Flush cache
Return True
Exit: Status
Exit:
AL=Junk
0x42
Extended
Read
Extended
Write
Extended
Verify
Extended
Seek
Read
Exit: Status
Drive
Write
Exit: Status
Drive
Exit: Status
Drive
Drive
Extended Get
Drive
Parameters
(Compaq
Unique)
Disable IRQ
Return drive
params
Exit: Error if
hung ctlr or
invalid
block #
Exit:
Success
Exit:
Success
Drive
Entry:
AL=New
BIOS
Flags, Exit:
Success
Drive
0x43
0x44
0x47
0x48
0xC0
0xC1
(Compaq
Unique)
Configure
BIOS Flags
Disables
IRQ Support
for this drive
(use polling
mode)
Configure
BIOS Flags
until next
reboot
Technical documentation
Exit:
CX:DX=#
of sectors
on drive
(Cyl count
truncated
to 1024)
Entry:
BX=0x55aa,
Exit:
BX=0xaa55
Exit: CX=1
Entry:
DL=Drive,
Exit: (See
CX:DX)
Exit: (See
CX:DX)
Drive
Drive
Drive
38
www.compaq.com
Ptr to ext
packet
Ptr to ext
packet
Ptr to ext
packet
Ptr to ext
packet
Ptr to ext
param
table
Interrupt 0x13 BIOS Status codes that may be returned are as follows:
SENSE_OP_FAILED
WRITE_FAULT
UNDEF_ERROR_CPM
UNDEF_ERROR_CPFF
UNDEF_ERROR
EJECT_REQUEST_FAILED
LOCK_COUNT_EXCEEDED
VOL_IN_USE
VOL_NOT_REMOVABLE
VOL_LOCKED_IN_DRIVE
VOL_NOT_LOCKED
DRIVE_NOT_READY
ATTACH_FAILED
SEEK_OP_FAILED
CONTROLLER_FAILED
ECC_CORR_DATA
BAD_ECC
BAD_BLOCK_FLAG
DMA_BOUNDARY
DRV_PARM_FAILED
RESET_FAILED
SECTOR_NOT_FOUND
WRITE_PROTECTED
ADDR_MARK_NF
BADCMD
SUCCESS
0xFF
0xCC
0xBD
0xBC
0xBB
0xB5
0xB4
0xB3
0xB2
0xB1
0xB0
0xAA
0x80
0x40
0x20
0x11
0x10
0x0A
0x09
0x07
0x05
0x04
0x03
0x02
0x01
0x00
Technical documentation
39
www.compaq.com