FFConfig.c 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. /*****************************************************************
  2. *****************************************************************
  3. *** **
  4. *** (C)Copyright 2005-2006, American Megatrends Inc. **
  5. *** **
  6. *** All Rights Reserved. **
  7. *** **
  8. *** 6145-F, Northbelt Parkway, Norcross, **
  9. *** **
  10. *** Georgia - 30071, USA. Phone-(770)-246-8600. **
  11. *** **
  12. *****************************************************************
  13. ******************************************************************
  14. *
  15. * FFConfig.c
  16. * Firmware firewall configuration.
  17. *
  18. * Author: Basavaraj Astekar<basavarja@ami.com>
  19. * Ravinder Reddy<bakkar@ami.com>
  20. ******************************************************************/
  21. #define UNIMPLEMENTED_AS_FUNC
  22. #include "FFConfig.h"
  23. #include "IPMIDefs.h"
  24. #include "App.h"
  25. #include "Chassis.h"
  26. #include "SensorEvent.h"
  27. #include "Storage.h"
  28. #include "DeviceConfig.h"
  29. #include "NVRAccess.h"
  30. #include "Session.h"
  31. #include "PDKCmdsAccess.h"
  32. #include "PDKCmds.h"
  33. /*** Module Variables ***/
  34. const FFSubFnTbl_T m_FFSubFnTbl [] =
  35. {/**** NetFn ********** Command ******************* IPMB **** SystemIfc **** LAN ***** Serial ***** ICMB ***** SMBUS *****/
  36. /*-------------------------------- APP Device Command's SubFn Configuration -----------------------------*/
  37. { NETFN_APP, CMD_SET_WDT, {0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F} },
  38. { NETFN_APP, CMD_SET_BMC_GBL_ENABLES, {0x000000EF, 0x000000EF, 0x000000EF, 0x000000EF, 0x000000EF, 0x000000EF} },
  39. { NETFN_APP, CMD_CLR_MSG_FLAGS, {0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF} },
  40. { NETFN_APP, CMD_ENBL_MSG_CH_RCV, {0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF} },
  41. { NETFN_APP, CMD_SEND_MSG, {0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF} },
  42. { NETFN_APP, CMD_CLOSE_SESSION, {0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF} },
  43. { NETFN_APP, CMD_SET_CH_ACCESS, {0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF} },
  44. { NETFN_APP, CMD_MASTER_WRITE_READ, {0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF} },
  45. /*------------------------------ Chassis Device Command's SubFn Configuration ----------------------------*/
  46. { NETFN_CHASSIS, CMD_CHASSIS_CONTROL, {0x0000003F, 0x0000003F, 0x0000003F, 0x0000003F, 0x0000003F, 0x0000003F} },
  47. { NETFN_CHASSIS, CMD_CHASSIS_IDENTIFY, {0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001} },
  48. { NETFN_CHASSIS, CMD_SET_SYSTEM_BOOT_OPTIONS, {0x00001FFF, 0x00001FFF, 0x00001FFF, 0x00001FFF, 0x00001FFF, 0x00001FFF} },
  49. /*------------------------------ Sensor Device Command's SubFn Configuration ----------------------------*/
  50. { NETFN_SENSOR, CMD_ARM_PEF_POSTPONE_TIMER, {0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007} },
  51. { NETFN_SENSOR, CMD_SET_PEF_CONFIG_PARAMS, {0x00003FFF, 0x00003FFF, 0x00003FFF, 0x00003FFF, 0x00003FFF, 0x00003FFF} },
  52. { NETFN_SENSOR, CMD_ALERT_IMMEDIATE, {0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF} },
  53. /*------------------------------ Storage Device Command's SubFn Configuration ---------------------------*/
  54. { NETFN_STORAGE, CMD_SET_AUXILIARY_LOG_STATUS, {0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007} },
  55. /*------------------------------ Transport Device Command's SubFn Configuration --------------------------*/
  56. { NETFN_TRANSPORT, CMD_SET_LAN_CONFIGURATION_PARAMETERS, {0x001FFFFF, 0x001FFFFF, 0x001FFFFF, 0x001FFFFF, 0x001FFFFF, 0x001FFFFF} },
  57. { NETFN_TRANSPORT, CMD_SUSPEND_BMC_ARPS, {0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF} },
  58. { NETFN_TRANSPORT, CMD_SET_SERIAL_MODEM_CONFIG, {0x0FFFFFFF, 0x0FFFFFFF, 0x0FFFFFFF, 0x0FFFFFFF, 0x0FFFFFFF, 0x0FFFFFFF} },
  59. { NETFN_TRANSPORT, CMD_SET_SERIAL_MODEM_MUX, {0x000001FF, 0x000001FF, 0x000001FF, 0x000001FF, 0x000001FF, 0x000001FF} },
  60. { NETFN_TRANSPORT, CMD_CALLBACK, {0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF} },
  61. { NETFN_TRANSPORT, CMD_SET_USER_CALLBACK_OPTION,{0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF} },
  62. { NETFN_TRANSPORT, CMD_SET_USER_CALLBACK_OPTION,{0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF} },
  63. };
  64. //Group Extension codes
  65. #define GROUPEXTNCODE_PICMG 0x00
  66. #define GROUPEXTNCODE_DMTF 0x01
  67. #define GROUPEXTNCODE_SSI 0x02
  68. #define GROUPEXTNCODE_VSO 0x03
  69. #define GROUPEXTNCODE_DCMI 0xDC
  70. #define Max_GROUPEXTNCODE 5
  71. /*------------------
  72. * CheckCmdCfg
  73. *------------------*/
  74. int
  75. CheckCmdCfg (_FAR_ CmdHndlrMap_T* pCmdHndlrMap, INT8U ChannelNum,
  76. INT8U NetFn, INT8U Cmd,int BMCInst)
  77. {
  78. BMCInfo_t *pBMCInfo = &g_BMCInfo[BMCInst];
  79. _FAR_ FFCmdConfigTbl_T* pFFCmdCfgTbl = &pBMCInfo->FFCmdConfigTbl[0];
  80. _FAR_ ChannelInfo_T* pChInfo = getChannelInfo (ChannelNum, BMCInst);
  81. int i;
  82. INT8U FFConfig, Index;
  83. if (NULL == pChInfo)
  84. {
  85. return 0;
  86. }
  87. Index = pChInfo->ChannelIndex;
  88. FFConfig = (pCmdHndlrMap->FFConfig >> (Index * 2)) & 0x03;
  89. /* Check suported or not */
  90. if (0 == (FFConfig & 0x02))
  91. {
  92. return 0;
  93. }
  94. /* Check configurable or not */
  95. if (0 == (FFConfig & 0x01))
  96. {
  97. return 1;
  98. }
  99. /* Check the command is enabled or disabled */
  100. for (i = 0; i < MAX_FF_CMD_CFGS; i++)
  101. {
  102. if ((NetFn == pFFCmdCfgTbl [i].NetFn) && (Cmd == pFFCmdCfgTbl [i].Cmd))
  103. {
  104. return ((pFFCmdCfgTbl [i].Config >> Index) & 0x01);
  105. }
  106. }
  107. return 0;
  108. }
  109. /*------------------
  110. * GetCmdSupCfgMask
  111. *------------------*/
  112. int
  113. GetCmdSupCfgMask (INT8U NetFn, INT8U Cmd, _NEAR_ INT16U* pFFConfig,INT8U GroupExtCode,int BMCInst)
  114. {
  115. _FAR_ CmdHndlrMap_T* pCmdHndlrMap;
  116. if (0 != GetMsgHndlrMap (NetFn, &pCmdHndlrMap,BMCInst))
  117. {
  118. if( 0 != GroupExtnGetMsgHndlrMap(NetFn,GroupExtCode, &pCmdHndlrMap, BMCInst))
  119. {
  120. if(0!=((int(*)(INT8U,CmdHndlrMap_T**,int))g_PDKCmdsHandle[PDKCMDS_GETOEMMSGHNDLRMAP])(NetFn,&pCmdHndlrMap,BMCInst))
  121. {
  122. return FF_NETFN_ERR;
  123. }
  124. }
  125. }
  126. while (pCmdHndlrMap->CmdHndlr)
  127. {
  128. if (pCmdHndlrMap->Cmd == Cmd)
  129. {
  130. /* Check if command has been implemented */
  131. if(g_PDKCmdsHandle[PDKCMDS_PDKISCOMMANDENABLED] != NULL)
  132. {
  133. if (0 != ((int(*)(INT8U,INT8U*,INT8U,int))g_PDKCmdsHandle[PDKCMDS_PDKISCOMMANDENABLED])(NetFn,&GroupExtCode, Cmd, BMCInst) )
  134. {
  135. *pFFConfig = 0x0000;
  136. }
  137. else
  138. {
  139. *pFFConfig = pCmdHndlrMap->FFConfig;
  140. }
  141. }
  142. return FF_SUCCESS;
  143. }
  144. pCmdHndlrMap++;
  145. }
  146. return FF_CMD_ERR;
  147. }
  148. /*------------------
  149. * GetCmdCfgAddr
  150. *------------------*/
  151. _FAR_ INT8U*
  152. GetCmdCfgAddr (INT8U NetFn, INT8U Cmd, int BMCInst)
  153. {
  154. BMCInfo_t *pBMCInfo = &g_BMCInfo[BMCInst];
  155. _FAR_ FFCmdConfigTbl_T* pFFCmdCfgTbl = &pBMCInfo->FFCmdConfigTbl[0];
  156. int i;
  157. /* Check the command is enabled or disabled */
  158. for (i = 0; i < MAX_FF_CMD_CFGS; i++)
  159. {
  160. if ((NetFn == pFFCmdCfgTbl [i].NetFn) && (Cmd == pFFCmdCfgTbl [i].Cmd))
  161. {
  162. return &pFFCmdCfgTbl [i].Config;
  163. }
  164. }
  165. return NULL;
  166. }
  167. /*------------------
  168. * GetSubFnMask
  169. *------------------*/
  170. int
  171. GetSubFnMask (INT8U ChannelNum, INT8U NetFn, INT8U Cmd, _NEAR_ INT32U* pSubFnMask,int BMCInst)
  172. {
  173. _FAR_ ChannelInfo_T* pChInfo;
  174. int i;
  175. pChInfo = getChannelInfo (ChannelNum, BMCInst);
  176. if (NULL == pChInfo)
  177. {
  178. return FF_CHANNEL_ERR;
  179. }
  180. for (i = 0; i < sizeof (m_FFSubFnTbl)/sizeof (FFSubFnTbl_T); i++)
  181. {
  182. if ((m_FFSubFnTbl [i].NetFn == NetFn) && (m_FFSubFnTbl [i].Cmd == Cmd))
  183. {
  184. *pSubFnMask = m_FFSubFnTbl [i].SubFn[pChInfo->ChannelIndex];
  185. return FF_SUCCESS;
  186. }
  187. }
  188. return FF_CMD_ERR;
  189. }