openbcm

Git mirror of https://github.com/Broadcom-Network-Switching-Software/OpenBCM
git clone git://git.finwo.net/mirror/broadcom/openbcm
Log | Files | Refs | README

util.h (5390B)


      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  * General utility routines
      8  */
      9 
     10 #ifndef _SHR_UTIL_H
     11 #define _SHR_UTIL_H
     12 
     13 #include <sal/types.h>
     14 #include <sal/core/time.h>
     15 #include <sal/core/dpc.h>
     16 #include <sal/core/sync.h>
     17 
     18 extern unsigned short _shr_swap16(unsigned short val);
     19 extern unsigned int _shr_swap32(unsigned int val);
     20 
     21 extern int _shr_popcount(unsigned int);
     22 
     23 extern uint8 _shr_bit_rev8(uint8 n);
     24 extern uint16 _shr_bit_rev16(uint16 n);
     25 extern uint32 _shr_bit_rev32(uint32 n);
     26 extern uint32 _shr_bit_rev_by_byte_word32(uint32 n);
     27 
     28 extern unsigned short _shr_crc16(int start, unsigned char *p, int n);
     29 extern unsigned short _shr_crc16b(int crc, unsigned char *data, int nbits);
     30 extern unsigned short _shr_crc16bd15(int crc, unsigned char *data, int nbits);
     31 
     32 #define _SHR_CRC32_CORRECT 0xe320bbde
     33 extern unsigned int _shr_crc32(unsigned int accum, unsigned char *data, 
     34                                int len);
     35 unsigned int _shr_crc32b(unsigned int crc, unsigned char *data, int nbits);
     36 unsigned int _shr_crc32bd15(unsigned int crc, unsigned char *data, int nbits);
     37 
     38 uint16       _shr_crc16_ccitt(int crc, unsigned char *data, int len);
     39 uint32       _shr_crc32_castagnoli(unsigned int crc, unsigned char *data, int len);
     40 uint32       _shr_crc32_ethernet(unsigned int crc, unsigned char *data, int len);
     41 uint32       _shr_crc32_koopman(unsigned int crc, unsigned char *data, int len);
     42 
     43 uint16       _shr_crc16_draco_array(uint32 *hash_words, int n);
     44 uint16       _shr_crc16_ccitt_array(uint32 *hash_words, int n);
     45 uint32       _shr_crc32_castagnoli_array(uint32 *hash_words, int n);
     46 uint32       _shr_crc32_ethernet_array(uint32 *hash_words, int n);
     47 uint32       _shr_crc32_koopman_array(uint32 *hash_words, int n);
     48 
     49 void _shr_sort(void *base, int count, int size,
     50 	       int (*compar)(void *, void *));
     51 int _shr_bsearch(void *base, int count, int size, 
     52                  void *target, int (*compar)(void *, void *));
     53 
     54 void _shr_format_integer(char *buf, unsigned int n, int min_digits, int base);
     55 void _shr_format_long_integer(char *buf, unsigned int *val, int nval);
     56 
     57 void _shr_format_uint64_hexa_string(uint64 value, char* uint64_hexa_string);
     58 
     59 int  _shr_isxdigit(char c);
     60 
     61 extern unsigned int _shr_ctoi(const char *s);
     62 extern sal_vaddr_t _shr_ctoa(const char *s);
     63 
     64 extern int _shr_div_exp10(int d1, int d2, int exp10);
     65 extern int _shr_atof_exp10(const char *s, int exp10);
     66 
     67 extern uint32 _shr_div32r(uint32 d1, uint32 d2);
     68 extern char *_shr_scale_uint64(uint64 d64, int base, int prec, uint32 *d32);
     69 
     70 extern unsigned short _shr_ip_chksum(unsigned int length, unsigned char *data);
     71 
     72 /* WARNING:  SIDE EFFECTS; AVOID EXPRESSIONS IN THESE MACROS */
     73 
     74 
     75 /* unsigned char *buf, unsigned short val */
     76 #define _SHR_PACK_SHORT(buf, val) \
     77     do {                                               \
     78         (buf)[0] = (val) >> 8;                         \
     79         (buf)[1] = (val);                              \
     80     } while (0)
     81 
     82 /* unsigned char *buf, unsigned long val */
     83 #define _SHR_PACK_LONG(buf, val) \
     84     do {                                               \
     85         (buf)[0] = (val) >> 24;                        \
     86         (buf)[1] = (val) >> 16;                        \
     87         (buf)[2] = (val) >> 8;                         \
     88         (buf)[3] = (val);                              \
     89     } while (0)
     90 
     91 /* unsigned char *buf, unsigned short val */
     92 #define _SHR_UNPACK_SHORT(buf, val) (val) = (((buf)[0] << 8) | (buf)[1])
     93 
     94 /* unsigned char *buf, unsigned long val */
     95 #define _SHR_UNPACK_LONG(buf, val) \
     96     (val) = (((buf)[0] << 24) | ((buf)[1] << 16) | ((buf)[2] << 8) | (buf)[3])
     97 
     98 int _shr_parse_macaddr(char *str, uint8 *macaddr);
     99 int _shr_parse_ipaddr(char *s, sal_ip_addr_t *ipaddr);
    100 
    101 uint16 _shr_uint16_read(uint8* buffer);
    102 void   _shr_uint16_write(uint8* buffer, const uint16 value);
    103 
    104 uint32 _shr_uint32_read(uint8* buffer);
    105 void _shr_uint32_write(uint8* buffer, const uint32 value);
    106 
    107 uint64 _shr_uint64_read(uint8* buffer);
    108 void _shr_uint64_write(uint8* buffer, const uint64 value);
    109 
    110 int64 _shr_int64_read(uint8* buffer);
    111 void _shr_int64_write(uint8* buffer, const int64 value);
    112 
    113 /* To check if particular flag is set */
    114 #define _SHR_IS_FLAG_SET(flags, flag_bit)        (((flags) & (flag_bit)) ? 1 : 0)
    115 
    116 /*
    117  * XOR two booleans.
    118  */
    119 #define _SHR_XOR_BOOL(a, b) ((a && !b) || (!a && b))
    120 /* Repeating Delayed Procedure Call:
    121  *   Wrapper on top of SAL DPC layer to provide a safe mechanism for
    122  *   scheduling / unscheduling repeated calls to a function.
    123  */
    124 
    125 /* shr_rdpc_fn_t should return the time interval until the next call, or 0 to indicate it should stop */
    126 typedef sal_usecs_t (*shr_rdpc_fn_t)(void **, void **, void **, void **);
    127 
    128 typedef struct shr_rdpc_s {
    129     shr_rdpc_fn_t func;
    130     sal_mutex_t call_count_lock;
    131     int run_count;
    132     int running;
    133 } shr_rdpc_t;
    134 
    135 extern int shr_rdpc_callback_create(shr_rdpc_t *rdpc, shr_rdpc_fn_t func);
    136 extern int shr_rdpc_callback_created(shr_rdpc_t *rdpc);
    137 extern int shr_rdpc_callback_start(shr_rdpc_t *rdpc, sal_usecs_t first_interval, void *, void *, void *, void *);
    138 extern int shr_rdpc_callback_stop(shr_rdpc_t *rdpc);
    139 extern int shr_rdpc_callback_finished(shr_rdpc_t *rdpc);
    140 extern int shr_rdpc_callback_destroy(shr_rdpc_t *rdpc);
    141 
    142 
    143 #endif	/* !_SHR_UTIL_H */