/*
<: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 _BCMOLT_HOST_API_H_
#define _BCMOLT_HOST_API_H_

#include <bcmos_system.h>
#include <bcmolt_model_types.h>

#if !defined(__KERNEL__)
#include <bcmtr_debug.h>
#include <bcmtr_interface.h>
#include "bcmolt_api.h"
#include <bcm_common_gpon.h>
#include <bcmolt_host_api_gpon_utils.h>
#endif

#if defined(ENABLE_CLI) && !defined(__KERNEL__)
#include <bcm_api_cli.h>
#include <bcmos_cli.h>
#include <bcmolt_embedded_cli.h>
#include <bcmtr_transport_cli.h>
#include <bcm_api_cli_helpers.h>
#endif

#if !defined(LINUX_USER_SPACE)
#include <bcmolt_dev_ctrl.h>
#endif

#if !defined(LINUX_USER_SPACE)
typedef bcmolt_dev_ctrl_cb_image_read bcmolt_host_image_read_cb;
#endif
typedef bcmos_errno (*bcmolt_host_logger_init_cb)(void);

typedef struct
{
#if !defined(LINUX_USER_SPACE)
    bcmolt_dev_ctrl_params dev_ctrl_params;
#endif
    /* This callback initializes the logger module. If using common/dev_log module, it should be called after OS abstraction layer is initialized, and that's why
     * it is a callback and not directly initialized by the caller. */
    bcmolt_host_logger_init_cb logger_init_cb;
    bcmos_bool run_dev_ctrl;
} bcmolt_host_init_params;

bcmos_errno bcmolt_host_init(bcmolt_host_init_params *params);

#endif

