Lines Matching refs:evt
144 * @evt: ibmvfc event struct
147 static void ibmvfc_trc_start(struct ibmvfc_event *evt)
149 struct ibmvfc_host *vhost = evt->vhost;
150 struct ibmvfc_cmd *vfc_cmd = &evt->iu.cmd;
151 struct ibmvfc_mad_common *mad = &evt->iu.mad_common;
155 entry->evt = evt;
157 entry->fmt = evt->crq.format;
178 * @evt: ibmvfc event struct
181 static void ibmvfc_trc_end(struct ibmvfc_event *evt)
183 struct ibmvfc_host *vhost = evt->vhost;
184 struct ibmvfc_cmd *vfc_cmd = &evt->xfer_iu->cmd;
185 struct ibmvfc_mad_common *mad = &evt->xfer_iu->mad_common;
188 entry->evt = evt;
190 entry->fmt = evt->crq.format;
216 #define ibmvfc_trc_start(evt) do { } while (0)
217 #define ibmvfc_trc_end(evt) do { } while (0)
792 * @evt: ibmvfc event to be checked for validity
798 struct ibmvfc_event *evt)
800 int index = evt - pool->events;
803 if (evt != pool->events + index) /* unaligned */
810 * @evt: ibmvfc_event to be freed
813 static void ibmvfc_free_event(struct ibmvfc_event *evt)
815 struct ibmvfc_host *vhost = evt->vhost;
818 BUG_ON(!ibmvfc_valid_event(pool, evt));
819 BUG_ON(atomic_inc_return(&evt->free) != 1);
820 list_add_tail(&evt->queue, &vhost->free);
825 * @evt: ibmvfc event struct
830 static void ibmvfc_scsi_eh_done(struct ibmvfc_event *evt)
832 struct scsi_cmnd *cmnd = evt->cmnd;
839 if (evt->eh_comp)
840 complete(evt->eh_comp);
842 ibmvfc_free_event(evt);
847 * @evt: ibmvfc event struct
853 static void ibmvfc_fail_request(struct ibmvfc_event *evt, int error_code)
855 if (evt->cmnd) {
856 evt->cmnd->result = (error_code << 16);
857 evt->done = ibmvfc_scsi_eh_done;
859 evt->xfer_iu->mad_common.status = cpu_to_be16(IBMVFC_MAD_DRIVER_FAILED);
861 list_del(&evt->queue);
862 del_timer(&evt->timer);
863 ibmvfc_trc_end(evt);
864 evt->done(evt);
877 struct ibmvfc_event *evt, *pos;
880 list_for_each_entry_safe(evt, pos, &vhost->sent, queue)
881 ibmvfc_fail_request(evt, error_code);
1274 struct ibmvfc_event *evt = &pool->events[i];
1275 atomic_set(&evt->free, 1);
1276 evt->crq.valid = 0x80;
1277 evt->crq.ioba = cpu_to_be64(pool->iu_token + (sizeof(*evt->xfer_iu) * i));
1278 evt->xfer_iu = pool->iu_storage + i;
1279 evt->vhost = vhost;
1280 evt->ext_list = NULL;
1281 list_add_tail(&evt->queue, &vhost->free);
1323 struct ibmvfc_event *evt;
1326 evt = list_entry(vhost->free.next, struct ibmvfc_event, queue);
1327 atomic_set(&evt->free, 0);
1328 list_del(&evt->queue);
1329 return evt;
1335 * @evt: The event
1339 static void ibmvfc_init_event(struct ibmvfc_event *evt,
1342 evt->cmnd = NULL;
1343 evt->sync_iu = NULL;
1344 evt->crq.format = format;
1345 evt->done = done;
1346 evt->eh_comp = NULL;
1371 * @evt: ibmvfc event struct
1379 struct ibmvfc_event *evt,
1415 if (!evt->ext_list) {
1416 evt->ext_list = dma_pool_alloc(vhost->sg_pool, GFP_ATOMIC,
1417 &evt->ext_list_token);
1419 if (!evt->ext_list) {
1427 ibmvfc_map_sg_list(scmd, sg_mapped, evt->ext_list);
1429 data->va = cpu_to_be64(evt->ext_list_token);
1437 * @evt: struct ibmvfc_event that timed out
1443 struct ibmvfc_event *evt = from_timer(evt, t, timer);
1444 struct ibmvfc_host *vhost = evt->vhost;
1445 dev_err(vhost->dev, "Command timed out (%p). Resetting connection\n", evt);
1451 * @evt: event to be sent
1457 static int ibmvfc_send_event(struct ibmvfc_event *evt,
1460 __be64 *crq_as_u64 = (__be64 *) &evt->crq;
1464 *evt->xfer_iu = evt->iu;
1465 if (evt->crq.format == IBMVFC_CMD_FORMAT)
1466 evt->xfer_iu->cmd.tag = cpu_to_be64((u64)evt);
1467 else if (evt->crq.format == IBMVFC_MAD_FORMAT)
1468 evt->xfer_iu->mad_common.tag = cpu_to_be64((u64)evt);
1472 list_add_tail(&evt->queue, &vhost->sent);
1473 timer_setup(&evt->timer, ibmvfc_timeout, 0);
1476 evt->timer.expires = jiffies + (timeout * HZ);
1477 add_timer(&evt->timer);
1484 list_del(&evt->queue);
1485 del_timer(&evt->timer);
1495 if (evt->cmnd)
1496 scsi_dma_unmap(evt->cmnd);
1497 ibmvfc_free_event(evt);
1502 if (evt->cmnd) {
1503 evt->cmnd->result = DID_ERROR << 16;
1504 evt->done = ibmvfc_scsi_eh_done;
1506 evt->xfer_iu->mad_common.status = cpu_to_be16(IBMVFC_MAD_CRQ_ERROR);
1508 evt->done(evt);
1510 ibmvfc_trc_start(evt);
1517 * @evt: ibmvfc event to log
1520 static void ibmvfc_log_error(struct ibmvfc_event *evt)
1522 struct ibmvfc_cmd *vfc_cmd = &evt->xfer_iu->cmd;
1523 struct ibmvfc_host *vhost = evt->vhost;
1525 struct scsi_cmnd *cmnd = evt->cmnd;
1571 * @evt: ibmvfc event to be handled
1575 static void ibmvfc_scsi_done(struct ibmvfc_event *evt)
1577 struct ibmvfc_cmd *vfc_cmd = &evt->xfer_iu->cmd;
1579 struct scsi_cmnd *cmnd = evt->cmnd;
1607 ibmvfc_log_error(evt);
1618 if (evt->eh_comp)
1619 complete(evt->eh_comp);
1621 ibmvfc_free_event(evt);
1668 struct ibmvfc_event *evt;
1679 evt = ibmvfc_get_event(vhost);
1680 ibmvfc_init_event(evt, ibmvfc_scsi_done, IBMVFC_CMD_FORMAT);
1681 evt->cmnd = cmnd;
1683 vfc_cmd = &evt->iu.cmd;
1685 vfc_cmd->resp.va = cpu_to_be64(be64_to_cpu(evt->crq.ioba) + offsetof(struct ibmvfc_cmd, rsp));
1701 if (likely(!(rc = ibmvfc_map_sg_data(cmnd, evt, vfc_cmd, vhost->dev))))
1702 return ibmvfc_send_event(evt, vhost, 0);
1704 ibmvfc_free_event(evt);
1721 * @evt: ibmvfc event struct
1724 static void ibmvfc_sync_completion(struct ibmvfc_event *evt)
1727 if (evt->sync_iu)
1728 *evt->sync_iu = *evt->xfer_iu;
1730 complete(&evt->comp);
1735 * @evt: struct ibmvfc_event
1738 static void ibmvfc_bsg_timeout_done(struct ibmvfc_event *evt)
1740 struct ibmvfc_host *vhost = evt->vhost;
1742 ibmvfc_free_event(evt);
1758 struct ibmvfc_event *evt;
1772 evt = ibmvfc_get_event(vhost);
1773 ibmvfc_init_event(evt, ibmvfc_bsg_timeout_done, IBMVFC_MAD_FORMAT);
1775 tmf = &evt->iu.tmf;
1783 rc = ibmvfc_send_event(evt, vhost, default_timeout);
1811 struct ibmvfc_event *evt;
1830 evt = ibmvfc_get_event(vhost);
1831 ibmvfc_init_event(evt, ibmvfc_sync_completion, IBMVFC_MAD_FORMAT);
1832 plogi = &evt->iu.plogi;
1838 evt->sync_iu = &rsp_iu;
1839 init_completion(&evt->comp);
1841 rc = ibmvfc_send_event(evt, vhost, default_timeout);
1847 wait_for_completion(&evt->comp);
1853 ibmvfc_free_event(evt);
1872 struct ibmvfc_event *evt;
1948 evt = ibmvfc_get_event(vhost);
1949 ibmvfc_init_event(evt, ibmvfc_sync_completion, IBMVFC_MAD_FORMAT);
1950 mad = &evt->iu.passthru;
1957 mad->cmd_ioba.va = cpu_to_be64(be64_to_cpu(evt->crq.ioba) +
1971 mad->iu.tag = cpu_to_be64((u64)evt);
1974 evt->sync_iu = &rsp_iu;
1975 init_completion(&evt->comp);
1976 rc = ibmvfc_send_event(evt, vhost, 0);
1984 wait_for_completion(&evt->comp);
1992 ibmvfc_free_event(evt);
2022 struct ibmvfc_event *evt = NULL;
2031 evt = ibmvfc_get_event(vhost);
2032 ibmvfc_init_event(evt, ibmvfc_sync_completion, IBMVFC_CMD_FORMAT);
2034 tmf = &evt->iu.cmd;
2036 tmf->resp.va = cpu_to_be64(be64_to_cpu(evt->crq.ioba) + offsetof(struct ibmvfc_cmd, rsp));
2046 evt->sync_iu = &rsp_iu;
2048 init_completion(&evt->comp);
2049 rsp_rc = ibmvfc_send_event(evt, vhost, default_timeout);
2060 wait_for_completion(&evt->comp);
2079 ibmvfc_free_event(evt);
2086 * @evt: ibmvfc event struct
2092 static int ibmvfc_match_rport(struct ibmvfc_event *evt, void *rport)
2096 if (evt->cmnd) {
2097 cmd_rport = starget_to_rport(scsi_target(evt->cmnd->device));
2106 * @evt: ibmvfc event struct
2112 static int ibmvfc_match_target(struct ibmvfc_event *evt, void *device)
2114 if (evt->cmnd && scsi_target(evt->cmnd->device) == device)
2121 * @evt: ibmvfc event struct
2127 static int ibmvfc_match_lun(struct ibmvfc_event *evt, void *device)
2129 if (evt->cmnd && evt->cmnd->device == device)
2146 struct ibmvfc_event *evt;
2156 list_for_each_entry(evt, &vhost->sent, queue) {
2157 if (match(evt, device)) {
2158 evt->eh_comp = ∁
2170 list_for_each_entry(evt, &vhost->sent, queue) {
2171 if (match(evt, device)) {
2172 evt->eh_comp = NULL;
2206 struct ibmvfc_event *evt, *found_evt;
2215 list_for_each_entry(evt, &vhost->sent, queue) {
2216 if (evt->cmnd && evt->cmnd->device == sdev) {
2217 found_evt = evt;
2230 evt = ibmvfc_get_event(vhost);
2231 ibmvfc_init_event(evt, ibmvfc_sync_completion, IBMVFC_MAD_FORMAT);
2233 tmf = &evt->iu.tmf;
2249 evt->sync_iu = &rsp;
2250 init_completion(&evt->comp);
2251 rsp_rc = ibmvfc_send_event(evt, vhost, default_timeout);
2266 wait_for_completion(&evt->comp);
2269 ibmvfc_free_event(evt);
2291 * @evt: ibmvfc event struct
2297 static int ibmvfc_match_key(struct ibmvfc_event *evt, void *key)
2301 if (evt->crq.format == IBMVFC_CMD_FORMAT &&
2302 be32_to_cpu(evt->iu.cmd.cancel_key) == cancel_key)
2309 * @evt: ibmvfc event struct
2315 static int ibmvfc_match_evt(struct ibmvfc_event *evt, void *match)
2317 if (evt == match)
2337 struct ibmvfc_event *evt, *found_evt;
2346 list_for_each_entry(evt, &vhost->sent, queue) {
2347 if (evt->cmnd && evt->cmnd->device == sdev) {
2348 found_evt = evt;
2361 evt = ibmvfc_get_event(vhost);
2362 ibmvfc_init_event(evt, ibmvfc_sync_completion, IBMVFC_CMD_FORMAT);
2364 tmf = &evt->iu.cmd;
2366 tmf->resp.va = cpu_to_be64(be64_to_cpu(evt->crq.ioba) + offsetof(struct ibmvfc_cmd, rsp));
2376 evt->sync_iu = &rsp_iu;
2378 init_completion(&evt->comp);
2379 rsp_rc = ibmvfc_send_event(evt, vhost, default_timeout);
2390 timeout = wait_for_completion_timeout(&evt->comp, timeout);
2409 rc = ibmvfc_wait_for_ops(vhost, evt, ibmvfc_match_evt);
2439 ibmvfc_free_event(evt);
2800 struct ibmvfc_event *evt = (struct ibmvfc_event *)be64_to_cpu(crq->ioba);
2859 if (unlikely(!ibmvfc_valid_event(&vhost->pool, evt))) {
2865 if (unlikely(atomic_read(&evt->free))) {
2871 del_timer(&evt->timer);
2872 list_del(&evt->queue);
2873 ibmvfc_trc_end(evt);
2874 evt->done(evt);
3370 * @evt: ibmvfc event struct
3373 static void ibmvfc_tgt_prli_done(struct ibmvfc_event *evt)
3375 struct ibmvfc_target *tgt = evt->tgt;
3376 struct ibmvfc_host *vhost = evt->vhost;
3377 struct ibmvfc_process_login *rsp = &evt->xfer_iu->prli;
3433 ibmvfc_free_event(evt);
3446 struct ibmvfc_event *evt;
3452 evt = ibmvfc_get_event(vhost);
3454 ibmvfc_init_event(evt, ibmvfc_tgt_prli_done, IBMVFC_MAD_FORMAT);
3455 evt->tgt = tgt;
3456 prli = &evt->iu.prli;
3472 if (ibmvfc_send_event(evt, vhost, default_timeout)) {
3482 * @evt: ibmvfc event struct
3485 static void ibmvfc_tgt_plogi_done(struct ibmvfc_event *evt)
3487 struct ibmvfc_target *tgt = evt->tgt;
3488 struct ibmvfc_host *vhost = evt->vhost;
3489 struct ibmvfc_port_login *rsp = &evt->xfer_iu->plogi;
3534 ibmvfc_free_event(evt);
3547 struct ibmvfc_event *evt;
3554 evt = ibmvfc_get_event(vhost);
3557 ibmvfc_init_event(evt, ibmvfc_tgt_plogi_done, IBMVFC_MAD_FORMAT);
3558 evt->tgt = tgt;
3559 plogi = &evt->iu.plogi;
3566 if (ibmvfc_send_event(evt, vhost, default_timeout)) {
3576 * @evt: ibmvfc event struct
3579 static void ibmvfc_tgt_implicit_logout_done(struct ibmvfc_event *evt)
3581 struct ibmvfc_target *tgt = evt->tgt;
3582 struct ibmvfc_host *vhost = evt->vhost;
3583 struct ibmvfc_implicit_logout *rsp = &evt->xfer_iu->implicit_logout;
3587 ibmvfc_free_event(evt);
3621 struct ibmvfc_event *evt;
3624 evt = ibmvfc_get_event(vhost);
3625 ibmvfc_init_event(evt, done, IBMVFC_MAD_FORMAT);
3626 evt->tgt = tgt;
3627 mad = &evt->iu.implicit_logout;
3633 return evt;
3644 struct ibmvfc_event *evt;
3650 evt = __ibmvfc_tgt_get_implicit_logout_evt(tgt,
3654 if (ibmvfc_send_event(evt, vhost, default_timeout)) {
3664 * @evt: ibmvfc event struct
3667 static void ibmvfc_tgt_implicit_logout_and_del_done(struct ibmvfc_event *evt)
3669 struct ibmvfc_target *tgt = evt->tgt;
3670 struct ibmvfc_host *vhost = evt->vhost;
3671 struct ibmvfc_passthru_mad *mad = &evt->xfer_iu->passthru;
3675 ibmvfc_free_event(evt);
3702 struct ibmvfc_event *evt;
3713 evt = __ibmvfc_tgt_get_implicit_logout_evt(tgt,
3717 if (ibmvfc_send_event(evt, vhost, default_timeout)) {
3727 * @evt: ibmvfc event struct
3730 static void ibmvfc_tgt_move_login_done(struct ibmvfc_event *evt)
3732 struct ibmvfc_target *tgt = evt->tgt;
3733 struct ibmvfc_host *vhost = evt->vhost;
3734 struct ibmvfc_move_login *rsp = &evt->xfer_iu->move_login;
3769 ibmvfc_free_event(evt);
3783 struct ibmvfc_event *evt;
3789 evt = ibmvfc_get_event(vhost);
3792 ibmvfc_init_event(evt, ibmvfc_tgt_move_login_done, IBMVFC_MAD_FORMAT);
3793 evt->tgt = tgt;
3794 move = &evt->iu.move_login;
3805 if (ibmvfc_send_event(evt, vhost, default_timeout)) {
3835 * @evt: ibmvfc event struct
3838 static void ibmvfc_tgt_adisc_done(struct ibmvfc_event *evt)
3840 struct ibmvfc_target *tgt = evt->tgt;
3841 struct ibmvfc_host *vhost = evt->vhost;
3842 struct ibmvfc_passthru_mad *mad = &evt->xfer_iu->passthru;
3872 ibmvfc_free_event(evt);
3878 * @evt: ibmvfc event struct
3881 static void ibmvfc_init_passthru(struct ibmvfc_event *evt)
3883 struct ibmvfc_passthru_mad *mad = &evt->iu.passthru;
3889 mad->cmd_ioba.va = cpu_to_be64((u64)be64_to_cpu(evt->crq.ioba) +
3894 mad->iu.cmd.va = cpu_to_be64((u64)be64_to_cpu(evt->crq.ioba) +
3898 mad->iu.rsp.va = cpu_to_be64((u64)be64_to_cpu(evt->crq.ioba) +
3906 * @evt: ibmvfc event struct
3914 static void ibmvfc_tgt_adisc_cancel_done(struct ibmvfc_event *evt)
3916 struct ibmvfc_host *vhost = evt->vhost;
3917 struct ibmvfc_target *tgt = evt->tgt;
3921 ibmvfc_free_event(evt);
3938 struct ibmvfc_event *evt;
3955 evt = ibmvfc_get_event(vhost);
3956 ibmvfc_init_event(evt, ibmvfc_tgt_adisc_cancel_done, IBMVFC_MAD_FORMAT);
3958 evt->tgt = tgt;
3959 tmf = &evt->iu.tmf;
3967 rc = ibmvfc_send_event(evt, vhost, default_timeout);
3994 struct ibmvfc_event *evt;
4000 evt = ibmvfc_get_event(vhost);
4002 ibmvfc_init_event(evt, ibmvfc_tgt_adisc_done, IBMVFC_MAD_FORMAT);
4003 evt->tgt = tgt;
4005 ibmvfc_init_passthru(evt);
4006 mad = &evt->iu.passthru;
4026 if (ibmvfc_send_event(evt, vhost, IBMVFC_ADISC_PLUS_CANCEL_TIMEOUT)) {
4037 * @evt: ibmvfc event struct
4040 static void ibmvfc_tgt_query_target_done(struct ibmvfc_event *evt)
4042 struct ibmvfc_target *tgt = evt->tgt;
4043 struct ibmvfc_host *vhost = evt->vhost;
4044 struct ibmvfc_query_tgt *rsp = &evt->xfer_iu->query_tgt;
4084 ibmvfc_free_event(evt);
4097 struct ibmvfc_event *evt;
4103 evt = ibmvfc_get_event(vhost);
4105 evt->tgt = tgt;
4106 ibmvfc_init_event(evt, ibmvfc_tgt_query_target_done, IBMVFC_MAD_FORMAT);
4107 query_tgt = &evt->iu.query_tgt;
4115 if (ibmvfc_send_event(evt, vhost, default_timeout)) {
4228 * @evt: ibmvfc event struct
4231 static void ibmvfc_discover_targets_done(struct ibmvfc_event *evt)
4233 struct ibmvfc_host *vhost = evt->vhost;
4234 struct ibmvfc_discover_targets *rsp = &evt->xfer_iu->discover_targets;
4258 ibmvfc_free_event(evt);
4270 struct ibmvfc_event *evt = ibmvfc_get_event(vhost);
4272 ibmvfc_init_event(evt, ibmvfc_discover_targets_done, IBMVFC_MAD_FORMAT);
4273 mad = &evt->iu.discover_targets;
4284 if (!ibmvfc_send_event(evt, vhost, default_timeout))
4292 * @evt: ibmvfc event struct
4295 static void ibmvfc_npiv_login_done(struct ibmvfc_event *evt)
4297 struct ibmvfc_host *vhost = evt->vhost;
4298 u32 mad_status = be16_to_cpu(evt->xfer_iu->npiv_login.common.status);
4305 ibmvfc_free_event(evt);
4315 ibmvfc_free_event(evt);
4321 ibmvfc_free_event(evt);
4326 ibmvfc_free_event(evt);
4383 struct ibmvfc_event *evt = ibmvfc_get_event(vhost);
4387 ibmvfc_init_event(evt, ibmvfc_npiv_login_done, IBMVFC_MAD_FORMAT);
4390 mad = &evt->iu.npiv_login;
4400 if (!ibmvfc_send_event(evt, vhost, default_timeout))
4411 static void ibmvfc_npiv_logout_done(struct ibmvfc_event *evt)
4413 struct ibmvfc_host *vhost = evt->vhost;
4414 u32 mad_status = be16_to_cpu(evt->xfer_iu->npiv_logout.common.status);
4416 ibmvfc_free_event(evt);
4446 struct ibmvfc_event *evt;
4448 evt = ibmvfc_get_event(vhost);
4449 ibmvfc_init_event(evt, ibmvfc_npiv_logout_done, IBMVFC_MAD_FORMAT);
4451 mad = &evt->iu.npiv_logout;
4459 if (!ibmvfc_send_event(evt, vhost, default_timeout))