Home   |  About Us   |  What's New   |  Products   |  Services   |  Support   |  Other Sites   |  Clients   |  Contact Us
ADS
Return to VMEHSD

Printable Version


1.4 - Requirements

2.1 - General Information

2.2 - Major/Minor Device Numbers

2.3 - IBL Mode Support

2.4 - Symbol Definitions

2.5 - OPEN Function

2.6 - CLOSE Function

2.7 - READ Function

2.8 - WRITE Function

2.9 - IOCTL Function

2.9.1 - HSDGETCFG [Get VMEHSD Configuration]

2.9.2 - HSDSETCFG [Set VMEHSD Configuration]

2.9.3 - HSDGETMOD [Get VMEHSD Operating Mode]

2.9.4 - HSDSETMOD [Set VMEHSD Operating Mode]

2.9.5 - HSDGETID [Get VMEHSD Device ID]

2.9.6 - HSDRESET [Perform VMEHSD Reset Operations]

2.9.7 - HSDGETSTS [Read VMEHSD Board Status]

2.9.8 - HSDDEVSTS [Read Attached Device Status]

2.9.9 - HSDDEVCMD [Issue Command to Attached Device]

2.9.10 - HSDPRVSTS [Read Status of Previous Operation]

2.9.11 - HSDAUXCMD [Prefix Auxiliary IOCL to Read/Write]

3.1 - Introduction

3.2 - Reference Documents

3.3 - Device Command

3.4 - hsdconfig Structure

3.4.1 - Address Modifiers

3.5 - hsdmode Structure

3.6 - Input/Output Control Block

3.7 - hsdctl Structure

4.1 - Status Returns

4.2 - hsdctl Status Returns

4.3 - VMEHSD Board Status Returns

5.1 - Distribution Media

5.2 - Installation

5.2.1 - Customizing the SYSTEM File

5.2.2 - Customizing the MASTER File

5.2.3 - Completing the Installation

Example Programs


Applied Data Sciences / VMEHSD® IRIX 6.5 Driver

The VMEHSD driver, "vhsd", is intended for operation on Silicon Graphics Onyx and Challenge systems running IRIX(TM) version 6.5. It will not work on Onyx2 or Origin 200 systems. The driver handles all communication with the VMEHSD on behalf of the calling program. It allows for reading and setting the configuration and operating mode of the VMEHSD. It provides synchronous (wait mode) data transfers via read() and write() calls.

Details of the driver installation are in Section 5.0.

To download a printable version of this page, please click here.

To search the current page for information, please use the box below.  Search help.

2.1 - General Information:

The VMEHSD driver is installed as a standard IRIX(TM) device driver. It can handle up to eight (8) VMEHSD's configured for either HSD or IBL mode. The following system calls are supported:

  • OPEN
  • CLOSE
  • READ
  • WRITE
  • IOCTL

Arguments to the IOCTL call provide for reading and/or setting the device configuration and operating mode, for issuing commands to and reading status from an HSD-connected device, and for starting and controlling I/O operations using an IOCB list.

Within the following descriptions, the term configuration is taken to include the relatively static aspects of the VMEHSD configuration: such things as interrupt level, HSD/IBL mode, etc., which would normally be associated with board configuration jumpers, but which are programmable on the VMEHSD. The term (operating) mode refers to more dynamic parameters, mostly concerned with driver software functions.

2.2 - Major/Minor Device Numbers:

All VMEHSD's have the same major device number which may be set to any convenient value for a particular system. All VMEHSD's in a system are accessed via character special devices with the eight-bit minor device number identifying one of the eight possible VMEHSD's and possibly dictating its operating configuration. Access to a device with a particular minor device number does not change its configuration, but merely insures that the configuration is set as the user requires. For example, attempting to open a device whose minor device number requires IBL configuration while the device is set to HSD configuration will cause the open to fail with the return "no such device". The "configuration" device is used only to change the configuration of the VMEHSD and may not be addressed for any I/O operation.

The minor device number is encoded as follows:

x u u u c c c c

---Device number--     ------Configuration-----

CONFIGURATION:

Configuration options include:

          0 0 0 0     ANY configuration (HSD or IBL)
          0 0 0 1     HSD configuration only
          0 0 1 0     IBL only (normal or swapped)
          0 0 1 1     CONFIGURATION device
          0 1 x x     IBL mode with specific connector configuration and priority jumper setting.
          0 1 1 x     IBL, normal (HSD) connector configuration.
          0 1 0 x     IBL, swapped (IBL) connector configuration.
          0 1 x 0     IBL, Low Priority
          0 1 x 1     IBL, High Priority

DEVICE NUMBER:

Configuration data is set to a default condition at system boot-up and may be changed only when accessing the "configuration" device (minor device where 'U316' is the VMEHSD unit number [0-7]). Read and Write access to any VMEHSD device are equivalent, and are governed by the file access permissions on the associated device file.

2.7 - READ Function:

The standard read(2) function is used to transfer data from the VMEHSD to the user's buffer. All data transfers are performed directly to the user's buffer. Therefore, the user's buffer address must be aligned on a 32-bit boundary and the transfer byte count must be a multiple of four. The maximum length of a single transfer is 262,140 bytes (65535 or hex FFFF 32-bit words). This is the maximum that can be transferred by a single IOCB. If the requested transfer size exceeds the maximum, the driver will return an error (EINVAL). The xstatus value, which may be retrieved via an HSDPRVSTS call, will be EXLONG (transfer count too long).

Options on the read call are specified by flag bits set in the flags field of the hsdmode structure passed to an ioctl (HSDSETMOD) call:

HM_CBR Issue Device Command before reading. A Device Command IOCB is command chained before the list performing the requested data transfer. The device-dependent portion of the command is taken from the cmd-rd field of the hsdmode structure last used in an ioctl (HSDSETMOD) call. See Section 3.5 for information on how to specify the desired device command.

HM_SAR Request Device Status after reading. A Device Status Request IOCB is command chained to the end of the list performing the requested data transfer. The ioctl (HSDPRVSTS) call may be used to retrieve the status returned by the device.

The HM_CBR and HM_SAR options are valid only for a VMEHSD operating in an HSD configuration. The HSDAUXCMD call may be used to specify an arbitrary IOCB list to be chained preceding the data transfer IOCL (see Section 2.9.14). The HSDAUXCMD option takes precedence over the HM_CBW flag if both are given.

The returned value will be the number of bytes actually received from the external device or will be -1 in case of an error. In addition to the errors which may normally be returned from the "read" call, the following additional conditions may be reported by errno values:

EINVAL Requested transfer length is not positive, is greater than the maximum allowed or is not a multiple of four bytes (1 longword).

EIO An error occurred in the data transfer.

ENOMEM A DMA mapping failure occurred, preventing the transfer from taking place. This error should not happen.

Further explanation may be obtained by issuing the ioctl (HSDPRVSTS) call and examining the returned xstatus field. (See Section 2.9.13.)

2.8 - WRITE Function:

The standard write(2) function is used to transfer data from the user's buffer to the VMEHSD. All data transfers are performed directly from the user's buffer and the write call will not return until the data transfer to the external device is complete. The user's buffer address must be aligned on a 32-bit boundary and the transfer byte count must be a multiple of four. The maximum length of a single transfer is 262,140 bytes (65535 or hex FFFF 32-bit words). This is the maximum that can be transferred by a single IOCB. If the requested transfer size exceeds the maximum, the driver will return an error (EINVAL). The xstatus value, which may be retrieved via an HSDPRVSTS call, will be EXLONG (transfer count too long).

Options on the write call are specified by flag bits set in the flags field of the hsdmode structure passed to an ioctl (HSDSETMOD) call:

HM_CBW Issue Device Command before writing. A Device Command IOCB is command chained before the list performing the requested data transfer. The device-dependent portion of the command is taken from the cmd-wt field of the hsdmode structure last used in an ioctl (HSDSETMOD) call. See Section 3.5 for information on how to specify the desired device command.

HM_SAW Request Device Status after writing. A Device Status Request IOCB is command chained to the end of the list performing the requested data transfer. The ioctl (HSDPRVSTS) call may be used to retrieve the status returned by the device.

The HM_CBW and HM_SAW options are valid only for a VMEHSD operating in an HSD configuration. The HSDAUXCMD call may be used to specify an arbitrary IOCB list to be chained preceding the data transfer IOCL (see Section 2.9.14). The HSDAUXCMD option takes precedence over the HM_CBW flag if both are given.

The returned value will be the number of bytes actually transferred to the external device, or -1 in case an error occurred. In addition to the errors which may normally be returned from the "write" call, the following additional conditions may be reported by errno values:

EINVAL Requested transfer length is not positive, is greater than the maximum allowable or is not a multiple of four bytes (1 longword).

EIO An error occurred in the data transfer.

ENOMEM A DMA mapping failure occurred, preventing the transfer from taking place. This error should not happen.

Further explanation may be obtained by issuing the ioctl (HSDPRVSTS) call and examining the returned xstatus field. (See Section 2.9.13.)

2.9 - IOCTL Function:

The ioctl(2) call is used to perform all VMEHSD operations other than simple data transfers. The ioctl call requires the user to pass the file descriptor of an open device file, a function code and an argument. All ioctl calls are performed synchronously. That is, the operation is completed and any status information to be returned to the caller is stored before control returns from the ioctl call.

Any of these functions may return a value of -1, with the variable errno set to one of the following error codes:

  • EFAULT: If some part of a data structure passed as an argument is not accessible to the user.
  • EINVAL: If some field in a data structure passed as an argument is invalid or inappropriate.
  • ENXIO: If the requested operation is illogical or impossible.
  • EIO: If some I/O error occurred on the VMEHSD.
  • EBUSY: If active I/O requests preclude performing the current request.
  • EPERM: If the caller does not have the requisite privilege for the requested operation.
  • EINTR: If a signal was caught during the course of the current function call.

Each subsection below discusses one of the ioctl functions and describes the required argument(s). Detailed information about the various data structures may be found in Section 3.0.

2.9.6 - HSDRESET [Perform VMEHSD Reset Operations]:

Argument: reset mode selection

This call performs the requested reset operation(s) on the addressed VMEHSD. The argument to this function is a reset mode selection which may be defined in one of three ways:

a) Constants selecting individual reset operations:

  • HSD_TERM: Issue "terminate device" function
  • HSD_MCLR: Issue master clear (I/O Reset) function
  • HSD_RESET: Issue board reset to VMEHSD

Two or more selections may be or-ed together; they will be performed in the order listed above.

b) The constant HSD_RSTCOD may be or-ed with the desired VMEHSD hardware reset code. The requested code will be issued to the board directly.

c) The constant HSD_HALT for the reset mode will result in termination of any currently active I/O operation. The driver in effect, simulates an immediate time-out and terminates the operation appropriately.

This function can be issued to any device. Unless the argument is HSD_HALT, there must be no currently active I/O operation on the device.

2.9.10 - HSDPRVSTS [Read Status of Previous Operation]:

Argument: pointer to hsdctl structure

This call returns status from the last operation performed on the addressed device to the referenced hsdctl structure. The most recent board and external device status are stored in fields hsd_sts and dev_sts, respectively. The extended status code from the last operation is stored in the xstatus field and the value returned to the system errno variable from the last ioctl call is stored in the perrno field. This call is useful in obtaining more detailed information about a failed data transfer operation. It may be issued to any device at any time. The return value from this function is always zero, unless problems are encountered in accessing the user's hsdctl structure, in which case -1 will be returned and errno will be set to EFAULT.

2.9.11 - HSDAUXCMD [Prefix Auxiliary IOCL to Read/Write]:

Argument: pointer to hsdctl structure

This call allows the user to specify auxiliary device commands, status requests, and data outputs to be prefixed to the next read or write call. It also allows the user to specify a User Device-Dependent command for the Read or Write IOCB. The iocl field of the referenced hsdctl should point to the desired IOCB list (IOCL). The IOCL may contain Device Command, Device Status Request or Write Data IOCB's, only. The IOCL and any data to be written to the device, are moved to a buffer internal to the driver. At the next read or write call, the list copied from the HSDAUXCMD call will be prefixed to the IOCL required for the data transfer. When the I/O operation is complete, status stored by the VMEHSD in the driver's copy of the auxiliary IOCL will be posted back to the user's IOCL before return from the read or write is made. An HSDAUXCMD call with the iocl address set to 0 will cancel any pending HSDAUXCMD. This call may be issued to any device with no currently active I/O operation.

On any HSDAUXCMD call (regardless of whether the iocl address is 0) the contents of the uddcmd field of the referenced hsdctl will be saved. The saved value will be inserted into the User Device-Dependent Command (UDDCMD) field of the IOCB's used for the next READ or WRITE call. The UDDCMD field occupies bits 08-15 of the first word of a data transfer IOCB.

In addition to the errors returned by other ioctl functions, HSDAUXCMD may return an errno value of EINVAL with the hsdctl xstatus field set to one of the following:

EXAUX an invalid IOCB (not Device Command, Status Request or Write) is in the list.

EXLONG The IOCB list and all write data would not fit in the auxiliary kernel buffer defined for the device.

Note: The Device Command and Status Request IOCB's are legal in an HSDAUXCMD list, but are invalid for a VMEHSD operating in IBL configuration; it is the user's responsibility to insure this restriction is met.

The size of the driver's auxiliary buffer is determined at the time the kernel is built. See Section 5.2.2 for details of configuring the auxiliary buffer.


3.3 - Device Command:

The Device Command Block (DCB) is a block of eight (8) 32-bit words which provides the VMEHSD card with configuration information, a description of the operation to be performed and a place to return status information to the user. The first two 32-bit words of the DCB contain basic configuration information required for the VMEHSD to access the VMEbus and the address of the DCB. The VMEHSD is activated by writing these two 32-bit words to its command and pointer registers. Writing to the pointer register causes the VMEHSD to execute the operation specified by the contents of the command register. Therefore, the first 32-bit word of the DCB must be written to the command register before the second word is written to the pointer register.

Jumpers JP1-16 on the VMEHSD board determine the physical address of the VMEHSD command and pointer registers. The jumpers determine the upper 16-bits (bits 31-16) of the addresses. The lower 16-bits of the addresses are fixed at FEFC (hex) for the command register and FF00 (hex) for the pointer register. Jumper JP1 corresponds to bit 31 (most significant) of the physical address; JP16 corresponds to bit 16. Jumpers are installed corresponding to ones in the desired address. The factory setting is 0100 (hex), giving 0100FEFC (hex) for command register and 0100FF00 (hex) for pointer register.

The required DCB structure is managed by the VMEHSD driver so the user never needs to be concerned with its contents. Certain fields of the DCB are returned to the caller and may be modified by the HSDGETCFG and HSDSETCFG calls. For the user concerned with this level of detail, the DCB is described in detail in the ADS VMEHSD Technical Manual, document number 0900052.

3.4 - hsdconfig Structure:

The hsdconfig structure is used with the HSDGETCFG and HSDSETCFG calls to retrieve or change the VMEHSD's configuration. This structure contains the following information:

busadrs VMEbus address assigned to addressed VMEHSD

cfg_reg Current contents of VMEHSD configuration register. Significant bit sub-fields of this field are accessed by symbols defining appropriate masks:

  • HSD_MODE HSD/IBL selection has value
  • HSD_MHSD if operating as HSD
  • HSD_MIBL if operating as IBL
  • HSD_CCFG IBL connector configuration has value
  • HSD_CHSD if configured with HSD (normal) connector
  • HSD_CIBL if configured with IBL (swapped) connector
  • HSD_HPRI IBL link high priority selection (set if high)
  • HSD_SWP Byte/word swap selection
  • HSD_EXISTS Bit is set in configuration if a VMEHSD at the configured address actually exists. Clearing this bit and issuing an HSDSETCFG call effectively takes the addressed device off-line.

irqlvl Configured VMEbus interrupt request level

ivector Configured VMEbus interrupt vector

brlmode VMEbus release mode selection

brqlvl VMEbus request level

am_dcb VMEbus address modifier for accessing DCB

am_iocl VMEbus address modifier for accessing IOCB lists

am_bfr VMEbus address modifier for accessing data buffers

3.4.1 - Address Modifiers:

The VMEbus address modifier (AM) lines allow a bus master to pass additional information about the slave during a data transfer. This information may be used to partition the system to increase reliability or to enhance memory/device protection and privileged access functions. Because system requirements vary, the VMEHSD allows the user to specify the address modifier bits to be used in accessing: 1) the DCB for control and status information, 2) the IOCB list and 3) the user's data buffer. The 64 possible AM codes are grouped into three categories: 1) defined by VMEbus specification, 2) defined by user, 3) reserved.

The recommended AM codes for basic I/O operations are:

Hex Value    Interpretation

09    Extended non-privileged Data Access

0D    Extended supervisory Data Access

0B    Extended non-privileged Ascending Access

3.5 - hsdmode Structure:

The hsdmode structure is used with the HSDGETMOD and HSDSETMOD calls to retrieve or change the VMEHSD's operating mode. This structure contains the following information:

flags    Flag bits specifying options:

  • HM_SWW Swap 16-bit words in data transfers
  • HM_SWB Swap bytes in data transfer
  • HM_CBR Issue device command before read
  • HM_CBW Issue device command before write
  • HM_SAR Request device status after read
  • HM_SAW Request device status after write
  • HM_LIN Initiate IBL link request on each data transfer
  • HM_EEM "Encore Emulation Mode": Issue or acknowledge

    IBL link requests according to Encore H.IBLG handler protocol.

IBL link operations are summarized in the following table:

Operation HM_LIN HM_EEM Link

Any 0 0 Ack

Any 1 x Issue

Write 0 1 Issue

Read 0 1 Ack

timeout Default timeout to be applied to any operation not using an hsdctl structure or not having a timeout specified in the associated hsdctl structure.

cmd_rd Two-longword array containing the device-dependent portion of the device command used if HM_CBR is set. The lower 24-bits of the first word and the whole second word are placed in a device command IOCB which is command chained to the required data transfer IOCBs.

cmd_wt Two-longword array containing the device-dependent portion of the device command used if HM_CBW is set. The lower 24-bits of the first word and the whole second word are placed in a device command IOCB which is command chained to the required data transfer IOCBs.

3.6 - Input/Output Control Block :

The IOCB list is an array of structures which the calling routine must fill in. The normal HSD bit definitions are adhered to strictly. The following HSD functions, which are described by IOCB Word 1, opcode bits 00 - 07, are supported (bit 00 is most significant and all bits are Hi True):

Bit 00 - HSD I/O Transfer (1 = Input & 0 = Output).
Bit 01 - HSD Command Transfer.
Bit 02 - HSD Status Request.
Bit 04 - HSD Interrupt on End-of-Block (IEOB).
Bit 05 - HSD Transfer-In-Channel (TIC).
Bit 06 - HSD Command Chain.
Bit 07 - HSD Data Chain.

The VMEHSD also supports in firmware the SOBNZ (subtract one and branch non-zero) variant of the TIC IOCB as defined by the Encore generic HSD handler, H.HSDG. For this function, the third word of a TIC IOCB must contain two 16-bit counters. The least-significant one (bits 16-31) is decremented each time the TIC is processed and a branch to the target address is taken. When the count in bits 16-31 reaches zero, it is reset to the value in bits 0-15 and the branch is not taken, causing the IOCB at the next sequential address to be fetched and executed.

3.7 - hsdctl Structure:

The hsdctl structure is used with all ioctl calls which initiate an I/O operation or retrieve external device status. This structure contains the following information:

flags Flag bits specifying options:

  • SACMD Issue device status request after performing command on an HSDDEVSTS call.

timeout Time limit in seconds to allow for completion of this operation. If zero, the most recent value set by an HSDSETMOD call will be used. If no value previously set by HSDSETMOD, default is 30 seconds.

xstatus Extended status information. The value returned in this field on an HSDPRVSTS call gives additional information about the reason for termination. See Section 4.0 for a detailed list of status codes.

perrno Previous value of system variable errno, returned on HSDPRVSTS call only.

iocb_dsr Low-order 24-bits of this word are placed in the first word of the device status request IOCB issued by an HSDDEVSTS or HSDDEVCMD (if SACMD flag set) call.

iocb_cmd1 Low-order 24-bits of this word are placed in the first word of the IOCB issued by an HSDDEVCMD call.

iocb_cmd2 This word is placed in the second word of the IOCB issued by an HSDDEVCMD call.

hsd_sts Most recent status stored by the VMEHSD is returned to this field at completion of any operation.

dev_sts Status returned by the external device is stored here by an HSDDEVSTS or HSDDEVCMD (with SACMD set) call.

iocl Pointer to IOCB list to be executed.

Note: The header file hsdio.h defines additional fields in the hsdctl structure for compatibility with previous versions of the driver. Only those elements listed here are valid for use with the IRIX 6.5 driver.


4.2 - hsdctl Status Returns:

The xstatus field of the hsdctl structure contains an expanded error code in the case of an EINVAL, EFAULT, or EIO return. The expanded values are as defined in hsdio.h.

Expansion of EFAULT code:

EXIOLA Unable to access some part of IOCB list.

EXBUFA Caller unable or unauthorized to access some part of a data buffer addressed by the IOCB list.

Expansion of EINVAL code:

EXBUFB IOCB specifies buffer address not on a 32-bit boundary.

EXCNT IOCB specifies I/O transfer count of 0.

EXCHN Chaining error on IOCB (DC and CC).

EXCMD Command or Status request IOCB is in error.

EXLONG If operation is read or write: data transfer request is too long. If operation is ioctl (HSDAUXCMD): list and data will not fit in device's auxiliary kernel buffer.

EXAUX Invalid IOCB type (not Device Command, Status Request, or Write Data transfer) found in the list passed to a HSDAUXCMD call.

Expansion of EIO code

EXTIMO Request not completed before timeout occurred.

EXKILL Request aborted by HSDHALTIO or HSDRESET, HSD_RESET call.

EXIOER Actual VMEHSD I/O error (see hsd_stat field for bad status value).

4.3 - VMEHSD Board Status Returns:

The hsd-sts field of the hsdctl structure contains the status returned by the addressed VMEHSD on the last operation. This status is also stored in the fourth word of any IOCB other than a TIC or Device Status Request.

Format of the VMEHSD status word is:

  • Bit 31 Current IOCB specifies a read operation
  • Bit 30 Current IOCB specifies command transfer
  • Bit 29 Current IOCB specifies status request
  • Bit 28 Current IOCB specifies data chaining
  • Bit 27 Current IOCB specifies command chaining
  • Bit 26 Link request was received (IBL mode only)
  • Bit 25 External terminate received from device
  • Bit 24 Device End-of-Block signal received
  • Bit 23 Operation complete
  • Bit 22 External device present
  • Bit 21 Output FIFO empty
  • Bit 20 Output FIFO half full
  • Bit 19 Input FIFO empty
  • Bit 18 Input FIFO half full
  • Bit 17 Not external mode
  • Bit 16 Transfer counter non-zero
  • Bits 15-0 Residual count. Number of 32-bit words requested but not transferred.


5.2.1 - Customizing the SYSTEM File:

Edit the file vhsd.sm to describe the target configuration. Each VMEHSD is described by a VECTOR directive such as the following. The entire directive is a single line although it is broken up here for illustration.

VECTOR bustype=VME module=vhsd ipl=4 ctlr=0 adapter=0 iospace=(A32S,0x20000000,0x10000) exprobe_space(r,A32S,0x2000FF04,4,0x564D4548,0xFFFFFFFF)

The following items may be changed in each VECTOR line:

ipl VMEbus Interrupt Priority Level for the board (may be a value from 1 through 7). Interrupt vectors will be allocated by the driver when the system is booted.

ctlr VMEHSD "unit" number. These should be assigned sequentially, starting from 0, and may not exceed 7.

adapter The number of the VMEbus adapter to which this VMEHSD is attached. Should be zero except for systems with more than one VMEbus adapter.

iospace The second argument specifies the VMEbus address of the device and must match the VMEHSD address jumper setting (JP1) exactly. The other arguments must not be changed.

exprobe The third argument specifies the VMEHSD register to probe to see if the board is installed. This value must be equal to the bus address specified by iospace plus (hex) FF04. The other exprobe arguments must not be changed.

Note that when a probe address is given, lboot will include the VMEHSD driver and tables only for devices that are physically present. To include the driver in the kernel unconditionally, delete the part of the VECTOR directive(s), from exprobe to the end of the line. Refer to the comments in the file /var/sysgen/system/irix.sm to select appropriate VMEbus addresses which are reserved for customer devices.

A typical configuration for a VMEHSD on an IP19 processor is:

VMEbus address (jumper):  2000000016
Base (iospace) address:  2000000016
Interrupt Priority Level:  4
Bus Request Level:  3

5.2.2 - Customizing the MASTER File:

The vhsd.master file may be edited to set the major device number used for VMEHSD devices and the sizes of buffers allocated for HSDAUXCMD operations. The major device number is given in the "SOFT" field of the first non-comment line of the file. It should be chosen from the range of values reserved for customer devices so as not to conflict with other devices in the system. If this number is changed, the same value must be given to the mkhsdfiles script to create the VMEHSD device files.

The symbols SIZE_0 through SIZE_7, defined in this file, specify the length, in (32-bit) longwords, of the auxiliary buffers used for VMEHSD units 0 through 7, respectively. The default value is 1024 longwords (4096 bytes). An auxiliary buffer must be large enough to accommodate the user's auxiliary list (4 longwords per IOCB) as well as all data to be written with the list. However, this buffer is allocated by the driver at boot time and reduces total available memory, so its size should be kept as small as practical. Auxiliary buffers are not defined for devices which are not configured. DMA mapping hardware for the auxiliary buffer, as well as for the largest permissible user buffer are allocated when the device is opened and freed when it is closed.

To alter the size of an auxiliary buffer, set the corresponding SIZE_n symbol to the desired length, in longwords. To suppress use of the auxiliary buffer, set the length to 0. Note that if no auxiliary buffer is defined for a particular VMEHSD, an HSDAUXCMD call addressed to that unit will always return EINVAL, with xstatus set to EXLONG (IOCB list too long for auxiliary buffer).

For additional information, please contact us at your convenience.  Copyright 2001 Applied Data Sciences, Inc. All rights reserved.