• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/s390/scsi/

Lines Matching refs:qdio

33 static void zfcp_qdio_handler_error(struct zfcp_qdio *qdio, char *id,
36 struct zfcp_adapter *adapter = qdio->adapter;
58 static inline void zfcp_qdio_account(struct zfcp_qdio *qdio)
63 spin_lock(&qdio->stat_lock);
65 span = (now - qdio->req_q_time) >> 12;
66 used = QDIO_MAX_BUFFERS_PER_Q - atomic_read(&qdio->req_q_free);
67 qdio->req_q_util += used * span;
68 qdio->req_q_time = now;
69 spin_unlock(&qdio->stat_lock);
76 struct zfcp_qdio *qdio = (struct zfcp_qdio *) parm;
79 zfcp_dbf_hba_qdio(qdio->adapter->dbf, qdio_err, idx, count);
80 zfcp_qdio_handler_error(qdio, "qdireq1", qdio_err);
85 zfcp_qdio_zero_sbals(qdio->req_q, idx, count);
87 zfcp_qdio_account(qdio);
88 atomic_add(count, &qdio->req_q_free);
89 wake_up(&qdio->req_q_wq);
96 struct zfcp_qdio *qdio = (struct zfcp_qdio *) parm;
100 zfcp_dbf_hba_qdio(qdio->adapter->dbf, qdio_err, idx, count);
101 zfcp_qdio_handler_error(qdio, "qdires1", qdio_err);
112 zfcp_fsf_reqid_check(qdio, sbal_idx);
119 zfcp_erp_adapter_reopen(qdio->adapter, 0, "qdires2", NULL);
123 zfcp_qdio_sbal_chain(struct zfcp_qdio *qdio, struct zfcp_qdio_req *q_req)
128 sbale = zfcp_qdio_sbale_curr(qdio, q_req);
136 sbale = zfcp_qdio_sbale_req(qdio, q_req);
151 sbale = zfcp_qdio_sbale_curr(qdio, q_req);
158 zfcp_qdio_sbale_next(struct zfcp_qdio *qdio, struct zfcp_qdio_req *q_req)
161 return zfcp_qdio_sbal_chain(qdio, q_req);
163 return zfcp_qdio_sbale_curr(qdio, q_req);
168 * @qdio: pointer to struct zfcp_qdio
174 int zfcp_qdio_sbals_from_sg(struct zfcp_qdio *qdio, struct zfcp_qdio_req *q_req,
181 sbale = zfcp_qdio_sbale_req(qdio, q_req);
185 sbale = zfcp_qdio_sbale_next(qdio, q_req);
187 atomic_inc(&qdio->req_q_full);
188 zfcp_qdio_zero_sbals(qdio->req_q, q_req->sbal_first,
202 static int zfcp_qdio_sbal_check(struct zfcp_qdio *qdio)
204 spin_lock_bh(&qdio->req_q_lock);
205 if (atomic_read(&qdio->req_q_free) ||
206 !(atomic_read(&qdio->adapter->status) & ZFCP_STATUS_ADAPTER_QDIOUP))
208 spin_unlock_bh(&qdio->req_q_lock);
214 * @qdio: pointer to struct zfcp_qdio
222 int zfcp_qdio_sbal_get(struct zfcp_qdio *qdio)
226 spin_unlock_bh(&qdio->req_q_lock);
227 ret = wait_event_interruptible_timeout(qdio->req_q_wq,
228 zfcp_qdio_sbal_check(qdio), 5 * HZ);
230 if (!(atomic_read(&qdio->adapter->status) & ZFCP_STATUS_ADAPTER_QDIOUP))
237 atomic_inc(&qdio->req_q_full);
239 zfcp_erp_adapter_reopen(qdio->adapter, 0, "qdsbg_1", NULL);
242 spin_lock_bh(&qdio->req_q_lock);
248 * @qdio: pointer to struct zfcp_qdio
252 int zfcp_qdio_send(struct zfcp_qdio *qdio, struct zfcp_qdio_req *q_req)
257 zfcp_qdio_account(qdio);
259 retval = do_QDIO(qdio->adapter->ccw_device, QDIO_FLAG_SYNC_OUTPUT, 0,
263 zfcp_qdio_zero_sbals(qdio->req_q, q_req->sbal_first,
269 atomic_sub(sbal_number, &qdio->req_q_free);
270 qdio->req_q_idx += sbal_number;
271 qdio->req_q_idx %= QDIO_MAX_BUFFERS_PER_Q;
278 struct zfcp_qdio *qdio)
281 id->cdev = qdio->adapter->ccw_device;
294 id->int_parm = (unsigned long) qdio;
295 id->input_sbal_addr_array = (void **) (qdio->res_q);
296 id->output_sbal_addr_array = (void **) (qdio->req_q);
305 static int zfcp_qdio_allocate(struct zfcp_qdio *qdio)
309 if (zfcp_qdio_buffers_enqueue(qdio->req_q) ||
310 zfcp_qdio_buffers_enqueue(qdio->res_q))
313 zfcp_qdio_setup_init_data(&init_data, qdio);
319 * zfcp_close_qdio - close qdio queues for an adapter
320 * @qdio: pointer to structure zfcp_qdio
322 void zfcp_qdio_close(struct zfcp_qdio *qdio)
324 struct zfcp_adapter *adapter = qdio->adapter;
331 spin_lock_bh(&qdio->req_q_lock);
333 spin_unlock_bh(&qdio->req_q_lock);
335 wake_up(&qdio->req_q_wq);
340 count = atomic_read(&qdio->req_q_free);
342 idx = (qdio->req_q_idx + count) % QDIO_MAX_BUFFERS_PER_Q;
344 zfcp_qdio_zero_sbals(qdio->req_q, idx, count);
346 qdio->req_q_idx = 0;
347 atomic_set(&qdio->req_q_free, 0);
352 * @qdio: pointer to struct zfcp_qdio
355 int zfcp_qdio_open(struct zfcp_qdio *qdio)
359 struct zfcp_adapter *adapter = qdio->adapter;
368 &qdio->adapter->status);
370 zfcp_qdio_setup_init_data(&init_data, qdio);
380 &qdio->adapter->status);
386 sbale = &(qdio->res_q[cc]->element[0]);
396 qdio->req_q_idx = 0;
397 atomic_set(&qdio->req_q_free, QDIO_MAX_BUFFERS_PER_Q);
409 void zfcp_qdio_destroy(struct zfcp_qdio *qdio)
413 if (!qdio)
416 if (qdio->adapter->ccw_device)
417 qdio_free(qdio->adapter->ccw_device);
420 free_page((unsigned long) qdio->req_q[p]);
421 free_page((unsigned long) qdio->res_q[p]);
424 kfree(qdio);
429 struct zfcp_qdio *qdio;
431 qdio = kzalloc(sizeof(struct zfcp_qdio), GFP_KERNEL);
432 if (!qdio)
435 qdio->adapter = adapter;
437 if (zfcp_qdio_allocate(qdio)) {
438 zfcp_qdio_destroy(qdio);
442 spin_lock_init(&qdio->req_q_lock);
443 spin_lock_init(&qdio->stat_lock);
445 adapter->qdio = qdio;
455 * triggered once before going through qdio shutdown.
457 * The triggers are always run from qdio tasklet context, so no