sd_misc.h 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. #ifndef SD_MISC_H
  2. #define SD_MISC_H
  3. #ifdef __KERNEL__
  4. #include <linux/bitops.h>
  5. #include <linux/mmc/host.h>
  6. #include <linux/mmc/card.h>
  7. #include <linux/mmc/core.h>
  8. #include <linux/mmc/mmc.h>
  9. #include <linux/mmc/sd.h>
  10. #endif
  11. #include <mt_sd.h>
  12. #ifndef FPGA_PLATFORM
  13. extern void msdc_set_driving(struct msdc_host *host, struct msdc_hw *hw, bool sd_18);
  14. #endif
  15. /* void msdc_dump_padctl(struct msdc_host *host); */
  16. extern u32 msdc_host_mode[HOST_MAX_NUM];
  17. extern u32 msdc_host_mode2[HOST_MAX_NUM];
  18. extern int mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value,
  19. unsigned int timeout_ms);
  20. extern int mmc_send_ext_csd(struct mmc_card *card, u8 *ext_csd);
  21. extern struct msdc_host *mtk_msdc_host[];
  22. extern struct msdc_host *msdc_get_host(int host_function, bool boot, bool secondary);
  23. extern int msdc_reinit(struct msdc_host *host);
  24. #if 0
  25. extern int msdc_get_reserve(void);
  26. extern u32 msdc_get_capacity(int get_emmc_total);
  27. extern struct gendisk *mmc_get_disk(struct mmc_card *card);
  28. extern void msdc_get_driving(struct msdc_host *host, struct msdc_ioctl *msdc_ctl);
  29. #endif
  30. #ifdef CONFIG_MTK_EMMC_SUPPORT
  31. /* extern struct excel_info PartInfoEmmc[PART_NUM]; */
  32. extern u32 g_emmc_mode_switch;
  33. #endif
  34. struct msdc_ioctl {
  35. int opcode;
  36. int host_num;
  37. int iswrite;
  38. int trans_type;
  39. unsigned int total_size;
  40. unsigned int address;
  41. unsigned int *buffer;
  42. int cmd_pu_driving;
  43. int cmd_pd_driving;
  44. int dat_pu_driving;
  45. int dat_pd_driving;
  46. int clk_pu_driving;
  47. int clk_pd_driving;
  48. int ds_pu_driving;
  49. int ds_pd_driving;
  50. int rst_pu_driving;
  51. int rst_pd_driving;
  52. int clock_freq;
  53. int partition;
  54. int hopping_bit;
  55. int hopping_time;
  56. int result;
  57. int sd30_mode;
  58. int sd30_max_current;
  59. int sd30_drive;
  60. int sd30_power_control;
  61. };
  62. extern int simple_sd_ioctl_rw(struct msdc_ioctl *msdc_ctl);
  63. /**************for msdc_ssc***********************/
  64. #define AUDPLL_CTL_REG12 (0xF0007070)
  65. #define AUDPLL_CTL_REG01 (0xF00071E0)
  66. #define AUDPLL_CTL_REG02 (0xF100000C)
  67. #define AUDPLL_TSEL_MASK (1792) /* MASK = 00000111 00000000 */
  68. #define AUDPLL_TSEL_RESULT1 (0) /* REG = 00000000 00000000
  69. 30.5us */
  70. #define AUDPLL_TSEL_RESULT2 (256) /* REG = 00000001 00000000
  71. 61.0us */
  72. #define AUDPLL_TSEL_RESULT3 (512) /* REG = 00000010 00000000
  73. 122.1us */
  74. #define AUDPLL_TSEL_RESULT4 (768) /* REG = 00000011 00000000
  75. 244.1us */
  76. #define AUDPLL_TSEL_RESULT5 (1024) /* REG = 00000100 00000000
  77. 448.3us */
  78. #define AUDPLL_BSEL_MASK (7) /* MASK = 00000000 00000111 */
  79. #define AUDPLL_BSEL_RESULT0 (0) /* REG = 00000000 00000000
  80. REG init val */
  81. #define AUDPLL_BSEL_RESULT1 (1) /* REG = 00000000 00000001
  82. 2.26MHz */
  83. #define AUDPLL_BSEL_RESULT2 (2) /* REG = 00000000 00000010
  84. 4.52MHz */
  85. #define AUDPLL_BSEL_RESULT3 (4) /* REG = 00000000 00000100
  86. 9.04MHz */
  87. #define SET_HOP_BIT_NONE (0)
  88. #define SET_HOP_BIT1 (1)
  89. #define SET_HOP_BIT2 (2)
  90. #define SET_HOP_BIT3 (3)
  91. #define SET_HOP_TIME0 (0)
  92. #define SET_HOP_TIME1 (1)
  93. #define SET_HOP_TIME2 (2)
  94. #define SET_HOP_TIME3 (3)
  95. #define SET_HOP_TIME4 (4)
  96. /**************for msdc_ssc***********************/
  97. #define MSDC_DRIVING_SETTING (0)
  98. #define MSDC_CLOCK_FREQUENCY (1)
  99. #define MSDC_SINGLE_READ_WRITE (2)
  100. #define MSDC_MULTIPLE_READ_WRITE (3)
  101. #define MSDC_GET_CID (4)
  102. #define MSDC_GET_CSD (5)
  103. #define MSDC_GET_EXCSD (6)
  104. #define MSDC_ERASE_PARTITION (7)
  105. #define MSDC_HOPPING_SETTING (8)
  106. #define MSDC_REINIT_SDCARD _IOW('r', 9, int)
  107. #define MSDC_SD30_MODE_SWITCH (10)
  108. #define MSDC_GET_BOOTPART (11)
  109. #define MSDC_SET_BOOTPART (12)
  110. #define MSDC_GET_PARTSIZE (13)
  111. #define MSDC_CD_PIN_EN_SDCARD _IOW('r', 14, int)
  112. #define MSDC_ERASE_SELECTED_AREA (0x20)
  113. #define MSDC_CARD_DUNM_FUNC (0xff)
  114. typedef enum {
  115. USER_PARTITION = 0,
  116. BOOT_PARTITION_1,
  117. BOOT_PARTITION_2,
  118. RPMB_PARTITION,
  119. GP_PARTITION_1,
  120. GP_PARTITION_2,
  121. GP_PARTITION_3,
  122. GP_PARTITION_4,
  123. } PARTITON_ACCESS_T;
  124. typedef enum {
  125. SDHC_HIGHSPEED = 0, /* 0 Host supports HS mode */
  126. UHS_SDR12, /* 1 Host supports UHS SDR12 mode */
  127. UHS_SDR25, /* 2 Host supports UHS SDR25 mode */
  128. UHS_SDR50, /* 3 Host supports UHS SDR50 mode */
  129. UHS_SDR104, /* 4 Host supports UHS SDR104 mode */
  130. UHS_DDR50, /* 5 Host supports UHS DDR50 mode */
  131. EMMC_HS400, /* 6 Host supports EMMC HS400 mode */
  132. CAPS_SPEED_NULL,
  133. } SD3_MODE;
  134. typedef enum {
  135. DRIVER_TYPE_A = 0, /* 0 Host supports Driver Type A */
  136. DRIVER_TYPE_B, /* 1 Host supports Driver Type B */
  137. DRIVER_TYPE_C, /* 2 Host supports Driver Type C */
  138. DRIVER_TYPE_D, /* 3 Host supports Driver Type D */
  139. CAPS_DRIVE_NULL
  140. } SD3_DRIVE;
  141. typedef enum {
  142. MAX_CURRENT_200 = 0,/* 0 Host max current limit is 200mA */
  143. MAX_CURRENT_400, /* 1 Host max current limit is 400mA */
  144. MAX_CURRENT_600, /* 2 Host max current limit is 600mA */
  145. MAX_CURRENT_800, /* 3 Host max current limit is 800mA */
  146. } SD3_MAX_CURRENT;
  147. typedef enum {
  148. SDXC_NO_POWER_CONTROL = 0, /* 0 Host not supports >150mA current
  149. at 3.3V /3.0V/1.8V */
  150. SDXC_POWER_CONTROL, /* 1 Host supports >150mA current
  151. at 3.3V /3.0V/1.8V */
  152. } SD3_POWER_CONTROL;
  153. typedef enum {
  154. DUMP_INTO_BOOT_CARD_IPANIC = 0,
  155. DUMP_INTO_BOOT_CARD_KDUMP = 1,
  156. DUMP_INTO_EXTERN_CARD = 2,
  157. } DUMP_STORAGE_TYPE;
  158. typedef enum {
  159. EMMC_CARD_BOOT = 0,
  160. SD_CARD_BOOT,
  161. EMMC_CARD,
  162. SD_CARD,
  163. } STORAGE_TPYE;
  164. #define EXT_CSD_BOOT_SIZE_MULT (226) /* R */
  165. #define EXT_CSD_HC_WP_GPR_SIZE (221) /* RO */
  166. #define EXT_CSD_RPMB_SIZE_MULT (168) /* R */
  167. #define EXT_CSD_GP1_SIZE_MULT (143) /* R/W 3 bytes */
  168. #define EXT_CSD_GP2_SIZE_MULT (146) /* R/W 3 bytes */
  169. #define EXT_CSD_GP3_SIZE_MULT (149) /* R/W 3 bytes */
  170. #define EXT_CSD_GP4_SIZE_MULT (152) /* R/W 3 bytes */
  171. #define EXT_CSD_PART_CFG (179) /* R/W/E & R/W/E_P */
  172. #define EXT_CSD_CACHE_FLUSH (32)
  173. #define CAPACITY_2G (2 * 1024 * 1024 * 1024ULL)
  174. typedef enum {
  175. EMMC_BOOT_NO_EN = 0,
  176. EMMC_BOOT1_EN,
  177. EMMC_BOOT2_EN,
  178. EMMC_BOOT_USER = 7,
  179. EMMC_BOOT_END
  180. } BOOT_PARTITION_EN;
  181. #ifdef CONFIG_MTK_GPT_SCHEME_SUPPORT
  182. typedef enum {
  183. EMMC_PART_UNKNOWN = 0,
  184. EMMC_PART_BOOT1,
  185. EMMC_PART_BOOT2,
  186. EMMC_PART_RPMB,
  187. EMMC_PART_GP1,
  188. EMMC_PART_GP2,
  189. EMMC_PART_GP3,
  190. EMMC_PART_GP4,
  191. EMMC_PART_USER,
  192. EMMC_PART_END,
  193. } Region;
  194. #endif
  195. typedef enum {
  196. CARD_INFO = 0,
  197. DISK_INFO,
  198. EMMC_USER_CAPACITY,
  199. EMMC_CAPACITY,
  200. EMMC_RESERVE,
  201. } GET_STORAGE_INFO;
  202. struct storage_info {
  203. struct mmc_card *card;
  204. struct gendisk *disk;
  205. unsigned long long emmc_user_capacity;
  206. unsigned long long emmc_capacity;
  207. int emmc_reserve;
  208. };
  209. int msdc_get_info(STORAGE_TPYE storage_type, GET_STORAGE_INFO info_type,
  210. struct storage_info *info);
  211. #endif /* end of SD_MISC_H */