pci.h 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #ifndef _PCITOOL_PCI_H
  2. #define _PCITOOL_PCI_H
  3. #define PCILIB_DEFAULT_CPU_COUNT 2
  4. #define PCILIB_EVENT_TIMEOUT 1000000 /**< us */
  5. #define PCILIB_TRIGGER_TIMEOUT 100000 /**< us */
  6. #define PCILIB_DMA_TIMEOUT 10000 /**< us */
  7. #define PCILIB_DMA_SKIP_TIMEOUT 1000000 /**< us */
  8. #define PCILIB_REGISTER_TIMEOUT 10000 /**< us */
  9. #include "driver/pciDriver.h"
  10. #include "pcilib_types.h"
  11. #include "pcilib.h"
  12. #include "register.h"
  13. #include "kmem.h"
  14. #include "irq.h"
  15. #include "dma.h"
  16. #include "event.h"
  17. struct pcilib_s {
  18. int handle;
  19. uintptr_t page_mask;
  20. pcilib_board_info_t board_info;
  21. pcilib_dma_info_t dma_info;
  22. pcilib_model_t model;
  23. char *bar_space[PCILIB_MAX_BANKS];
  24. int reg_bar_mapped;
  25. pcilib_bar_t reg_bar;
  26. // char *reg_space;
  27. int data_bar_mapped;
  28. pcilib_bar_t data_bar;
  29. // char *data_space;
  30. // size_t data_size;
  31. pcilib_kmem_list_t *kmem_list;
  32. size_t num_reg, alloc_reg;
  33. pcilib_model_description_t model_info;
  34. pcilib_dma_context_t *dma_ctx;
  35. pcilib_context_t *event_ctx;
  36. #ifdef PCILIB_FILE_IO
  37. int file_io_handle;
  38. #endif /* PCILIB_FILE_IO */
  39. };
  40. #ifdef _PCILIB_PCI_C
  41. # include "ipecamera/model.h"
  42. # include "kapture/model.h"
  43. # include "dma/nwl.h"
  44. # include "dma/ipe.h"
  45. # include "default.h"
  46. pcilib_model_description_t pcilib_model[4] = {
  47. { 4, PCILIB_HOST_ENDIAN, NULL, NULL, NULL, NULL, NULL, NULL },
  48. { 4, PCILIB_HOST_ENDIAN, NULL, NULL, NULL, NULL, NULL, NULL },
  49. { 4, PCILIB_LITTLE_ENDIAN, ipecamera_registers, ipecamera_register_banks, ipecamera_register_ranges, ipecamera_events, ipecamera_data_types, &ipe_dma_api, &ipecamera_image_api },
  50. { 4, PCILIB_LITTLE_ENDIAN, kapture_registers, kapture_register_banks, kapture_register_ranges, kapture_events, kapture_data_types, &ipe_dma_api, &kapture_api },
  51. };
  52. pcilib_protocol_description_t pcilib_protocol[3] = {
  53. { pcilib_default_read, pcilib_default_write },
  54. { ipecamera_read, ipecamera_write },
  55. { NULL, NULL }
  56. };
  57. #else
  58. extern pcilib_model_description_t pcilib_model[];
  59. extern pcilib_protocol_description_t pcilib_protocol[];
  60. #endif /* _PCILIB_PCI_C */
  61. const pcilib_board_info_t *pcilib_get_board_info(pcilib_t *ctx);
  62. const pcilib_dma_info_t *pcilib_get_dma_info(pcilib_t *ctx);
  63. int pcilib_map_register_space(pcilib_t *ctx);
  64. int pcilib_map_data_space(pcilib_t *ctx, uintptr_t addr);
  65. int pcilib_detect_address(pcilib_t *ctx, pcilib_bar_t *bar, uintptr_t *addr, size_t size);
  66. #endif /* _PCITOOL_PCI_H */