mirror of
https://github.com/Fennix-Project/Drivers.git
synced 2025-07-11 15:19:23 +00:00
Update drivers
This commit is contained in:
@ -1,7 +1,7 @@
|
||||
# Config file
|
||||
include ../../../Makefile.conf
|
||||
|
||||
FILENAME = VMwareGuestDriver.fex
|
||||
FILENAME = VMwareMouseDriver.fex
|
||||
|
||||
CC = ../../../$(COMPILER_PATH)/$(COMPILER_ARCH)gcc
|
||||
CPP = ../../../$(COMPILER_PATH)/$(COMPILER_ARCH)g++
|
||||
@ -29,12 +29,12 @@ HEADERS = $(sort $(dir $(wildcard ../../include/*)))
|
||||
OBJ = $(C_SOURCES:.c=.o) $(CPP_SOURCES:.cpp=.o) $(ASM_SOURCES:.asm=.o) $(S_SOURCES:.S=.o) $(PSF_SOURCES:.psf=.o) $(BMP_SOURCES:.bmp=.o)
|
||||
INCLUDE_DIR = ../../include
|
||||
|
||||
LDFLAGS := \
|
||||
-fPIC -fno-pie \
|
||||
-Wl,-static,--no-dynamic-linker,-ztext \
|
||||
-nostdlib -nodefaultlibs -nolibc \
|
||||
-zmax-page-size=0x1000 \
|
||||
-Wl,-Map file.map -shared
|
||||
LDFLAGS := \
|
||||
-fPIC -fPIE -pie -Wl,-eDriverEntry \
|
||||
-Wl,-static,--no-dynamic-linker,-ztext,--no-warn-rwx-segment \
|
||||
-nostdlib -nodefaultlibs -nolibc \
|
||||
-zmax-page-size=0x1000 \
|
||||
-Wl,-Map file.map -static -Tlinker.ld
|
||||
|
||||
WARNCFLAG = -Wall -Wextra
|
||||
|
||||
@ -45,23 +45,20 @@ CFLAGS := \
|
||||
|
||||
ifeq ($(OSARCH), amd64)
|
||||
|
||||
CFLAGS += -fPIC -fno-pie -mno-80387 -mno-mmx -mno-3dnow \
|
||||
-mno-red-zone -mno-sse -mno-sse2 \
|
||||
-march=x86-64 -pipe -ffunction-sections \
|
||||
-mcmodel=kernel -msoft-float -fno-builtin
|
||||
LDFLAGS += -Tarch/amd64/linker.ld
|
||||
CFLAGS += -fPIC -fPIE -pie -mno-80387 -mno-mmx -mno-3dnow \
|
||||
-mno-red-zone -mno-sse -mno-sse2 \
|
||||
-march=x86-64 -pipe -ffunction-sections \
|
||||
-msoft-float -fno-builtin
|
||||
|
||||
else ifeq ($(OSARCH), i686)
|
||||
|
||||
CFLAGS += -fPIC -fno-pie -mno-80387 -mno-mmx -mno-3dnow \
|
||||
CFLAGS += -fPIC -fPIE -pie -mno-80387 -mno-mmx -mno-3dnow \
|
||||
-mno-red-zone -mno-sse -mno-sse2 -ffunction-sections \
|
||||
-march=i686 -pipe -msoft-float -fno-builtin
|
||||
LDFLAGS += -Tarch/i686/linker.ld
|
||||
|
||||
else ifeq ($(OSARCH), aarch64)
|
||||
|
||||
CFLAGS += -pipe -fno-builtin -fPIC
|
||||
LDFLAGS += -Tarch/aarch64/linker.ld
|
||||
|
||||
endif
|
||||
|
||||
|
@ -1,5 +1,3 @@
|
||||
/* EXPERIMENTAL */
|
||||
|
||||
OUTPUT_FORMAT(binary)
|
||||
OUTPUT_ARCH(i386:x86-64)
|
||||
|
@ -24,6 +24,8 @@ __attribute__((section(".extended"))) FexExtended ExtendedHeader = {
|
||||
|
||||
KernelAPI *KAPI;
|
||||
|
||||
#define print(msg) KAPI->Util.DebugPrint((char *)(msg), KAPI->Info.DriverUID)
|
||||
|
||||
/* --------------------------------------------------------------------------------------------------------- */
|
||||
|
||||
/* https://wiki.osdev.org/VMware_tools */
|
||||
@ -189,7 +191,7 @@ int CallbackHandler(KernelCallback *Data)
|
||||
{
|
||||
case AcknowledgeReason:
|
||||
{
|
||||
KAPI->Util.DebugPrint(((char *)"Kernel acknowledged the driver." + KAPI->Info.Offset), KAPI->Info.DriverUID);
|
||||
print("Kernel acknowledged the driver.");
|
||||
break;
|
||||
}
|
||||
case ConfigurationReason:
|
||||
@ -207,7 +209,33 @@ int CallbackHandler(KernelCallback *Data)
|
||||
Write(DATA, 0xF4);
|
||||
Read();
|
||||
Absolute();
|
||||
KAPI->Util.DebugPrint(((char *)"VMware mouse configured." + KAPI->Info.Offset), KAPI->Info.DriverUID);
|
||||
print("VMware mouse configured.");
|
||||
break;
|
||||
}
|
||||
case FetchReason:
|
||||
{
|
||||
Data->InputCallback.Mouse.X = MouseX;
|
||||
Data->InputCallback.Mouse.Y = MouseY;
|
||||
Data->InputCallback.Mouse.Z = MouseZ;
|
||||
Data->InputCallback.Mouse.Buttons.Left = MouseButton & 0x20;
|
||||
Data->InputCallback.Mouse.Buttons.Right = MouseButton & 0x10;
|
||||
Data->InputCallback.Mouse.Buttons.Middle = MouseButton & 0x08;
|
||||
break;
|
||||
}
|
||||
case StopReason:
|
||||
{
|
||||
Relative();
|
||||
// TODO: UNTESTED!!!
|
||||
outb(COMMAND, 0xA8);
|
||||
Write(COMMAND, READ_CONFIG);
|
||||
uint8_t Status = Read();
|
||||
Status &= ~0b10;
|
||||
Write(COMMAND, WRITE_CONFIG);
|
||||
Write(DATA, Status);
|
||||
Write(COMMAND, 0xD4);
|
||||
Write(DATA, 0xF5);
|
||||
Read();
|
||||
print("Driver stopped.");
|
||||
break;
|
||||
}
|
||||
case InterruptReason:
|
||||
@ -221,7 +249,7 @@ int CallbackHandler(KernelCallback *Data)
|
||||
|
||||
if (cmd.ax == 0xFFFF0000)
|
||||
{
|
||||
KAPI->Util.DebugPrint(((char *)"VMware mouse is not connected?" + KAPI->Info.Offset), KAPI->Info.DriverUID);
|
||||
print("VMware mouse is not connected?");
|
||||
Relative();
|
||||
Absolute();
|
||||
return ERROR;
|
||||
@ -235,25 +263,16 @@ int CallbackHandler(KernelCallback *Data)
|
||||
|
||||
int flags = (cmd.ax & 0xFFFF0000) >> 16; /* Not important */
|
||||
(void)flags;
|
||||
MouseButton = (cmd.ax & 0xFFFF); /* 0x10 = Right, 0x20 = Left, 0x08 = Middle */
|
||||
MouseX = cmd.bx; /* Both X and Y are scaled from 0 to 0xFFFF */
|
||||
MouseY = cmd.cx; /* You should map these somewhere to the actual resolution. */
|
||||
MouseZ = (int8_t)cmd.dx; /* Z is a single signed byte indicating scroll direction. */
|
||||
break;
|
||||
}
|
||||
case FetchReason:
|
||||
{
|
||||
Data->InputCallback.Mouse.X = MouseX;
|
||||
Data->InputCallback.Mouse.Y = MouseY;
|
||||
Data->InputCallback.Mouse.Z = MouseZ;
|
||||
Data->InputCallback.Mouse.Buttons.Left = MouseButton & 0x20;
|
||||
Data->InputCallback.Mouse.Buttons.Right = MouseButton & 0x10;
|
||||
Data->InputCallback.Mouse.Buttons.Middle = MouseButton & 0x08;
|
||||
MouseButton = (cmd.ax & 0xFFFF); /* 0x10 = Right, 0x20 = Left, 0x08 = Middle */
|
||||
MouseX = cmd.bx; /* Both X and Y are scaled from 0 to 0xFFFF */
|
||||
MouseY = cmd.cx; /* You should map these somewhere to the actual resolution. */
|
||||
MouseZ = (int8_t)cmd.dx; /* Z is a single signed byte indicating scroll direction. */
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
KAPI->Util.DebugPrint(((char *)"Unknown reason." + KAPI->Info.Offset), KAPI->Info.DriverUID);
|
||||
print("Unknown reason.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user