add display subsystem and vmwaresvga driver, support absolute mouse and qemu tablet, map pci mmio to private virtual aperture, better smp panic handling, remove legacy io publish/match, add sys query display info and display command to native shell
This commit is contained in:
1 parent
e41bf6e2c0
commit
6260de0085
38 files changed
+4011
-467
No files matched your search
@@ -0,0 +1,67 @@
|
||||
#pragma once
|
||||
// display.h - display device DDI
|
||||
//
|
||||
// Display providers register DISPLAY_DEVICE objects with the kernel display
|
||||
// manager. The boot framebuffer backend is registered by the kernel itself;
|
||||
// PCI/virtual GPU drivers register additional providers later.
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <ntlite/status.h>
|
||||
|
||||
#ifndef DISPLAY_API
|
||||
#define DISPLAY_API __declspec(dllimport)
|
||||
#endif
|
||||
|
||||
#include <ntlite/display.h>
|
||||
|
||||
typedef struct DISPLAY_DEVICE DISPLAY_DEVICE;
|
||||
|
||||
typedef struct DISPLAY_DEVICE_OPS {
|
||||
KSTATUS (*GetMode)(DISPLAY_DEVICE* device, DISPLAY_MODE* outMode);
|
||||
|
||||
KSTATUS (*Blit)(DISPLAY_DEVICE* device,
|
||||
int x, int y, int w, int h,
|
||||
const uint32_t* pixels);
|
||||
|
||||
KSTATUS (*FillRect)(DISPLAY_DEVICE* device,
|
||||
int x, int y, int w, int h,
|
||||
uint32_t color);
|
||||
|
||||
KSTATUS (*CopyRect)(DISPLAY_DEVICE* device,
|
||||
int dstX, int dstY,
|
||||
int srcX, int srcY,
|
||||
int w, int h);
|
||||
|
||||
KSTATUS (*ReadRect)(DISPLAY_DEVICE* device,
|
||||
int x, int y, int w, int h,
|
||||
uint32_t* outPixels, uint32_t outStride);
|
||||
|
||||
KSTATUS (*Present)(DISPLAY_DEVICE* device,
|
||||
const DISPLAY_RECT* rects,
|
||||
size_t rectCount);
|
||||
|
||||
KSTATUS (*Sync)(DISPLAY_DEVICE* device);
|
||||
|
||||
KSTATUS (*SetCursorImage)(DISPLAY_DEVICE* device,
|
||||
int width, int height,
|
||||
int hotX, int hotY,
|
||||
const uint32_t* argbPixels);
|
||||
|
||||
KSTATUS (*SetCursorPosition)(DISPLAY_DEVICE* device, int x, int y);
|
||||
KSTATUS (*ShowCursor)(DISPLAY_DEVICE* device, bool show);
|
||||
|
||||
KSTATUS (*QueryStats)(DISPLAY_DEVICE* device, DISPLAY_STATS* outStats);
|
||||
} DISPLAY_DEVICE_OPS;
|
||||
|
||||
struct DISPLAY_DEVICE {
|
||||
const char* Name;
|
||||
uint32_t Caps;
|
||||
void* DriverContext;
|
||||
const DISPLAY_DEVICE_OPS* Ops;
|
||||
DISPLAY_DEVICE* Next;
|
||||
};
|
||||
|
||||
DISPLAY_API KSTATUS KeDisplayRegisterDevice(DISPLAY_DEVICE* device);
|
||||
DISPLAY_API KSTATUS KeDisplaySetPrimary(DISPLAY_DEVICE* device);
|
||||
@@ -7,15 +7,25 @@
|
||||
|
||||
typedef struct BOOT_INFO BOOT_INFO;
|
||||
|
||||
typedef struct HAL_FRAMEBUFFER_INFO {
|
||||
uintptr_t Base; // kernel virtual address of the visible framebuffer
|
||||
uint32_t Width;
|
||||
uint32_t Height;
|
||||
uint32_t Stride; // pixels per scanline
|
||||
uint32_t Format; // currently 0x00RRGGBB / X8R8G8B8
|
||||
} HAL_FRAMEBUFFER_INFO;
|
||||
|
||||
typedef struct HAL_SCREEN {
|
||||
void (*Clear)(uint32_t color);
|
||||
void (*PutPixel)(int x, int y, uint32_t color);
|
||||
void (*Blit)(int x, int y, int w, int h, const uint32_t* pixels);
|
||||
void (*GetSize)(int* width, int* height);
|
||||
KSTATUS (*GetFramebuffer)(HAL_FRAMEBUFFER_INFO* outInfo);
|
||||
void (*Scroll)(int lines);
|
||||
void (*PutChar)(char c, int x, int y, uint32_t fg, uint32_t bg);
|
||||
void (*PrintChar)(char c, uint32_t fg, uint32_t bg);
|
||||
// Hardware mouse cursor: save/restore background and blit sprite
|
||||
// Legacy software cursor hooks kept for early-boot/panic fallback only.
|
||||
// Normal input cursor ownership lives in ke_display.
|
||||
void (*DrawCursor)(int x, int y);
|
||||
void (*EraseCursor)(void);
|
||||
} HAL_SCREEN;
|
||||
|
||||
@@ -7,3 +7,5 @@
|
||||
__declspec(dllexport) KSTATUS KeInputRegisterDevice(const char* name, uint32_t flags, uint32_t* outDeviceId);
|
||||
__declspec(dllexport) void KeInputSubmitKey(const INPUT_KEY_EVENT* event);
|
||||
__declspec(dllexport) void KeInputSubmitMouse(const INPUT_MOUSE_EVENT* event);
|
||||
__declspec(dllexport) void KeInputSubmitMouseAbsolute(const INPUT_MOUSE_ABSOLUTE_EVENT* event);
|
||||
__declspec(dllexport) void KeInputSubmitMouseAbsoluteScaled(uint32_t rawX, uint32_t rawY, uint32_t maxX, uint32_t maxY, int wheel, uint8_t buttons);
|
||||
@@ -165,72 +165,6 @@ __declspec(dllexport) uint8_t IoGetDeviceStackSize(DEVICE_OBJECT* device);
|
||||
__declspec(dllexport) KSTATUS IoSendPnpIrpSync(DEVICE_OBJECT* device,
|
||||
IO_PNP_MINOR_FUNCTION minor);
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Legacy USB publish/matcher path. This remains only until USB is migrated to
|
||||
// PDO/interface-PDO enumeration in the later USB stages.
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
#define IO_PUBLISHED_USB_MAX_ENDPOINTS 8u
|
||||
|
||||
typedef struct IO_PUBLISHED_USB_ENDPOINT {
|
||||
uint8_t Address;
|
||||
uint8_t Attributes;
|
||||
uint16_t MaxPacketSize;
|
||||
uint8_t Interval;
|
||||
} IO_PUBLISHED_USB_ENDPOINT;
|
||||
|
||||
typedef struct IO_PUBLISHED_USB_DEVICE {
|
||||
uint16_t VendorId;
|
||||
uint16_t ProductId;
|
||||
uint16_t BcdUsb;
|
||||
uint16_t BcdDevice;
|
||||
|
||||
uint8_t DeviceClass;
|
||||
uint8_t DeviceSubclass;
|
||||
uint8_t DeviceProtocol;
|
||||
|
||||
uint8_t SlotId;
|
||||
uint8_t Port;
|
||||
uint8_t Speed;
|
||||
uint8_t ConfigurationValue;
|
||||
|
||||
uint8_t InterfaceNumber;
|
||||
uint8_t AlternateSetting;
|
||||
uint8_t InterfaceClass;
|
||||
uint8_t InterfaceSubclass;
|
||||
uint8_t InterfaceProtocol;
|
||||
|
||||
uint8_t EndpointCount;
|
||||
IO_PUBLISHED_USB_ENDPOINT Endpoints[IO_PUBLISHED_USB_MAX_ENDPOINTS];
|
||||
} IO_PUBLISHED_USB_DEVICE;
|
||||
|
||||
typedef struct IO_PUBLISHED_DEVICE {
|
||||
IO_BUS_TYPE BusType;
|
||||
const char* Name;
|
||||
void* BusContext;
|
||||
void* DeviceContext;
|
||||
uint32_t Flags;
|
||||
bool Bound;
|
||||
const char* BoundDriverName;
|
||||
|
||||
union {
|
||||
IO_PUBLISHED_USB_DEVICE Usb;
|
||||
} u;
|
||||
} IO_PUBLISHED_DEVICE;
|
||||
|
||||
typedef bool (*IO_DRIVER_MATCH_CALLBACK)(const IO_PUBLISHED_DEVICE* device,
|
||||
void* context);
|
||||
typedef KSTATUS (*IO_DRIVER_BIND_CALLBACK)(IO_PUBLISHED_DEVICE* device,
|
||||
void* context);
|
||||
|
||||
__declspec(dllexport) KSTATUS IoRegisterDriverMatcher(const char* driverName,
|
||||
IO_BUS_TYPE busType,
|
||||
IO_DRIVER_MATCH_CALLBACK match,
|
||||
IO_DRIVER_BIND_CALLBACK bind,
|
||||
void* context);
|
||||
__declspec(dllexport) KSTATUS IoPublishDevice(const IO_PUBLISHED_DEVICE* device);
|
||||
__declspec(dllexport) uint32_t IoPublishedDeviceCount(void);
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Disk namespace above storage DEVICE_OBJECTs
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
Reference in new issue
Block a user