26#ifndef PROTOCORE_VXI11_H
27#define PROTOCORE_VXI11_H
37#define PC_VXI11_CORE_PROG 0x0607AFu
38#define PC_VXI11_CORE_VERS 1
39#define PC_RPC_PMAP_PROG 100000u
40#define PC_RPC_PMAP_VERS 2
41#define PC_RPC_PMAP_PORT 111
42#define PC_RPC_PMAP_GETPORT 3
43#define PC_RPC_PROTO_TCP 6
44#define PC_RPC_AUTH_NONE 0
45#define PC_RPC_MSG_ACCEPTED 0
46#define PC_RPC_ACCEPT_SUCCESS 0
49enum class Vxi11Proc : uint32_t
61 DEVICE_ENABLE_SRQ = 20,
64 CREATE_INTR_CHAN = 25,
65 DESTROY_INTR_CHAN = 26,
69#define PC_VXI11_FLAG_WAITLOCK 0x01
70#define PC_VXI11_FLAG_END 0x08
71#define PC_VXI11_FLAG_TERMCHRSET 0x80
73#define PC_VXI11_REASON_REQCNT 0x01
74#define PC_VXI11_REASON_CHR 0x02
75#define PC_VXI11_REASON_END 0x04
77#define PC_VXI11_ERR_NONE 0
78#define PC_VXI11_ERR_SYNTAX 1
79#define PC_VXI11_ERR_NOT_ACCESSIBLE 3
80#define PC_VXI11_ERR_INVALID_LINK 4
81#define PC_VXI11_ERR_PARAMETER 5
82#define PC_VXI11_ERR_NO_LOCK 12
83#define PC_VXI11_ERR_IO_TIMEOUT 15
84#define PC_VXI11_ERR_IO_ERROR 17
85#define PC_VXI11_ERR_ABORT 23
88const char *pc_vxi11_error_str(int32_t error);
97size_t pc_rpc_record_mark(uint8_t *buf,
size_t cap, uint32_t payload_len);
105bool pc_rpc_parse_record_mark(
const uint8_t *buf,
size_t len,
bool *last, uint32_t *frag_len);
115bool pc_rpc_parse_reply(
const uint8_t *rpc,
size_t len, uint32_t *xid, uint32_t *accept_stat,
size_t *result_off);
123size_t pc_vxi11_build_getport(uint8_t *buf,
size_t cap, uint32_t xid, uint32_t prog, uint32_t vers, uint32_t proto);
129bool pc_vxi11_parse_getport_resp(
const uint8_t *rpc,
size_t len, uint32_t *port);
138size_t pc_vxi11_build_create_link(uint8_t *buf,
size_t cap, uint32_t xid, int32_t client_id,
bool lock_device,
139 uint32_t lock_timeout,
const char *device);
142struct Vxi11CreateLinkResp
147 uint32_t max_recv_size;
149bool pc_vxi11_parse_create_link_resp(
const uint8_t *rpc,
size_t len, Vxi11CreateLinkResp *out);
156size_t pc_vxi11_build_device_write(uint8_t *buf,
size_t cap, uint32_t xid, int32_t lid, uint32_t io_timeout,
157 uint32_t lock_timeout, uint32_t flags,
const uint8_t *data,
size_t data_len);
165bool pc_vxi11_parse_write_resp(
const uint8_t *rpc,
size_t len, Vxi11WriteResp *out);
172size_t pc_vxi11_build_device_read(uint8_t *buf,
size_t cap, uint32_t xid, int32_t lid, uint32_t request_size,
173 uint32_t io_timeout, uint32_t lock_timeout, uint32_t flags, uint8_t term_char);
183bool pc_vxi11_parse_read_resp(
const uint8_t *rpc,
size_t len, Vxi11ReadResp *out);
189size_t pc_vxi11_build_device_readstb(uint8_t *buf,
size_t cap, uint32_t xid, int32_t lid, uint32_t flags,
190 uint32_t lock_timeout, uint32_t io_timeout);
193struct Vxi11ReadStbResp
198bool pc_vxi11_parse_readstb_resp(
const uint8_t *rpc,
size_t len, Vxi11ReadStbResp *out);
205size_t pc_vxi11_build_device_clear(uint8_t *buf,
size_t cap, uint32_t xid, int32_t lid, uint32_t flags,
206 uint32_t lock_timeout, uint32_t io_timeout);
212size_t pc_vxi11_build_device_trigger(uint8_t *buf,
size_t cap, uint32_t xid, int32_t lid, uint32_t flags,
213 uint32_t lock_timeout, uint32_t io_timeout);
219size_t pc_vxi11_build_destroy_link(uint8_t *buf,
size_t cap, uint32_t xid, int32_t lid);
226bool pc_vxi11_parse_error_resp(
const uint8_t *rpc,
size_t len, int32_t *error);
User-facing configuration for ProtoCore.