25#include "switchtec/gas_mrpc.h"
27#include "switchtec_priv.h"
33#define GAS_MRPC_MEMCPY_MAX 512
60 const void *src,
size_t n)
65 uint32_t offset = (uint32_t)(dest - (
void __gas *)dev->gas_map);
69 if (len >
sizeof(cmd.data))
70 len =
sizeof(cmd.data);
71 cmd.len = htole32(len);
72 cmd.gas_offset = htole32(offset);
73 memcpy(&cmd.data, src, len);
76 len +
sizeof(cmd) -
sizeof(cmd.data),
95 const void __gas *src,
size_t n)
101 cmd.gas_offset = htole32((uint32_t)(src - (
void __gas *)dev->gas_map));
105 if (len > GAS_MRPC_MEMCPY_MAX)
106 len = GAS_MRPC_MEMCPY_MAX;
107 cmd.len = htole32(len);
110 sizeof(cmd), dest, len);
112 memset(dest, 0xff, n);
118 cmd.gas_offset += len;
132 const void __gas *src,
size_t n)
134 char buf[MRPC_MAX_DATA_LEN];
135 ssize_t ret, total = 0;
140 if (txfr_sz >
sizeof(buf))
141 txfr_sz =
sizeof(buf);
145 ret = write(fd, buf, txfr_sz);
int switchtec_cmd(struct switchtec_dev *dev, uint32_t cmd, const void *payload, size_t payload_len, void *resp, size_t resp_len)
Execute an MRPC command.
void gas_mrpc_memcpy_to_gas(struct switchtec_dev *dev, void __gas *dest, const void *src, size_t n)
Copy data to the GAS using MRPC commands.
int gas_mrpc_memcpy_from_gas(struct switchtec_dev *dev, void *dest, const void __gas *src, size_t n)
Copy data from the GAS using MRPC commands.
ssize_t gas_mrpc_write_from_gas(struct switchtec_dev *dev, int fd, const void __gas *src, size_t n)
Call write() with data from the GAS using an MRPC command.