Lines Matching defs:request_id
169 Clean up request_id queueing code.
357 static int tw_post_command_packet(TW_Device_Extension *tw_dev, int request_id)
363 command_que_value = tw_dev->command_packet_physical_address[request_id];
374 tw_dev->state[request_id] = TW_S_POSTED;
381 if (tw_dev->state[request_id] != TW_S_PENDING) {
382 tw_dev->state[request_id] = TW_S_PENDING;
387 tw_dev->pending_queue[tw_dev->pending_tail] = request_id;
401 static int tw_decode_sense(TW_Device_Extension *tw_dev, int request_id, int fill_sense)
407 command = (TW_Command *)tw_dev->command_packet_virtual_address[request_id];
418 tw_dev->srb[request_id]->sense_buffer[0] = (0x1 << 7 | 0x70);
421 tw_dev->srb[request_id]->sense_buffer[2] = tw_sense_table[i][1];
424 tw_dev->srb[request_id]->sense_buffer[7] = 0xa; /* 10 bytes */
427 tw_dev->srb[request_id]->sense_buffer[12] = tw_sense_table[i][2];
430 tw_dev->srb[request_id]->sense_buffer[13] = tw_sense_table[i][3];
432 tw_dev->srb[request_id]->result = (DID_OK << 16) | (CHECK_CONDITION << 1);
473 /* This function will free a request_id */
474 static void tw_state_request_finish(TW_Device_Extension *tw_dev, int request_id)
476 tw_dev->free_queue[tw_dev->free_tail] = request_id;
477 tw_dev->state[request_id] = TW_S_FINISHED;
481 /* This function will assign an available request_id */
482 static void tw_state_request_start(TW_Device_Extension *tw_dev, int *request_id)
484 *request_id = tw_dev->free_queue[tw_dev->free_head];
486 tw_dev->state[*request_id] = TW_S_STARTED;
541 static int tw_aen_read_queue(TW_Device_Extension *tw_dev, int request_id)
557 if (tw_dev->command_packet_virtual_address[request_id] == NULL) {
561 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id];
565 command_packet->request_id = request_id;
569 command_que_value = tw_dev->command_packet_physical_address[request_id];
575 if (tw_dev->alignment_virtual_address[request_id] == NULL) {
579 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id];
584 param_value = tw_dev->alignment_physical_address[request_id];
595 tw_dev->srb[request_id] = NULL; /* Flag internal command */
596 tw_dev->state[request_id] = TW_S_POSTED;
607 static int tw_aen_complete(TW_Device_Extension *tw_dev, int request_id)
614 if (tw_dev->alignment_virtual_address[request_id] == NULL) {
618 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id];
656 error = tw_aen_read_queue(tw_dev, request_id);
659 tw_dev->state[request_id] = TW_S_COMPLETED;
660 tw_state_request_finish(tw_dev, request_id);
663 tw_dev->state[request_id] = TW_S_COMPLETED;
664 tw_state_request_finish(tw_dev, request_id);
675 int request_id = 0;
698 if (tw_dev->command_packet_virtual_address[request_id] == NULL) {
702 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id];
706 command_packet->request_id = request_id;
710 command_que_value = tw_dev->command_packet_physical_address[request_id];
717 if (tw_dev->alignment_virtual_address[request_id] == NULL) {
721 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id];
726 param_value = tw_dev->alignment_physical_address[request_id];
742 request_id = TW_RESID_OUT(response_queue.response_id);
744 if (request_id != 0) {
753 tw_decode_sense(tw_dev, request_id, 0);
875 int request_id;
954 tw_state_request_start(tw_dev, &request_id);
957 tw_dev->srb[request_id] = NULL;
960 tw_dev->chrdev_request_id = request_id;
962 tw_ioctl->firmware_command.request_id = request_id;
980 memcpy(tw_dev->command_packet_virtual_address[request_id], &(tw_ioctl->firmware_command), sizeof(TW_Command));
983 tw_post_command_packet(tw_dev, request_id);
1003 memcpy(&(tw_ioctl->firmware_command), tw_dev->command_packet_virtual_address[request_id], sizeof(TW_Command));
1008 tw_dev->state[request_id] = TW_S_COMPLETED;
1009 tw_state_request_finish(tw_dev, request_id);
1083 int request_id = 0;
1088 if (tw_dev->command_packet_virtual_address[request_id] == NULL) {
1093 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id];
1097 command_packet->request_id = request_id;
1102 command_que_value = tw_dev->command_packet_physical_address[request_id];
1115 request_id = TW_RESID_OUT(response_queue.response_id);
1117 if (request_id != 0) {
1124 tw_decode_sense(tw_dev, request_id, 0);
1138 int request_id = 0;
1143 if (tw_dev->command_packet_virtual_address[request_id] == NULL) {
1147 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id];
1149 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id];
1157 param_value = tw_dev->alignment_physical_address[request_id];
1160 tw_dev->state[request_id] = TW_S_COMPLETED;
1161 tw_state_request_finish(tw_dev, request_id);
1162 tw_dev->srb[request_id]->result = (DID_OK << 16);
1163 tw_dev->srb[request_id]->scsi_done(tw_dev->srb[request_id]);
1169 command_packet->request_id = request_id;
1172 command_que_value = tw_dev->command_packet_physical_address[request_id];
1184 request_id = TW_RESID_OUT(response_queue.response_id);
1186 if (request_id != 0) {
1193 tw_decode_sense(tw_dev, request_id, 0);
1398 static int tw_scsiop_inquiry(TW_Device_Extension *tw_dev, int request_id)
1408 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id];
1416 command_packet->request_id = request_id;
1422 if (tw_dev->alignment_virtual_address[request_id] == NULL) {
1426 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id];
1431 param_value = tw_dev->alignment_physical_address[request_id];
1439 command_que_value = tw_dev->command_packet_physical_address[request_id];
1446 tw_post_command_packet(tw_dev, request_id);
1451 static void tw_transfer_internal(TW_Device_Extension *tw_dev, int request_id,
1454 scsi_sg_copy_from_buffer(tw_dev->srb[request_id], data, len);
1458 static int tw_scsiop_inquiry_complete(TW_Device_Extension *tw_dev, int request_id)
1472 sprintf(&request_buffer[16], "Logical Disk %-2d ", tw_dev->srb[request_id]->device->id);
1474 tw_transfer_internal(tw_dev, request_id, request_buffer,
1477 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id];
1484 if (is_unit_present[tw_dev->srb[request_id]->device->id] & TW_UNIT_ONLINE) {
1485 tw_dev->is_unit_present[tw_dev->srb[request_id]->device->id] = 1;
1487 tw_dev->is_unit_present[tw_dev->srb[request_id]->device->id] = 0;
1488 tw_dev->srb[request_id]->result = (DID_BAD_TARGET << 16);
1496 static int tw_scsiop_mode_sense(TW_Device_Extension *tw_dev, int request_id)
1506 if (tw_dev->srb[request_id]->cmnd[2] != 0x8) {
1507 tw_dev->state[request_id] = TW_S_COMPLETED;
1508 tw_state_request_finish(tw_dev, request_id);
1509 tw_dev->srb[request_id]->result = (DID_OK << 16);
1510 tw_dev->srb[request_id]->scsi_done(tw_dev->srb[request_id]);
1515 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id];
1525 command_packet->request_id = request_id;
1531 if (tw_dev->alignment_virtual_address[request_id] == NULL) {
1536 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id];
1538 param->table_id = TW_UNIT_INFORMATION_TABLE_BASE + tw_dev->srb[request_id]->device->id;
1541 param_value = tw_dev->alignment_physical_address[request_id];
1549 command_que_value = tw_dev->command_packet_physical_address[request_id];
1556 tw_post_command_packet(tw_dev, request_id);
1562 static int tw_scsiop_mode_sense_complete(TW_Device_Extension *tw_dev, int request_id)
1570 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id];
1588 tw_transfer_internal(tw_dev, request_id, request_buffer,
1595 static int tw_scsiop_read_capacity(TW_Device_Extension *tw_dev, int request_id)
1605 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id];
1614 command_packet->request_id = request_id;
1615 command_packet->unit__hostid = TW_UNITHOST_IN(0, tw_dev->srb[request_id]->device->id);
1621 if (tw_dev->alignment_virtual_address[request_id] == NULL) {
1625 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id];
1628 tw_dev->srb[request_id]->device->id;
1631 param_value = tw_dev->alignment_physical_address[request_id];
1639 command_que_value = tw_dev->command_packet_physical_address[request_id];
1646 tw_post_command_packet(tw_dev, request_id);
1652 static int tw_scsiop_read_capacity_complete(TW_Device_Extension *tw_dev, int request_id)
1662 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id];
1689 tw_transfer_internal(tw_dev, request_id, buff, sizeof(buff));
1695 static int tw_scsiop_read_write(TW_Device_Extension *tw_dev, int request_id)
1706 srb = tw_dev->srb[request_id];
1715 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id];
1728 command_packet->request_id = request_id;
1759 scsi_for_each_sg(tw_dev->srb[request_id], sg, use_sg, i) {
1766 tw_dev->sgl_entries = scsi_sg_count(tw_dev->srb[request_id]);
1770 command_que_value = tw_dev->command_packet_physical_address[request_id];
1777 tw_post_command_packet(tw_dev, request_id);
1783 static int tw_scsiop_request_sense(TW_Device_Extension *tw_dev, int request_id)
1793 tw_transfer_internal(tw_dev, request_id, request_buffer,
1796 tw_dev->state[request_id] = TW_S_COMPLETED;
1797 tw_state_request_finish(tw_dev, request_id);
1800 tw_dev->srb[request_id]->result = (DID_ERROR << 16);
1801 tw_dev->srb[request_id]->scsi_done(tw_dev->srb[request_id]);
1807 static int tw_scsiop_synchronize_cache(TW_Device_Extension *tw_dev, int request_id)
1815 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id];
1825 command_packet->request_id = request_id;
1826 command_packet->unit__hostid = TW_UNITHOST_IN(0, tw_dev->srb[request_id]->device->id);
1830 command_que_value = tw_dev->command_packet_physical_address[request_id];
1837 tw_post_command_packet(tw_dev, request_id);
1843 static int tw_scsiop_test_unit_ready(TW_Device_Extension *tw_dev, int request_id)
1853 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id];
1861 command_packet->request_id = request_id;
1867 if (tw_dev->alignment_virtual_address[request_id] == NULL) {
1871 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id];
1876 param_value = tw_dev->alignment_physical_address[request_id];
1884 command_que_value = tw_dev->command_packet_physical_address[request_id];
1891 tw_post_command_packet(tw_dev, request_id);
1897 static int tw_scsiop_test_unit_ready_complete(TW_Device_Extension *tw_dev, int request_id)
1904 param = (TW_Param *)tw_dev->alignment_virtual_address[request_id];
1911 if (is_unit_present[tw_dev->srb[request_id]->device->id] & TW_UNIT_ONLINE) {
1912 tw_dev->is_unit_present[tw_dev->srb[request_id]->device->id] = 1;
1914 tw_dev->is_unit_present[tw_dev->srb[request_id]->device->id] = 0;
1915 tw_dev->srb[request_id]->result = (DID_BAD_TARGET << 16);
1926 int request_id = 0;
1938 tw_state_request_start(tw_dev, &request_id);
1941 tw_dev->srb[request_id] = SCpnt;
1949 retval = tw_scsiop_read_write(tw_dev, request_id);
1953 retval = tw_scsiop_test_unit_ready(tw_dev, request_id);
1957 retval = tw_scsiop_inquiry(tw_dev, request_id);
1961 retval = tw_scsiop_read_capacity(tw_dev, request_id);
1965 retval = tw_scsiop_request_sense(tw_dev, request_id);
1969 retval = tw_scsiop_mode_sense(tw_dev, request_id);
1973 retval = tw_scsiop_synchronize_cache(tw_dev, request_id);
1980 tw_dev->state[request_id] = TW_S_COMPLETED;
1981 tw_state_request_finish(tw_dev, request_id);
1988 tw_dev->state[request_id] = TW_S_COMPLETED;
1989 tw_state_request_finish(tw_dev, request_id);
2002 int request_id;
2045 tw_state_request_start(tw_dev, &request_id);
2046 error = tw_aen_read_queue(tw_dev, request_id);
2049 tw_dev->state[request_id] = TW_S_COMPLETED;
2050 tw_state_request_finish(tw_dev, request_id);
2058 request_id = tw_dev->pending_queue[tw_dev->pending_head];
2059 if (tw_dev->state[request_id] != TW_S_PENDING) {
2063 if (tw_post_command_packet(tw_dev, request_id)==0) {
2086 request_id = TW_RESID_OUT(response_que.response_id);
2087 command_packet = (TW_Command *)tw_dev->command_packet_virtual_address[request_id];
2093 if (tw_dev->srb[request_id] == NULL) {
2094 tw_decode_sense(tw_dev, request_id, 0);
2096 error = tw_decode_sense(tw_dev, request_id, 1);
2101 if (tw_dev->state[request_id] != TW_S_POSTED) {
2102 if (tw_dev->srb[request_id] != NULL) {
2108 dprintk(KERN_NOTICE "3w-xxxx: tw_interrupt(): Response queue request id: %d.\n", request_id);
2111 if (tw_dev->srb[request_id] == NULL) {
2114 if (request_id != tw_dev->chrdev_request_id) {
2115 retval = tw_aen_complete(tw_dev, request_id);
2124 switch (tw_dev->srb[request_id]->cmnd[0]) {
2135 error = tw_scsiop_test_unit_ready_complete(tw_dev, request_id);
2139 error = tw_scsiop_inquiry_complete(tw_dev, request_id);
2143 error = tw_scsiop_read_capacity_complete(tw_dev, request_id);
2147 error = tw_scsiop_mode_sense_complete(tw_dev, request_id);
2159 tw_dev->srb[request_id]->result = (DID_OK << 16);
2165 tw_dev->srb[request_id]->result = (DID_OK << 16) | (CHECK_CONDITION << 1);
2170 scsi_dma_unmap(tw_dev->srb[request_id]);
2171 tw_dev->srb[request_id]->scsi_done(tw_dev->srb[request_id]);
2172 tw_dev->state[request_id] = TW_S_COMPLETED;
2173 tw_state_request_finish(tw_dev, request_id);