/*
<:copyright-BRCM:2016:DUAL/GPL:standard

   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
   All Rights Reserved

Unless you and Broadcom execute a separate written software license
agreement governing use of this software, this software is licensed
to you under the terms of the GNU General Public License version 2
(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
with the following added to such license:

   As a special exception, the copyright holders of this software give
   you permission to link this software with independent modules, and
   to copy and distribute the resulting executable under terms of your
   choice, provided that you also meet, for each linked independent
   module, the terms and conditions of the license of that module.
   An independent module is a module which is not derived from this
   software.  The special exception does not apply to any modifications
   of the software.

Not withstanding the above, under no circumstances may you combine
this software in any way with any other Broadcom software provided
under a license other than the GPL, without Broadcom's express prior
written consent.

:>
 */

#ifndef BCMBAL_APICLI_TYPES_H_
#define BCMBAL_APICLI_TYPES_H_

/* Property access */
typedef enum
{
    BCMBAL_APICLI_PROP_ACCESS_ID_R = 0x1,   /* Read access */
    BCMBAL_APICLI_PROP_ACCESS_ID_W = 0x2,   /* Write access */
    BCMBAL_APICLI_PROP_ACCESS_ID_RW = 0x3,  /* Read-write */
} bcmbal_apicli_prop_access_id;

/* Base data types */
typedef enum
{
    BCMBAL_APICLI_BASE_TYPE_ID_SNUM,       /* signed number */
    BCMBAL_APICLI_BASE_TYPE_ID_UNUM,       /* unsigned number */
    BCMBAL_APICLI_BASE_TYPE_ID_UNUM_HEX,   /* unsigned number printed in hex */
    BCMBAL_APICLI_BASE_TYPE_ID_FLOAT,      /* floating-point number */
    BCMBAL_APICLI_BASE_TYPE_ID_BOOL,       /* boolean (zero=no, nonzero=yes) */
    BCMBAL_APICLI_BASE_TYPE_ID_STRING,     /* string */
    BCMBAL_APICLI_BASE_TYPE_ID_IPV4,       /* IPv4 address */
    BCMBAL_APICLI_BASE_TYPE_ID_MAC,        /* MAC address */
    BCMBAL_APICLI_BASE_TYPE_ID_ENUM,       /* enum */
    BCMBAL_APICLI_BASE_TYPE_ID_ENUM_MASK,  /* bitmask enum */
    BCMBAL_APICLI_BASE_TYPE_ID_STRUCT,     /* struct */
    BCMBAL_APICLI_BASE_TYPE_ID_UNION,      /* union */
    BCMBAL_APICLI_BASE_TYPE_ID_ARR_DYN,    /* dynamically-sized array */
    BCMBAL_APICLI_BASE_TYPE_ID_ARR_FIXED,  /* fixed-size array */
} bcmbal_apicli_base_type_id;

#endif /* BCMBAL_APICLI_TYPES_H_ */
