#ifndef _LM_SP_REQ_MGR_H #define _LM_SP_REQ_MGR_H #include "listq.h" /******************************************************************************* * slow path request manager data structures ******************************************************************************/ /* Frward declaration */ struct _lm_device_t; typedef struct _lm_sp_req_common_t { s_list_entry_t link; void *req_post_func; void *req_post_ctx; u32_t req_seq_number; } lm_sp_req_common_t; typedef lm_status_t (*req_post_function)( struct _lm_device_t *pdev, void *state_ctx, /* tcp_state / iscsi_state */ lm_sp_req_common_t *sp_req); typedef struct _lm_sp_req_manager_t { s_list_t pending_reqs; u32_t req_seq_number; u8_t blocked; /* ToDo: use instaed of tcpstate.sp_request */ lm_sp_req_common_t * posted_req; void * sp_data_virt_addr; lm_address_t sp_data_phys_addr; } lm_sp_req_manager_t; /******************************************************************************* * slow path request manager prototypes ******************************************************************************/ lm_status_t lm_sp_req_manager_set_sp_data( IN struct _lm_device_t *pdev, IN u32_t cid, IN void *virt_addr, IN lm_address_t phys_addr ); lm_status_t lm_sp_req_manager_init( IN struct _lm_device_t *pdev, IN u32_t cid ); lm_status_t lm_sp_req_manager_shutdown( IN struct _lm_device_t *pdev, IN u32_t cid ); lm_status_t lm_sp_req_manager_post( IN struct _lm_device_t *pdev, IN u32_t cid, IN struct _lm_sp_req_common_t *sp_req ); lm_status_t lm_sp_req_manager_complete( IN struct _lm_device_t *pdev, IN u32_t cid, IN u32_t seq_num, OUT lm_sp_req_common_t **sp_req ); lm_status_t lm_sp_req_manager_block( IN struct _lm_device_t *pdev, IN u32_t cid ); lm_status_t lm_sp_req_manager_unblock( IN struct _lm_device_t *pdev, IN u32_t cid, OUT lm_sp_req_common_t **sp_req ); #endif /* _LM_SP_REQ_MGR_H */