lib/idxd: add raw request for low level testing
Provide an interface to allow the caller to provide a proprely formatted descriptor. Signed-off-by: paul luse <paul.e.luse@intel.com> Change-Id: I5c397761f556361040ec962d61169459150b6494 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/12703 Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
parent
000ee408e7
commit
fe044f6988
@ -333,6 +333,25 @@ int spdk_idxd_submit_decompress(struct spdk_idxd_io_channel *chan,
|
|||||||
struct iovec *siov, uint32_t siovcnt,
|
struct iovec *siov, uint32_t siovcnt,
|
||||||
int flags, spdk_idxd_req_cb cb_fn, void *cb_arg);
|
int flags, spdk_idxd_req_cb cb_fn, void *cb_arg);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build and submit an IDXD raw request.
|
||||||
|
*
|
||||||
|
* This function will process the supplied descriptor and then immediately submit
|
||||||
|
* by writing to the proper device portal.
|
||||||
|
*
|
||||||
|
* \param chan IDXD channel to submit request.
|
||||||
|
* \param desc proprely formatted IDXD descriptor. Memory addresses should be physical.
|
||||||
|
* The completion address will be filled in by the lower level library.
|
||||||
|
* \param cb_fn Callback function which will be called when the request is complete.
|
||||||
|
* \param cb_arg Opaque value which will be passed back as the arg parameter in
|
||||||
|
* the completion callback.
|
||||||
|
*
|
||||||
|
* \return 0 on success, negative errno on failure.
|
||||||
|
*/
|
||||||
|
int spdk_idxd_submit_raw_desc(struct spdk_idxd_io_channel *chan,
|
||||||
|
struct idxd_hw_desc *desc,
|
||||||
|
spdk_idxd_req_cb cb_fn, void *cb_arg);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check for completed requests on an IDXD channel.
|
* Check for completed requests on an IDXD channel.
|
||||||
*
|
*
|
||||||
|
@ -1274,6 +1274,38 @@ spdk_idxd_submit_decompress(struct spdk_idxd_io_channel *chan,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
spdk_idxd_submit_raw_desc(struct spdk_idxd_io_channel *chan,
|
||||||
|
struct idxd_hw_desc *_desc,
|
||||||
|
spdk_idxd_req_cb cb_fn, void *cb_arg)
|
||||||
|
{
|
||||||
|
struct idxd_hw_desc *desc;
|
||||||
|
struct idxd_ops *op;
|
||||||
|
int rc, flags = 0;
|
||||||
|
uint64_t comp_addr;
|
||||||
|
|
||||||
|
assert(chan != NULL);
|
||||||
|
assert(_desc != NULL);
|
||||||
|
|
||||||
|
/* Common prep. */
|
||||||
|
rc = _idxd_prep_command(chan, cb_fn, cb_arg, flags, &desc, &op);
|
||||||
|
if (rc) {
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Command specific. */
|
||||||
|
flags = desc->flags;
|
||||||
|
comp_addr = desc->completion_addr;
|
||||||
|
memcpy(desc, _desc, sizeof(*desc));
|
||||||
|
desc->flags |= flags;
|
||||||
|
desc->completion_addr = comp_addr;
|
||||||
|
|
||||||
|
/* Submit operation. */
|
||||||
|
_submit_to_hw(chan, op);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
_dump_sw_error_reg(struct spdk_idxd_io_channel *chan)
|
_dump_sw_error_reg(struct spdk_idxd_io_channel *chan)
|
||||||
{
|
{
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
spdk_idxd_submit_fill;
|
spdk_idxd_submit_fill;
|
||||||
spdk_idxd_submit_compress;
|
spdk_idxd_submit_compress;
|
||||||
spdk_idxd_submit_decompress;
|
spdk_idxd_submit_decompress;
|
||||||
|
spdk_idxd_submit_raw_desc;
|
||||||
spdk_idxd_process_events;
|
spdk_idxd_process_events;
|
||||||
spdk_idxd_get_channel;
|
spdk_idxd_get_channel;
|
||||||
spdk_idxd_put_channel;
|
spdk_idxd_put_channel;
|
||||||
|
Loading…
Reference in New Issue
Block a user