/*******************************************************************************
Copyright (C) Marvell International Ltd. and its affiliates

This software file (the "File") is owned and distributed by Marvell
International Ltd. and/or its affiliates ("Marvell") under the following
alternative licensing terms.  Once you have made an election to distribute the
File under one of the following license alternatives, please (i) delete this
introductory statement regarding license alternatives, (ii) delete the two
license alternatives that you have not elected to use and (iii) preserve the
Marvell copyright notice above.

********************************************************************************
Marvell Commercial License Option

If you received this File from Marvell and you have entered into a commercial
license agreement (a "Commercial License") with Marvell, the File is licensed
to you under the terms of the applicable Commercial License.

********************************************************************************
Marvell GPL License Option

If you received this File from Marvell, you may opt to use, redistribute and/or
modify this File in accordance with the terms and conditions of the General
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
available along with the File in the license.txt file or by writing to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.

THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
DISCLAIMED.  The GPL License provides additional details about this warranty
disclaimer.
********************************************************************************
Marvell BSD License Option

If you received this File from Marvell, you may opt to use, redistribute and/or
modify this File under the following licensing terms.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

    *   Redistributions of source code must retain the above copyright notice,
        this list of conditions and the following disclaimer.

    *   Redistributions in binary form must reproduce the above copyright
        notice, this list of conditions and the following disclaimer in the
        documentation and/or other materials provided with the distribution.

    *   Neither the name of Marvell nor the names of its contributors may be
        used to endorse or promote products derived from this software without
        specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

******************************************************************************/

#ifndef _TPM_MNG_IF_H_
#define _TPM_MNG_IF_H_

/* Include Files
------------------------------------------------------------------------------*/

/* Definitions
------------------------------------------------------------------------------*/
#define TPM_NUM_DEVICES     (1)
#define TPM_DEV_NAME        ("tpm")
#define MV_TPM_IOCTL_MAGIC  ('T')

#define MAX_ETH_PORT_ALARM 10
#define MAX_FRAME_SIZE     1600

#define MV_TPM_IOCTL_INIT_SECTION          _IOW(MV_TPM_IOCTL_MAGIC,   1, unsigned int)
#define MV_TPM_IOCTL_ADMIN_SECTION         _IOWR(MV_TPM_IOCTL_MAGIC,  2, unsigned int)
#define MV_TPM_IOCTL_ADD_ACL_SECTION       _IOW(MV_TPM_IOCTL_MAGIC,   3, unsigned int)
#define MV_TPM_IOCTL_DEL_ACL_SECTION       _IOW(MV_TPM_IOCTL_MAGIC,   4, unsigned int)
#define MV_TPM_IOCTL_CTRL_ACL_SECTION      _IOWR(MV_TPM_IOCTL_MAGIC,  5, unsigned int)
#define MV_TPM_IOCTL_MC_STREAM_SECTION     _IOW(MV_TPM_IOCTL_MAGIC,   6, unsigned int)
#define MV_TPM_IOCTL_MNG_SECTION           _IOWR(MV_TPM_IOCTL_MAGIC,  7, unsigned int)
#define MV_TPM_IOCTL_SW_SECURITY_SECTION   _IOW(MV_TPM_IOCTL_MAGIC,   8, unsigned int)
#define MV_TPM_IOCTL_SW_VLAN_SECTION       _IOW(MV_TPM_IOCTL_MAGIC,   9, unsigned int)
#define MV_TPM_IOCTL_SW_TM_SECTION         _IOW(MV_TPM_IOCTL_MAGIC,  10, unsigned int)
#define MV_TPM_IOCTL_IGMP_SECTION          _IOW(MV_TPM_IOCTL_MAGIC,  11, unsigned int)
#define MV_TPM_IOCTL_PP_TM_SECTION         _IOW(MV_TPM_IOCTL_MAGIC,  12, unsigned int)
#define MV_TPM_IOCTL_PRINT_SECTION         _IOW(MV_TPM_IOCTL_MAGIC,  13, unsigned int)
#define MV_TPM_IOCTL_TRACE_SECTION         _IOW(MV_TPM_IOCTL_MAGIC,  14, unsigned int)
#define MV_TPM_IOCTL_SW_PHY_SECTION        _IOW(MV_TPM_IOCTL_MAGIC,  15, unsigned int)
#define MV_TPM_IOCTL_RESET_SECTION         _IOW(MV_TPM_IOCTL_MAGIC,  16, unsigned int)
#define MV_TPM_IOCTL_ALARM_SECTION         _IOW(MV_TPM_IOCTL_MAGIC,  17, unsigned int)
#define MV_TPM_IOCTL_COUNTER_CLEAR_SECTION _IOW(MV_TPM_IOCTL_MAGIC,  18, unsigned int)
#define MV_TPM_IOCTL_GET_MOD_SECTION       _IOWR(MV_TPM_IOCTL_MAGIC, 19, unsigned int)
#define MV_TPM_IOCTL_RX_IGMP               _IOWR(MV_TPM_IOCTL_MAGIC, 20, unsigned int)
#define MV_TPM_IOCTL_TX_IGMP               _IOW(MV_TPM_IOCTL_MAGIC,  21, unsigned int)
#define MV_TPM_IOCTL_SETUP_SECTION         _IOW(MV_TPM_IOCTL_MAGIC,  22, unsigned int)
#define MV_TPM_IOCTL_CPU_LPBK_SECTION      _IOWR(MV_TPM_IOCTL_MAGIC, 23, unsigned int)
#define MV_TPM_IOCTL_AGE_COUNT_SECTION     _IOWR(MV_TPM_IOCTL_MAGIC, 24, unsigned int)
#define MV_TPM_IOCTL_MC_VLAN_SECTION       _IOWR(MV_TPM_IOCTL_MAGIC, 25, unsigned int)
#define MV_TPM_IOCTL_MTU_SECTION           _IOWR(MV_TPM_IOCTL_MAGIC, 26, unsigned int)
#define MV_TPM_IOCTL_TPM_CHECK_SECTION     _IOW(MV_TPM_IOCTL_MAGIC,  27, unsigned int)
#define MV_TPM_IOCTL_FLUSH_ATU_SECTION     _IOWR(MV_TPM_IOCTL_MAGIC, 28, unsigned int)
#define MV_TPM_IOCTL_FLUSH_VTU_SECTION     _IOWR(MV_TPM_IOCTL_MAGIC, 29, unsigned int)
#define MV_TPM_IOCTL_SET_IPV6_CM_PARSE_WIN_SECTION     _IOWR(MV_TPM_IOCTL_MAGIC, 30, unsigned int)
#define MV_TPM_IOCTL_SET_ACTIVE_WAN_SECTION            _IOWR(MV_TPM_IOCTL_MAGIC, 31, unsigned int)
#define MV_TPM_IOCTL_HOT_SWAP_PROFILE_SECTION          _IOWR(MV_TPM_IOCTL_MAGIC, 32, unsigned int)
#define MV_TPM_IOCTL_SET_GMAC_LPBK_SECTION             _IOWR(MV_TPM_IOCTL_MAGIC, 33, unsigned int)
#define MV_TPM_IOCTL_SET_PORT_HWF_ADMIN_SECTION        _IOWR(MV_TPM_IOCTL_MAGIC, 34, unsigned int)


#define MV_APM_IOCTL_MAGIC  ('A')

#define MV_APM_IOCTL_PM_1_SWPORT_SECTION   _IOWR(MV_APM_IOCTL_MAGIC,  1, unsigned int)
#define MV_APM_IOCTL_PM_3_SWPORT_SECTION   _IOWR(MV_APM_IOCTL_MAGIC,  2, unsigned int)


/* Enums
------------------------------------------------------------------------------*/

typedef enum tpm_ioctl_cmd_type
{
    MV_TPM_IOCTL_INIT =  1,
    MV_TPM_IOCTL_CRT_OWNER,
    MV_TPM_IOCTL_REQ_API_G_OWNER,
    MV_TPM_IOCTL_GET_API_G_OWNER,
    MV_TPM_IOCTL_DEL_SECTION,
    MV_TPM_IOCTL_GET_SECTION_SIZE,
    MV_TPM_IOCTL_ADD_L2_ACL_RULE,
    MV_TPM_IOCTL_ADD_L3_ACL_RULE,
    MV_TPM_IOCTL_ADD_IPv4_ACL_RULE,
    MV_TPM_IOCTL_DEL_L2_ACL_RULE,
    MV_TPM_IOCTL_DEL_L3_ACL_RULE,
    MV_TPM_IOCTL_DEL_IPv4_ACL_RULE,
    MV_TPM_IOCTL_GET_NEXT_VALID_RULE,
    MV_TPM_IOCTL_ADD_IPv4_MC_STREAM,
    MV_TPM_IOCTL_MOD_IPv4_MC_STREAM,
    MV_TPM_IOCTL_DEL_IPv4_MC_STREAM,
    MV_TPM_IOCTL_ADD_OMCI_CHNL,
    MV_TPM_IOCTL_DEL_OMCI_CHNL,
    MV_TPM_IOCTL_GET_OMCI_CHNL,
    MV_TPM_IOCTL_ADD_OAM_CHNL,
    MV_TPM_IOCTL_DEL_OAM_CHNL,
    MV_TPM_IOCTL_GET_OAM_CHNL,
    MV_TPM_IOCTL_SW_ADD_STATIC_MAC,
    MV_TPM_IOCTL_SW_DEL_STATIC_MAC,
    MV_TPM_IOCTL_SW_SET_PORT_MAC_LIMIT,
    MV_TPM_IOCTL_SW_SET_PORT_FLOOD,
    MV_TPM_IOCTL_SW_SET_PORT_TAGGED,
    MV_TPM_IOCTL_SW_SET_PORT_UNTAGGED,
    MV_TPM_IOCTL_SW_PORT_ADD_VID,
    MV_TPM_IOCTL_SW_PORT_DEL_VID,
    MV_TPM_IOCTL_SW_PORT_SER_VID_FILTER,
    MV_TPM_IOCTL_SW_SET_UNI_SCHED,
    MV_TPM_IOCTL_SW_UNI_QUE_WEIGHT,
    MV_TPM_IOCTL_SW_SET_UNI_INGR_POLICE_RATE,
    MV_TPM_IOCTL_SW_UNI_TC_INGR_POLICE_RATE,
    MV_TPM_IOCTL_SW_SET_UNI_EGR_RATE_LIMIT,
    MV_TPM_IOCTL_TM_SET_WAN_EGR_QUE_SCHED,
    MV_TPM_IOCTL_TM_SET_WAN_INGR_QUE_SCHED,
    MV_TPM_IOCTL_TM_SET_WAN_SCHED_EGR_RATE_LIMIT,
    MV_TPM_IOCTL_TM_SET_WAN_QUE_EGR_RATE_LIMIT,
    MV_TPM_IOCTL_TM_SET_WAN_INGR_RATE_LIMIT,
    MV_TPM_IOCTL_TM_SET_WAN_QUE_INGR_RATE_LIMIT,
    MV_TPM_IOCTL_IGMP_SET_PORT_FRWD_MODE,
    MV_TPM_IOCTL_IGMP_GET_PORT_FRWD_MODE,
    MV_TPM_IOCTL_PRINT_ETHER_PORTS,
    MV_TPM_IOCTL_PRINT_TX_MODULES,
    MV_TPM_IOCTL_PRINT_GMAC_CONFIG,
    MV_TPM_IOCTL_PRINT_GMAC_FUNC,
    MV_TPM_IOCTL_PRINT_EXT_PORT_MAP,        /*not used anymore - can be reused*/
    MV_TPM_IOCTL_PRINT_IGMP,
    MV_TPM_IOCTL_PRINT_MISC,
    MV_TPM_IOCTL_PRINT_OWNERS,
    MV_TPM_IOCTL_PRINT_API_GROUP,           /*not used anymore - can be reused*/
    MV_TPM_IOCTL_PRINT_VLAN_TYPE,
    MV_TPM_IOCTL_PRINT_VALID_API_SECTIONS,
    MV_TPM_IOCTL_PRINT_FULL_API_SECTIONS,
    MV_TPM_IOCTL_PRINT_MOD_SHADOW_RANGE,    /*not used anymore - can be reused*/
    MV_TPM_IOCTL_PRINT_PNC_SHADOW_RANGE,
    MV_TPM_IOCTL_PRINT_VALID_PNC_RANGES,
    MV_TPM_IOCTL_PRINT_INIT_TABLES,

    MV_TPM_IOCTL_PRINT_MOD2_TMP_PATTERN,
    MV_TPM_IOCTL_PRINT_MOD2_JUMP_RANGE,     /*not used anymore - can be reused*/
    MV_TPM_IOCTL_PRINT_MOD2_JUMP_ALL,
    MV_TPM_IOCTL_PRINT_MOD2_MAIN_RANGE,     /*not used anymore - can be reused*/
    MV_TPM_IOCTL_PRINT_MOD2_MAIN_ALL,
    MV_TPM_IOCTL_PRINT_MOD2_CFG,
    MV_TPM_IOCTL_PRINT_MOD2_RULE,

    MV_TPM_IOCTL_TRACE_STATUS,
    MV_TPM_IOCTL_TRACE_SET,
    MV_TPM_IOCTL_TRACE_MODULE_SET,

    MV_TPM_IOCTL_RESERVED_1,
    MV_TPM_IOCTL_RESERVED_2,

    MV_TPM_IOCTL_SW_PHY_SET_AUTONEG_MODE,
    MV_TPM_IOCTL_SW_PHY_GET_AUTONEG_MODE,
    MV_TPM_IOCTL_SW_PHY_RESTART_AUTONEG,
    MV_TPM_IOCTL_SW_PHY_SET_PORT_STATE,
    MV_TPM_IOCTL_SW_PHY_GET_PORT_STATE,
    MV_TPM_IOCTL_SW_PHY_GET_LINK_STATUS,
    MV_TPM_IOCTL_SW_PHY_SET_PORT_FLOW_CONTROL,
    MV_TPM_IOCTL_SW_PHY_GET_PORT_FLOW_CONTROL,
    MV_TPM_IOCTL_SW_PHY_SET_PORT_SPEED,
    MV_TPM_IOCTL_SW_PHY_GET_PORT_SPEED,
    MV_TPM_IOCTL_SW_PORT_VLAN_EGRESS_MODE,
    MV_TPM_IOCTL_SW_PORT_SET_DEFAULT_VLAN,
    MV_TPM_IOCTL_SW_PORT_GET_DEFAULT_VLAN,
    MV_TPM_IOCTL_SW_PORT_SET_DEFAULT_PRIORITY,
    MV_TPM_IOCTL_SW_PORT_GET_DEFAULT_PRIORITY,
    MV_TPM_IOCTL_SW_PORT_CLEAR_VID,
    MV_TPM_IOCTL_SW_PHY_SET_PORT_LOOPBACK,
    MV_TPM_IOCTL_SW_PHY_GET_PORT_LOOPBACK,

    MV_TPM_IOCTL_ALARM_GET_ETH_PORT,
    MV_TPM_IOCTL_SW_PHY_CONVERT_PORT_INDEX,
    MV_TPM_IOCTL_ADD_LOOP_DETECT_CHNL,
    MV_TPM_IOCTL_DEL_LOOP_DETECT_CHNL,
    MV_TPM_IOCTL_ADD_OAM_LOOPBACK_CHNL,
    MV_TPM_IOCTL_DEL_OAM_LOOPBACK_CHNL,
    MV_TPM_IOCTL_SW_PHY_SET_PORT_DUPLEX_MODE,
    MV_TPM_IOCTL_SW_SET_MAC_AGE_TIME,
    MV_TPM_IOCTL_SW_GET_MAC_AGE_TIME,
    MV_TPM_IOCTL_SW_SET_MAC_LEARN,
    MV_TPM_IOCTL_SW_GET_PORT_FLOOD,
    MV_TPM_IOCTL_UNI_2_SW_PORT,

    MV_TPM_IOCTL_RESERVED_3,
    MV_TPM_IOCTL_RESERVED_4,
    MV_TPM_IOCTL_RESERVED_5,
    MV_TPM_IOCTL_RESERVED_6,

    MV_TPM_IOCTL_SW_PHY_GET_DUPLEX_STATUS,
    MV_TPM_IOCTL_SW_PHY_GET_SPEED_MODE,
    MV_TPM_IOCTL_SW_CLEAR_DYNAMIC_MAC,
    MV_TPM_IOCTL_SW_SET_MIRROR,
    MV_TPM_IOCTL_SW_GET_MIRROR,
    MV_TPM_IOCTL_SW_GET_MAC_LEARN,
    MV_TPM_IOCTL_SW_SET_TRUNK_PORT,
    MV_TPM_IOCTL_SW_SET_TRUNK_MASK,
    MV_TPM_IOCTL_SW_PHY_GET_PORT_DUPLEX_MODE,
    MV_TPM_IOCTL_SET_MTU_SIZE,
    MV_TPM_IOCTL_GET_MTU_SIZE,
    MV_TPM_IOCTL_GET_PM_COUNTERS,
    MV_TPM_IOCTL_CLEAR_PM_COUNTERS,
    MV_TPM_IOCTL_SW_SET_ISOLATE_PORT_VECTOR,
    MV_TPM_IOCTL_SW_GET_UNI_EGR_RATE_LIMIT,
    MV_TPM_IOCTL_SW_GET_UNI_INGR_POLICE_RATE,

    MV_TPM_IOCTL_SET_MOD_RULE,
    MV_TPM_IOCTL_DEL_MOD_RULE,
    MV_TPM_IOCTL_GET_MOD_RULE,
    MV_TPM_IOCTL_INV_MOD_RULES,

    MV_TPM_IOCTL_PRINT_RX_MODULES,
    MV_TPM_IOCTL_SW_PORT_ADD_ALL_VID,
    MV_TPM_IOCTL_SW_GET_ISOLATE_PORT_VECTOR,
    MV_TPM_IOCTL_SW_PHY_GET_PORT_FC_STATE,
    MV_TPM_IOCTL_SW_ADD_VID_GROUP,
    MV_TPM_IOCTL_SW_DEL_VID_GROUP,
    MV_TPM_IOCTL_IGMP_SET_CPU_RX_Q,
    MV_TPM_IOCTL_IGMP_GET_CPU_RX_Q,

    MV_TPM_IOCTL_ADD_CPU_WAN_LPBK,
    MV_TPM_IOCTL_DEL_CPU_WAN_LPBK,

    MV_TPM_IOCTL_GET_LU_ENTRIES,
    MV_TPM_IOCTL_GET_ALL_HIT_COUNTERS,
    MV_TPM_IOCTL_SET_LU_COUNT_MASK,
    MV_TPM_IOCTL_GET_HIT_COUNT,
    MV_TPM_IOCTL_SET_LU_THESHOLD,
    MV_TPM_IOCTL_RESET_COUNT_GROUP,

    MV_TPM_IOCTL_ADD_IPV6_NH_ACL_RULE,
    MV_TPM_IOCTL_DEL_IPV6_NH_ACL_RULE,
    MV_TPM_IOCTL_ADD_IPV6_GEN_ACL_RULE,
    MV_TPM_IOCTL_DEL_IPV6_GEN_ACL_RULE,
    MV_TPM_IOCTL_ADD_IPV6_DIP_ACL_RULE,
    MV_TPM_IOCTL_DEL_IPV6_DIP_ACL_RULE,
    MV_TPM_IOCTL_ADD_IPV6_L4_PORTS_ACL_RULE,
    MV_TPM_IOCTL_DEL_IPV6_L4_PORTS_ACL_RULE,

    MV_TPM_IOCTL_SET_MC_VID_PORT_VIDS,
    MV_TPM_IOCTL_SET_MTU_ADMIN,
    MV_TPM_IOCTL_SET_MTU,
    MV_TPM_IOCTL_SET_PPPOE_MTU,

    MV_TPM_IOCTL_SET_IGMP_PROXY_SA_MAC,
    MV_TPM_IOCTL_GET_IGMP_PROXY_SA_MAC,
    MV_TPM_IOCTL_ADD_IPv6_MC_STREAM,
    MV_TPM_IOCTL_MOD_IPv6_MC_STREAM,
    MV_TPM_IOCTL_DEL_IPv6_MC_STREAM,

    MV_TPM_IOCTL_ADD_IPV6_GEN_5T_RULE,
    MV_TPM_IOCTL_DEL_IPV6_GEN_5T_RULE,
    MV_TPM_IOCTL_ADD_IPV6_DIP_5T_RULE,
    MV_TPM_IOCTL_DEL_IPV6_DIP_5T_RULE,
    MV_TPM_IOCTL_ADD_IPV6_L4_PORTS_5T_RULE,
    MV_TPM_IOCTL_DEL_IPV6_L4_PORTS_5T_RULE,

    MV_TPM_IOCTL_ADD_CTC_CM_ACL_RULE,
    MV_TPM_IOCTL_DEL_CTC_CM_ACL_RULE,
    MV_TPM_IOCTL_ADD_CTC_CM_IPV6_ACL_RULE,
    MV_TPM_IOCTL_SET_CTC_CM_IPV6_PARSE_WIN,
    MV_TPM_IOCTL_ADD_MAC_LEARN_ACL_RULE,
    MV_TPM_IOCTL_DEL_MAC_LEARN_ACL_RULE,
    MV_TPM_IOCTL_SET_MAC_LEARN_DEFAULT_ACTION,
    MV_TPM_IOCTL_TM_SET_GMAC0_INGR_RATE_LIMIT,
    MV_TPM_IOCTL_GET_MAC_LEARN_ENTRY_NUM,
    MV_TPM_IOCTL_ADD_DS_LOAD_BALANCE_RULE,
    MV_TPM_IOCTL_DEL_DS_LOAD_BALANCE_RULE,
    MV_TPM_IOCTL_ADD_IPv4_MC_STREAM_SET_QUEUE,
    MV_TPM_IOCTL_ADD_IPv6_MC_STREAM_SET_QUEUE,
    MV_TPM_IOCTL_SW_PORT_ADD_VID_SET_EGRESS_MODE,
    MV_TPM_IOCTL_SW_SET_STATIC_MULTICAST_MAC,

} tpm_ioctl_cmd_type_t;

/* Typedefs
------------------------------------------------------------------------------*/

/* Print Section
** ==============
** Function list:
** 1.  tpm_print_etherports
** 2.  tpm_print_tx_modules
** 3.  tpm_print_gmac_config
** 4.  tpm_print_gmac_func
** 5.  tpm_print_ext_port_map
** 6.  tpm_print_igmp
** 7.  tpm_print_misc
** 8.  tpm_print_owners
** 9.
** 10. tpm_print_vlan_etype
** 11. tpm_print_valid_api_sections
** 12. tpm_print_full_api_section
** 13. tpm_print_mod_shadow_range
** 14. tpm_print_pnc_shadow_range
** 15. tpm_print_valid_pnc_ranges
** 16. tpm_print_init_tables
** 17. tpm_mod2_print_tmp_pattern
** 18. tpm_mod2_print_jump_range
** 19. tpm_mod2_print_jump_all
** 20. tpm_mod2_print_main_range
** 21. tpm_mod2_print_main_all
** 22. tpm_mod2_print_config
*/
typedef struct
{
    uint32_t           print_cmd;
    tpm_api_sections_t api_section;
    tpm_gmacs_enum_t   gmac;
    uint32_t           valid;
    uint32_t           start;
    uint32_t           end;
    uint32_t           dir;
    uint32_t           entry;
    uint32_t           num;
} tpm_ioctl_print_t;

/* Trace Section
** ==============
** Function list:
** 1.  tpm_trace_status_print
** 2.  tpm_trace_set
** 3.  tpm_trace_module_set
*/

typedef struct
{
    uint32_t trace_cmd;
    uint32_t level;
    uint32_t module;
    uint32_t flag;
} tpm_ioctl_trace_t;

/* Admin Section
** ==============
** Function list:
** 1. tpm_create_ownerid
** 2. tpm_request_api_ownership
** 3. tpm_get_api_ownership
** 4. tpm_erase_section
** 5. tpm_get_section_free_size
*/

typedef struct
{
    uint32_t                  amdin_cmd;
    uint32_t                  owner_id;
    tpm_api_type_t            api_type;
    tpm_api_ownership_error_t api_ownership_error;
    int32_t                   section_size;
    uint8_t                   section_dir;
    uint8_t                   dummy1;
    uint16_t                  dummy2;
} tpm_ioctl_admin_t;

/* ACL Rule Add Section
** ====================
** Function list:
** 1. tpm_add_l2_rule
** 2. tpm_add_l3_type_rule
** 3. tpm_add_ipv4_rule
** 4. tpm_add_ipv6_gen_rule
** 5. tpm_add_ipv6_nh_rule
** 6. tpm_add_ipv6_dip_rule
** 7. tpm_add_ipv6_l4_ports_rule
** 8. tpm_mod_entry_set
** 9. tpm_add_ipv6_gen_5t_rule
** 10. tpm_add_ipv6_dip_5t_rule
** 11. tpm_add_ipv6_l4_ports_5t_rule
** 12. tpm_add_ctc_cm_acl_rule
*/

/* L2 */
typedef struct
{
    tpm_l2_acl_key_t   l2_key;
    tpm_pkt_frwd_t     pkt_frwd;
    tpm_pkt_mod_t      pkt_mod;
    tpm_rule_action_t  rule_action;
    tpm_parse_flags_t  parse_flags_bm;
    tpm_pkt_mod_bm_t   pkt_mod_bm;
    tpm_unknown_mac_conf_t mac_conf;/*Just for PnC MAC learn*/
} l2_acl_rule_t;

/* L3 */
typedef struct
{
    tpm_l3_type_key_t   l3_key;
    tpm_pkt_frwd_t      pkt_frwd;
    tpm_rule_action_t   rule_action;
    tpm_parse_flags_t   parse_flags_bm;
} l3_acl_rule_t;

/* IPv4 */
typedef struct
{
    tpm_parse_flags_t   parse_flags_bm;
    tpm_ipv4_acl_key_t  ipv4_key;
    tpm_pkt_frwd_t      pkt_frwd;
    tpm_pkt_mod_t       pkt_mod;
    tpm_pkt_mod_bm_t    pkt_mod_bm;
    tpm_rule_action_t   rule_action;
} ipv4_acl_rule_t;

/* IPv6 */
typedef struct
{
    tpm_parse_flags_t   parse_flags_bm;
    tpm_ipv6_gen_acl_key_t ipv6_gen_key;
    tpm_pkt_frwd_t      pkt_frwd;
    tpm_pkt_mod_t       pkt_mod;
    tpm_pkt_mod_bm_t    pkt_mod_bm;
    tpm_rule_action_t   rule_action;
} ipv6_gen_acl_rule_t;

typedef struct
{
	tpm_nh_iter_t            nh_iter;
    uint32_t                 nh;
    tpm_pkt_frwd_t           pkt_frwd;
    tpm_rule_action_t        rule_action;
} ipv6_nh_acl_rule_t;

typedef struct
{
    tpm_parse_flags_t        parse_flags_bm;
    tpm_ipv6_addr_key_t      ipv6_dip_key;
    tpm_pkt_frwd_t           pkt_frwd;
    tpm_pkt_mod_t            pkt_mod;
    tpm_pkt_mod_bm_t         pkt_mod_bm;
    tpm_rule_action_t        rule_action;
} ipv6_dip_acl_rule_t;

typedef struct
{
    tpm_parse_flags_t        parse_flags_bm;
    tpm_l4_ports_key_t       l4_key;
    tpm_pkt_frwd_t           pkt_frwd;
    tpm_pkt_mod_t            pkt_mod;
    tpm_pkt_mod_bm_t         pkt_mod_bm;
    tpm_rule_action_t        rule_action;
} ipv6_l4_ports_acl_rule_t;

/* IPv6 5 tuple */
typedef struct
{
    tpm_parse_flags_t      parse_flags_bm;
    tpm_l4_ports_key_t     l4_key;
    tpm_ipv6_gen_acl_key_t ipv6_gen_key;
    tpm_pkt_frwd_t         pkt_frwd;
    tpm_pkt_mod_t          pkt_mod;
    tpm_pkt_mod_bm_t       pkt_mod_bm;
    tpm_rule_action_t      rule_action;
} ipv6_gen_5t_rule_t;

typedef struct
{
    tpm_parse_flags_t        parse_flags_bm;
    tpm_l4_ports_key_t       l4_key;
    tpm_ipv6_gen_acl_key_t   ipv6_gen_key;
    tpm_ipv6_addr_key_t      ipv6_dip_key;
    tpm_pkt_frwd_t           pkt_frwd;
    tpm_pkt_mod_t            pkt_mod;
    tpm_pkt_mod_bm_t         pkt_mod_bm;
    tpm_rule_action_t        rule_action;
} ipv6_dip_5t_rule_t;

typedef struct
{
    tpm_parse_flags_t        parse_flags_bm;
    tpm_l4_ports_key_t       l4_key;
    tpm_pkt_frwd_t           pkt_frwd;
    tpm_pkt_mod_t            pkt_mod;
    tpm_pkt_mod_bm_t         pkt_mod_bm;
    tpm_rule_action_t        rule_action;
} ipv6_l4_ports_5t_rule_t;

/* CTC CnM */
typedef struct
{
    uint32_t           precedence;
    uint32_t           p_bits;
    tpm_parse_fields_t l2_parse_rule_bm;
    tpm_parse_fields_t ipv4_parse_rule_bm;
    tpm_parse_fields_t ipv6_parse_rule_bm;
    tpm_l2_acl_key_t   l2_key;
    tpm_ipv4_acl_key_t ipv4_key;
    tpm_ipv6_acl_key_t ipv6_key;
    tpm_pkt_frwd_t     pkt_frwd;
    tpm_pkt_action_t   pkt_act;
} ctc_cm_acl_rule_t;

/* DS load balance */
typedef struct
{
    tpm_l2_acl_key_t   l2_key;
    tpm_parse_flags_t  parse_flags_bm;
    tpm_ds_load_balance_tgrt_t tgrt;
} ds_load_balance_acl_rule_t;

/* Pkt modification */
typedef struct
{
    tpm_trg_port_type_t  trg_port;
    tpm_pkt_mod_bm_t     mod_bm;
    tpm_pkt_mod_int_bm_t int_bm;
    tpm_pkt_mod_t        mod_data;
} pkt_mod_rule_t;

typedef struct
{
    uint32_t             add_acl_cmd;
    uint32_t             owner_id;
    tpm_src_port_type_t  src_port;
	tpm_dir_t            src_dir;
    uint32_t             rule_num;
    uint32_t             rule_idx;
    tpm_parse_fields_t   parse_rule_bm;

    union
    {
      l2_acl_rule_t            l2_acl_rule;
      l3_acl_rule_t            l3_acl_rule;
      ipv4_acl_rule_t          ipv4_acl_rule;
      ipv6_gen_acl_rule_t      ipv6_gen_acl_rule;
      ipv6_nh_acl_rule_t       ipv6_nh_acl_rule;
      ipv6_dip_acl_rule_t      ipv6_dip_acl_rule;
      ipv6_l4_ports_acl_rule_t ipv6_l4_ports_acl_rule;
      ipv6_gen_5t_rule_t       ipv6_gen_5t_rule;
      ipv6_dip_5t_rule_t       ipv6_dip_5t_rule;
      ipv6_l4_ports_5t_rule_t  ipv6_l4_ports_5t_rule;
      ctc_cm_acl_rule_t        ctc_cm_acl_rule;
      pkt_mod_rule_t           mod_rule;
      ds_load_balance_acl_rule_t ds_load_balance_acl_rule;
    };
} tpm_ioctl_add_acl_rule_t;

/* ACL Rule Delete Section
** =======================
** Function list:
** 1. tpm_del_l2_rule
** 2. tpm_del_l3_type_rule
** 3. tpm_del_ipv4_rule
** 4. tpm_del_ipv6_gen_rule
** 5. tpm_del_ipv6_nh_rule
** 6. tpm_del_ipv6_dip_rule
** 7. tpm_del_ipv6_l4_ports_rule
** 8. tpm_mod_entry_del
** 9. tpm_mod_mac_inv
** 10. tpm_del_ipv6_gen_5t_rule
** 11. tpm_del_ipv6_dip_5t_rule
** 12. tpm_del_ipv6_l4_ports_5t_rule
** 13. tpm_del_ctc_cm_acl_rule
*/

typedef struct
{
    uint32_t             del_acl_cmd;
    uint32_t             owner_id;
    tpm_src_port_type_t  src_port;
    tpm_trg_port_type_t  trg_port;
    uint32_t             rule_idx;
    uint32_t           	 precedence;
    tpm_parse_fields_t   parse_rule_bm;
    tpm_l2_acl_key_t     l2_key;/*for MAC learn*/
} tpm_ioctl_del_acl_rule_t;

/* Modification Rule Get Section
** =======================
** Function list:
** 1. tpm_mod_entry_get
*/
typedef struct
{
    uint32_t            get_mod_cmd;
    tpm_trg_port_type_t trg_port;
    uint32_t            rule_idx;
    uint16_t            pnc_ref;
    uint16_t            valid_num;
    tpm_mod_rule_t      rule[TPM_MAX_MOD_RULE_NUM];
} tpm_ioctl_get_mod_rule_t;

/* ACL Ctrl Rule Section
** =====================
** Function list:
** 1. tpm_get_next_valid_rule
*/

typedef struct
{
    uint32_t         ctrl_acl_cmd;
    uint32_t         owner_id;
    int32_t          current_index;
    uint32_t         next_index;
    uint32_t         rule_idx;
    tpm_api_type_t   rule_type;
    uint8_t          direction;
    uint8_t          dummy1;
    uint16_t         dummy2;
    tpm_rule_entry_t tpm_rule;
    uint32_t         entry_count;
} tpm_ioctl_ctrl_acl_rule_t;

/* MC Rule Section
** ===============
** Function list:
** 1. tpm_add_ipv4_mc_stream
** 2. tpm_updt_ipv4_mc_stream
** 3. tpm_del_ipv4_mc_stream
** 4. tpm_add_ipv6_mc_stream
** 5. tpm_updt_ipv6_mc_stream
** 6. tpm_del_ipv6_mc_stream
*/

/* IPv4 */
typedef struct
{
    uint8_t  ipv4_src_add[4];
    uint8_t  ipv4_dst_add[4];
    uint8_t  ignore_ipv4_src;
    uint8_t  dummy1;
    uint16_t dummy2;
} ipv4_mc_rule_t;

/* IPv6 */
typedef struct
{
    uint32_t vid;
    uint8_t  ipv6_src_add[16];
    uint8_t  ipv6_dst_add[16];
    uint8_t  ignore_ipv6_src;
    uint8_t  dummy1;
    uint16_t dummy2;
} ipv6_mc_rule_t;

typedef struct
{
    uint32_t             mc_cmd;
    uint32_t             owner_id;
    uint32_t             stream_num;
    tpm_mc_igmp_mode_t   igmp_mode;
    uint8_t              mc_stream_pppoe;
    uint16_t             vid;
    uint16_t             dest_queue;
    tpm_trg_port_type_t  dest_port_bm;

    union
    {
      ipv4_mc_rule_t  ipv4_mc;
      ipv6_mc_rule_t  ipv6_mc;
    };
} tpm_ioctl_mc_rule_t;

/* Mng Rule Section
** ================
** Function list:
** 1. tpm_omci_add_channel
** 2. tpm_omci_del_channel
** 3. tpm_omci_get_channel
** 4. tpm_oam_epon_add_channel
** 5. tpm_oam_epon_del_channel
** 6. tpm_oam_epon_get_channel
*/

typedef struct
{
    uint32_t              owner_id;
    uint32_t              is_valid;
    uint32_t              cpu_rx_queue;
    tpm_trg_port_type_t   tcont_num;
    uint32_t              cpu_tx_queue;
    tpm_gem_port_key_t    gem_port;
    uint16_t              dummy;
} tpm_ioctl_omci_ch_t;

typedef struct
{
    uint32_t              owner_id;
    uint32_t              is_valid;
    uint32_t              cpu_rx_queue;
    tpm_trg_port_type_t   llid_num;
} tpm_ioctl_oam_ch_t;

typedef struct
{
    uint32_t              mng_cmd;
    tpm_ioctl_omci_ch_t   tpm_ioctl_omci_ch;
    tpm_ioctl_oam_ch_t    tpm_ioctl_oam_ch;
    uint32_t              loopback_detect_ety;
} tpm_ioctl_mng_ch_t;

/* Switch Section
** ==============
** Function list:
** 1. tpm_sw_add_static_mac
** 2. tpm_sw_del_static_mac
** 3. tpm_sw_set_port_max_macs
** 4. tpm_sw_set_port_flooding
**
** 5. tpm_sw_set_port_tagged
** 6. tpm_sw_set_port_untagged
** 7. tpm_sw_port_add_vid
** 8. tpm_sw_port_del_vid
** 9. tpm_sw_port_set_vid_filter
**
** 10.tpm_sw_set_uni_sched
** 11.tpm_sw_set_uni_q_weight
** 12.tpm_sw_set_uni_ingr_police_rate
** 13.tpm_sw_set_uni_tc_ingr_police_rate
** 14.tpm_sw_set_uni_egr_rate_limit
*/

/* Switch MAC security */
typedef struct
{
    uint32_t              sw_security_cmd;
    uint32_t              owner_id;
    tpm_src_port_type_t   port;
    uint8_t               static_mac[6];
    uint8_t               mac_per_port;
    uint8_t               allow_flood;
    bool                  enable_mac_learn;
    tpm_flood_type_t      flood_mode;
    uint32_t              mac_age_time;
    tpm_sw_mirror_t       port_mirror;
    tpm_mru_type_t        mtu_type;
    uint32_t              mtu_size;
    uint32_t              port_vector;
    tpm_sw_trunk_t        trunk;
} tpm_ioctl_sw_mac_security_t;

/* Switch Vlan filtering */
typedef struct
{
    uint32_t              sw_vlan_cmd;
    uint32_t              owner_id;
    tpm_src_port_type_t   port;
    uint16_t              vid;
    uint8_t               pri;
    uint8_t               vid_filter;
    uint8_t               allow_tagged;
    uint8_t               allow_untagged;
    uint8_t               egress_mode;
    uint8_t               dummy;
    uint16_t              min_vid;
    uint16_t              max_vid;
} tpm_ioctl_sw_vlan_filter_t;

/* Switch Traffic management */
typedef struct
{
    uint32_t            sw_tm_cmd;
    uint32_t            owner_id;
    tpm_src_port_type_t uni_port;
    tpm_sw_sched_type_t sw_sched_mode;
    uint8_t             queue_id;
    uint8_t             weight;
    uint16_t            dummy;
    uint32_t            limit_mode;
    uint32_t            cir;
    uint32_t            cbs;
    uint32_t            ebs;
    uint32_t            tc;
    uint32_t            rate_limit_val;
} tpm_ioctl_sw_tm_t;

/* Switch PHY port management */
typedef struct
{
    uint32_t                sw_phy_cmd;
    uint32_t                owner_id;
    tpm_src_port_type_t     port;
    tpm_phy_speed_t         port_speed;
    tpm_phy_loopback_mode_t port_loopback_mode;
    tpm_src_port_type_t     extern_port_id;
    uint32_t                switch_port_id;
    tpm_autoneg_mode_t      port_autoneg_mode;
    bool                    phy_port_state;
    bool                    port_autoneg_state;
    bool                    port_link_status;
    bool                    port_pause_state;
    bool                    port_duplex_enable;
    bool                    port_loopback_state;
    uint16_t                dummy;
} tpm_ioctl_sw_phy_t;

/* Packet Processor Section
** ========================
** Function list:
** 1. tpm_tm_set_wan_egr_queue_sched
** 2. tpm_tm_set_wan_sched_egr_rate_lim
** 3. tpm_tm_set_wan_queue_egr_rate_lim
** 4. tpm_tm_set_wan_ingr_rate_lim
** 5. tpm_tm_set_wan_q_ingr_rate_lim
*/

/* Packet Processor Traffic management */
typedef struct
{
    uint32_t            pp_tm_cmd;
    uint32_t            owner_id;
    tpm_trg_port_type_t sched_ent;
    tpm_trg_port_type_t uni_port;
    tpm_pp_sched_type_t pp_sched_mode;
    uint32_t            queue_id;
    uint32_t            wrr_weight;
    uint32_t            rate_limit_val;
    uint32_t            bucket_size;
} tpm_ioctl_tm_tm_t;

/* IGMP Section
** =============
** Function list:
** 1. tpm_proc_enable_igmp
** 2. tpm_proc_edisable_igmp
*/

/* Packet Processor Traffic management */
typedef struct
{
    uint32_t             igmp_cmd;
    uint32_t             owner_id;
    tpm_src_port_type_t  src_port;
    tpm_igmp_frwd_mode_t frwd_mode;
    uint32_t             cpu_queue;
    uint8_t              sa_mac[6];
} tpm_ioctl_igmp_t;


/* MIB Reset Section
** =============
** Function list:
** 1. tpm_proc_enable_igmp
*/

/* MIB reset */
typedef struct
{
    uint32_t               owner_id;
    tpm_reset_level_enum_t reset_level;
} tpm_ioctl_mib_reset_t;

/* set active wan port */
typedef struct
{
    uint32_t               owner_id;
    tpm_gmacs_enum_t       active_wan;
} tpm_ioctl_set_active_wan_t;

/* set gmac loopback */
typedef struct
{
    uint32_t               owner_id;
    tpm_gmacs_enum_t       gmac;
    uint8_t                enable;
} tpm_ioctl_set_gmac_loopback_t;

/* hot swap profile */
typedef struct
{
    uint32_t               owner_id;
    tpm_eth_complex_profile_t       profile_id;
} tpm_ioctl_hot_swap_profile_t;

/* set port hwf admin */
typedef struct
{
    uint32_t               owner_id;
    tpm_gmacs_enum_t       port;
    uint8_t                txp;
    uint8_t                enable;
} tpm_ioctl_set_port_hwf_admin_t;

/* ALARM Section */
typedef struct
{
    uint32_t            alarm_cmd;
    uint32_t            owner_id;
    uint32_t            alarm_type;
    uint8_t             port_bitmap[2][MAX_ETH_PORT_ALARM];
} tpm_ioctl_alarm_t;


/* Management structure for Ethernet counters 1 */
typedef struct
{
  tpm_src_port_type_t  port;
  uint32_t             owner_id;
  tpm_swport_pm_1_t    tpm_swport_pm_1;

} tpm_ioctl_swport_pm_1_t;


/* Management structure for Ethernet counters 3 */
typedef struct
{
  tpm_src_port_type_t  port;
  uint32_t             owner_id;
  tpm_swport_pm_3_all_t tpm_swport_pm_3;

} tpm_ioctl_swport_pm_3_t;


typedef struct
{
    uint32_t             owner_id;
    tpm_trg_port_type_t  tgt_port;
    uint8_t              tgt_queue;
    uint8_t              dummy;
    uint16_t             gem_port;
    uint8_t              buf[MAX_FRAME_SIZE];
    uint32_t             len;
} tpm_ioctl_tx_igmp_t;

typedef struct
{
    uint32_t             owner_id;
    uint8_t              dummy[2];
    uint16_t             src_llid;
    tpm_src_port_type_t  src_port;
    uint8_t              buf[MAX_FRAME_SIZE];
    uint32_t             len;
} tpm_ioctl_rx_igmp_t;


typedef struct
{
    uint32_t             cpu_lpbk_cmd;
    uint32_t             owner_id;
    tpm_pkt_frwd_t       pkt_frwd;
    uint32_t             mod_idx;
} tpm_ioctl_cpu_lpbk_t;

typedef struct
{
    uint32_t             owner_id;
} tpm_ioctl_flush_vtu_t;
typedef struct
{
    uint32_t             owner_id;
    tpm_flush_atu_type_t flush_type;
    uint16_t             db_num;
} tpm_ioctl_flush_atu_t;

typedef struct
{
    uint32_t              age_count_cmd;
    uint32_t              owner_id;
    tpm_api_type_t        api_type;
    uint32_t              lu_thresh_pkts;
    uint32_t              rule_idx;
    uint32_t              lu_rule_mask;
    uint32_t              hit_count;
    uint16_t              lu_num;
    uint16_t              valid_num;
    uint16_t              unrelated_num;
    uint8_t               lu_reset;
    uint8_t               hit_reset;
    tpm_api_entry_count_t count_array[TPM_MAX_LU_ENTRY_NUM];
} tpm_ioctl_age_count_t;

typedef struct
{
    uint32_t              age_count_cmd;
    uint32_t              owner_id;
    tpm_api_type_t        api_type;
    uint32_t              high_thresh_pkts;
    uint16_t              valid_counters;
    uint8_t               counter_reset;
    uint8_t               dummy;
    tpm_api_entry_count_t count_array[TPM_MAX_PNC_COUNTER_NUM];
} tpm_ioctl_pnc_hit_cnt_t;

typedef struct
{
    uint32_t                  mc_vid_cmd;
    uint32_t                  owner_id;
    uint32_t                  mc_vid;
    tpm_mc_vid_port_vid_set_t port_vid_set;
} tpm_ioctl_mc_vid_t;

typedef struct
{
    uint32_t                  mtu_setting_cmd;
    uint32_t                  mtu;
    uint32_t                  pppoe_mtu;
    tpm_mtu_ethertype_t       ethertype;
    uint32_t                  direction;
    tpm_init_mtu_setting_enable_t  enable;
} tpm_ioctl_mtu_t;

/* TPM check */
typedef struct
{
    uint32_t               owner_id;
    tpm_self_check_level_enum_t check_level;
} tpm_ioctl_tpm_check_t;

/* ipv6 parse window */
typedef struct
{
    uint32_t               owner_id;
    tpm_ctc_cm_ipv6_parse_win_t ipv6_parse_window;
} tpm_ioctl_ipv6_parse_window_t;

/* this union aggregates all ioctl commands supported by SFS_TO_IOCTL mode */
typedef union  tpm_cmd_data
{
    tpm_ioctl_add_acl_rule_t    tpm_add_acl_rule;
    tpm_ioctl_del_acl_rule_t    tpm_del_acl_rule;
    tpm_ioctl_ctrl_acl_rule_t   tpm_ctrl_acl_rule;
    tpm_ioctl_mc_rule_t         tpm_mc_rule;
    tpm_ioctl_igmp_t            tpm_igmp;
    tpm_ioctl_cpu_lpbk_t        tpm_ioctl_cpu_lpbk;
    tpm_ioctl_mib_reset_t       tpm_mib_reset_param;
    tpm_ioctl_age_count_t       tpm_ioctl_age_count;
    tpm_ioctl_pnc_hit_cnt_t     tpm_ioctl_pnc_hit_cnt;
    tpm_ioctl_mtu_t		        tpm_ioctl_mtu_set;
    tpm_ioctl_sw_mac_security_t	tpm_ioctl_sw_mac_set;
    tpm_ioctl_tm_tm_t		    tpm_ioctl_tm_tm;
    tpm_ioctl_mng_ch_t		    tpm_mng_channel;
    tpm_ioctl_get_mod_rule_t	tpm_ioctl_get_mod;
    tpm_ioctl_tpm_check_t       tpm_check_param;
    tpm_ioctl_flush_vtu_t       tpm_ioctl_flush_vtu;
    tpm_ioctl_flush_atu_t       tpm_ioctl_flush_atu;
    tpm_ioctl_ipv6_parse_window_t   tpm_ipv6_parse_window;
    tpm_ioctl_set_active_wan_t      tpm_set_active_wan_param;
    tpm_ioctl_hot_swap_profile_t    tpm_hot_swap_profile_param;
    tpm_ioctl_set_port_hwf_admin_t  tpm_set_port_hwf_admin_param;
} tpm_cmd_data_t;

/* this structure is used for passing sysfs request from kernel to userspace
   to be ioctl (SFS_TO_IOCTL mode)  */
typedef struct
{
    unsigned int    cmd;            /* the ioctl command            */
    tpm_cmd_data_t  tpm_cmd_data;   /* the ioctl additional data    */
} tpm_ioctl_mng_t;


/* Global variables
------------------------------------------------------------------------------*/

/* Global functions
------------------------------------------------------------------------------*/

/* Global variables
------------------------------------------------------------------------------*/

/* Global functions
------------------------------------------------------------------------------*/
int32_t tpm_module_mng_if_create(void);
int32_t tpm_module_mng_if_release(void);

/* Macros
------------------------------------------------------------------------------*/

#endif /* _TPM_MNG_IF_H_ */
