QCIC Software V3.4.2 Release Notes: Level-A Commands


Appendix A
Level-A Commands

Table A-1 lists the command and reply codes that are unique to Level-A code.

Table A-1. Level-A Commands

Command

Description

Encoding

QCMD_DIAG_STAT

The QCIC returns the power-up diagnostics status in the interface register.

0x10

QCMD_DL_ADDR

The SSM/CSM uses this command to pass one byte of an executable image address to the QCIC. Typically, the SSM/CSM will read a QCIC code image into memory, then pass the image address to all QCIC's in the system. When the QCIC has received four address bytes, it reads the image from memory into the QCIC's local RAM, performs a checksum on the image, and if everything is correct, executes the newly downloaded code. The address bytes are passed in the order of LSB to MSB. After each of the first three bytes, the QCIC returns a status of QSTAT_CONT in the interface register. After the fourth byte the QCIC will return a status of QSTAT_ERROR if the image cannot be exec'd. If the image is successfully started, the new code writes a status of QSTAT_IDLE into the interface register (the level-A code is no longer running, so it cannot write status into the interface register).

0x11

QCMD_DL_DATA

The SSM/CSM can use this command to load an executable image via the SLIC interface. Each image byte is acknowledged by the QCIC with status in the interface register. If QSTAT_CONT is returned, then the SSM/CSM should deliver the next image data byte. If QSTAT_ERROR is returned, then the SSM/CSM should abort the download because the QCIC detected some problem with the image. If QSTAT_DONE is returned, then the download is complete. The image is not actually executed until the QCMD_DL_EXEC command is received. This command has been superceded by QCMD_DL_ADDR.

0x12

QCMD_DL_ABORT

This command aborts the current QCMD_DL_ADDR or QCMD_DL_DATA sequence. After receiving this command the QCIC resets any internal state associated with the download and returns QSTAT_ERROR.

0x13

QCMD_DL_EXEC

When the QCIC receives this command, it begins executing the image previously downloaded with the QCMD_DL_DATA sequence. This command has been superceded by QCMD_DL_ADDR.

0x14

QCMD_PUP_TEST

The level-A code performs a small amount of power-up testing when the QCIC board first comes alive. This command tells the code to run some power-up tests that are normally not run by default.

0x15

QCMD_SET_SCSI_IDS

To support multiple initiators on a single SCSI bus, it is necessary for each initiator to have a unique SCSI ID. Since the level-B code performs automatic drive spin-up, we need a mechanism to pass default SCSI IDs to the level-B code, and have them available at the start of level-B execution. The level-A code communicates this information to level-B using a shared (QCIC-local) memory location. The SCSI bus ID (be sure to set the ID_ENABLE_BIT - 0x80) is read from the interface register. The first invocation of this command sets the ID for bus 0, the second for bus 1, the third for bus 2, and the fourth for bus 3. The level-A code performs the sequencing automatically.

0x16

QCMD_SET_SCSI_RESET_DELAYS

The default post-SCSI-bus-reset-delay assumed by level-B is 10 seconds. This value may be too small; that is, a device may need more time to come alive before communication can occur. This command increases the default value. The reset delay value is read from the interface register. The first invocation of this command sets the delay for bus 0, the second for bus 1, the third for bus 2, and the fourth for bus 3. The level-A code performs the sequencing automatically.

0x17

QCMD_SET_SCSI_RESET_FLAGS

By default, the QCIC level-B code resets each SCSI bus as part of its initialization sequence. This command exclusively enables/disables the reset on a per-bus basis. A non-zero value skips the reset. The reset flag is read from the interface register. The first invocation of this command sets the flag for bus 0, the second for bus 1, the third for bus 2, and the fourth for bus 3. The level-A code performs the sequencing automatically.

0x18

QCMD_SET_DRIVE_SPINUP_FLAGS

By default, the QCIC level-B code probes each SCSI bus as part of its initialization sequence. All disk drives are spun up by issuing a SCSI start/stop command. This command explicitly enables/disables the spin-up on a per-bus basis. A non-zero value skips the spin-up. The spin-up flag is read from the interface register. The first invocation of this command sets the flag for bus 0, the second for bus 1, the third for bus 2, and the fourth for bus 3. The level-A code performs the sequencing automatically.

0x19

QCMD_SELECT_CHANNEL

The various QCMD_SET_* commands operate by assuming the first invocation is for bus 0, the second for bus 1, etc. You should use this cautiously since you have no way of knowing where you are with respect to the sequence. The QCMD_SELECT_CHANNEL command provides a mechanism for explicitly setting the sequencer to a specific value. Thus, if you want to configure information for bus 2, this command can be issued with an argument of 2 for the interface register before issuing the bus-specific configuration commands.

0x1A

QCMD_SET_PNP_FLAGS

By default, the QCIC level-B code checks for SCSI bus saturation, resulting in starvation for certain SCSI target IDs. If the firmware detects device starvation, it takes steps to give the starving targets higher priority access to the bus. This command explicitly enables/disables the starvation checking. A non-zero value skips the checking.

0x1B

QCMD_SET_T_PING

The time between pings, in time units (i.e. 100 ms). Default value is 800.

0x1C

QCMD_SET_T_STARVE_MARGIN

The time, in time units (i.e. 100 ms), after a ping should have been received that a neighboring initiator must be starved. Thus, starvation-reduction action would be initiated at pingTime + starveMargin. Default value is 200.

0x1D

QCMD_SET_STAT_UPDATE

Allow the time between QCIC updates of statistics to be adjusted. This value is in 50 msec increments. Adjusting this value to a low setting can effect QCIC performance. Default time is 10 sec.

0x1E

QCMD_SET_BW_ENTITLEMENT

A whole number, less than 100, which indicates what percentage of the bus to which the initiator is entitled. Default value is 40.

0x1F

QCMD_SET_TIME_OUT_REACT

This is a scaling factor that determines at what percentage of the CB time-out time should target starvation action begin. Valid values are 1, 2, 3, 4 which give a scaling factor of 50%, 25%, 12.5%, 6.25% respectively. Default value is 1.

0x20

QCMD_SET_CHECK_NEG_OFF

This flag turns off the QCIC feature of renegotiating WDTR and SDTR following a check condition.

0x21

QCMD_SET_WDTR_SDTR_PAIRED_OFF

This flag turns off the QCIC feature of sending WDTR and SDTR as paired messages during a single information phase.

0x22


New info file commands for QCIC V3.4.2 firmware are shown in Table A-2 below. Most user will not need to set these flags in their info file. These info commands should be set only by experienced users as they can effect the performance and overall function of the QCIC firmware.


ATTENTION

For users of DYNIX/ptx prior to versions V4.2.3 and V4.4.2: In DYNIX/ptx V4.2.3 and V4.4.2, a new method of starvation prevention has been implemented. In earlier DYNIX/ptx releases, the QCIC will still function and provide starvation prevention, but may need to have the QCMD_SET_BW_ENTITLEMENT value adjusted in the info file.

In addition, for DYNIX/ptx prior to versions V4.2.3 and V4.4.2 in clustered environments, the QCMD_SET_PNP_FLAGS line in the info file should be deleted.


Table A-2. Info file commands for QCIC FW V3.4.2

Command

Encoding

QCMD_SET_PNP_FLAGS

0x1B

QCMD_SET_T_PING

0x1C

QCMD_SET_T_STARVE_MARGIN

0x1D

QCMD_SET_STAT_UPDATE

0x1E

QCMD_SET_BW_ENTITLEMENT

0x1F

QCMD_SET_TIME_OUT_REACT

0x20

QCMD_SET_CHECK_NEG_OFF

0x21

QCMD_SET_WDTR_SDTR_PAIRED_OFF

0x22