diff options
Diffstat (limited to 'WindowServer/main.cpp')
-rw-r--r-- | WindowServer/main.cpp | 33 |
1 files changed, 13 insertions, 20 deletions
diff --git a/WindowServer/main.cpp b/WindowServer/main.cpp index 9454b9793f..f74ad07f76 100644 --- a/WindowServer/main.cpp +++ b/WindowServer/main.cpp @@ -1,19 +1,19 @@ -#include "Process.h" #include <SharedGraphics/Font.h> #include <WindowServer/WSScreen.h> #include <WindowServer/WSWindowManager.h> #include <WindowServer/WSMessageLoop.h> #include <WindowServer/WSWindow.h> +#include <unistd.h> +#include <fcntl.h> +#include <sys/ioctl.h> +#include <sys/mman.h> -// NOTE: This actually runs as a kernel process. -// I'd like to change this eventually. - -void WindowServer_main() +int main(int, char**) { - WSMessageLoop::the().set_server_process(*current); - current->set_priority(Process::HighPriority); + dbgprintf("WindowServer starting...\n"); + WSMessageLoop loop; - int bxvga_fd = current->sys$open("/dev/bxvga", O_RDWR); + int bxvga_fd = open("/dev/bxvga", O_RDWR); ASSERT(bxvga_fd >= 0); struct BXVGAResolution { @@ -21,24 +21,17 @@ void WindowServer_main() int height; }; BXVGAResolution resolution { 1024, 768 }; - - int rc = current->sys$ioctl(bxvga_fd, 1985, (int)&resolution); + int rc = ioctl(bxvga_fd, 1985, (int)&resolution); ASSERT(rc == 0); - Syscall::SC_mmap_params params; - memset(¶ms, 0, sizeof(params)); - params.fd = bxvga_fd; - params.prot = PROT_READ | PROT_WRITE; - params.flags = MAP_SHARED; - params.size = resolution.width * resolution.height * sizeof(RGBA32) * 2; - params.offset = 0; - kprintf("Calling sys$mmap in WS\n"); - void* framebuffer = current->sys$mmap(¶ms); + size_t framebuffer_size_in_bytes = resolution.width * resolution.height * sizeof(RGBA32) * 2; + void* framebuffer = mmap(nullptr, framebuffer_size_in_bytes, PROT_READ | PROT_WRITE, MAP_SHARED, bxvga_fd, 0); ASSERT(framebuffer && framebuffer != (void*)-1); WSScreen screen((dword*)framebuffer, resolution.width, resolution.height); - WSWindowManager::the().set_framebuffer_fd(bxvga_fd); + WSWindowManager window_manager; + window_manager.set_framebuffer_fd(bxvga_fd); dbgprintf("Entering WindowServer main loop.\n"); WSMessageLoop::the().exec(); |