Lines Matching refs:req

70 static int read_peer_guid(u64 *guid, const struct sbp_management_request *req)  in read_peer_guid()  argument
75 ret = sbp_run_transaction(req->card, TCODE_READ_QUADLET_REQUEST, in read_peer_guid()
76 req->node_addr, req->generation, req->speed, in read_peer_guid()
82 ret = sbp_run_transaction(req->card, TCODE_READ_QUADLET_REQUEST, in read_peer_guid()
83 req->node_addr, req->generation, req->speed, in read_peer_guid()
293 struct sbp_management_agent *agent, struct sbp_management_request *req, in sbp_management_request_login() argument
307 LOGIN_ORB_LUN(be32_to_cpu(req->orb.misc))); in sbp_management_request_login()
310 LOGIN_ORB_LUN(be32_to_cpu(req->orb.misc))); in sbp_management_request_login()
312 req->status.status = cpu_to_be32( in sbp_management_request_login()
318 ret = read_peer_guid(&guid, req); in sbp_management_request_login()
322 req->status.status = cpu_to_be32( in sbp_management_request_login()
360 if (LOGIN_ORB_EXCLUSIVE(be32_to_cpu(req->orb.misc)) && in sbp_management_request_login()
364 req->status.status = cpu_to_be32( in sbp_management_request_login()
377 req->status.status = cpu_to_be32( in sbp_management_request_login()
391 req->status.status = cpu_to_be32( in sbp_management_request_login()
409 req->status.status = cpu_to_be32( in sbp_management_request_login()
416 sess->node_id = req->node_addr; in sbp_management_request_login()
417 sess->card = fw_card_get(req->card); in sbp_management_request_login()
418 sess->generation = req->generation; in sbp_management_request_login()
419 sess->speed = req->speed; in sbp_management_request_login()
427 1 << LOGIN_ORB_RECONNECT(be32_to_cpu(req->orb.misc)), in sbp_management_request_login()
436 req->status.status = cpu_to_be32( in sbp_management_request_login()
444 login->status_fifo_addr = sbp2_pointer_to_addr(&req->orb.status_fifo); in sbp_management_request_login()
445 login->exclusive = LOGIN_ORB_EXCLUSIVE(be32_to_cpu(req->orb.misc)); in sbp_management_request_login()
456 req->status.status = cpu_to_be32( in sbp_management_request_login()
473 req->status.status = cpu_to_be32( in sbp_management_request_login()
480 LOGIN_ORB_RESPONSE_LENGTH(be32_to_cpu(req->orb.length)), in sbp_management_request_login()
491 sbp2_pointer_to_addr(&req->orb.ptr2), response, in sbp_management_request_login()
499 req->status.status = cpu_to_be32( in sbp_management_request_login()
507 req->status.status = cpu_to_be32( in sbp_management_request_login()
513 struct sbp_management_agent *agent, struct sbp_management_request *req, in sbp_management_request_query_logins() argument
519 req->status.status = cpu_to_be32( in sbp_management_request_query_logins()
525 struct sbp_management_agent *agent, struct sbp_management_request *req, in sbp_management_request_reconnect() argument
534 ret = read_peer_guid(&guid, req); in sbp_management_request_reconnect()
538 req->status.status = cpu_to_be32( in sbp_management_request_reconnect()
547 RECONNECT_ORB_LOGIN_ID(be32_to_cpu(req->orb.misc))); in sbp_management_request_reconnect()
552 req->status.status = cpu_to_be32( in sbp_management_request_reconnect()
561 req->status.status = cpu_to_be32( in sbp_management_request_reconnect()
572 login->sess->generation = req->generation; in sbp_management_request_reconnect()
573 login->sess->node_id = req->node_addr; in sbp_management_request_reconnect()
574 login->sess->card = fw_card_get(req->card); in sbp_management_request_reconnect()
575 login->sess->speed = req->speed; in sbp_management_request_reconnect()
578 req->status.status = cpu_to_be32( in sbp_management_request_reconnect()
584 struct sbp_management_agent *agent, struct sbp_management_request *req, in sbp_management_request_logout() argument
592 id = LOGOUT_ORB_LOGIN_ID(be32_to_cpu(req->orb.misc)); in sbp_management_request_logout()
598 req->status.status = cpu_to_be32( in sbp_management_request_logout()
607 if (req->node_addr != login->sess->node_id) { in sbp_management_request_logout()
610 req->status.status = cpu_to_be32( in sbp_management_request_logout()
618 req->status.status = cpu_to_be32( in sbp_management_request_logout()
891 struct sbp_target_request *req = in tgt_agent_process_work() local
895 req->orb_pointer, in tgt_agent_process_work()
896 sbp2_pointer_to_addr(&req->orb.next_orb), in tgt_agent_process_work()
897 sbp2_pointer_to_addr(&req->orb.data_descriptor), in tgt_agent_process_work()
898 be32_to_cpu(req->orb.misc)); in tgt_agent_process_work()
900 if (req->orb_pointer >> 32) in tgt_agent_process_work()
903 switch (ORB_REQUEST_FORMAT(be32_to_cpu(req->orb.misc))) { in tgt_agent_process_work()
905 sbp_handle_command(req); in tgt_agent_process_work()
909 req->status.status |= cpu_to_be32( in tgt_agent_process_work()
916 sbp_send_status(req); in tgt_agent_process_work()
917 sbp_free_request(req); in tgt_agent_process_work()
920 req->status.status |= cpu_to_be32( in tgt_agent_process_work()
927 sbp_send_status(req); in tgt_agent_process_work()
928 sbp_free_request(req); in tgt_agent_process_work()
952 struct sbp_target_request *req; in tgt_agent_fetch_work() local
958 req = kzalloc(sizeof(*req), GFP_KERNEL); in tgt_agent_fetch_work()
959 if (!req) { in tgt_agent_fetch_work()
966 req->login = agent->login; in tgt_agent_fetch_work()
967 req->orb_pointer = next_orb; in tgt_agent_fetch_work()
969 req->status.status = cpu_to_be32(STATUS_BLOCK_ORB_OFFSET_HIGH( in tgt_agent_fetch_work()
970 req->orb_pointer >> 32)); in tgt_agent_fetch_work()
971 req->status.orb_low = cpu_to_be32( in tgt_agent_fetch_work()
972 req->orb_pointer & 0xfffffffc); in tgt_agent_fetch_work()
977 req->orb_pointer, &req->orb, sizeof(req->orb)); in tgt_agent_fetch_work()
980 req->status.status |= cpu_to_be32( in tgt_agent_fetch_work()
993 sbp_send_status(req); in tgt_agent_fetch_work()
994 sbp_free_request(req); in tgt_agent_fetch_work()
999 if (be32_to_cpu(req->orb.next_orb.high) & 0x80000000) { in tgt_agent_fetch_work()
1001 req->status.status |= cpu_to_be32(STATUS_BLOCK_SRC( in tgt_agent_fetch_work()
1004 next_orb = sbp2_pointer_to_addr(&req->orb.next_orb); in tgt_agent_fetch_work()
1005 req->status.status |= cpu_to_be32(STATUS_BLOCK_SRC( in tgt_agent_fetch_work()
1010 INIT_WORK(&req->work, tgt_agent_process_work); in tgt_agent_fetch_work()
1011 queue_work(system_unbound_wq, &req->work); in tgt_agent_fetch_work()
1014 sbp_free_request(req); in tgt_agent_fetch_work()
1103 static int sbp_run_request_transaction(struct sbp_target_request *req, in sbp_run_request_transaction() argument
1107 struct sbp_login_descriptor *login = req->login; in sbp_run_request_transaction()
1127 static int sbp_fetch_command(struct sbp_target_request *req) in sbp_fetch_command() argument
1131 cmd_len = scsi_command_size(req->orb.command_block); in sbp_fetch_command()
1133 req->cmd_buf = kmalloc(cmd_len, GFP_KERNEL); in sbp_fetch_command()
1134 if (!req->cmd_buf) in sbp_fetch_command()
1137 memcpy(req->cmd_buf, req->orb.command_block, in sbp_fetch_command()
1138 min_t(int, cmd_len, sizeof(req->orb.command_block))); in sbp_fetch_command()
1140 if (cmd_len > sizeof(req->orb.command_block)) { in sbp_fetch_command()
1142 copy_len = cmd_len - sizeof(req->orb.command_block); in sbp_fetch_command()
1144 ret = sbp_run_request_transaction(req, in sbp_fetch_command()
1146 req->orb_pointer + sizeof(req->orb), in sbp_fetch_command()
1147 req->cmd_buf + sizeof(req->orb.command_block), in sbp_fetch_command()
1156 static int sbp_fetch_page_table(struct sbp_target_request *req) in sbp_fetch_page_table() argument
1161 if (!CMDBLK_ORB_PG_TBL_PRESENT(be32_to_cpu(req->orb.misc))) in sbp_fetch_page_table()
1164 pg_tbl_sz = CMDBLK_ORB_DATA_SIZE(be32_to_cpu(req->orb.misc)) * in sbp_fetch_page_table()
1171 ret = sbp_run_request_transaction(req, TCODE_READ_BLOCK_REQUEST, in sbp_fetch_page_table()
1172 sbp2_pointer_to_addr(&req->orb.data_descriptor), in sbp_fetch_page_table()
1179 req->pg_tbl = pg_tbl; in sbp_fetch_page_table()
1183 static void sbp_calc_data_length_direction(struct sbp_target_request *req, in sbp_calc_data_length_direction() argument
1188 data_size = CMDBLK_ORB_DATA_SIZE(be32_to_cpu(req->orb.misc)); in sbp_calc_data_length_direction()
1189 direction = CMDBLK_ORB_DIRECTION(be32_to_cpu(req->orb.misc)); in sbp_calc_data_length_direction()
1199 if (req->pg_tbl) { in sbp_calc_data_length_direction()
1203 req->pg_tbl[idx].segment_length); in sbp_calc_data_length_direction()
1210 static void sbp_handle_command(struct sbp_target_request *req) in sbp_handle_command() argument
1212 struct sbp_login_descriptor *login = req->login; in sbp_handle_command()
1218 ret = sbp_fetch_command(req); in sbp_handle_command()
1224 ret = sbp_fetch_page_table(req); in sbp_handle_command()
1231 unpacked_lun = req->login->lun->unpacked_lun; in sbp_handle_command()
1232 sbp_calc_data_length_direction(req, &data_length, &data_dir); in sbp_handle_command()
1235 req->orb_pointer, unpacked_lun, data_length, data_dir); in sbp_handle_command()
1237 if (target_submit_cmd(&req->se_cmd, sess->se_sess, req->cmd_buf, in sbp_handle_command()
1238 req->sense_buf, unpacked_lun, data_length, in sbp_handle_command()
1245 req->status.status |= cpu_to_be32( in sbp_handle_command()
1250 sbp_send_status(req); in sbp_handle_command()
1251 sbp_free_request(req); in sbp_handle_command()
1258 static int sbp_rw_data(struct sbp_target_request *req) in sbp_rw_data() argument
1260 struct sbp_session *sess = req->login->sess; in sbp_rw_data()
1269 if (req->se_cmd.data_direction == DMA_FROM_DEVICE) { in sbp_rw_data()
1277 max_payload = 4 << CMDBLK_ORB_MAX_PAYLOAD(be32_to_cpu(req->orb.misc)); in sbp_rw_data()
1278 speed = CMDBLK_ORB_SPEED(be32_to_cpu(req->orb.misc)); in sbp_rw_data()
1280 pg_size = CMDBLK_ORB_PG_SIZE(be32_to_cpu(req->orb.misc)); in sbp_rw_data()
1292 if (req->pg_tbl) { in sbp_rw_data()
1293 pte = req->pg_tbl; in sbp_rw_data()
1294 num_pte = CMDBLK_ORB_DATA_SIZE(be32_to_cpu(req->orb.misc)); in sbp_rw_data()
1302 offset = sbp2_pointer_to_addr(&req->orb.data_descriptor); in sbp_rw_data()
1303 length = req->se_cmd.data_length; in sbp_rw_data()
1306 sg_miter_start(&iter, req->se_cmd.t_data_sg, req->se_cmd.t_data_nents, in sbp_rw_data()
1348 static int sbp_send_status(struct sbp_target_request *req) in sbp_send_status() argument
1351 struct sbp_login_descriptor *login = req->login; in sbp_send_status()
1353 length = (((be32_to_cpu(req->status.status) >> 24) & 0x07) + 1) * 4; in sbp_send_status()
1355 ret = sbp_run_request_transaction(req, TCODE_WRITE_BLOCK_REQUEST, in sbp_send_status()
1356 login->status_fifo_addr, &req->status, length); in sbp_send_status()
1363 req->orb_pointer); in sbp_send_status()
1368 static void sbp_sense_mangle(struct sbp_target_request *req) in sbp_sense_mangle() argument
1370 struct se_cmd *se_cmd = &req->se_cmd; in sbp_sense_mangle()
1371 u8 *sense = req->sense_buf; in sbp_sense_mangle()
1372 u8 *status = req->status.data; in sbp_sense_mangle()
1392 req->status.status |= cpu_to_be32( in sbp_sense_mangle()
1428 req->status.status |= cpu_to_be32( in sbp_sense_mangle()
1435 static int sbp_send_sense(struct sbp_target_request *req) in sbp_send_sense() argument
1437 struct se_cmd *se_cmd = &req->se_cmd; in sbp_send_sense()
1440 sbp_sense_mangle(req); in sbp_send_sense()
1442 req->status.status |= cpu_to_be32( in sbp_send_sense()
1449 return sbp_send_status(req); in sbp_send_sense()
1452 static void sbp_free_request(struct sbp_target_request *req) in sbp_free_request() argument
1454 kfree(req->pg_tbl); in sbp_free_request()
1455 kfree(req->cmd_buf); in sbp_free_request()
1456 kfree(req); in sbp_free_request()
1463 struct sbp_management_request *req = agent->request; in sbp_mgt_agent_process() local
1468 ret = sbp_run_transaction(req->card, TCODE_READ_BLOCK_REQUEST, in sbp_mgt_agent_process()
1469 req->node_addr, req->generation, req->speed, in sbp_mgt_agent_process()
1470 agent->orb_offset, &req->orb, sizeof(req->orb)); in sbp_mgt_agent_process()
1477 sbp2_pointer_to_addr(&req->orb.ptr1), in sbp_mgt_agent_process()
1478 sbp2_pointer_to_addr(&req->orb.ptr2), in sbp_mgt_agent_process()
1479 be32_to_cpu(req->orb.misc), be32_to_cpu(req->orb.length), in sbp_mgt_agent_process()
1480 sbp2_pointer_to_addr(&req->orb.status_fifo)); in sbp_mgt_agent_process()
1482 if (!ORB_NOTIFY(be32_to_cpu(req->orb.misc)) || in sbp_mgt_agent_process()
1483 ORB_REQUEST_FORMAT(be32_to_cpu(req->orb.misc)) != 0) { in sbp_mgt_agent_process()
1488 switch (MANAGEMENT_ORB_FUNCTION(be32_to_cpu(req->orb.misc))) { in sbp_mgt_agent_process()
1490 sbp_management_request_login(agent, req, &status_data_len); in sbp_mgt_agent_process()
1494 sbp_management_request_query_logins(agent, req, in sbp_mgt_agent_process()
1499 sbp_management_request_reconnect(agent, req, &status_data_len); in sbp_mgt_agent_process()
1505 req->status.status = cpu_to_be32( in sbp_mgt_agent_process()
1512 sbp_management_request_logout(agent, req, &status_data_len); in sbp_mgt_agent_process()
1518 req->status.status = cpu_to_be32( in sbp_mgt_agent_process()
1527 req->status.status = cpu_to_be32( in sbp_mgt_agent_process()
1536 req->status.status = cpu_to_be32( in sbp_mgt_agent_process()
1545 req->status.status = cpu_to_be32( in sbp_mgt_agent_process()
1553 MANAGEMENT_ORB_FUNCTION(be32_to_cpu(req->orb.misc))); in sbp_mgt_agent_process()
1555 req->status.status = cpu_to_be32( in sbp_mgt_agent_process()
1562 req->status.status |= cpu_to_be32( in sbp_mgt_agent_process()
1566 req->status.orb_low = cpu_to_be32(agent->orb_offset); in sbp_mgt_agent_process()
1569 ret = sbp_run_transaction(req->card, TCODE_WRITE_BLOCK_REQUEST, in sbp_mgt_agent_process()
1570 req->node_addr, req->generation, req->speed, in sbp_mgt_agent_process()
1571 sbp2_pointer_to_addr(&req->orb.status_fifo), in sbp_mgt_agent_process()
1572 &req->status, 8 + status_data_len); in sbp_mgt_agent_process()
1579 fw_card_put(req->card); in sbp_mgt_agent_process()
1580 kfree(req); in sbp_mgt_agent_process()
1603 struct sbp_management_request *req; in sbp_mgt_agent_rw() local
1617 req = kzalloc(sizeof(*req), GFP_ATOMIC); in sbp_mgt_agent_rw()
1618 if (!req) { in sbp_mgt_agent_rw()
1623 req->card = fw_card_get(card); in sbp_mgt_agent_rw()
1624 req->generation = generation; in sbp_mgt_agent_rw()
1625 req->node_addr = source; in sbp_mgt_agent_rw()
1626 req->speed = fw_get_request_speed(request); in sbp_mgt_agent_rw()
1629 agent->request = req; in sbp_mgt_agent_rw()
1744 struct sbp_target_request *req = container_of(se_cmd, in sbp_release_cmd() local
1747 sbp_free_request(req); in sbp_release_cmd()
1767 struct sbp_target_request *req = container_of(se_cmd, in sbp_write_pending() local
1771 ret = sbp_rw_data(req); in sbp_write_pending()
1773 req->status.status |= cpu_to_be32( in sbp_write_pending()
1780 sbp_send_status(req); in sbp_write_pending()
1800 struct sbp_target_request *req = container_of(se_cmd, in sbp_get_task_tag() local
1804 return (u32)req->orb_pointer; in sbp_get_task_tag()
1814 struct sbp_target_request *req = container_of(se_cmd, in sbp_queue_data_in() local
1818 ret = sbp_rw_data(req); in sbp_queue_data_in()
1820 req->status.status |= cpu_to_be32( in sbp_queue_data_in()
1825 sbp_send_status(req); in sbp_queue_data_in()
1829 return sbp_send_sense(req); in sbp_queue_data_in()
1838 struct sbp_target_request *req = container_of(se_cmd, in sbp_queue_status() local
1841 return sbp_send_sense(req); in sbp_queue_status()
1855 struct sbp_target_request *req = container_of(se_cmd, in sbp_check_stop_free() local
1858 transport_generic_free_cmd(&req->se_cmd, 0); in sbp_check_stop_free()