Example ‘c’ routines for command list – Ciprico Rimfire 3880 User Manual

Page 81

Advertising
background image

User’s Guide

21020285 D

Chapter 4 Command Operation

Example ‘C’ Routines for Command List

Page 4 - 23

Example ‘C’
Routines for
Command List

The following ‘C’ listing is included here as an example of how you may set-
up the Parameter Block, Status Block and Command List structures and
manipulate the Command List Indexes.

/* Global Defines: */
#define EMPTY 0

#define NPB

100 /* NPB - Num of Parameter Blocks in Command List. */

#define NSB

200 /* NSB - Num of Status Blocks in Command List. */

#define BYTE

unsigned char

/* an 8 bit value */

#define WORD

unsigned int

/* a 16 bit value */

#define DWORD unsigned long

/* a 32 bit value */

/* parameter_block - a structure used to pass a command to the RF3880 VME to
* SCSI adapter. The fields are:

*/

typedef struct

{

DWORD

identifier;

/* identifier - command identifier. */

BYTE

flags-2;

/* command flags. */

BYTE

flags-1;

/* command flags. */

BYTE

modifier;

/* modifier - address modifier. */

BYTE

target;

/* target - target ID or adpater ID. */

/* possible values for flags-1 */

#defineCF_VALID

0x80 /* dat and dir bits valid. */

#defineCF_FREE

0x40 /* reserved bit, not used. */

#defineCF_INHIBIT_CMD_COMPLETE0x20 /* command list, synch control. */
#defineCF_FREE1

0x10 /* reserved bit, not used.*/

#defineCF_IRS

0x08 /* inhibit request-sense. */

#defineCF_DATA

0x04 /* data for this opration. */

#defineCF_DIR

0x02 /* direction; 1 = (writes). */

/* possible values for flags-2 */

#defineCF_JUST_SEND_MSG

0x08 /* message-only operation. */

#defineCF_INHIBIT_DISCONNECT

0x04 /* inhibit disconnect. */

#defineCF_TAG_MESSAGE_TYPE

0x02 /* tag message type. */

union
{

WORD

w[2];

DWORD

d;

} sdp;

/* sdp - source/dest. memory address */

union
{

WORD

w[2];

DWORD

d;

} bytes;

/* bytes - data transfer count */

Advertising