mirror of https://github.com/xemu-project/xemu.git
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[] = {
|
static VirtIOFeature feature_sizes[] = {
|
||||||
{.flags = 1ULL << VIRTIO_BLK_F_DISCARD,
|
{.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,
|
{.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[] = {
|
static VirtIOFeature feature_sizes[] = {
|
||||||
{.flags = 1ULL << VIRTIO_NET_F_MAC,
|
{.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,
|
{.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,
|
{.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,
|
{.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,
|
{.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);
|
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 {
|
typedef struct VirtIOFeature {
|
||||||
uint64_t flags;
|
uint64_t flags;
|
||||||
size_t end;
|
size_t end;
|
||||||
|
|
|
@ -60,6 +60,13 @@
|
||||||
|
|
||||||
#define sizeof_field(type, field) sizeof(((type *)0)->field)
|
#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. */
|
/* Convert from a base type to a parent type, with compile time checking. */
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
#define DO_UPCAST(type, field, dev) ( __extension__ ( { \
|
#define DO_UPCAST(type, field, dev) ( __extension__ ( { \
|
||||||
|
|
Loading…
Reference in New Issue