halmac_api_8821c_sdio.c 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. /* #include "../halmac_88xx_cfg.h" */
  2. #include "halmac_8821c_cfg.h"
  3. /**
  4. * halmac_mac_power_switch_8821c_sdio() - switch mac power
  5. * @pHalmac_adapter : the adapter of halmac
  6. * @halmac_power : power state
  7. * Author : KaiYuan Chang/Ivan Lin
  8. * Return : HALMAC_RET_STATUS
  9. * More details of status code can be found in prototype document
  10. */
  11. HALMAC_RET_STATUS
  12. halmac_mac_power_switch_8821c_sdio(
  13. IN PHALMAC_ADAPTER pHalmac_adapter,
  14. IN HALMAC_MAC_POWER halmac_power
  15. )
  16. {
  17. u8 interface_mask;
  18. u8 value8;
  19. u8 rpwm;
  20. u32 imr_backup;
  21. VOID *pDriver_adapter = NULL;
  22. PHALMAC_API pHalmac_api;
  23. if (HALMAC_RET_SUCCESS != halmac_adapter_validate(pHalmac_adapter))
  24. return HALMAC_RET_ADAPTER_INVALID;
  25. if (HALMAC_RET_SUCCESS != halmac_api_validate(pHalmac_adapter))
  26. return HALMAC_RET_API_INVALID;
  27. pDriver_adapter = pHalmac_adapter->pDriver_adapter;
  28. pHalmac_api = (PHALMAC_API)pHalmac_adapter->pHalmac_api;
  29. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_TRACE, "[TRACE]halmac_mac_power_switch_88xx_sdio halmac_power\n");
  30. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_TRACE, "[TRACE]%x\n", halmac_power);
  31. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_TRACE, "[TRACE]8821C pwr seq ver = %s\n", HALMAC_8821C_PWR_SEQ_VER);
  32. interface_mask = HALMAC_PWR_INTF_SDIO_MSK;
  33. pHalmac_adapter->rpwm_record = HALMAC_REG_READ_8(pHalmac_adapter, REG_SDIO_HRPWM1);
  34. /* Check FW still exist or not */
  35. if (0xC078 == HALMAC_REG_READ_16(pHalmac_adapter, REG_MCUFW_CTRL)) {
  36. /* Leave 32K */
  37. rpwm = (u8)((pHalmac_adapter->rpwm_record ^ BIT(7)) & 0x80);
  38. HALMAC_REG_WRITE_8(pHalmac_adapter, REG_SDIO_HRPWM1, rpwm);
  39. }
  40. value8 = HALMAC_REG_READ_8(pHalmac_adapter, REG_CR);
  41. if (0xEA == value8)
  42. pHalmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_OFF;
  43. else
  44. pHalmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_ON;
  45. /*Check if power switch is needed*/
  46. if (halmac_power == HALMAC_MAC_POWER_ON && pHalmac_adapter->halmac_state.mac_power == HALMAC_MAC_POWER_ON) {
  47. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_WARN, "[WARN]halmac_mac_power_switch power state unchange!\n");
  48. return HALMAC_RET_PWR_UNCHANGE;
  49. } else {
  50. imr_backup = HALMAC_REG_READ_32(pHalmac_adapter, REG_SDIO_HIMR);
  51. HALMAC_REG_WRITE_32(pHalmac_adapter, REG_SDIO_HIMR, 0);
  52. if (HALMAC_MAC_POWER_OFF == halmac_power) {
  53. if (HALMAC_RET_SUCCESS != halmac_pwr_seq_parser_88xx(pHalmac_adapter, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_TSMC_MSK,
  54. interface_mask, halmac_8821c_card_disable_flow)) {
  55. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_ERR, "[ERR]Handle power off cmd error\n");
  56. HALMAC_REG_WRITE_32(pHalmac_adapter, REG_SDIO_HIMR, imr_backup);
  57. return HALMAC_RET_POWER_OFF_FAIL;
  58. }
  59. pHalmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_OFF;
  60. pHalmac_adapter->halmac_state.ps_state = HALMAC_PS_STATE_UNDEFINE;
  61. pHalmac_adapter->halmac_state.dlfw_state = HALMAC_DLFW_NONE;
  62. halmac_init_adapter_dynamic_para_88xx(pHalmac_adapter);
  63. } else {
  64. if (HALMAC_RET_SUCCESS != halmac_pwr_seq_parser_88xx(pHalmac_adapter, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_TSMC_MSK,
  65. interface_mask, halmac_8821c_card_enable_flow)) {
  66. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_ERR, "[ERR]Handle power on cmd error\n");
  67. HALMAC_REG_WRITE_32(pHalmac_adapter, REG_SDIO_HIMR, imr_backup);
  68. return HALMAC_RET_POWER_ON_FAIL;
  69. }
  70. pHalmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_ON;
  71. pHalmac_adapter->halmac_state.ps_state = HALMAC_PS_STATE_ACT;
  72. }
  73. HALMAC_REG_WRITE_32(pHalmac_adapter, REG_SDIO_HIMR, imr_backup);
  74. }
  75. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_TRACE, "[TRACE]halmac_mac_power_switch_88xx_sdio <==========\n");
  76. return HALMAC_RET_SUCCESS;
  77. }
  78. /**
  79. * halmac_phy_cfg_8821c_sdio() - phy config
  80. * @pHalmac_adapter : the adapter of halmac
  81. * Author : KaiYuan Chang
  82. * Return : HALMAC_RET_STATUS
  83. * More details of status code can be found in prototype document
  84. */
  85. HALMAC_RET_STATUS
  86. halmac_phy_cfg_8821c_sdio(
  87. IN PHALMAC_ADAPTER pHalmac_adapter,
  88. IN HALMAC_INTF_PHY_PLATFORM platform
  89. )
  90. {
  91. VOID *pDriver_adapter = NULL;
  92. PHALMAC_API pHalmac_api;
  93. if (HALMAC_RET_SUCCESS != halmac_adapter_validate(pHalmac_adapter))
  94. return HALMAC_RET_ADAPTER_INVALID;
  95. if (HALMAC_RET_SUCCESS != halmac_api_validate(pHalmac_adapter))
  96. return HALMAC_RET_API_INVALID;
  97. halmac_api_record_id_88xx(pHalmac_adapter, HALMAC_API_PHY_CFG);
  98. pDriver_adapter = pHalmac_adapter->pDriver_adapter;
  99. pHalmac_api = (PHALMAC_API)pHalmac_adapter->pHalmac_api;
  100. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_TRACE, "halmac_phy_cfg ==========>\n");
  101. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_TRACE, "sdio no phy\n");
  102. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_TRACE, "halmac_phy_cfg <==========\n");
  103. return HALMAC_RET_SUCCESS;
  104. }
  105. /**
  106. * halmac_interface_integration_tuning_8821c_sdio() - sdio interface fine tuning
  107. * @pHalmac_adapter : the adapter of halmac
  108. * Author : Ivan
  109. * Return : HALMAC_RET_STATUS
  110. * More details of status code can be found in prototype document
  111. */
  112. HALMAC_RET_STATUS
  113. halmac_interface_integration_tuning_8821c_sdio(
  114. IN PHALMAC_ADAPTER pHalmac_adapter
  115. )
  116. {
  117. return HALMAC_RET_SUCCESS;
  118. }