Lines Matching defs:xact

85 	struct vmbus_xact *xact;
87 xact = malloc(sizeof(*xact), M_DEVBUF, M_WAITOK | M_ZERO);
88 xact->x_ctx = ctx;
91 xact->x_req = hyperv_dmamem_alloc(parent_dtag, PAGE_SIZE, 0,
92 ctx->xc_req_size, &xact->x_req_dma, BUS_DMA_WAITOK);
93 if (xact->x_req == NULL) {
94 free(xact, M_DEVBUF);
98 xact->x_priv = malloc(ctx->xc_priv_size, M_DEVBUF, M_WAITOK);
99 xact->x_resp0 = malloc(ctx->xc_resp_size, M_DEVBUF, M_WAITOK);
101 return (xact);
105 vmbus_xact_free(struct vmbus_xact *xact)
108 hyperv_dmamem_free(&xact->x_req_dma, xact->x_req);
109 free(xact->x_resp0, M_DEVBUF);
110 if (xact->x_priv != NULL)
111 free(xact->x_priv, M_DEVBUF);
112 free(xact, M_DEVBUF);
118 struct vmbus_xact *xact;
126 xact = NULL;
128 xact = ctx->xc_free;
129 KASSERT(xact != NULL, ("no free xact"));
130 KASSERT(xact->x_resp == NULL, ("xact has pending response"));
136 return (xact);
159 mtx_init(&ctx->xc_lock, "vmbus xact", NULL, MTX_DEF);
180 panic("can't get xact");
188 ("xact ctx was not orphaned"));
189 KASSERT(ctx->xc_orphan != NULL, ("no orphaned xact"));
207 struct vmbus_xact *xact;
212 xact = vmbus_xact_get1(ctx, VMBUS_XACT_CTXF_DESTROY);
213 if (xact == NULL)
216 memset(xact->x_req, 0, req_len);
217 return (xact);
221 vmbus_xact_put(struct vmbus_xact *xact)
223 struct vmbus_xact_ctx *ctx = xact->x_ctx;
225 KASSERT(ctx->xc_active == NULL, ("pending active xact"));
226 xact->x_resp = NULL;
229 KASSERT(ctx->xc_free == NULL, ("has free xact"));
230 ctx->xc_free = xact;
236 vmbus_xact_req_data(const struct vmbus_xact *xact)
239 return (xact->x_req);
243 vmbus_xact_req_paddr(const struct vmbus_xact *xact)
246 return (xact->x_req_dma.hv_paddr);
250 vmbus_xact_priv(const struct vmbus_xact *xact, size_t priv_len)
253 if (priv_len > xact->x_ctx->xc_priv_size)
255 return (xact->x_priv);
259 vmbus_xact_activate(struct vmbus_xact *xact)
261 struct vmbus_xact_ctx *ctx = xact->x_ctx;
263 KASSERT(xact->x_resp == NULL, ("xact has pending response"));
266 KASSERT(ctx->xc_active == NULL, ("pending active xact"));
267 ctx->xc_active = xact;
272 vmbus_xact_deactivate(struct vmbus_xact *xact)
274 struct vmbus_xact_ctx *ctx = xact->x_ctx;
277 KASSERT(ctx->xc_active == xact, ("xact mismatch"));
283 vmbus_xact_return(struct vmbus_xact *xact, size_t *resp_len)
285 struct vmbus_xact_ctx *ctx = xact->x_ctx;
289 KASSERT(ctx->xc_active == xact, ("xact trashed"));
291 if ((ctx->xc_flags & VMBUS_XACT_CTXF_DESTROY) && xact->x_resp == NULL) {
298 printf("vmbus: xact ctx was orphaned w/ pending xact\n");
301 KASSERT(xact->x_resp != NULL, ("no response"));
305 resp = xact->x_resp;
306 *resp_len = xact->x_resp_len;
312 vmbus_xact_wait1(struct vmbus_xact *xact, size_t *resp_len,
315 struct vmbus_xact_ctx *ctx = xact->x_ctx;
320 KASSERT(ctx->xc_active == xact, ("xact mismatch"));
321 while (xact->x_resp == NULL &&
332 resp = vmbus_xact_return(xact, resp_len);
340 vmbus_xact_wait(struct vmbus_xact *xact, size_t *resp_len)
343 return (vmbus_xact_wait1(xact, resp_len, true /* can sleep */));
347 vmbus_xact_busywait(struct vmbus_xact *xact, size_t *resp_len)
350 return (vmbus_xact_wait1(xact, resp_len, false /* can't sleep */));
354 vmbus_xact_poll(struct vmbus_xact *xact, size_t *resp_len)
356 struct vmbus_xact_ctx *ctx = xact->x_ctx;
361 KASSERT(ctx->xc_active == xact, ("xact mismatch"));
362 if (xact->x_resp == NULL &&
368 resp = vmbus_xact_return(xact, resp_len);
376 vmbus_xact_save_resp(struct vmbus_xact *xact, const void *data, size_t dlen)
378 struct vmbus_xact_ctx *ctx = xact->x_ctx;
384 printf("vmbus: xact response truncated %zu -> %zu\n",
389 KASSERT(ctx->xc_active == xact, ("xact mismatch"));
390 memcpy(xact->x_resp0, data, cplen);
391 xact->x_resp_len = cplen;
392 xact->x_resp = xact->x_resp0;
396 vmbus_xact_wakeup(struct vmbus_xact *xact, const void *data, size_t dlen)
398 struct vmbus_xact_ctx *ctx = xact->x_ctx;
407 vmbus_xact_save_resp(xact, data, dlen);
411 ("no active xact pending"));
412 printf("vmbus: drop xact response\n");
435 ("no active xact pending"));
436 printf("vmbus: drop xact response\n");