Spdk/lib/ftl/utils/ftl_bitmap.h

112 lines
2.7 KiB
C
Raw Normal View History

/* SPDX-License-Identifier: BSD-3-Clause
* Copyright (c) Intel Corporation.
* All rights reserved.
*/
#ifndef FTL_BITMAP_H_
#define FTL_BITMAP_H_
#include "spdk/stdinc.h"
struct ftl_bitmap;
/**
* @brief The required alignment for buffer used for bitmap
*/
extern const size_t ftl_bitmap_buffer_alignment;
/**
* @brief Converts number of bits to bitmap size need to create it
*
* @param bits Number of bits
*
* @return Size needed to create bitmap which will hold space for specified number of bits
*/
uint64_t ftl_bitmap_bits_to_size(uint64_t bits);
/**
* @brief Converts number of bits to blocks
*
* @param bits Number of bits
*
* @return Number of blocks needed to create bitmap which will hold space for specified number of bits
*/
uint64_t ftl_bitmap_bits_to_blocks(uint64_t bits);
/**
* @brief Creates a bitmap object using a preallocated buffer
*
* @param buf The buffer
* @param size Size of the buffer
*
* @return On success - pointer to the allocated bitmap object, otherwise NULL
*/
struct ftl_bitmap *ftl_bitmap_create(void *buf, size_t size);
/**
* @brief Destroys the bitmap object
*
* @param bitmap The bitmap
*/
void ftl_bitmap_destroy(struct ftl_bitmap *bitmap);
/**
* @brief Gets the value of the specified bit
*
* @param bitmap The bitmap
* @param bit Index of the bit
*
* @return True if bit is set, otherwise false
*/
bool ftl_bitmap_get(const struct ftl_bitmap *bitmap, uint64_t bit);
/**
* @brief Sets the specified bit
*
* @param bitmap The bitmap
* @param bit Index of the bit
*/
void ftl_bitmap_set(struct ftl_bitmap *bitmap, uint64_t bit);
/**
* @brief Clears the specified bit
*
* @param bitmap The bitmap
* @param bit Index of the bit
*/
void ftl_bitmap_clear(struct ftl_bitmap *bitmap, uint64_t bit);
/**
* @brief Finds the first set bit
*
* @param bitmap The bitmap
* @param start_bit Index of the bit from which to begin searching
* @param end_bit Index of the bit up to which to search
*
* @return Index of the first set bit or UINT64_MAX if none found
*/
uint64_t ftl_bitmap_find_first_set(struct ftl_bitmap *bitmap, uint64_t start_bit, uint64_t end_bit);
/**
* @brief Finds the first clear bit
*
* @param bitmap The bitmap
* @param start_bit Index of the bit from which to begin searching
* @param end_bit Index of the bit up to which to search
*
* @return Index of the first clear bit or UINT64_MAX if none found
*/
uint64_t ftl_bitmap_find_first_clear(struct ftl_bitmap *bitmap, uint64_t start_bit,
uint64_t end_bit);
/**
* @brief Iterates over and counts set bits
*
* @param bitmap The bitmap
*
* @return Count of sets bits
*/
uint64_t ftl_bitmap_count_set(struct ftl_bitmap *bitmap);
#endif /* FTL_BITMAP_H_ */