Lines Matching refs:request_id

358 static int tw_post_command_packet(TW_Device_Extension *tw_dev, int request_id)  in tw_post_command_packet()  argument
364 command_que_value = tw_dev->command_packet_physical_address[request_id]; in tw_post_command_packet()
375 tw_dev->state[request_id] = TW_S_POSTED; in tw_post_command_packet()
382 if (tw_dev->state[request_id] != TW_S_PENDING) { in tw_post_command_packet()
383 tw_dev->state[request_id] = TW_S_PENDING; in tw_post_command_packet()
388 tw_dev->pending_queue[tw_dev->pending_tail] = request_id; in tw_post_command_packet()
402 static int tw_decode_sense(TW_Device_Extension *tw_dev, int request_id, int fill_sense) in tw_decode_sense() argument
408 command = (TW_Command *)tw_dev->command_packet_virtual_address[request_id]; in tw_decode_sense()
419 tw_dev->srb[request_id]->sense_buffer[0] = (0x1 << 7 | 0x70); in tw_decode_sense()
422 tw_dev->srb[request_id]->sense_buffer[2] = tw_sense_table[i][1]; in tw_decode_sense()
425 tw_dev->srb[request_id]->sense_buffer[7] = 0xa; /* 10 bytes */ in tw_decode_sense()
428 tw_dev->srb[request_id]->sense_buffer[12] = tw_sense_table[i][2]; in tw_decode_sense()
431 tw_dev->srb[request_id]->sense_buffer[13] = tw_sense_table[i][3]; in tw_decode_sense()
433 tw_dev->srb[request_id]->result = (DID_OK << 16) | (CHECK_CONDITION << 1); in tw_decode_sense()
475 static void tw_state_request_finish(TW_Device_Extension *tw_dev, int request_id) in tw_state_request_finish() argument
477 tw_dev->free_queue[tw_dev->free_tail] = request_id; in tw_state_request_finish()
478 tw_dev->state[request_id] = TW_S_FINISHED; in tw_state_request_finish()
483 static void tw_state_request_start(TW_Device_Extension *tw_dev, int *request_id) in tw_state_request_start() argument
485 *request_id = tw_dev->free_queue[tw_dev->free_head]; in tw_state_request_start()
487 tw_dev->state[*request_id] = TW_S_STARTED; in tw_state_request_start()
542 static int tw_aen_read_queue(TW_Device_Extension *tw_dev, int request_id) in tw_aen_read_queue() argument
558 if (tw_dev->command_packet_virtual_address[request_id] == NULL) { in tw_aen_read_queue()
562 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id]; in tw_aen_read_queue()
566 command_packet->request_id = request_id; in tw_aen_read_queue()
570 command_que_value = tw_dev->command_packet_physical_address[request_id]; in tw_aen_read_queue()
576 if (tw_dev->alignment_virtual_address[request_id] == NULL) { in tw_aen_read_queue()
580 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id]; in tw_aen_read_queue()
585 param_value = tw_dev->alignment_physical_address[request_id]; in tw_aen_read_queue()
596 tw_dev->srb[request_id] = NULL; /* Flag internal command */ in tw_aen_read_queue()
597 tw_dev->state[request_id] = TW_S_POSTED; in tw_aen_read_queue()
608 static int tw_aen_complete(TW_Device_Extension *tw_dev, int request_id) in tw_aen_complete() argument
615 if (tw_dev->alignment_virtual_address[request_id] == NULL) { in tw_aen_complete()
619 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id]; in tw_aen_complete()
657 error = tw_aen_read_queue(tw_dev, request_id); in tw_aen_complete()
660 tw_dev->state[request_id] = TW_S_COMPLETED; in tw_aen_complete()
661 tw_state_request_finish(tw_dev, request_id); in tw_aen_complete()
664 tw_dev->state[request_id] = TW_S_COMPLETED; in tw_aen_complete()
665 tw_state_request_finish(tw_dev, request_id); in tw_aen_complete()
676 int request_id = 0; in tw_aen_drain_queue() local
699 if (tw_dev->command_packet_virtual_address[request_id] == NULL) { in tw_aen_drain_queue()
703 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id]; in tw_aen_drain_queue()
707 command_packet->request_id = request_id; in tw_aen_drain_queue()
711 command_que_value = tw_dev->command_packet_physical_address[request_id]; in tw_aen_drain_queue()
718 if (tw_dev->alignment_virtual_address[request_id] == NULL) { in tw_aen_drain_queue()
722 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id]; in tw_aen_drain_queue()
727 param_value = tw_dev->alignment_physical_address[request_id]; in tw_aen_drain_queue()
743 request_id = TW_RESID_OUT(response_queue.response_id); in tw_aen_drain_queue()
745 if (request_id != 0) { in tw_aen_drain_queue()
754 tw_decode_sense(tw_dev, request_id, 0); in tw_aen_drain_queue()
874 int request_id; in tw_chrdev_ioctl() local
953 tw_state_request_start(tw_dev, &request_id); in tw_chrdev_ioctl()
956 tw_dev->srb[request_id] = NULL; in tw_chrdev_ioctl()
959 tw_dev->chrdev_request_id = request_id; in tw_chrdev_ioctl()
961 tw_ioctl->firmware_command.request_id = request_id; in tw_chrdev_ioctl()
979 …memcpy(tw_dev->command_packet_virtual_address[request_id], &(tw_ioctl->firmware_command), sizeof(T… in tw_chrdev_ioctl()
982 tw_post_command_packet(tw_dev, request_id); in tw_chrdev_ioctl()
1002 …memcpy(&(tw_ioctl->firmware_command), tw_dev->command_packet_virtual_address[request_id], sizeof(T… in tw_chrdev_ioctl()
1007 tw_dev->state[request_id] = TW_S_COMPLETED; in tw_chrdev_ioctl()
1008 tw_state_request_finish(tw_dev, request_id); in tw_chrdev_ioctl()
1072 int request_id = 0; in tw_initconnection() local
1077 if (tw_dev->command_packet_virtual_address[request_id] == NULL) { in tw_initconnection()
1082 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id]; in tw_initconnection()
1086 command_packet->request_id = request_id; in tw_initconnection()
1091 command_que_value = tw_dev->command_packet_physical_address[request_id]; in tw_initconnection()
1104 request_id = TW_RESID_OUT(response_queue.response_id); in tw_initconnection()
1106 if (request_id != 0) { in tw_initconnection()
1113 tw_decode_sense(tw_dev, request_id, 0); in tw_initconnection()
1127 int request_id = 0; in tw_setfeature() local
1132 if (tw_dev->command_packet_virtual_address[request_id] == NULL) { in tw_setfeature()
1136 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id]; in tw_setfeature()
1138 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id]; in tw_setfeature()
1146 param_value = tw_dev->alignment_physical_address[request_id]; in tw_setfeature()
1149 tw_dev->state[request_id] = TW_S_COMPLETED; in tw_setfeature()
1150 tw_state_request_finish(tw_dev, request_id); in tw_setfeature()
1151 tw_dev->srb[request_id]->result = (DID_OK << 16); in tw_setfeature()
1152 tw_dev->srb[request_id]->scsi_done(tw_dev->srb[request_id]); in tw_setfeature()
1158 command_packet->request_id = request_id; in tw_setfeature()
1161 command_que_value = tw_dev->command_packet_physical_address[request_id]; in tw_setfeature()
1173 request_id = TW_RESID_OUT(response_queue.response_id); in tw_setfeature()
1175 if (request_id != 0) { in tw_setfeature()
1182 tw_decode_sense(tw_dev, request_id, 0); in tw_setfeature()
1387 static int tw_scsiop_inquiry(TW_Device_Extension *tw_dev, int request_id) in tw_scsiop_inquiry() argument
1397 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id]; in tw_scsiop_inquiry()
1405 command_packet->request_id = request_id; in tw_scsiop_inquiry()
1411 if (tw_dev->alignment_virtual_address[request_id] == NULL) { in tw_scsiop_inquiry()
1415 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id]; in tw_scsiop_inquiry()
1420 param_value = tw_dev->alignment_physical_address[request_id]; in tw_scsiop_inquiry()
1428 command_que_value = tw_dev->command_packet_physical_address[request_id]; in tw_scsiop_inquiry()
1435 tw_post_command_packet(tw_dev, request_id); in tw_scsiop_inquiry()
1440 static void tw_transfer_internal(TW_Device_Extension *tw_dev, int request_id, in tw_transfer_internal() argument
1443 scsi_sg_copy_from_buffer(tw_dev->srb[request_id], data, len); in tw_transfer_internal()
1447 static int tw_scsiop_inquiry_complete(TW_Device_Extension *tw_dev, int request_id) in tw_scsiop_inquiry_complete() argument
1461 sprintf(&request_buffer[16], "Logical Disk %-2d ", tw_dev->srb[request_id]->device->id); in tw_scsiop_inquiry_complete()
1463 tw_transfer_internal(tw_dev, request_id, request_buffer, in tw_scsiop_inquiry_complete()
1466 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id]; in tw_scsiop_inquiry_complete()
1473 if (is_unit_present[tw_dev->srb[request_id]->device->id] & TW_UNIT_ONLINE) { in tw_scsiop_inquiry_complete()
1474 tw_dev->is_unit_present[tw_dev->srb[request_id]->device->id] = 1; in tw_scsiop_inquiry_complete()
1476 tw_dev->is_unit_present[tw_dev->srb[request_id]->device->id] = 0; in tw_scsiop_inquiry_complete()
1477 tw_dev->srb[request_id]->result = (DID_BAD_TARGET << 16); in tw_scsiop_inquiry_complete()
1485 static int tw_scsiop_mode_sense(TW_Device_Extension *tw_dev, int request_id) in tw_scsiop_mode_sense() argument
1495 if (tw_dev->srb[request_id]->cmnd[2] != 0x8) { in tw_scsiop_mode_sense()
1496 tw_dev->state[request_id] = TW_S_COMPLETED; in tw_scsiop_mode_sense()
1497 tw_state_request_finish(tw_dev, request_id); in tw_scsiop_mode_sense()
1498 tw_dev->srb[request_id]->result = (DID_OK << 16); in tw_scsiop_mode_sense()
1499 tw_dev->srb[request_id]->scsi_done(tw_dev->srb[request_id]); in tw_scsiop_mode_sense()
1504 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id]; in tw_scsiop_mode_sense()
1514 command_packet->request_id = request_id; in tw_scsiop_mode_sense()
1520 if (tw_dev->alignment_virtual_address[request_id] == NULL) { in tw_scsiop_mode_sense()
1525 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id]; in tw_scsiop_mode_sense()
1527 param->table_id = TW_UNIT_INFORMATION_TABLE_BASE + tw_dev->srb[request_id]->device->id; in tw_scsiop_mode_sense()
1530 param_value = tw_dev->alignment_physical_address[request_id]; in tw_scsiop_mode_sense()
1538 command_que_value = tw_dev->command_packet_physical_address[request_id]; in tw_scsiop_mode_sense()
1545 tw_post_command_packet(tw_dev, request_id); in tw_scsiop_mode_sense()
1551 static int tw_scsiop_mode_sense_complete(TW_Device_Extension *tw_dev, int request_id) in tw_scsiop_mode_sense_complete() argument
1559 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id]; in tw_scsiop_mode_sense_complete()
1577 tw_transfer_internal(tw_dev, request_id, request_buffer, in tw_scsiop_mode_sense_complete()
1584 static int tw_scsiop_read_capacity(TW_Device_Extension *tw_dev, int request_id) in tw_scsiop_read_capacity() argument
1594 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id]; in tw_scsiop_read_capacity()
1603 command_packet->request_id = request_id; in tw_scsiop_read_capacity()
1604 command_packet->unit__hostid = TW_UNITHOST_IN(0, tw_dev->srb[request_id]->device->id); in tw_scsiop_read_capacity()
1610 if (tw_dev->alignment_virtual_address[request_id] == NULL) { in tw_scsiop_read_capacity()
1614 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id]; in tw_scsiop_read_capacity()
1617 tw_dev->srb[request_id]->device->id; in tw_scsiop_read_capacity()
1620 param_value = tw_dev->alignment_physical_address[request_id]; in tw_scsiop_read_capacity()
1628 command_que_value = tw_dev->command_packet_physical_address[request_id]; in tw_scsiop_read_capacity()
1635 tw_post_command_packet(tw_dev, request_id); in tw_scsiop_read_capacity()
1641 static int tw_scsiop_read_capacity_complete(TW_Device_Extension *tw_dev, int request_id) in tw_scsiop_read_capacity_complete() argument
1651 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id]; in tw_scsiop_read_capacity_complete()
1678 tw_transfer_internal(tw_dev, request_id, buff, sizeof(buff)); in tw_scsiop_read_capacity_complete()
1684 static int tw_scsiop_read_write(TW_Device_Extension *tw_dev, int request_id) in tw_scsiop_read_write() argument
1695 srb = tw_dev->srb[request_id]; in tw_scsiop_read_write()
1704 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id]; in tw_scsiop_read_write()
1717 command_packet->request_id = request_id; in tw_scsiop_read_write()
1748 scsi_for_each_sg(tw_dev->srb[request_id], sg, use_sg, i) { in tw_scsiop_read_write()
1755 tw_dev->sgl_entries = scsi_sg_count(tw_dev->srb[request_id]); in tw_scsiop_read_write()
1759 command_que_value = tw_dev->command_packet_physical_address[request_id]; in tw_scsiop_read_write()
1766 tw_post_command_packet(tw_dev, request_id); in tw_scsiop_read_write()
1772 static int tw_scsiop_request_sense(TW_Device_Extension *tw_dev, int request_id) in tw_scsiop_request_sense() argument
1782 tw_transfer_internal(tw_dev, request_id, request_buffer, in tw_scsiop_request_sense()
1785 tw_dev->state[request_id] = TW_S_COMPLETED; in tw_scsiop_request_sense()
1786 tw_state_request_finish(tw_dev, request_id); in tw_scsiop_request_sense()
1789 tw_dev->srb[request_id]->result = (DID_ERROR << 16); in tw_scsiop_request_sense()
1790 tw_dev->srb[request_id]->scsi_done(tw_dev->srb[request_id]); in tw_scsiop_request_sense()
1796 static int tw_scsiop_synchronize_cache(TW_Device_Extension *tw_dev, int request_id) in tw_scsiop_synchronize_cache() argument
1804 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id]; in tw_scsiop_synchronize_cache()
1814 command_packet->request_id = request_id; in tw_scsiop_synchronize_cache()
1815 command_packet->unit__hostid = TW_UNITHOST_IN(0, tw_dev->srb[request_id]->device->id); in tw_scsiop_synchronize_cache()
1819 command_que_value = tw_dev->command_packet_physical_address[request_id]; in tw_scsiop_synchronize_cache()
1826 tw_post_command_packet(tw_dev, request_id); in tw_scsiop_synchronize_cache()
1832 static int tw_scsiop_test_unit_ready(TW_Device_Extension *tw_dev, int request_id) in tw_scsiop_test_unit_ready() argument
1842 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id]; in tw_scsiop_test_unit_ready()
1850 command_packet->request_id = request_id; in tw_scsiop_test_unit_ready()
1856 if (tw_dev->alignment_virtual_address[request_id] == NULL) { in tw_scsiop_test_unit_ready()
1860 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id]; in tw_scsiop_test_unit_ready()
1865 param_value = tw_dev->alignment_physical_address[request_id]; in tw_scsiop_test_unit_ready()
1873 command_que_value = tw_dev->command_packet_physical_address[request_id]; in tw_scsiop_test_unit_ready()
1880 tw_post_command_packet(tw_dev, request_id); in tw_scsiop_test_unit_ready()
1886 static int tw_scsiop_test_unit_ready_complete(TW_Device_Extension *tw_dev, int request_id) in tw_scsiop_test_unit_ready_complete() argument
1893 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id]; in tw_scsiop_test_unit_ready_complete()
1900 if (is_unit_present[tw_dev->srb[request_id]->device->id] & TW_UNIT_ONLINE) { in tw_scsiop_test_unit_ready_complete()
1901 tw_dev->is_unit_present[tw_dev->srb[request_id]->device->id] = 1; in tw_scsiop_test_unit_ready_complete()
1903 tw_dev->is_unit_present[tw_dev->srb[request_id]->device->id] = 0; in tw_scsiop_test_unit_ready_complete()
1904 tw_dev->srb[request_id]->result = (DID_BAD_TARGET << 16); in tw_scsiop_test_unit_ready_complete()
1915 int request_id = 0; in tw_scsi_queue_lck() local
1927 tw_state_request_start(tw_dev, &request_id); in tw_scsi_queue_lck()
1930 tw_dev->srb[request_id] = SCpnt; in tw_scsi_queue_lck()
1938 retval = tw_scsiop_read_write(tw_dev, request_id); in tw_scsi_queue_lck()
1942 retval = tw_scsiop_test_unit_ready(tw_dev, request_id); in tw_scsi_queue_lck()
1946 retval = tw_scsiop_inquiry(tw_dev, request_id); in tw_scsi_queue_lck()
1950 retval = tw_scsiop_read_capacity(tw_dev, request_id); in tw_scsi_queue_lck()
1954 retval = tw_scsiop_request_sense(tw_dev, request_id); in tw_scsi_queue_lck()
1958 retval = tw_scsiop_mode_sense(tw_dev, request_id); in tw_scsi_queue_lck()
1962 retval = tw_scsiop_synchronize_cache(tw_dev, request_id); in tw_scsi_queue_lck()
1969 tw_dev->state[request_id] = TW_S_COMPLETED; in tw_scsi_queue_lck()
1970 tw_state_request_finish(tw_dev, request_id); in tw_scsi_queue_lck()
1977 tw_dev->state[request_id] = TW_S_COMPLETED; in tw_scsi_queue_lck()
1978 tw_state_request_finish(tw_dev, request_id); in tw_scsi_queue_lck()
1991 int request_id; in DEF_SCSI_QCMD() local
2034 tw_state_request_start(tw_dev, &request_id); in DEF_SCSI_QCMD()
2035 error = tw_aen_read_queue(tw_dev, request_id); in DEF_SCSI_QCMD()
2038 tw_dev->state[request_id] = TW_S_COMPLETED; in DEF_SCSI_QCMD()
2039 tw_state_request_finish(tw_dev, request_id); in DEF_SCSI_QCMD()
2047 request_id = tw_dev->pending_queue[tw_dev->pending_head]; in DEF_SCSI_QCMD()
2048 if (tw_dev->state[request_id] != TW_S_PENDING) { in DEF_SCSI_QCMD()
2052 if (tw_post_command_packet(tw_dev, request_id)==0) { in DEF_SCSI_QCMD()
2075 request_id = TW_RESID_OUT(response_que.response_id); in DEF_SCSI_QCMD()
2076 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id]; in DEF_SCSI_QCMD()
2082 if (tw_dev->srb[request_id] == NULL) { in DEF_SCSI_QCMD()
2083 tw_decode_sense(tw_dev, request_id, 0); in DEF_SCSI_QCMD()
2085 error = tw_decode_sense(tw_dev, request_id, 1); in DEF_SCSI_QCMD()
2090 if (tw_dev->state[request_id] != TW_S_POSTED) { in DEF_SCSI_QCMD()
2091 if (tw_dev->srb[request_id] != NULL) { in DEF_SCSI_QCMD()
2097 dprintk(KERN_NOTICE "3w-xxxx: tw_interrupt(): Response queue request id: %d.\n", request_id); in DEF_SCSI_QCMD()
2100 if (tw_dev->srb[request_id] == NULL) { in DEF_SCSI_QCMD()
2103 if (request_id != tw_dev->chrdev_request_id) { in DEF_SCSI_QCMD()
2104 retval = tw_aen_complete(tw_dev, request_id); in DEF_SCSI_QCMD()
2113 switch (tw_dev->srb[request_id]->cmnd[0]) { in DEF_SCSI_QCMD()
2124 error = tw_scsiop_test_unit_ready_complete(tw_dev, request_id); in DEF_SCSI_QCMD()
2128 error = tw_scsiop_inquiry_complete(tw_dev, request_id); in DEF_SCSI_QCMD()
2132 error = tw_scsiop_read_capacity_complete(tw_dev, request_id); in DEF_SCSI_QCMD()
2136 error = tw_scsiop_mode_sense_complete(tw_dev, request_id); in DEF_SCSI_QCMD()
2148 tw_dev->srb[request_id]->result = (DID_OK << 16); in DEF_SCSI_QCMD()
2154 tw_dev->srb[request_id]->result = (DID_OK << 16) | (CHECK_CONDITION << 1); in DEF_SCSI_QCMD()
2159 scsi_dma_unmap(tw_dev->srb[request_id]); in DEF_SCSI_QCMD()
2160 tw_dev->srb[request_id]->scsi_done(tw_dev->srb[request_id]); in DEF_SCSI_QCMD()
2161 tw_dev->state[request_id] = TW_S_COMPLETED; in DEF_SCSI_QCMD()
2162 tw_state_request_finish(tw_dev, request_id); in DEF_SCSI_QCMD()