pika_hal_table_rule.h 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #undef pika_hal_table_add
  2. #if defined(PIKA_HAL_TABLE_FILE_API)
  3. #define pika_hal_table_add(dev_name) \
  4. PIKA_WEAK int pika_hal_platform_##dev_name##_open(pika_dev* dev, \
  5. char* name) { \
  6. WEAK_FUNCTION_NEED_OVERRIDE_ERROR() \
  7. return -1; \
  8. } \
  9. PIKA_WEAK int pika_hal_platform_##dev_name##_close(pika_dev* dev) { \
  10. WEAK_FUNCTION_NEED_OVERRIDE_ERROR() \
  11. return -1; \
  12. } \
  13. PIKA_WEAK int pika_hal_platform_##dev_name##_read(pika_dev* dev, \
  14. void* buf, size_t len) { \
  15. WEAK_FUNCTION_NEED_OVERRIDE_ERROR() \
  16. return -1; \
  17. } \
  18. PIKA_WEAK int pika_hal_platform_##dev_name##_write( \
  19. pika_dev* dev, void* buf, size_t len) { \
  20. WEAK_FUNCTION_NEED_OVERRIDE_ERROR() \
  21. return -1; \
  22. } \
  23. PIKA_WEAK int pika_hal_platform_##dev_name##_ioctl_enable(pika_dev* dev) { \
  24. WEAK_FUNCTION_NEED_OVERRIDE_ERROR() \
  25. return -1; \
  26. } \
  27. PIKA_WEAK int pika_hal_platform_##dev_name##_ioctl_disable( \
  28. pika_dev* dev) { \
  29. WEAK_FUNCTION_NEED_OVERRIDE_ERROR() \
  30. return -1; \
  31. } \
  32. PIKA_WEAK int pika_hal_platform_##dev_name##_ioctl_config( \
  33. pika_dev* dev, pika_hal_##dev_name##_config* cfg) { \
  34. WEAK_FUNCTION_NEED_OVERRIDE_ERROR() \
  35. return -1; \
  36. } \
  37. PIKA_WEAK int pika_hal_platform_##dev_name##_ioctl_others( \
  38. pika_dev* dev, PIKA_HAL_IOCTL_CMD cmd, void* arg) { \
  39. WEAK_FUNCTION_NEED_OVERRIDE_ERROR() \
  40. return -1; \
  41. } \
  42. int pika_hal_##dev_name##_ioctl(pika_dev* dev, PIKA_HAL_IOCTL_CMD cmd, \
  43. void* arg) { \
  44. if (NULL == dev) { \
  45. return -1; \
  46. } \
  47. switch (cmd) { \
  48. case PIKA_HAL_IOCTL_ENABLE: \
  49. return pika_hal_platform_##dev_name##_ioctl_enable(dev); \
  50. case PIKA_HAL_IOCTL_DISABLE: \
  51. return pika_hal_platform_##dev_name##_ioctl_disable(dev); \
  52. case PIKA_HAL_IOCTL_CONFIG: \
  53. return pika_hal_platform_##dev_name##_ioctl_config( \
  54. dev, (pika_hal_##dev_name##_config*)arg); \
  55. default: \
  56. return pika_hal_platform_##dev_name##_ioctl_others(dev, cmd, \
  57. arg); \
  58. } \
  59. }
  60. #endif
  61. #if defined(PIKA_HAL_TABLE_DEV_TYPE)
  62. #define pika_hal_table_add(dev_name) PIKA_HAL_##dev_name,
  63. #endif
  64. #if defined(PIKA_HAL_TABLE_IMPL)
  65. #define pika_hal_table_add(dev_name) \
  66. [PIKA_HAL_##dev_name] = { \
  67. .open = pika_hal_platform_##dev_name##_open, \
  68. .close = pika_hal_platform_##dev_name##_close, \
  69. .read = pika_hal_platform_##dev_name##_read, \
  70. .write = pika_hal_platform_##dev_name##_write, \
  71. .ioctl = pika_hal_##dev_name##_ioctl, \
  72. },
  73. #endif
  74. #if defined(PIKA_HAL_TABLE_PLATFORM_API)
  75. #define pika_hal_table_add(dev_name) \
  76. int pika_hal_platform_##dev_name##_open(pika_dev* dev, char* name); \
  77. int pika_hal_platform_##dev_name##_close(pika_dev* dev); \
  78. int pika_hal_platform_##dev_name##_read(pika_dev* dev, void* buf, \
  79. size_t len); \
  80. int pika_hal_platform_##dev_name##_write(pika_dev* dev, void* buf, \
  81. size_t len); \
  82. int pika_hal_platform_##dev_name##_ioctl_enable(pika_dev* dev); \
  83. int pika_hal_platform_##dev_name##_ioctl_disable(pika_dev* dev); \
  84. int pika_hal_platform_##dev_name##_ioctl_config( \
  85. pika_dev* dev, pika_hal_##dev_name##_config* cfg); \
  86. int pika_hal_platform_##dev_name##_ioctl_others( \
  87. pika_dev* dev, PIKA_HAL_IOCTL_CMD cmd, void* arg);
  88. #endif
  89. #if defined(PIKA_HAL_TABLE_DEV_CONFIG_SIZE)
  90. #define pika_hal_table_add(dev_name) \
  91. if (dev_type == PIKA_HAL_##dev_name) { \
  92. return sizeof(pika_hal_##dev_name##_config); \
  93. }
  94. #endif
  95. #if defined(PIKA_HAL_TABLE_IOCTL_MERGE_CONFIG)
  96. #define pika_hal_table_add(dev_name) \
  97. if (dev->type == PIKA_HAL_##dev_name) { \
  98. return pika_hal_##dev_name##_ioctl_merge_config(dev->ioctl_config, \
  99. config_in); \
  100. }
  101. #endif
  102. #if defined(PIKA_HAL_TABLE_IOCTL_MERGE_CONFIG_HEADER)
  103. #define pika_hal_table_add(dev_name) \
  104. int pika_hal_##dev_name##_ioctl_merge_config( \
  105. pika_hal_##dev_name##_config* dst, pika_hal_##dev_name##_config* src);
  106. #endif
  107. #undef PIKA_HAL_TABLE_FILE_API
  108. #undef PIKA_HAL_TABLE_DEV_TYPE
  109. #undef PIKA_HAL_TABLE_IMPL
  110. #undef PIKA_HAL_TABLE_PLATFORM_API
  111. #undef PIKA_HAL_TABLE_DEV_CONFIG_SIZE
  112. #undef PIKA_HAL_TABLE_IOCTL_MERGE_CONFIG
  113. #undef PIKA_HAL_TABLE_IOCTL_MERGE_CONFIG_HEADER