policer.h (4020B)
1 /* 2 * 3 * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file. 4 * 5 * Copyright 2007-2019 Broadcom Inc. All rights reserved. 6 * 7 * File: policer.h 8 * Purpose: Defines common policer parameters. 9 */ 10 11 #ifndef _SHR_POLICER_H_ 12 #define _SHR_POLICER_H_ 13 14 #include <shared/gport.h> 15 16 /* policer_id macro definitions */ 17 #define _SHR_POLICER_ID_METER_INDEX_POSITION (0) 18 #define _SHR_POLICER_ID_METER_INDEX_MASK (0x7FFFF) /** 19 bits for meter index*/ 19 #define _SHR_POLICER_ID_DATABASE_HANDLE_POSITION (20) /** 1 spare bit for future usage */ 20 #define _SHR_POLICER_ID_DATABASE_HANDLE_MASK (0x3FF) /** 10 bits for the handle */ 21 #define _SHR_POLICER_ID_MACRO_IND_POSITION (30) 22 #define _SHR_POLICER_ID_MACRO_IND_MASK (0x1) /** 1 bit for macro indication */ 23 24 /* database_handle macro definitions */ 25 #define _SHR_POLICER_IS_INGRESS_POSITION (_SHR_POLICER_ID_DATABASE_HANDLE_POSITION) 26 #define _SHR_POLICER_IS_INGRESS_MASK (0x1) 27 #define _SHR_POLICER_IS_GLOBAL_POSITION (_SHR_POLICER_ID_DATABASE_HANDLE_POSITION + 1) 28 #define _SHR_POLICER_IS_GLOBAL_MASK (0x1) 29 #define _SHR_POLICER_DATABASE_ID_POSITION (_SHR_POLICER_ID_DATABASE_HANDLE_POSITION + 2) 30 #define _SHR_POLICER_DATABASE_ID_MASK (0x3) 31 #define _SHR_POLICER_CORE_ID_POSITION (_SHR_POLICER_ID_DATABASE_HANDLE_POSITION + 6) /** 1 spare bit for future usage */ 32 #define _SHR_POLICER_CORE_ID_MASK (0x3) /** support upto 4 cores */ 33 #define _SHR_POLICER_CORE_ALL_POSITION (_SHR_POLICER_ID_DATABASE_HANDLE_POSITION + 8) 34 #define _SHR_POLICER_CORE_ALL_MASK (0x1) 35 36 #define _SHR_POLICER_DATABASE_HANDLE_MACRO_IND_POSITION (_SHR_POLICER_ID_DATABASE_HANDLE_POSITION + 9) 37 #define _SHR_POLICER_DATABASE_HANDLE_MACRO_IND_MASK (0x1) 38 39 40 41 42 43 #define _SHR_POLICER_DATABASE_HANDLE_SET(_database_handle, _is_ingress, _is_global, _core_id, _database_id) \ 44 (_database_handle = ((_core_id & _SHR_POLICER_CORE_ID_MASK) << _SHR_POLICER_CORE_ID_POSITION) | \ 45 ((((_core_id == _SHR_CORE_ALL) ? 1 : 0) & _SHR_POLICER_CORE_ALL_MASK) << _SHR_POLICER_CORE_ALL_POSITION) | \ 46 ((_database_id & _SHR_POLICER_DATABASE_ID_MASK) << _SHR_POLICER_DATABASE_ID_POSITION) | \ 47 ((_is_global & _SHR_POLICER_IS_GLOBAL_MASK) << _SHR_POLICER_IS_GLOBAL_POSITION) | \ 48 ((_is_ingress & _SHR_POLICER_IS_INGRESS_MASK) << _SHR_POLICER_IS_INGRESS_POSITION) | \ 49 ((0x1 & _SHR_POLICER_DATABASE_HANDLE_MACRO_IND_MASK) << _SHR_POLICER_DATABASE_HANDLE_MACRO_IND_POSITION)) 50 51 #define _SHR_POLICER_DATABASE_HANDLE_IS_INGRESS_GET(_database_handle) \ 52 ((_database_handle >> _SHR_POLICER_IS_INGRESS_POSITION) & _SHR_POLICER_IS_INGRESS_MASK) 53 54 #define _SHR_POLICER_DATABASE_HANDLE_IS_GLOBAL_GET(_database_handle) \ 55 ((_database_handle >> _SHR_POLICER_IS_GLOBAL_POSITION) & _SHR_POLICER_IS_GLOBAL_MASK) 56 57 #define _SHR_POLICER_DATABASE_HANDLE_CORE_ID_GET(_database_handle) \ 58 (((_database_handle >> _SHR_POLICER_CORE_ALL_POSITION) & _SHR_POLICER_CORE_ALL_MASK) ? \ 59 (_SHR_CORE_ALL) : ((_database_handle >> _SHR_POLICER_CORE_ID_POSITION) & _SHR_POLICER_CORE_ID_MASK)) 60 61 #define _SHR_POLICER_DATABASE_HANDLE_DATABASE_ID_GET(_database_handle) \ 62 ((_database_handle >> _SHR_POLICER_DATABASE_ID_POSITION) & _SHR_POLICER_DATABASE_ID_MASK) 63 64 65 66 #define _SHR_POLICER_ID_SET(_policer_id, _database_handle, meter_index) \ 67 (_policer_id = ((meter_index & _SHR_POLICER_ID_METER_INDEX_MASK) << _SHR_POLICER_ID_METER_INDEX_POSITION) | \ 68 (_database_handle) | \ 69 ((0x1 & _SHR_POLICER_ID_MACRO_IND_MASK) << _SHR_POLICER_ID_MACRO_IND_POSITION)) 70 71 #define _SHR_POLICER_ID_METER_INDEX_GET(_policer_id) \ 72 ((_policer_id >> _SHR_POLICER_ID_METER_INDEX_POSITION) & _SHR_POLICER_ID_METER_INDEX_MASK) 73 74 #define _SHR_POLICER_ID_DATABASE_HANDLE_GET(_policer_id) \ 75 ((_policer_id) & (_SHR_POLICER_ID_DATABASE_HANDLE_MASK << _SHR_POLICER_ID_DATABASE_HANDLE_POSITION)) 76 77 78 #endif /* _SHR_POLICER_H_ */