Lines Matching refs:tw_dev

121 static void twa_aen_queue_event(TW_Device_Extension *tw_dev, TW_Command_Apache_Header *header);
122 static int twa_aen_read_queue(TW_Device_Extension *tw_dev, int request_id);
124 static void twa_aen_sync_time(TW_Device_Extension *tw_dev, int request_id);
127 static int twa_fill_sense(TW_Device_Extension *tw_dev, int request_id, int copy_sense, int print_ho…
128 static void twa_free_request_id(TW_Device_Extension *tw_dev,int request_id);
129 static void twa_get_request_id(TW_Device_Extension *tw_dev, int *request_id);
130 static int twa_initconnection(TW_Device_Extension *tw_dev, int message_credits,
140 static void twa_load_sgl(TW_Device_Extension *tw_dev, TW_Command_Full *full_command_packet, int req…
141 static int twa_poll_response(TW_Device_Extension *tw_dev, int request_id, int seconds);
142 static int twa_poll_status_gone(TW_Device_Extension *tw_dev, u32 flag, int seconds);
143 static int twa_post_command_packet(TW_Device_Extension *tw_dev, int request_id, char internal);
144 static int twa_reset_device_extension(TW_Device_Extension *tw_dev);
145 static int twa_reset_sequence(TW_Device_Extension *tw_dev, int soft_reset);
146 static int twa_scsiop_execute_scsi(TW_Device_Extension *tw_dev, int request_id, char *cdb, int use_…
147 static void twa_scsiop_execute_scsi_complete(TW_Device_Extension *tw_dev, int request_id);
157 TW_Device_Extension *tw_dev = (TW_Device_Extension *)host->hostdata; in twa_show_stats() local
161 spin_lock_irqsave(tw_dev->host->host_lock, flags); in twa_show_stats()
174 tw_dev->posted_request_count, in twa_show_stats()
175 tw_dev->max_posted_request_count, in twa_show_stats()
176 tw_dev->pending_request_count, in twa_show_stats()
177 tw_dev->max_pending_request_count, in twa_show_stats()
178 tw_dev->sgl_entries, in twa_show_stats()
179 tw_dev->max_sgl_entries, in twa_show_stats()
180 tw_dev->sector_count, in twa_show_stats()
181 tw_dev->max_sector_count, in twa_show_stats()
182 tw_dev->num_resets, in twa_show_stats()
183 tw_dev->aen_count); in twa_show_stats()
184 spin_unlock_irqrestore(tw_dev->host->host_lock, flags); in twa_show_stats()
224 static int twa_aen_complete(TW_Device_Extension *tw_dev, int request_id) in twa_aen_complete() argument
232 header = (TW_Command_Apache_Header *)tw_dev->generic_buffer_virt[request_id]; in twa_aen_complete()
233 tw_dev->posted_request_count--; in twa_aen_complete()
235 full_command_packet = tw_dev->command_packet_virt[request_id]; in twa_aen_complete()
241 if (twa_aen_read_queue(tw_dev, request_id)) in twa_aen_complete()
254 twa_aen_sync_time(tw_dev, request_id); in twa_aen_complete()
258 twa_aen_queue_event(tw_dev, header); in twa_aen_complete()
261 if (twa_aen_read_queue(tw_dev, request_id)) in twa_aen_complete()
270 tw_dev->state[request_id] = TW_S_COMPLETED; in twa_aen_complete()
271 twa_free_request_id(tw_dev, request_id); in twa_aen_complete()
272 clear_bit(TW_IN_ATTENTION_LOOP, &tw_dev->flags); in twa_aen_complete()
278 static int twa_aen_drain_queue(TW_Device_Extension *tw_dev, int no_check_reset) in twa_aen_drain_queue() argument
294 full_command_packet = tw_dev->command_packet_virt[request_id]; in twa_aen_drain_queue()
305 sglist[0].address = tw_dev->generic_buffer_phys[request_id]; in twa_aen_drain_queue()
308 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x1, "Found unaligned address during AEN drain"); in twa_aen_drain_queue()
313 tw_dev->srb[request_id] = NULL; in twa_aen_drain_queue()
317 if (twa_scsiop_execute_scsi(tw_dev, request_id, cdb, 1, sglist)) { in twa_aen_drain_queue()
318 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x2, "Error posting request sense"); in twa_aen_drain_queue()
323 if (twa_poll_response(tw_dev, request_id, 30)) { in twa_aen_drain_queue()
324 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x3, "No valid response while draining AEN queue"); in twa_aen_drain_queue()
325 tw_dev->posted_request_count--; in twa_aen_drain_queue()
329 tw_dev->posted_request_count--; in twa_aen_drain_queue()
330 header = (TW_Command_Apache_Header *)tw_dev->generic_buffer_virt[request_id]; in twa_aen_drain_queue()
356 twa_aen_queue_event(tw_dev, header); in twa_aen_drain_queue()
364 tw_dev->state[request_id] = TW_S_INITIAL; in twa_aen_drain_queue()
369 static void twa_aen_queue_event(TW_Device_Extension *tw_dev, TW_Command_Apache_Header *header) in twa_aen_queue_event() argument
377 tw_dev->aen_count++; in twa_aen_queue_event()
380 event = tw_dev->event_queue[tw_dev->error_index]; in twa_aen_queue_event()
384 if (tw_dev->host) { in twa_aen_queue_event()
385 sprintf(host, " scsi%d:", tw_dev->host->host_no); in twa_aen_queue_event()
387 tw_dev->aen_clobber = 1; in twa_aen_queue_event()
399 event->sequence_id = tw_dev->error_sequence_id; in twa_aen_queue_event()
400 tw_dev->error_sequence_id++; in twa_aen_queue_event()
416 tw_dev->aen_count--; in twa_aen_queue_event()
418 if ((tw_dev->error_index + 1) == TW_Q_LENGTH) in twa_aen_queue_event()
419 tw_dev->event_queue_wrapped = 1; in twa_aen_queue_event()
420 tw_dev->error_index = (tw_dev->error_index + 1 ) % TW_Q_LENGTH; in twa_aen_queue_event()
424 static int twa_aen_read_queue(TW_Device_Extension *tw_dev, int request_id) in twa_aen_read_queue() argument
431 full_command_packet = tw_dev->command_packet_virt[request_id]; in twa_aen_read_queue()
442 sglist[0].address = tw_dev->generic_buffer_phys[request_id]; in twa_aen_read_queue()
445 tw_dev->srb[request_id] = NULL; in twa_aen_read_queue()
448 if (twa_scsiop_execute_scsi(tw_dev, request_id, cdb, 1, sglist)) { in twa_aen_read_queue()
449 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x4, "Post failed while reading AEN queue"); in twa_aen_read_queue()
472 static void twa_aen_sync_time(TW_Device_Extension *tw_dev, int request_id) in twa_aen_sync_time() argument
481 full_command_packet = tw_dev->command_packet_virt[request_id]; in twa_aen_sync_time()
486 …command_packet->byte8_offset.param.sgl[0].address = TW_CPU_TO_SGL(tw_dev->generic_buffer_phys[requ… in twa_aen_sync_time()
492 param = (TW_Param_Apache *)tw_dev->generic_buffer_virt[request_id]; in twa_aen_sync_time()
507 tw_dev->srb[request_id] = NULL; in twa_aen_sync_time()
510 twa_post_command_packet(tw_dev, request_id, 1); in twa_aen_sync_time()
514 static int twa_allocate_memory(TW_Device_Extension *tw_dev, int size, int which) in twa_allocate_memory() argument
521 cpu_addr = pci_alloc_consistent(tw_dev->tw_pci_dev, size*TW_Q_LENGTH, &dma_handle); in twa_allocate_memory()
523 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x5, "Memory allocation failed"); in twa_allocate_memory()
528 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x6, "Failed to allocate correctly aligned memory"); in twa_allocate_memory()
529 pci_free_consistent(tw_dev->tw_pci_dev, size*TW_Q_LENGTH, cpu_addr, dma_handle); in twa_allocate_memory()
538 tw_dev->command_packet_phys[i] = dma_handle+(i*size); in twa_allocate_memory()
539 tw_dev->command_packet_virt[i] = (TW_Command_Full *)((unsigned char *)cpu_addr + (i*size)); in twa_allocate_memory()
542 tw_dev->generic_buffer_phys[i] = dma_handle+(i*size); in twa_allocate_memory()
543 tw_dev->generic_buffer_virt[i] = (unsigned long *)((unsigned char *)cpu_addr + (i*size)); in twa_allocate_memory()
568 static int twa_check_srl(TW_Device_Extension *tw_dev, int *flashed) in twa_check_srl() argument
575 if (twa_initconnection(tw_dev, TW_INIT_MESSAGE_CREDITS, in twa_check_srl()
581 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x7, "Initconnection failed while checking SRL"); in twa_check_srl()
585 tw_dev->tw_compat_info.working_srl = fw_on_ctlr_srl; in twa_check_srl()
586 tw_dev->tw_compat_info.working_branch = fw_on_ctlr_branch; in twa_check_srl()
587 tw_dev->tw_compat_info.working_build = fw_on_ctlr_build; in twa_check_srl()
591 if (twa_initconnection(tw_dev, TW_INIT_MESSAGE_CREDITS, in twa_check_srl()
598 TW_PRINTK(tw_dev->host, TW_DRIVER, 0xa, "Initconnection (base mode) failed while checking SRL"); in twa_check_srl()
603 …TW_PRINTK(tw_dev->host, TW_DRIVER, 0x32, "Firmware and driver incompatibility: please upgrade firm… in twa_check_srl()
605 …TW_PRINTK(tw_dev->host, TW_DRIVER, 0x33, "Firmware and driver incompatibility: please upgrade driv… in twa_check_srl()
609 tw_dev->tw_compat_info.working_srl = TW_BASE_FW_SRL; in twa_check_srl()
610 tw_dev->tw_compat_info.working_branch = TW_BASE_FW_BRANCH; in twa_check_srl()
611 tw_dev->tw_compat_info.working_build = TW_BASE_FW_BUILD; in twa_check_srl()
615 strlcpy(tw_dev->tw_compat_info.driver_version, TW_DRIVER_VERSION, in twa_check_srl()
616 sizeof(tw_dev->tw_compat_info.driver_version)); in twa_check_srl()
617 tw_dev->tw_compat_info.driver_srl_high = TW_CURRENT_DRIVER_SRL; in twa_check_srl()
618 tw_dev->tw_compat_info.driver_branch_high = TW_CURRENT_DRIVER_BRANCH; in twa_check_srl()
619 tw_dev->tw_compat_info.driver_build_high = TW_CURRENT_DRIVER_BUILD; in twa_check_srl()
620 tw_dev->tw_compat_info.driver_srl_low = TW_BASE_FW_SRL; in twa_check_srl()
621 tw_dev->tw_compat_info.driver_branch_low = TW_BASE_FW_BRANCH; in twa_check_srl()
622 tw_dev->tw_compat_info.driver_build_low = TW_BASE_FW_BUILD; in twa_check_srl()
623 tw_dev->tw_compat_info.fw_on_ctlr_srl = fw_on_ctlr_srl; in twa_check_srl()
624 tw_dev->tw_compat_info.fw_on_ctlr_branch = fw_on_ctlr_branch; in twa_check_srl()
625 tw_dev->tw_compat_info.fw_on_ctlr_build = fw_on_ctlr_build; in twa_check_srl()
649 TW_Device_Extension *tw_dev = twa_device_extension_list[iminor(inode)]; in twa_chrdev_ioctl() local
656 if (mutex_lock_interruptible(&tw_dev->ioctl_lock)) { in twa_chrdev_ioctl()
675 …cpu_addr = dma_alloc_coherent(&tw_dev->tw_pci_dev->dev, data_buffer_length_adjusted+sizeof(TW_Ioct… in twa_chrdev_ioctl()
690 spin_lock_irqsave(tw_dev->host->host_lock, flags); in twa_chrdev_ioctl()
691 twa_get_request_id(tw_dev, &request_id); in twa_chrdev_ioctl()
694 tw_dev->srb[request_id] = NULL; in twa_chrdev_ioctl()
697 tw_dev->chrdev_request_id = request_id; in twa_chrdev_ioctl()
702 twa_load_sgl(tw_dev, full_command_packet, request_id, dma_handle, data_buffer_length_adjusted); in twa_chrdev_ioctl()
704 …memcpy(tw_dev->command_packet_virt[request_id], &(tw_ioctl->firmware_command), sizeof(TW_Command_F… in twa_chrdev_ioctl()
707 twa_post_command_packet(tw_dev, request_id, 1); in twa_chrdev_ioctl()
708 spin_unlock_irqrestore(tw_dev->host->host_lock, flags); in twa_chrdev_ioctl()
713 …timeout = wait_event_timeout(tw_dev->ioctl_wqueue, tw_dev->chrdev_request_id == TW_IOCTL_CHRDEV_FR… in twa_chrdev_ioctl()
716 if (tw_dev->chrdev_request_id != TW_IOCTL_CHRDEV_FREE) { in twa_chrdev_ioctl()
719 tw_dev->host->host_no, TW_DRIVER, 0x37, in twa_chrdev_ioctl()
722 twa_reset_device_extension(tw_dev); in twa_chrdev_ioctl()
727 …memcpy(&(tw_ioctl->firmware_command), tw_dev->command_packet_virt[request_id], sizeof(TW_Command_F… in twa_chrdev_ioctl()
730 spin_lock_irqsave(tw_dev->host->host_lock, flags); in twa_chrdev_ioctl()
731 tw_dev->posted_request_count--; in twa_chrdev_ioctl()
732 tw_dev->state[request_id] = TW_S_COMPLETED; in twa_chrdev_ioctl()
733 twa_free_request_id(tw_dev, request_id); in twa_chrdev_ioctl()
734 spin_unlock_irqrestore(tw_dev->host->host_lock, flags); in twa_chrdev_ioctl()
740 memcpy(tw_compat_info, &tw_dev->tw_compat_info, sizeof(TW_Compatibility_Info)); in twa_chrdev_ioctl()
743 if (tw_dev->event_queue_wrapped) { in twa_chrdev_ioctl()
744 if (tw_dev->aen_clobber) { in twa_chrdev_ioctl()
746 tw_dev->aen_clobber = 0; in twa_chrdev_ioctl()
750 if (!tw_dev->error_index) { in twa_chrdev_ioctl()
756 event_index = (tw_dev->error_index - 1 + TW_Q_LENGTH) % TW_Q_LENGTH; in twa_chrdev_ioctl()
757 memcpy(tw_ioctl->data_buffer, tw_dev->event_queue[event_index], sizeof(TW_Event)); in twa_chrdev_ioctl()
758 tw_dev->event_queue[event_index]->retrieved = TW_AEN_RETRIEVED; in twa_chrdev_ioctl()
761 if (tw_dev->event_queue_wrapped) { in twa_chrdev_ioctl()
762 if (tw_dev->aen_clobber) { in twa_chrdev_ioctl()
764 tw_dev->aen_clobber = 0; in twa_chrdev_ioctl()
767 event_index = tw_dev->error_index; in twa_chrdev_ioctl()
769 if (!tw_dev->error_index) { in twa_chrdev_ioctl()
776 memcpy(tw_ioctl->data_buffer, tw_dev->event_queue[event_index], sizeof(TW_Event)); in twa_chrdev_ioctl()
777 tw_dev->event_queue[event_index]->retrieved = TW_AEN_RETRIEVED; in twa_chrdev_ioctl()
784 if (tw_dev->event_queue_wrapped) { in twa_chrdev_ioctl()
785 if (tw_dev->aen_clobber) { in twa_chrdev_ioctl()
787 tw_dev->aen_clobber = 0; in twa_chrdev_ioctl()
789 start_index = tw_dev->error_index; in twa_chrdev_ioctl()
791 if (!tw_dev->error_index) { in twa_chrdev_ioctl()
797 …event_index = (start_index + sequence_id - tw_dev->event_queue[start_index]->sequence_id + 1) % TW… in twa_chrdev_ioctl()
799 if (!(tw_dev->event_queue[event_index]->sequence_id > sequence_id)) { in twa_chrdev_ioctl()
801 tw_dev->aen_clobber = 1; in twa_chrdev_ioctl()
805 memcpy(tw_ioctl->data_buffer, tw_dev->event_queue[event_index], sizeof(TW_Event)); in twa_chrdev_ioctl()
806 tw_dev->event_queue[event_index]->retrieved = TW_AEN_RETRIEVED; in twa_chrdev_ioctl()
813 if (tw_dev->event_queue_wrapped) { in twa_chrdev_ioctl()
814 if (tw_dev->aen_clobber) { in twa_chrdev_ioctl()
816 tw_dev->aen_clobber = 0; in twa_chrdev_ioctl()
818 start_index = tw_dev->error_index; in twa_chrdev_ioctl()
820 if (!tw_dev->error_index) { in twa_chrdev_ioctl()
826 …event_index = (start_index + sequence_id - tw_dev->event_queue[start_index]->sequence_id - 1) % TW… in twa_chrdev_ioctl()
828 if (!(tw_dev->event_queue[event_index]->sequence_id < sequence_id)) { in twa_chrdev_ioctl()
830 tw_dev->aen_clobber = 1; in twa_chrdev_ioctl()
834 memcpy(tw_ioctl->data_buffer, tw_dev->event_queue[event_index], sizeof(TW_Event)); in twa_chrdev_ioctl()
835 tw_dev->event_queue[event_index]->retrieved = TW_AEN_RETRIEVED; in twa_chrdev_ioctl()
841 if ((tw_lock->force_flag == 1) || (tw_dev->ioctl_sem_lock == 0) || in twa_chrdev_ioctl()
842 ktime_after(current_time, tw_dev->ioctl_time)) { in twa_chrdev_ioctl()
843 tw_dev->ioctl_sem_lock = 1; in twa_chrdev_ioctl()
844 tw_dev->ioctl_time = ktime_add_ms(current_time, tw_lock->timeout_msec); in twa_chrdev_ioctl()
849 tw_lock->time_remaining_msec = ktime_ms_delta(tw_dev->ioctl_time, current_time); in twa_chrdev_ioctl()
853 if (tw_dev->ioctl_sem_lock == 1) { in twa_chrdev_ioctl()
854 tw_dev->ioctl_sem_lock = 0; in twa_chrdev_ioctl()
870 …dma_free_coherent(&tw_dev->tw_pci_dev->dev, data_buffer_length_adjusted+sizeof(TW_Ioctl_Buf_Apache… in twa_chrdev_ioctl()
872 mutex_unlock(&tw_dev->ioctl_lock); in twa_chrdev_ioctl()
899 static int twa_decode_bits(TW_Device_Extension *tw_dev, u32 status_reg_value) in twa_decode_bits() argument
905 TW_PRINTK(tw_dev->host, TW_DRIVER, 0xc, "PCI Parity Error: clearing"); in twa_decode_bits()
906 writel(TW_CONTROL_CLEAR_PARITY_ERROR, TW_CONTROL_REG_ADDR(tw_dev)); in twa_decode_bits()
910 TW_PRINTK(tw_dev->host, TW_DRIVER, 0xd, "PCI Abort: clearing"); in twa_decode_bits()
911 writel(TW_CONTROL_CLEAR_PCI_ABORT, TW_CONTROL_REG_ADDR(tw_dev)); in twa_decode_bits()
912 pci_write_config_word(tw_dev->tw_pci_dev, PCI_STATUS, TW_PCI_CLEAR_PCI_ABORT); in twa_decode_bits()
916 if (((tw_dev->tw_pci_dev->device != PCI_DEVICE_ID_3WARE_9650SE) && in twa_decode_bits()
917 (tw_dev->tw_pci_dev->device != PCI_DEVICE_ID_3WARE_9690SA)) || in twa_decode_bits()
918 (!test_bit(TW_IN_RESET, &tw_dev->flags))) in twa_decode_bits()
919 TW_PRINTK(tw_dev->host, TW_DRIVER, 0xe, "Controller Queue Error: clearing"); in twa_decode_bits()
920 writel(TW_CONTROL_CLEAR_QUEUE_ERROR, TW_CONTROL_REG_ADDR(tw_dev)); in twa_decode_bits()
924 if (tw_dev->reset_print == 0) { in twa_decode_bits()
925 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x10, "Microcontroller Error: clearing"); in twa_decode_bits()
926 tw_dev->reset_print = 1; in twa_decode_bits()
936 static int twa_empty_response_queue(TW_Device_Extension *tw_dev) in twa_empty_response_queue() argument
941 status_reg_value = readl(TW_STATUS_REG_ADDR(tw_dev)); in twa_empty_response_queue()
944 response_que_value = readl(TW_RESPONSE_QUEUE_REG_ADDR(tw_dev)); in twa_empty_response_queue()
945 status_reg_value = readl(TW_STATUS_REG_ADDR(tw_dev)); in twa_empty_response_queue()
957 static int twa_empty_response_queue_large(TW_Device_Extension *tw_dev) in twa_empty_response_queue_large() argument
963 if (tw_dev->tw_pci_dev->device != PCI_DEVICE_ID_3WARE_9000) { in twa_empty_response_queue_large()
966 response_que_value = readl(TW_RESPONSE_QUEUE_REG_ADDR_LARGE(tw_dev)); in twa_empty_response_queue_large()
981 static int twa_fill_sense(TW_Device_Extension *tw_dev, int request_id, int copy_sense, int print_ho… in twa_fill_sense() argument
988 full_command_packet = tw_dev->command_packet_virt[request_id]; in twa_fill_sense()
998 tw_dev->host->host_no, in twa_fill_sense()
1016 …memcpy(tw_dev->srb[request_id]->sense_buffer, full_command_packet->header.sense_data, TW_SENSE_DAT… in twa_fill_sense()
1017 tw_dev->srb[request_id]->result = (full_command_packet->command.newcommand.status << 1); in twa_fill_sense()
1027 static void twa_free_device_extension(TW_Device_Extension *tw_dev) in twa_free_device_extension() argument
1029 if (tw_dev->command_packet_virt[0]) in twa_free_device_extension()
1030 pci_free_consistent(tw_dev->tw_pci_dev, in twa_free_device_extension()
1032 tw_dev->command_packet_virt[0], in twa_free_device_extension()
1033 tw_dev->command_packet_phys[0]); in twa_free_device_extension()
1035 if (tw_dev->generic_buffer_virt[0]) in twa_free_device_extension()
1036 pci_free_consistent(tw_dev->tw_pci_dev, in twa_free_device_extension()
1038 tw_dev->generic_buffer_virt[0], in twa_free_device_extension()
1039 tw_dev->generic_buffer_phys[0]); in twa_free_device_extension()
1041 kfree(tw_dev->event_queue[0]); in twa_free_device_extension()
1045 static void twa_free_request_id(TW_Device_Extension *tw_dev, int request_id) in twa_free_request_id() argument
1047 tw_dev->free_queue[tw_dev->free_tail] = request_id; in twa_free_request_id()
1048 tw_dev->state[request_id] = TW_S_FINISHED; in twa_free_request_id()
1049 tw_dev->free_tail = (tw_dev->free_tail + 1) % TW_Q_LENGTH; in twa_free_request_id()
1053 static void *twa_get_param(TW_Device_Extension *tw_dev, int request_id, int table_id, int parameter… in twa_get_param() argument
1061 full_command_packet = tw_dev->command_packet_virt[request_id]; in twa_get_param()
1071 param = (TW_Param_Apache *)tw_dev->generic_buffer_virt[request_id]; in twa_get_param()
1077 …command_packet->byte8_offset.param.sgl[0].address = TW_CPU_TO_SGL(tw_dev->generic_buffer_phys[requ… in twa_get_param()
1081 twa_post_command_packet(tw_dev, request_id, 1); in twa_get_param()
1084 if (twa_poll_response(tw_dev, request_id, 30)) in twa_get_param()
1085 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x13, "No valid response during get param") in twa_get_param()
1089 tw_dev->posted_request_count--; in twa_get_param()
1090 tw_dev->state[request_id] = TW_S_INITIAL; in twa_get_param()
1096 static void twa_get_request_id(TW_Device_Extension *tw_dev, int *request_id) in twa_get_request_id() argument
1098 *request_id = tw_dev->free_queue[tw_dev->free_head]; in twa_get_request_id()
1099 tw_dev->free_head = (tw_dev->free_head + 1) % TW_Q_LENGTH; in twa_get_request_id()
1100 tw_dev->state[*request_id] = TW_S_STARTED; in twa_get_request_id()
1104 static int twa_initconnection(TW_Device_Extension *tw_dev, int message_credits, in twa_initconnection() argument
1120 full_command_packet = tw_dev->command_packet_virt[request_id]; in twa_initconnection()
1145 twa_post_command_packet(tw_dev, request_id, 1); in twa_initconnection()
1148 if (twa_poll_response(tw_dev, request_id, 30)) { in twa_initconnection()
1149 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x15, "No valid response during init connection"); in twa_initconnection()
1161 tw_dev->posted_request_count--; in twa_initconnection()
1162 tw_dev->state[request_id] = TW_S_INITIAL; in twa_initconnection()
1168 static int twa_initialize_device_extension(TW_Device_Extension *tw_dev) in twa_initialize_device_extension() argument
1173 if (twa_allocate_memory(tw_dev, sizeof(TW_Command_Full), 0)) { in twa_initialize_device_extension()
1174 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x16, "Command packet memory allocation failed"); in twa_initialize_device_extension()
1179 if (twa_allocate_memory(tw_dev, TW_SECTOR_SIZE, 1)) { in twa_initialize_device_extension()
1180 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x17, "Generic memory allocation failed"); in twa_initialize_device_extension()
1185 tw_dev->event_queue[0] = kcalloc(TW_Q_LENGTH, sizeof(TW_Event), GFP_KERNEL); in twa_initialize_device_extension()
1186 if (!tw_dev->event_queue[0]) { in twa_initialize_device_extension()
1187 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x18, "Event info memory allocation failed"); in twa_initialize_device_extension()
1193tw_dev->event_queue[i] = (TW_Event *)((unsigned char *)tw_dev->event_queue[0] + (i * sizeof(TW_Eve… in twa_initialize_device_extension()
1194 tw_dev->free_queue[i] = i; in twa_initialize_device_extension()
1195 tw_dev->state[i] = TW_S_INITIAL; in twa_initialize_device_extension()
1198 tw_dev->pending_head = TW_Q_START; in twa_initialize_device_extension()
1199 tw_dev->pending_tail = TW_Q_START; in twa_initialize_device_extension()
1200 tw_dev->free_head = TW_Q_START; in twa_initialize_device_extension()
1201 tw_dev->free_tail = TW_Q_START; in twa_initialize_device_extension()
1202 tw_dev->error_sequence_id = 1; in twa_initialize_device_extension()
1203 tw_dev->chrdev_request_id = TW_IOCTL_CHRDEV_FREE; in twa_initialize_device_extension()
1205 mutex_init(&tw_dev->ioctl_lock); in twa_initialize_device_extension()
1206 init_waitqueue_head(&tw_dev->ioctl_wqueue); in twa_initialize_device_extension()
1220 TW_Device_Extension *tw_dev = (TW_Device_Extension *)dev_instance; in twa_interrupt() local
1224 spin_lock(tw_dev->host->host_lock); in twa_interrupt()
1227 status_reg_value = readl(TW_STATUS_REG_ADDR(tw_dev)); in twa_interrupt()
1236 if (test_bit(TW_IN_RESET, &tw_dev->flags)) in twa_interrupt()
1241 if (twa_decode_bits(tw_dev, status_reg_value)) { in twa_interrupt()
1242 TW_CLEAR_ALL_INTERRUPTS(tw_dev); in twa_interrupt()
1249 TW_CLEAR_HOST_INTERRUPT(tw_dev); in twa_interrupt()
1253 TW_CLEAR_ATTENTION_INTERRUPT(tw_dev); in twa_interrupt()
1254 if (!(test_and_set_bit(TW_IN_ATTENTION_LOOP, &tw_dev->flags))) { in twa_interrupt()
1255 twa_get_request_id(tw_dev, &request_id); in twa_interrupt()
1257 error = twa_aen_read_queue(tw_dev, request_id); in twa_interrupt()
1259 tw_dev->state[request_id] = TW_S_COMPLETED; in twa_interrupt()
1260 twa_free_request_id(tw_dev, request_id); in twa_interrupt()
1261 clear_bit(TW_IN_ATTENTION_LOOP, &tw_dev->flags); in twa_interrupt()
1268 TW_MASK_COMMAND_INTERRUPT(tw_dev); in twa_interrupt()
1270 while (tw_dev->pending_request_count > 0) { in twa_interrupt()
1271 request_id = tw_dev->pending_queue[tw_dev->pending_head]; in twa_interrupt()
1272 if (tw_dev->state[request_id] != TW_S_PENDING) { in twa_interrupt()
1273 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x19, "Found request id that wasn't pending"); in twa_interrupt()
1274 TW_CLEAR_ALL_INTERRUPTS(tw_dev); in twa_interrupt()
1277 if (twa_post_command_packet(tw_dev, request_id, 1)==0) { in twa_interrupt()
1278 tw_dev->pending_head = (tw_dev->pending_head + 1) % TW_Q_LENGTH; in twa_interrupt()
1279 tw_dev->pending_request_count--; in twa_interrupt()
1293 response_que.value = readl(TW_RESPONSE_QUEUE_REG_ADDR(tw_dev)); in twa_interrupt()
1295 full_command_packet = tw_dev->command_packet_virt[request_id]; in twa_interrupt()
1299 if (tw_dev->srb[request_id] != NULL) { in twa_interrupt()
1300 error = twa_fill_sense(tw_dev, request_id, 1, 1); in twa_interrupt()
1303 if (request_id != tw_dev->chrdev_request_id) { in twa_interrupt()
1304 error = twa_fill_sense(tw_dev, request_id, 0, 1); in twa_interrupt()
1310 if (tw_dev->state[request_id] != TW_S_POSTED) { in twa_interrupt()
1311 if (tw_dev->srb[request_id] != NULL) { in twa_interrupt()
1312 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x1a, "Received a request id that wasn't posted"); in twa_interrupt()
1313 TW_CLEAR_ALL_INTERRUPTS(tw_dev); in twa_interrupt()
1319 if (tw_dev->srb[request_id] == NULL) { in twa_interrupt()
1320 if (request_id != tw_dev->chrdev_request_id) { in twa_interrupt()
1321 if (twa_aen_complete(tw_dev, request_id)) in twa_interrupt()
1322 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x1b, "Error completing AEN during attention interrupt"); in twa_interrupt()
1324 tw_dev->chrdev_request_id = TW_IOCTL_CHRDEV_FREE; in twa_interrupt()
1325 wake_up(&tw_dev->ioctl_wqueue); in twa_interrupt()
1330 cmd = tw_dev->srb[request_id]; in twa_interrupt()
1332 twa_scsiop_execute_scsi_complete(tw_dev, request_id); in twa_interrupt()
1346 …if (full_command_packet->command.newcommand.sg_list[0].length < scsi_bufflen(tw_dev->srb[request_i… in twa_interrupt()
1354 tw_dev->state[request_id] = TW_S_COMPLETED; in twa_interrupt()
1355 twa_free_request_id(tw_dev, request_id); in twa_interrupt()
1356 tw_dev->posted_request_count--; in twa_interrupt()
1360 status_reg_value = readl(TW_STATUS_REG_ADDR(tw_dev)); in twa_interrupt()
1362 if (twa_decode_bits(tw_dev, status_reg_value)) { in twa_interrupt()
1363 TW_CLEAR_ALL_INTERRUPTS(tw_dev); in twa_interrupt()
1371 spin_unlock(tw_dev->host->host_lock); in twa_interrupt()
1376 static void twa_load_sgl(TW_Device_Extension *tw_dev, TW_Command_Full *full_command_packet, int req… in twa_load_sgl() argument
1402 if (tw_dev->tw_pci_dev->device == PCI_DEVICE_ID_3WARE_9690SA) in twa_load_sgl()
1415 static int twa_poll_response(TW_Device_Extension *tw_dev, int request_id, int seconds) in twa_poll_response() argument
1419 TW_Command_Full *full_command_packet = tw_dev->command_packet_virt[request_id]; in twa_poll_response()
1421 if (twa_poll_status_gone(tw_dev, TW_STATUS_RESPONSE_QUEUE_EMPTY, seconds) == 0) { in twa_poll_response()
1422 response_queue.value = readl(TW_RESPONSE_QUEUE_REG_ADDR(tw_dev)); in twa_poll_response()
1425 …TW_PRINTK(tw_dev->host, TW_DRIVER, 0x1e, "Found unexpected request id while polling for response"); in twa_poll_response()
1431 twa_fill_sense(tw_dev, request_id, 0, 0); in twa_poll_response()
1438 twa_fill_sense(tw_dev, request_id, 0, 0); in twa_poll_response()
1452 static int twa_poll_status(TW_Device_Extension *tw_dev, u32 flag, int seconds) in twa_poll_status() argument
1458 status_reg_value = readl(TW_STATUS_REG_ADDR(tw_dev)); in twa_poll_status()
1462 twa_decode_bits(tw_dev, status_reg_value); in twa_poll_status()
1465 status_reg_value = readl(TW_STATUS_REG_ADDR(tw_dev)); in twa_poll_status()
1468 twa_decode_bits(tw_dev, status_reg_value); in twa_poll_status()
1481 static int twa_poll_status_gone(TW_Device_Extension *tw_dev, u32 flag, int seconds) in twa_poll_status_gone() argument
1487 status_reg_value = readl(TW_STATUS_REG_ADDR(tw_dev)); in twa_poll_status_gone()
1491 twa_decode_bits(tw_dev, status_reg_value); in twa_poll_status_gone()
1494 status_reg_value = readl(TW_STATUS_REG_ADDR(tw_dev)); in twa_poll_status_gone()
1496 twa_decode_bits(tw_dev, status_reg_value); in twa_poll_status_gone()
1509 static int twa_post_command_packet(TW_Device_Extension *tw_dev, int request_id, char internal) in twa_post_command_packet() argument
1515 command_que_value = tw_dev->command_packet_phys[request_id]; in twa_post_command_packet()
1518 if ((tw_dev->tw_pci_dev->device == PCI_DEVICE_ID_3WARE_9650SE) || in twa_post_command_packet()
1519 (tw_dev->tw_pci_dev->device == PCI_DEVICE_ID_3WARE_9690SA)) { in twa_post_command_packet()
1521 writel((u32)command_que_value, TW_COMMAND_QUEUE_REG_ADDR_LARGE(tw_dev)); in twa_post_command_packet()
1524 status_reg_value = readl(TW_STATUS_REG_ADDR(tw_dev)); in twa_post_command_packet()
1527 twa_decode_bits(tw_dev, status_reg_value); in twa_post_command_packet()
1529 …if (((tw_dev->pending_request_count > 0) && (tw_dev->state[request_id] != TW_S_PENDING)) || (statu… in twa_post_command_packet()
1538 if (tw_dev->state[request_id] != TW_S_PENDING) { in twa_post_command_packet()
1539 tw_dev->state[request_id] = TW_S_PENDING; in twa_post_command_packet()
1540 tw_dev->pending_request_count++; in twa_post_command_packet()
1541 if (tw_dev->pending_request_count > tw_dev->max_pending_request_count) { in twa_post_command_packet()
1542 tw_dev->max_pending_request_count = tw_dev->pending_request_count; in twa_post_command_packet()
1544 tw_dev->pending_queue[tw_dev->pending_tail] = request_id; in twa_post_command_packet()
1545 tw_dev->pending_tail = (tw_dev->pending_tail + 1) % TW_Q_LENGTH; in twa_post_command_packet()
1547 TW_UNMASK_COMMAND_INTERRUPT(tw_dev); in twa_post_command_packet()
1550 if ((tw_dev->tw_pci_dev->device == PCI_DEVICE_ID_3WARE_9650SE) || in twa_post_command_packet()
1551 (tw_dev->tw_pci_dev->device == PCI_DEVICE_ID_3WARE_9690SA)) { in twa_post_command_packet()
1553 writel((u32)((u64)command_que_value >> 32), TW_COMMAND_QUEUE_REG_ADDR_LARGE(tw_dev) + 0x4); in twa_post_command_packet()
1557 writel((u32)command_que_value, TW_COMMAND_QUEUE_REG_ADDR(tw_dev)); in twa_post_command_packet()
1558 writel((u32)((u64)command_que_value >> 32), TW_COMMAND_QUEUE_REG_ADDR(tw_dev) + 0x4); in twa_post_command_packet()
1560 writel(TW_COMMAND_OFFSET + command_que_value, TW_COMMAND_QUEUE_REG_ADDR(tw_dev)); in twa_post_command_packet()
1563 tw_dev->state[request_id] = TW_S_POSTED; in twa_post_command_packet()
1564 tw_dev->posted_request_count++; in twa_post_command_packet()
1565 if (tw_dev->posted_request_count > tw_dev->max_posted_request_count) { in twa_post_command_packet()
1566 tw_dev->max_posted_request_count = tw_dev->posted_request_count; in twa_post_command_packet()
1575 static int twa_reset_device_extension(TW_Device_Extension *tw_dev) in twa_reset_device_extension() argument
1581 set_bit(TW_IN_RESET, &tw_dev->flags); in twa_reset_device_extension()
1582 TW_DISABLE_INTERRUPTS(tw_dev); in twa_reset_device_extension()
1583 TW_MASK_COMMAND_INTERRUPT(tw_dev); in twa_reset_device_extension()
1584 spin_lock_irqsave(tw_dev->host->host_lock, flags); in twa_reset_device_extension()
1588 if ((tw_dev->state[i] != TW_S_FINISHED) && in twa_reset_device_extension()
1589 (tw_dev->state[i] != TW_S_INITIAL) && in twa_reset_device_extension()
1590 (tw_dev->state[i] != TW_S_COMPLETED)) { in twa_reset_device_extension()
1591 if (tw_dev->srb[i]) { in twa_reset_device_extension()
1592 struct scsi_cmnd *cmd = tw_dev->srb[i]; in twa_reset_device_extension()
1604 tw_dev->free_queue[i] = i; in twa_reset_device_extension()
1605 tw_dev->state[i] = TW_S_INITIAL; in twa_reset_device_extension()
1607 tw_dev->free_head = TW_Q_START; in twa_reset_device_extension()
1608 tw_dev->free_tail = TW_Q_START; in twa_reset_device_extension()
1609 tw_dev->posted_request_count = 0; in twa_reset_device_extension()
1610 tw_dev->pending_request_count = 0; in twa_reset_device_extension()
1611 tw_dev->pending_head = TW_Q_START; in twa_reset_device_extension()
1612 tw_dev->pending_tail = TW_Q_START; in twa_reset_device_extension()
1613 tw_dev->reset_print = 0; in twa_reset_device_extension()
1615 spin_unlock_irqrestore(tw_dev->host->host_lock, flags); in twa_reset_device_extension()
1617 if (twa_reset_sequence(tw_dev, 1)) in twa_reset_device_extension()
1620 TW_ENABLE_AND_CLEAR_INTERRUPTS(tw_dev); in twa_reset_device_extension()
1621 clear_bit(TW_IN_RESET, &tw_dev->flags); in twa_reset_device_extension()
1622 tw_dev->chrdev_request_id = TW_IOCTL_CHRDEV_FREE; in twa_reset_device_extension()
1630 static int twa_reset_sequence(TW_Device_Extension *tw_dev, int soft_reset) in twa_reset_sequence() argument
1636 TW_SOFT_RESET(tw_dev); in twa_reset_sequence()
1638 if (twa_empty_response_queue_large(tw_dev)) { in twa_reset_sequence()
1639 …TW_PRINTK(tw_dev->host, TW_DRIVER, 0x36, "Response queue (large) empty failed during reset sequenc… in twa_reset_sequence()
1647 …if (twa_poll_status(tw_dev, TW_STATUS_MICROCONTROLLER_READY | (do_soft_reset == 1 ? TW_STATUS_ATTE… in twa_reset_sequence()
1648 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x1f, "Microcontroller not ready during reset sequence"); in twa_reset_sequence()
1655 if (twa_empty_response_queue(tw_dev)) { in twa_reset_sequence()
1656 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x20, "Response queue empty failed during reset sequence"); in twa_reset_sequence()
1665 if (twa_check_srl(tw_dev, &flashed)) { in twa_reset_sequence()
1666 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x21, "Compatibility check failed during reset sequence"); in twa_reset_sequence()
1678 if (twa_aen_drain_queue(tw_dev, soft_reset)) { in twa_reset_sequence()
1679 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x22, "AEN drain failed during reset sequence"); in twa_reset_sequence()
1697 TW_Device_Extension *tw_dev; in twa_scsi_biosparam() local
1699 tw_dev = (TW_Device_Extension *)sdev->host->hostdata; in twa_scsi_biosparam()
1721 TW_Device_Extension *tw_dev = NULL; in twa_scsi_eh_reset() local
1724 tw_dev = (TW_Device_Extension *)SCpnt->device->host->hostdata; in twa_scsi_eh_reset()
1726 tw_dev->num_resets++; in twa_scsi_eh_reset()
1733 mutex_lock(&tw_dev->ioctl_lock); in twa_scsi_eh_reset()
1736 if (twa_reset_device_extension(tw_dev)) { in twa_scsi_eh_reset()
1737 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x2b, "Controller reset failed during scsi host reset"); in twa_scsi_eh_reset()
1743 mutex_unlock(&tw_dev->ioctl_lock); in twa_scsi_eh_reset()
1751 TW_Device_Extension *tw_dev = (TW_Device_Extension *)SCpnt->device->host->hostdata; in twa_scsi_queue_lck() local
1754 if (test_bit(TW_IN_RESET, &tw_dev->flags)) { in twa_scsi_queue_lck()
1760 if ((SCpnt->device->lun != 0) && (tw_dev->tw_compat_info.working_srl < TW_FW_SRL_LUNS_SUPPORTED)) { in twa_scsi_queue_lck()
1771 twa_get_request_id(tw_dev, &request_id); in twa_scsi_queue_lck()
1774 tw_dev->srb[request_id] = SCpnt; in twa_scsi_queue_lck()
1776 retval = twa_scsiop_execute_scsi(tw_dev, request_id, NULL, 0, NULL); in twa_scsi_queue_lck()
1781 twa_free_request_id(tw_dev, request_id); in twa_scsi_queue_lck()
1788 tw_dev->state[request_id] = TW_S_COMPLETED; in twa_scsi_queue_lck()
1789 twa_free_request_id(tw_dev, request_id); in twa_scsi_queue_lck()
1799 static int twa_scsiop_execute_scsi(TW_Device_Extension *tw_dev, int request_id, char *cdb, int use_… in DEF_SCSI_QCMD()
1809 if (tw_dev->srb[request_id]) { in DEF_SCSI_QCMD()
1810 srb = tw_dev->srb[request_id]; in DEF_SCSI_QCMD()
1816 full_command_packet = tw_dev->command_packet_virt[request_id]; in DEF_SCSI_QCMD()
1851 tw_dev->generic_buffer_virt[request_id], in DEF_SCSI_QCMD()
1853 command_packet->sg_list[0].address = TW_CPU_TO_SGL(tw_dev->generic_buffer_phys[request_id]); in DEF_SCSI_QCMD()
1864 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x2e, "Found unaligned sgl address during execute scsi"); in DEF_SCSI_QCMD()
1869 …_lunh = cpu_to_le16(TW_REQ_LUN_IN((srb->device->lun >> 4), scsi_sg_count(tw_dev->srb[request_id]))… in DEF_SCSI_QCMD()
1877 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x2f, "Found unaligned sgl address during internal post"); in DEF_SCSI_QCMD()
1893 tw_dev->sector_count = num_sectors; in DEF_SCSI_QCMD()
1894 if (tw_dev->sector_count > tw_dev->max_sector_count) in DEF_SCSI_QCMD()
1895 tw_dev->max_sector_count = tw_dev->sector_count; in DEF_SCSI_QCMD()
1899 tw_dev->sgl_entries = scsi_sg_count(tw_dev->srb[request_id]); in DEF_SCSI_QCMD()
1900 if (tw_dev->sgl_entries > tw_dev->max_sgl_entries) in DEF_SCSI_QCMD()
1901 tw_dev->max_sgl_entries = tw_dev->sgl_entries; in DEF_SCSI_QCMD()
1906 retval = twa_post_command_packet(tw_dev, request_id, 0); in DEF_SCSI_QCMD()
1908 twa_post_command_packet(tw_dev, request_id, 1); in DEF_SCSI_QCMD()
1916 static void twa_scsiop_execute_scsi_complete(TW_Device_Extension *tw_dev, int request_id) in twa_scsiop_execute_scsi_complete() argument
1918 struct scsi_cmnd *cmd = tw_dev->srb[request_id]; in twa_scsiop_execute_scsi_complete()
1924 void *buf = tw_dev->generic_buffer_virt[request_id]; in twa_scsiop_execute_scsi_complete()
1932 static void __twa_shutdown(TW_Device_Extension *tw_dev) in __twa_shutdown() argument
1935 TW_DISABLE_INTERRUPTS(tw_dev); in __twa_shutdown()
1938 free_irq(tw_dev->tw_pci_dev->irq, tw_dev); in __twa_shutdown()
1940 printk(KERN_WARNING "3w-9xxx: Shutting down host %d.\n", tw_dev->host->host_no); in __twa_shutdown()
1943 if (twa_initconnection(tw_dev, 1, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL)) { in __twa_shutdown()
1944 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x31, "Connection shutdown failed"); in __twa_shutdown()
1950 TW_CLEAR_ALL_INTERRUPTS(tw_dev); in __twa_shutdown()
1957 TW_Device_Extension *tw_dev = (TW_Device_Extension *)host->hostdata; in twa_shutdown() local
1959 __twa_shutdown(tw_dev); in twa_shutdown()
2005 TW_Device_Extension *tw_dev; in twa_probe() local
2033 tw_dev = (TW_Device_Extension *)host->hostdata; in twa_probe()
2036 tw_dev->host = host; in twa_probe()
2037 tw_dev->tw_pci_dev = pdev; in twa_probe()
2039 if (twa_initialize_device_extension(tw_dev)) { in twa_probe()
2040 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x25, "Failed to initialize device extension"); in twa_probe()
2048 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x26, "Failed to get mem region"); in twa_probe()
2061 tw_dev->base_addr = ioremap(mem_addr, mem_len); in twa_probe()
2062 if (!tw_dev->base_addr) { in twa_probe()
2063 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x35, "Failed to ioremap"); in twa_probe()
2069 TW_DISABLE_INTERRUPTS(tw_dev); in twa_probe()
2072 if (twa_reset_sequence(tw_dev, 0)) { in twa_probe()
2087 host->max_lun = TW_MAX_LUNS(tw_dev->tw_compat_info.working_srl); in twa_probe()
2093 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x27, "scsi add host failed"); in twa_probe()
2103 (char *)twa_get_param(tw_dev, 0, TW_VERSION_TABLE, in twa_probe()
2105 (char *)twa_get_param(tw_dev, 1, TW_VERSION_TABLE, in twa_probe()
2107 le32_to_cpu(*(int *)twa_get_param(tw_dev, 2, TW_INFORMATION_TABLE, in twa_probe()
2113 set_bit(TW_USING_MSI, &tw_dev->flags); in twa_probe()
2116 retval = request_irq(pdev->irq, twa_interrupt, IRQF_SHARED, "3w-9xxx", tw_dev); in twa_probe()
2118 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x30, "Error requesting IRQ"); in twa_probe()
2122 twa_device_extension_list[twa_device_extension_count] = tw_dev; in twa_probe()
2126 TW_ENABLE_AND_CLEAR_INTERRUPTS(tw_dev); in twa_probe()
2138 if (test_bit(TW_USING_MSI, &tw_dev->flags)) in twa_probe()
2142 iounmap(tw_dev->base_addr); in twa_probe()
2146 twa_free_device_extension(tw_dev); in twa_probe()
2158 TW_Device_Extension *tw_dev = (TW_Device_Extension *)host->hostdata; in twa_remove() local
2160 scsi_remove_host(tw_dev->host); in twa_remove()
2169 __twa_shutdown(tw_dev); in twa_remove()
2172 if (test_bit(TW_USING_MSI, &tw_dev->flags)) in twa_remove()
2176 iounmap(tw_dev->base_addr); in twa_remove()
2182 twa_free_device_extension(tw_dev); in twa_remove()
2184 scsi_host_put(tw_dev->host); in twa_remove()
2194 TW_Device_Extension *tw_dev = (TW_Device_Extension *)host->hostdata; in twa_suspend() local
2196 printk(KERN_WARNING "3w-9xxx: Suspending host %d.\n", tw_dev->host->host_no); in twa_suspend()
2198 TW_DISABLE_INTERRUPTS(tw_dev); in twa_suspend()
2199 free_irq(tw_dev->tw_pci_dev->irq, tw_dev); in twa_suspend()
2201 if (test_bit(TW_USING_MSI, &tw_dev->flags)) in twa_suspend()
2205 if (twa_initconnection(tw_dev, 1, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL)) { in twa_suspend()
2206 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x38, "Connection shutdown failed during suspend"); in twa_suspend()
2210 TW_CLEAR_ALL_INTERRUPTS(tw_dev); in twa_suspend()
2224 TW_Device_Extension *tw_dev = (TW_Device_Extension *)host->hostdata; in twa_resume() local
2226 printk(KERN_WARNING "3w-9xxx: Resuming host %d.\n", tw_dev->host->host_no); in twa_resume()
2233 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x39, "Enable device failed during resume"); in twa_resume()
2250 if (twa_reset_sequence(tw_dev, 0)) { in twa_resume()
2256 retval = request_irq(pdev->irq, twa_interrupt, IRQF_SHARED, "3w-9xxx", tw_dev); in twa_resume()
2258 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x42, "Error requesting IRQ during resume"); in twa_resume()
2264 if (test_bit(TW_USING_MSI, &tw_dev->flags)) in twa_resume()
2268 TW_ENABLE_AND_CLEAR_INTERRUPTS(tw_dev); in twa_resume()