driver.h 5.2 KB

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