234 #define zbc_zone_type(z) ((int)(z)->zbz_type)
237 #define zbc_zone_conventional(z) ((z)->zbz_type == ZBC_ZT_CONVENTIONAL)
240 #define zbc_zone_sequential_req(z) ((z)->zbz_type == ZBC_ZT_SEQUENTIAL_REQ)
243 #define zbc_zone_sequential_pref(z) ((z)->zbz_type == ZBC_ZT_SEQUENTIAL_PREF)
246 #define zbc_zone_sequential(z) (zbc_zone_sequential_req(z) || \
247 zbc_zone_sequential_pref(z))
250 #define zbc_zone_condition(z) ((int)(z)->zbz_condition)
253 #define zbc_zone_not_wp(z) ((z)->zbz_condition == ZBC_ZC_NOT_WP)
256 #define zbc_zone_empty(z) ((z)->zbz_condition == ZBC_ZC_EMPTY)
259 #define zbc_zone_imp_open(z) ((z)->zbz_condition == ZBC_ZC_IMP_OPEN)
262 #define zbc_zone_exp_open(z) ((z)->zbz_condition == ZBC_ZC_EXP_OPEN)
265 #define zbc_zone_is_open(z) (zbc_zone_imp_open(z) || \
266 zbc_zone_exp_open(z))
269 #define zbc_zone_closed(z) ((z)->zbz_condition == ZBC_ZC_CLOSED)
272 #define zbc_zone_full(z) ((z)->zbz_condition == ZBC_ZC_FULL)
275 #define zbc_zone_rdonly(z) ((z)->zbz_condition == ZBC_ZC_RDONLY)
278 #define zbc_zone_offline(z) ((z)->zbz_condition == ZBC_ZC_OFFLINE)
281 #define zbc_zone_rwp_recommended(z) ((z)->zbz_attributes & \
282 ZBC_ZA_RWP_RECOMMENDED)
285 #define zbc_zone_non_seq(z) ((z)->zbz_attributes & ZBC_ZA_NON_SEQ)
288 #define zbc_zone_start(z) ((unsigned long long)(z)->zbz_start)
291 #define zbc_zone_length(z) ((unsigned long long)(z)->zbz_length)
294 #define zbc_zone_wp(z) ((unsigned long long)(z)->zbz_write_pointer)
299 #define ZBC_DEVICE_INFO_LENGTH 32
423 #define ZBC_NOT_REPORTED ((uint32_t)0xFFFFFFFF)
429 #define ZBC_NO_LIMIT ((uint32_t)0xFFFFFFFF)
518 #define zbc_lba2sect(info, lba) (((lba) * (info)->zbd_lblock_size) >> 9)
525 #define zbc_sect2lba(info, sect) (((sect) << 9) / (info)->zbd_lblock_size)
703 extern int zbc_open(
const char *filename,
int flags,
struct zbc_device **dev);
714 extern int zbc_close(
struct zbc_device *dev);
836 struct zbc_zone *zones,
unsigned int *nr_zones);
852 static inline int zbc_report_nr_zones(
struct zbc_device *dev, uint64_t sector,
854 unsigned int *nr_zones)
879 struct zbc_zone **zones,
unsigned int *nr_zones);
967 static inline int zbc_open_zone(
struct zbc_device *dev,
968 uint64_t sector,
unsigned int flags)
990 static inline int zbc_close_zone(
struct zbc_device *dev,
991 uint64_t sector,
unsigned int flags)
1014 static inline int zbc_finish_zone(
struct zbc_device *dev,
1015 uint64_t sector,
unsigned int flags)
1037 static inline int zbc_reset_zone(
struct zbc_device *dev,
1038 uint64_t sector,
unsigned int flags)
1066 extern ssize_t
zbc_pread(
struct zbc_device *dev,
void *buf,
1067 size_t count, uint64_t offset);
1092 extern ssize_t
zbc_pwrite(
struct zbc_device *dev,
const void *buf,
1093 size_t count, uint64_t offset);
1108 extern ssize_t
zbc_preadv(
struct zbc_device *dev,
1109 const struct iovec *iov,
int iovcnt,
1125 extern ssize_t
zbc_pwritev(
struct zbc_device *dev,
1126 const struct iovec *iov,
int iovcnt,
1145 extern int zbc_map_iov(
const void *buf,
size_t sectors,
1146 struct iovec *iov,
int iovcnt,
size_t iovlen);
1157 extern int zbc_flush(
struct zbc_device *dev);
int zbc_map_iov(const void *buf, size_t sectors, struct iovec *iov, int iovcnt, size_t iovlen)
Map a buffer to an I/O vector.
uint64_t zbd_pblocks
Definition: zbc.h:481
uint32_t zbd_opt_nr_open_seq_pref
Definition: zbc.h:494
zbc_zone_condition
Zone condition definitions.
Definition: zbc.h:101
const char * zbc_sk_str(enum zbc_sk sk)
Returns a string describing a sense key.
uint64_t zbz_write_pointer
Definition: zbc.h:209
zbc_zone_attributes
Zone attributes definitions.
Definition: zbc.h:162
int zbc_device_is_zoned(const char *filename, bool fake, struct zbc_device_info *info)
Test if a device is a zoned block device.
enum zbc_sk sk
Definition: zbc.h:601
uint8_t zbz_attributes
Definition: zbc.h:224
enum zbc_dev_type zbd_type
Definition: zbc.h:441
const char * zbc_asc_ascq_str(enum zbc_asc_ascq asc_ascq)
Returns a string describing a sense code.
uint64_t zbd_max_rw_sectors
Definition: zbc.h:487
uint32_t zbd_max_nr_open_seq_req
Definition: zbc.h:509
enum zbc_asc_ascq asc_ascq
Definition: zbc.h:604
zbc_zone_op
Zone operation codes definitions.
Definition: zbc.h:886
int zbc_flush(struct zbc_device *dev)
Flush a device write cache.
const char * zbc_zone_type_str(enum zbc_zone_type type)
returns a string describing a zone type
zbc_dev_type
Device type definitions.
Definition: zbc.h:306
uint8_t __pad[5]
Definition: zbc.h:229
void zbc_print_device_info(struct zbc_device_info *info, FILE *out)
Print a device information.
zbc_asc_ascq
SCSI Additional sense codes and qualifiers definitions.
Definition: zbc.h:556
zbc_dev_flags
Device flags definitions.
Definition: zbc.h:408
int zbc_zone_operation(struct zbc_device *dev, uint64_t sector, enum zbc_zone_op op, unsigned int flags)
Execute an operation on a zone.
zbc_zone_type
Zone type definitions.
Definition: zbc.h:61
Zone information data structure.
Definition: zbc.h:194
uint8_t zbz_type
Definition: zbc.h:214
Device information data structure.
Definition: zbc.h:436
ssize_t zbc_preadv(struct zbc_device *dev, const struct iovec *iov, int iovcnt, uint64_t offset)
Read sectors from a device using mutliple buffers.
uint32_t zbd_pblock_size
Definition: zbc.h:476
zbc_zone_op_flags
Zone operation flag definitions.
Definition: zbc.h:918
ssize_t zbc_pwritev(struct zbc_device *dev, const struct iovec *iov, int iovcnt, uint64_t offset)
Write sectors to a device unsig multiple buffers.
const char * zbc_device_model_str(enum zbc_dev_model model)
Returns a device zone model name.
zbc_dev_model
Device model definitions.
Definition: zbc.h:355
ssize_t zbc_pwrite(struct zbc_device *dev, const void *buf, size_t count, uint64_t offset)
Write sectors to a device.
int zbc_open(const char *filename, int flags, struct zbc_device **dev)
Open a ZBC device.
#define ZBC_DEVICE_INFO_LENGTH
Definition: zbc.h:299
const char * zbc_zone_condition_str(enum zbc_zone_condition cond)
Returns a string describing a zone condition.
zbc_oflags
ZBC device open flags.
Definition: zbc.h:665
int zbc_list_zones(struct zbc_device *dev, uint64_t sector, enum zbc_reporting_options ro, struct zbc_zone **zones, unsigned int *nr_zones)
Get zone information.
uint64_t zbz_length
Definition: zbc.h:199
void zbc_errno(struct zbc_device *dev, struct zbc_errno *err)
Get detailed error code of last operation.
uint64_t zbd_sectors
Definition: zbc.h:461
zbc_reporting_options
Reporting options definitions.
Definition: zbc.h:748
enum zbc_dev_model zbd_model
Definition: zbc.h:446
Detailed error information data structure.
Definition: zbc.h:598
uint64_t zbz_start
Definition: zbc.h:204
ssize_t zbc_pread(struct zbc_device *dev, void *buf, size_t count, uint64_t offset)
Read sectors form a device.
uint32_t zbd_flags
Definition: zbc.h:456
uint32_t zbd_lblock_size
Definition: zbc.h:466
uint8_t zbz_condition
Definition: zbc.h:219
uint64_t zbd_lblocks
Definition: zbc.h:471
char zbd_vendor_id[ZBC_DEVICE_INFO_LENGTH]
Definition: zbc.h:451
int zbc_report_zones(struct zbc_device *dev, uint64_t sector, enum zbc_reporting_options ro, struct zbc_zone *zones, unsigned int *nr_zones)
Get zone information.
void zbc_set_log_level(char const *log_level)
Set the library log level.
const char * zbc_device_type_str(enum zbc_dev_type type)
Returns a device type name.
void zbc_get_device_info(struct zbc_device *dev, struct zbc_device_info *info)
Get a ZBC device information.
uint32_t zbd_opt_nr_non_seq_write_seq_pref
Definition: zbc.h:502
zbc_sk
SCSI Sense keys definitions.
Definition: zbc.h:532
int zbc_close(struct zbc_device *dev)
Close a ZBC device.