• Home
  • Raw
  • Download

Lines Matching refs:req

71 static int read_peer_guid(u64 *guid, const struct sbp_management_request *req)  in read_peer_guid()  argument
76 ret = sbp_run_transaction(req->card, TCODE_READ_QUADLET_REQUEST, in read_peer_guid()
77 req->node_addr, req->generation, req->speed, in read_peer_guid()
83 ret = sbp_run_transaction(req->card, TCODE_READ_QUADLET_REQUEST, in read_peer_guid()
84 req->node_addr, req->generation, req->speed, in read_peer_guid()
294 struct sbp_management_agent *agent, struct sbp_management_request *req, in sbp_management_request_login() argument
308 LOGIN_ORB_LUN(be32_to_cpu(req->orb.misc))); in sbp_management_request_login()
311 LOGIN_ORB_LUN(be32_to_cpu(req->orb.misc))); in sbp_management_request_login()
313 req->status.status = cpu_to_be32( in sbp_management_request_login()
319 ret = read_peer_guid(&guid, req); in sbp_management_request_login()
323 req->status.status = cpu_to_be32( in sbp_management_request_login()
361 if (LOGIN_ORB_EXCLUSIVE(be32_to_cpu(req->orb.misc)) && in sbp_management_request_login()
365 req->status.status = cpu_to_be32( in sbp_management_request_login()
378 req->status.status = cpu_to_be32( in sbp_management_request_login()
392 req->status.status = cpu_to_be32( in sbp_management_request_login()
410 req->status.status = cpu_to_be32( in sbp_management_request_login()
417 sess->node_id = req->node_addr; in sbp_management_request_login()
418 sess->card = fw_card_get(req->card); in sbp_management_request_login()
419 sess->generation = req->generation; in sbp_management_request_login()
420 sess->speed = req->speed; in sbp_management_request_login()
428 1 << LOGIN_ORB_RECONNECT(be32_to_cpu(req->orb.misc)), in sbp_management_request_login()
437 req->status.status = cpu_to_be32( in sbp_management_request_login()
445 login->status_fifo_addr = sbp2_pointer_to_addr(&req->orb.status_fifo); in sbp_management_request_login()
446 login->exclusive = LOGIN_ORB_EXCLUSIVE(be32_to_cpu(req->orb.misc)); in sbp_management_request_login()
457 req->status.status = cpu_to_be32( in sbp_management_request_login()
474 req->status.status = cpu_to_be32( in sbp_management_request_login()
481 LOGIN_ORB_RESPONSE_LENGTH(be32_to_cpu(req->orb.length)), in sbp_management_request_login()
492 sbp2_pointer_to_addr(&req->orb.ptr2), response, in sbp_management_request_login()
500 req->status.status = cpu_to_be32( in sbp_management_request_login()
508 req->status.status = cpu_to_be32( in sbp_management_request_login()
514 struct sbp_management_agent *agent, struct sbp_management_request *req, in sbp_management_request_query_logins() argument
520 req->status.status = cpu_to_be32( in sbp_management_request_query_logins()
526 struct sbp_management_agent *agent, struct sbp_management_request *req, in sbp_management_request_reconnect() argument
535 ret = read_peer_guid(&guid, req); in sbp_management_request_reconnect()
539 req->status.status = cpu_to_be32( in sbp_management_request_reconnect()
548 RECONNECT_ORB_LOGIN_ID(be32_to_cpu(req->orb.misc))); in sbp_management_request_reconnect()
553 req->status.status = cpu_to_be32( in sbp_management_request_reconnect()
562 req->status.status = cpu_to_be32( in sbp_management_request_reconnect()
573 login->sess->generation = req->generation; in sbp_management_request_reconnect()
574 login->sess->node_id = req->node_addr; in sbp_management_request_reconnect()
575 login->sess->card = fw_card_get(req->card); in sbp_management_request_reconnect()
576 login->sess->speed = req->speed; in sbp_management_request_reconnect()
579 req->status.status = cpu_to_be32( in sbp_management_request_reconnect()
585 struct sbp_management_agent *agent, struct sbp_management_request *req, in sbp_management_request_logout() argument
593 id = LOGOUT_ORB_LOGIN_ID(be32_to_cpu(req->orb.misc)); in sbp_management_request_logout()
599 req->status.status = cpu_to_be32( in sbp_management_request_logout()
608 if (req->node_addr != login->sess->node_id) { in sbp_management_request_logout()
611 req->status.status = cpu_to_be32( in sbp_management_request_logout()
619 req->status.status = cpu_to_be32( in sbp_management_request_logout()
892 struct sbp_target_request *req = in tgt_agent_process_work() local
896 req->orb_pointer, in tgt_agent_process_work()
897 sbp2_pointer_to_addr(&req->orb.next_orb), in tgt_agent_process_work()
898 sbp2_pointer_to_addr(&req->orb.data_descriptor), in tgt_agent_process_work()
899 be32_to_cpu(req->orb.misc)); in tgt_agent_process_work()
901 if (req->orb_pointer >> 32) in tgt_agent_process_work()
904 switch (ORB_REQUEST_FORMAT(be32_to_cpu(req->orb.misc))) { in tgt_agent_process_work()
906 sbp_handle_command(req); in tgt_agent_process_work()
910 req->status.status |= cpu_to_be32( in tgt_agent_process_work()
917 sbp_send_status(req); in tgt_agent_process_work()
918 sbp_free_request(req); in tgt_agent_process_work()
921 req->status.status |= cpu_to_be32( in tgt_agent_process_work()
928 sbp_send_status(req); in tgt_agent_process_work()
929 sbp_free_request(req); in tgt_agent_process_work()
953 struct sbp_target_request *req; in tgt_agent_fetch_work() local
959 req = kzalloc(sizeof(*req), GFP_KERNEL); in tgt_agent_fetch_work()
960 if (!req) { in tgt_agent_fetch_work()
967 req->login = agent->login; in tgt_agent_fetch_work()
968 req->orb_pointer = next_orb; in tgt_agent_fetch_work()
970 req->status.status = cpu_to_be32(STATUS_BLOCK_ORB_OFFSET_HIGH( in tgt_agent_fetch_work()
971 req->orb_pointer >> 32)); in tgt_agent_fetch_work()
972 req->status.orb_low = cpu_to_be32( in tgt_agent_fetch_work()
973 req->orb_pointer & 0xfffffffc); in tgt_agent_fetch_work()
978 req->orb_pointer, &req->orb, sizeof(req->orb)); in tgt_agent_fetch_work()
981 req->status.status |= cpu_to_be32( in tgt_agent_fetch_work()
994 sbp_send_status(req); in tgt_agent_fetch_work()
995 sbp_free_request(req); in tgt_agent_fetch_work()
1000 if (be32_to_cpu(req->orb.next_orb.high) & 0x80000000) { in tgt_agent_fetch_work()
1002 req->status.status |= cpu_to_be32(STATUS_BLOCK_SRC( in tgt_agent_fetch_work()
1005 next_orb = sbp2_pointer_to_addr(&req->orb.next_orb); in tgt_agent_fetch_work()
1006 req->status.status |= cpu_to_be32(STATUS_BLOCK_SRC( in tgt_agent_fetch_work()
1011 INIT_WORK(&req->work, tgt_agent_process_work); in tgt_agent_fetch_work()
1012 queue_work(system_unbound_wq, &req->work); in tgt_agent_fetch_work()
1015 sbp_free_request(req); in tgt_agent_fetch_work()
1104 static int sbp_run_request_transaction(struct sbp_target_request *req, in sbp_run_request_transaction() argument
1108 struct sbp_login_descriptor *login = req->login; in sbp_run_request_transaction()
1128 static int sbp_fetch_command(struct sbp_target_request *req) in sbp_fetch_command() argument
1132 cmd_len = scsi_command_size(req->orb.command_block); in sbp_fetch_command()
1134 req->cmd_buf = kmalloc(cmd_len, GFP_KERNEL); in sbp_fetch_command()
1135 if (!req->cmd_buf) in sbp_fetch_command()
1138 memcpy(req->cmd_buf, req->orb.command_block, in sbp_fetch_command()
1139 min_t(int, cmd_len, sizeof(req->orb.command_block))); in sbp_fetch_command()
1141 if (cmd_len > sizeof(req->orb.command_block)) { in sbp_fetch_command()
1143 copy_len = cmd_len - sizeof(req->orb.command_block); in sbp_fetch_command()
1145 ret = sbp_run_request_transaction(req, in sbp_fetch_command()
1147 req->orb_pointer + sizeof(req->orb), in sbp_fetch_command()
1148 req->cmd_buf + sizeof(req->orb.command_block), in sbp_fetch_command()
1157 static int sbp_fetch_page_table(struct sbp_target_request *req) in sbp_fetch_page_table() argument
1162 if (!CMDBLK_ORB_PG_TBL_PRESENT(be32_to_cpu(req->orb.misc))) in sbp_fetch_page_table()
1165 pg_tbl_sz = CMDBLK_ORB_DATA_SIZE(be32_to_cpu(req->orb.misc)) * in sbp_fetch_page_table()
1172 ret = sbp_run_request_transaction(req, TCODE_READ_BLOCK_REQUEST, in sbp_fetch_page_table()
1173 sbp2_pointer_to_addr(&req->orb.data_descriptor), in sbp_fetch_page_table()
1180 req->pg_tbl = pg_tbl; in sbp_fetch_page_table()
1184 static void sbp_calc_data_length_direction(struct sbp_target_request *req, in sbp_calc_data_length_direction() argument
1189 data_size = CMDBLK_ORB_DATA_SIZE(be32_to_cpu(req->orb.misc)); in sbp_calc_data_length_direction()
1190 direction = CMDBLK_ORB_DIRECTION(be32_to_cpu(req->orb.misc)); in sbp_calc_data_length_direction()
1200 if (req->pg_tbl) { in sbp_calc_data_length_direction()
1204 req->pg_tbl[idx].segment_length); in sbp_calc_data_length_direction()
1211 static void sbp_handle_command(struct sbp_target_request *req) in sbp_handle_command() argument
1213 struct sbp_login_descriptor *login = req->login; in sbp_handle_command()
1219 ret = sbp_fetch_command(req); in sbp_handle_command()
1225 ret = sbp_fetch_page_table(req); in sbp_handle_command()
1232 unpacked_lun = req->login->lun->unpacked_lun; in sbp_handle_command()
1233 sbp_calc_data_length_direction(req, &data_length, &data_dir); in sbp_handle_command()
1236 req->orb_pointer, unpacked_lun, data_length, data_dir); in sbp_handle_command()
1238 if (target_submit_cmd(&req->se_cmd, sess->se_sess, req->cmd_buf, in sbp_handle_command()
1239 req->sense_buf, unpacked_lun, data_length, in sbp_handle_command()
1246 req->status.status |= cpu_to_be32( in sbp_handle_command()
1251 sbp_send_status(req); in sbp_handle_command()
1252 sbp_free_request(req); in sbp_handle_command()
1259 static int sbp_rw_data(struct sbp_target_request *req) in sbp_rw_data() argument
1261 struct sbp_session *sess = req->login->sess; in sbp_rw_data()
1270 if (req->se_cmd.data_direction == DMA_FROM_DEVICE) { in sbp_rw_data()
1278 max_payload = 4 << CMDBLK_ORB_MAX_PAYLOAD(be32_to_cpu(req->orb.misc)); in sbp_rw_data()
1279 speed = CMDBLK_ORB_SPEED(be32_to_cpu(req->orb.misc)); in sbp_rw_data()
1281 pg_size = CMDBLK_ORB_PG_SIZE(be32_to_cpu(req->orb.misc)); in sbp_rw_data()
1293 if (req->pg_tbl) { in sbp_rw_data()
1294 pte = req->pg_tbl; in sbp_rw_data()
1295 num_pte = CMDBLK_ORB_DATA_SIZE(be32_to_cpu(req->orb.misc)); in sbp_rw_data()
1303 offset = sbp2_pointer_to_addr(&req->orb.data_descriptor); in sbp_rw_data()
1304 length = req->se_cmd.data_length; in sbp_rw_data()
1307 sg_miter_start(&iter, req->se_cmd.t_data_sg, req->se_cmd.t_data_nents, in sbp_rw_data()
1349 static int sbp_send_status(struct sbp_target_request *req) in sbp_send_status() argument
1352 struct sbp_login_descriptor *login = req->login; in sbp_send_status()
1354 length = (((be32_to_cpu(req->status.status) >> 24) & 0x07) + 1) * 4; in sbp_send_status()
1356 ret = sbp_run_request_transaction(req, TCODE_WRITE_BLOCK_REQUEST, in sbp_send_status()
1357 login->status_fifo_addr, &req->status, length); in sbp_send_status()
1364 req->orb_pointer); in sbp_send_status()
1369 static void sbp_sense_mangle(struct sbp_target_request *req) in sbp_sense_mangle() argument
1371 struct se_cmd *se_cmd = &req->se_cmd; in sbp_sense_mangle()
1372 u8 *sense = req->sense_buf; in sbp_sense_mangle()
1373 u8 *status = req->status.data; in sbp_sense_mangle()
1393 req->status.status |= cpu_to_be32( in sbp_sense_mangle()
1429 req->status.status |= cpu_to_be32( in sbp_sense_mangle()
1436 static int sbp_send_sense(struct sbp_target_request *req) in sbp_send_sense() argument
1438 struct se_cmd *se_cmd = &req->se_cmd; in sbp_send_sense()
1441 sbp_sense_mangle(req); in sbp_send_sense()
1443 req->status.status |= cpu_to_be32( in sbp_send_sense()
1450 return sbp_send_status(req); in sbp_send_sense()
1453 static void sbp_free_request(struct sbp_target_request *req) in sbp_free_request() argument
1455 kfree(req->pg_tbl); in sbp_free_request()
1456 kfree(req->cmd_buf); in sbp_free_request()
1457 kfree(req); in sbp_free_request()
1464 struct sbp_management_request *req = agent->request; in sbp_mgt_agent_process() local
1469 ret = sbp_run_transaction(req->card, TCODE_READ_BLOCK_REQUEST, in sbp_mgt_agent_process()
1470 req->node_addr, req->generation, req->speed, in sbp_mgt_agent_process()
1471 agent->orb_offset, &req->orb, sizeof(req->orb)); in sbp_mgt_agent_process()
1478 sbp2_pointer_to_addr(&req->orb.ptr1), in sbp_mgt_agent_process()
1479 sbp2_pointer_to_addr(&req->orb.ptr2), in sbp_mgt_agent_process()
1480 be32_to_cpu(req->orb.misc), be32_to_cpu(req->orb.length), in sbp_mgt_agent_process()
1481 sbp2_pointer_to_addr(&req->orb.status_fifo)); in sbp_mgt_agent_process()
1483 if (!ORB_NOTIFY(be32_to_cpu(req->orb.misc)) || in sbp_mgt_agent_process()
1484 ORB_REQUEST_FORMAT(be32_to_cpu(req->orb.misc)) != 0) { in sbp_mgt_agent_process()
1489 switch (MANAGEMENT_ORB_FUNCTION(be32_to_cpu(req->orb.misc))) { in sbp_mgt_agent_process()
1491 sbp_management_request_login(agent, req, &status_data_len); in sbp_mgt_agent_process()
1495 sbp_management_request_query_logins(agent, req, in sbp_mgt_agent_process()
1500 sbp_management_request_reconnect(agent, req, &status_data_len); in sbp_mgt_agent_process()
1506 req->status.status = cpu_to_be32( in sbp_mgt_agent_process()
1513 sbp_management_request_logout(agent, req, &status_data_len); in sbp_mgt_agent_process()
1519 req->status.status = cpu_to_be32( in sbp_mgt_agent_process()
1528 req->status.status = cpu_to_be32( in sbp_mgt_agent_process()
1537 req->status.status = cpu_to_be32( in sbp_mgt_agent_process()
1546 req->status.status = cpu_to_be32( in sbp_mgt_agent_process()
1554 MANAGEMENT_ORB_FUNCTION(be32_to_cpu(req->orb.misc))); in sbp_mgt_agent_process()
1556 req->status.status = cpu_to_be32( in sbp_mgt_agent_process()
1563 req->status.status |= cpu_to_be32( in sbp_mgt_agent_process()
1567 req->status.orb_low = cpu_to_be32(agent->orb_offset); in sbp_mgt_agent_process()
1570 ret = sbp_run_transaction(req->card, TCODE_WRITE_BLOCK_REQUEST, in sbp_mgt_agent_process()
1571 req->node_addr, req->generation, req->speed, in sbp_mgt_agent_process()
1572 sbp2_pointer_to_addr(&req->orb.status_fifo), in sbp_mgt_agent_process()
1573 &req->status, 8 + status_data_len); in sbp_mgt_agent_process()
1580 fw_card_put(req->card); in sbp_mgt_agent_process()
1581 kfree(req); in sbp_mgt_agent_process()
1604 struct sbp_management_request *req; in sbp_mgt_agent_rw() local
1618 req = kzalloc(sizeof(*req), GFP_ATOMIC); in sbp_mgt_agent_rw()
1619 if (!req) { in sbp_mgt_agent_rw()
1624 req->card = fw_card_get(card); in sbp_mgt_agent_rw()
1625 req->generation = generation; in sbp_mgt_agent_rw()
1626 req->node_addr = source; in sbp_mgt_agent_rw()
1627 req->speed = fw_get_request_speed(request); in sbp_mgt_agent_rw()
1630 agent->request = req; in sbp_mgt_agent_rw()
1745 struct sbp_target_request *req = container_of(se_cmd, in sbp_release_cmd() local
1748 sbp_free_request(req); in sbp_release_cmd()
1768 struct sbp_target_request *req = container_of(se_cmd, in sbp_write_pending() local
1772 ret = sbp_rw_data(req); in sbp_write_pending()
1774 req->status.status |= cpu_to_be32( in sbp_write_pending()
1781 sbp_send_status(req); in sbp_write_pending()
1801 struct sbp_target_request *req = container_of(se_cmd, in sbp_get_task_tag() local
1805 return (u32)req->orb_pointer; in sbp_get_task_tag()
1815 struct sbp_target_request *req = container_of(se_cmd, in sbp_queue_data_in() local
1819 ret = sbp_rw_data(req); in sbp_queue_data_in()
1821 req->status.status |= cpu_to_be32( in sbp_queue_data_in()
1826 sbp_send_status(req); in sbp_queue_data_in()
1830 return sbp_send_sense(req); in sbp_queue_data_in()
1839 struct sbp_target_request *req = container_of(se_cmd, in sbp_queue_status() local
1842 return sbp_send_sense(req); in sbp_queue_status()
1852 struct sbp_target_request *req = container_of(se_cmd, in sbp_check_stop_free() local
1855 transport_generic_free_cmd(&req->se_cmd, 0); in sbp_check_stop_free()