1*488570ebSJim Harris /* SPDX-License-Identifier: BSD-3-Clause 23be29357SNiklas Cassel * Copyright (c) 2020, Western Digital Corporation. All rights reserved. 33be29357SNiklas Cassel */ 43be29357SNiklas Cassel 53be29357SNiklas Cassel /** 63be29357SNiklas Cassel * \file 73be29357SNiklas Cassel * NVMe driver public API extension for Zoned Namespace Command Set 83be29357SNiklas Cassel */ 93be29357SNiklas Cassel 103be29357SNiklas Cassel #ifndef SPDK_NVME_ZNS_H 113be29357SNiklas Cassel #define SPDK_NVME_ZNS_H 123be29357SNiklas Cassel 133be29357SNiklas Cassel #include "spdk/stdinc.h" 143be29357SNiklas Cassel 153be29357SNiklas Cassel #ifdef __cplusplus 163be29357SNiklas Cassel extern "C" { 173be29357SNiklas Cassel #endif 183be29357SNiklas Cassel 193be29357SNiklas Cassel #include "spdk/nvme.h" 203be29357SNiklas Cassel 213be29357SNiklas Cassel /** 223be29357SNiklas Cassel * Get the Zoned Namespace Command Set Specific Identify Namespace data 233be29357SNiklas Cassel * as defined by the NVMe Zoned Namespace Command Set Specification. 243be29357SNiklas Cassel * 253be29357SNiklas Cassel * This function is thread safe and can be called at any point while the controller 263be29357SNiklas Cassel * is attached to the SPDK NVMe driver. 273be29357SNiklas Cassel * 283be29357SNiklas Cassel * \param ns Namespace. 293be29357SNiklas Cassel * 303be29357SNiklas Cassel * \return a pointer to the namespace data, or NULL if the namespace is not 313be29357SNiklas Cassel * a Zoned Namespace. 323be29357SNiklas Cassel */ 333be29357SNiklas Cassel const struct spdk_nvme_zns_ns_data *spdk_nvme_zns_ns_get_data(struct spdk_nvme_ns *ns); 343be29357SNiklas Cassel 353be29357SNiklas Cassel /** 369a800c38SNiklas Cassel * Get the zone size, in number of sectors, of the given namespace. 379a800c38SNiklas Cassel * 389a800c38SNiklas Cassel * This function is thread safe and can be called at any point while the controller 399a800c38SNiklas Cassel * is attached to the SPDK NVMe driver. 409a800c38SNiklas Cassel * 419a800c38SNiklas Cassel * \param ns Namespace to query. 429a800c38SNiklas Cassel * 439a800c38SNiklas Cassel * \return the zone size of the given namespace in number of sectors. 449a800c38SNiklas Cassel */ 459a800c38SNiklas Cassel uint64_t spdk_nvme_zns_ns_get_zone_size_sectors(struct spdk_nvme_ns *ns); 469a800c38SNiklas Cassel 479a800c38SNiklas Cassel /** 486abee9a2SNiklas Cassel * Get the zone size, in bytes, of the given namespace. 496abee9a2SNiklas Cassel * 506abee9a2SNiklas Cassel * This function is thread safe and can be called at any point while the controller 516abee9a2SNiklas Cassel * is attached to the SPDK NVMe driver. 526abee9a2SNiklas Cassel * 536abee9a2SNiklas Cassel * \param ns Namespace to query. 546abee9a2SNiklas Cassel * 556abee9a2SNiklas Cassel * \return the zone size of the given namespace in bytes. 566abee9a2SNiklas Cassel */ 576abee9a2SNiklas Cassel uint64_t spdk_nvme_zns_ns_get_zone_size(struct spdk_nvme_ns *ns); 586abee9a2SNiklas Cassel 596abee9a2SNiklas Cassel /** 60be3ff9c0SNiklas Cassel * Get the number of zones for the given namespace. 61be3ff9c0SNiklas Cassel * 62be3ff9c0SNiklas Cassel * This function is thread safe and can be called at any point while the controller 63be3ff9c0SNiklas Cassel * is attached to the SPDK NVMe driver. 64be3ff9c0SNiklas Cassel * 65be3ff9c0SNiklas Cassel * \param ns Namespace to query. 66be3ff9c0SNiklas Cassel * 67be3ff9c0SNiklas Cassel * \return the number of zones. 68be3ff9c0SNiklas Cassel */ 69be3ff9c0SNiklas Cassel uint64_t spdk_nvme_zns_ns_get_num_zones(struct spdk_nvme_ns *ns); 70be3ff9c0SNiklas Cassel 71be3ff9c0SNiklas Cassel /** 72bb5330c0SNiklas Cassel * Get the maximum number of open zones for the given namespace. 73bb5330c0SNiklas Cassel * 74bb5330c0SNiklas Cassel * An open zone is a zone in any of the zone states: 75bb5330c0SNiklas Cassel * EXPLICIT OPEN or IMPLICIT OPEN. 76bb5330c0SNiklas Cassel * 77bb5330c0SNiklas Cassel * If this value is 0, there is no limit. 78bb5330c0SNiklas Cassel * 79bb5330c0SNiklas Cassel * This function is thread safe and can be called at any point while the controller 80bb5330c0SNiklas Cassel * is attached to the SPDK NVMe driver. 81bb5330c0SNiklas Cassel * 82bb5330c0SNiklas Cassel * \param ns Namespace to query. 83bb5330c0SNiklas Cassel * 84bb5330c0SNiklas Cassel * \return the maximum number of open zones. 85bb5330c0SNiklas Cassel */ 86bb5330c0SNiklas Cassel uint32_t spdk_nvme_zns_ns_get_max_open_zones(struct spdk_nvme_ns *ns); 87bb5330c0SNiklas Cassel 88bb5330c0SNiklas Cassel /** 899d79d27eSNiklas Cassel * Get the maximum number of active zones for the given namespace. 909d79d27eSNiklas Cassel * 919d79d27eSNiklas Cassel * An active zone is a zone in any of the zone states: 929d79d27eSNiklas Cassel * EXPLICIT OPEN, IMPLICIT OPEN or CLOSED. 939d79d27eSNiklas Cassel * 949d79d27eSNiklas Cassel * If this value is 0, there is no limit. 959d79d27eSNiklas Cassel * 969d79d27eSNiklas Cassel * This function is thread safe and can be called at any point while the controller 979d79d27eSNiklas Cassel * is attached to the SPDK NVMe driver. 989d79d27eSNiklas Cassel * 999d79d27eSNiklas Cassel * \param ns Namespace to query. 1009d79d27eSNiklas Cassel * 1019d79d27eSNiklas Cassel * \return the maximum number of active zones. 1029d79d27eSNiklas Cassel */ 1039d79d27eSNiklas Cassel uint32_t spdk_nvme_zns_ns_get_max_active_zones(struct spdk_nvme_ns *ns); 1049d79d27eSNiklas Cassel 1059d79d27eSNiklas Cassel /** 1063be29357SNiklas Cassel * Get the Zoned Namespace Command Set Specific Identify Controller data 1073be29357SNiklas Cassel * as defined by the NVMe Zoned Namespace Command Set Specification. 1083be29357SNiklas Cassel * 1093be29357SNiklas Cassel * This function is thread safe and can be called at any point while the controller 1103be29357SNiklas Cassel * is attached to the SPDK NVMe driver. 1113be29357SNiklas Cassel * 1123be29357SNiklas Cassel * \param ctrlr Opaque handle to NVMe controller. 1133be29357SNiklas Cassel * 1143be29357SNiklas Cassel * \return pointer to the controller data, or NULL if the controller does not 1153be29357SNiklas Cassel * support the Zoned Command Set. 1163be29357SNiklas Cassel */ 1173be29357SNiklas Cassel const struct spdk_nvme_zns_ctrlr_data *spdk_nvme_zns_ctrlr_get_data(struct spdk_nvme_ctrlr *ctrlr); 1183be29357SNiklas Cassel 11967475a58SNiklas Cassel /** 12023a19169SNiklas Cassel * Get the maximum zone append data transfer size of a given NVMe controller. 12123a19169SNiklas Cassel * 12223a19169SNiklas Cassel * \param ctrlr Opaque handle to NVMe controller. 12323a19169SNiklas Cassel * 12423a19169SNiklas Cassel * \return Maximum zone append data transfer size of the NVMe controller in bytes. 12523a19169SNiklas Cassel */ 12623a19169SNiklas Cassel uint32_t spdk_nvme_zns_ctrlr_get_max_zone_append_size(const struct spdk_nvme_ctrlr *ctrlr); 12723a19169SNiklas Cassel 12823a19169SNiklas Cassel /** 129aa6767fbSNiklas Cassel * Submit a zone append I/O to the specified NVMe namespace. 130aa6767fbSNiklas Cassel * 131aa6767fbSNiklas Cassel * The command is submitted to a qpair allocated by spdk_nvme_ctrlr_alloc_io_qpair(). 132aa6767fbSNiklas Cassel * The user must ensure that only one thread submits I/O on a given qpair at any 133aa6767fbSNiklas Cassel * given time. 134aa6767fbSNiklas Cassel * 135c56fb6d3SNiklas Cassel * \param ns NVMe namespace to submit the zone append I/O. 136aa6767fbSNiklas Cassel * \param qpair I/O queue pair to submit the request. 137aa6767fbSNiklas Cassel * \param buffer Virtual address pointer to the data payload buffer. 138aa6767fbSNiklas Cassel * \param zslba Zone Start LBA of the zone that we are appending to. 139c56fb6d3SNiklas Cassel * \param lba_count Length (in sectors) for the zone append operation. 140aa6767fbSNiklas Cassel * \param cb_fn Callback function to invoke when the I/O is completed. 141aa6767fbSNiklas Cassel * \param cb_arg Argument to pass to the callback function. 142aa6767fbSNiklas Cassel * \param io_flags Set flags, defined by the SPDK_NVME_IO_FLAGS_* entries in 143aa6767fbSNiklas Cassel * spdk/nvme_spec.h, for this I/O. 144aa6767fbSNiklas Cassel * 145aa6767fbSNiklas Cassel * \return 0 if successfully submitted, negated errnos on the following error conditions: 146aa6767fbSNiklas Cassel * -EINVAL: The request is malformed. 147aa6767fbSNiklas Cassel * -ENOMEM: The request cannot be allocated. 148aa6767fbSNiklas Cassel * -ENXIO: The qpair is failed at the transport level. 149aa6767fbSNiklas Cassel */ 150aa6767fbSNiklas Cassel int spdk_nvme_zns_zone_append(struct spdk_nvme_ns *ns, struct spdk_nvme_qpair *qpair, 151aa6767fbSNiklas Cassel void *buffer, uint64_t zslba, 152aa6767fbSNiklas Cassel uint32_t lba_count, spdk_nvme_cmd_cb cb_fn, void *cb_arg, 153aa6767fbSNiklas Cassel uint32_t io_flags); 154aa6767fbSNiklas Cassel 155aa6767fbSNiklas Cassel /** 156aa6767fbSNiklas Cassel * Submit a zone append I/O to the specified NVMe namespace. 157aa6767fbSNiklas Cassel * 158aa6767fbSNiklas Cassel * The command is submitted to a qpair allocated by spdk_nvme_ctrlr_alloc_io_qpair(). 159aa6767fbSNiklas Cassel * The user must ensure that only one thread submits I/O on a given qpair at any 160aa6767fbSNiklas Cassel * given time. 161aa6767fbSNiklas Cassel * 162c56fb6d3SNiklas Cassel * \param ns NVMe namespace to submit the zone append I/O. 163aa6767fbSNiklas Cassel * \param qpair I/O queue pair to submit the request. 164aa6767fbSNiklas Cassel * \param buffer Virtual address pointer to the data payload buffer. 165aa6767fbSNiklas Cassel * \param metadata Virtual address pointer to the metadata payload, the length 166aa6767fbSNiklas Cassel * of metadata is specified by spdk_nvme_ns_get_md_size(). 167aa6767fbSNiklas Cassel * \param zslba Zone Start LBA of the zone that we are appending to. 168c56fb6d3SNiklas Cassel * \param lba_count Length (in sectors) for the zone append operation. 169aa6767fbSNiklas Cassel * \param cb_fn Callback function to invoke when the I/O is completed. 170aa6767fbSNiklas Cassel * \param cb_arg Argument to pass to the callback function. 171aa6767fbSNiklas Cassel * \param io_flags Set flags, defined by the SPDK_NVME_IO_FLAGS_* entries in 172aa6767fbSNiklas Cassel * spdk/nvme_spec.h, for this I/O. 173aa6767fbSNiklas Cassel * \param apptag_mask Application tag mask. 174aa6767fbSNiklas Cassel * \param apptag Application tag to use end-to-end protection information. 175aa6767fbSNiklas Cassel * 176aa6767fbSNiklas Cassel * \return 0 if successfully submitted, negated errnos on the following error conditions: 177aa6767fbSNiklas Cassel * -EINVAL: The request is malformed. 178aa6767fbSNiklas Cassel * -ENOMEM: The request cannot be allocated. 179aa6767fbSNiklas Cassel * -ENXIO: The qpair is failed at the transport level. 180aa6767fbSNiklas Cassel */ 181aa6767fbSNiklas Cassel int spdk_nvme_zns_zone_append_with_md(struct spdk_nvme_ns *ns, struct spdk_nvme_qpair *qpair, 182aa6767fbSNiklas Cassel void *buffer, void *metadata, uint64_t zslba, 183aa6767fbSNiklas Cassel uint32_t lba_count, spdk_nvme_cmd_cb cb_fn, void *cb_arg, 184aa6767fbSNiklas Cassel uint32_t io_flags, uint16_t apptag_mask, uint16_t apptag); 185aa6767fbSNiklas Cassel 186aa6767fbSNiklas Cassel /** 187014baeb8SNiklas Cassel * Submit a zone append I/O to the specified NVMe namespace. 188014baeb8SNiklas Cassel * 189014baeb8SNiklas Cassel * The command is submitted to a qpair allocated by spdk_nvme_ctrlr_alloc_io_qpair(). 190014baeb8SNiklas Cassel * The user must ensure that only one thread submits I/O on a given qpair at any 191014baeb8SNiklas Cassel * given time. 192014baeb8SNiklas Cassel * 193014baeb8SNiklas Cassel * \param ns NVMe namespace to submit the zone append I/O. 194014baeb8SNiklas Cassel * \param qpair I/O queue pair to submit the request. 195014baeb8SNiklas Cassel * \param zslba Zone Start LBA of the zone that we are appending to. 196014baeb8SNiklas Cassel * \param lba_count Length (in sectors) for the zone append operation. 197014baeb8SNiklas Cassel * \param cb_fn Callback function to invoke when the I/O is completed. 198014baeb8SNiklas Cassel * \param cb_arg Argument to pass to the callback function. 199014baeb8SNiklas Cassel * \param io_flags Set flags, defined in nvme_spec.h, for this I/O. 200014baeb8SNiklas Cassel * \param reset_sgl_fn Callback function to reset scattered payload. 201014baeb8SNiklas Cassel * \param next_sge_fn Callback function to iterate each scattered payload memory 202014baeb8SNiklas Cassel * segment. 203014baeb8SNiklas Cassel * 204014baeb8SNiklas Cassel * \return 0 if successfully submitted, negated errnos on the following error conditions: 205014baeb8SNiklas Cassel * -EINVAL: The request is malformed. 206014baeb8SNiklas Cassel * -ENOMEM: The request cannot be allocated. 207014baeb8SNiklas Cassel * -ENXIO: The qpair is failed at the transport level. 208014baeb8SNiklas Cassel */ 209014baeb8SNiklas Cassel int spdk_nvme_zns_zone_appendv(struct spdk_nvme_ns *ns, struct spdk_nvme_qpair *qpair, 210014baeb8SNiklas Cassel uint64_t zslba, uint32_t lba_count, 211014baeb8SNiklas Cassel spdk_nvme_cmd_cb cb_fn, void *cb_arg, uint32_t io_flags, 212014baeb8SNiklas Cassel spdk_nvme_req_reset_sgl_cb reset_sgl_fn, 213014baeb8SNiklas Cassel spdk_nvme_req_next_sge_cb next_sge_fn); 214014baeb8SNiklas Cassel 215014baeb8SNiklas Cassel /** 216014baeb8SNiklas Cassel * Submit a zone append I/O to the specified NVMe namespace. 217014baeb8SNiklas Cassel * 218014baeb8SNiklas Cassel * The command is submitted to a qpair allocated by spdk_nvme_ctrlr_alloc_io_qpair(). 219014baeb8SNiklas Cassel * The user must ensure that only one thread submits I/O on a given qpair at any 220014baeb8SNiklas Cassel * given time. 221014baeb8SNiklas Cassel * 222014baeb8SNiklas Cassel * \param ns NVMe namespace to submit the zone append I/O. 223014baeb8SNiklas Cassel * \param qpair I/O queue pair to submit the request. 224014baeb8SNiklas Cassel * \param zslba Zone Start LBA of the zone that we are appending to. 225014baeb8SNiklas Cassel * \param lba_count Length (in sectors) for the zone append operation. 226014baeb8SNiklas Cassel * \param cb_fn Callback function to invoke when the I/O is completed. 227014baeb8SNiklas Cassel * \param cb_arg Argument to pass to the callback function. 228014baeb8SNiklas Cassel * \param io_flags Set flags, defined in nvme_spec.h, for this I/O. 229014baeb8SNiklas Cassel * \param reset_sgl_fn Callback function to reset scattered payload. 230014baeb8SNiklas Cassel * \param next_sge_fn Callback function to iterate each scattered payload memory 231014baeb8SNiklas Cassel * segment. 232014baeb8SNiklas Cassel * \param metadata Virtual address pointer to the metadata payload, the length 233014baeb8SNiklas Cassel * of metadata is specified by spdk_nvme_ns_get_md_size(). 234014baeb8SNiklas Cassel * \param apptag_mask Application tag mask. 235014baeb8SNiklas Cassel * \param apptag Application tag to use end-to-end protection information. 236014baeb8SNiklas Cassel * 237014baeb8SNiklas Cassel * \return 0 if successfully submitted, negated errnos on the following error conditions: 238014baeb8SNiklas Cassel * -EINVAL: The request is malformed. 239014baeb8SNiklas Cassel * -ENOMEM: The request cannot be allocated. 240014baeb8SNiklas Cassel * -ENXIO: The qpair is failed at the transport level. 241014baeb8SNiklas Cassel */ 242014baeb8SNiklas Cassel int spdk_nvme_zns_zone_appendv_with_md(struct spdk_nvme_ns *ns, struct spdk_nvme_qpair *qpair, 243014baeb8SNiklas Cassel uint64_t zslba, uint32_t lba_count, 244014baeb8SNiklas Cassel spdk_nvme_cmd_cb cb_fn, void *cb_arg, uint32_t io_flags, 245014baeb8SNiklas Cassel spdk_nvme_req_reset_sgl_cb reset_sgl_fn, 246014baeb8SNiklas Cassel spdk_nvme_req_next_sge_cb next_sge_fn, void *metadata, 247014baeb8SNiklas Cassel uint16_t apptag_mask, uint16_t apptag); 248014baeb8SNiklas Cassel 249014baeb8SNiklas Cassel /** 25067475a58SNiklas Cassel * Submit a Close Zone operation to the specified NVMe namespace. 25167475a58SNiklas Cassel * 25267475a58SNiklas Cassel * \param ns Namespace. 25367475a58SNiklas Cassel * \param qpair I/O queue pair to submit the request. 25467475a58SNiklas Cassel * \param slba starting LBA of the zone to operate on. 25567475a58SNiklas Cassel * \param select_all If this is set, slba will be ignored, and operation will 25667475a58SNiklas Cassel * be performed on all zones that are in ZSIO or ZSEO state. 25767475a58SNiklas Cassel * \param cb_fn Callback function invoked when the I/O command completes. 25867475a58SNiklas Cassel * \param cb_arg Argument passed to callback function. 25967475a58SNiklas Cassel * 26067475a58SNiklas Cassel * \return 0 on success. Negated errno on failure. 26167475a58SNiklas Cassel */ 26267475a58SNiklas Cassel int spdk_nvme_zns_close_zone(struct spdk_nvme_ns *ns, struct spdk_nvme_qpair *qpair, 26367475a58SNiklas Cassel uint64_t slba, bool select_all, 26467475a58SNiklas Cassel spdk_nvme_cmd_cb cb_fn, void *cb_arg); 26567475a58SNiklas Cassel 26667475a58SNiklas Cassel /** 26767475a58SNiklas Cassel * Submit a Finish Zone operation to the specified NVMe namespace. 26867475a58SNiklas Cassel * 26967475a58SNiklas Cassel * \param ns Namespace. 27067475a58SNiklas Cassel * \param qpair I/O queue pair to submit the request. 27167475a58SNiklas Cassel * \param slba starting LBA of the zone to operate on. 27267475a58SNiklas Cassel * \param select_all If this is set, slba will be ignored, and operation will 27367475a58SNiklas Cassel * be performed on all zones that are in ZSIO, ZSEO, or ZSC state. 27467475a58SNiklas Cassel * \param cb_fn Callback function invoked when the I/O command completes. 27567475a58SNiklas Cassel * \param cb_arg Argument passed to callback function. 27667475a58SNiklas Cassel * 27767475a58SNiklas Cassel * \return 0 on success. Negated errno on failure. 27867475a58SNiklas Cassel */ 27967475a58SNiklas Cassel int spdk_nvme_zns_finish_zone(struct spdk_nvme_ns *ns, struct spdk_nvme_qpair *qpair, 28067475a58SNiklas Cassel uint64_t slba, bool select_all, 28167475a58SNiklas Cassel spdk_nvme_cmd_cb cb_fn, void *cb_arg); 28267475a58SNiklas Cassel 28367475a58SNiklas Cassel /** 28467475a58SNiklas Cassel * Submit a Open Zone operation to the specified NVMe namespace. 28567475a58SNiklas Cassel * 28667475a58SNiklas Cassel * \param ns Namespace. 28767475a58SNiklas Cassel * \param qpair I/O queue pair to submit the request. 28867475a58SNiklas Cassel * \param slba starting LBA of the zone to operate on. 28967475a58SNiklas Cassel * \param select_all If this is set, slba will be ignored, and operation will 29067475a58SNiklas Cassel * be performed on all zones that are in ZSC state. 29167475a58SNiklas Cassel * \param cb_fn Callback function invoked when the I/O command completes. 29267475a58SNiklas Cassel * \param cb_arg Argument passed to callback function. 29367475a58SNiklas Cassel * 29467475a58SNiklas Cassel * \return 0 on success. Negated errno on failure. 29567475a58SNiklas Cassel */ 29667475a58SNiklas Cassel int spdk_nvme_zns_open_zone(struct spdk_nvme_ns *ns, struct spdk_nvme_qpair *qpair, 29767475a58SNiklas Cassel uint64_t slba, bool select_all, 29867475a58SNiklas Cassel spdk_nvme_cmd_cb cb_fn, void *cb_arg); 29967475a58SNiklas Cassel 30067475a58SNiklas Cassel /** 30167475a58SNiklas Cassel * Submit a Reset Zone operation to the specified NVMe namespace. 30267475a58SNiklas Cassel * 30367475a58SNiklas Cassel * \param ns Namespace. 30467475a58SNiklas Cassel * \param qpair I/O queue pair to submit the request. 30567475a58SNiklas Cassel * \param slba starting LBA of the zone to operate on. 30667475a58SNiklas Cassel * \param select_all If this is set, slba will be ignored, and operation will 30767475a58SNiklas Cassel * be performed on all zones that are in ZSIO, ZSEO, ZSC, or ZSF state. 30867475a58SNiklas Cassel * \param cb_fn Callback function invoked when the I/O command completes. 30967475a58SNiklas Cassel * \param cb_arg Argument passed to callback function. 31067475a58SNiklas Cassel * 31167475a58SNiklas Cassel * \return 0 on success. Negated errno on failure. 31267475a58SNiklas Cassel */ 31367475a58SNiklas Cassel int spdk_nvme_zns_reset_zone(struct spdk_nvme_ns *ns, struct spdk_nvme_qpair *qpair, 31467475a58SNiklas Cassel uint64_t slba, bool select_all, 31567475a58SNiklas Cassel spdk_nvme_cmd_cb cb_fn, void *cb_arg); 31667475a58SNiklas Cassel 31767475a58SNiklas Cassel /** 31867475a58SNiklas Cassel * Submit a Offline Zone operation to the specified NVMe namespace. 31967475a58SNiklas Cassel * 32067475a58SNiklas Cassel * \param ns Namespace. 32167475a58SNiklas Cassel * \param qpair I/O queue pair to submit the request. 32267475a58SNiklas Cassel * \param slba starting LBA of the zone to operate on. 32367475a58SNiklas Cassel * \param select_all If this is set, slba will be ignored, and operation will 32467475a58SNiklas Cassel * be performed on all zones that are in ZSRO state. 32567475a58SNiklas Cassel * \param cb_fn Callback function invoked when the I/O command completes. 32667475a58SNiklas Cassel * \param cb_arg Argument passed to callback function. 32767475a58SNiklas Cassel * 32867475a58SNiklas Cassel * \return 0 on success. Negated errno on failure. 32967475a58SNiklas Cassel */ 33067475a58SNiklas Cassel int spdk_nvme_zns_offline_zone(struct spdk_nvme_ns *ns, struct spdk_nvme_qpair *qpair, 33167475a58SNiklas Cassel uint64_t slba, bool select_all, 33267475a58SNiklas Cassel spdk_nvme_cmd_cb cb_fn, void *cb_arg); 33367475a58SNiklas Cassel 3346dec7623SNiklas Cassel /** 335490c83c6SKrishna Kanth Reddy * Submit a Set Zone Descriptor Extension operation to the specified NVMe namespace. 336490c83c6SKrishna Kanth Reddy * 337490c83c6SKrishna Kanth Reddy * \param ns Namespace. 338490c83c6SKrishna Kanth Reddy * \param qpair I/O queue pair to submit the request. 339490c83c6SKrishna Kanth Reddy * \param slba starting LBA of the zone to operate on. 340490c83c6SKrishna Kanth Reddy * \param buffer Virtual address pointer to the data payload buffer. 341490c83c6SKrishna Kanth Reddy * \param payload_size Payload buffer size. 342490c83c6SKrishna Kanth Reddy * \param cb_fn Callback function invoked when the I/O command completes. 343490c83c6SKrishna Kanth Reddy * \param cb_arg Argument passed to callback function. 344490c83c6SKrishna Kanth Reddy * 345490c83c6SKrishna Kanth Reddy * \return 0 on success. Negated errno on failure. 346490c83c6SKrishna Kanth Reddy */ 347490c83c6SKrishna Kanth Reddy int spdk_nvme_zns_set_zone_desc_ext(struct spdk_nvme_ns *ns, struct spdk_nvme_qpair *qpair, 348490c83c6SKrishna Kanth Reddy uint64_t slba, void *buffer, uint32_t payload_size, 349490c83c6SKrishna Kanth Reddy spdk_nvme_cmd_cb cb_fn, void *cb_arg); 350490c83c6SKrishna Kanth Reddy 351490c83c6SKrishna Kanth Reddy /** 3526dec7623SNiklas Cassel * Get a zone report from the specified NVMe namespace. 3536dec7623SNiklas Cassel * 3546dec7623SNiklas Cassel * \param ns Namespace. 3556dec7623SNiklas Cassel * \param qpair I/O queue pair to submit the request. 3566dec7623SNiklas Cassel * \param payload The pointer to the payload buffer. 3576dec7623SNiklas Cassel * \param payload_size The size of payload buffer. 3586dec7623SNiklas Cassel * \param slba starting LBA of the zone to operate on. 3596dec7623SNiklas Cassel * \param report_opts Filter on which zone states to include in the zone report. 3606dec7623SNiklas Cassel * \param partial_report If true, nr_zones field in the zone report indicates the number of zone 3616dec7623SNiklas Cassel * descriptors that were successfully written to the zone report. If false, nr_zones field in the 3626dec7623SNiklas Cassel * zone report indicates the number of zone descriptors that match the report_opts criteria. 3636dec7623SNiklas Cassel * \param cb_fn Callback function invoked when the I/O command completes. 3646dec7623SNiklas Cassel * \param cb_arg Argument passed to callback function. 3656dec7623SNiklas Cassel * 3666dec7623SNiklas Cassel * \return 0 on success. Negated errno on failure. 3676dec7623SNiklas Cassel */ 3686dec7623SNiklas Cassel int spdk_nvme_zns_report_zones(struct spdk_nvme_ns *ns, struct spdk_nvme_qpair *qpair, 3696dec7623SNiklas Cassel void *payload, uint32_t payload_size, uint64_t slba, 3706dec7623SNiklas Cassel enum spdk_nvme_zns_zra_report_opts report_opts, bool partial_report, 3716dec7623SNiklas Cassel spdk_nvme_cmd_cb cb_fn, void *cb_arg); 3726dec7623SNiklas Cassel 373490c83c6SKrishna Kanth Reddy /** 374490c83c6SKrishna Kanth Reddy * Get a extended zone report from the specified NVMe namespace. 375490c83c6SKrishna Kanth Reddy * 376490c83c6SKrishna Kanth Reddy * \param ns Namespace. 377490c83c6SKrishna Kanth Reddy * \param qpair I/O queue pair to submit the request. 378490c83c6SKrishna Kanth Reddy * \param payload The pointer to the payload buffer. 379490c83c6SKrishna Kanth Reddy * \param payload_size The size of payload buffer. 380490c83c6SKrishna Kanth Reddy * \param slba starting LBA of the zone to operate on. 381490c83c6SKrishna Kanth Reddy * \param report_opts Filter on which zone states to include in the extended zone report. 382490c83c6SKrishna Kanth Reddy * \param partial_report If true, nr_zones field in the extended zone report indicates the number of zone 383490c83c6SKrishna Kanth Reddy * descriptors that were successfully written to the extended zone report. If false, nr_zones field in the 384490c83c6SKrishna Kanth Reddy * extended zone report indicates the number of zone descriptors that match the report_opts criteria. 385490c83c6SKrishna Kanth Reddy * \param cb_fn Callback function invoked when the I/O command completes. 386490c83c6SKrishna Kanth Reddy * \param cb_arg Argument passed to callback function. 387490c83c6SKrishna Kanth Reddy * 388490c83c6SKrishna Kanth Reddy * \return 0 on success. Negated errno on failure. 389490c83c6SKrishna Kanth Reddy */ 390490c83c6SKrishna Kanth Reddy int spdk_nvme_zns_ext_report_zones(struct spdk_nvme_ns *ns, struct spdk_nvme_qpair *qpair, 391490c83c6SKrishna Kanth Reddy void *payload, uint32_t payload_size, uint64_t slba, 392490c83c6SKrishna Kanth Reddy enum spdk_nvme_zns_zra_report_opts report_opts, bool partial_report, 393490c83c6SKrishna Kanth Reddy spdk_nvme_cmd_cb cb_fn, void *cb_arg); 394490c83c6SKrishna Kanth Reddy 3953be29357SNiklas Cassel #ifdef __cplusplus 3963be29357SNiklas Cassel } 3973be29357SNiklas Cassel #endif 3983be29357SNiklas Cassel 3993be29357SNiklas Cassel #endif 400