Debugging Information Provided by IDEATA.HAM v4.10

(Last modified: 27Sep2004)

This document (10085776) is provided subject to the disclaimer at the end of this document.

fact

Debugging Information Provided by IDEATA.HAM v4.10

IDEATA.HAM

NetWare

note

Beginning with driver version 4.10, IDEATA.HAM, Novell's ATA/IDE/ATAPI adapter and controller driver, has the ability to store I/O history information, display debugging information, and provide a wealth of IDE-related configuration information. This version of the IDE driver is available starting with NetWare 5.1 Support Pack 7, NetWare 6.0 Support Pack 4, and NetWare 6.5.

1. Command line options

IDEATA.HAM, IDEHD.CDM, and IDECD.CDM now each have command line options that can modify the behavior of the driver or display certain kinds of information about the driver or storage interface. In each case where information is to be displayed, the driver will display the information on the Server Console Screen in NetWare 3, 4, and 5, and on the Logger Screen on NetWare 6 and greater. The IDE driver may be loaded with appropriate command line options, as follows:

/?

(IDEATA.HAM, IDEHD.CDM, IDECD.CDM) Displays the help screen, whether the driver is loaded or not. This option can be used in conjunction with other options to set those options, if the driver has already been loaded. For example, loading with "load ideata /? /nodma" after all instances of the driver have already been loaded will cause the driver to display the help screen and to disable DMA beginning with the next I/O transaction.

/break or /b

(IDEATA.HAM, IDEHD.CDM, IDECD.CDM) Causes the driver to break into the NetWare Internal Debugger immediately after loading. This option is available from the installation driver selection menu.

/debug or /d

(IDEATA.HAM, IDEHD.CDM, IDECD.CDM) Displays various errors as they occur.  Use /debug- or /d- to disable this option.  Default: disabled.

/global or /g

(IDEATA.HAM) Keeps an internal list of the last 128 driver actions. This list is stored in the global variable IDEATA_History in four-byte sections as BBDDHHXX, where BB is the registered bus number, DD is the registered device number, HH is the upper byte of the lowest word of the HACB (storage request) address, and XX is the action number, described below under Internal driver action history. From within the NetWare Internal Debugger these actions can be displayed by entering "dds IDEATA_History" at the debugger command line, but only if this option is first invoked. Use /global- or /g- to disable this option. Default: disabled.

/history or /h

(IDEATA.HAM, IDEHD.CDM, IDECD.CDM) Keeps an internal list of the last 32 driver actions on the particular request. This list is stored in each HACB (storage request) in the HAM Space area beginning at offset 0x14 (offset 0x78 of the SuperHACB) in the case of IDEATA.HAM, or in the CDM message beginning at offset 0x1C. Each byte in this list represents a driver action, described below. Use /history- or /h- to disable this option. Default: disabled.

/info or /i

(IDEATA.HAM, IDEHD.CDM, IDECD.CDM) Displays certain or various technical information about the driver and storage interface, such as disk drives, device parameters, PCI Configuration information, driver settings, etc. Use /info- or /i- to disable this option. Default: disabled.

/native

(IDEATA.HAM) By default, the driver will not attempt to switch the IDE controller to Native PCI Mode (as opposed to Compatibility or Legacy ISA Mode), even if the controller indicates it supports the mode switch. Using this option enables the driver's ability to switch to Native Mode. For some types of controllers (such as RAID and Mass Storage) this switch has no effect because those controllers must run in Native Mode. The /native- option is accepted, but it has little effect after the driver is loaded because the action of switching to Native Mode takes place only once, just after the driver loads. Default: disabled (the driver does not make the attempt to switch to Native Mode).

/noaen

(IDEATA.HAM, IDEHD.CDM, IDECD.CDM) By default, the driver will issue and accept AEN (asynchronous event notification) requests and queue them until the specified event occurs. Using this option disables the use of AEN requests. Executing the /noaen option after the driver is loaded will have no effect on AEN requests that might have been queued up to that point. Use /noaen- to re-enable support for AEN requests. Default: disabled (AEN requests are issued and accepted).

/nodma

(IDEATA.HAM) By default, the driver checks the IDE hardware for DMA compatibility and execute DMA commands if they are supported. Using this option will disable all support for DMA transactions and cause all device communications to be done using PIO (programmed I/O). IMPORTANT: Using this option might cause significant performance degradation. Use /nodma- to re-enable support for DMA commands. This option is available from the installation driver selection menu. Default: disabled (DMA will be attempted).

/noint

(IDEATA.HAM) By default, the driver performs I/O with the CPU interrupt flag in the state unchanged from when NWPA called the driver to perform the I/O. Using this option disables interrupts during the entire I/O processing cycle. Use /noint- to re-enable support for request handling with interrupts enabled. IMPORTANT: Using this option might cause significant performance degradation. Default: disabled (interrupts are not puposely disabled for the full span of request processing).

/nomp

(IDEATA.HAM, IDEHD.CDM, IDECD.CDM) By default, the driver accepts requests from multiple processors. Using this option disables the driver's ability to do so, and causes all requests to originate from a single processor. Use /nomp- to re-enable the acceptance of requests from multiple processors. This option is available from the installation driver selection menu. Default: disabled (requests from multiple processors are accepted).

/noping

(IDECD.CDM) By default, the driver accepts requests to check for media change. Using this option causes the driver to ignore requests to check for media change. One implication of this option is that the operating system is not notified if a new platter is inserted into its CD-ROM drive. Use /noping- to re-enable the acceptance of requests that check for media change.

/raise or /r

(IDEATA.HAM) By default, the driver will not attempt to raise the DMA mode of the device, even if it indicates it can support a higher DMA mode or transfer rate. Using this switch enables the driver's ability to raise the DMA mode of the device. The /raise- option is accepted, but it has little effect after the driver is loaded because the action of raising the DMA mode takes place only once, just after the driver loads. Default: disabled (the driver does not make the attempt to raise the DMA mode of the device).

/safe or /s

(IDEATA.HAM) Incorporates the /nodma, /noint, /nomp, /noaen, /global, and /history options into a single option. Using this option causes the driver to execute requests in a manner that will help the user determine the cause of some problems, if present. IMPORTANT: Using this option might cause significant performance degradation. Use /safe- or /s- to disable this option. Default: disabled.

/verbose or /v

(IDEATA.HAM, IDEHD.CDM, IDECD.CDM)Displays each action performed by the driver. These actions are listed in DIsplaying driver actions. Use /verbose- or /v- to disable this option. Default: disabled.

.

2. Displaying driver actions

As with the options described above, all information is displayed by the driver on the Server Console Screen in NetWare 4 and NetWare 5, and on the Logger Screen on NetWare 6 and greater.

The information is displayed by the /verbose option. The value S in [S] refers to the contents of the Alternate-Status Register, or in other words, the bus status.

Retrieving ATA hardware information for Native Mode

Initializing HIN Mode for load instance X

Init HIN Mode product ID parse failed with XXXXXXXX on load Y

Init HIN Mode slot parse failed with XXXXXXXX on load Y

Init HIN Mode int register failed with XXXXXXXX on bus B

Checking Native Mode parse PRODUCT ID XXXXXXXX for chipset B: Y

Checking Native Mode parse SLOT XXXXXXXX for chipset C: Y

Checking Native Mode parse PORT XXXXXXXX for bus B: Y

Checking Native Mode parse INT XX for bus B: Y

Checking Native Mode register PRODUCT ID XXXXXXXX for chipset B: Y

Checking Native Mode register SLOT XXXXXXXX for chipset C: Y

Checking Native Mode register PORT XXXXXXXX for bus B: Y

Checking Native Mode register INT XX for bus B: Y

Retrieving ATA hardware information for Legacy Mode

Initializing Legacy Mode for load instance X

Init Legacy Mode port parse failed with XXXXXXXX on bus B

Init Legacy Mode int parse failed with XXXXXXXX on bus B

Init Legacy Mode register failed with XXXXXXXX on bus B

Checking Legacy Mode parse PORT XXXXXXXX for bus B: Y

Checking Legacy Mode parse INT XX for bus B: Y

Checking Legacy Mode register PORT XXXXXXXX for bus B: Y

Checking Legacy Mode register INT XX for bus B: Y

Rec ATA XX req YYYYYYYY on bus B dev D: pri P [S]

Rec ATAPI XX req YYYYYYYY on bus B dev D: pri P [S]

Rec Type 0 Func XX req YYYYYYYY on bus B: pri P [S]

Rec Type XX req YYYYYYYY on bus B with no device: pri P [S]

Scan req XXXXXXXX on bus B dev D [S]

Create bus B dev D

Return Identify on bus B dev D [S]

Issue Identify XX on bus B dev D [S]

Delay 1 (EC) returned XXXXXXXX on bus B dev D [S]

Delay 3 (A1) returned XXXXXXXX on bus B dev D [S]

Return HAM Info req XXXXXXXX on bus B

Return Dev Info req XXXXXXXX returned YYYYYYYY on bus B

Unfreeze Queue req XXXXXXXX on bus B [S]

Set IDE Dev Config req XXXXXXXX on bus B [S]

Queue AEN HACB req XXXXXXXX on bus B [S]

Recovery Reset req XXXXXXXX subFunc YY on bus B [S]

Deactivation Notification req XXXXXXXX on bus B for dev D [S]

Instance Unload req XXXXXXXX on bus B

Return Dev Status req XXXXXXXX status YYYYYYYY on bus B dev D [S]

Execute ATA XX req YYYYYYYY on bus B dev D: pri P [S]

Execute ATAPI XX req YYYYYYYY on bus B dev D: pri P [S]

Transfer ATA XX req on bus B dev D: pri P [S]

Queued ATA XX req YYYYYYYY on bus B dev D: pri P

Queued ATAPI XX req YYYYYYYY on bus B dev D: pri P

Queued Type 0 Func XX req YYYYYYYY on bus B: pri P

Queued Type XX req YYYYYYYY on bus B with no device: pri P

Dequeued ATA XX req YYYYYYYY on bus B dev D: pri P

Dequeued ATAPI XX req YYYYYYYY on bus B dev D: pri P

Dequeued Type 0 Func XX req YYYYYYYY on bus B: pri P

Dequeued Type XX req YYYYYYYY on bus B with no device: pri P

Get queued ATA XX req YYYYYYYY on bus B dev D: pri P

Get queued ATAPI XX req YYYYYYYY on bus B dev D: pri P

Get queued Type 0 Func XX req YYYYYYYY on bus B: pri P

Get queued Type XX req YYYYYYYY on bus B with no device: pri P

Get next in queue ATA XX req YYYYYYYY on bus B dev D: pri P

Get next in queue ATAPI XX req YYYYYYYY on bus B dev D: pri P

PRD table allocation returned XXXXXXXX for bus B (ch C)

PRD table built for bus B (ch C) [S]

Ch Is DMA Ready for product ID XXXXXXXX on bus B (ch C) [S]

Chipset Is DMA Compatible for product ID XXXXXXXX: Y

Set DMA Mode level WW->XX mode YY->ZZ on bus B (ch C) [S]

Determining Operating Mode for product ID XXXXXXXX: Mode M

Setting Transfer Mode XX on bus B (ch C) dev D [S]

Setting up ATA DMA command XX->YY on bus B (ch C) dev D [S]

Setting up ATAPI DMA command XX on bus B (ch C) dev D [S]

Sent ATA XX command to bus B dev D [S]

Sent ATAPI XX command to bus B dev D [S]

Sent ATAPI packet XX command to bus B dev D [S]

Standard PIO write req for XXXXXXXX bytes on bus B dev D [S]

Standard PIO read req for XXXXXXXX bytes on bus B dev D [S]

S/G PIO read req for XXXXXXXX bytes on bus B dev D [S]

Sent ATA custom XX command to bus B dev D [S]

ISR handle XXXXXXXX for ATA command YY servicing req ZZZZZZZZ [S]

ISR handle XXXXXXXX for ATAPI command YY servicing req ZZZZZZZZ [S]

ISR handle XXXXXXXX servicing req YYYYYYYY waiting for an interrupt [S]

ISR handle XXXXXXXX not being serviced [S]

Timeout req XXXXXXXX on bus B dev D [S]

Abort Clean for req XXXXXXXX on bus B [S]

Abort Dirty for req XXXXXXXX on bus B [S]

Abort Unconditionally for req XXXXXXXX on bus B [S]

Set Queue State req XXXXXXXX FREEZE DUE TO ERROR for bus B dev D [S]

Set Queue State req XXXXXXXX FREEZE DUE TO RECOVERY for bus B dev D [S]

Set Queue State req XXXXXXXX UNFREEZE DUE TO RECOVERY for bus B dev D [S]

Set Queue State req XXXXXXXX UNFREEZE QUEUE for bus B dev D [S]

Ret ATA XX req YYYYYYYY with ZZZZZZZZ on bus B dev D [S]

Ret ATAPI XX req YYYYYYYY with ZZZZZZZZ on bus B dev D [S]

Ret Type 0 Func XX req YYYYYYYY with ZZZZZZZZ on bus B [S]

Ret Type XX req YYYYYYYY with ZZZZZZZZ on bus B with no device [S]

Omitted from these lines is the action count, followed by a colon, which precedes each of the above lines, but was omitted here to improve readability.

For example, the dirty abort action will actually appear as

549: Abort Dirty for req B0CE2920 on bus 1 [50]

if the current action count is at 549 (decimal), which represents the 549th driver action since the /debug option was invoked. This action count is provided to help the user determine the actual order of execution of these events, regardless of the order in which they were displayed, since the action count is incremented in an atomic fashion, and is therefore immune to multi-processing or interrupt effects.

3. IDE configuration information

The IDE driver holds some general configuration information in memory at all times, referenced by the chipsetInfo global variable. This variable is an array of IDE chipset information, 64 (0x40) bytes per chipset. With the driver already loaded, display this information by entering the NetWare Internal Debugger and, at the debugger # prompt type

dd chipsetInfo 40

and press <Enter> once thereafter for each chipset whose configuration information is to be displayed. The driver will occupy one 64-byte section for each IDE chipset it has discovered, regardless whether the driver is actually running on any particular chipset. Since the driver populates the array sequentially, the first section of all zeroes encountered signals the end of the list of detected IDE chipsets. For each 64-byte section, the above command will produce a display similar to the following:

2CA6DA64 02121166 017001F0 83000000 00012716

2CA6DA74 BA964000 037603F6 01018A44 00454444

2CA6DA84 00000079 0000000E 0001000F 0F0E7170

2CA6DA94 000108B0 02010000 010F0092 C10B1028

The column on the left merely displays the logical address of the first byte of the line of information. The information itself is described by the following section display, using representative lettering to denote separate fields. The line addresses are represented by As, and unused fields are represented by Xs:

AAAAAAAA PPPPPPPP SSSSTTTT LLFFRRNN XXEEHHHH

AAAAAAAA BBBBBBBB CCCCZZZZ BCSCPICD D3D2D1D0

AAAAAAAA UUUUUUUU Q1Q1Q1Q1 Q0Q0Q0Q0 R1R0DMDV

AAAAAAAA XXDPBABA B1B0XXXX PFPDPBPR SISISVSV

PPPPPPP

The Product ID, which consists of the concatenation of the PCI Device ID and PCI Vendor ID of the chipset. The PCI Device ID occupies the upper word of the Product ID, and the PCI Vendor ID the lower word.

SSSSTTTT

The command (data) port address. SSSS is the command port address of the secondary channel, TTTT is the command port address of the primary channel.

LL

Driver load status bitmap. The binary representation for this byte is X00000YZ. If X is set, the driver was loaded with the SLOT= option; otherwise, it was loaded with the PORT= option. If Y is set, the driver loaded successfully for the secondary channel. If Z is set, the driver loaded successfully for the primary channel.

FF

If this byte is nonzero, the chipset is currently being configured by the driver.

RR

If this byte is nonzero, the chipset is a RAID chipset.

NN

If this byte is nonzreo, the chipset is currently in Native PCI Mode.

EE

If this byte is nonzero, the chipset is exempt from registering its HIN with NetWare.

HHHH

The HIN (hardware instance number) of the chipset. The HIN is generated by NBI (NetWare Bus Interface.)

BBBBBBBB

The bus tag of the chipset, as defined by NBI.

CCCCZZZZ

The control port address. CCCC is the control port address of the secondary channel, ZZZZ is the control port address of the primary channel.

BC

The PCI Base Class Code of the chipset.

SC

The PCI Sub Class Code of the chipest.

PI

The PCI Programming Interface of the chipset.

CD

The greatest DMA level supported by the chipset. This DMA level has the notation of XY, in which X indicates transfer architecture (0 = PIO, 1 = Single-word DMA, 2 = Multi-word DMA, 4 = Ultra DMA) and Y indicates the transfer mode or speed.

D3D2D1D0

The DMA level currently running for the particular device. Each byte is defined as in CD above. D3 indicates the DMA level for the secondary slave device, D2 indidcates that for the secondary master device, D1 indicates that for the primary slave device, and D0 indicates that for the primary master device.

UUUUUUUU

The unique ID of the chipset, as determined by NBI.

Q1Q1Q1Q1

The IRQ handle for the secondary channel (bus).

Q0Q0Q0Q0

The IRQ handle for the primary channel (bus).

R1R0

IRQ level. R1 is the IRQ of the secondary channel and R0 is the IRQ of the primary channel.

DM

DMA devices. The binary representation for this byte is ABCD000X. If X is set, the chipset is permitted to execute I/O using DMA. If A is set, the secondary slave device is permitted to run DMA. If B is set, the secondary master device is permitted to run DMA. If C is set, the primary slave device is permitted to run DMA. If D is set, the primary master device is permitted to run DMA.

DV

Detected devices. The binary representation for this byte is ABCD0000. If A is set, the secondary slave device is detected. If B is set, the secondary master device is detected. If C is set, the primary slave device is detected. If D is set, the primary master device is detected.

DP

If this byte is nonzreo, the chipset may support DMA for ATAPI devices.

BABA

The BMIBA (Bus Master Interface Bus Address).

B1B0

The internal bus ID. B1 is the internal bus ID of the secondary channel, and B0 is the internal bus ID of the primary channel.

PF

The PCI Function of the chipset.

PD

The PCI Device of the chipset.

PB

The PCI Bus of the chipset.

PR

The PCI Revision ID of the chipset.

SISI

The PCI Subsystem ID of the chipset.

SVSV

The PCI Subsystem Vendor ID of the chipset.

4. Internal driver action history

When the driver is loaded with the /history or /global option, it will keep track of all actions taken by the driver on any given HACB request. The /history option will store history information in the HACB hamSpace area, and the /global option will store history information in a list pointed to by IDEATA_History.

After the driver has been running and executing commands, the HACB history may be examined by invoking the NetWare Internal Debugger and entering

dd AAAAAAAA

at the debugger # prompt, given that AAAAAAAA is the address of a valid Super HACB (which address is the same as that of the HACB, minus 0x20.) The history stored by the /history option will be stored at offsets 0x78 through 0x97, inclusive, each byte representing a driver function that has acted upon the HACB. The actions will be listed in the order they acted on the HACB, starting at offset 0x78. The driver functions of the IDEATA.HAM driver are as follows:

01 Received from NWPA

02 Request is queued

03 Begin execution

04 Issuing ATAPI request

05 Marked for DMA transfer

06 Set queue state

07 ReturnHAMInfo

08 ScanForDevices

09 ReturnDeviceInfo

0A ReturnDeviceStatus

0B RecoveryReset

0C ISR

0E Perform PIO transfer

0F Abort

10 Dequeue request

11 Timeout

12 Unload

13 Send ATA command

14 Send ATAPI command

15 Send ATAPI packet

16 Send custom command

17 UnfreezeQueue

18 DeactivationNotification

19 InstanceUnload

1A Retrieve the next request in the queue

1B Retrieve any request from the queue

50 Set queue state, called from ISR send packet

51 Set queue state, called from ISR abort ATAPI command

52 Set queue state, called from ISR error detection

53 Set queue state, called from ISR DMA handler

54 Set queue state, called from Timeout

55 Set queue state, called from ReturnRequest, for Type 0 request

56 Set queue state, called from ReportAEN

60 ReturnRequest (where the request will be completed)

61 Return from executing ReturnHAMInfo

62 Return from executing ScanForDevices

63 Return from executing SetIDEConfig

64 Return from executing default Type 0

65 Return from executing IssueATAPIRequest

66 Return from executing SendATACommand

67 Return from executing SendCustomCommand

68 Return from executing erroring out

69 Return from executing default HACB type

6A Return from ISR abort ATA

6B Return from ISR SendATAPIPacket

6C Return from ISR abort ATAPI

6D Return from ISR error detection

6E Return from ISR error busy

6F Return from ISR DMA handler

70 Return from ScanForDevices

71 Return from ReturnHAMInfo

72 Return from ReturnDeviceInfo

73 Return from ReturnDeviceStatus

75 Return from PIO Write

77 Return from PIO Read

78 Return from RecoveryReset

79 Return from UnfreezeQueue

7A Return from DeactivationNotification

7B Return from InstanceUnload

7D Return from Timeout, abort

7E Return from Timeout, normal timeout

7F Return from Timeout, device is not active

After the driver has been running and executing commands, a more extensive HACB and driver history may be examined by invoking the NetWare Internal Debugger and entering

dds IDEATA_History

at the debugger # prompt. Each line of the resulting display will appear as

AAAAAAAA BBDDHHFF

in which BB indicates the bus on which the action took place, DD indicates the device of the same action, HH is the upper nibble of the lower word of the HACB address, and FF is the driver function number, as described above. Note that HH represents the same value for any HACB as its Super HACB.

.

document

Document Title: Debugging Information Provided by IDEATA.HAM v4.10
Document ID: 10085776
Solution ID: NOVL91508
Creation Date: 01Aug2003
Modified Date: 27Sep2004
Novell Product Class:NetWare

disclaimer

The Origin of this information may be internal or external to Novell. Novell makes all reasonable efforts to verify this information. However, the information provided in this document is for your information only. Novell makes no explicit or implied claims to the validity of this information.
Any trademarks referenced in this document are the property of their respective owners. Consult your product manuals for complete trademark information.