SES_DOWNLOAD_MICROCODE_CONTROL_DIAGNOSTIC_PAGE structure (scsi.h)

The SES_DOWNLOAD_MICROCODE_CONTROL_DIAGNOSTIC_PAGE structure contains a vendor specific microcode (i.e., firmware) image for use by the enclosure services process.

Syntax

typedef struct _SES_DOWNLOAD_MICROCODE_CONTROL_DIAGNOSTIC_PAGE {
  UCHAR PageCode;
  UCHAR SubEnclosureId;
  UCHAR PageLength[2];
  UCHAR ExpectedGenerationCode[4];
  UCHAR Mode;
  UCHAR Reserved[2];
  UCHAR BufferID;
  UCHAR BufferOffset[4];
  UCHAR ImageLength[4];
  UCHAR DataLength[4];
  UCHAR Data[ANYSIZE_ARRAY];
} SES_DOWNLOAD_MICROCODE_CONTROL_DIAGNOSTIC_PAGE, *PSES_DOWNLOAD_MICROCODE_CONTROL_DIAGNOSTIC_PAGE;

Members

PageCode

Specifies the diagnostic page being sent or requested based on the value. For a Microcode Control diagnostic page, the value should be 0x0E.

SubEnclosureId

Specifies the sub enclosure to which the application client is sending the microcode image. If the value does not match a valid SUBENCLOSURE_IDENTIFIER field value found in the SES_CONFIGURATION_DIAGNOSTIC_PAGE, then the enclosure services process shall abort the download microcode operation with a status of 0x80.

PageLength[2]

Specifies the number of bytes that follow in the diagnostic page.

ExpectedGenerationCode[4]

Specifies the expected value of the generation code. If this parameter is not set to the current generation code, then the enclosure services process shall abort the download microcode operation with a status of 0x80.

Mode

Specifies which mode to download the microcode with.

Value Meaning
Download microcode with offsets, save, and activate
0x07
After the last SEND DIAGNOSTIC command delivers a Download Microcode Control diagnostic page to the subenclosure completes, the enclosure services process shall verify the complete microcode image (e.g., perform a vendor specific checksum) and save the new microcode image into nonvolatile storage.

If there are no errors in the microcode image or in the save operation, then the enclosure services process shall perform one of the following actions:

  • Set the Status field in SES_DOWNLOAD_MICROCODE_STATUS_DESCRIPTOR to 0x10, if requested, and activate the new microcode image after either returning the Download Microcode Status diagnostic page, power on, or for standalone enclosure services processes, a hard reset.
  • Set the Status field in SES_DOWNLOAD_MICROCODE_STATUS_DESCRIPTOR to 0x11, if requested, and for standalone enclosure services processes only, activate the new microcode image after either power on or hard reset.
  • Set the Status field in SES_DOWNLOAD_MICROCODE_STATUS_DESCRIPTOR to 0x12, if requested, and activate the new microcode image after power on.
Download microcode with offsets, save, and defer activate
0x0E
After the last SEND DIAGNOSTIC command delivering a SES_DOWNLOAD_MICROCODE_CONTROL_DIAGNOSTIC_PAGE to the subenclosure completes, the enclosure services process shall verify the complete microcode image (e.g., perform a vendor specific checksum), save the new microcode image into nonvolatile storage (e.g., flash ROM), and defer activation of the new microcode.

If there are no errors in the microcode image or in the save operation, then the enclosure services process shall set the Status field in SES_DOWNLOAD_MICROCODE_STATUS_DESCRIPTOR to 0x13 in the SES_DOWNLOAD_MICROCODE_STATUS_DIAGNOSTIC_PAGE, if requested, and activate the new microcode after either:

  • Processing this structure with the Mode field set to 0x0F (i.e., Activate deferred microcode)
  • A power on
  • A hard reset
Activate deferred microcode
0x0F
After the SEND DIAGNOSTIC command specifying this mode completes, the enclosure services process shall activate the deferred microcode image, if any.
Reserved
All other values
Reserved for future use.

Reserved[2]

Reserved for future use.

BufferID

Specifies a specific buffer within the enclosure services process to receive the microcode image. The enclosure services process assigns vendor specific buffer ID codes to buffers (e.g., the main firmware image may be stored in buffer 00h and a backup firmware image may be stored in buffer 01h). The enclosure services process shall support a buffer ID value of 00h. If more than one buffer is supported, then the enclosure services process shall assign additional buffer ID codes contiguously, beginning with 01h. If the enclosure services process receives an unsupported buffer ID code, then it shall abort the download microcode operation and set the Status field in SES_DOWNLOAD_MICROCODE_STATUS_DESCRIPTOR to 0x80 in the SES_DOWNLOAD_MICROCODE_STATUS_DIAGNOSTIC_PAGE structure.

BufferOffset[4]

Specifies the offset in bytes within the buffer to which the microcode data is written in multiples of four. The enclosure services process may require that this field be contiguously increasing in consecutive SEND DIAGNOSTIC commands.

ImageLength[4]

specifies the total number of bytes in the microcode image the application intends to send to the specified BufferID.

DataLength[4]

Specifies the length of Data, in bytes.

Data[ANYSIZE_ARRAY]

Contains part of the vendor specific microcode image.

Requirements

Requirement Value
Minimum supported client Available in Windows 10, version 1709 and later versions of Windows.
Header scsi.h (include Minitape.h, Storport.h)