include/linux/virtio_config.h
Source file repositories/reference/linux-study-clean/include/linux/virtio_config.h
File Facts
- System
- Linux kernel
- Corpus path
include/linux/virtio_config.h- Extension
.h- Size
- 21904 bytes
- Lines
- 700
- Domain
- Core OS
- Bucket
- Core Kernel Interface
- Inferred role
- Core OS: implementation source
- Status
- source implementation candidate
Why This File Exists
Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/err.hlinux/bug.hlinux/virtio.hlinux/virtio_byteorder.hlinux/compiler_types.huapi/linux/virtio_config.h
Detected Declarations
struct irq_affinitystruct virtio_shm_regionstruct virtqueue_infostruct virtio_config_opsstruct virtio_map_opsfunction __virtio_test_bitfunction __virtio_set_bitfunction __virtio_clear_bitfunction virtio_has_featurefunction virtio_get_featuresfunction virtio_has_dma_quirkfunction virtio_find_vqsfunction virtio_synchronize_cbsfunction virtio_device_readyfunction virtqueue_set_affinityfunction virtio_get_shm_regionfunction virtio_is_little_endianfunction virtio16_to_cpufunction cpu_to_virtio16function virtio32_to_cpufunction cpu_to_virtio32function virtio64_to_cpufunction cpu_to_virtio64function __virtio_cread_manyfunction virtio_cread_bytesfunction virtio_cread8function virtio_cwrite8function virtio_cread16function virtio_cwrite16function virtio_cread32function virtio_cwrite32function virtio_cread64function virtio_cwrite64
Annotated Snippet
struct virtio_shm_region {
u64 addr;
u64 len;
};
typedef void vq_callback_t(struct virtqueue *);
/**
* struct virtqueue_info - Info for a virtqueue passed to find_vqs().
* @name: virtqueue description. Used mainly for debugging, NULL for
* a virtqueue unused by the driver.
* @callback: A callback to invoke on a used buffer notification.
* NULL for a virtqueue that does not need a callback.
* @ctx: whether to maintain an extra context per virtqueue.
*/
struct virtqueue_info {
const char *name;
vq_callback_t *callback;
bool ctx;
};
/**
* struct virtio_config_ops - operations for configuring a virtio device
* Note: Do not assume that a transport implements all of the operations
* getting/setting a value as a simple read/write! Generally speaking,
* any of @get/@set, @get_status/@set_status, or @get_features/
* @finalize_features are NOT safe to be called from an atomic
* context.
* @get: read the value of a configuration field
* vdev: the virtio_device
* offset: the offset of the configuration field
* buf: the buffer to write the field value into.
* len: the length of the buffer
* @set: write the value of a configuration field
* vdev: the virtio_device
* offset: the offset of the configuration field
* buf: the buffer to read the field value from.
* len: the length of the buffer
* @generation: config generation counter (optional)
* vdev: the virtio_device
* Returns the config generation counter
* @get_status: read the status byte
* vdev: the virtio_device
* Returns the status byte
* @set_status: write the status byte
* vdev: the virtio_device
* status: the new status byte
* @reset: reset the device
* vdev: the virtio device
* After this, status and feature negotiation must be done again
* Device must not be reset from its vq/config callbacks, or in
* parallel with being added/removed.
* @find_vqs: find virtqueues and instantiate them.
* vdev: the virtio_device
* nvqs: the number of virtqueues to find
* vqs: on success, includes new virtqueues
* vqs_info: array of virtqueue info structures
* Returns 0 on success or error status
* @del_vqs: free virtqueues found by find_vqs().
* @synchronize_cbs: synchronize with the virtqueue callbacks (optional)
* The function guarantees that all memory operations on the
* queue before it are visible to the vring_interrupt() that is
* called after it.
* vdev: the virtio_device
* @get_features: get the array of feature bits for this device.
* vdev: the virtio_device
* Returns the first 64 feature bits.
* @get_extended_features:
* vdev: the virtio_device
* Returns the first VIRTIO_FEATURES_BITS feature bits (all we currently
* need).
* @finalize_features: confirm what device features we'll be using.
* vdev: the virtio_device
* This sends the driver feature bits to the device: it can change
* the dev->feature bits if it wants.
* Note that despite the name this can be called any number of
* times.
* Returns 0 on success or error status
* @bus_name: return the bus name associated with the device (optional)
* vdev: the virtio_device
* This returns a pointer to the bus name a la pci_name from which
* the caller can then copy.
* @set_vq_affinity: set the affinity for a virtqueue (optional).
* @get_vq_affinity: get the affinity for a virtqueue (optional).
* @get_shm_region: get a shared memory region based on the index.
* @disable_vq_and_reset: reset a queue individually (optional).
* vq: the virtqueue
* Returns 0 on success or error status
* disable_vq_and_reset will guarantee that the callbacks are disabled and
* synchronized.
Annotation
- Immediate include surface: `linux/err.h`, `linux/bug.h`, `linux/virtio.h`, `linux/virtio_byteorder.h`, `linux/compiler_types.h`, `uapi/linux/virtio_config.h`.
- Detected declarations: `struct irq_affinity`, `struct virtio_shm_region`, `struct virtqueue_info`, `struct virtio_config_ops`, `struct virtio_map_ops`, `function __virtio_test_bit`, `function __virtio_set_bit`, `function __virtio_clear_bit`, `function virtio_has_feature`, `function virtio_get_features`.
- Atlas domain: Core OS / Core Kernel Interface.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.