144 lines
5.0 KiB
Plaintext
144 lines
5.0 KiB
Plaintext
|
/* This is taken straight from Appendix C of the specification */
|
||
|
|
||
|
typedef long Device_Link;
|
||
|
|
||
|
enum Device_AddrFamily {
|
||
|
DEVICE_TCP,
|
||
|
DEVICE_UDP
|
||
|
};
|
||
|
|
||
|
typedef long Device_Flags;
|
||
|
|
||
|
typedef long Device_ErrorCode;
|
||
|
|
||
|
struct Device_Error {
|
||
|
Device_ErrorCode error;
|
||
|
};
|
||
|
|
||
|
struct Create_LinkParms {
|
||
|
long clientId; /* implementation specific value */
|
||
|
bool lockDevice; /* attempt to lock the device */
|
||
|
unsigned long lock_timeout; /* time to wait on a lock */
|
||
|
string device<>; /* name of device */
|
||
|
};
|
||
|
|
||
|
struct Create_LinkResp {
|
||
|
Device_ErrorCode error;
|
||
|
Device_Link lid;
|
||
|
unsigned short abortPort; /* for the abort RPC */
|
||
|
unsigned long maxRecvSize; /* specifies max data size in bytes
|
||
|
device will accept on a write */
|
||
|
};
|
||
|
|
||
|
struct Device_WriteParms {
|
||
|
Device_Link lid; /* link id from create_link */
|
||
|
unsigned long io_timeout; /* time to wait for I/O */
|
||
|
unsigned long lock_timeout; /* time to wait for lock */
|
||
|
Device_Flags flags;
|
||
|
opaque data<>; /* data length and the data itself */
|
||
|
};
|
||
|
|
||
|
struct Device_WriteResp {
|
||
|
Device_ErrorCode error;
|
||
|
unsigned long size; /* number of bytes written */
|
||
|
};
|
||
|
|
||
|
struct Device_ReadParms {
|
||
|
Device_Link lid; /* link id from create_link */
|
||
|
unsigned long requestSize; /* bytes requested */
|
||
|
unsigned long io_timeout; /* time to wait for I/O */
|
||
|
unsigned long lock_timeout; /* time to wait for lock */
|
||
|
Device_Flags flags;
|
||
|
char termChar; /* valid if flags & termchrset */
|
||
|
};
|
||
|
|
||
|
struct Device_ReadResp {
|
||
|
Device_ErrorCode error;
|
||
|
long reason; /* reason(s) read completed */
|
||
|
opaque data<>; /* data.len and data.val */
|
||
|
};
|
||
|
|
||
|
struct Device_ReadStbResp {
|
||
|
Device_ErrorCode error; /* error code */
|
||
|
unsigned char stb; /* the returned status byte */
|
||
|
};
|
||
|
|
||
|
struct Device_GenericParms {
|
||
|
Device_Link lid; /* Device_Link id from connect call */
|
||
|
Device_Flags flags; /* flags with options */
|
||
|
unsigned long lock_timeout; /* time to wait for lock */
|
||
|
unsigned long io_timeout; /* time to wait for I/O */
|
||
|
};
|
||
|
|
||
|
struct Device_RemoteFunc {
|
||
|
unsigned long hostAddr; /* host servicing interrupt */
|
||
|
unsigned short hostPort; /* valid port # on client */
|
||
|
unsigned long progNum; /* DEVICE_INTR */
|
||
|
unsigned long progVers; /* DEVICE_INTR_VERSION */
|
||
|
Device_AddrFamily progFamily; /* DEVICE_UDP | DEVICE_TCP */
|
||
|
};
|
||
|
|
||
|
struct Device_EnableSrqParms {
|
||
|
Device_Link lid;
|
||
|
bool enable; /* enable or disable interrupts */
|
||
|
opaque handle<40>; /* host specific data */
|
||
|
};
|
||
|
|
||
|
struct Device_LockParms {
|
||
|
Device_Link lid; /* link id from create_link */
|
||
|
Device_Flags flags; /* contains the waitlock flag */
|
||
|
unsigned long lock_timeout; /* time to wait to acquire lock */
|
||
|
};
|
||
|
|
||
|
struct Device_DocmdParms {
|
||
|
Device_Link lid; /* link id from create_link */
|
||
|
Device_Flags flags; /* flags specifying various options */
|
||
|
unsigned long io_timeout; /* time to wait for I/O to complete */
|
||
|
unsigned long lock_timeout; /* time to wait on a lock */
|
||
|
long cmd; /* which command to execute */
|
||
|
bool network_order; /* client's byte order */
|
||
|
long datasize; /* size of individual data elements */
|
||
|
opaque data_in<>; /* docmd data parameters */
|
||
|
};
|
||
|
|
||
|
struct Device_DocmdResp {
|
||
|
Device_ErrorCode error; /* returned status */
|
||
|
opaque data_out<>; /* returned data parameter */
|
||
|
};
|
||
|
|
||
|
struct Device_SrqParms {
|
||
|
opaque handle<>;
|
||
|
};
|
||
|
|
||
|
program DEVICE_ASYNC{
|
||
|
version DEVICE_ASYNC_VERSION {
|
||
|
Device_Error device_abort(Device_Link) = 1;
|
||
|
} = 1;
|
||
|
} = 0x0607B0;
|
||
|
|
||
|
program DEVICE_CORE {
|
||
|
version DEVICE_CORE_VERSION {
|
||
|
Create_LinkResp create_link(Create_LinkParms) = 10;
|
||
|
Device_WriteResp device_write(Device_WriteParms) = 11;
|
||
|
Device_ReadResp device_read(Device_ReadParms) = 12;
|
||
|
Device_ReadStbResp device_readstb(Device_GenericParms) = 13;
|
||
|
Device_Error device_trigger(Device_GenericParms) = 14;
|
||
|
Device_Error device_clear(Device_GenericParms) = 15;
|
||
|
Device_Error device_remote(Device_GenericParms) = 16;
|
||
|
Device_Error device_local(Device_GenericParms) = 17;
|
||
|
Device_Error device_lock(Device_LockParms) = 18;
|
||
|
Device_Error device_unlock(Device_Link) = 19;
|
||
|
Device_Error device_enable_srq(Device_EnableSrqParms)= 20;
|
||
|
Device_DocmdResp device_docmd(Device_DocmdParms) = 22;
|
||
|
Device_Error destroy_link(Device_Link) = 23;
|
||
|
Device_Error create_intr_chan(Device_RemoteFunc) = 25;
|
||
|
Device_Error destroy_intr_chan(void) = 26;
|
||
|
} = 1;
|
||
|
} = 0x0607AF;
|
||
|
|
||
|
program DEVICE_INTR {
|
||
|
version DEVICE_INTR_VERSION {
|
||
|
void device_intr_srq(Device_SrqParms) = 30;
|
||
|
} = 1;
|
||
|
} = 0x0607B1;
|