/* Copyright (c) 2008-2012 Freescale Semiconductor, Inc.
 * All rights reserved.
 *
 * 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 Freescale Semiconductor nor the
 *       names of its contributors may be used to endorse or promote products
 *       derived from this software without specific prior written permission.
 *
 *
 * ALTERNATIVELY, this software may be distributed under the terms of the
 * GNU General Public License ("GPL") as published by the Free Software
 * Foundation, either version 2 of that License or (at your option) any
 * later version.
 *
 * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``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 Freescale Semiconductor 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.
 */

/**************************************************************************//**
 @File          fm_ioctls.h

 @Description   FM Char device ioctls
*//***************************************************************************/
#ifndef __FM_IOCTLS_H
#define __FM_IOCTLS_H


/**************************************************************************//**
 @Group         lnx_ioctl_FM_grp Frame Manager Linux IOCTL API

 @Description   FM Linux ioctls definitions and enums

 @{
*//***************************************************************************/

/**************************************************************************//**
 @Collection    FM IOCTL device ('/dev') definitions
*//***************************************************************************/
#define DEV_FM_NAME                 "fm" /**< Name of the FM chardev */

#define DEV_FM_MINOR_BASE           0
#define DEV_FM_PCD_MINOR_BASE       (DEV_FM_MINOR_BASE + 1)                                 /*/dev/fmx-pcd */
#define DEV_FM_OH_PORTS_MINOR_BASE  (DEV_FM_PCD_MINOR_BASE + 1)                             /*/dev/fmx-port-ohy */
#define DEV_FM_RX_PORTS_MINOR_BASE  (DEV_FM_OH_PORTS_MINOR_BASE + FM_MAX_NUM_OF_OH_PORTS)   /*/dev/fmx-port-rxy */
#define DEV_FM_TX_PORTS_MINOR_BASE  (DEV_FM_RX_PORTS_MINOR_BASE + FM_MAX_NUM_OF_RX_PORTS)   /*/dev/fmx-port-txy */
#define DEV_FM_MAX_MINORS           (DEV_FM_TX_PORTS_MINOR_BASE + FM_MAX_NUM_OF_TX_PORTS)

#define FM_IOC_NUM(n)       (n)
#define FM_PCD_IOC_NUM(n)   (n+20)
#define FM_PORT_IOC_NUM(n)  (n+70)
/* @} */

#define IOC_FM_MAX_NUM_OF_PORTS         64


/**************************************************************************//**
 @Description   Enum for defining port types
                (must match enum e_FmPortType defined in fm_ext.h)
*//***************************************************************************/
typedef enum ioc_fm_port_type {
    e_IOC_FM_PORT_TYPE_OH_OFFLINE_PARSING = 0,  /**< Offline parsing port */
    e_IOC_FM_PORT_TYPE_RX,                      /**< 1G Rx port */
    e_IOC_FM_PORT_TYPE_RX_10G,                  /**< 10G Rx port */
    e_IOC_FM_PORT_TYPE_TX,                      /**< 1G Tx port */
    e_IOC_FM_PORT_TYPE_TX_10G,                  /**< 10G Tx port */
    e_IOC_FM_PORT_TYPE_DUMMY
} ioc_fm_port_type;


/**************************************************************************//**
 @Group         lnx_ioctl_FM_lib_grp FM library

 @Description   FM API functions, definitions and enums
                The FM module is the main driver module and is a mandatory module
                for FM driver users. Before any further module initialization,
                this module must be initialized.
                The FM is a "single-tone" module. It is responsible of the common
                HW modules: FPM, DMA, common QMI, common BMI initializations and
                run-time control routines. This module must be initialized always
                when working with any of the FM modules.
                NOTE - We assumes that the FML will be initialize only by core No. 0!

 @{
*//***************************************************************************/

/**************************************************************************//**
 @Description   FM Exceptions
*//***************************************************************************/
typedef enum ioc_fm_exceptions {
    e_IOC_FM_EX_DMA_BUS_ERROR,              /**< DMA bus error. */
    e_IOC_EX_DMA_READ_ECC,               /**< Read Buffer ECC error (Valid for FM rev < 6)*/
    e_IOC_EX_DMA_SYSTEM_WRITE_ECC,       /**< Write Buffer ECC error on system side (Valid for FM rev < 6)*/
    e_IOC_EX_DMA_FM_WRITE_ECC,           /**< Write Buffer ECC error on FM side (Valid for FM rev < 6)*/
    e_IOC_EX_DMA_SINGLE_PORT_ECC,        /**< Single Port ECC error on FM side (Valid for FM rev > 6)*/
    e_IOC_EX_FPM_STALL_ON_TASKS,         /**< Stall of tasks on FPM */
    e_IOC_EX_FPM_SINGLE_ECC,             /**< Single ECC on FPM. */
    e_IOC_EX_FPM_DOUBLE_ECC,             /**< Double ECC error on FPM ram access */
    e_IOC_EX_QMI_SINGLE_ECC,             /**< Single ECC on QMI. */
    e_IOC_EX_QMI_DOUBLE_ECC,             /**< Double bit ECC occurred on QMI */
    e_IOC_EX_QMI_DEQ_FROM_UNKNOWN_PORTID,/**< Dequeue from unknown port id */
    e_IOC_EX_BMI_LIST_RAM_ECC,           /**< Linked List RAM ECC error */
    e_IOC_EX_BMI_STORAGE_PROFILE_ECC,    /**< Storage Profile ECC Error */
    e_IOC_EX_BMI_STATISTICS_RAM_ECC,     /**< Statistics Count RAM ECC Error Enable */
    e_IOC_EX_BMI_DISPATCH_RAM_ECC,       /**< Dispatch RAM ECC Error Enable */
    e_IOC_EX_IRAM_ECC,                   /**< Double bit ECC occurred on IRAM*/
    e_IOC_EX_MURAM_ECC                   /**< Double bit ECC occurred on MURAM*/
} ioc_fm_exceptions;

/**************************************************************************//**
 @Group         lnx_ioctl_FM_runtime_control_grp FM Runtime Control Unit

 @Description   FM Runtime control unit API functions, definitions and enums.
                The FM driver provides a set of control routines for each module.
                These routines may only be called after the module was fully
                initialized (both configuration and initialization routines were
                called). They are typically used to get information from hardware
                (status, counters/statistics, revision etc.), to modify a current
                state or to force/enable a required action. Run-time control may
                be called whenever necessary and as many times as needed.
 @{
*//***************************************************************************/

/**************************************************************************//**
 @Collection   General FM defines.
 *//***************************************************************************/
#define IOC_FM_MAX_NUM_OF_VALID_PORTS  (FM_MAX_NUM_OF_OH_PORTS + \
                                        FM_MAX_NUM_OF_1G_RX_PORTS +  \
                                        FM_MAX_NUM_OF_10G_RX_PORTS + \
                                        FM_MAX_NUM_OF_1G_TX_PORTS +  \
                                        FM_MAX_NUM_OF_10G_TX_PORTS)
/* @} */

/**************************************************************************//**
 @Description   Structure for Port bandwidth requirement. Port is identified
                by type and relative id.
                (must be identical to t_FmPortBandwidth defined in fm_ext.h)
*//***************************************************************************/
typedef struct ioc_fm_port_bandwidth_t {
    ioc_fm_port_type    type;           /**< FM port type */
    uint8_t             relative_port_id; /**< Type relative port id */
    uint8_t             bandwidth;      /**< bandwidth - (in term of percents) */
} ioc_fm_port_bandwidth_t;

/**************************************************************************//**
 @Description   A Structure containing an array of Port bandwidth requirements.
                The user should state the ports requiring bandwidth in terms of
                percentage - i.e. all port's bandwidths in the array must add
                up to 100.
                (must be identical to t_FmPortsBandwidthParams defined in fm_ext.h)
*//***************************************************************************/
typedef struct ioc_fm_port_bandwidth_params {
    uint8_t                     num_of_ports;
                                /**< num of ports listed in the array below */
    ioc_fm_port_bandwidth_t     ports_bandwidths[IOC_FM_MAX_NUM_OF_VALID_PORTS];
                                /**< for each port, it's bandwidth (all port's
                                  bandwidths must add up to 100.*/
} ioc_fm_port_bandwidth_params;

/**************************************************************************//**
 @Description   enum for defining FM counters
*//***************************************************************************/
typedef enum ioc_fm_counters {
    e_IOC_FM_COUNTERS_ENQ_TOTAL_FRAME,              /**< QMI total enqueued frames counter */
    e_IOC_FM_COUNTERS_DEQ_TOTAL_FRAME,              /**< QMI total dequeued frames counter */
    e_IOC_FM_COUNTERS_DEQ_0,                        /**< QMI 0 frames from QMan counter */
    e_IOC_FM_COUNTERS_DEQ_1,                        /**< QMI 1 frames from QMan counter */
    e_IOC_FM_COUNTERS_DEQ_2,                        /**< QMI 2 frames from QMan counter */
    e_IOC_FM_COUNTERS_DEQ_3,                        /**< QMI 3 frames from QMan counter */
    e_IOC_FM_COUNTERS_DEQ_FROM_DEFAULT,             /**< QMI dequeue from default queue counter */
    e_IOC_FM_COUNTERS_DEQ_FROM_CONTEXT,             /**< QMI dequeue from FQ context counter */
    e_IOC_FM_COUNTERS_DEQ_FROM_FD,                  /**< QMI dequeue from FD command field counter */
    e_IOC_FM_COUNTERS_DEQ_CONFIRM,                  /**< QMI dequeue confirm counter */
} ioc_fm_counters;

typedef struct ioc_fm_obj_t {
    void            *obj;
} ioc_fm_obj_t;

/**************************************************************************//**
 @Description   A structure for returning revision information
                (must match struct t_FmRevisionInfo declared in fm_ext.h)
*//***************************************************************************/
typedef struct ioc_fm_revision_info_t {
    uint8_t         major;               /**< Major revision */
    uint8_t         minor;               /**< Minor revision */
} ioc_fm_revision_info_t;

/**************************************************************************//**
 @Description   A structure for FM counters
*//***************************************************************************/
typedef struct ioc_fm_counters_params_t {
    ioc_fm_counters cnt;                /**< The requested counter */
    uint32_t        val;                /**< The requested value to get/set from/into the counter */
} ioc_fm_counters_params_t;

typedef union ioc_fm_api_version_t {
    struct {
        uint8_t major;
        uint8_t minor;
        uint8_t respin;
        uint8_t reserved;
    } version;
    uint32_t ver;
} ioc_fm_api_version_t;

#if (DPAA_VERSION >= 11)
/**************************************************************************//**
 @Description   A structure of information about each of the external
                buffer pools used by a port or storage-profile.
                (must be identical to t_FmExtPoolParams defined in fm_ext.h)
*//***************************************************************************/
typedef struct ioc_fm_ext_pool_params {
    uint8_t                 id;     /**< External buffer pool id */
    uint16_t                size;   /**< External buffer pool buffer size */
} ioc_fm_ext_pool_params;

/**************************************************************************//**
 @Description   A structure for informing the driver about the external
                buffer pools allocated in the BM and used by a port or a
                storage-profile.
                (must be identical to t_FmExtPools defined in fm_ext.h)
*//***************************************************************************/
typedef struct ioc_fm_ext_pools {
    uint8_t                 num_of_pools_used;     /**< Number of pools use by this port */
    ioc_fm_ext_pool_params  ext_buf_pool[FM_PORT_MAX_NUM_OF_EXT_POOLS];
                                                /**< Parameters for each port */
} ioc_fm_ext_pools;

typedef struct ioc_fm_vsp_params_t {
    void                *p_fm;              /**< A handle to the FM object this VSP related to */
    ioc_fm_ext_pools    ext_buf_pools;        /**< Which external buffer pools are used
                                                 (up to FM_PORT_MAX_NUM_OF_EXT_POOLS), and their sizes.
                                                 parameter associated with Rx / OP port */
    uint16_t            liodn_offset;        /**< VSP's LIODN offset */
    struct {
        ioc_fm_port_type port_type;          /**< Port type */
        uint8_t         port_id;             /**< Port Id - relative to type */
    } port_params;
    uint8_t             relative_profile_id;  /**< VSP Id - relative to VSP's range
                                                 defined in relevant FM object */
    void                *id;                /**< return value */
} ioc_fm_vsp_params_t;
#endif /* (DPAA_VERSION >= 11) */

/**************************************************************************//**
 @Description   A structure for defining BM pool depletion criteria
*//***************************************************************************/
typedef struct ioc_fm_buf_pool_depletion_t {
    bool        pools_grp_mode_enable;              /**< select mode in which pause frames will be sent after
                                                         a number of pools (all together!) are depleted */
    uint8_t     num_of_pools;                       /**< the number of depleted pools that will invoke
                                                         pause frames transmission. */
    bool        pools_to_consider[BM_MAX_NUM_OF_POOLS];
                                                    /**< For each pool, TRUE if it should be considered for
                                                         depletion (Note - this pool must be used by this port!). */
    bool        single_pool_mode_enable;            /**< select mode in which pause frames will be sent after
                                                         a single-pool is depleted; */
    bool        pools_to_consider_for_single_mode[BM_MAX_NUM_OF_POOLS];
                                                    /**< For each pool, TRUE if it should be considered for
                                                         depletion (Note - this pool must be used by this port!) */
#if (DPAA_VERSION >= 11)
    bool        pfc_priorities_en[FM_MAX_NUM_OF_PFC_PRIORITIES];
                                                    /**< This field is used by the MAC as the Priority Enable Vector in the PFC frame
                                                         which is transmitted */
#endif /* (DPAA_VERSION >= 11) */
} ioc_fm_buf_pool_depletion_t;

#if (DPAA_VERSION >= 11)
typedef struct ioc_fm_buf_pool_depletion_params_t {
    void        *p_fm_vsp;
    ioc_fm_buf_pool_depletion_t fm_buf_pool_depletion;
} ioc_fm_buf_pool_depletion_params_t;
#endif /* (DPAA_VERSION >= 11) */

typedef struct ioc_fm_buffer_prefix_content_t {
    uint16_t    priv_data_size;       /**< Number of bytes to be left at the beginning
                                         of the external buffer; Note that the private-area will
                                         start from the base of the buffer address. */
    bool        pass_prs_result;      /**< TRUE to pass the parse result to/from the FM;
                                         User may use FM_PORT_GetBufferPrsResult() in order to
                                         get the parser-result from a buffer. */
    bool        pass_time_stamp;      /**< TRUE to pass the timeStamp to/from the FM
                                         User may use FM_PORT_GetBufferTimeStamp() in order to
                                         get the parser-result from a buffer. */
    bool        pass_hash_result;     /**< TRUE to pass the KG hash result to/from the FM
                                         User may use FM_PORT_GetBufferHashResult() in order to
                                         get the parser-result from a buffer. */
    bool        pass_all_other_pcd_info; /**< Add all other Internal-Context information:
                                         AD, hash-result, key, etc. */
    uint16_t    data_align;          /**< 0 to use driver's default alignment [64],
                                         other value for selecting a data alignment (must be a power of 2);
                                         if write optimization is used, must be >= 16. */
    uint8_t     manip_extra_space;    /**< Maximum extra size needed (insertion-size minus removal-size);
                                         Note that this field impacts the size of the buffer-prefix
                                         (i.e. it pushes the data offset);
                                         This field is irrelevant if DPAA_VERSION==10 */
} ioc_fm_buffer_prefix_content_t;

typedef struct ioc_fm_buffer_prefix_content_params_t {
    void        *p_fm_vsp;
    ioc_fm_buffer_prefix_content_t fm_buffer_prefix_content;
} ioc_fm_buffer_prefix_content_params_t;

#if (DPAA_VERSION >= 11)
typedef struct ioc_fm_vsp_config_no_sg_params_t {
    void        *p_fm_vsp;
    bool        no_sg;
} ioc_fm_vsp_config_no_sg_params_t;

typedef struct ioc_fm_vsp_prs_result_params_t {
    void        *p_fm_vsp;
    void        *p_data;
} ioc_fm_vsp_prs_result_params_t;
#endif

typedef struct fm_ctrl_mon_t {
    uint8_t     percent_cnt[2];
} fm_ctrl_mon_t;

typedef struct ioc_fm_ctrl_mon_counters_params_t {
    uint8_t     fm_ctrl_index;
    fm_ctrl_mon_t *p_mon;
} ioc_fm_ctrl_mon_counters_params_t;

/**************************************************************************//**
 @Function      FM_IOC_SET_PORTS_BANDWIDTH

 @Description   Sets relative weights between ports when accessing common resources.

 @Param[in]     ioc_fm_port_bandwidth_params    Port bandwidth percentages,
 their sum must equal 100.

 @Return        E_OK on success; Error code otherwise.

 @Cautions      Allowed only following FM_Init().
*//***************************************************************************/
#define FM_IOC_SET_PORTS_BANDWIDTH                             _IOW(FM_IOC_TYPE_BASE, FM_IOC_NUM(2), ioc_fm_port_bandwidth_params)

/**************************************************************************//**
 @Function      FM_IOC_GET_REVISION

 @Description   Returns the FM revision

 @Param[out]    ioc_fm_revision_info_t  A structure of revision information parameters.

 @Return        None.

 @Cautions      Allowed only following FM_Init().
*//***************************************************************************/
#define FM_IOC_GET_REVISION                                    _IOR(FM_IOC_TYPE_BASE, FM_IOC_NUM(3), ioc_fm_revision_info_t)

/**************************************************************************//**
 @Function      FM_IOC_GET_COUNTER

 @Description   Reads one of the FM counters.

 @Param[in,out] ioc_fm_counters_params_t The requested counter parameters.

 @Return        Counter's current value.

 @Cautions      Allowed only following FM_Init().
                Note that it is user's responsibilty to call this routine only
                for enabled counters, and there will be no indication if a
                disabled counter is accessed.
*//***************************************************************************/
#define FM_IOC_GET_COUNTER                                    _IOWR(FM_IOC_TYPE_BASE, FM_IOC_NUM(4), ioc_fm_counters_params_t)

/**************************************************************************//**
 @Function      FM_IOC_SET_COUNTER

 @Description   Sets a value to an enabled counter. Use "0" to reset the counter.

 @Param[in]     ioc_fm_counters_params_t The requested counter parameters.

 @Return        E_OK on success; Error code otherwise.

 @Cautions      Allowed only following FM_Init().
*//***************************************************************************/
#define FM_IOC_SET_COUNTER                                    _IOW(FM_IOC_TYPE_BASE, FM_IOC_NUM(5), ioc_fm_counters_params_t)

/**************************************************************************//**
 @Function      FM_IOC_FORCE_INTR

 @Description   Causes an interrupt event on the requested source.

 @Param[in]     ioc_fm_exceptions   An exception to be forced.

 @Return        E_OK on success; Error code if the exception is not enabled,
                or is not able to create interrupt.

 @Cautions      Allowed only following FM_Init().
*//***************************************************************************/
#define FM_IOC_FORCE_INTR                                    _IOW(FM_IOC_TYPE_BASE, FM_IOC_NUM(6), ioc_fm_exceptions)

/**************************************************************************//**
 @Function      FM_IOC_GET_API_VERSION

 @Description   Reads the FMD IOCTL API version.

 @Param[in,out] ioc_fm_api_version_t The requested counter parameters.

 @Return        Version's value.
*//***************************************************************************/
#define FM_IOC_GET_API_VERSION                               _IOR(FM_IOC_TYPE_BASE, FM_IOC_NUM(7), ioc_fm_api_version_t)

#if (DPAA_VERSION >= 11)
/**************************************************************************//**
 @Function      FM_VSP_Config

 @Description   Creates descriptor for the FM VSP module.

                The routine returns a handle (descriptor) to the FM VSP object.
                This descriptor must be passed as first parameter to all other
                FM VSP function calls.

                No actual initialization or configuration of FM hardware is
                done by this routine.

@Param[in]      p_FmVspParams   Pointer to data structure of parameters

 @Retval        Handle to FM VSP object, or NULL for Failure.
*//***************************************************************************/
#if defined(FM_COMPAT)
#define FM_IOC_VSP_CONFIG_COMPAT                             _IOWR(FM_IOC_TYPE_BASE, FM_IOC_NUM(8), ioc_compat_fm_vsp_params_t)
#endif
#define FM_IOC_VSP_CONFIG                                    _IOWR(FM_IOC_TYPE_BASE, FM_IOC_NUM(8), ioc_fm_vsp_params_t)

/**************************************************************************//**
 @Function      FM_VSP_Init

 @Description   Initializes the FM VSP module

 @Param[in]     h_FmVsp - FM VSP module descriptor

 @Return        E_OK on success; Error code otherwise.
*//***************************************************************************/
#if defined(FM_COMPAT)
#define FM_IOC_VSP_INIT_COMPAT                               _IOW(FM_IOC_TYPE_BASE, FM_IOC_NUM(9), ioc_compat_fm_obj_t)
#endif
#define FM_IOC_VSP_INIT                                      _IOW(FM_IOC_TYPE_BASE, FM_IOC_NUM(9), ioc_fm_obj_t)

/**************************************************************************//**
 @Function      FM_VSP_Free

 @Description   Frees all resources that were assigned to FM VSP module.

                Calling this routine invalidates the descriptor.

 @Param[in]     h_FmVsp - FM VSP module descriptor

 @Return        E_OK on success; Error code otherwise.
*//***************************************************************************/
#if defined(FM_COMPAT)
#define FM_IOC_VSP_FREE_COMPAT                               _IOW(FM_IOC_TYPE_BASE, FM_IOC_NUM(10), ioc_compat_fm_obj_t)
#endif
#define FM_IOC_VSP_FREE                                      _IOW(FM_IOC_TYPE_BASE, FM_IOC_NUM(10), ioc_fm_obj_t)

/**************************************************************************//**
 @Function      FM_VSP_ConfigPoolDepletion

 @Description   Calling this routine enables pause frame generation depending on the
                depletion status of BM pools. It also defines the conditions to activate
                this functionality. By default, this functionality is disabled.

 @Param[in]     ioc_fm_buf_pool_depletion_params_t      A structure holding the required parameters.

 @Return        E_OK on success; Error code otherwise.

 @Cautions      Allowed only following FM_VSP_Config() and before FM_VSP_Init().
*//***************************************************************************/
#if defined(FM_COMPAT)
#define FM_IOC_VSP_CONFIG_POOL_DEPLETION_COMPAT              _IOW(FM_IOC_TYPE_BASE, FM_IOC_NUM(11), ioc_compat_fm_buf_pool_depletion_params_t)
#endif
#define FM_IOC_VSP_CONFIG_POOL_DEPLETION                     _IOW(FM_IOC_TYPE_BASE, FM_IOC_NUM(11), ioc_fm_buf_pool_depletion_params_t)

/**************************************************************************//**
 @Function      FM_VSP_ConfigBufferPrefixContent

 @Description   Defines the structure, size and content of the application buffer.

                The prefix will
                In VSPs defined for Tx ports, if 'passPrsResult', the application
                should set a value to their offsets in the prefix of
                the FM will save the first 'privDataSize', than,
                depending on 'passPrsResult' and 'passTimeStamp', copy parse result
                and timeStamp, and the packet itself (in this order), to the
                application buffer, and to offset.

                Calling this routine changes the buffer margins definitions
                in the internal driver data base from its default
                configuration: Data size:  [DEFAULT_FM_SP_bufferPrefixContent_privDataSize]
                               Pass Parser result: [DEFAULT_FM_SP_bufferPrefixContent_passPrsResult].
                               Pass timestamp: [DEFAULT_FM_SP_bufferPrefixContent_passTimeStamp].

 @Param[in]     ioc_fm_buffer_prefix_content_params_t   A structure holding the required parameters.

 @Return        E_OK on success; Error code otherwise.

 @Cautions      Allowed only following FM_VSP_Config() and before FM_VSP_Init().
*//***************************************************************************/
#if defined(FM_COMPAT)
#define FM_IOC_VSP_CONFIG_BUFFER_PREFIX_CONTENT_COMPAT       _IOW(FM_IOC_TYPE_BASE, FM_IOC_NUM(12), ioc_compat_fm_buffer_prefix_content_params_t)
#endif
#define FM_IOC_VSP_CONFIG_BUFFER_PREFIX_CONTENT              _IOW(FM_IOC_TYPE_BASE, FM_IOC_NUM(12), ioc_fm_buffer_prefix_content_params_t)

/**************************************************************************//**
 @Function      FM_VSP_ConfigNoScatherGather

 @Description   Calling this routine changes the possibility to receive S/G frame
                in the internal driver data base
                from its default configuration: optimize = [DEFAULT_FM_SP_noScatherGather]

 @Param[in]     ioc_fm_vsp_config_no_sg_params_t        A structure holding the required parameters.

 @Return        E_OK on success; Error code otherwise.

 @Cautions      Allowed only following FM_VSP_Config() and before FM_VSP_Init().
*//***************************************************************************/
#if defined(FM_COMPAT)
#define FM_IOC_VSP_CONFIG_NO_SG_COMPAT                     _IOW(FM_IOC_TYPE_BASE, FM_IOC_NUM(13), ioc_compat_fm_vsp_config_no_sg_params_t)
#endif
#define FM_IOC_VSP_CONFIG_NO_SG                            _IOW(FM_IOC_TYPE_BASE, FM_IOC_NUM(13), ioc_fm_vsp_config_no_sg_params_t)

/**************************************************************************//**
 @Function      FM_VSP_GetBufferPrsResult

 @Description   Returns the pointer to the parse result in the data buffer.
                In Rx ports this is relevant after reception, if parse
                result is configured to be part of the data passed to the
                application. For non Rx ports it may be used to get the pointer
                of the area in the buffer where parse result should be
                initialized - if so configured.
                See FM_VSP_ConfigBufferPrefixContent for data buffer prefix
                configuration.

 @Param[in]     ioc_fm_vsp_prs_result_params_t  A structure holding the required parameters.

 @Return        Parse result pointer on success, NULL if parse result was not
                configured for this port.

 @Cautions      Allowed only following FM_VSP_Init().
*//***************************************************************************/
#if defined(FM_COMPAT)
#define FM_IOC_VSP_GET_BUFFER_PRS_RESULT_COMPAT            _IOWR(FM_IOC_TYPE_BASE, FM_IOC_NUM(14), ioc_compat_fm_vsp_prs_result_params_t)
#endif
#define FM_IOC_VSP_GET_BUFFER_PRS_RESULT                   _IOWR(FM_IOC_TYPE_BASE, FM_IOC_NUM(14), ioc_fm_vsp_prs_result_params_t)
#endif /* (DPAA_VERSION >= 11) */

/**************************************************************************//**
 @Function      FM_CtrlMonStart

 @Description   Start monitoring utilization of all available FM controllers.

                In order to obtain FM controllers utilization the following sequence
                should be used:
                -# FM_CtrlMonStart()
                -# FM_CtrlMonStop()
                -# FM_CtrlMonGetCounters() - issued for each FM controller

 @Return        E_OK on success; Error code otherwise.

 @Cautions      Allowed only following FM_Init().
*//***************************************************************************/
#define FM_IOC_CTRL_MON_START                              _IO(FM_IOC_TYPE_BASE, FM_IOC_NUM(15))


/**************************************************************************//**
 @Function      FM_CtrlMonStop

 @Description   Stop monitoring utilization of all available FM controllers.

                In order to obtain FM controllers utilization the following sequence
                should be used:
                -# FM_CtrlMonStart()
                -# FM_CtrlMonStop()
                -# FM_CtrlMonGetCounters() - issued for each FM controller

 @Return        E_OK on success; Error code otherwise.

 @Cautions      Allowed only following FM_Init().
*//***************************************************************************/
#define FM_IOC_CTRL_MON_STOP                               _IO(FM_IOC_TYPE_BASE, FM_IOC_NUM(16))

/**************************************************************************//**
 @Function      FM_CtrlMonGetCounters

 @Description   Obtain FM controller utilization parameters.

                In order to obtain FM controllers utilization the following sequence
                should be used:
                -# FM_CtrlMonStart()
                -# FM_CtrlMonStop()
                -# FM_CtrlMonGetCounters() - issued for each FM controller

 @Param[in]     ioc_fm_ctrl_mon_counters_params_t       A structure holding the required parameters.

 @Return        E_OK on success; Error code otherwise.

 @Cautions      Allowed only following FM_Init().
*//***************************************************************************/
#if defined(FM_COMPAT)
#define FM_IOC_CTRL_MON_GET_COUNTERS_COMPAT                _IOW(FM_IOC_TYPE_BASE, FM_IOC_NUM(17), ioc_compat_fm_ctrl_mon_counters_params_t)
#endif
#define FM_IOC_CTRL_MON_GET_COUNTERS                       _IOW(FM_IOC_TYPE_BASE, FM_IOC_NUM(17), ioc_fm_ctrl_mon_counters_params_t)

/** @} */ /* end of lnx_ioctl_FM_runtime_control_grp group */
/** @} */ /* end of lnx_ioctl_FM_lib_grp group */
/** @} */ /* end of lnx_ioctl_FM_grp */

#define FMD_API_VERSION_MAJOR 21
#define FMD_API_VERSION_MINOR 1 
#define FMD_API_VERSION_RESPIN 0

#endif /* __FM_IOCTLS_H */
