Lines Matching refs:controller
74 void scif_cb_controller_error(SCI_CONTROLLER_HANDLE_T controller, in scif_cb_controller_error() argument
94 void scif_cb_controller_start_complete(SCI_CONTROLLER_HANDLE_T controller, in scif_cb_controller_start_complete() argument
99 sci_object_get_association(controller); in scif_cb_controller_start_complete()
144 void scif_cb_controller_stop_complete(SCI_CONTROLLER_HANDLE_T controller, in scif_cb_controller_stop_complete() argument
148 sci_object_get_association(controller); in scif_cb_controller_stop_complete()
172 void scif_cb_controller_allocate_memory(SCI_CONTROLLER_HANDLE_T controller, in scif_cb_controller_allocate_memory() argument
176 sci_object_get_association(controller); in scif_cb_controller_allocate_memory()
211 void scif_cb_controller_free_memory(SCI_CONTROLLER_HANDLE_T controller, in scif_cb_controller_free_memory() argument
215 sci_object_get_association(controller); in scif_cb_controller_free_memory()
226 void isci_controller_construct(struct ISCI_CONTROLLER *controller, in isci_controller_construct() argument
237 controller->isci = isci; in isci_controller_construct()
238 controller->scif_controller_handle = scif_controller_handle; in isci_controller_construct()
244 sci_object_set_association(scif_controller_handle, (void *)controller); in isci_controller_construct()
246 controller->is_started = FALSE; in isci_controller_construct()
247 controller->is_frozen = FALSE; in isci_controller_construct()
248 controller->release_queued_ccbs = FALSE; in isci_controller_construct()
249 controller->sim = NULL; in isci_controller_construct()
250 controller->initial_discovery_mask = 0; in isci_controller_construct()
252 sci_fast_list_init(&controller->pending_device_reset_list); in isci_controller_construct()
254 mtx_init(&controller->lock, "isci", NULL, MTX_DEF); in isci_controller_construct()
259 isci_domain_construct( &controller->domain[domain_index], in isci_controller_construct()
260 domain_index, controller); in isci_controller_construct()
263 controller->timer_memory = malloc( in isci_controller_construct()
267 sci_pool_initialize(controller->timer_pool); in isci_controller_construct()
270 controller->timer_memory; in isci_controller_construct()
273 sci_pool_put(controller->timer_pool, timer++); in isci_controller_construct()
276 sci_pool_initialize(controller->unmap_buffer_pool); in isci_controller_construct()
299 SCI_STATUS isci_controller_initialize(struct ISCI_CONTROLLER *controller) in isci_controller_initialize() argument
310 scif_controller_get_scic_handle(controller->scif_controller_handle); in isci_controller_initialize()
312 if (controller->isci->oem_parameters_found == TRUE) in isci_controller_initialize()
316 &controller->oem_parameters, in isci_controller_initialize()
317 (uint8_t)(controller->oem_parameters_version)); in isci_controller_initialize()
352 controller->queue_depth = SCI_MAX_IO_REQUESTS - SCI_MAX_DOMAINS; in isci_controller_initialize()
355 &controller->queue_depth)) { in isci_controller_initialize()
356 controller->queue_depth = max(1, min(controller->queue_depth, in isci_controller_initialize()
363 controller->sim_queue_depth = controller->queue_depth - 1; in isci_controller_initialize()
374 controller->sim_queue_depth += io_shortage; in isci_controller_initialize()
378 controller->fail_on_task_timeout = fail_on_timeout; in isci_controller_initialize()
384 controller->has_been_scanned = FALSE; in isci_controller_initialize()
385 mtx_lock(&controller->lock); in isci_controller_initialize()
386 isci_controller_attach_to_cam(controller); in isci_controller_initialize()
387 xpt_freeze_simq(controller->sim, 1); in isci_controller_initialize()
388 mtx_unlock(&controller->lock); in isci_controller_initialize()
391 controller->phys[i].handle = scic_controller_handle; in isci_controller_initialize()
392 controller->phys[i].index = i; in isci_controller_initialize()
395 controller->phys[i].led_fault = 0; in isci_controller_initialize()
396 sprintf(led_name, "isci.bus%d.port%d.fault", controller->index, i); in isci_controller_initialize()
397 controller->phys[i].cdev_fault = led_create(isci_led_fault_func, in isci_controller_initialize()
398 &controller->phys[i], led_name); in isci_controller_initialize()
401 controller->phys[i].led_locate = 0; in isci_controller_initialize()
402 sprintf(led_name, "isci.bus%d.port%d.locate", controller->index, i); in isci_controller_initialize()
403 controller->phys[i].cdev_locate = led_create(isci_led_locate_func, in isci_controller_initialize()
404 &controller->phys[i], led_name); in isci_controller_initialize()
407 return (scif_controller_initialize(controller->scif_controller_handle)); in isci_controller_initialize()
410 int isci_controller_allocate_memory(struct ISCI_CONTROLLER *controller) in isci_controller_allocate_memory() argument
413 device_t device = controller->isci->device; in isci_controller_allocate_memory()
417 &controller->uncached_controller_memory; in isci_controller_allocate_memory()
419 &controller->cached_controller_memory; in isci_controller_allocate_memory()
421 &controller->request_memory; in isci_controller_allocate_memory()
425 controller->mdl = sci_controller_get_memory_descriptor_list_handle( in isci_controller_allocate_memory()
426 controller->scif_controller_handle); in isci_controller_allocate_memory()
429 controller->mdl, SCI_MDE_ATTRIBUTE_PHYSICALLY_CONTIGUOUS); in isci_controller_allocate_memory()
431 error = isci_allocate_dma_buffer(device, controller, in isci_controller_allocate_memory()
437 sci_mdl_decorator_assign_memory( controller->mdl, in isci_controller_allocate_memory()
443 controller->mdl, in isci_controller_allocate_memory()
447 error = isci_allocate_dma_buffer(device, controller, in isci_controller_allocate_memory()
453 sci_mdl_decorator_assign_memory(controller->mdl, in isci_controller_allocate_memory()
459 controller->queue_depth * isci_io_request_get_object_size(); in isci_controller_allocate_memory()
461 error = isci_allocate_dma_buffer(device, controller, request_memory); in isci_controller_allocate_memory()
484 busdma_lock_mutex, &controller->lock, in isci_controller_allocate_memory()
485 &controller->buffer_dma_tag); in isci_controller_allocate_memory()
487 sci_pool_initialize(controller->request_pool); in isci_controller_allocate_memory()
492 for (int i = 0; i < controller->queue_depth; i++) { in isci_controller_allocate_memory()
497 controller->scif_controller_handle, in isci_controller_allocate_memory()
498 controller->buffer_dma_tag, physical_address); in isci_controller_allocate_memory()
500 sci_pool_put(controller->request_pool, request); in isci_controller_allocate_memory()
509 controller->remote_device_memory = (uint8_t *) malloc( in isci_controller_allocate_memory()
513 sci_pool_initialize(controller->remote_device_pool); in isci_controller_allocate_memory()
515 uint8_t *remote_device_memory_ptr = controller->remote_device_memory; in isci_controller_allocate_memory()
521 controller->remote_device[i] = NULL; in isci_controller_allocate_memory()
538 controller->domain[i].da_remote_device = remote_device; in isci_controller_allocate_memory()
540 sci_pool_put(controller->remote_device_pool, in isci_controller_allocate_memory()
550 struct ISCI_CONTROLLER *controller = in isci_controller_start() local
553 controller->scif_controller_handle; in isci_controller_start()
559 scif_controller_get_scic_handle(controller->scif_controller_handle)); in isci_controller_start()
622 int isci_controller_attach_to_cam(struct ISCI_CONTROLLER *controller) in isci_controller_attach_to_cam() argument
624 struct isci_softc *isci = controller->isci; in isci_controller_attach_to_cam()
627 struct cam_devq *isci_devq = cam_simq_alloc(controller->sim_queue_depth); in isci_controller_attach_to_cam()
634 controller->sim = cam_sim_alloc(isci_action, isci_poll, "isci", in isci_controller_attach_to_cam()
635 controller, unit, &controller->lock, controller->sim_queue_depth, in isci_controller_attach_to_cam()
636 controller->sim_queue_depth, isci_devq); in isci_controller_attach_to_cam()
638 if(controller->sim == NULL) { in isci_controller_attach_to_cam()
644 if(xpt_bus_register(controller->sim, parent, controller->index) in isci_controller_attach_to_cam()
647 cam_sim_free(controller->sim, TRUE); in isci_controller_attach_to_cam()
648 mtx_unlock(&controller->lock); in isci_controller_attach_to_cam()
652 if(xpt_create_path(&controller->path, NULL, in isci_controller_attach_to_cam()
653 cam_sim_path(controller->sim), CAM_TARGET_WILDCARD, in isci_controller_attach_to_cam()
656 xpt_bus_deregister(cam_sim_path(controller->sim)); in isci_controller_attach_to_cam()
657 cam_sim_free(controller->sim, TRUE); in isci_controller_attach_to_cam()
658 mtx_unlock(&controller->lock); in isci_controller_attach_to_cam()
667 struct ISCI_CONTROLLER *controller = in isci_poll() local
670 isci_interrupt_poll_handler(controller); in isci_poll()
675 struct ISCI_CONTROLLER *controller = in isci_action() local
719 remote_device = controller->remote_device[ccb->ccb_h.target_id]; in isci_action()
753 isci_io_request_execute_scsi_io(ccb, controller); in isci_action()
757 isci_io_request_execute_smp_io(ccb, controller); in isci_action()
772 controller->remote_device[ccb->ccb_h.target_id]; in isci_action()
811 isci_controller_release_queued_ccbs(struct ISCI_CONTROLLER *controller) in isci_controller_release_queued_ccbs() argument
818 KASSERT(mtx_owned(&controller->lock), ("controller lock not owned")); in isci_controller_release_queued_ccbs()
820 controller->release_queued_ccbs = FALSE; in isci_controller_release_queued_ccbs()
825 dev = controller->remote_device[dev_idx]; in isci_controller_release_queued_ccbs()
840 (union ccb *)ccb_h, controller); in isci_controller_release_queued_ccbs()