Lines Matching refs:softs

33 pqisrc_report_pqi_capability(pqisrc_softstate_t *softs)  in pqisrc_report_pqi_capability()  argument
46 capability = os_mem_alloc(softs, sizeof(*capability)); in pqisrc_report_pqi_capability()
60 ret = os_dma_mem_alloc(softs, &pqi_cap_dma_buf); in pqisrc_report_pqi_capability()
72 ret = pqisrc_submit_admin_req(softs, &admin_req, &admin_resp); in pqisrc_report_pqi_capability()
83 softs->pqi_dev_cap.max_iqs = capability->max_iqs; in pqisrc_report_pqi_capability()
84 softs->pqi_dev_cap.max_iq_elements = capability->max_iq_elements; in pqisrc_report_pqi_capability()
85 softs->pqi_dev_cap.max_iq_elem_len = capability->max_iq_elem_len; in pqisrc_report_pqi_capability()
86 softs->pqi_dev_cap.min_iq_elem_len = capability->min_iq_elem_len; in pqisrc_report_pqi_capability()
87 softs->pqi_dev_cap.max_oqs = capability->max_oqs; in pqisrc_report_pqi_capability()
88 softs->pqi_dev_cap.max_oq_elements = capability->max_oq_elements; in pqisrc_report_pqi_capability()
89 softs->pqi_dev_cap.max_oq_elem_len = capability->max_oq_elem_len; in pqisrc_report_pqi_capability()
90 softs->pqi_dev_cap.intr_coales_time_granularity = capability->intr_coales_time_granularity; in pqisrc_report_pqi_capability()
93 softs->max_ib_iu_length_per_fw = iu_layer_desc->max_ib_iu_len; in pqisrc_report_pqi_capability()
94 softs->ib_spanning_supported = iu_layer_desc->ib_spanning_supported; in pqisrc_report_pqi_capability()
95 softs->ob_spanning_supported = iu_layer_desc->ob_spanning_supported; in pqisrc_report_pqi_capability()
97 DBG_INIT("softs->pqi_dev_cap.max_iqs: %d\n", softs->pqi_dev_cap.max_iqs); in pqisrc_report_pqi_capability()
98 DBG_INIT("softs->pqi_dev_cap.max_iq_elements: %d\n", softs->pqi_dev_cap.max_iq_elements); in pqisrc_report_pqi_capability()
99 DBG_INIT("softs->pqi_dev_cap.max_iq_elem_len: %d\n", softs->pqi_dev_cap.max_iq_elem_len); in pqisrc_report_pqi_capability()
100 DBG_INIT("softs->pqi_dev_cap.min_iq_elem_len: %d\n", softs->pqi_dev_cap.min_iq_elem_len); in pqisrc_report_pqi_capability()
101 DBG_INIT("softs->pqi_dev_cap.max_oqs: %d\n", softs->pqi_dev_cap.max_oqs); in pqisrc_report_pqi_capability()
102 DBG_INIT("softs->pqi_dev_cap.max_oq_elements: %d\n", softs->pqi_dev_cap.max_oq_elements); in pqisrc_report_pqi_capability()
103 DBG_INIT("softs->pqi_dev_cap.max_oq_elem_len: %d\n", softs->pqi_dev_cap.max_oq_elem_len); in pqisrc_report_pqi_capability()
104 …DBG_INIT("softs->pqi_dev_cap.intr_coales_time_granularity: %d\n", softs->pqi_dev_cap.intr_coales_t… in pqisrc_report_pqi_capability()
105 DBG_INIT("softs->max_ib_iu_length_per_fw: %d\n", softs->max_ib_iu_length_per_fw); in pqisrc_report_pqi_capability()
106 DBG_INIT("softs->ib_spanning_supported: %d\n", softs->ib_spanning_supported); in pqisrc_report_pqi_capability()
107 DBG_INIT("softs->ob_spanning_supported: %d\n", softs->ob_spanning_supported); in pqisrc_report_pqi_capability()
110 ASSERT(softs->pqi_dev_cap.max_iq_elem_len == PQISRC_OP_MAX_ELEM_SIZE); in pqisrc_report_pqi_capability()
111 ASSERT(softs->pqi_dev_cap.min_iq_elem_len == PQISRC_OP_MIN_ELEM_SIZE); in pqisrc_report_pqi_capability()
112 ASSERT(softs->max_ib_iu_length_per_fw == PQISRC_MAX_SPANNING_IU_LENGTH); in pqisrc_report_pqi_capability()
113 ASSERT(softs->ib_spanning_supported == true); in pqisrc_report_pqi_capability()
116 os_mem_free(softs, (void *)capability, in pqisrc_report_pqi_capability()
118 os_dma_mem_free(softs, &pqi_cap_dma_buf); in pqisrc_report_pqi_capability()
124 os_dma_mem_free(softs, &pqi_cap_dma_buf); in pqisrc_report_pqi_capability()
127 os_mem_free(softs, (void *)capability, in pqisrc_report_pqi_capability()
138 pqisrc_free_rcb(pqisrc_softstate_t *softs, int req_count) in pqisrc_free_rcb() argument
146 num_req = softs->max_outstanding_io + 1; in pqisrc_free_rcb()
149 os_dma_mem_free(softs, &softs->sg_dma_desc[i]); in pqisrc_free_rcb()
150 os_mem_free(softs, (void *)softs->rcb, size); in pqisrc_free_rcb()
151 softs->rcb = NULL; in pqisrc_free_rcb()
161 pqisrc_allocate_rcb(pqisrc_softstate_t *softs) in pqisrc_allocate_rcb() argument
177 softs->max_outstanding_io = softs->pqi_cap.max_outstanding_io; in pqisrc_allocate_rcb()
178 num_req = softs->max_outstanding_io + 1; in pqisrc_allocate_rcb()
184 rcb = os_mem_alloc(softs, alloc_size); in pqisrc_allocate_rcb()
190 softs->rcb = rcb; in pqisrc_allocate_rcb()
193 sg_buf_size = softs->pqi_cap.max_sg_elem * in pqisrc_allocate_rcb()
196 prcb = &softs->rcb[1]; in pqisrc_allocate_rcb()
202 os_strlcpy(softs->sg_dma_desc[i].tag, tag, sizeof(softs->sg_dma_desc[i].tag)); in pqisrc_allocate_rcb()
203 softs->sg_dma_desc[i].size = sg_buf_size; in pqisrc_allocate_rcb()
204 softs->sg_dma_desc[i].align = PQISRC_DEFAULT_DMA_ALIGN; in pqisrc_allocate_rcb()
206 ret = os_dma_mem_alloc(softs, &softs->sg_dma_desc[i]); in pqisrc_allocate_rcb()
212 prcb->sg_chain_virt = (sgt_t *)(softs->sg_dma_desc[i].virt_addr); in pqisrc_allocate_rcb()
213 prcb->sg_chain_dma = (dma_addr_t)(softs->sg_dma_desc[i].dma_addr); in pqisrc_allocate_rcb()
220 pqisrc_free_rcb(softs, i); in pqisrc_allocate_rcb()
231 pqisrc_decide_opq_config(pqisrc_softstate_t *softs) in pqisrc_decide_opq_config() argument
238 softs->intr_count, softs->num_cpus_online); in pqisrc_decide_opq_config()
242 if (softs->intr_count == 1 || softs->num_cpus_online == 1) { in pqisrc_decide_opq_config()
244 softs->num_op_obq = 1; in pqisrc_decide_opq_config()
245 softs->share_opq_and_eventq = true; in pqisrc_decide_opq_config()
249 softs->num_op_obq = MIN(softs->num_cpus_online, in pqisrc_decide_opq_config()
250 softs->intr_count) - 1; in pqisrc_decide_opq_config()
251 softs->share_opq_and_eventq = false; in pqisrc_decide_opq_config()
255 if (softs->intr_count > 1) in pqisrc_decide_opq_config()
256 softs->share_opq_and_eventq = false; in pqisrc_decide_opq_config()
258 DBG_INIT("softs->num_op_obq : %u\n",softs->num_op_obq); in pqisrc_decide_opq_config()
262 softs->num_op_raid_ibq = softs->num_op_obq; in pqisrc_decide_opq_config()
263 softs->num_op_aio_ibq = softs->num_op_raid_ibq; in pqisrc_decide_opq_config()
264 softs->max_ibq_elem_size = softs->pqi_dev_cap.max_iq_elem_len * 16; in pqisrc_decide_opq_config()
265 softs->max_obq_elem_size = softs->pqi_dev_cap.max_oq_elem_len * 16; in pqisrc_decide_opq_config()
266 if (softs->max_ib_iu_length_per_fw == 256 && in pqisrc_decide_opq_config()
267 softs->ob_spanning_supported) { in pqisrc_decide_opq_config()
269 softs->max_ib_iu_length = softs->max_ibq_elem_size; in pqisrc_decide_opq_config()
272 softs->max_ib_iu_length = PQISRC_ROUND_DOWN(softs->max_ib_iu_length_per_fw, in pqisrc_decide_opq_config()
273 softs->max_ibq_elem_size); in pqisrc_decide_opq_config()
279 total_iq_elements = (softs->max_outstanding_io * in pqisrc_decide_opq_config()
280 (softs->max_ib_iu_length / softs->max_ibq_elem_size)); in pqisrc_decide_opq_config()
282 softs->num_elem_per_op_ibq = total_iq_elements / softs->num_op_raid_ibq; in pqisrc_decide_opq_config()
283 softs->num_elem_per_op_ibq = MIN(softs->num_elem_per_op_ibq, in pqisrc_decide_opq_config()
284 softs->pqi_dev_cap.max_iq_elements); in pqisrc_decide_opq_config()
286 softs->num_elem_per_op_obq = softs->max_outstanding_io / softs->num_op_obq; in pqisrc_decide_opq_config()
287 softs->num_elem_per_op_obq = MIN(softs->num_elem_per_op_obq, in pqisrc_decide_opq_config()
288 softs->pqi_dev_cap.max_oq_elements); in pqisrc_decide_opq_config()
291 softs->max_spanning_elems = softs->max_ib_iu_length/softs->max_ibq_elem_size; in pqisrc_decide_opq_config()
292 ASSERT(softs->max_spanning_elems == PQISRC_MAX_SPANNING_ELEMS); in pqisrc_decide_opq_config()
295 softs->max_sg_per_single_iu_element = softs->max_ibq_elem_size / sizeof(sgt_t); in pqisrc_decide_opq_config()
296 ASSERT(softs->max_sg_per_single_iu_element == MAX_EMBEDDED_SG_IN_IU); in pqisrc_decide_opq_config()
299 …softs->max_sg_per_spanning_cmd = (softs->max_spanning_elems - 1) * softs->max_sg_per_single_iu_ele… in pqisrc_decide_opq_config()
300 softs->max_sg_per_spanning_cmd += MAX_EMBEDDED_SG_IN_FIRST_IU_DEFAULT; in pqisrc_decide_opq_config()
302 …DBG_INIT("softs->max_ib_iu_length: %d\n", softs->max_ib_iu_length); /* 1152 per FW advertise… in pqisrc_decide_opq_config()
303 DBG_INIT("softs->num_elem_per_op_ibq: %u\n", softs->num_elem_per_op_ibq); /* 32 for xcal */ in pqisrc_decide_opq_config()
304 DBG_INIT("softs->num_elem_per_op_obq: %u\n", softs->num_elem_per_op_obq); /* 256 for xcal */ in pqisrc_decide_opq_config()
305 DBG_INIT("softs->max_spanning_elems: %d\n", softs->max_spanning_elems); /* 9 */ in pqisrc_decide_opq_config()
306 …DBG_INIT("softs->max_sg_per_spanning_cmd: %u\n", softs->max_sg_per_spanning_cmd); /* 68 until we a… in pqisrc_decide_opq_config()
315 pqisrc_configure_op_queues(pqisrc_softstate_t *softs) in pqisrc_configure_op_queues() argument
321 ret = pqisrc_report_pqi_capability(softs); in pqisrc_configure_op_queues()
329 softs->max_io_for_scsi_ml = softs->max_outstanding_io - PQI_RESERVED_IO_SLOTS_CNT; in pqisrc_configure_op_queues()
332 pqisrc_decide_opq_config(softs); in pqisrc_configure_op_queues()
346 pqisrc_check_pqimode(pqisrc_softstate_t *softs) in pqisrc_check_pqimode() argument
357 signature = LE_64(PCI_MEM_GET64(softs, &softs->pqi_reg->signature, PQI_SIGNATURE)); in pqisrc_check_pqimode()
377 COND_WAIT((PCI_MEM_GET64(softs, &softs->pqi_reg->admin_q_config, in pqisrc_check_pqimode()
388 COND_WAIT(LE_32(PCI_MEM_GET32(softs, &softs->pqi_reg->pqi_dev_status, PQI_DEV_STATUS)) & in pqisrc_check_pqimode()
405 pqisrc_wait_for_pqi_reset_completion(pqisrc_softstate_t *softs) in pqisrc_wait_for_pqi_reset_completion() argument
413 val = PCI_MEM_GET64(softs, &softs->pqi_reg->pqi_dev_adminq_cap, PQI_ADMINQ_CAP); in pqisrc_wait_for_pqi_reset_completion()
424 reset_reg.all_bits = PCI_MEM_GET32(softs, in pqisrc_wait_for_pqi_reset_completion()
425 &softs->pqi_reg->dev_reset, PQI_DEV_RESET); in pqisrc_wait_for_pqi_reset_completion()
437 pqi_reset(pqisrc_softstate_t *softs) in pqi_reset() argument
445 if (true == softs->ctrl_in_pqi_mode) { in pqi_reset()
447 if (softs->pqi_reset_quiesce_allowed) { in pqi_reset()
448 val = PCI_MEM_GET32(softs, &softs->ioa_reg->host_to_ioa_db, in pqi_reset()
451 PCI_MEM_PUT32(softs, &softs->ioa_reg->host_to_ioa_db, in pqi_reset()
454 ret = pqisrc_sis_wait_for_db_bit_to_clear(softs, SIS_PQI_RESET_QUIESCE); in pqi_reset()
465 PCI_MEM_PUT32(softs, &softs->pqi_reg->dev_reset, PQI_DEV_RESET, in pqi_reset()
469 ret = pqisrc_wait_for_pqi_reset_completion(softs); in pqi_reset()
475 softs->ctrl_in_pqi_mode = false; in pqi_reset()
484 pqisrc_pqi_init(pqisrc_softstate_t *softs) in pqisrc_pqi_init() argument
491 ret = pqisrc_check_pqimode(softs); in pqisrc_pqi_init()
497 PQI_SAVE_CTRL_MODE(softs, CTRL_PQI_MODE); in pqisrc_pqi_init()
498 softs->ctrl_in_pqi_mode = true; in pqisrc_pqi_init()
501 ret = os_get_processor_config(softs); in pqisrc_pqi_init()
508 softs->intr_type = INTR_TYPE_NONE; in pqisrc_pqi_init()
511 ret = os_get_intr_config(softs); in pqisrc_pqi_init()
521 if (INTR_TYPE_FIXED == softs->intr_type) { in pqisrc_pqi_init()
522 pqisrc_configure_legacy_intx(softs, true); in pqisrc_pqi_init()
523 sis_enable_intx(softs); in pqisrc_pqi_init()
527 ret = pqisrc_create_admin_queue(softs); in pqisrc_pqi_init()
537 ret = pqisrc_allocate_rcb(softs); in pqisrc_pqi_init()
544 ret = pqisrc_init_taglist(softs,&softs->taglist, in pqisrc_pqi_init()
545 softs->max_outstanding_io); in pqisrc_pqi_init()
552 ret = pqisrc_configure_op_queues(softs); in pqisrc_pqi_init()
559 ret = pqisrc_create_op_queues(softs); in pqisrc_pqi_init()
565 softs->ctrl_online = true; in pqisrc_pqi_init()
572 pqisrc_destroy_taglist(softs,&softs->taglist); in pqisrc_pqi_init()
574 pqisrc_free_rcb(softs, softs->max_outstanding_io + 1); in pqisrc_pqi_init()
576 pqisrc_destroy_admin_queue(softs); in pqisrc_pqi_init()
578 os_free_intr_config(softs); in pqisrc_pqi_init()
586 pqisrc_force_sis(pqisrc_softstate_t *softs) in pqisrc_force_sis() argument
590 if (SIS_IS_KERNEL_PANIC(softs)) { in pqisrc_force_sis()
595 if (PQI_GET_CTRL_MODE(softs) == CTRL_SIS_MODE) { in pqisrc_force_sis()
599 if (SIS_IS_KERNEL_UP(softs)) { in pqisrc_force_sis()
600 PQI_SAVE_CTRL_MODE(softs, CTRL_SIS_MODE); in pqisrc_force_sis()
604 sis_disable_interrupt(softs); in pqisrc_force_sis()
607 ret = pqi_reset(softs); in pqisrc_force_sis()
612 ret = pqisrc_reenable_sis(softs); in pqisrc_force_sis()
617 PQI_SAVE_CTRL_MODE(softs, CTRL_SIS_MODE); in pqisrc_force_sis()
626 pqisrc_wait_for_cmnd_complete(pqisrc_softstate_t *softs) in pqisrc_wait_for_cmnd_complete() argument
632 DBG_NOTE("softs->taglist.num_elem : %u",softs->taglist.num_elem); in pqisrc_wait_for_cmnd_complete()
634 if (softs->taglist.num_elem == softs->max_outstanding_io) in pqisrc_wait_for_cmnd_complete()
638 softs->max_outstanding_io - softs->taglist.num_elem); in pqisrc_wait_for_cmnd_complete()
643 if (SIS_IS_KERNEL_PANIC(softs)) { in pqisrc_wait_for_cmnd_complete()
648 if (softs->taglist.num_elem != softs->max_outstanding_io) { in pqisrc_wait_for_cmnd_complete()
667 pqisrc_complete_internal_cmds(pqisrc_softstate_t *softs) in pqisrc_complete_internal_cmds() argument
673 for (tag = 1; tag <= softs->max_outstanding_io; tag++) { in pqisrc_complete_internal_cmds()
674 rcb = &softs->rcb[tag]; in pqisrc_complete_internal_cmds()
687 pqisrc_pqi_uninit(pqisrc_softstate_t *softs) in pqisrc_pqi_uninit() argument
694 pqisrc_wait_for_rescan_complete(softs); in pqisrc_pqi_uninit()
697 ret = pqisrc_wait_for_cmnd_complete(softs); in pqisrc_pqi_uninit()
700 os_destroy_intr(softs); in pqisrc_pqi_uninit()
704 pqisrc_complete_internal_cmds(softs); in pqisrc_pqi_uninit()
705 os_complete_outstanding_cmds_nodevice(softs); in pqisrc_pqi_uninit()
708 if(softs->devlist_lockcreated==true){ in pqisrc_pqi_uninit()
709 os_uninit_spinlock(&softs->devlist_lock); in pqisrc_pqi_uninit()
710 softs->devlist_lockcreated = false; in pqisrc_pqi_uninit()
714 pqisrc_destroy_op_ib_queues(softs); in pqisrc_pqi_uninit()
715 pqisrc_destroy_op_ob_queues(softs); in pqisrc_pqi_uninit()
716 pqisrc_destroy_event_queue(softs); in pqisrc_pqi_uninit()
719 pqisrc_free_rcb(softs, softs->max_outstanding_io + 1); in pqisrc_pqi_uninit()
722 pqisrc_destroy_taglist(softs,&softs->taglist); in pqisrc_pqi_uninit()
725 pqisrc_destroy_admin_queue(softs); in pqisrc_pqi_uninit()
728 if (pqisrc_force_sis(softs)) { in pqisrc_pqi_uninit()
740 sanity_check_os_behavior(pqisrc_softstate_t *softs) in sanity_check_os_behavior() argument
763 pqisrc_init(pqisrc_softstate_t *softs) in pqisrc_init() argument
770 sanity_check_os_behavior(softs); in pqisrc_init()
776 softs->err_resp_verbose = false; in pqisrc_init()
778 softs->err_resp_verbose = true; in pqisrc_init()
782 ctrl_type = PQI_GET_CTRL_TYPE(softs); in pqisrc_init()
785 softs->bus_id, softs->device_id, softs->func_id); in pqisrc_init()
793 softs->adapter_num = (uint8_t)OS_ATOMIC64_INC(&g_adapter_cnt); in pqisrc_init()
796 softs->adapter_num = (uint8_t)++g_adapter_cnt; in pqisrc_init()
798 DBG_NOTE("Initializing adapter %u\n", (uint32_t)softs->adapter_num); in pqisrc_init()
800 ret = os_create_semaphore("scan_lock", 1, &softs->scan_lock); in pqisrc_init()
807 ret = pqisrc_sis_init(softs); in pqisrc_init()
815 ret = pqisrc_pqi_init(softs); in pqisrc_init()
822 ret = os_setup_intr(softs); in pqisrc_init()
829 ret = pqisrc_report_event_config(softs); in pqisrc_init()
836 ret = pqisrc_set_event_config(softs); in pqisrc_init()
843 ret = pqisrc_get_ctrl_fw_version(softs); in pqisrc_init()
850 ret = pqisrc_write_driver_version_to_host_wellness(softs); in pqisrc_init()
857 ret = pqisrc_QuerySenseFeatures(softs); in pqisrc_init()
863 os_strlcpy(softs->devlist_lock_name, "devlist_lock", LOCKNAME_SIZE); in pqisrc_init()
864 ret = os_init_spinlock(softs, &softs->devlist_lock, softs->devlist_lock_name); in pqisrc_init()
867 softs->devlist_lockcreated=false; in pqisrc_init()
870 softs->devlist_lockcreated = true; in pqisrc_init()
873 ret = pqisrc_process_config_table(softs); in pqisrc_init()
879 softs->prev_heartbeat_count = CTRLR_HEARTBEAT_CNT(softs) - OS_FW_HEARTBEAT_TIMER_INTERVAL; in pqisrc_init()
881 memset(softs->dev_list, 0, sizeof(*softs->dev_list)); in pqisrc_init()
882 pqisrc_init_bitmap(softs); in pqisrc_init()
888 if(softs->devlist_lockcreated==true){ in pqisrc_init()
889 os_uninit_spinlock(&softs->devlist_lock); in pqisrc_init()
890 softs->devlist_lockcreated = false; in pqisrc_init()
898 pqisrc_pqi_uninit(softs); in pqisrc_init()
900 pqisrc_sis_uninit(softs); in pqisrc_init()
902 os_destroy_semaphore(&softs->scan_lock); in pqisrc_init()
913 pqisrc_flush_cache( pqisrc_softstate_t *softs, in pqisrc_flush_cache() argument
922 if (pqisrc_ctrl_offline(softs)) in pqisrc_flush_cache()
925 flush_buff = os_mem_alloc(softs, sizeof(pqisrc_bmic_flush_cache_t)); in pqisrc_flush_cache()
941 rval = pqisrc_prepare_send_ctrlr_request(softs, &request, flush_buff, sizeof(*flush_buff)); in pqisrc_flush_cache()
947 os_mem_free(softs, (void *)flush_buff, sizeof(pqisrc_bmic_flush_cache_t)); in pqisrc_flush_cache()
958 pqisrc_uninit(pqisrc_softstate_t *softs) in pqisrc_uninit() argument
962 pqisrc_pqi_uninit(softs); in pqisrc_uninit()
964 pqisrc_sis_uninit(softs); in pqisrc_uninit()
966 os_destroy_semaphore(&softs->scan_lock); in pqisrc_uninit()
968 pqisrc_cleanup_devices(softs); in pqisrc_uninit()