Lines Matching full:controller

62  * @brief This user callback will inform the user that the controller has
65 * complete. Subsequently, the user should reset the controller.
67 * @param[in] controller This parameter specifies the controller that had
72 void scif_cb_controller_error(SCI_CONTROLLER_HANDLE_T controller, in scif_cb_controller_error() argument
81 * @brief This user callback will inform the user that the controller has
84 * @param[in] controller This parameter specifies the controller that was
92 void scif_cb_controller_start_complete(SCI_CONTROLLER_HANDLE_T controller, in scif_cb_controller_start_complete() argument
97 sci_object_get_association(controller); in scif_cb_controller_start_complete()
104 * the controller with CAM. in scif_cb_controller_start_complete()
128 * @brief This user callback will inform the user that the controller has
130 * scif_controller_stop(), before user receives this controller stop
134 * @param[in] controller This parameter specifies the controller that was
142 void scif_cb_controller_stop_complete(SCI_CONTROLLER_HANDLE_T controller, in scif_cb_controller_stop_complete() argument
146 sci_object_get_association(controller); in scif_cb_controller_stop_complete()
162 * @param[in] controller This parameter represents the controller
170 void scif_cb_controller_allocate_memory(SCI_CONTROLLER_HANDLE_T controller, in scif_cb_controller_allocate_memory() argument
174 sci_object_get_association(controller); in scif_cb_controller_allocate_memory()
180 * We first try to pull a buffer from the controller's pool, and only in scif_cb_controller_allocate_memory()
201 * @param[in] controller This parameter represents the controller
209 void scif_cb_controller_free_memory(SCI_CONTROLLER_HANDLE_T controller, in scif_cb_controller_free_memory() argument
213 sci_object_get_association(controller); in scif_cb_controller_free_memory()
216 * Put the buffer back into the controller's buffer pool, rather in scif_cb_controller_free_memory()
224 void isci_controller_construct(struct ISCI_CONTROLLER *controller, in isci_controller_construct() argument
235 controller->isci = isci; in isci_controller_construct()
236 controller->scif_controller_handle = scif_controller_handle; in isci_controller_construct()
242 sci_object_set_association(scif_controller_handle, (void *)controller); in isci_controller_construct()
244 controller->is_started = FALSE; in isci_controller_construct()
245 controller->is_frozen = FALSE; in isci_controller_construct()
246 controller->release_queued_ccbs = FALSE; in isci_controller_construct()
247 controller->sim = NULL; in isci_controller_construct()
248 controller->initial_discovery_mask = 0; in isci_controller_construct()
250 sci_fast_list_init(&controller->pending_device_reset_list); in isci_controller_construct()
252 mtx_init(&controller->lock, "isci", NULL, MTX_DEF); in isci_controller_construct()
257 isci_domain_construct( &controller->domain[domain_index], in isci_controller_construct()
258 domain_index, controller); in isci_controller_construct()
261 controller->timer_memory = malloc( in isci_controller_construct()
265 sci_pool_initialize(controller->timer_pool); in isci_controller_construct()
268 controller->timer_memory; in isci_controller_construct()
271 sci_pool_put(controller->timer_pool, timer++); in isci_controller_construct()
274 sci_pool_initialize(controller->unmap_buffer_pool); in isci_controller_construct()
297 SCI_STATUS isci_controller_initialize(struct ISCI_CONTROLLER *controller) in isci_controller_initialize() argument
308 scif_controller_get_scic_handle(controller->scif_controller_handle); in isci_controller_initialize()
310 if (controller->isci->oem_parameters_found == TRUE) in isci_controller_initialize()
314 &controller->oem_parameters, in isci_controller_initialize()
315 (uint8_t)(controller->oem_parameters_version)); in isci_controller_initialize()
350 controller->queue_depth = SCI_MAX_IO_REQUESTS - SCI_MAX_DOMAINS; in isci_controller_initialize()
353 &controller->queue_depth)) { in isci_controller_initialize()
354 controller->queue_depth = max(1, min(controller->queue_depth, in isci_controller_initialize()
361 controller->sim_queue_depth = controller->queue_depth - 1; in isci_controller_initialize()
365 * while at the same time having CAM fill our controller queue. To in isci_controller_initialize()
372 controller->sim_queue_depth += io_shortage; in isci_controller_initialize()
376 controller->fail_on_task_timeout = fail_on_timeout; in isci_controller_initialize()
382 controller->has_been_scanned = FALSE; in isci_controller_initialize()
383 mtx_lock(&controller->lock); in isci_controller_initialize()
384 isci_controller_attach_to_cam(controller); in isci_controller_initialize()
385 xpt_freeze_simq(controller->sim, 1); in isci_controller_initialize()
386 mtx_unlock(&controller->lock); in isci_controller_initialize()
389 controller->phys[i].handle = scic_controller_handle; in isci_controller_initialize()
390 controller->phys[i].index = i; in isci_controller_initialize()
393 controller->phys[i].led_fault = 0; in isci_controller_initialize()
394 sprintf(led_name, "isci.bus%d.port%d.fault", controller->index, i); in isci_controller_initialize()
395 controller->phys[i].cdev_fault = led_create(isci_led_fault_func, in isci_controller_initialize()
396 &controller->phys[i], led_name); in isci_controller_initialize()
399 controller->phys[i].led_locate = 0; in isci_controller_initialize()
400 sprintf(led_name, "isci.bus%d.port%d.locate", controller->index, i); in isci_controller_initialize()
401 controller->phys[i].cdev_locate = led_create(isci_led_locate_func, in isci_controller_initialize()
402 &controller->phys[i], led_name); in isci_controller_initialize()
405 return (scif_controller_initialize(controller->scif_controller_handle)); in isci_controller_initialize()
408 int isci_controller_allocate_memory(struct ISCI_CONTROLLER *controller) in isci_controller_allocate_memory() argument
411 device_t device = controller->isci->device; in isci_controller_allocate_memory()
414 &controller->uncached_controller_memory; in isci_controller_allocate_memory()
416 &controller->cached_controller_memory; in isci_controller_allocate_memory()
418 &controller->request_memory; in isci_controller_allocate_memory()
422 controller->mdl = sci_controller_get_memory_descriptor_list_handle( in isci_controller_allocate_memory()
423 controller->scif_controller_handle); in isci_controller_allocate_memory()
426 controller->mdl, SCI_MDE_ATTRIBUTE_PHYSICALLY_CONTIGUOUS); in isci_controller_allocate_memory()
428 error = isci_allocate_dma_buffer(device, controller, in isci_controller_allocate_memory()
434 sci_mdl_decorator_assign_memory( controller->mdl, in isci_controller_allocate_memory()
440 controller->mdl, in isci_controller_allocate_memory()
444 error = isci_allocate_dma_buffer(device, controller, in isci_controller_allocate_memory()
450 sci_mdl_decorator_assign_memory(controller->mdl, in isci_controller_allocate_memory()
456 controller->queue_depth * isci_io_request_get_object_size(); in isci_controller_allocate_memory()
458 error = isci_allocate_dma_buffer(device, controller, request_memory); in isci_controller_allocate_memory()
481 busdma_lock_mutex, &controller->lock, in isci_controller_allocate_memory()
482 &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()
567 /* Controller has not been scanned yet. We'll clear in isci_controller_domain_discovery_complete()
607 int isci_controller_attach_to_cam(struct ISCI_CONTROLLER *controller) in isci_controller_attach_to_cam() argument
609 struct isci_softc *isci = controller->isci; in isci_controller_attach_to_cam()
612 struct cam_devq *isci_devq = cam_simq_alloc(controller->sim_queue_depth); in isci_controller_attach_to_cam()
619 controller->sim = cam_sim_alloc(isci_action, isci_poll, "isci", in isci_controller_attach_to_cam()
620 controller, unit, &controller->lock, controller->sim_queue_depth, in isci_controller_attach_to_cam()
621 controller->sim_queue_depth, isci_devq); in isci_controller_attach_to_cam()
623 if(controller->sim == NULL) { in isci_controller_attach_to_cam()
629 if(xpt_bus_register(controller->sim, parent, controller->index) in isci_controller_attach_to_cam()
632 cam_sim_free(controller->sim, TRUE); in isci_controller_attach_to_cam()
633 mtx_unlock(&controller->lock); in isci_controller_attach_to_cam()
637 if(xpt_create_path(&controller->path, NULL, in isci_controller_attach_to_cam()
638 cam_sim_path(controller->sim), CAM_TARGET_WILDCARD, in isci_controller_attach_to_cam()
641 xpt_bus_deregister(cam_sim_path(controller->sim)); in isci_controller_attach_to_cam()
642 cam_sim_free(controller->sim, TRUE); in isci_controller_attach_to_cam()
643 mtx_unlock(&controller->lock); in isci_controller_attach_to_cam()
652 struct ISCI_CONTROLLER *controller = in isci_poll() local
655 isci_interrupt_poll_handler(controller); in isci_poll()
660 struct ISCI_CONTROLLER *controller = in isci_action() local
702 remote_device = controller->remote_device[ccb->ccb_h.target_id]; in isci_action()
736 isci_io_request_execute_scsi_io(ccb, controller); in isci_action()
739 isci_io_request_execute_smp_io(ccb, controller); in isci_action()
753 controller->remote_device[ccb->ccb_h.target_id]; in isci_action()
792 isci_controller_release_queued_ccbs(struct ISCI_CONTROLLER *controller) in isci_controller_release_queued_ccbs() argument
799 KASSERT(mtx_owned(&controller->lock), ("controller lock not owned")); in isci_controller_release_queued_ccbs()
801 controller->release_queued_ccbs = FALSE; in isci_controller_release_queued_ccbs()
806 dev = controller->remote_device[dev_idx]; in isci_controller_release_queued_ccbs()
821 (union ccb *)ccb_h, controller); in isci_controller_release_queued_ccbs()