13 OUT u64_t *data)
14 {
15 DbgMessage(pdev, VERBOSEl5sp, "##lm__post_initiate_offload_request\n");
16 DbgBreakIf(iscsi->hdr.status != STATE_STATUS_INIT_CONTEXT);
17
18 *command = ISCSI_RAMROD_CMD_ID_INIT;
19 *data = iscsi->ctx_phys.as_u64;
20
21 return LM_STATUS_PENDING;
22 }
23
24
25
26 static lm_status_t lm_sc_post_update_request(
27 IN struct _lm_device_t *pdev,
28 IN lm_iscsi_state_t *iscsi,
29 IN lm_iscsi_slow_path_request_t *sp_req,
30 OUT u8_t *command,
31 OUT u64_t *data)
32 {
33 struct protocol_common_spe spe = {0};
34
35 DbgMessage(pdev, VERBOSEl5sp, "##lm__post_initiate_offload_request\n");
36 DbgBreakIf(iscsi->hdr.status != STATE_STATUS_NORMAL);
37
38 *command = ISCSI_RAMROD_CMD_ID_UPDATE_CONN;
39 spe.data.phy_address.hi = iscsi->sp_req_data.phys_addr.as_u32.high;
40 spe.data.phy_address.lo = iscsi->sp_req_data.phys_addr.as_u32.low;
41 *data = *((u64_t*)(&(spe.data.phy_address)));
42
43 return LM_STATUS_PENDING;
44 }
45
46
47
48 /* Desciption:
49 * post slow path request of given type for given iscsi state
50 * Assumptions:
51 * - caller initialized request->type according to his specific request
52 * - caller allocated space for request->data, according to the specific request type
53 * - all previous slow path requests for given tcp state are already completed
208 fcoe->hdr.state_blk = state_blk;
209 fcoe->hdr.state_id = STATE_ID_UNKNOWN;
210 fcoe->hdr.status = STATE_STATUS_INIT;
211 d_list_push_tail(&pdev->fcoe_info.run_time.fcoe_list, &fcoe->hdr.link);
212
213 /* the rest of the fcoe state's fields that require initialization value other than 0,
214 * will be initialized later (when lm_fc_init_fcoe_context is called) */
215
216 return LM_STATUS_SUCCESS;
217 }
218
219
220
221 void lm_sc_init_sp_req_type(
222 struct _lm_device_t * pdev,
223 lm_iscsi_state_t * iscsi,
224 lm_iscsi_slow_path_request_t * lm_req,
225 void * req_input_data)
226 {
227 void *update_kwqe_virt;
228 struct protocol_common_spe spe = {0};
229
230 switch(lm_req->type) {
231 case SP_REQUEST_SC_INIT:
232 break;
233 case SP_REQUEST_SC_UPDATE:
234
235 spe.data.phy_address.hi = iscsi->sp_req_data.phys_addr.as_u32.high;
236 spe.data.phy_address.lo = iscsi->sp_req_data.phys_addr.as_u32.low;
237
238 update_kwqe_virt = &iscsi->sp_req_data.virt_addr->update_ctx.kwqe;
239 mm_memcpy(update_kwqe_virt, req_input_data, sizeof(struct iscsi_kwqe_conn_update));
240
241 break;
242 default:
243 DbgBreakMsg("lm_sc_init_sp_req_type: Illegal slow path request type!\n");
244 }
245 } /* lm_init_sp_req_type */
|
13 OUT u64_t *data)
14 {
15 DbgMessage(pdev, VERBOSEl5sp, "##lm__post_initiate_offload_request\n");
16 DbgBreakIf(iscsi->hdr.status != STATE_STATUS_INIT_CONTEXT);
17
18 *command = ISCSI_RAMROD_CMD_ID_INIT;
19 *data = iscsi->ctx_phys.as_u64;
20
21 return LM_STATUS_PENDING;
22 }
23
24
25
26 static lm_status_t lm_sc_post_update_request(
27 IN struct _lm_device_t *pdev,
28 IN lm_iscsi_state_t *iscsi,
29 IN lm_iscsi_slow_path_request_t *sp_req,
30 OUT u8_t *command,
31 OUT u64_t *data)
32 {
33 struct protocol_common_spe spe = {{0}};
34
35 DbgMessage(pdev, VERBOSEl5sp, "##lm__post_initiate_offload_request\n");
36 DbgBreakIf(iscsi->hdr.status != STATE_STATUS_NORMAL);
37
38 *command = ISCSI_RAMROD_CMD_ID_UPDATE_CONN;
39 spe.data.phy_address.hi = iscsi->sp_req_data.phys_addr.as_u32.high;
40 spe.data.phy_address.lo = iscsi->sp_req_data.phys_addr.as_u32.low;
41 *data = *((u64_t*)(&(spe.data.phy_address)));
42
43 return LM_STATUS_PENDING;
44 }
45
46
47
48 /* Desciption:
49 * post slow path request of given type for given iscsi state
50 * Assumptions:
51 * - caller initialized request->type according to his specific request
52 * - caller allocated space for request->data, according to the specific request type
53 * - all previous slow path requests for given tcp state are already completed
208 fcoe->hdr.state_blk = state_blk;
209 fcoe->hdr.state_id = STATE_ID_UNKNOWN;
210 fcoe->hdr.status = STATE_STATUS_INIT;
211 d_list_push_tail(&pdev->fcoe_info.run_time.fcoe_list, &fcoe->hdr.link);
212
213 /* the rest of the fcoe state's fields that require initialization value other than 0,
214 * will be initialized later (when lm_fc_init_fcoe_context is called) */
215
216 return LM_STATUS_SUCCESS;
217 }
218
219
220
221 void lm_sc_init_sp_req_type(
222 struct _lm_device_t * pdev,
223 lm_iscsi_state_t * iscsi,
224 lm_iscsi_slow_path_request_t * lm_req,
225 void * req_input_data)
226 {
227 void *update_kwqe_virt;
228 struct protocol_common_spe spe = {{0}};
229
230 switch(lm_req->type) {
231 case SP_REQUEST_SC_INIT:
232 break;
233 case SP_REQUEST_SC_UPDATE:
234
235 spe.data.phy_address.hi = iscsi->sp_req_data.phys_addr.as_u32.high;
236 spe.data.phy_address.lo = iscsi->sp_req_data.phys_addr.as_u32.low;
237
238 update_kwqe_virt = &iscsi->sp_req_data.virt_addr->update_ctx.kwqe;
239 mm_memcpy(update_kwqe_virt, req_input_data, sizeof(struct iscsi_kwqe_conn_update));
240
241 break;
242 default:
243 DbgBreakMsg("lm_sc_init_sp_req_type: Illegal slow path request type!\n");
244 }
245 } /* lm_init_sp_req_type */
|