Lines Matching defs:rqst

86 static u16 ssh_request_get_rqid(struct ssh_request *rqst)
88 return get_unaligned_le16(rqst->packet.data.ptr
92 static u32 ssh_request_get_rqid_safe(struct ssh_request *rqst)
94 if (!rqst->packet.data.ptr)
97 return ssh_request_get_rqid(rqst);
100 static void ssh_rtl_queue_remove(struct ssh_request *rqst)
102 struct ssh_rtl *rtl = ssh_request_rtl(rqst);
106 if (!test_and_clear_bit(SSH_REQUEST_SF_QUEUED_BIT, &rqst->state)) {
111 list_del(&rqst->node);
114 ssh_request_put(rqst);
128 static void ssh_rtl_pending_remove(struct ssh_request *rqst)
130 struct ssh_rtl *rtl = ssh_request_rtl(rqst);
134 if (!test_and_clear_bit(SSH_REQUEST_SF_PENDING_BIT, &rqst->state)) {
140 list_del(&rqst->node);
144 ssh_request_put(rqst);
147 static int ssh_rtl_tx_pending_push(struct ssh_request *rqst)
149 struct ssh_rtl *rtl = ssh_request_rtl(rqst);
153 if (test_bit(SSH_REQUEST_SF_LOCKED_BIT, &rqst->state)) {
158 if (test_and_set_bit(SSH_REQUEST_SF_PENDING_BIT, &rqst->state)) {
164 list_add_tail(&ssh_request_get(rqst)->node, &rtl->pending.head);
170 static void ssh_rtl_complete_with_status(struct ssh_request *rqst, int status)
172 struct ssh_rtl *rtl = ssh_request_rtl(rqst);
174 trace_ssam_request_complete(rqst, status);
178 ssh_request_get_rqid_safe(rqst), status);
180 rqst->ops->complete(rqst, NULL, NULL, status);
183 static void ssh_rtl_complete_with_rsp(struct ssh_request *rqst,
187 struct ssh_rtl *rtl = ssh_request_rtl(rqst);
189 trace_ssam_request_complete(rqst, 0);
192 ssh_request_get_rqid(rqst));
194 rqst->ops->complete(rqst, cmd, data, 0);
197 static bool ssh_rtl_tx_can_process(struct ssh_request *rqst)
199 struct ssh_rtl *rtl = ssh_request_rtl(rqst);
201 if (test_bit(SSH_REQUEST_TY_FLUSH_BIT, &rqst->state))
209 struct ssh_request *rqst = ERR_PTR(-ENOENT);
220 rqst = ERR_PTR(-EBUSY);
232 rqst = p;
237 return rqst;
242 struct ssh_request *rqst;
246 rqst = ssh_rtl_tx_next(rtl);
247 if (IS_ERR(rqst))
248 return PTR_ERR(rqst);
251 status = ssh_rtl_tx_pending_push(rqst);
253 ssh_request_put(rqst);
258 status = ssh_ptl_submit(&rtl->ptl, &rqst->packet);
264 set_bit(SSH_REQUEST_SF_LOCKED_BIT, &rqst->state);
276 ssh_rtl_pending_remove(rqst);
277 ssh_rtl_complete_with_status(rqst, -ESHUTDOWN);
279 ssh_request_put(rqst);
297 ssh_request_put(rqst);
301 ssh_request_put(rqst);
351 * @rqst: The request to submit.
361 int ssh_rtl_submit(struct ssh_rtl *rtl, struct ssh_request *rqst)
363 trace_ssam_request_submit(rqst);
370 if (test_bit(SSH_REQUEST_TY_HAS_RESPONSE_BIT, &rqst->state))
371 if (!test_bit(SSH_PACKET_TY_SEQUENCED_BIT, &rqst->packet.state))
391 if (cmpxchg(&rqst->packet.ptl, NULL, &rtl->ptl)) {
412 if (test_bit(SSH_REQUEST_SF_LOCKED_BIT, &rqst->state)) {
417 set_bit(SSH_REQUEST_SF_QUEUED_BIT, &rqst->state);
418 list_add_tail(&ssh_request_get(rqst)->node, &rtl->queue.head);
443 static void ssh_rtl_timeout_start(struct ssh_request *rqst)
445 struct ssh_rtl *rtl = ssh_request_rtl(rqst);
449 if (test_bit(SSH_REQUEST_SF_LOCKED_BIT, &rqst->state))
456 WRITE_ONCE(rqst->timestamp, timestamp);
707 * @rqst: The request to cancel.
728 bool ssh_rtl_cancel(struct ssh_request *rqst, bool pending)
733 if (test_and_set_bit(SSH_REQUEST_SF_CANCELED_BIT, &rqst->state))
736 trace_ssam_request_cancel(rqst);
739 canceled = ssh_rtl_cancel_pending(rqst);
741 canceled = ssh_rtl_cancel_nonpending(rqst);
744 rtl = ssh_request_rtl(rqst);
961 struct ssh_request *rqst;
963 rqst = to_ssh_request(p);
964 rqst->ops->release(rqst);
974 * @rqst: The request to initialize.
985 int ssh_request_init(struct ssh_request *rqst, enum ssam_request_flags flags,
997 ssh_packet_init(&rqst->packet, type, SSH_PACKET_PRIORITY(DATA, 0),
1000 INIT_LIST_HEAD(&rqst->node);
1002 rqst->state = 0;
1004 rqst->state |= BIT(SSH_REQUEST_TY_HAS_RESPONSE_BIT);
1006 rqst->timestamp = KTIME_MAX;
1007 rqst->ops = ops;
1107 struct ssh_flush_request *rqst;
1109 rqst = container_of(r, struct ssh_flush_request, base);
1110 rqst->status = status;
1115 struct ssh_flush_request *rqst;
1117 rqst = container_of(r, struct ssh_flush_request, base);
1118 complete_all(&rqst->completion);
1157 struct ssh_flush_request rqst;
1160 ssh_request_init(&rqst.base, init_flags, &ssh_rtl_flush_request_ops);
1161 rqst.base.packet.state |= BIT(SSH_PACKET_TY_FLUSH_BIT);
1162 rqst.base.packet.priority = SSH_PACKET_PRIORITY(FLUSH, 0);
1163 rqst.base.state |= BIT(SSH_REQUEST_TY_FLUSH_BIT);
1165 init_completion(&rqst.completion);
1167 status = ssh_rtl_submit(rtl, &rqst.base);
1171 ssh_request_put(&rqst.base);
1173 if (!wait_for_completion_timeout(&rqst.completion, timeout)) {
1174 ssh_rtl_cancel(&rqst.base, true);
1175 wait_for_completion(&rqst.completion);
1178 WARN_ON(rqst.status != 0 && rqst.status != -ECANCELED &&
1179 rqst.status != -ESHUTDOWN && rqst.status != -EINTR);
1181 return rqst.status == -ECANCELED ? -ETIMEDOUT : rqst.status;