root/usr/src/uts/common/io/bnxe/577xx/drivers/common/lm/l5/include/lm_l5if.h
/*******************************************************************************
* lm_l5if.h - L5 lm interface 
******************************************************************************/
#ifndef _LM_L5IF_H
#define _LM_L5IF_H



//#include "57xx_iscsi_hsi_diag.h"

        
lm_status_t
lm_sc_alloc_resc(
    IN struct _lm_device_t *pdev
    );


lm_status_t
lm_sc_clear_resc(
    IN struct _lm_device_t *pdev
    );

lm_status_t
lm_sc_ooo_chain_establish(
    IN struct _lm_device_t *pdev);

lm_status_t
lm_fc_clear_resc(
    IN struct _lm_device_t *pdev
    );


/*******************************************************************************
 * Description:
 *
 * Return:
 ******************************************************************************/
lm_status_t
lm_sc_clear_d0_resc(
    IN struct _lm_device_t *pdev,
    const u8_t cid
    );

lm_status_t
lm_sc_init(
    IN struct _lm_device_t *pdev,
    IN struct iscsi_kwqe_init1  *req1, 
    IN struct iscsi_kwqe_init2  *req2
    );


lm_status_t
lm_fc_clear_d0_resc(
    IN struct _lm_device_t *pdev,
    const u8_t cid
    );

lm_status_t
lm_fc_init(
    IN struct _lm_device_t          *pdev,
    IN struct fcoe_kwqe_init1       *init1,
    IN struct fcoe_kwqe_init2       *init2,
    IN struct fcoe_kwqe_init3       *init3);


void
lm_fc_recycle_cid_cb(
    struct _lm_device_t     *pdev,
    void                    *cookie,
    s32_t                   cid);


void 
lm_fc_comp_cb(
    struct _lm_device_t *pdev, 
    struct sq_pending_command *pending);


lm_status_t
lm_fc_alloc_resc(
    IN struct _lm_device_t          *pdev);


/**
 * @description
 * Returns the max FCOE task supported. 
 * In oreder to know the max task enabled refer to 
 * pdev->params.max_fcoe_task 
 * @param pdev 
 * 
 * @return u32_t 
 */
u32_t
lm_fc_max_fcoe_task_sup(
    IN struct _lm_device_t          *pdev);

lm_status_t
lm_sc_alloc_con_phys_mem(
    IN struct _lm_device_t          *pdev,
    IN lm_iscsi_state_t             *iscsi);

lm_status_t
lm_sc_alloc_con_resc(
    IN struct _lm_device_t          *pdev,
    IN lm_iscsi_state_t             *iscsi,
    IN struct iscsi_kwqe_conn_offload1     *req1,
    IN struct iscsi_kwqe_conn_offload2     *req2,
    IN struct iscsi_kwqe_conn_offload3     *req3
    );

lm_status_t
lm_fc_alloc_con_resc(
    IN struct _lm_device_t          *pdev,
    IN lm_fcoe_state_t              *fcoe);


void lm_sc_free_con_phys_mem(
    IN struct _lm_device_t *pdev,
    IN lm_iscsi_state_t *iscsi
    );

lm_status_t
lm_sc_free_con_resc(
    IN struct _lm_device_t *pdev,
    IN lm_iscsi_state_t *iscsi
    );

lm_status_t
lm_fc_free_con_resc(
    IN struct _lm_device_t          *pdev,
    IN lm_fcoe_state_t              *fcoe);


void
lm_sc_init_sp_req_type(
    IN struct _lm_device_t        * pdev, 
    IN lm_iscsi_state_t             * tcp, 
    IN lm_iscsi_slow_path_request_t * lm_req, 
    IN void                       * req_input_data
    );



lm_status_t
lm_sc_post_slow_path_request(
    IN  struct _lm_device_t *pdev,
    IN  lm_iscsi_state_t *iscsi,
    IN  lm_iscsi_slow_path_request_t *request
    );



lm_status_t
lm_sc_init_iscsi_state(
    IN struct _lm_device_t *pdev,
    IN lm_state_block_t *state_blk,
    IN lm_iscsi_state_t *iscsi
    );


void
lm_sc_del_iscsi_state(
    IN struct _lm_device_t *pdev,
    IN lm_iscsi_state_t *iscsi
    );

void
lm_fc_del_fcoe_state(
    struct _lm_device_t             *pdev,
    lm_fcoe_state_t                 *fcoe);

lm_status_t
lm_fc_init_fcoe_state(
    struct _lm_device_t             *pdev,
    lm_state_block_t                *state_blk,
    lm_fcoe_state_t                 *fcoe);


lm_status_t lm_sc_init_iscsi_context(
    IN struct _lm_device_t      *pdev,
    IN lm_iscsi_state_t         *iscsi,
    struct iscsi_kwqe_conn_offload1     *req1,
    struct iscsi_kwqe_conn_offload2    *req2,
    struct iscsi_kwqe_conn_offload3    *req3
    );


lm_status_t
lm_fc_init_fcoe_context(
    IN struct _lm_device_t          *pdev,
    IN lm_fcoe_state_t              *fcoe);


void
lm_sc_service_eq_intr(
    IN struct _lm_device_t *pdev,
    IN u8_t sb_idx
    );

void
lm_fc_service_eq_intr(
    IN struct _lm_device_t          *pdev,
    IN u8_t                         sb_idx);


u8_t
lm_sc_is_eq_completion(
    IN struct _lm_device_t *pdev,
    IN u8_t sb_idx
    );


u8_t
lm_fc_is_eq_completion(
    IN struct _lm_device_t *pdev,
    IN u8_t sb_idx
    );


lm_status_t
lm_sc_complete_l4_ofld_request(
        IN struct _lm_device_t *pdev,
        IN struct iscsi_kcqe *kcqe
        );


lm_status_t 
lm_sc_complete_l4_upload_request(
        IN struct _lm_device_t *pdev,
        IN u8_t                 op_code,
        IN u32_t                cid);
    

lm_status_t
lm_sc_complete_slow_path_request(
        IN struct _lm_device_t *pdev,
        IN struct iscsi_kcqe *kcqe
        );


lm_status_t
lm_fc_complete_slow_path_request(
    IN struct _lm_device_t          *pdev,
    IN struct fcoe_kcqe             *kcqe);


lm_status_t
lm_fc_post_offload_ramrod(
    struct _lm_device_t             *pdev,
    lm_fcoe_state_t                 *fcoe);

lm_status_t
lm_fc_post_enable_ramrod(
    struct _lm_device_t                     *pdev,
    lm_fcoe_state_t                         *fcoe,
    struct fcoe_kwqe_conn_enable_disable    *enable);

lm_status_t
lm_fc_post_disable_ramrod(
    struct _lm_device_t                    *pdev,
    lm_fcoe_state_t                        *fcoe,
    struct fcoe_kwqe_conn_enable_disable   *destroy);


lm_status_t
lm_fc_post_destroy_ramrod(
    struct _lm_device_t             *pdev);


lm_status_t
lm_fc_post_stat_ramrod(
    struct _lm_device_t         *pdev,
    struct fcoe_kwqe_stat       *stat);

lm_status_t
lm_fc_post_terminate_ramrod(
    struct _lm_device_t             *pdev,
    lm_fcoe_state_t                 *fcoe);

#endif /* _LM_L5IF_H */