int zfcp_qdio_allocate(struct zfcp_adapter *adapter) { struct qdio_initialize *init_data; init_data = &adapter->qdio_init_data; init_data->cdev = adapter->ccw_device; init_data->q_format = QDIO_SCSI_QFMT; memcpy(init_data->adapter_name, &adapter->name, 8); init_data->qib_param_field_format = 0; init_data->qib_param_field = NULL; init_data->input_slib_elements = NULL; init_data->output_slib_elements = NULL; init_data->min_input_threshold = ZFCP_MIN_INPUT_THRESHOLD; init_data->max_input_threshold = ZFCP_MAX_INPUT_THRESHOLD; init_data->min_output_threshold = ZFCP_MIN_OUTPUT_THRESHOLD; init_data->max_output_threshold = ZFCP_MAX_OUTPUT_THRESHOLD; init_data->no_input_qs = 1; init_data->no_output_qs = 1; init_data->input_handler = zfcp_qdio_response_handler; init_data->output_handler = zfcp_qdio_request_handler; init_data->int_parm = (unsigned long) adapter; init_data->flags = QDIO_INBOUND_0COPY_SBALS | QDIO_OUTBOUND_0COPY_SBALS | QDIO_USE_OUTBOUND_PCIS; init_data->input_sbal_addr_array = (void **) (adapter->response_queue.buffer); init_data->output_sbal_addr_array = (void **) (adapter->request_queue.buffer); return qdio_allocate(init_data); }
/** * zfcp_qdio_allocate - allocate queue memory and initialize QDIO data * @adapter: pointer to struct zfcp_adapter * Returns: -ENOMEM on memory allocation error or return value from * qdio_allocate */ static int zfcp_qdio_allocate(struct zfcp_qdio *qdio) { struct qdio_initialize init_data; int ret; ret = qdio_alloc_buffers(qdio->req_q, QDIO_MAX_BUFFERS_PER_Q); if (ret) return -ENOMEM; ret = qdio_alloc_buffers(qdio->res_q, QDIO_MAX_BUFFERS_PER_Q); if (ret) goto free_req_q; zfcp_qdio_setup_init_data(&init_data, qdio); init_waitqueue_head(&qdio->req_q_wq); ret = qdio_allocate(&init_data); if (ret) goto free_res_q; return 0; free_res_q: qdio_free_buffers(qdio->res_q, QDIO_MAX_BUFFERS_PER_Q); free_req_q: qdio_free_buffers(qdio->req_q, QDIO_MAX_BUFFERS_PER_Q); return ret; }
/** * zfcp_qdio_allocate - allocate queue memory and initialize QDIO data * @adapter: pointer to struct zfcp_adapter * Returns: -ENOMEM on memory allocation error or return value from * qdio_allocate */ int zfcp_qdio_allocate(struct zfcp_adapter *adapter) { struct qdio_initialize *init_data; if (zfcp_qdio_buffers_enqueue(adapter->req_q.sbal) || zfcp_qdio_buffers_enqueue(adapter->resp_q.sbal)) return -ENOMEM; init_data = &adapter->qdio_init_data; init_data->cdev = adapter->ccw_device; init_data->q_format = QDIO_ZFCP_QFMT; memcpy(init_data->adapter_name, zfcp_get_busid_by_adapter(adapter), 8); ASCEBC(init_data->adapter_name, 8); init_data->qib_param_field_format = 0; init_data->qib_param_field = NULL; init_data->input_slib_elements = NULL; init_data->output_slib_elements = NULL; init_data->no_input_qs = 1; init_data->no_output_qs = 1; init_data->input_handler = zfcp_qdio_int_resp; init_data->output_handler = zfcp_qdio_int_req; init_data->int_parm = (unsigned long) adapter; init_data->flags = QDIO_INBOUND_0COPY_SBALS | QDIO_OUTBOUND_0COPY_SBALS | QDIO_USE_OUTBOUND_PCIS; init_data->input_sbal_addr_array = (void **) (adapter->resp_q.sbal); init_data->output_sbal_addr_array = (void **) (adapter->req_q.sbal); return qdio_allocate(init_data); }
/** * zfcp_qdio_allocate - allocate queue memory and initialize QDIO data * @adapter: pointer to struct zfcp_adapter * Returns: -ENOMEM on memory allocation error or return value from * qdio_allocate */ static int zfcp_qdio_allocate(struct zfcp_qdio *qdio) { struct qdio_initialize init_data; if (zfcp_qdio_buffers_enqueue(qdio->req_q.sbal) || zfcp_qdio_buffers_enqueue(qdio->resp_q.sbal)) return -ENOMEM; zfcp_qdio_setup_init_data(&init_data, qdio); return qdio_allocate(&init_data); }
/** * zfcp_qdio_allocate - allocate queue memory and initialize QDIO data * @adapter: pointer to struct zfcp_adapter * Returns: -ENOMEM on memory allocation error or return value from * qdio_allocate */ static int zfcp_qdio_allocate(struct zfcp_qdio *qdio) { struct qdio_initialize init_data; if (zfcp_qdio_buffers_enqueue(qdio->req_q) || zfcp_qdio_buffers_enqueue(qdio->res_q)) return -ENOMEM; zfcp_qdio_setup_init_data(&init_data, qdio); init_waitqueue_head(&qdio->req_q_wq); return qdio_allocate(&init_data); }