stat.c 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626
  1. /*
  2. * Copyright (C) 2013 Realtek Semiconductor Corp.
  3. * All Rights Reserved.
  4. *
  5. * Unless you and Realtek execute a separate written software license
  6. * agreement governing use of this software, this software is licensed
  7. * to you under the terms of the GNU General Public License version 2,
  8. * available at https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
  9. *
  10. * $Revision: 76306 $
  11. * $Date: 2017-03-08 15:13:58 +0800 (週三, 08 三月 2017) $
  12. *
  13. * Purpose : RTK switch high-level API for RTL8367/RTL8367C
  14. * Feature : Here is a list of all functions and variables in MIB module.
  15. *
  16. */
  17. #include <rtk_switch.h>
  18. #include <rtk_error.h>
  19. #include <stat.h>
  20. #include <string.h>
  21. #include <rtl8367c_asicdrv.h>
  22. #include <rtl8367c_asicdrv_mib.h>
  23. /* Function Name:
  24. * rtk_stat_global_reset
  25. * Description:
  26. * Reset global MIB counter.
  27. * Input:
  28. * None
  29. * Output:
  30. * None
  31. * Return:
  32. * RT_ERR_OK - OK
  33. * RT_ERR_FAILED - Failed
  34. * RT_ERR_SMI - SMI access error
  35. * Note:
  36. * Reset MIB counter of ports. API will use global reset while port mask is all-ports.
  37. */
  38. rtk_api_ret_t rtk_stat_global_reset(void)
  39. {
  40. rtk_api_ret_t retVal;
  41. /* Check initialization state */
  42. RTK_CHK_INIT_STATE();
  43. if ((retVal = rtl8367c_setAsicMIBsCounterReset(TRUE,FALSE, 0)) != RT_ERR_OK)
  44. return retVal;
  45. return RT_ERR_OK;
  46. }
  47. /* Function Name:
  48. * rtk_stat_port_reset
  49. * Description:
  50. * Reset per port MIB counter by port.
  51. * Input:
  52. * port - port id.
  53. * Output:
  54. * None
  55. * Return:
  56. * RT_ERR_OK - OK
  57. * RT_ERR_FAILED - Failed
  58. * RT_ERR_SMI - SMI access error
  59. * Note:
  60. *
  61. */
  62. rtk_api_ret_t rtk_stat_port_reset(rtk_port_t port)
  63. {
  64. rtk_api_ret_t retVal;
  65. /* Check initialization state */
  66. RTK_CHK_INIT_STATE();
  67. /* Check port valid */
  68. RTK_CHK_PORT_VALID(port);
  69. if ((retVal = rtl8367c_setAsicMIBsCounterReset(FALSE,FALSE,1 << rtk_switch_port_L2P_get(port))) != RT_ERR_OK)
  70. return retVal;
  71. return RT_ERR_OK;
  72. }
  73. /* Function Name:
  74. * rtk_stat_queueManage_reset
  75. * Description:
  76. * Reset queue manage MIB counter.
  77. * Input:
  78. * None
  79. * Output:
  80. * None
  81. * Return:
  82. * RT_ERR_OK - OK
  83. * RT_ERR_FAILED - Failed
  84. * RT_ERR_SMI - SMI access error
  85. * Note:
  86. *
  87. */
  88. rtk_api_ret_t rtk_stat_queueManage_reset(void)
  89. {
  90. rtk_api_ret_t retVal;
  91. /* Check initialization state */
  92. RTK_CHK_INIT_STATE();
  93. if ((retVal = rtl8367c_setAsicMIBsCounterReset(FALSE,TRUE,0)) != RT_ERR_OK)
  94. return retVal;
  95. return RT_ERR_OK;
  96. }
  97. /* Function Name:
  98. * rtk_stat_global_get
  99. * Description:
  100. * Get global MIB counter
  101. * Input:
  102. * cntr_idx - global counter index.
  103. * Output:
  104. * pCntr - global counter value.
  105. * Return:
  106. * RT_ERR_OK - OK
  107. * RT_ERR_FAILED - Failed
  108. * RT_ERR_SMI - SMI access error
  109. * RT_ERR_INPUT - Invalid input parameters.
  110. * Note:
  111. * Get global MIB counter by index definition.
  112. */
  113. rtk_api_ret_t rtk_stat_global_get(rtk_stat_global_type_t cntr_idx, rtk_stat_counter_t *pCntr)
  114. {
  115. rtk_api_ret_t retVal;
  116. /* Check initialization state */
  117. RTK_CHK_INIT_STATE();
  118. if(NULL == pCntr)
  119. return RT_ERR_NULL_POINTER;
  120. if (cntr_idx!=DOT1D_TP_LEARNED_ENTRY_DISCARDS_INDEX)
  121. return RT_ERR_STAT_INVALID_GLOBAL_CNTR;
  122. if ((retVal = rtl8367c_getAsicMIBsCounter(0, (RTL8367C_MIBCOUNTER)cntr_idx, pCntr)) != RT_ERR_OK)
  123. return retVal;
  124. return RT_ERR_OK;
  125. }
  126. /* Function Name:
  127. * rtk_stat_global_getAll
  128. * Description:
  129. * Get all global MIB counter
  130. * Input:
  131. * None
  132. * Output:
  133. * pGlobal_cntrs - global counter structure.
  134. * Return:
  135. * RT_ERR_OK - OK
  136. * RT_ERR_FAILED - Failed
  137. * RT_ERR_SMI - SMI access error
  138. * RT_ERR_INPUT - Invalid input parameters.
  139. * Note:
  140. * Get all global MIB counter by index definition.
  141. */
  142. rtk_api_ret_t rtk_stat_global_getAll(rtk_stat_global_cntr_t *pGlobal_cntrs)
  143. {
  144. rtk_api_ret_t retVal;
  145. /* Check initialization state */
  146. RTK_CHK_INIT_STATE();
  147. if(NULL == pGlobal_cntrs)
  148. return RT_ERR_NULL_POINTER;
  149. if ((retVal = rtl8367c_getAsicMIBsCounter(0, dot1dTpLearnedEntryDiscards, &pGlobal_cntrs->dot1dTpLearnedEntryDiscards)) != RT_ERR_OK)
  150. return retVal;
  151. return RT_ERR_OK;
  152. }
  153. #define MIB_NOT_SUPPORT (0xFFFF)
  154. static rtk_api_ret_t _get_asic_mib_idx(rtk_stat_port_type_t cnt_idx, RTL8367C_MIBCOUNTER *pMib_idx)
  155. {
  156. RTL8367C_MIBCOUNTER mib_asic_idx[STAT_PORT_CNTR_END]=
  157. {
  158. ifInOctets, /* STAT_IfInOctets */
  159. dot3StatsFCSErrors, /* STAT_Dot3StatsFCSErrors */
  160. dot3StatsSymbolErrors, /* STAT_Dot3StatsSymbolErrors */
  161. dot3InPauseFrames, /* STAT_Dot3InPauseFrames */
  162. dot3ControlInUnknownOpcodes, /* STAT_Dot3ControlInUnknownOpcodes */
  163. etherStatsFragments, /* STAT_EtherStatsFragments */
  164. etherStatsJabbers, /* STAT_EtherStatsJabbers */
  165. ifInUcastPkts, /* STAT_IfInUcastPkts */
  166. etherStatsDropEvents, /* STAT_EtherStatsDropEvents */
  167. etherStatsOctets, /* STAT_EtherStatsOctets */
  168. etherStatsUnderSizePkts, /* STAT_EtherStatsUnderSizePkts */
  169. etherOversizeStats, /* STAT_EtherOversizeStats */
  170. etherStatsPkts64Octets, /* STAT_EtherStatsPkts64Octets */
  171. etherStatsPkts65to127Octets, /* STAT_EtherStatsPkts65to127Octets */
  172. etherStatsPkts128to255Octets, /* STAT_EtherStatsPkts128to255Octets */
  173. etherStatsPkts256to511Octets, /* STAT_EtherStatsPkts256to511Octets */
  174. etherStatsPkts512to1023Octets, /* STAT_EtherStatsPkts512to1023Octets */
  175. etherStatsPkts1024to1518Octets, /* STAT_EtherStatsPkts1024to1518Octets */
  176. ifInMulticastPkts, /* STAT_EtherStatsMulticastPkts */
  177. ifInBroadcastPkts, /* STAT_EtherStatsBroadcastPkts */
  178. ifOutOctets, /* STAT_IfOutOctets */
  179. dot3StatsSingleCollisionFrames, /* STAT_Dot3StatsSingleCollisionFrames */
  180. dot3StatMultipleCollisionFrames,/* STAT_Dot3StatsMultipleCollisionFrames */
  181. dot3sDeferredTransmissions, /* STAT_Dot3StatsDeferredTransmissions */
  182. dot3StatsLateCollisions, /* STAT_Dot3StatsLateCollisions */
  183. etherStatsCollisions, /* STAT_EtherStatsCollisions */
  184. dot3StatsExcessiveCollisions, /* STAT_Dot3StatsExcessiveCollisions */
  185. dot3OutPauseFrames, /* STAT_Dot3OutPauseFrames */
  186. MIB_NOT_SUPPORT, /* STAT_Dot1dBasePortDelayExceededDiscards */
  187. dot1dTpPortInDiscards, /* STAT_Dot1dTpPortInDiscards */
  188. ifOutUcastPkts, /* STAT_IfOutUcastPkts */
  189. ifOutMulticastPkts, /* STAT_IfOutMulticastPkts */
  190. ifOutBroadcastPkts, /* STAT_IfOutBroadcastPkts */
  191. outOampduPkts, /* STAT_OutOampduPkts */
  192. inOampduPkts, /* STAT_InOampduPkts */
  193. MIB_NOT_SUPPORT, /* STAT_PktgenPkts */
  194. inMldChecksumError, /* STAT_InMldChecksumError */
  195. inIgmpChecksumError, /* STAT_InIgmpChecksumError */
  196. inMldSpecificQuery, /* STAT_InMldSpecificQuery */
  197. inMldGeneralQuery, /* STAT_InMldGeneralQuery */
  198. inIgmpSpecificQuery, /* STAT_InIgmpSpecificQuery */
  199. inIgmpGeneralQuery, /* STAT_InIgmpGeneralQuery */
  200. inMldLeaves, /* STAT_InMldLeaves */
  201. inIgmpLeaves, /* STAT_InIgmpInterfaceLeaves */
  202. inIgmpJoinsSuccess, /* STAT_InIgmpJoinsSuccess */
  203. inIgmpJoinsFail, /* STAT_InIgmpJoinsFail */
  204. inMldJoinsSuccess, /* STAT_InMldJoinsSuccess */
  205. inMldJoinsFail, /* STAT_InMldJoinsFail */
  206. inReportSuppressionDrop, /* STAT_InReportSuppressionDrop */
  207. inLeaveSuppressionDrop, /* STAT_InLeaveSuppressionDrop */
  208. outIgmpReports, /* STAT_OutIgmpReports */
  209. outIgmpLeaves, /* STAT_OutIgmpLeaves */
  210. outIgmpGeneralQuery, /* STAT_OutIgmpGeneralQuery */
  211. outIgmpSpecificQuery, /* STAT_OutIgmpSpecificQuery */
  212. outMldReports, /* STAT_OutMldReports */
  213. outMldLeaves, /* STAT_OutMldLeaves */
  214. outMldGeneralQuery, /* STAT_OutMldGeneralQuery */
  215. outMldSpecificQuery, /* STAT_OutMldSpecificQuery */
  216. inKnownMulticastPkts, /* STAT_InKnownMulticastPkts */
  217. ifInMulticastPkts, /* STAT_IfInMulticastPkts */
  218. ifInBroadcastPkts, /* STAT_IfInBroadcastPkts */
  219. ifOutDiscards /* STAT_IfOutDiscards */
  220. };
  221. if(cnt_idx >= STAT_PORT_CNTR_END)
  222. return RT_ERR_STAT_INVALID_PORT_CNTR;
  223. if(mib_asic_idx[cnt_idx] == MIB_NOT_SUPPORT)
  224. return RT_ERR_CHIP_NOT_SUPPORTED;
  225. *pMib_idx = mib_asic_idx[cnt_idx];
  226. return RT_ERR_OK;
  227. }
  228. /* Function Name:
  229. * rtk_stat_port_get
  230. * Description:
  231. * Get per port MIB counter by index
  232. * Input:
  233. * port - port id.
  234. * cntr_idx - port counter index.
  235. * Output:
  236. * pCntr - MIB retrived counter.
  237. * Return:
  238. * RT_ERR_OK - OK
  239. * RT_ERR_FAILED - Failed
  240. * RT_ERR_SMI - SMI access error
  241. * Note:
  242. * Get per port MIB counter by index definition.
  243. */
  244. rtk_api_ret_t rtk_stat_port_get(rtk_port_t port, rtk_stat_port_type_t cntr_idx, rtk_stat_counter_t *pCntr)
  245. {
  246. rtk_api_ret_t retVal;
  247. RTL8367C_MIBCOUNTER mib_idx;
  248. rtk_stat_counter_t second_cnt;
  249. /* Check initialization state */
  250. RTK_CHK_INIT_STATE();
  251. if(NULL == pCntr)
  252. return RT_ERR_NULL_POINTER;
  253. /* Check port valid */
  254. RTK_CHK_PORT_VALID(port);
  255. if (cntr_idx>=STAT_PORT_CNTR_END)
  256. return RT_ERR_STAT_INVALID_PORT_CNTR;
  257. if((retVal = _get_asic_mib_idx(cntr_idx, &mib_idx)) != RT_ERR_OK)
  258. return retVal;
  259. if(mib_idx == MIB_NOT_SUPPORT)
  260. return RT_ERR_CHIP_NOT_SUPPORTED;
  261. if ((retVal = rtl8367c_getAsicMIBsCounter(rtk_switch_port_L2P_get(port), mib_idx, pCntr)) != RT_ERR_OK)
  262. return retVal;
  263. if(cntr_idx == STAT_EtherStatsMulticastPkts)
  264. {
  265. if((retVal = _get_asic_mib_idx(STAT_IfOutMulticastPkts, &mib_idx)) != RT_ERR_OK)
  266. return retVal;
  267. if((retVal = rtl8367c_getAsicMIBsCounter(rtk_switch_port_L2P_get(port), mib_idx, &second_cnt)) != RT_ERR_OK)
  268. return retVal;
  269. *pCntr += second_cnt;
  270. }
  271. if(cntr_idx == STAT_EtherStatsBroadcastPkts)
  272. {
  273. if((retVal = _get_asic_mib_idx(STAT_IfOutBroadcastPkts, &mib_idx)) != RT_ERR_OK)
  274. return retVal;
  275. if((retVal = rtl8367c_getAsicMIBsCounter(rtk_switch_port_L2P_get(port), mib_idx, &second_cnt)) != RT_ERR_OK)
  276. return retVal;
  277. *pCntr += second_cnt;
  278. }
  279. return RT_ERR_OK;
  280. }
  281. /* Function Name:
  282. * rtk_stat_port_getAll
  283. * Description:
  284. * Get all counters of one specified port in the specified device.
  285. * Input:
  286. * port - port id.
  287. * Output:
  288. * pPort_cntrs - buffer pointer of counter value.
  289. * Return:
  290. * RT_ERR_OK - OK
  291. * RT_ERR_FAILED - Failed
  292. * RT_ERR_SMI - SMI access error
  293. * RT_ERR_INPUT - Invalid input parameters.
  294. * Note:
  295. * Get all MIB counters of one port.
  296. */
  297. rtk_api_ret_t rtk_stat_port_getAll(rtk_port_t port, rtk_stat_port_cntr_t *pPort_cntrs)
  298. {
  299. rtk_api_ret_t retVal;
  300. rtk_uint32 mibIndex;
  301. rtk_uint64 mibCounter;
  302. rtk_uint32 *accessPtr;
  303. /* address offset to MIBs counter */
  304. CONST_T rtk_uint16 mibLength[STAT_PORT_CNTR_END]= {
  305. 2,1,1,1,1,1,1,1,1,
  306. 2,1,1,1,1,1,1,1,1,1,1,
  307. 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  308. 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
  309. /* Check initialization state */
  310. RTK_CHK_INIT_STATE();
  311. if(NULL == pPort_cntrs)
  312. return RT_ERR_NULL_POINTER;
  313. /* Check port valid */
  314. RTK_CHK_PORT_VALID(port);
  315. accessPtr = (rtk_uint32*)pPort_cntrs;
  316. for (mibIndex=0;mibIndex<STAT_PORT_CNTR_END;mibIndex++)
  317. {
  318. if ((retVal = rtk_stat_port_get(port, mibIndex, &mibCounter)) != RT_ERR_OK)
  319. {
  320. if (retVal == RT_ERR_CHIP_NOT_SUPPORTED)
  321. mibCounter = 0;
  322. else
  323. return retVal;
  324. }
  325. if (2 == mibLength[mibIndex])
  326. *(rtk_uint64*)accessPtr = mibCounter;
  327. else if (1 == mibLength[mibIndex])
  328. *accessPtr = mibCounter;
  329. else
  330. return RT_ERR_FAILED;
  331. accessPtr+=mibLength[mibIndex];
  332. }
  333. return RT_ERR_OK;
  334. }
  335. /* Function Name:
  336. * rtk_stat_logging_counterCfg_set
  337. * Description:
  338. * Set the type and mode of Logging Counter
  339. * Input:
  340. * idx - The index of Logging Counter. Should be even number only.(0,2,4,6,8.....30)
  341. * mode - 32 bits or 64 bits mode
  342. * type - Packet counter or byte counter
  343. * Output:
  344. * None.
  345. * Return:
  346. * RT_ERR_OK - OK
  347. * RT_ERR_OUT_OF_RANGE - Out of range.
  348. * RT_ERR_FAILED - Failed
  349. * RT_ERR_SMI - SMI access error
  350. * RT_ERR_INPUT - Invalid input parameters.
  351. * Note:
  352. * Set the type and mode of Logging Counter.
  353. */
  354. rtk_api_ret_t rtk_stat_logging_counterCfg_set(rtk_uint32 idx, rtk_logging_counter_mode_t mode, rtk_logging_counter_type_t type)
  355. {
  356. rtk_api_ret_t retVal;
  357. /* Check initialization state */
  358. RTK_CHK_INIT_STATE();
  359. if(idx > RTL8367C_MIB_MAX_LOG_CNT_IDX)
  360. return RT_ERR_OUT_OF_RANGE;
  361. if((idx % 2) == 1)
  362. return RT_ERR_INPUT;
  363. if(mode >= LOGGING_MODE_END)
  364. return RT_ERR_OUT_OF_RANGE;
  365. if(type >= LOGGING_TYPE_END)
  366. return RT_ERR_OUT_OF_RANGE;
  367. if((retVal = rtl8367c_setAsicMIBsLoggingType((idx / 2), (rtk_uint32)type)) != RT_ERR_OK)
  368. return retVal;
  369. if((retVal = rtl8367c_setAsicMIBsLoggingMode((idx / 2), (rtk_uint32)mode)) != RT_ERR_OK)
  370. return retVal;
  371. return RT_ERR_OK;
  372. }
  373. /* Function Name:
  374. * rtk_stat_logging_counterCfg_get
  375. * Description:
  376. * Get the type and mode of Logging Counter
  377. * Input:
  378. * idx - The index of Logging Counter. Should be even number only.(0,2,4,6,8.....30)
  379. * Output:
  380. * pMode - 32 bits or 64 bits mode
  381. * pType - Packet counter or byte counter
  382. * Return:
  383. * RT_ERR_OK - OK
  384. * RT_ERR_OUT_OF_RANGE - Out of range.
  385. * RT_ERR_FAILED - Failed
  386. * RT_ERR_NULL_POINTER - NULL Pointer
  387. * RT_ERR_SMI - SMI access error
  388. * RT_ERR_INPUT - Invalid input parameters.
  389. * Note:
  390. * Get the type and mode of Logging Counter.
  391. */
  392. rtk_api_ret_t rtk_stat_logging_counterCfg_get(rtk_uint32 idx, rtk_logging_counter_mode_t *pMode, rtk_logging_counter_type_t *pType)
  393. {
  394. rtk_api_ret_t retVal;
  395. rtk_uint32 type, mode;
  396. /* Check initialization state */
  397. RTK_CHK_INIT_STATE();
  398. if(idx > RTL8367C_MIB_MAX_LOG_CNT_IDX)
  399. return RT_ERR_OUT_OF_RANGE;
  400. if((idx % 2) == 1)
  401. return RT_ERR_INPUT;
  402. if(pMode == NULL)
  403. return RT_ERR_NULL_POINTER;
  404. if(pType == NULL)
  405. return RT_ERR_NULL_POINTER;
  406. if((retVal = rtl8367c_getAsicMIBsLoggingType((idx / 2), &type)) != RT_ERR_OK)
  407. return retVal;
  408. if((retVal = rtl8367c_getAsicMIBsLoggingMode((idx / 2), &mode)) != RT_ERR_OK)
  409. return retVal;
  410. *pMode = (rtk_logging_counter_mode_t)mode;
  411. *pType = (rtk_logging_counter_type_t)type;
  412. return RT_ERR_OK;
  413. }
  414. /* Function Name:
  415. * rtk_stat_logging_counter_reset
  416. * Description:
  417. * Reset Logging Counter
  418. * Input:
  419. * idx - The index of Logging Counter. (0~31)
  420. * Output:
  421. * None.
  422. * Return:
  423. * RT_ERR_OK - OK
  424. * RT_ERR_OUT_OF_RANGE - Out of range.
  425. * RT_ERR_FAILED - Failed
  426. * RT_ERR_SMI - SMI access error
  427. * Note:
  428. * Reset Logging Counter.
  429. */
  430. rtk_api_ret_t rtk_stat_logging_counter_reset(rtk_uint32 idx)
  431. {
  432. rtk_api_ret_t retVal;
  433. /* Check initialization state */
  434. RTK_CHK_INIT_STATE();
  435. if(idx > RTL8367C_MIB_MAX_LOG_CNT_IDX)
  436. return RT_ERR_OUT_OF_RANGE;
  437. if((retVal = rtl8367c_setAsicMIBsResetLoggingCounter(idx)) != RT_ERR_OK)
  438. return retVal;
  439. return RT_ERR_OK;
  440. }
  441. /* Function Name:
  442. * rtk_stat_logging_counter_get
  443. * Description:
  444. * Get Logging Counter
  445. * Input:
  446. * idx - The index of Logging Counter. (0~31)
  447. * Output:
  448. * pCnt - Logging counter value
  449. * Return:
  450. * RT_ERR_OK - OK
  451. * RT_ERR_OUT_OF_RANGE - Out of range.
  452. * RT_ERR_FAILED - Failed
  453. * RT_ERR_SMI - SMI access error
  454. * Note:
  455. * Get Logging Counter.
  456. */
  457. rtk_api_ret_t rtk_stat_logging_counter_get(rtk_uint32 idx, rtk_uint32 *pCnt)
  458. {
  459. rtk_api_ret_t retVal;
  460. /* Check initialization state */
  461. RTK_CHK_INIT_STATE();
  462. if(NULL == pCnt)
  463. return RT_ERR_NULL_POINTER;
  464. if(idx > RTL8367C_MIB_MAX_LOG_CNT_IDX)
  465. return RT_ERR_OUT_OF_RANGE;
  466. if((retVal = rtl8367c_getAsicMIBsLogCounter(idx, pCnt)) != RT_ERR_OK)
  467. return retVal;
  468. return RT_ERR_OK;
  469. }
  470. /* Function Name:
  471. * rtk_stat_lengthMode_set
  472. * Description:
  473. * Set Legnth mode.
  474. * Input:
  475. * txMode - The length counting mode
  476. * rxMode - The length counting mode
  477. * Output:
  478. * None.
  479. * Return:
  480. * RT_ERR_OK - OK
  481. * RT_ERR_INPUT - Out of range.
  482. * RT_ERR_FAILED - Failed
  483. * RT_ERR_SMI - SMI access error
  484. * Note:
  485. *
  486. */
  487. rtk_api_ret_t rtk_stat_lengthMode_set(rtk_stat_lengthMode_t txMode, rtk_stat_lengthMode_t rxMode)
  488. {
  489. rtk_api_ret_t retVal;
  490. /* Check initialization state */
  491. RTK_CHK_INIT_STATE();
  492. if(txMode >= LENGTH_MODE_END)
  493. return RT_ERR_INPUT;
  494. if(rxMode >= LENGTH_MODE_END)
  495. return RT_ERR_INPUT;
  496. if((retVal = rtl8367c_setAsicMIBsLength((rtk_uint32)txMode, (rtk_uint32)rxMode)) != RT_ERR_OK)
  497. return retVal;
  498. return RT_ERR_OK;
  499. }
  500. /* Function Name:
  501. * rtk_stat_lengthMode_get
  502. * Description:
  503. * Get Legnth mode.
  504. * Input:
  505. * None.
  506. * Output:
  507. * pTxMode - The length counting mode
  508. * pRxMode - The length counting mode
  509. * Return:
  510. * RT_ERR_OK - OK
  511. * RT_ERR_INPUT - Out of range.
  512. * RT_ERR_FAILED - Failed
  513. * RT_ERR_SMI - SMI access error
  514. * Note:
  515. */
  516. rtk_api_ret_t rtk_stat_lengthMode_get(rtk_stat_lengthMode_t *pTxMode, rtk_stat_lengthMode_t *pRxMode)
  517. {
  518. rtk_api_ret_t retVal;
  519. /* Check initialization state */
  520. RTK_CHK_INIT_STATE();
  521. if(NULL == pTxMode)
  522. return RT_ERR_NULL_POINTER;
  523. if(NULL == pRxMode)
  524. return RT_ERR_NULL_POINTER;
  525. if((retVal = rtl8367c_getAsicMIBsLength((rtk_uint32 *)pTxMode, (rtk_uint32 *)pRxMode)) != RT_ERR_OK)
  526. return retVal;
  527. return RT_ERR_OK;
  528. }