Lines Matching refs:xact
85 struct vmbus_xact *xact; in vmbus_xact_alloc() local
87 xact = malloc(sizeof(*xact), M_DEVBUF, M_WAITOK | M_ZERO); in vmbus_xact_alloc()
88 xact->x_ctx = ctx; in vmbus_xact_alloc()
91 xact->x_req = contigmalloc(ctx->xc_req_size, M_DEVBUF, in vmbus_xact_alloc()
93 if (xact->x_req == NULL) { in vmbus_xact_alloc()
94 free(xact, M_DEVBUF); in vmbus_xact_alloc()
98 xact->x_priv = malloc(ctx->xc_priv_size, M_DEVBUF, M_WAITOK); in vmbus_xact_alloc()
99 xact->x_resp0 = malloc(ctx->xc_resp_size, M_DEVBUF, M_WAITOK); in vmbus_xact_alloc()
101 return (xact); in vmbus_xact_alloc()
105 vmbus_xact_free(struct vmbus_xact *xact) in vmbus_xact_free() argument
108 contigfree(xact->x_req, xact->x_ctx->xc_req_size, M_DEVBUF); in vmbus_xact_free()
109 free(xact->x_resp0, M_DEVBUF); in vmbus_xact_free()
110 if (xact->x_priv != NULL) in vmbus_xact_free()
111 free(xact->x_priv, M_DEVBUF); in vmbus_xact_free()
112 free(xact, M_DEVBUF); in vmbus_xact_free()
118 struct vmbus_xact *xact; in vmbus_xact_get1() local
126 xact = NULL; in vmbus_xact_get1()
128 xact = ctx->xc_free; in vmbus_xact_get1()
129 KASSERT(xact != NULL, ("no free xact")); in vmbus_xact_get1()
130 KASSERT(xact->x_resp == NULL, ("xact has pending response")); in vmbus_xact_get1()
136 return (xact); in vmbus_xact_get1()
207 struct vmbus_xact *xact; in vmbus_xact_get() local
212 xact = vmbus_xact_get1(ctx, VMBUS_XACT_CTXF_DESTROY); in vmbus_xact_get()
213 if (xact == NULL) in vmbus_xact_get()
216 memset(xact->x_req, 0, req_len); in vmbus_xact_get()
217 return (xact); in vmbus_xact_get()
221 vmbus_xact_put(struct vmbus_xact *xact) in vmbus_xact_put() argument
223 struct vmbus_xact_ctx *ctx = xact->x_ctx; in vmbus_xact_put()
226 xact->x_resp = NULL; in vmbus_xact_put()
230 ctx->xc_free = xact; in vmbus_xact_put()
236 vmbus_xact_req_data(const struct vmbus_xact *xact) in vmbus_xact_req_data() argument
239 return (xact->x_req); in vmbus_xact_req_data()
243 vmbus_xact_req_paddr(const struct vmbus_xact *xact) in vmbus_xact_req_paddr() argument
246 return (pmap_kextract((vm_offset_t)xact->x_req)); in vmbus_xact_req_paddr()
250 vmbus_xact_priv(const struct vmbus_xact *xact, size_t priv_len) in vmbus_xact_priv() argument
253 if (priv_len > xact->x_ctx->xc_priv_size) in vmbus_xact_priv()
255 return (xact->x_priv); in vmbus_xact_priv()
259 vmbus_xact_activate(struct vmbus_xact *xact) in vmbus_xact_activate() argument
261 struct vmbus_xact_ctx *ctx = xact->x_ctx; in vmbus_xact_activate()
263 KASSERT(xact->x_resp == NULL, ("xact has pending response")); in vmbus_xact_activate()
267 ctx->xc_active = xact; in vmbus_xact_activate()
272 vmbus_xact_deactivate(struct vmbus_xact *xact) in vmbus_xact_deactivate() argument
274 struct vmbus_xact_ctx *ctx = xact->x_ctx; in vmbus_xact_deactivate()
277 KASSERT(ctx->xc_active == xact, ("xact mismatch")); in vmbus_xact_deactivate()
283 vmbus_xact_return(struct vmbus_xact *xact, size_t *resp_len) in vmbus_xact_return() argument
285 struct vmbus_xact_ctx *ctx = xact->x_ctx; in vmbus_xact_return()
289 KASSERT(ctx->xc_active == xact, ("xact trashed")); in vmbus_xact_return()
291 if ((ctx->xc_flags & VMBUS_XACT_CTXF_DESTROY) && xact->x_resp == NULL) { in vmbus_xact_return()
301 KASSERT(xact->x_resp != NULL, ("no response")); in vmbus_xact_return()
305 resp = xact->x_resp; in vmbus_xact_return()
306 *resp_len = xact->x_resp_len; in vmbus_xact_return()
312 vmbus_xact_wait1(struct vmbus_xact *xact, size_t *resp_len, in vmbus_xact_wait1() argument
315 struct vmbus_xact_ctx *ctx = xact->x_ctx; in vmbus_xact_wait1()
320 KASSERT(ctx->xc_active == xact, ("xact mismatch")); in vmbus_xact_wait1()
321 while (xact->x_resp == NULL && in vmbus_xact_wait1()
332 resp = vmbus_xact_return(xact, resp_len); in vmbus_xact_wait1()
340 vmbus_xact_wait(struct vmbus_xact *xact, size_t *resp_len) in vmbus_xact_wait() argument
343 return (vmbus_xact_wait1(xact, resp_len, true /* can sleep */)); in vmbus_xact_wait()
347 vmbus_xact_busywait(struct vmbus_xact *xact, size_t *resp_len) in vmbus_xact_busywait() argument
350 return (vmbus_xact_wait1(xact, resp_len, false /* can't sleep */)); in vmbus_xact_busywait()
354 vmbus_xact_poll(struct vmbus_xact *xact, size_t *resp_len) in vmbus_xact_poll() argument
356 struct vmbus_xact_ctx *ctx = xact->x_ctx; in vmbus_xact_poll()
361 KASSERT(ctx->xc_active == xact, ("xact mismatch")); in vmbus_xact_poll()
362 if (xact->x_resp == NULL && in vmbus_xact_poll()
368 resp = vmbus_xact_return(xact, resp_len); in vmbus_xact_poll()
376 vmbus_xact_save_resp(struct vmbus_xact *xact, const void *data, size_t dlen) in vmbus_xact_save_resp() argument
378 struct vmbus_xact_ctx *ctx = xact->x_ctx; in vmbus_xact_save_resp()
389 KASSERT(ctx->xc_active == xact, ("xact mismatch")); in vmbus_xact_save_resp()
390 memcpy(xact->x_resp0, data, cplen); in vmbus_xact_save_resp()
391 xact->x_resp_len = cplen; in vmbus_xact_save_resp()
392 xact->x_resp = xact->x_resp0; in vmbus_xact_save_resp()
396 vmbus_xact_wakeup(struct vmbus_xact *xact, const void *data, size_t dlen) in vmbus_xact_wakeup() argument
398 struct vmbus_xact_ctx *ctx = xact->x_ctx; in vmbus_xact_wakeup()
407 vmbus_xact_save_resp(xact, data, dlen); in vmbus_xact_wakeup()