mirror of
https://github.com/dimoniche/changer.git
synced 2026-01-30 09:13:31 +03:00
224 lines
9.9 KiB
C
224 lines
9.9 KiB
C
/*
|
||
*********************************************************************************************************
|
||
* uC/TCP-IP
|
||
* The Embedded TCP/IP Suite
|
||
*
|
||
* (c) Copyright 2003-2007; Micrium, Inc.; Weston, FL
|
||
*
|
||
* All rights reserved. Protected by international copyright laws.
|
||
*
|
||
* uC/TCP-IP is provided in source form for FREE evaluation, for educational
|
||
* use or peaceful research. If you plan on using uC/TCP-IP in a commercial
|
||
* product you need to contact Micrium to properly license its use in your
|
||
* product. We provide ALL the source code for your convenience and to help
|
||
* you experience uC/TCP-IP. The fact that the source code is provided does
|
||
* NOT mean that you can use it without paying a licensing fee.
|
||
*
|
||
* Knowledge of the source code may NOT be used to develop a similar product.
|
||
*
|
||
* Please help us continue to provide the Embedded community with the finest
|
||
* software available. Your honesty is greatly appreciated.
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
*
|
||
* NETWORK COUNTER MANAGEMENT
|
||
*
|
||
* Filename : net_ctr.h
|
||
* Version : V1.89
|
||
* Programmer(s) : ITJ
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* EXTERNS
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#ifdef NET_CTR_MODULE
|
||
#define NET_CTR_EXT
|
||
#else
|
||
#define NET_CTR_EXT extern
|
||
#endif
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* DEFINES
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* MACRO'S
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* NETWORK COUNTER MACRO'S
|
||
*
|
||
* Description : Increment network counter(s).
|
||
*
|
||
* Argument(s) : Various network counter variable(s) to increment.
|
||
*
|
||
* Return(s) : none.
|
||
*
|
||
* Caller(s) : various.
|
||
*
|
||
* These macro's are INTERNAL network protocol suite macro's & SHOULD NOT be called by
|
||
* application function(s).
|
||
*
|
||
* Note(s) : (1) ALL functions which call network counter macro's MUST declare local variable 'cpu_sr' if
|
||
* critical section method is configured as CPU_CRITICAL_METHOD_STATUS_LOCAL :
|
||
*
|
||
* #if (CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_STATUS_LOCAL)
|
||
* CPU_SR cpu_sr;
|
||
* #endif
|
||
*
|
||
* (a) #### Macro's require critical section for exclusive access?
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#define NET_CTR_INC(ctr) { CPU_CRITICAL_ENTER(); \
|
||
(ctr)++; \
|
||
CPU_CRITICAL_EXIT(); }
|
||
|
||
#define NET_CTR_INC_LARGE(ctr_hi, ctr_lo) { CPU_CRITICAL_ENTER(); \
|
||
(ctr_lo)++; \
|
||
if ((ctr_lo) == 0) { \
|
||
(ctr_hi)++; \
|
||
} \
|
||
CPU_CRITICAL_EXIT(); }
|
||
|
||
|
||
#if (NET_CTR_CFG_STAT_EN == DEF_ENABLED)
|
||
#define NET_CTR_STAT_INC(stat_ctr) { NET_CTR_INC(stat_ctr); }
|
||
#define NET_CTR_STAT_INC_LARGE(stat_ctr_hi, stat_ctr_lo) { NET_CTR_INC_LARGE(stat_ctr_hi, stat_ctr_lo); }
|
||
#else
|
||
#define NET_CTR_STAT_INC(stat_ctr)
|
||
#define NET_CTR_STAT_INC_LARGE(stat_ctr_hi, stat_ctr_lo)
|
||
#endif
|
||
|
||
|
||
#if (NET_CTR_CFG_ERR_EN == DEF_ENABLED)
|
||
#define NET_CTR_ERR_INC(err_ctr) { NET_CTR_INC(err_ctr); }
|
||
#define NET_CTR_ERR_INC_LARGE(err_ctr_hi, err_ctr_lo) { NET_CTR_INC_LARGE(err_ctr_hi, err_ctr_lo); }
|
||
#else
|
||
#define NET_CTR_ERR_INC(err_ctr)
|
||
#define NET_CTR_ERR_INC_LARGE(err_ctr_hi, err_ctr_lo)
|
||
#endif
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* DATA TYPES
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* NETWORK COUNTER DATA TYPE
|
||
*
|
||
* Note(s) : (1) NET_CTR_MAX SHOULD be globally #define'd AFTER 'NET_CTR' data type declared.
|
||
*
|
||
* (2) NET_CTR_PCT_NUMER_MAX_TH, NET_CTR_BIT_LO, & NET_CTR_BIT_HI MUST be globally #define'd
|
||
* AFTER 'NET_CTR' data type declared.
|
||
*
|
||
* (3) NET_CTR_PCT_NUMER_MAX_TH #define's the maximum value for a counter that is used as a
|
||
* numerator in a percentage calculation. This threshold is required since the numerator in
|
||
* a percentage calculation is multiplied by 100 (%) BEFORE division with the denominator :
|
||
*
|
||
* Numerator * 100%
|
||
* Percentage (%) = ----------------
|
||
* Denominator
|
||
*
|
||
* Therefore, the numerator MUST be constrained by this threshold to prevent integer overflow
|
||
* from the multiplication BEFORE the division.
|
||
*
|
||
* (a) The percentage threshold value is calculated as follows :
|
||
*
|
||
* N
|
||
* 2
|
||
* Percentage Threshold = ---
|
||
* 100
|
||
*
|
||
* (b) To avoid macro integer overflow, the threshold value is modified by one less "divide-by-2"
|
||
* left-shift compensated by dividing the numerator by 50, instead of 100 :
|
||
*
|
||
* N-1 N
|
||
* 2 2 / 2
|
||
* Percentage Threshold = ---- = -------
|
||
* 50 100 / 2
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
typedef CPU_INT32U NET_CTR; /* Defines max nbr of errs/stats to cnt. */
|
||
|
||
#define NET_CTR_MAX DEF_INT_32U_MAX_VAL /* Define as max unsigned val (see Note #1). */
|
||
|
||
|
||
#define NET_CTR_PCT_NUMER_MAX_TH (((NET_CTR)1 << ((sizeof(NET_CTR) * DEF_OCTET_NBR_BITS) - 1)) / (NET_CTR)50)
|
||
|
||
#define NET_CTR_BIT_LO ((NET_CTR)DEF_BIT_00)
|
||
#define NET_CTR_BIT_HI ((NET_CTR)1 << ((sizeof(NET_CTR) * DEF_OCTET_NBR_BITS) - 1))
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* GLOBAL VARIABLES
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* FUNCTION PROTOTYPES
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
CPU_INT08U NetCtr_CalcPctLarge(NET_CTR pct_numer_hi,
|
||
NET_CTR pct_numer_lo,
|
||
NET_CTR pct_denom_hi,
|
||
NET_CTR pct_denom_lo);
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* CONFIGURATION ERRORS
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#ifndef NET_CTR_CFG_STAT_EN
|
||
#error "NET_CTR_CFG_STAT_EN not #define'd in 'net_cfg.h'"
|
||
#error " [MUST be DEF_DISABLED] "
|
||
#error " [ || DEF_ENABLED ] "
|
||
#elif ((NET_CTR_CFG_STAT_EN != DEF_DISABLED) && \
|
||
(NET_CTR_CFG_STAT_EN != DEF_ENABLED ))
|
||
#error "NET_CTR_CFG_STAT_EN illegally #define'd in 'net_cfg.h'"
|
||
#error " [MUST be DEF_DISABLED] "
|
||
#error " [ || DEF_ENABLED ] "
|
||
#endif
|
||
|
||
|
||
|
||
#ifndef NET_CTR_CFG_ERR_EN
|
||
#error "NET_CTR_CFG_ERR_EN not #define'd in 'net_cfg.h'"
|
||
#error " [MUST be DEF_DISABLED] "
|
||
#error " [ || DEF_ENABLED ] "
|
||
#elif ((NET_CTR_CFG_ERR_EN != DEF_DISABLED) && \
|
||
(NET_CTR_CFG_ERR_EN != DEF_ENABLED ))
|
||
#error "NET_CTR_CFG_ERR_EN illegally #define'd in 'net_cfg.h'"
|
||
#error " [MUST be DEF_DISABLED] "
|
||
#error " [ || DEF_ENABLED ] "
|
||
#endif
|
||
|