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

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

/* Validate that the given system mode is supported for the given device.
 * This function returns BCM_ERR_OK if the system mode is valid or a different error code otherwise. */
bcmos_errno bcmuser_system_mode_validate(bcmolt_devid device, bcmolt_system_mode system_mode);

/* Read file from a file system into a buffer. */
int bcmuser_image_read(
    bcmolt_devid device,
    bcmolt_device_image_type image_type,
    uint32_t offset,
    uint8_t *buf,
    uint32_t buf_size);

/* Turn off the processor of the embedded device. */
bcmos_errno bcmuser_device_off(bcmolt_devid device);

/* Turn on the processor of the embedded device. */
bcmos_errno bcmuser_device_on(bcmolt_devid device);

/* Check whether or not the embedded device processor is running. */
bcmos_errno bcmuser_device_is_running(bcmolt_devid device, bcmos_bool *is_cpu_on);

/* Prepare the PCIe bus for communication with the embedded devices */
bcmos_errno bcmuser_pcie_prepare(void);

/* Prepare the PCIe channel for communication with the embedded device.
 * For example, this function may re-enumerate the PCI-E bus. */
bcmos_errno bcmuser_pcie_channel_prepare(bcmolt_devid device);

bcmos_errno bcmuser_pcie_channel_prepare_for_kt2(bcmolt_devid device);

/* Remove the PCIe channel for communication with the embedded device.
 * For example, this function may re-enumerate the PCI-E bus. */
bcmos_errno bcmuser_pcie_channel_remove(bcmolt_devid device);

/* Reset the host processor. */
bcmos_errno bcmuser_host_reset(void);

#endif
