driver.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. #ifndef __DRIVER_H__
  2. #define __DRIVER_H__
  3. #include "linux/types.h"
  4. #include "com_gpio.h"
  5. #include "stm32f429xx.h"
  6. #define MAJOR_PLATFORM 100
  7. #define MAJOR_I2C 101
  8. #define MAJOR_FMC 102
  9. #define MAJOR_GPIO 103
  10. #define MAJOR_SPI 104
  11. #define MAJOR_ADC 105
  12. #define MAJOR_GPIO_I2C 106
  13. #define MAJOR_CRYPTO 107
  14. #define MAJOR_IWDG 108
  15. #define IOCTL_MAGIC 'x'
  16. #define GENERATE_CMD(__MAGIC__, __MAJOR__, __CMD__) \
  17. ((0x3<<30) | (__MAJOR__<<16) | (__MAGIC__<<8) | __CMD__)
  18. /* I2C command */
  19. #define SET_I2C_SPEED GENERATE_CMD(IOCTL_MAGIC, MAJOR_I2C, 0)
  20. #define GET_I2C_SPEED GENERATE_CMD(IOCTL_MAGIC, MAJOR_I2C, 1)
  21. #define SET_I2C_ADDR GENERATE_CMD(IOCTL_MAGIC, MAJOR_I2C, 2)
  22. #define GET_I2C_ADDR GENERATE_CMD(IOCTL_MAGIC, MAJOR_I2C, 3)
  23. #define I2C_MASTER_TRANSFER GENERATE_CMD(IOCTL_MAGIC, MAJOR_I2C, 4)
  24. #define I2C_MASTER_RECEIVE GENERATE_CMD(IOCTL_MAGIC, MAJOR_I2C, 5)
  25. #define I2C_SLAVE_RECEIVE_IT GENERATE_CMD(IOCTL_MAGIC, MAJOR_I2C, 6)
  26. #define I2C_MASTER_TRANSFER_RECEIVE GENERATE_CMD(IOCTL_MAGIC, MAJOR_I2C, 7)
  27. /* FMC command */
  28. #define WRITE_BYTE GENERATE_CMD(IOCTL_MAGIC, MAJOR_FMC, 0)
  29. #define READ_BYTE GENERATE_CMD(IOCTL_MAGIC, MAJOR_FMC, 1)
  30. #define WRITE_SHORT GENERATE_CMD(IOCTL_MAGIC, MAJOR_FMC, 2)
  31. #define READ_SHORT GENERATE_CMD(IOCTL_MAGIC, MAJOR_FMC, 3)
  32. #define WRITE_WORD GENERATE_CMD(IOCTL_MAGIC, MAJOR_FMC, 4)
  33. #define READ_WORD GENERATE_CMD(IOCTL_MAGIC, MAJOR_FMC, 5)
  34. #define BUS_8BIT GENERATE_CMD(IOCTL_MAGIC, MAJOR_FMC, 6)
  35. #define BUS_16BIT GENERATE_CMD(IOCTL_MAGIC, MAJOR_FMC, 7)
  36. /* SPI command */
  37. #define SPI_MASTER_TRANSFER GENERATE_CMD(IOCTL_MAGIC, MAJOR_SPI, 0)
  38. #define SPI_MASTER_RECEIVE GENERATE_CMD(IOCTL_MAGIC, MAJOR_SPI, 1)
  39. /* GPIO command */
  40. #define GPIO_INIT GENERATE_CMD(IOCTL_MAGIC, MAJOR_GPIO, 0)
  41. #define GPIO_WRITE_PIN GENERATE_CMD(IOCTL_MAGIC, MAJOR_GPIO, 1)
  42. #define GPIO_READ_PIN GENERATE_CMD(IOCTL_MAGIC, MAJOR_GPIO, 2)
  43. #define GPIO_SET_DIR GENERATE_CMD(IOCTL_MAGIC, MAJOR_GPIO, 3)
  44. /* ADC command */
  45. #define ADC_GET_RESULT GENERATE_CMD(IOCTL_MAGIC, MAJOR_ADC, 0)
  46. /* GPIO I2C command */
  47. #define GPIO_I2C_MASTER_TRANSFER GENERATE_CMD(IOCTL_MAGIC, MAJOR_GPIO_I2C, 0)
  48. #define GPIO_I2C_MASTER_RECEIVE GENERATE_CMD(IOCTL_MAGIC, MAJOR_GPIO_I2C, 1)
  49. #define GPIO_I2C_MASTER_TRANSFER_RECV GENERATE_CMD(IOCTL_MAGIC, MAJOR_GPIO_I2C, 2)
  50. /* Platform command */
  51. #define SET_PRIORITY_GROUP GENERATE_CMD(IOCTL_MAGIC, MAJOR_PLATFORM, 0)
  52. #define GET_PRIORITY_GROUP GENERATE_CMD(IOCTL_MAGIC, MAJOR_PLATFORM, 1)
  53. #define RESET_MCU GENERATE_CMD(IOCTL_MAGIC, MAJOR_PLATFORM, 2)
  54. #define GET_32BIT_RANDOM GENERATE_CMD(IOCTL_MAGIC, MAJOR_PLATFORM, 3)
  55. /* Crypto AT88SC0104C */
  56. #define CRYPTO_WAIT_CLOCK GENERATE_CMD(IOCTL_MAGIC, MAJOR_CRYPTO, 0)
  57. #define CRYPTO_SEND_COMMAND GENERATE_CMD(IOCTL_MAGIC, MAJOR_CRYPTO, 1)
  58. #define CRYPTO_RECEIVE_DATA GENERATE_CMD(IOCTL_MAGIC, MAJOR_CRYPTO, 2)
  59. #define CRYPTO_SEND_DATA GENERATE_CMD(IOCTL_MAGIC, MAJOR_CRYPTO, 3)
  60. #define CRYPTO_POWER_ON GENERATE_CMD(IOCTL_MAGIC, MAJOR_CRYPTO, 4)
  61. #define CRYPTO_POWER_OFF GENERATE_CMD(IOCTL_MAGIC, MAJOR_CRYPTO, 5)
  62. #define CRYPTO_SEND_CMD_BYTE GENERATE_CMD(IOCTL_MAGIC, MAJOR_CRYPTO, 6)
  63. /* IWDG */
  64. #define FEED_WATCHDOG GENERATE_CMD(IOCTL_MAGIC, MAJOR_IWDG, 0)
  65. #define START_IWATCHDOG GENERATE_CMD(IOCTL_MAGIC, MAJOR_IWDG, 1)
  66. #define STOP_IWATCHDOG GENERATE_CMD(IOCTL_MAGIC, MAJOR_IWDG, 2)
  67. typedef struct {
  68. uint32_t address;
  69. uint16_t length;
  70. uint8_t data[1024];
  71. } fmc_cpld_t;
  72. typedef struct {
  73. GPIO_TypeDef* GPIOx;
  74. uint16_t GPIO_pin;
  75. uint8_t Direct;
  76. GPIO_PinState Data;
  77. GPIO_InitTypeDef GPIO_Init;
  78. } gpio_t;
  79. typedef struct {
  80. uint8_t DevAddress; /* 8 bit */
  81. uint8_t WriteLen;
  82. uint8_t ReadLen;
  83. uint8_t Buf[256];
  84. } gpio_i2c_t;
  85. typedef struct {
  86. uint32_t ClockSpeed; /*!< Specifies the clock frequency.
  87. This parameter must be set to a value lower than 400kHz */
  88. uint32_t OwnAddress1; /*!< Specifies the first device own address.
  89. This parameter must be a 7-bit address. */
  90. uint8_t DevAddress; /* 8 bit */
  91. uint8_t WriteLen;
  92. uint8_t ReadLen;
  93. uint8_t Buf[256];
  94. } i2c_arg_t;
  95. typedef struct {
  96. uint8_t buf[300];
  97. uint32_t Size;
  98. } spi_arg_t;
  99. typedef struct {
  100. uint8_t channel;
  101. uint16_t value[10];
  102. } adc_arg_t;
  103. typedef struct {
  104. uint32_t priority_group;
  105. uint32_t random_32bit;
  106. } platform_arg_t;
  107. typedef struct {
  108. uint8_t size;
  109. uint8_t data[256];
  110. uint8_t loop;
  111. } crypto_t;
  112. #endif /* __DRIVER_H__ */