VxWorks Reference Manual : Libraries
mb87030Lib - Fujitsu MB87030 SCSI Protocol Controller (SPC) library
mb87030CtrlCreate( ) - create a control structure for an MB87030 SPC
mb87030CtrlInit( ) - initialize a control structure for an MB87030 SPC
mb87030Show( ) - display the values of all readable MB87030 SPC registers
This is the I/O driver for the Fujitsu MB87030 SCSI Protocol Controller (SPC) chip. It is designed to work in conjunction with scsiLib.
Most of the routines in this driver are accessible only through the I/O system. Two routines, however, must be called directly: mb87030CtrlCreate( ) to create a controller structure, and mb87030CtrlInit( ) to initialize the controller structure.
mb87030.h
mb87030Lib, scsiLib, Fujitsu Small Computer Systems Interface MB87030 Synchronous/Asynchronous Protocol Controller Users Manual, VxWorks Programmer's Guide: I/O System
mb87030CtrlCreate( ) - create a control structure for an MB87030 SPC
MB_87030_SCSI_CTRL *mb87030CtrlCreate ( UINT8 * spcBaseAdrs, /* base address of SPC */ int regOffset, /* addr offset between consecutive regs. */ UINT clkPeriod, /* period of controller clock (nsec) */ int spcDataParity, /* type of input to SPC DP (data parity) */ FUNCPTR spcDMABytesIn, /* SCSI DMA input function */ FUNCPTR spcDMABytesOut /* SCSI DMA output function */ )
This routine creates a data structure that must exist before the SPC chip can be used. This routine should be called once and only once for a specified SPC. It should be the first routine called, since it allocates memory for a structure needed by all other routines in the library.
After calling this routine, at least one call to mb87030CtrlInit( ) should be made before any SCSI transaction is initiated using the SPC chip.
A detailed description of the input parameters follows:
- spcBaseAdrs
- the address at which the CPU would access the lowest register of the SPC.
- regOffset
- the address offset (bytes) to access consecutive registers. (This must be a power of 2, for example, 1, 2, 4, etc.)
- clkPeriod
- the period in nanoseconds of the signal to the SPC clock input (only used for select command timeouts).
- spcDataParity
- the parity bit must be defined by one of the following constants, according to whether the input to SPC DP is GND, +5V, or a valid parity signal, respectively:
SPC_DATA_PARITY_LOW
SPC_DATA_PARITY_HIGH
SPC_DATA_PARITY_VALID
- spcDmaBytesIn and spcDmaBytesOut
- pointers to board-specific routines to handle DMA input and output. If these are NULL (0), SPC program transfer mode is used. DMA is possible only during SCSI data in/out phases. The interface to these DMA routines must be of the form:
STATUS xxDmaBytes{In, Out} ( SCSI_PHYS_DEV *pScsiPhysDev, /* ptr to phys dev info */ UINT8 *pBuffer, /* ptr to the data buffer */ int bufLength /* number of bytes to xfer */ )
A pointer to the SPC control structure, or NULL if memory is insufficient or parameters are invalid.
mb87030CtrlInit( ) - initialize a control structure for an MB87030 SPC
STATUS mb87030CtrlInit ( MB_87030_SCSI_CTRL * pSpc, /* ptr to SPC struct */ int scsiCtrlBusId, /* SCSI bus ID of this SPC */ UINT defaultSelTimeOut, /* default dev sel timeout */ int scsiPriority /* priority of task doing SCSI */ )
This routine initializes an SPC control structure created by mb87030CtrlCreate( ). It must be called before the SPC is used. This routine can be called more than once; however, it should be called only while there is no activity on the SCSI interface.
Before returning, this routine pulses RST (reset) on the SCSI bus, thus resetting all attached devices.
The input parameters are as follows:
- pSpc
- a pointer to the MB_87030_SCSI_CTRL structure created with mb87030CtrlCreate( ).
- scsiCtrlBusId
- the SCSI bus ID of the SIOP, in the range 0 - 7. The ID is somewhat arbitrary; the value 7, or highest priority, is conventional.
- defaultSelTimeOut
- the timeout, in microseconds, for selecting a SCSI device attached to this controller. The recommended value 0 specifies SCSI_DEF_SELECT_TIMEOUT (250 milliseconds). The maximum timeout possible is approximately 3 seconds. Values exceeding this revert to the maximum.
- scsiPriority
- the priority to which a task is set when performing a SCSI transaction. Valid priorities range from 0 to 255. Alternatively, the value -1 specifies that the priority should not be altered during SCSI transactions.
OK, or ERROR if parameters are out of range.
mb87030Show( ) - display the values of all readable MB87030 SPC registers
STATUS mb87030Show ( SCSI_CTRL * pScsiCtrl /* ptr to SCSI controller info */ )
This routine displays the state of the SPC registers in a user-friendly manner. It is useful primarily for debugging.
-> mb87030Show SCSI Bus ID: 7 SCTL (0x01): intsEnbl SCMD (0x00): busRlease TMOD (0x00): asyncMode INTS (0x00): PSNS (0x00): req0 ack0 atn0 sel0 bsy0 msg0 c_d0 i_o0 SSTS (0x05): noConIdle xferCnt=0 dregEmpty SERR (0x00): noParErr PCTL (0x00): bfIntDsbl phDataOut MBC (0x00): 0 XFER COUNT : 0x000000 = 0
OK, or ERROR if pScsiCtrl and pSysScsiCtrl are both NULL.