Files
kolibrios/drivers/vboxguest/sys/shutdown.inc
lex ab59015ded
Some checks failed
Build system / Check kernel codestyle (pull_request) Has been cancelled
Build system / Build (pull_request) Has been cancelled
Add VBoxGuest driver code
2026-03-04 21:16:17 +03:00

48 lines
2.1 KiB
HTML

; =============================================================================
; Модуль : Корректное завершение работы драйвера VBoxGuest
; Назначение : Деинициализация всех подсистем при выгрузке драйвера (DRV_EXIT)
; Файл : sys/shutdown.inc
; Порядок : По образцу Linux vbg_core_exit для избежания зависаний
; =============================================================================
; Полная деинициализация драйвера VBoxGuest (вызывается при DRV_EXIT)
proc sys_shutdown
DEBUGF 2, "[VBoxGuest] Shutdown started\n"
; 1. Остановить все сервисы (отправить уведомления хосту)
call dispatcher_disable_all
DEBUGF 2, "[VBoxGuest] All services disabled\n"
; 2. Остановить таймер (ПЕРЕД IRQ detach, иначе tick вызовется во время cleanup)
call timer_stop
DEBUGF 2, "[VBoxGuest] Timer stopped\n"
; 3. Убрать IRQ handler ОБЯЗАТЕЛЬНО до освобождения буферов
; ISR не должна писать в освобождаемую память
; call vbox_irq_detach
; DEBUGF 2, "[VBoxGuest] IRQ handler detached\n"
; 4. Сбросить маски события и возможностей на хосте (маска = 0)
xor eax, eax
mov [dispatcher_active_events], eax
call vmmdev_update_event_filter
DEBUGF 2, "[VBoxGuest] Event filter cleared\n"
mov [dispatcher_active_caps], eax
call vmmdev_update_capabilities
DEBUGF 2, "[VBoxGuest] Capabilities cleared\n"
; 5. Освободить пакеты (ПОСЛЕ IRQ detach — ISR больше не пишет в них)
call hgcm_free_packets
DEBUGF 2, "[VBoxGuest] HGCM packets freed\n"
call vmmdev_free_packets
DEBUGF 2, "[VBoxGuest] VMMDev packets freed\n"
DEBUGF 2, "[VBoxGuest] Shutdown complete\n"
xor eax, eax
ret
endp