-
Notifications
You must be signed in to change notification settings - Fork 0
/
vxi11_rpc.x
158 lines (133 loc) · 6.06 KB
/
vxi11_rpc.x
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
/* **************************************************************************
vxi11_rpc.x - RPC protocol for VXI-11
From VMEBus Extensions for Instrumentation TCP/IP Instrument Protocol
Specification VXI-11, Revision 1.0, July 17, 1995.
Originally authored by the VXIbus Consortium, Inc.
Copied to this file by Eddie Lew, Lew Engineering, May 18, 2020.
Edit History:
05-18-20 - Created file.
************************************************************************** */
/* Types */
typedef long Device_Link;
enum Device_AddrFamily { /* used by interrupts */
DEVICE_TCP,
DEVICE_UDP
};
typedef long Device_Flags;
/* Error types */
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<>; /* the 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 */
/* FIXME - The type below is unsigned long in other implementations */
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 */
};
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;
/* Types */
struct Device_SrqParms {
opaque handle<>;
};
program DEVICE_INTR {
version DEVICE_INTR_VERSION {
void device_intr_srq (Device_SrqParms) = 30;
}=1;
}= 0x0607B1;