Lines Matching refs:request_id
357 static int tw_post_command_packet(TW_Device_Extension *tw_dev, int request_id) in tw_post_command_packet() argument
363 command_que_value = tw_dev->command_packet_physical_address[request_id]; in tw_post_command_packet()
374 tw_dev->state[request_id] = TW_S_POSTED; in tw_post_command_packet()
381 if (tw_dev->state[request_id] != TW_S_PENDING) { in tw_post_command_packet()
382 tw_dev->state[request_id] = TW_S_PENDING; in tw_post_command_packet()
387 tw_dev->pending_queue[tw_dev->pending_tail] = request_id; in tw_post_command_packet()
401 static int tw_decode_sense(TW_Device_Extension *tw_dev, int request_id, int fill_sense) in tw_decode_sense() argument
407 command = (TW_Command *)tw_dev->command_packet_virtual_address[request_id]; in tw_decode_sense()
418 tw_dev->srb[request_id]->sense_buffer[0] = (0x1 << 7 | 0x70); in tw_decode_sense()
421 tw_dev->srb[request_id]->sense_buffer[2] = tw_sense_table[i][1]; in tw_decode_sense()
424 tw_dev->srb[request_id]->sense_buffer[7] = 0xa; /* 10 bytes */ in tw_decode_sense()
427 tw_dev->srb[request_id]->sense_buffer[12] = tw_sense_table[i][2]; in tw_decode_sense()
430 tw_dev->srb[request_id]->sense_buffer[13] = tw_sense_table[i][3]; in tw_decode_sense()
432 tw_dev->srb[request_id]->result = (DID_OK << 16) | SAM_STAT_CHECK_CONDITION; in tw_decode_sense()
474 static void tw_state_request_finish(TW_Device_Extension *tw_dev, int request_id) in tw_state_request_finish() argument
476 tw_dev->free_queue[tw_dev->free_tail] = request_id; in tw_state_request_finish()
477 tw_dev->state[request_id] = TW_S_FINISHED; in tw_state_request_finish()
482 static void tw_state_request_start(TW_Device_Extension *tw_dev, int *request_id) in tw_state_request_start() argument
484 *request_id = tw_dev->free_queue[tw_dev->free_head]; in tw_state_request_start()
486 tw_dev->state[*request_id] = TW_S_STARTED; in tw_state_request_start()
541 static int tw_aen_read_queue(TW_Device_Extension *tw_dev, int request_id) in tw_aen_read_queue() argument
557 if (tw_dev->command_packet_virtual_address[request_id] == NULL) { in tw_aen_read_queue()
561 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id]; in tw_aen_read_queue()
565 command_packet->request_id = request_id; in tw_aen_read_queue()
569 command_que_value = tw_dev->command_packet_physical_address[request_id]; in tw_aen_read_queue()
575 if (tw_dev->alignment_virtual_address[request_id] == NULL) { in tw_aen_read_queue()
579 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id]; in tw_aen_read_queue()
584 param_value = tw_dev->alignment_physical_address[request_id]; in tw_aen_read_queue()
595 tw_dev->srb[request_id] = NULL; /* Flag internal command */ in tw_aen_read_queue()
596 tw_dev->state[request_id] = TW_S_POSTED; in tw_aen_read_queue()
607 static int tw_aen_complete(TW_Device_Extension *tw_dev, int request_id) in tw_aen_complete() argument
614 if (tw_dev->alignment_virtual_address[request_id] == NULL) { in tw_aen_complete()
618 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id]; in tw_aen_complete()
656 error = tw_aen_read_queue(tw_dev, request_id); in tw_aen_complete()
659 tw_dev->state[request_id] = TW_S_COMPLETED; in tw_aen_complete()
660 tw_state_request_finish(tw_dev, request_id); in tw_aen_complete()
663 tw_dev->state[request_id] = TW_S_COMPLETED; in tw_aen_complete()
664 tw_state_request_finish(tw_dev, request_id); in tw_aen_complete()
675 int request_id = 0; in tw_aen_drain_queue() local
698 if (tw_dev->command_packet_virtual_address[request_id] == NULL) { in tw_aen_drain_queue()
702 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id]; in tw_aen_drain_queue()
706 command_packet->request_id = request_id; in tw_aen_drain_queue()
710 command_que_value = tw_dev->command_packet_physical_address[request_id]; in tw_aen_drain_queue()
717 if (tw_dev->alignment_virtual_address[request_id] == NULL) { in tw_aen_drain_queue()
721 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id]; in tw_aen_drain_queue()
726 param_value = tw_dev->alignment_physical_address[request_id]; in tw_aen_drain_queue()
742 request_id = TW_RESID_OUT(response_queue.response_id); in tw_aen_drain_queue()
744 if (request_id != 0) { in tw_aen_drain_queue()
753 tw_decode_sense(tw_dev, request_id, 0); in tw_aen_drain_queue()
875 int request_id; in tw_chrdev_ioctl() local
954 tw_state_request_start(tw_dev, &request_id); in tw_chrdev_ioctl()
957 tw_dev->srb[request_id] = NULL; in tw_chrdev_ioctl()
960 tw_dev->chrdev_request_id = request_id; in tw_chrdev_ioctl()
962 tw_ioctl->firmware_command.request_id = request_id; in tw_chrdev_ioctl()
980 …memcpy(tw_dev->command_packet_virtual_address[request_id], &(tw_ioctl->firmware_command), sizeof(T… in tw_chrdev_ioctl()
983 tw_post_command_packet(tw_dev, request_id); in tw_chrdev_ioctl()
1003 …memcpy(&(tw_ioctl->firmware_command), tw_dev->command_packet_virtual_address[request_id], sizeof(T… in tw_chrdev_ioctl()
1008 tw_dev->state[request_id] = TW_S_COMPLETED; in tw_chrdev_ioctl()
1009 tw_state_request_finish(tw_dev, request_id); in tw_chrdev_ioctl()
1083 int request_id = 0; in tw_initconnection() local
1088 if (tw_dev->command_packet_virtual_address[request_id] == NULL) { in tw_initconnection()
1093 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id]; in tw_initconnection()
1097 command_packet->request_id = request_id; in tw_initconnection()
1102 command_que_value = tw_dev->command_packet_physical_address[request_id]; in tw_initconnection()
1115 request_id = TW_RESID_OUT(response_queue.response_id); in tw_initconnection()
1117 if (request_id != 0) { in tw_initconnection()
1124 tw_decode_sense(tw_dev, request_id, 0); in tw_initconnection()
1138 int request_id = 0; in tw_setfeature() local
1143 if (tw_dev->command_packet_virtual_address[request_id] == NULL) { in tw_setfeature()
1147 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id]; in tw_setfeature()
1149 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id]; in tw_setfeature()
1157 param_value = tw_dev->alignment_physical_address[request_id]; in tw_setfeature()
1160 tw_dev->state[request_id] = TW_S_COMPLETED; in tw_setfeature()
1161 tw_state_request_finish(tw_dev, request_id); in tw_setfeature()
1162 tw_dev->srb[request_id]->result = (DID_OK << 16); in tw_setfeature()
1163 tw_dev->srb[request_id]->scsi_done(tw_dev->srb[request_id]); in tw_setfeature()
1169 command_packet->request_id = request_id; in tw_setfeature()
1172 command_que_value = tw_dev->command_packet_physical_address[request_id]; in tw_setfeature()
1184 request_id = TW_RESID_OUT(response_queue.response_id); in tw_setfeature()
1186 if (request_id != 0) { in tw_setfeature()
1193 tw_decode_sense(tw_dev, request_id, 0); in tw_setfeature()
1396 static int tw_scsiop_inquiry(TW_Device_Extension *tw_dev, int request_id) in tw_scsiop_inquiry() argument
1406 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id]; in tw_scsiop_inquiry()
1414 command_packet->request_id = request_id; in tw_scsiop_inquiry()
1420 if (tw_dev->alignment_virtual_address[request_id] == NULL) { in tw_scsiop_inquiry()
1424 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id]; in tw_scsiop_inquiry()
1429 param_value = tw_dev->alignment_physical_address[request_id]; in tw_scsiop_inquiry()
1437 command_que_value = tw_dev->command_packet_physical_address[request_id]; in tw_scsiop_inquiry()
1444 tw_post_command_packet(tw_dev, request_id); in tw_scsiop_inquiry()
1449 static void tw_transfer_internal(TW_Device_Extension *tw_dev, int request_id, in tw_transfer_internal() argument
1452 scsi_sg_copy_from_buffer(tw_dev->srb[request_id], data, len); in tw_transfer_internal()
1456 static int tw_scsiop_inquiry_complete(TW_Device_Extension *tw_dev, int request_id) in tw_scsiop_inquiry_complete() argument
1470 sprintf(&request_buffer[16], "Logical Disk %-2d ", tw_dev->srb[request_id]->device->id); in tw_scsiop_inquiry_complete()
1472 tw_transfer_internal(tw_dev, request_id, request_buffer, in tw_scsiop_inquiry_complete()
1475 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id]; in tw_scsiop_inquiry_complete()
1482 if (is_unit_present[tw_dev->srb[request_id]->device->id] & TW_UNIT_ONLINE) { in tw_scsiop_inquiry_complete()
1483 tw_dev->is_unit_present[tw_dev->srb[request_id]->device->id] = 1; in tw_scsiop_inquiry_complete()
1485 tw_dev->is_unit_present[tw_dev->srb[request_id]->device->id] = 0; in tw_scsiop_inquiry_complete()
1486 tw_dev->srb[request_id]->result = (DID_BAD_TARGET << 16); in tw_scsiop_inquiry_complete()
1494 static int tw_scsiop_mode_sense(TW_Device_Extension *tw_dev, int request_id) in tw_scsiop_mode_sense() argument
1504 if (tw_dev->srb[request_id]->cmnd[2] != 0x8) { in tw_scsiop_mode_sense()
1505 tw_dev->state[request_id] = TW_S_COMPLETED; in tw_scsiop_mode_sense()
1506 tw_state_request_finish(tw_dev, request_id); in tw_scsiop_mode_sense()
1507 tw_dev->srb[request_id]->result = (DID_OK << 16); in tw_scsiop_mode_sense()
1508 tw_dev->srb[request_id]->scsi_done(tw_dev->srb[request_id]); in tw_scsiop_mode_sense()
1513 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id]; in tw_scsiop_mode_sense()
1523 command_packet->request_id = request_id; in tw_scsiop_mode_sense()
1529 if (tw_dev->alignment_virtual_address[request_id] == NULL) { in tw_scsiop_mode_sense()
1534 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id]; in tw_scsiop_mode_sense()
1536 param->table_id = TW_UNIT_INFORMATION_TABLE_BASE + tw_dev->srb[request_id]->device->id; in tw_scsiop_mode_sense()
1539 param_value = tw_dev->alignment_physical_address[request_id]; in tw_scsiop_mode_sense()
1547 command_que_value = tw_dev->command_packet_physical_address[request_id]; in tw_scsiop_mode_sense()
1554 tw_post_command_packet(tw_dev, request_id); in tw_scsiop_mode_sense()
1560 static int tw_scsiop_mode_sense_complete(TW_Device_Extension *tw_dev, int request_id) in tw_scsiop_mode_sense_complete() argument
1568 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id]; in tw_scsiop_mode_sense_complete()
1586 tw_transfer_internal(tw_dev, request_id, request_buffer, in tw_scsiop_mode_sense_complete()
1593 static int tw_scsiop_read_capacity(TW_Device_Extension *tw_dev, int request_id) in tw_scsiop_read_capacity() argument
1603 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id]; in tw_scsiop_read_capacity()
1612 command_packet->request_id = request_id; in tw_scsiop_read_capacity()
1613 command_packet->unit__hostid = TW_UNITHOST_IN(0, tw_dev->srb[request_id]->device->id); in tw_scsiop_read_capacity()
1619 if (tw_dev->alignment_virtual_address[request_id] == NULL) { in tw_scsiop_read_capacity()
1623 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id]; in tw_scsiop_read_capacity()
1626 tw_dev->srb[request_id]->device->id; in tw_scsiop_read_capacity()
1629 param_value = tw_dev->alignment_physical_address[request_id]; in tw_scsiop_read_capacity()
1637 command_que_value = tw_dev->command_packet_physical_address[request_id]; in tw_scsiop_read_capacity()
1644 tw_post_command_packet(tw_dev, request_id); in tw_scsiop_read_capacity()
1650 static int tw_scsiop_read_capacity_complete(TW_Device_Extension *tw_dev, int request_id) in tw_scsiop_read_capacity_complete() argument
1660 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id]; in tw_scsiop_read_capacity_complete()
1687 tw_transfer_internal(tw_dev, request_id, buff, sizeof(buff)); in tw_scsiop_read_capacity_complete()
1693 static int tw_scsiop_read_write(TW_Device_Extension *tw_dev, int request_id) in tw_scsiop_read_write() argument
1704 srb = tw_dev->srb[request_id]; in tw_scsiop_read_write()
1713 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id]; in tw_scsiop_read_write()
1726 command_packet->request_id = request_id; in tw_scsiop_read_write()
1757 scsi_for_each_sg(tw_dev->srb[request_id], sg, use_sg, i) { in tw_scsiop_read_write()
1764 tw_dev->sgl_entries = scsi_sg_count(tw_dev->srb[request_id]); in tw_scsiop_read_write()
1768 command_que_value = tw_dev->command_packet_physical_address[request_id]; in tw_scsiop_read_write()
1775 tw_post_command_packet(tw_dev, request_id); in tw_scsiop_read_write()
1781 static int tw_scsiop_request_sense(TW_Device_Extension *tw_dev, int request_id) in tw_scsiop_request_sense() argument
1791 tw_transfer_internal(tw_dev, request_id, request_buffer, in tw_scsiop_request_sense()
1794 tw_dev->state[request_id] = TW_S_COMPLETED; in tw_scsiop_request_sense()
1795 tw_state_request_finish(tw_dev, request_id); in tw_scsiop_request_sense()
1798 tw_dev->srb[request_id]->result = (DID_ERROR << 16); in tw_scsiop_request_sense()
1799 tw_dev->srb[request_id]->scsi_done(tw_dev->srb[request_id]); in tw_scsiop_request_sense()
1805 static int tw_scsiop_synchronize_cache(TW_Device_Extension *tw_dev, int request_id) in tw_scsiop_synchronize_cache() argument
1813 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id]; in tw_scsiop_synchronize_cache()
1823 command_packet->request_id = request_id; in tw_scsiop_synchronize_cache()
1824 command_packet->unit__hostid = TW_UNITHOST_IN(0, tw_dev->srb[request_id]->device->id); in tw_scsiop_synchronize_cache()
1828 command_que_value = tw_dev->command_packet_physical_address[request_id]; in tw_scsiop_synchronize_cache()
1835 tw_post_command_packet(tw_dev, request_id); in tw_scsiop_synchronize_cache()
1841 static int tw_scsiop_test_unit_ready(TW_Device_Extension *tw_dev, int request_id) in tw_scsiop_test_unit_ready() argument
1851 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id]; in tw_scsiop_test_unit_ready()
1859 command_packet->request_id = request_id; in tw_scsiop_test_unit_ready()
1865 if (tw_dev->alignment_virtual_address[request_id] == NULL) { in tw_scsiop_test_unit_ready()
1869 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id]; in tw_scsiop_test_unit_ready()
1874 param_value = tw_dev->alignment_physical_address[request_id]; in tw_scsiop_test_unit_ready()
1882 command_que_value = tw_dev->command_packet_physical_address[request_id]; in tw_scsiop_test_unit_ready()
1889 tw_post_command_packet(tw_dev, request_id); in tw_scsiop_test_unit_ready()
1895 static int tw_scsiop_test_unit_ready_complete(TW_Device_Extension *tw_dev, int request_id) in tw_scsiop_test_unit_ready_complete() argument
1902 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id]; in tw_scsiop_test_unit_ready_complete()
1909 if (is_unit_present[tw_dev->srb[request_id]->device->id] & TW_UNIT_ONLINE) { in tw_scsiop_test_unit_ready_complete()
1910 tw_dev->is_unit_present[tw_dev->srb[request_id]->device->id] = 1; in tw_scsiop_test_unit_ready_complete()
1912 tw_dev->is_unit_present[tw_dev->srb[request_id]->device->id] = 0; in tw_scsiop_test_unit_ready_complete()
1913 tw_dev->srb[request_id]->result = (DID_BAD_TARGET << 16); in tw_scsiop_test_unit_ready_complete()
1924 int request_id = 0; in tw_scsi_queue_lck() local
1936 tw_state_request_start(tw_dev, &request_id); in tw_scsi_queue_lck()
1939 tw_dev->srb[request_id] = SCpnt; in tw_scsi_queue_lck()
1947 retval = tw_scsiop_read_write(tw_dev, request_id); in tw_scsi_queue_lck()
1951 retval = tw_scsiop_test_unit_ready(tw_dev, request_id); in tw_scsi_queue_lck()
1955 retval = tw_scsiop_inquiry(tw_dev, request_id); in tw_scsi_queue_lck()
1959 retval = tw_scsiop_read_capacity(tw_dev, request_id); in tw_scsi_queue_lck()
1963 retval = tw_scsiop_request_sense(tw_dev, request_id); in tw_scsi_queue_lck()
1967 retval = tw_scsiop_mode_sense(tw_dev, request_id); in tw_scsi_queue_lck()
1971 retval = tw_scsiop_synchronize_cache(tw_dev, request_id); in tw_scsi_queue_lck()
1978 tw_dev->state[request_id] = TW_S_COMPLETED; in tw_scsi_queue_lck()
1979 tw_state_request_finish(tw_dev, request_id); in tw_scsi_queue_lck()
1985 tw_dev->state[request_id] = TW_S_COMPLETED; in tw_scsi_queue_lck()
1986 tw_state_request_finish(tw_dev, request_id); in tw_scsi_queue_lck()
1999 int request_id; in DEF_SCSI_QCMD() local
2042 tw_state_request_start(tw_dev, &request_id); in DEF_SCSI_QCMD()
2043 error = tw_aen_read_queue(tw_dev, request_id); in DEF_SCSI_QCMD()
2046 tw_dev->state[request_id] = TW_S_COMPLETED; in DEF_SCSI_QCMD()
2047 tw_state_request_finish(tw_dev, request_id); in DEF_SCSI_QCMD()
2055 request_id = tw_dev->pending_queue[tw_dev->pending_head]; in DEF_SCSI_QCMD()
2056 if (tw_dev->state[request_id] != TW_S_PENDING) { in DEF_SCSI_QCMD()
2060 if (tw_post_command_packet(tw_dev, request_id)==0) { in DEF_SCSI_QCMD()
2083 request_id = TW_RESID_OUT(response_que.response_id); in DEF_SCSI_QCMD()
2084 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id]; in DEF_SCSI_QCMD()
2090 if (tw_dev->srb[request_id] == NULL) { in DEF_SCSI_QCMD()
2091 tw_decode_sense(tw_dev, request_id, 0); in DEF_SCSI_QCMD()
2093 error = tw_decode_sense(tw_dev, request_id, 1); in DEF_SCSI_QCMD()
2098 if (tw_dev->state[request_id] != TW_S_POSTED) { in DEF_SCSI_QCMD()
2099 if (tw_dev->srb[request_id] != NULL) { in DEF_SCSI_QCMD()
2105 dprintk(KERN_NOTICE "3w-xxxx: tw_interrupt(): Response queue request id: %d.\n", request_id); in DEF_SCSI_QCMD()
2108 if (tw_dev->srb[request_id] == NULL) { in DEF_SCSI_QCMD()
2111 if (request_id != tw_dev->chrdev_request_id) { in DEF_SCSI_QCMD()
2112 retval = tw_aen_complete(tw_dev, request_id); in DEF_SCSI_QCMD()
2121 switch (tw_dev->srb[request_id]->cmnd[0]) { in DEF_SCSI_QCMD()
2132 error = tw_scsiop_test_unit_ready_complete(tw_dev, request_id); in DEF_SCSI_QCMD()
2136 error = tw_scsiop_inquiry_complete(tw_dev, request_id); in DEF_SCSI_QCMD()
2140 error = tw_scsiop_read_capacity_complete(tw_dev, request_id); in DEF_SCSI_QCMD()
2144 error = tw_scsiop_mode_sense_complete(tw_dev, request_id); in DEF_SCSI_QCMD()
2156 tw_dev->srb[request_id]->result = (DID_OK << 16); in DEF_SCSI_QCMD()
2162 tw_dev->srb[request_id]->result = (DID_OK << 16) | SAM_STAT_CHECK_CONDITION; in DEF_SCSI_QCMD()
2167 scsi_dma_unmap(tw_dev->srb[request_id]); in DEF_SCSI_QCMD()
2168 tw_dev->srb[request_id]->scsi_done(tw_dev->srb[request_id]); in DEF_SCSI_QCMD()
2169 tw_dev->state[request_id] = TW_S_COMPLETED; in DEF_SCSI_QCMD()
2170 tw_state_request_finish(tw_dev, request_id); in DEF_SCSI_QCMD()