drivers/virt/vboxguest/vboxguest_core.h

Source file repositories/reference/linux-study-clean/drivers/virt/vboxguest/vboxguest_core.h

File Facts

System
Linux kernel
Corpus path
drivers/virt/vboxguest/vboxguest_core.h
Extension
.h
Size
7241 bytes
Lines
215
Domain
Driver Families
Bucket
drivers/virt
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct vbg_mem_balloon {
	/** Work handling VMMDEV_EVENT_BALLOON_CHANGE_REQUEST events */
	struct work_struct work;
	/** Pre-allocated vmmdev_memballoon_info req for query */
	struct vmmdev_memballoon_info *get_req;
	/** Pre-allocated vmmdev_memballoon_change req for inflate / deflate */
	struct vmmdev_memballoon_change *change_req;
	/** The current number of chunks in the balloon. */
	u32 chunks;
	/** The maximum number of chunks in the balloon. */
	u32 max_chunks;
	/**
	 * Array of pointers to page arrays. A page * array is allocated for
	 * each chunk when inflating, and freed when the deflating.
	 */
	struct page ***pages;
};

/**
 * Per bit usage tracker for a u32 mask.
 *
 * Used for optimal handling of guest properties and event filter.
 */
struct vbg_bit_usage_tracker {
	/** Per bit usage counters. */
	u32 per_bit_usage[32];
	/** The current mask according to per_bit_usage. */
	u32 mask;
};

/** VBox guest device (data) extension. */
struct vbg_dev {
	struct device *dev;
	/** The base of the adapter I/O ports. */
	u16 io_port;
	/** Pointer to the mapping of the VMMDev adapter memory. */
	struct vmmdev_memory *mmio;
	/** Host version */
	char host_version[64];
	/** Host features */
	unsigned int host_features;
	/**
	 * Dummy page and vmap address for reserved kernel virtual-address
	 * space for the guest mappings, only used on hosts lacking vtx.
	 */
	struct page *guest_mappings_dummy_page;
	void *guest_mappings;
	/** Spinlock protecting pending_events. */
	spinlock_t event_spinlock;
	/** Preallocated struct vmmdev_events for the IRQ handler. */
	struct vmmdev_events *ack_events_req;
	/** Wait-for-event list for threads waiting for multiple events. */
	wait_queue_head_t event_wq;
	/** Mask of pending events. */
	u32 pending_events;
	/** Wait-for-event list for threads waiting on HGCM async completion. */
	wait_queue_head_t hgcm_wq;
	/** Pre-allocated hgcm cancel2 req. for cancellation on timeout */
	struct vmmdev_hgcm_cancel2 *cancel_req;
	/** Mutex protecting cancel_req accesses */
	struct mutex cancel_req_mutex;
	/** Pre-allocated mouse-status request for the input-device handling. */
	struct vmmdev_mouse_status *mouse_status_req;
	/** Input device for reporting abs mouse coordinates to the guest. */
	struct input_dev *input;

	/** Memory balloon information. */
	struct vbg_mem_balloon mem_balloon;

	/** Lock for session related items in vbg_dev and vbg_session */
	struct mutex session_mutex;
	/** Events we won't permit anyone to filter out. */
	u32 fixed_events;
	/**
	 * Usage counters for the host events (excludes fixed events),
	 * Protected by session_mutex.
	 */
	struct vbg_bit_usage_tracker event_filter_tracker;
	/**
	 * The event filter last reported to the host (or UINT32_MAX).
	 * Protected by session_mutex.
	 */
	u32 event_filter_host;

	/**
	 * Guest capabilities which have been switched to acquire_mode.
	 */
	u32 acquire_mode_guest_caps;
	/**
	 * Guest capabilities acquired by vbg_acquire_session_capabilities().

Annotation

Implementation Notes