fifo.c 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #define _BSD_SOURCE
  2. #define _DEFAULT_SOURCE
  3. #define _POSIX_C_SOURCE 200809L
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include <strings.h>
  7. #include <stdlib.h>
  8. #include <stdint.h>
  9. #include <fcntl.h>
  10. #include <unistd.h>
  11. #include <sys/ioctl.h>
  12. #include <sys/mman.h>
  13. #include <arpa/inet.h>
  14. #include <errno.h>
  15. #include <assert.h>
  16. #include "pcilib.h"
  17. #include "pci.h"
  18. #include "tools.h"
  19. #include "error.h"
  20. #include "model.h"
  21. #include "plugin.h"
  22. #include "bar.h"
  23. int pcilib_read_fifo(pcilib_t *ctx, pcilib_bar_t bar, uintptr_t addr, uint8_t fifo_size, size_t n, void *buf) {
  24. int i;
  25. void *data;
  26. pcilib_detect_address(ctx, &bar, &addr, fifo_size);
  27. data = pcilib_map_bar(ctx, bar);
  28. for (i = 0; i < n; i++) {
  29. pcilib_memcpy(buf + i * fifo_size, data + addr, fifo_size, 1);
  30. }
  31. pcilib_unmap_bar(ctx, bar, data);
  32. return 0;
  33. }
  34. int pcilib_write_fifo(pcilib_t *ctx, pcilib_bar_t bar, uintptr_t addr, uint8_t fifo_size, size_t n, void *buf) {
  35. int i;
  36. void *data;
  37. pcilib_detect_address(ctx, &bar, &addr, fifo_size);
  38. data = pcilib_map_bar(ctx, bar);
  39. for (i = 0; i < n; i++) {
  40. pcilib_memcpy(data + addr, buf + i * fifo_size, fifo_size, 1);
  41. }
  42. pcilib_unmap_bar(ctx, bar, data);
  43. return 0;
  44. }