-
Notifications
You must be signed in to change notification settings - Fork 15
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
lib: add implementation of virtIO MMIO
Co-authored-by: Jingyao Zhou <[email protected]>
- Loading branch information
1 parent
585b090
commit 0bedada
Showing
9 changed files
with
832 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,107 @@ | ||
/* SPDX-License-Identifier: BSD-3-Clause | ||
Copyright Linux */ | ||
|
||
#pragma once | ||
/* This header, excluding the #ifdef __KERNEL__ part, is BSD licensed so | ||
* anyone can use the definitions to implement compatible drivers/servers. | ||
* | ||
* Redistribution and use in source and binary forms, with or without | ||
* modification, are permitted provided that the following conditions | ||
* are met: | ||
* 1. Redistributions of source code must retain the above copyright | ||
* notice, this list of conditions and the following disclaimer. | ||
* 2. Redistributions in binary form must reproduce the above copyright | ||
* notice, this list of conditions and the following disclaimer in the | ||
* documentation and/or other materials provided with the distribution. | ||
* 3. Neither the name of IBM nor the names of its contributors | ||
* may be used to endorse or promote products derived from this software | ||
* without specific prior written permission. | ||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND | ||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
* ARE DISCLAIMED. IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE | ||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||
* SUCH DAMAGE. */ | ||
|
||
/* Virtio devices use a standardized configuration space to define their | ||
* features and pass configuration information, but each implementation can | ||
* store and access that space differently. */ | ||
|
||
/* Status byte for guest to report progress, and synchronize features. */ | ||
/* We have seen device and processed generic fields (VIRTIO_CONFIG_F_VIRTIO) */ | ||
/* the guest OS triggers a device reset*/ | ||
#define VIRTIO_CONFIG_S_RESET 0 | ||
/* the guest OS has noticed the device. */ | ||
#define VIRTIO_CONFIG_S_ACKNOWLEDGE 1 | ||
/* the guest OS has found a driver for the device. */ | ||
#define VIRTIO_CONFIG_S_DRIVER 2 | ||
/* Driver has used its parts of the config, and is happy */ | ||
#define VIRTIO_CONFIG_S_DRIVER_OK 4 | ||
/* Driver has finished configuring features */ | ||
#define VIRTIO_CONFIG_S_FEATURES_OK 8 | ||
/* Device entered invalid state, driver must reset it */ | ||
#define VIRTIO_CONFIG_S_NEEDS_RESET 0x40 | ||
/* We've given up on this device. */ | ||
#define VIRTIO_CONFIG_S_FAILED 0x80 | ||
|
||
/* | ||
* Virtio feature bits VIRTIO_TRANSPORT_F_START through | ||
* VIRTIO_TRANSPORT_F_END are reserved for the transport | ||
* being used (e.g. virtio_ring, virtio_pci etc.), the | ||
* rest are per-device feature bits. | ||
*/ | ||
#define VIRTIO_TRANSPORT_F_START 28 | ||
#define VIRTIO_TRANSPORT_F_END 41 | ||
|
||
#ifndef VIRTIO_CONFIG_NO_LEGACY | ||
/* Do we get callbacks when the ring is completely used, even if we've | ||
* suppressed them? */ | ||
#define VIRTIO_F_NOTIFY_ON_EMPTY 24 | ||
|
||
/* Can the device handle any descriptor layout? */ | ||
#define VIRTIO_F_ANY_LAYOUT 27 | ||
#endif /* VIRTIO_CONFIG_NO_LEGACY */ | ||
|
||
/* v1.0 compliant. */ | ||
#define VIRTIO_F_VERSION_1 32 | ||
|
||
/* | ||
* If clear - device has the platform DMA (e.g. IOMMU) bypass quirk feature. | ||
* If set - use platform DMA tools to access the memory. | ||
* | ||
* Note the reverse polarity (compared to most other features), | ||
* this is for compatibility with legacy systems. | ||
*/ | ||
#define VIRTIO_F_ACCESS_PLATFORM 33 | ||
/* Legacy name for VIRTIO_F_ACCESS_PLATFORM (for compatibility with old userspace) */ | ||
#define VIRTIO_F_IOMMU_PLATFORM VIRTIO_F_ACCESS_PLATFORM | ||
|
||
/* This feature indicates support for the packed virtqueue layout. */ | ||
#define VIRTIO_F_RING_PACKED 34 | ||
|
||
/* | ||
* Inorder feature indicates that all buffers are used by the device | ||
* in the same order in which they have been made available. | ||
*/ | ||
#define VIRTIO_F_IN_ORDER 35 | ||
|
||
/* | ||
* This feature indicates that memory accesses by the driver and the | ||
* device are ordered in a way described by the platform. | ||
*/ | ||
#define VIRTIO_F_ORDER_PLATFORM 36 | ||
|
||
/* | ||
* Does the device support Single Root I/O Virtualization? | ||
*/ | ||
#define VIRTIO_F_SR_IOV 37 | ||
|
||
/* | ||
* This feature indicates that the driver can reset a queue individually. | ||
*/ | ||
#define VIRTIO_F_RING_RESET 40 |
Oops, something went wrong.