summaryrefslogtreecommitdiff
path: root/WindowServer/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WindowServer/main.cpp')
-rw-r--r--WindowServer/main.cpp33
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(&params, 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(&params);
+ 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();