/*   SPDX-License-Identifier: BSD-3-Clause
 *   Copyright (C) 2017 Intel Corporation. All rights reserved.
 *   Copyright (c) 2019 Mellanox Technologies LTD. All rights reserved.
 */

#ifndef SPDK_BDEV_NULL_H
#define SPDK_BDEV_NULL_H

#include "spdk/stdinc.h"

typedef void (*spdk_delete_null_complete)(void *cb_arg, int bdeverrno);

struct spdk_bdev;
struct spdk_uuid;

struct spdk_null_bdev_opts {
	const char *name;
	const struct spdk_uuid *uuid;
	uint64_t num_blocks;
	uint32_t block_size;
	uint32_t physical_block_size;
	uint32_t md_size;
	bool md_interleave;
	enum spdk_dif_type dif_type;
	bool dif_is_head_of_md;
};

int bdev_null_create(struct spdk_bdev **bdev, const struct spdk_null_bdev_opts *opts);

/**
 * Delete null bdev.
 *
 * \param bdev_name Name of null bdev.
 * \param cb_fn Function to call after deletion.
 * \param cb_arg Argument to pass to cb_fn.
 */
void bdev_null_delete(const char *bdev_name, spdk_delete_null_complete cb_fn,
		      void *cb_arg);
/**
 * Resize null bdev.
 *
 * \param bdev_name Name of null bdev.
 * \param new_size_in_mb The new size in MiB for this bdev
 */
int bdev_null_resize(const char *bdev_name, const uint64_t new_size_in_mb);

#endif /* SPDK_BDEV_NULL_H */