Go to the documentation of this file.
30 #include "../switchtec_priv.h"
33 #include "switchtec/gas_mrpc.h"
34 #include "switchtec/errors.h"
68 int device,
int func);
106 dev->ops->close(dev);
135 if ((sum->img.active != NULL) && (sum->img.active->running)) {
136 running_img = sum->img.active;
137 }
else if ((sum->img.inactive != NULL) && (sum->img.inactive->running)) {
138 running_img = sum->img.inactive;
145 strncpy(buf, running_img->
version, buflen);
146 buf[buflen - 1] =
'\0';
165 const void *payload,
size_t payload_len,
void *resp,
170 cmd &= SWITCHTEC_CMD_MASK;
171 cmd |= dev->pax_id << SWITCHTEC_PAX_ID_SHIFT;
173 ret = dev->ops->cmd(dev, cmd, payload, payload_len, resp, resp_len);
176 errno |= SWITCHTEC_ERRNO_MRPC_FLAG_BIT;
198 if (!dev->ops->get_devices)
201 return dev->ops->get_devices(dev, status, ports);
214 int *partition,
int *port)
216 return dev->ops->pff_to_port(dev, pff, partition, port);
231 return dev->ops->port_to_pff(dev, partition, port, pff);
258 return dev->ops->gas_map(dev, writeable, map_size);
269 if (!dev->ops->gas_unmap)
272 dev->ops->gas_unmap(dev, map);
285 enum switchtec_fw_image_part_id_gen3 part)
287 return dev->ops->flash_part(dev, info, part);
300 return dev->ops->event_summary(dev, sum);
315 int index,
int flags,
318 return dev->ops->event_ctl(dev, e, index, flags, data);
331 if (!dev->ops->event_wait) {
336 return dev->ops->event_wait(dev, timeout_ms);
346 int gas_read8(
struct switchtec_dev *dev, uint8_t __gas *addr, uint8_t *val)
348 if (dev->pax_id != dev->local_pax_id)
349 return gas_mrpc_read8(dev, addr, val);
351 *val = __gas_read8(dev, addr);
363 int gas_read16(
struct switchtec_dev *dev, uint16_t __gas *addr, uint16_t *val)
365 if (dev->pax_id != dev->local_pax_id)
366 return gas_mrpc_read16(dev, addr, val);
368 *val = __gas_read16(dev, addr);
380 int gas_read32(
struct switchtec_dev *dev, uint32_t __gas *addr, uint32_t *val)
382 if (dev->pax_id != dev->local_pax_id)
383 return gas_mrpc_read32(dev, addr, val);
385 *val = __gas_read32(dev, addr);
397 int gas_read64(
struct switchtec_dev *dev, uint64_t __gas *addr, uint64_t *val)
399 if (dev->pax_id != dev->local_pax_id)
400 return gas_mrpc_read64(dev, addr, val);
402 *val = __gas_read64(dev, addr);
413 void gas_write8(
struct switchtec_dev *dev, uint8_t val, uint8_t __gas *addr)
415 if (dev->pax_id != dev->local_pax_id)
416 gas_mrpc_write8(dev, val, addr);
418 __gas_write8(dev, val, addr);
427 void gas_write16(
struct switchtec_dev *dev, uint16_t val, uint16_t __gas *addr)
429 if (dev->pax_id != dev->local_pax_id)
430 gas_mrpc_write16(dev, val, addr);
432 __gas_write16(dev, val, addr);
441 void gas_write32(
struct switchtec_dev *dev, uint32_t val, uint32_t __gas *addr)
443 if (dev->pax_id != dev->local_pax_id)
444 gas_mrpc_write32(dev, val, addr);
446 __gas_write32(dev, val, addr);
455 void gas_write64(
struct switchtec_dev *dev, uint64_t val, uint64_t __gas *addr)
457 if (dev->pax_id != dev->local_pax_id)
458 gas_mrpc_write64(dev, val, addr);
460 __gas_write64(dev, val, addr);
471 const void *src,
size_t n)
473 if (dev->pax_id != dev->local_pax_id)
476 __memcpy_to_gas(dev, dest, src, n);
488 const void __gas *src,
size_t n)
490 if (dev->pax_id != dev->local_pax_id)
493 __memcpy_from_gas(dev, dest, src, n);
506 const void __gas *src,
size_t n)
508 if (dev->pax_id != dev->local_pax_id)
511 return __write_from_gas(dev, fd, src, n);
int switchtec_get_fw_version(struct switchtec_dev *dev, char *buf, size_t buflen)
Get the firmware version as a user readable string.
gasptr_t switchtec_gas_map(struct switchtec_dev *dev, int writeable, size_t *map_size)
Map the GAS and return a pointer to access the gas.
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.
int switchtec_get_devices(struct switchtec_dev *dev, struct switchtec_status *status, int ports)
Populate an already retrieved switchtec_status structure list with information about the devices plug...
struct switchtec_dev * switchtec_open_eth(const char *ip, const int inst)
Open a switchtec device over ethernet.
void gas_write32(struct switchtec_dev *dev, uint32_t val, uint32_t __gas *addr)
Write a uint32_t to the GAS.
void memcpy_to_gas(struct switchtec_dev *dev, void __gas *dest, const void *src, size_t n)
Copy data to the GAS.
void gas_write8(struct switchtec_dev *dev, uint8_t val, uint8_t __gas *addr)
Write a uint8_t to the GAS.
struct switchtec_dev * switchtec_open_i2c(const char *path, int i2c_addr)
Open a switchtec device behind an I2C device.
int switchtec_port_to_pff(struct switchtec_dev *dev, int partition, int port, int *pff)
Convert a partition and port number to a port function index.
int switchtec_event_summary(struct switchtec_dev *dev, struct switchtec_event_summary *sum)
Retrieve a summary of all the events that have occurred in the switch.
struct switchtec_dev * switchtec_open_by_pci_addr(int domain, int bus, int device, int func)
Open a switchtec device by PCI address (BDF)
int switchtec_pff_to_port(struct switchtec_dev *dev, int pff, int *partition, int *port)
Convert a port function index to a partition and port number.
void switchtec_close(struct switchtec_dev *dev)
Close a Switchtec device handle.
Information about a firmware image or partition.
switchtec_event_id
Enumeration of all possible events.
void gas_write64(struct switchtec_dev *dev, uint64_t val, uint64_t __gas *addr)
Write a uint64_t to the GAS.
int switchtec_list(struct switchtec_device_info **devlist)
List all the switchtec devices in the system.
void gas_write16(struct switchtec_dev *dev, uint16_t val, uint16_t __gas *addr)
Write a uint16_t to the GAS.
char version[32]
Firmware/Config version.
struct switchtec_dev * switchtec_open_by_index(int index)
Open a switchtec device by index.
struct switchtec_dev * switchtec_open_uart(int fd)
Open a switchtec device behind a uart device.
int switchtec_flash_part(struct switchtec_dev *dev, struct switchtec_fw_image_info *info, enum switchtec_fw_image_part_id_gen3 part)
Retrieve information about a flash partition.
void switchtec_gas_unmap(struct switchtec_dev *dev, gasptr_t map)
Unmap the GAS region mapped with.
struct switchtec_fw_part_summary * switchtec_fw_part_summary(struct switchtec_dev *dev)
Return firmware summary information structure for the flash partitfons in the device.
void switchtec_fw_part_summary_free(struct switchtec_fw_part_summary *summary)
Free a firmware part summary data structure.
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.
__gas struct switchtec_gas * gasptr_t
Shortform for a pointer to the GAS register space.
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 switchtec_event_wait(struct switchtec_dev *dev, int timeout_ms)
Wait for any event to occur (typically just an interrupt)
ssize_t write_from_gas(struct switchtec_dev *dev, int fd, const void __gas *src, size_t n)
Call write() with data from the GAS.
struct switchtec_dev * switchtec_open_by_path(const char *path)
Open a switchtec device by path.
Represents a Switchtec device in the switchtec_list() function.
int mrpc_error_cmd
The MRPC command ID when errno is set.
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.
int switchtec_event_ctl(struct switchtec_dev *dev, enum switchtec_event_id e, int index, int flags, uint32_t data[5])
Enable, disable and clear events or retrieve event data.