Table 37-3 on page 1121 lists the DM class attributes. Also see Table 37-4 on page 1125.
Attribute | ID | Attribute Modifier | Description |
---|---|---|---|
ClassPortInfo | 0001h | 00000000h | See Table 28-7 on page 794. There are no class-specific CapabilityMask bits defined. |
Notice | 0002h | 00000000h–FFFFFFFF | DM-related event notifications are logged in the Notice attribute and, if traps have been enabled by the DM, an event notification is automatically sent to the DM when a DM-related event occurs within the IOU. The event is delivered to the DM in a DevMgtTrap(Notice). See Table 28-9 on page 798 and “Notice Attribute” on page 1125. |
IOUnitInfo | 0010h | 00000000h | Read-only. List of all IOCs present in a given IOU. Each IOU may support up to FFh (255) controllers. See “IOUnitInfo Attribute” on page 1126. |
IOControllerProfile | 0011h | 00000001h–000000FFh | Read-only. IOC Profile Information (see “IOControllerProfile Attribute” on page 1127). AttributeModifier identifies the IOC. |
DiagCode | 0024h | 00000001h–FFFFFFFFh | Vendor-specific diagnostic information for device (IOC) specified by AttributeModifier (same author's note as in description of PrepareToTest in this table). Results are reported in a format consistent with the 16-bit PortInfo.DiagCode. For a detailed description, refer to “VendorDiag and PortInfo.DiagCode Attributes” on page 843. |
PrepareToTest | 0021h | 00000001h–FFFFFFFFh | When written to, instructs device (IOC) specified by AttributeModifier to prepare for diagnostic test. When read, returns Response Status:
This attribute has no attribute elements. Author's note: The specification states that the AttributeModifier selects the “device” to test and it shows valid values as those in the previous column. It is the author's opinion that “device” means IOC and the valid values would therefore be 00000001h through 000000FFh (not FFFFFFh). The time required to complete this step is not predictable, as it may involve flushing data from cache memory, reinitializing SCSI ports, etc. The device indicates its readiness for test by signaling the IOU's DMA to send an Informational Trap to the DM. |
DiagnosticTimeout | 0020h | 00000001h–FFFFFFFFh | Read-only. Indicates maximum time (in ms) for completion of diagnostic test. Target device (i.e., IOC) is identified by the AttributeModifier. Tests not completing within this period may indicate a device failure. |
TestDeviceOnce | 0022h | 00000001h–FFFFFFFFh | When written to, instructs the device (IOC) specified by AttributeModifier (same author's note as in description of PrepareToTest in this table) to initiate a single diagnostic test and run it once. Vendor-unique attribute values may be defined to supply specific test instructions. A single test run is initiated by writing a non-zero value to the TestDeviceOnce attribute, with msb = 0. Once initiated, this vendor-defined test runs to completion. The time to completion is unpredictable. The DiagnosticTimeout attribute may be read in advance of test initiation, which indicates the maximum allowable period for completion. Results of the completed diagnostic test are obtained by reading the DiagCode attribute. |
ServiceEntries | 0012h | 00010000h–00FFFFFFh | Read-only. List of the supported services and their associated ServiceIDs. Each IOC has a table with at most 256 ServiceEntries. AttributeModifier is structured as follows:
|
Reserved | 0013h-001Fh | 00000000h–FFFFFFFFh | Reserved |
Reserved | 0025h-FEFFh | 00000000h–FFFFFFFFh | Reserved. |
Vendor-Specific | FF00h-FFFFh | 00000000h–FFFFFFFFh | Vendor-unique attribute values may be defined to supply specific test instructions. |
TestDeviceLoop | 0023h | 00000000h–FFFFFFFFh | When written to, instructs the device (IOC) specified by AttributeModifier (same author's note as in description of PrepareToTest in this table) to initiate a single diagnostic test and run it continuously in a loop. Vendor-unique attribute values may be defined to supply specific test instructions. This test mode can assist in detecting transient problems, and can be used to initiate endurance-related tests. The test is initiated by writing a non-zero value to the TestDevice attribute, with msb = 1. Results of the last completed diagnostic test are obtained by reading the DiagCode attribute. |
Method ==> | DevMgtGet() | DevMgtSet() | DevMgtTrap() |
---|---|---|---|
Attribute | |||
ClassPortInfo | x | x | |
Notice | x | x | x |
IOUnitInfo | x | ||
IOControllerProfile | x | ||
ServiceEntries | x | ||
DiagnosticTimeout | x | ||
PrepareToTest | x | x | |
TestDeviceOnce | x | ||
TestDeviceLoop | x | ||
DiagCode | x |
The Notice attribute is used to report DM-related events to the DM. The DM can either use the DevMgtGet(Notice) and DevMgtSet(Notice) operations to access the DMA's Notices or can enable the automatic generation of DM-related traps wherein the notice is delivered to the DM in a DevMgtTrap(Notice) MAD.
The Notice attribute has the format shown in Table 28-9 on page 798. Assuming that traps have been enabled by the DM, there is one optional generic DM trap defined. It is trap number 514 and takes the form:
Name: ReadyToTest.
Trap Type: Informational Trap.
Trap number: 514.
Device <DEVICE> readiness is <STATUS>, where status is the same as would have been returned by a DevMgtGet(PrepareToTest) with the device number (IOC) as the AttributeModifier.
DM Traps use the following layout for the Notice.DataDetails attribute element:
See “Traps” on page 790 for a detailed discussion of traps.
An IOU has one IOUnitInfo attribute that describes its characteristics (see Table 37-5 on this page). By reading this attribute, the DM can determine:
Whether any IOCs have been added or removed from the IOU since the last time the attribute was read.
The number of slots in the IOU into which IOCs can be installed.
Whether or not the IOU incorporates an Option (aka Device) ROM.
A list of which IOC slots are currently occupied.
Element | Access | Length (in bits) | Description |
---|---|---|---|
Change_ID | RO | 16 | This counter is Incremented whenever any change is made to the IOUnitInfo.ControllerList. When the DM sees that the value has been incremented since the last time it was read, this indicates that one or more IOCs have been removed and/or added since the last time this counter was read. |
Max Controllers | RO | 8 | Number of slots in ControllerList. |
Reserved | RO | 7 | Reserved for future use. |
Option ROM | RO | 1 | Indicates the presence (or absence) of an Option ROM.
|
ControllerList | RO | 1024 | A series of 256 fields, each four bits wide and representing an IOU slot into which an IOC can be installed. The possible values for each field are:
|
The DM can tell how many IOCs are currently installed in an IOU and which IOC slots are currently occupied by reading the IOUnitInfo attribute (refer to the previous section). The IOControllerProfile for each installed IOC is accessible by performing a DevMgtGet(IOControllerProfile) and setting the AttributeModifier to the IOC slot number (1 of 256). The IOControllerProfile attribute has the format shown in Table 37-6 on this page.
Element | Access | Length (in bits) | Description | ||
---|---|---|---|---|---|
GUID | RO | 64 | An EUI-64 GUID used to uniquely identify the IOC. This could be the same one as the device (i.e., the IOU) or the Port GUID if there is only one IOC. | ||
VendorID | RO | 24 | IO controller vendor ID (the upper 24 bits of the GUID is the vendor ID assigned by IEEE). | ||
Reserved | RO | 8 | Reserved for proper alignment. | ||
DeviceID | RO | 32 | The device ID assigned by the vendor to identify the type of IOC. Can be used by an OS to select a device driver. | ||
Device Version | RO | 16 | A number assigned by the vendor to identify the device version. | ||
Reserved | RO | 16 | Reserved for proper alignment. | ||
Subsystem VendorID | RO | 24 | Vendor ID of the IOU enclosure in which the IOC resides (IEEE-assigned). If none, it is zero. | ||
Reserved | RO | 8 | Reserved for proper alignment. | ||
SubsystemID | RO | 32 | A number identifying the subsystem where the IOC resides. | ||
IO Class | RO | 16 |
| ||
IO Subclass | RO | 16 |
| ||
Protocol | RO | 16 |
| ||
Protocol Version | RO | 16 | Protocol-specific. | ||
Service Connections | RO | 16 | Number of service connections (i.e., QP communications channels to clients) that the controller can support. | ||
Initiators Supported | RO | 16 | Number of initiators that this IOC can support. The author is not clear on what is meant by initiators in this context. | ||
Send Message Depth | RO | 16 | Maximum Depth of the Send Message Queue. | ||
RDMA Read Depth | RO | 16 | Maximum Depth of the per-channel RDMA Read Queue. | ||
Send Message Size | RO | 32 | Maximum size of Send Messages in bytes. | ||
RDMA Transfer Size | RO | 32 | Maximum size of outbound RDMA transfers initiated by the IOC in bytes. | ||
Controller Operations Capability Mask | RO | 8 | IOC's supported operation types. Bit = 1 indicates operation supported. | ||
Bit | Name | Description | |||
0 | ST | Messages can be sent to IOC. | |||
1 | SF | Messages can be sent from IOC. | |||
2 | RT | RDMA Reads can be sent to IOC. | |||
3 | RF | RDMA Reads can be sent from IOC. | |||
4 | WT | RDMA Writes can be sent to IOC. | |||
5 | WF | RDMA Writes can be sent from IOC. | |||
6 | AT | Atomic Operations can be sent to IOC. | |||
7 | AF | Atomic Operations can be sent from IOC. | |||
Controller Services Capability Mask | RO | 8 | IOC's supported service types. Bit = 1 indicates operation supported. | ||
Bit | Name | Description | |||
0 | CS | Console Services. | |||
1 | SBWP | Storage Boot Wire Protocol. | |||
2 | NBWP | Network Boot Wire Protocol. | |||
[7:3] | Reserved for future services. | ||||
Service Entries | RO | 8 | Number of entries in this IOC's ServiceEntries table (see “ServiceEntries Attribute” on this page). | ||
Reserved | RO | 72 | Reserved for future use. | ||
ID String | RO | 512 | UTF-8 encoded string for identifying the controller to operator. |
Each of the IOC's in an IOU provides a list of services it offers. The IOControllerProfile.ServiceEntries attribute element (see “IOControllerProfile Attribute” on page 1127) defines the number of entries in the IOC's list. Each ServiceEntry is comprised of:
A 40-byte text ServiceName field.
The 64-bit ServiceID that identifies the service provided.
Each entry is therefore 48 bytes in length, and the DM MAD data area is 192 bytes in size, thereby permitting a group of four service entries to be read from the IOC's service entries list in one DevMgtGet(ServiceEntries) operation.
When performing the DevMgtGet(ServiceEntries) operation, the 32-bit AttributeModifier is used as follows:
The upper 16 bits identify the IOC (valid values are 0001h through 00FFh).
The lower 16 bits specify a range of up to four ServiceEntries to be retrieved:
- Lower 8 bits specifies the entry number of the first entry to be read.
- Upper 8 bits specifies the entry number of the last entry to be read.
- Note that the range may not encompass more than four entries.
Table 37-7 on this page shows the format of the up to four entries returned in the DevMgtGetResp(ServiceEntries) MAD's 192-byte data area.
Element | Access | Length (in bits) | Description |
---|---|---|---|
ServiceName_1 ServiceID_1 | RO RO | 320 64 | Service name in UTF-8 format. Identifier of the associated Service. |
ServiceName_2 ServiceID_2 | RO RO | 320 64 | Service name in UTF-8 format. Identifier of the associated Service. |
ServiceName_3 ServiceID_3 | RO RO | 320 64 | Service name in UTF-8 format. Identifier of the associated Service. |
ServiceName_4 ServiceID_4 | RO RO | 320 64 | Service name in UTF-8 format. Identifier of the associated Service. |