include: Move endof() up from hw/virtio/virtio.h
endof() is a useful macro, we can make use of it outside of virtio. Signed-off-by: Max Reitz <mreitz@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Message-id: 20191011152814.14791-2-mreitz@redhat.com Signed-off-by: Max Reitz <mreitz@redhat.com>
This commit is contained in:
parent
f93c3add3a
commit
5d5b33c080
@ -42,9 +42,9 @@
|
||||
*/
|
||||
static VirtIOFeature feature_sizes[] = {
|
||||
{.flags = 1ULL << VIRTIO_BLK_F_DISCARD,
|
||||
.end = virtio_endof(struct virtio_blk_config, discard_sector_alignment)},
|
||||
.end = endof(struct virtio_blk_config, discard_sector_alignment)},
|
||||
{.flags = 1ULL << VIRTIO_BLK_F_WRITE_ZEROES,
|
||||
.end = virtio_endof(struct virtio_blk_config, write_zeroes_may_unmap)},
|
||||
.end = endof(struct virtio_blk_config, write_zeroes_may_unmap)},
|
||||
{}
|
||||
};
|
||||
|
||||
|
@ -90,15 +90,15 @@ static inline __virtio16 *virtio_net_rsc_ext_num_dupacks(
|
||||
|
||||
static VirtIOFeature feature_sizes[] = {
|
||||
{.flags = 1ULL << VIRTIO_NET_F_MAC,
|
||||
.end = virtio_endof(struct virtio_net_config, mac)},
|
||||
.end = endof(struct virtio_net_config, mac)},
|
||||
{.flags = 1ULL << VIRTIO_NET_F_STATUS,
|
||||
.end = virtio_endof(struct virtio_net_config, status)},
|
||||
.end = endof(struct virtio_net_config, status)},
|
||||
{.flags = 1ULL << VIRTIO_NET_F_MQ,
|
||||
.end = virtio_endof(struct virtio_net_config, max_virtqueue_pairs)},
|
||||
.end = endof(struct virtio_net_config, max_virtqueue_pairs)},
|
||||
{.flags = 1ULL << VIRTIO_NET_F_MTU,
|
||||
.end = virtio_endof(struct virtio_net_config, mtu)},
|
||||
.end = endof(struct virtio_net_config, mtu)},
|
||||
{.flags = 1ULL << VIRTIO_NET_F_SPEED_DUPLEX,
|
||||
.end = virtio_endof(struct virtio_net_config, duplex)},
|
||||
.end = endof(struct virtio_net_config, duplex)},
|
||||
{}
|
||||
};
|
||||
|
||||
|
@ -37,13 +37,6 @@ static inline hwaddr vring_align(hwaddr addr,
|
||||
return QEMU_ALIGN_UP(addr, align);
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate the number of bytes up to and including the given 'field' of
|
||||
* 'container'.
|
||||
*/
|
||||
#define virtio_endof(container, field) \
|
||||
(offsetof(container, field) + sizeof_field(container, field))
|
||||
|
||||
typedef struct VirtIOFeature {
|
||||
uint64_t flags;
|
||||
size_t end;
|
||||
|
@ -60,6 +60,13 @@
|
||||
|
||||
#define sizeof_field(type, field) sizeof(((type *)0)->field)
|
||||
|
||||
/*
|
||||
* Calculate the number of bytes up to and including the given 'field' of
|
||||
* 'container'.
|
||||
*/
|
||||
#define endof(container, field) \
|
||||
(offsetof(container, field) + sizeof_field(container, field))
|
||||
|
||||
/* Convert from a base type to a parent type, with compile time checking. */
|
||||
#ifdef __GNUC__
|
||||
#define DO_UPCAST(type, field, dev) ( __extension__ ( { \
|
||||
|
Loading…
Reference in New Issue
Block a user