Sie sind auf Seite 1von 39

Copyright Compaq Computer Corporation, Inc.

Compaq Host-Based PCI Array Controller Firmware


Specification
SMART-2/P, SMART-2DH, SMART-2SL,
Smart Array 221, Smart Array 3100ES, and Smart Array 3200

(derived from FWSPEC.DOC Version 2.93)


March 15, 1999

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

Copyright Compaq Computer Corporation, Inc.

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

14 (30 with 3.0


or higher
firmware)
PCI (bridge)

7 (15 with 3.0


or higher
firmware)
PCI (bridge)

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


SCSI
56mb
Read/Write
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

Copyright Compaq Computer Corporation, Inc.

PCI Identification
Product

Vendor/Device ID of
PCI-to-PCI bridge

Vendor/Device ID of
PDPI device behind
bridge

PCI Board ID (PDPI


PCI config reg 0x2C)
read as a Dword

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

Copyright Compaq Computer Corporation, Inc.

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

Smart Array 3100ES:


15 14 13 12 11
7
6
5
4
3

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

Copyright Compaq Computer Corporation, Inc.

FIFO Command Interface

The interface is multi-threaded capable of maintaining as many outstanding threads as the


hardware can consume.

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

Alignment of Command List in host


memory.

All Command Lists must begin on a double-word


(32 bits) address boundary.

Alignment of Request Blocks


within a Command List.

All Request Blocks within a Command List must


begin on a double-word (32 bits) address
boundary.

Maximum Scatter/Gather
Elements per Request.

32 (recommended)

Scatter/Gather Buffer Size


Resolution

Each scatter/gather buffer must be a multiple of a


double-word (32-bits).

Error Status Updated in Host


Memory Request Block.

Yes

Maximum Command List Size

4K Bytes

Bad Command List Error.

Bit 0 of the Command List address returned via


the Command Completion FIFO register will be
set to indicate a bad command list error. (No
status posted in host memory.)

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

Copyright Compaq Computer Corporation, Inc.

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

Relative Address Offset


0x0004
0x0008

www.compaq.com

Copyright Compaq Computer Corporation, Inc.

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).

Interrupt Mask register, 32 Bits Wide, offset 0x0c


This register may be read or written with the desired value. A bit value of 1 indicates an
unmasked interrupt. A bit value of 0 indicates a masked interrupt.
Bit 0: Command Completion FIFO NOT EMPTY mask bit.
Bit 1: Command Pointer FIFO NOT FULL mask bit.
All other bits: Reserved. Should all be set to zero.
Interrupt Status register, 32 Bits Wide, offset 0x10
This is a read-only register indicating the status of each interrupt level. A bit value of zero is
not active. A value of 1 is active. An interrupt is only generated for a condition when its
corresponding bit in the Interrupt Mask register is set to unmask. The bit position meanings
are relative to the Interrupt Mask register (above).
Interrupt Pending register, 32 Bits Wide, offset 0x14
This is a read-only register indicating the pending interrupt condition of each interrupt level.
This is essentially a logical and of the Interrupt Mask register and the Interrupt Status

Technical documentation

www.compaq.com

Copyright Compaq Computer Corporation, Inc.

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

Copyright Compaq Computer Corporation, Inc.

Command List Data Structures


The structure of each command list built in host memory is as follows. All of the data structures
below are packed. That means that there are no memory gaps between any fields of all of the
data structures. Multiple byte fields are in little endian format.

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.

This structure is defined below.

Field Name

Size in Bytes

Meaning

Logical Unit Number

The logical unit number pertaining to every


request in this command list. Valid range is
from 0 to 31.

Reserved

Must be 0.

List Size

This is the total size of the command list in


double words (32-bits). Sizes that are not
double word multiples must be rounded up to
the next double word 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.

Command List Header

Request Block
Field Name
Request Header
Scatter/Gather Array

Pass-Through Command
Data

Technical documentation

This is only applies to pass-through


commands. See the specific controller
specification for the meaning of this data.

www.compaq.com

Copyright Compaq Computer Corporation, Inc.

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

Scatter Gather Count

Reserved

Note: If a Bad Command List error occurs,


this field will not be updated.
Logical block number for this request.
Logical block count for this request (for
Read/Write commands).
Number of Scatter/Gather elements in the
array.
Must be 0.

Scatter Gather Array


Field Name
Byte Count
Physical Address

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

Copyright Compaq Computer Corporation, Inc.

Array Controller Command Protocol Support


The following interface limitations are common to all of the controllers described in this document.
Feature
Software Interface
Multiple outstanding
commands
Maximum addressable host
memory
Maximum sectors in a single
logical drive
Maximum data in one I/O
request in sectors
Maximum command list size
Maximum requests per list
Maximum # of scatter/gather
elements per request

Compaq PCI Array Controllers


PDPI FIFO
Yes
4GB
0xFFFFFFFF
0xFFFF
16K
32
32

Normal Mode Command Set Table


Command

BMIC
Code

SMART-2/P, SMART-2DH,
SMART-2SL, Smart Array 221

Smart Array 3100ES, Smart


Array 3200

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

All other command codes are reserved.

Technical documentation

11

www.compaq.com

Copyright Compaq Computer Corporation, Inc.

Normal Mode Command Set Details


0x11: Identify Controller
This command is used to determine various information about the controller and the number of
configured logical drives.
Size
Byte
DWord

Name
configured logical
drives
Configuration signature

4 Bytes

ASCII firmware revision

4 Bytes

ROM firmware revision

Byte
4 Bytes
DWord

hardware revision
Reserved
drive present bit map

DWord

External drive bit map

If a drive is attached and not failed (see


above map) and the drives are believed to
be located external to the host computer
box, it will have its respective bit in this
map set to a 1.

DWord

Board id

This is the board ID of the controller (same


as PCI configuration register 0x2C).

Byte

Reserved

Technical documentation

Meaning
Number of configured logical drives.

Other

This is the signature assigned through the


Set Configuration command.
Revision level of the current running
firmware in ASCII characters.
Revision level of the firmware stored in the
ROM in ASCII characters.
Revision level of the hardware.
A bit map indicating drives that are
attached and not failed. For operational
drive, the corresponding bit in the map is
set to a 1 (e.g. If the first drive of the
second SCSI bus and the first drive of the
first SCSI bus are both attached, bits 0 and
7 will be set to 1)

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

Copyright Compaq Computer Corporation, Inc.

DWord

Non-disk map

5 Bytes
Byte

Reserved
Marketing_revision

Byte

Controller_flags

Bit-map of non-disk devices attached to the


controller.

Hardware revision designation (A, B, or


C).
Bits 0-2: Reserved

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

Bit 3: MORE_THAN_7_SUPPORT. If this


bit is set, the firmware really supports more
than 7 drives per SCSI bus (15 to be
exact). If this bit is set, the
BIG_MAP_SUPPORT_BIT will also be set
(the reverse isnt necessarily true).
Bit 4-6: Reserved
Bit 7: BIG_MAP_SUPPORT_BIT. Set (1)
if this version firmware supports the new
big drive assignment maps (128 bits) and
the big physical drive numbering (0x80+).
2 Bytes
Byte

Reserved
SCSI chip count

Dword
Dword

Reserved
Controller Clock

Byte

Drives per SCSI bus

8 Hwords
(128 bits)

Big drive present bit


map

8 Hwords
(128 bits)

Big external drive bit


map

Technical documentation

The number of SCSI busses on this


controller.
This is the current controller clock value.
The current controller clock indicates the
time since controller reset in 1/10ths of
seconds.
If BIG_MAP_SUPPORT_BIT is set, this
byte indicates how many bits in the big
drive bit-maps correspond to each SCSI
bus. (For byte-alignment and future
expansion purposes, the count may include
drive positions that cannot physically be
installed [this field is normally 16]).
Same as drive present map above, except
Drives per SCSI bus indicates how many
bits correspond to each SCSI bus.
Same as external drive bit map above,
except Drives per SCSI bus indicates
how many bits correspond to each SCSI
bus.

13

f/w 3.00
only

big_map
support only.

big_map
support only.
big_map
support only.

www.compaq.com

Copyright Compaq Computer Corporation, Inc.

8 Hwords
(128 bits)

Big non-disk map

Same as non-disk map above, except


Drives per SCSI bus indicates how many
bits correspond to each SCSI bus.

big_map
support only.

Note that a Compaq SCSI enclosure will


respond at the SCSI ID of the initiator
(controller), so bit 7 or 6 in each hword may
be set depending on the initiator ID. The
current SCSI initiator ID can be read via the
Sense Bus Parameters command.
Original physical drive numbering scheme:

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

Big Physical Drive Numbering scheme if Drives_Per_SCSI_Bus = 16:

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

Notes on drive numbering charts shown above:


Busses specified via the command interface begin with 0, but bus (i.e. port) numbers reported
to users must always begin with 1.
In firmware with Big Drive Numbering support, the original numbering may be used if desired
for those drives that can be accessed that way.
In the original drive numbering scheme, physical drive number corresponded to bit position in
the original drive maps. This is a little different in the new scheme.
The Big Numbering scheme shown above assumes Drives_Per_SCSI_Bus is 16.
Busses 3-7 are for future expansion.

Technical documentation

14

www.compaq.com

Copyright Compaq Computer Corporation, Inc.

0x10: Identify Logical Drive


This command is used to determine the size and fault tolerance mode of a logically configured
drive.
Size
Word
DWord
16 Bytes

Name
block size in bytes
blocks available
logical drive parameter table

Byte

fault tolerance

2 Bytes

Reserved

Meaning

Standard drive parameter table entry


format.
0 = No fault tolerance (RAID 0)
1 = Data Guard (RAID 4)
2 = Mirroring (RAID 1)
3 = Distributed Data Guard (RAID 5)

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

Logical drive label

Technical documentation

4-byte identifier assigned to this logical


drive. Value will be 0xffffffff if it has not
been set through the label logical
drive command (0x57, see below) or if
the logical drive is unused.
ASCII string or other designator
assigned to this logical drive. All bytes
will be zero until set through label
logical drive command. All 64 bytes
will be returned by the controller.

15

www.compaq.com

Copyright Compaq Computer Corporation, Inc.

0x12: Sense Logical Drive Status


This command is used to see error and problem information for a logical drive.
Size
Byte

Name
unit status

DWord

drive failure map

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

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.

The number of sectors left to either rebuild a


drive or expand a volume. Only one operation
can occur at a time per unit status field. If
neither of those operations are currently
occurring on any logical volume, this field will
be 0. This field is a global (i.e. the value in
this field does not apply to this logical volume
unless the state of this volume is
REBUILDING or EXPANDING).

16

www.compaq.com

Copyright Compaq Computer Corporation, Inc.

Byte

drive rebuilding

If a drive is rebuilding per the unit status field,


this field indicates which drive is rebuilding.
Otherwise, this field should be ignored since it
has no meaning (especially during an expand
operation.
If the SCSI ID of the drive thats rebuilding is
greater than 7, bit 7 will be set indicating that
the drive number returned in this field is in the
new big numbering scheme.

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

Bit-map indicating which physical drives in the


logical volume are in a replacement state.

DWord

active spare map

Bit-map indicating which physical drives are


currently being substituted with a spare drive.

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

Copyright Compaq Computer Corporation, Inc.

Byte

spare status

32 Bytes

spare to replace
map

DWord

replaced marked ok
map

Byte

media has been


exchanged

Byte

cache failure

Byte

expand failure

Technical documentation

Bit 0: At least one physical drive is designated


as an available on-line spare to this
logical drive.
Bit 1: An activated on-line spare drive is
rebuilding.
Bit 2: At least one activated on-line spare
drive is completely rebuilt on this logical
drive.
Bit 3: At least one activated on-line spare
drive has failed.
Bit 4: At least one of the designated physical
drive is currently activated as an on-line
spare for this logical drive.
Bit 5: At least one of the physical drives
designated as an on-line spare drive
has not been activated and is currently
available for activation.
Bits 6-7: Reserved.
This array maps spare physical drive IDs to
the physical IDs of the drives that have been
replaced. Each field is valid only if the on-line
spare drive ID is activated as an on-line
spare. (Corresponding bit is set in the
active_spare_map field).
Drive numbers listed in this map will use the
original numbering scheme, if possible. If the
SCSI ID of the replaced drive is greater than
7, bit 7 will be set indicating that the drive
number returned in this field is in the new big
numbering scheme.
A map of the drives that have been replaced
and subsequently marked OK but cannot be
rebuilt by the firmware, such as replacement
drives in a non-fault-tolerant configuration or
when multiple drives are replaced in a faulttolerant configuration. This map will
automatically be cleared the next time the
controller is reset.

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.

For a failed volume, this field will be set to 1 to


indicate that a failed drive(s) has been
replaced and the volume is ready to go to a
non failed state. Otherwise, this field is zero.
The state transition will occur after a Accept
Media Exchange command is issued.
If volume was failed due to cache data loss,
this field will be non-zero.
If volume was failed due to capacity
expansion failure, this field will be non-zero.

18

www.compaq.com

Copyright Compaq Computer Corporation, Inc.

Byte

Unit_flags

8 Hwords
(128 bits)

Big drive failure


map

128
Hwords

Big remap count

8 Hwords
(128 bits)

Big replacement
drive map

8 Hwords
(128 bits)

Big active spare


map

128
Bytes

Big spare to replace


map

8 Hwords
(128 bits)

Big replaced
marked OK map

Byte

Big drive rebuilding

Technical documentation

Bit 0: Set if previous rebuild of this volume


aborted due to a read error.
Bit 1: Set if previous rebuild aborted due to
failure of the destination drive (write error).
Bits 2-7: Reserved
Same as drive failure map above, except
Drives per SCSI bus indicates how many
bits correspond to each SCSI bus.
Same as remap count above, except Drive
per SCSI bus indicates how many words
correspond to each SCSI bus.
Same as replacement drive map above,
except Drives per SCSI bus indicates how
many bits correspond to each SCSI bus.
Same as active spare map above, except
Drives per SCSI bus indicates how many
bits correspond to each SCSI bus.
Same as spare to replace map above, except
Drives per SCSI bus indicates how many
bytes correspond to each SCSI bus. All drive
numbers listed in this map will be using the
new big numbering scheme.
Same as replaced marked OK map above,
except Drives per SCSI bus indicates how
many bits correspond to each SCSI bus.
Same as drive rebuilding, but the drive
number is based upon the new numbering
scheme (0x80 to
0x80+Drives_Per_SCSI_Bus for drives on the
first SCSI bus, etc).

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

Copyright Compaq Computer Corporation, Inc.

0x13: Start Recover


This command is used to give an adapter permission to rebuild replaced drives in fault tolerant
configurations. There is no data structure associated with this command; if multiple drives need to
be rebuilt, they will automatically be rebuilt without issuing this command additional times. This
command is normally issued only by the system ROMs during POST after the user is queried
whether it is OK to begin data recovery. This command is not necessary if drives are hot-inserted
while the controller is operating in normal mode since in that case Rebuild (automatic data
recovery) will start automatically

0x15: Identify Physical Drive


This new command returns various information about a physical drive attached to the controller.
Some of this information was previously available only via the SCSI pass-through command. In
this command, the MSB of the block number field (bits 24-31) in the request must contain the
zero-based number of the physical drive to query (i.e. 0-6 for drives on the first SCSI bus, 7-13 for
drives on the second). In firmware with BIG_MAP support, set bit 31 of the block number field to
access more drives per SCSI bus (i.e. 0x80 to 0x80+Drives_Per_SCSI_Bus to access SCSI IDs
0 to Drives_Per_SCSI_Bus on the first SCSI bus). Information regarding a Compaq SCSI
enclosure can be read by specifying a SCSI ID equal to the initiator ID (the initiator ID is returned
via Sense Bus Parameters). A NON-FATAL error is returned if the drive is failed or not installed.
If a NON-FATAL error is returned, this data structure may be partially incorrect (if a hot-plug
replacement drive fails during initialization, for instance, data may still be returned for the drive
previously installed in this position). Otherwise, the data structure returned is as follows:
Size
Byte
Byte
Word
DWord
DWord

Name
SCSI Bus
SCSI ID
block size in bytes
total blocks
reserved blocks

40 Bytes

drive model

40 Bytes

drive serial number

8 Bytes

drive firmware revision

Byte

SCSI inquiry bits

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)

Bit 0 set if drive present and operational at this position.


Bit 1 set if non-disk device detected at this position.
Bit 2 set if wide SCSI transfers are currently enabled for
this drive.
Bit 3 set if synchronous (fast or ultra) SCSI transfers are
enabled for this drive. If bit 6 is set, bit 3 will also be set.
Bit 4 set if this drive is in a narrow drive tray.
Bit 5 set if drive is wide, but firmware reverted to narrow
transfers on this drive due to wide SCSI transfer failure.
Bit 6 set if Ultra-SCSI transfers are enabled for this drive.
If bit 7 is set, bit 6 will also be set.
Bit 7set if Ultra-2 SCSI transfers are enabled for this drive.
(bit 7 defined in f/w 3.02 only)

20

www.compaq.com

Copyright Compaq Computer Corporation, Inc.

Byte

more physical drive


flags

Byte
Byte

Reserved
Yet More Physical
Drive Flags

Valid for f/w 1.50 only.


Bit 0 set if drive supports S.M.A.R.T. predictive failure
according to the drives mode page 0x1C (byte 2, bit 3, is
changeable).
Bit 1 set if S.M.A.R.T. predictive failure (01/5D) errors are
recorded for this drive. This bit should be ignored if the
drive does not support S.M.A.R.T. (according to bit 0).
Bit 2 set if S.M.A.R.T. predictive failure is enabled
according to the saved parameters in the drives mode
page 0x1C (byte 2, bit 3, is set). Also see bits 0 & 1,
above.
Bit 3 set if S.M.A.R.T. predictive failure (01/5D) errors are
recorded for this drive since the last controller reset. This
bit should be ignored if the drive does not support
S.M.A.R.T. (according to bit 0).
Bit 4 set if drive is attached to the external SCSI connector
(f/w 2.50)
Bit 5 set if drive is configured as part of a logical volume
(f/w 2.50).
Bit 6 set if drive is configured to be a spare (f/w 2.50).
Bit 7 set if controller detected that the drive write cache
was enabled in the saved Caching_Parameters mode
page at the time when the drive was spun up (if a
configuration exists, the write cache will subsequently be
disabled in the saved page by the controller based upon
the setting in Set Controller Parameters). (f/w 2.60).
Bits 0-5: Reserved
Bit 6 set if drive write cache is enabled in the current
Caching_Parameters mode page.
Bit 7 set if drive write cache setting is changeable and
drive has a safe write cache according to the WCE bit
in the default Caching_Parameters mode page.
(f/w 2.84 only)

5 Bytes
2 Bytes

Reserved
Phys_Connector

Byte
Byte

Reserved
Phys_Bay_in_Box

Indicates, in ASCII, which connector on the controller that


this drive is attached to (i.e. J2). Multiple connectors may
exist for the same SCSI bus. (f/w 2.50)
A number corresponding to the physical drive bay in the
enclosure in which this drive resides. 0xFF is returned if
the bay number is unknown. (f/w 2.50)

0x16: Blink Drive Tray LEDs


This command flashes all LEDs on the selected drive trays for the requested period of time for
drive, SCSI port, or controller identification purposes. This command has no effect on non-HotPluggable drives.
Size
Dword

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

Copyright Compaq Computer Corporation, Inc.

256 Bytes

Blink/seek enable

For each drive on the controller, this byte indicates whether


the LEDs on the corresponding drive tray should be
flashed. Each byte should be 0 for normal operation (no
blinking). When non-zero, each bit is defined as follows:
Bit 0: Blink all LEDs on tray. 1 = Blink all LEDs on
corresponding drive tray until time expires.
Bits 1-7: Reserved.
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 0x80 to
0x80+Drives_Per_SCSI_Bus correspond to SCSI IDs on the first SCSI
bus and bytes below 0x80 should be 0. If Drives_Per_SCSI_Bus is 16,
bytes 0x90-0x9F would correspond to drives on the second SCSI bus.

248 Bytes

Reserved

Should be 0

0x17: Sense Blinking Drive Tray LEDs


This command returns information indicating which drive tray LEDs are blinking due to a previous
Blink Drive Tray LEDs command.
Size
Dword

Name
Blink duration

Dword

Blink time elapsed

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

0x18: Identify Logical Drive, Extended


This extended-structure variation of the Identify Logical Drive command is used to determine the
size and fault tolerance mode of a logically configured drive. See command code 0x10, Identify
Logical Drive, for differences in the returned data structure.

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

Copyright Compaq Computer Corporation, Inc.

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.

0x31: Write Media


This command is identical to the Write command, except that the data will not be transferred into
the posted-write cache memory and a completion indication will not be sent to the host until the
data has been written to the drives

0x40: Reset Controller


This command resets the controller firmware, causing the firmware image to be reloaded from
ROM. There is no data structure associated with this command. Completion status is returned
before the firmware is reset.

0x57: Label Logical Drive


This command may be used by the host to assign unique identification data to a logical drive. A
dword value and a 64-byte field are available for storage of whatever information is desired or
required for recognition of this logical drive. These two fields are returned in the buffer associated
with the Extended Identify Logical Drive command (0x18, see above). The data structure
associated with this command is as follows:
Size
Dword
64 Bytes

Name
Logical drive identifier
Logical drive label

Meaning
ASCII label or other data all 64 bytes will be stored and
returned to the host.

0x60: Set Surface Delay


This command is used to define the length of time following host-initiated I/O activity before the
background surface analysis (Auto Reliability Monitoring) activity begins on an otherwise idle
controller. The data buffer to be filled in by the host is shown below.
NOTE: Following initial configuration of a RAID 4/5 logical drive, the surface analysis delay will
temporarily be reduced to 1 second of idle time regardless of the value specified below. This is to
initialize the consistency of the parity data as soon as possible.
Size
Word

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

0x65: Sense Bus Parameters


This command will return information about storage enclosures (such as ProLiant) attached to a
given bus. This provides system management drivers/agents a mechanism (other than SCSI
pass-through) to obtain Inquiry information from a SCSI enclosure.
This new command is issued like any other sense type command, except for the low order byte
of the block number field in the request is used to specify the SCSI bus number (starting from 0):
bit 31
bit 0
Rsvd (must be 0)

Technical documentation

Rsvd (must be 0)

Rsvd (must be 0)

23

SCSI Bus

www.compaq.com

Copyright Compaq Computer Corporation, Inc.

The data structure the command returns is as follows:


Size
struct
Inquiry_data

Name
inquiry

Byte

inquiry valid

Dword

installed drive map

32 Words

hot plug count

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

Copyright Compaq Computer Corporation, Inc.

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)

Big installed drive


map

8 Hwords (128
bits)

Big bus bit map

8 Hwords (128
bits)

Big box bit map

Byte

Installed box map

Byte

More connection
info

2 Bytes
40 Bytes

reserved
Chassis serial
number

Technical documentation

Value from the SCSI chips revision byte in PCI


configuration space
Fan status (byte 6) from the enclosure alarm status
page, only valid in certain versions of enclosure
firmware/hardware. (f/w 1.50)
Up to 64 more bytes of Inquiry data that a ProLiant
Storage System might return on an Inquiry command.
Vendor and device ID of the SCSI controller from PCI
configuration space
Indicates which bits in the drive bit maps correspond to
bits on the SCSI 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. (f/w 1.30)
SCSI ID of the initiator on this bus (f/w 1.86)
SCSI ID used to access this enclosure (f/w 2.50)
Indicates, in ASCII, which connector on the controller
that this enclosure is attached to (i.e. J2). Multiple
connectors may exist for the same SCSI bus. (f/w
2.50)
Same as installed drive map above, except Drives per
SCSI bus indicates how many bits correspond to each
SCSI bus. (big_map support only)
Same as bus bit map above, except Drives per SCSI
bus indicates how many bits correspond to each SCSI
bus. (big_map support only)
Bit map indicating which drive positions (drive present
or not) are in the specified enclosure. Drives per SCSI
bus indicates how many bits in this map correspond to
each SCSI bus. (big_map support only)
Bit map indicating which enclosure/box backplane
processors were found on this SCSI bus. Bit 0 set
indicates a backplane processor responded to a selfselection at the SCSI initiator ID. Bit 1 set indicates a
backplane processor responded at SCSI ID 15.
(big_map support only)
Bit 0: LVD/Single-Ended SCSI bus flag. If set, this
SCSI bus is currently in LVD mode.
Bits 1-7: Reserved
Enclosure serial number, current length is 24 bytes (f/w
2.50)

25

www.compaq.com

Copyright Compaq Computer Corporation, Inc.

Alarm Structure (21 bytes)


Size
Byte

Name
alarm status

Byte

temp status

Byte
Word

valid alarm bits


alarm count

8 Words

specific alarm counts

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.

0x66: Sense Subsystem Information


This command is used to sense information pertaining to the entire storage subsystem including
hardware component serial numbers and revisions as well as programmed names, etc.
The data structure the command returns is as follows:
Size

Name

Meaning

Byte

Primary Slot Number

Smart Array 3100ES only: 1 or 2 for right &


left slot (not the actual physical slot number in
the host).

3 Bytes

Reserved

32 Bytes

Chassis Serial Number

8 Bytes

Reserved

32 Bytes

Primary array serial number

NULL terminated ASCII serial number of this


array controller.

32 Bytes

Primary cache serial number

NULL terminated ASCII serial number of the


cache daughter-card connected to this array
controller.

8 bytes

Reserved

Technical documentation

The serial number of the last server that went


through POST with this controller installed.

26

www.compaq.com

Copyright Compaq Computer Corporation, Inc.

32 Bytes

Secondary array serial number

NULL terminated ASCII serial number of the


linked array controller.

32 Bytes

Secondary cache serial number

NULL terminated ASCII serial number of the


cache daughter-card connected to the linked
array controller.

Technical documentation

27

www.compaq.com

Copyright Compaq Computer Corporation, Inc.

0x70: Sense Surface Status


This command is used to monitor the progress of surface analysis activity on the physical drives
of the adapter to which this logical drive is found. The data buffer returned to the host is shown
below.
Size
98 Bytes
Word
Word

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

Amount of time remaining before surface analysis


activity will begin. (In tenths of a second.)
Total amount of idle time that must expire before
surface analysis activity begins. (In tenths of a
second.) This may be changed by issuing a Set
Surface Delay command.
For each physical drive, this is the last block to
which a surface analysis read command was
issued. 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.
For logical drives 0-7:
Bit 0: Set (1) if surface analysis consistency
initialization has completed on this logical drive. If
the fault-tolerance mode is RAID 4 or RAID 5,
backed-out (regenerative) writes will be enabled,
thereby increasing performance.
Bit 1: Set (1) if surface analysis consistency
check failed
Bit 2: Set (1) if surface analysis has not started on
this logical drive because it hasnt been written to
yet. Note in f/w 2.72, a write to any logical drive
on the controller is sufficient to clear this flag for all
logical drives.
Bits 3-7: Reserved
For logical drives 0-7: The last block number that
surface analysis found to be inconsistent.
Amount of time in seconds for the last surface
analysis pass to complete for each logical unit.

f/w 2.00 only

Number of surface analysis passes for each


logical unit.

f/w 2.00 only

Number of times the controller was reset since the


last surface analysis pass on each logical unit
completed
Number of blocks reassigned due to surface
analysis.
Same as Current Block above, except returns
data for up to 128 drives.
Same as surface analysis status array above,
except returns data for up to 32 logical volumes.

f/w 2.00 only

Same as inconsistent block array above, except


returns data for up to 32 logical volumes.

big_map
support only.

28

f/w 2.00 only


big_map
support only.
big_map
support only.

www.compaq.com

Copyright Compaq Computer Corporation, Inc.

0x90: Pass-through Operation


This command is used by the host to directly submit a command to a physical SCSI drive. This
command can be used, for example, as a diagnostic tool or to determine what types of drives are
connected to SMART and its external box.
When a pass-through operation command is submitted, the firmware controls all of the drive
programming and data transfer programming so that the host can just wait for the command to
complete.
The command list structure that is submitted to the host for pass-through operation commands
has been modified to include the additional required information. The additional information is
contained in an area that has been appended to the Request Block Structure of a command list. A
special version of this command is supported that uses a pointer to this structure instead of
appending it to the end of the request. That command is called pass-through operation A and is
defined after this section.
The structure of the modified command list is found at the end of this section. Some of the fields
that are normally used in a command list have no meaning for a pass- through operation
command. The fields that have an asterisk to the left signify which fields are relevant in the
command list for this command. The fields in boldface are additional fields that have been
appended to the end of the typical Request Block Structure. Some of the new fields have not been
completely defined at this time, such as the flags field. The host data buffer is defined, as in a
typical command list, by the scatter / gather array for each logical request.
The number of bytes that need to be transferred is inferred by the controller from the sum of the
elements in the first scatter / gather array. This sum is equivalent to the maximum number of
bytes that will be transferred to or from the host.
The return error field in the request header of each logical pass-through operation command is
updated if there is an error processing the command or if the drive returns an error. If the status
register of the drive indicates that there is an error at the completion of a command, the device
status and machine error fields in the structure are updated to reflect the values found on the
drives. If the enable-autosense flag is set, sense information will also be returned in this
structure. Also, in case of error, the status field in the request header will be updated (either fatal
or non-fatal error code) to indicate the error. All of these fields should be initialized to zero before
the command is submitted.
The host must be careful to understand that some SCSI commands issued directly to physical
drives may change the adapters configuration data, the drives configuration parameters, data on
the drives, etc. which could affect the functioning of the adapter while servicing other logical
commands. In other words, thoroughly understand what commands are being issued and what
consequence they may have on the functioning of the adapter is required.
The pass-through operation command is issued according to the rules of the BMIC protocol
except for the minor modification of the Command List Structure. Therefore, the host may issue a
command list consisting of multiple logical requests involving multiple drives. This command
must always be issued to logical unit zero regardless of where the drive resides or whether or not
there is a configuration. Another restriction is that Pass-through Operation commands may not be
in the same command list as commands other than Pass-through operation commands.
The following structures define the command list for pass-through operation commands.
Command List Structure
Size
List Header Structure

Name
command list
header
request

Request Block Structure times the number of


requests

Technical documentation

29

www.compaq.com

Copyright Compaq Computer Corporation, Inc.

List Header Structure


Size
Byte
Byte
Word

Name
unit
reserved
list size in
dwords

Meaning
Must be 0
Must be 0

Request Block Structure


Size
Request Header Structure
Scatter/Gather Structure times the SG
count.
SCSI Parameters Structure

Name
logical request
header
scatter/gather array
parameters

Request Header Structure


Size
Word
Byte
Byte
DWord
Word
Byte
Byte

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

SCSI Parameters Structure


Size
Byte

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

Copyright Compaq Computer Corporation, Inc.

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

Bit 0: Set (1) will disable disconnect capability.


Bit 1: Set (1) will force negotiation for 5Mhz asynchronous
transfers.
Bit 2: Set (1) will force transfer direction to be OUT (controller to
drive) for unfamiliar SCSI commands. Otherwise the direction will
be determined by the controller on the basis of the SCSI
command code.
Bit 3: Set (1) will force negotiation for 10Mhz fast-SCSI
synchronous transfers.
Bit 4: Set (1) will force negotiation for narrow (8-bit) transfers.
Bit 5: Set (1) will force negotiation for wide (16-bit) transfers.
Bit 6: Set (1) will force negotiation for 20Mhz ultra-SCSI transfers.
Bit 7: Set (1) causes controller to autosense and return some
sense information to the host (f/w 1.50).
Bit 8: Set (1) will force negotiation for 40Mhz Ultra-2 SCSI
transfers if bus mode = LVD despite any bus faults that may have
occurred previously.
Bits 9-31: Reserved.
If Force Sync/Async or Force Wide/Narrow bits are not set,
transfer mode used will be the mode supported by the drive and
enclosure (unless restricted using the force_narrow or
force_async flags in the Set Controller Parameters command).
Status byte returned by the SCSI drive. See SCSI spec for details.
Initialize to 0.
Firmware state machine (CAM) error code. Initialize to 0.
Size of the associated SCSI command descriptor, in bytes.
Byte 0 of the sense data indicating if the sense information is valid
(Bit 7 set) and the error code (Bits 6-0). (f/w 1.50, valid only if
flags bit 7 is set).
Byte 2 of the sense data indicating filemark (Bit 7), EOM (Bit 6),
ILI (Bit 5), and sense key (Bits 3-0). Bit 4 is reserved. (f/w 1.50,
valid only if flags bit 7 [AutoSense] is set and machine_status
returned is SMGR_CMPL_W_ERR).
Bytes 3-6 of the sense data indicating device-type or command
specific information. (f/w 1.50, valid in cases indicated above).
Byte 12 of the sense data indicating an additional sense code to
the sense key. (f/w 1.50, valid in cases indicated above).
Byte 13 of the sense data indicating an additional sense code
qualifier. (f/w 1.50, valid in cases indicated above).
The SCSI command descriptor block.

0x94: Reset SCSI Device


This command is used to reset a SCSI drive or an entire SCSI bus.
Size
Byte
Byte

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

Copyright Compaq Computer Corporation, Inc.

0x98: Pause Background Activity


This command is used to temporarily stop all controller background activity, including surface
analysis, M&P, rebuild, and capacity expansion. Background activity will be stopped upon
completion of this command.

0x99: Resume Background Activity


This command is used to resume the background activity on the controller. See command above.
Alternate ways to re-enable background activity, once stopped by command 0x98, is by a
controller reset or power cycle.

0xA6: Get Physical Drive Error Log


This function returns a log of previous errors for a particular drive. For this BMIC function, the
"block number" field in the request block is redefined to contain the following byte-sized elements:
bit 31

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;
};

// current service time (f/w >2.84)

// size of each log entry


// total number of used & available log entries
// current offset into error log
// total number of 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;

// 0=no error, 1=SCSI error, 2=CAM error


// SCSI command code
// Status of the SCSI operation
// CAM status
// Sense key as returned by Request Sense
// Qualifier as returned by Request Sense
// Sense code as returned by Request Sense
// bit 0=1 if the block field is valid,
// bits 1-6 = SCSI error code from byte 0 if != 0x70 (DAZ 3.10)
unsigned long block;
// Block as returned by Request Sense
unsigned long reference_time;
// Time stamp of error
unsigned short additional_information; // Additional information (not yet defined)
unsigned char reserved[..];
// defined by error_log_entry_size

};

Technical documentation

32

www.compaq.com

Copyright Compaq Computer Corporation, Inc.

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.

0xA7: Start Controller Performance Monitoring (PMS)


This command enables background controller performance monitoring. (This is not the same
thing as M&P). This command must be issued once before issuing command 0xA7, as controller
performance monitoring is disabled by default for maximum controller performance. A bad
request error is returned if performance monitoring was already enabled. Data is automatically
cleared when monitoring is first started.

0xA8: Sample Controller Performance (PMS) Data


This command returns controller performance monitoring data, as described below. All counts,
maximums, and averages are calculated since the last clear and may wrap if clearing is infrequent
(less than once per hour). For this command, the block number field is interpreted as follows:
Bit 8 determines whether the internal data structure is cleared after the data is returned to the
host (set to 1 to clear).
Bit 9 determines whether averages are calculated by the firmware or raw data is returned in
the averages and percentile fields (f/w 1.96 only). When this bit is clear, averages are
calculated by the firmware. See comments in the table below for guidelines on the meanings
of specific fields when the raw data bit is set.
All other bits in the block number must be clear.
The data structure returned to the host is as follows (the right column is the PMS data-structure
version in which this parameter first appeared).
#define MAX_VOLUMES
#define MAX_DRIVES

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

Number of logical write requests submitted by the


host.
Number of logical read requests submitted by the
host.
Average number of logical read and write
requests queued. If the raw_data flag is set,
this field must be divided by sample_interval
(if non-zero) to calculate the true average.
Number of cache hits (host-generated logical
read requests which could be serviced entirely by
the cache without any disk access)
Number of cache misses
Number of sectors pre-fetched
Number of logical blocks read from this volume
by the host. Does not include any internally
generated read requests such as read-ahead,
capacity expansion, etc.
Number of logical blocks written to this volume by
the host. Does not include any internally
generated write requests such as cache flush,
capacity expansion, etc.
Number of unaligned read requests from the host.
An unaligned logical request is defined as one
that spans multiple physical drives but has a
block count smaller than or equal to the
distribution factor. (In f/w prior to version 2.62, an

33

101

www.compaq.com

Copyright Compaq Computer Corporation, Inc.

DWORD

Unaligned_writes

DWORD

Non_seq_reads

DWORD

Non_seq_writes

DWORD

Avg_read_latency

DWORD

Avg_write_latency

2 DWORDs

Reserved

unaligned logical request was defined as one that


spanned multiple physical drives and the starting
sector was not a multiple of the distribution
factor.)
Number of unaligned write requests from the
host. An unaligned logical request is defined as
one that spans multiple physical drives but has a
block count smaller than or equal to the
distribution factor. (In f/w prior to version 2.62, an
unaligned logical request was defined as one that
spanned multiple physical drives and the starting
sector was not a multiple of the distribution
factor.)
Number of non consecutive or non sequential
read requests from the host. A non-sequential
request is defined as a logical request with a
starting logical block that is not equal to 1 plus the
ending logical block of the previously received
logical request.
Number of non consecutive or non sequential
write requests from the host. A non-sequential
request is defined as a logical request with a
starting logical block that is not equal to 1 plus the
ending logical block of the previously received
logical request.
Average latency for logical read requests in
100ths of milliseconds. If the raw_data flag Is
set, this field must be multiplied by 128 and
divided by logical_writes (if non-zero) to
calculate the true average.
Average latency for logical write requests in
100ths of milliseconds. If the raw_data flag Is
set, this field must be multiplied by 128 and
divided by logical_reads (if non-zero) to
calculate the true average.

101

101

101

101

101

} VolumeData;
typedef struct {
DWORD

Read_requests

DWORD

Write_requests

DWORD

Max_queue_depth

10 DWORDs

Reserved

Number of physical (SCSI) read requests


generated from host and cache read-ahead
logical requests (not counting internal requests
such as surface analysis, rebuild, expand, M&P,
etc). Not accurate in f/w prior to version 2.08.
Number of physical (SCSI) write requests
generated from host and cache-flush logical
requests (not counting internal requests such as
surface analysis, rebuild, expand, M&P, RIS
saves, etc). Not accurate in f/w prior to version
2.08.
Maximum number of physical (SCSI) requests in
the queue for this drive, including both those
queued up on the drive and those on the array
controllers elevator queue.

101

101

101

} PhysicalData;
typedef struct {
DWORD

Sample_interval

DWORD
DWORD
DWORD

Structure_version
Volume_mask
Percent_busy

Technical documentation

Time since performance monitoring was last


cleared, in 10ths of seconds.
Version number for pms structure.
A bit-map of configured logical volumes.
Percentage of time (in percent) that the
controllers CPU is not just sitting in the idle
task. Note that background activity such as
surface analysis is not considered idle time. If
the raw data bit is set, this field must be

34

N/a

www.compaq.com

Copyright Compaq Computer Corporation, Inc.

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];

divided by sample_interval (if non-zero) to


calculate the correct value.
Number of command lists submitted by the host.
Average command latency in 100ths of
milliseconds. If the raw_data flag Is set, this
field must be multiplied by 128 and divided by
command_list_count (if non-zero) to calculate
the true average.
Percentage of time (in 10ths of percent) that at
least one logical request is outstanding. If the
raw_data flag Is set, this field must be divided
by sample_interval times 1000 (if non-zero) to
calculate the correct value.
Number of logical requests submitted by the host.
Maximum number of outstanding command lists.

101
101

Logical volume data see above


Physical drive data see above

101

} PMSRecord;

0xA9: Stop Controller Performance Monitoring (PMS)


This command disables the background controller performance monitoring. (This is not the
same thing as M&P)

0xC2: Flush/Disable Posted Write Cache


The purpose of this command is to force a flush all of the posted write dirty buffers to the drives
and return a completion status to the host when this has been completed. The command will also
optionally temporarily disable or enable posted write operations. After this operation has
completed, it is then safe to power-off the system without any data remaining in the posted-write
cache.
Once posted write operations have been temporarily disabled by this command they can be
enabled again by issuing the same command with the appropriate value in the command data
buffer. Also, posted write operations will be automatically enabled upon the next adapter reset
(cold or warm boot).
A command completion with an ok status is given to the host when all existing dirty buffers (if any)
have been flushed to the drives. 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.
The following is the data buffer associated with the Flush/Disable Posted-Write Cache command.
Note that this command is not logical drive specific and affects all configured logical drives.
Size

Name

Meaning

Technical documentation

35

www.compaq.com

Copyright Compaq Computer Corporation, Inc.

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

0xE0: Accept Media Exchange


This command, when issued to a logical drive, gives the controller permission to set the state of
the logical drive to OK if the logical drive is currently failed but has had its failed physical drives
replaced through hot-plug exchanges. Before this command is issued, the media has been
exchanged field in the Sense Logical Drive Status command will be set for each logical drive
that is in this failed state. After this command is issued, that field will be cleared. If the logical
drive is not in a failed state or has not detected exchanged media, the command will complete
with a fatal error.

Technical documentation

36

www.compaq.com

Copyright Compaq Computer Corporation, Inc.

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.

Interrupt 0x13 BIOS Functions


The following Interrupt 0x13 functions are supported by the Option ROM BIOS. Unless otherwise
specified, register contents indicated below are the expected register contents on Entry to the
Interrupt 0x13 function and are preserved:
Opcode
(AH on
Entry)

BIOS
Function

Actual
Function
in BIOS

AX

0x00

Reset

Exit:
Success

Drive

0x01

Get Status

Read

0x03

Write

Write

0x04

Verify

Read into bit


bucket

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

Copyright Compaq Computer Corporation, Inc.

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

Read into bit


bucket
Checks C/H
params

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

Copyright Compaq Computer Corporation, Inc.

Notes on Completion Status returned in AH:

Success implies AX=0 (not just AH=0) on exit.


Those functions that call Check Hung Controller will return CONTROLLER_FAILED on exit
if the controller previously timed out.
Those functions that call Check Unit Status will return one of the following return codes,
depending on the volume state: SUCCESS, DRIVE_NOT_READY, ATTACH_FAILED, or
SENSE_OP_FAILED.

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

Volume status unrecognized


(not used)
Command pointer mismatch (Compaq BIOS unique)
Command pointer FIFO full (Compaq BIOS unique)
Couldnt clear Completion Status FIFO (Compaq BIOS unique)
(not used)
(not used)
(not used)
(not used)
(not used)
(not used)
Volume state = Logical volume not yet available
Volume state = Failed, Unused, Wrong Replace, or Loose Cable
(not used)
Command timed out after 5 minutes (or previously timed out)
(not used)
Fatal Error returned by controller
(not used)
Virtual DMA Services error
(not used [kinda])
(not used)
Invalid block number specified, or Bad Request error returned by controller
Logical drive is write-protected
(not used)
Unsupported command (not in above list)
Successful operation

39

www.compaq.com

Das könnte Ihnen auch gefallen