- Timestamp:
- 05/17/09 10:39:07 (3 years ago)
- Location:
- Whitix/trunk/user/xynth/src/server
- Files:
-
- 6 modified
-
Makefile (modified) (3 diffs)
-
Makefile.depend (modified) (2 diffs)
-
server.c (modified) (8 diffs)
-
server.h (modified) (1 diff)
-
video/bochs/server.c (modified) (6 diffs)
-
video/vga/server.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
Whitix/trunk/user/xynth/src/server/Makefile
r910 r2049 4 4 5 5 DIR = src/server/ 6 7 SUBDIR-Y = video/bochs/ 8 SUBDIR-Y = video/vga/ 6 9 7 10 INCDIR += . ../lib ../../../libc/include ../../../posix/include \ … … 47 50 CFLAGS-$(VIDEO_VGA) += -I../../../../../librtl -I../../../../../libc/include -I../../../../../posix/include 48 51 49 OBJS-$(VIDEO_BOCHS) += video/bochs/server.o50 CFLAGS-$(VIDEO_BOCHS) += -I../../../../../librtl -I../../../../../libc/include -I../../../../../posix/include51 52 52 OBJS-$(VIDEO_HELPER) += video/helper/console.o video/helper/irman.o video/helper/kbd.o video/helper/modes.o \ 53 53 video/helper/mouse.o video/helper/mtrr.o video/helper/tscreen.o … … 78 78 OBJS += $(OBJS-Y) 79 79 EXTRA_OBJS += $(EXTRA_OBJS-Y) 80 LDFLAGS += -nostdlib -pthread -lstdc -lposix -lm ../../../libc/init/init.o -lxynth -lpthread -ldl -llinker -lregistry -lnetwork - dynamic-linker=/System/Runtime/liblinker.so80 LDFLAGS += -nostdlib -pthread -lstdc -lposix -lm ../../../libc/init/init.o -lxynth -lpthread -ldl -llinker -lregistry -lnetwork -lfile -dynamic-linker=/System/Runtime/liblinker.so 81 81 TARGET = $(TARGET-Y) 82 82 -
Whitix/trunk/user/xynth/src/server/Makefile.depend
r1668 r2049 87 87 ../../../posix/include/sys/un.h ../../../posix/include/netinet/in.h \ 88 88 ../../../posix/include/arpa/inet.h server.h \ 89 ../../../sdk/include/registry.h ../../../ posix/include/fcntl.h \90 ../../../posix/include/ sys/stat.h ../../../libc/include/syscalls.h \91 ../../../libc/include/sys defs.h ../../../posix/include/sys/shm.h \92 ../../../posix/include/sys/ ipc.h89 ../../../sdk/include/registry.h ../../../sdk/include/file.h \ 90 ../../../posix/include/fcntl.h ../../../posix/include/sys/stat.h \ 91 ../../../libc/include/syscalls.h ../../../libc/include/sysdefs.h \ 92 ../../../posix/include/sys/shm.h ../../../posix/include/sys/ipc.h 93 93 socket.o: socket.c ../../../posix/include/sys/stat.h \ 94 94 ../../../posix/include/sys/time.h ../../../libc/include/time.h \ … … 211 211 server.h video/vga/vga.h ../../../libc/include/syscalls.h \ 212 212 ../../../libc/include/sysdefs.h 213 video/bochs/server.o: video/bochs/server.c \214 video/bochs/../../../lib/xynth_.h ../../../libc/include/stdio.h \215 ../../../libc/include/errno.h ../../../libc/include/stddef.h \216 ../../../libc/include/string.h ../../../libc/include/stdarg.h \217 ../../../libc/include/stdlib.h ../../../libc/include/limits.h \218 ../../../posix/include/unistd.h ../../../posix/include/sys/select.h \219 ../../../posix/include/sys/types.h ../../../posix/include/sys/time.h \220 ../../../libc/include/time.h ../../../posix/include/sys/resource.h \221 ../../../posix/include/sys/wait.h ../../../posix/include/signal.h \222 ../../../posix/include/sys/ucontext.h ../../../posix/include/getopt.h \223 ../../../libc/include/stdint.h ../../../libc/include/inttypes.h \224 ../../../libc/include/ctype.h video/bochs/../../../lib/xynth.h \225 ../../../posix/include/sys/poll.h ../../../posix/include/sys/socket.h \226 ../../../posix/include/sys/un.h ../../../posix/include/netinet/in.h \227 ../../../posix/include/arpa/inet.h server.h \228 ../../../libc/include/syscalls.h ../../../libc/include/sysdefs.h -
Whitix/trunk/user/xynth/src/server/server.c
r1801 r2049 18 18 19 19 #include <registry.h> 20 #include <file.h> 20 21 21 22 #if defined(PLATFORM_LINUX) … … 25 26 #include <sys/shm.h> 26 27 27 #if defined(VIDEO_BOCHS) 28 extern s_video_driver_t s_video_bochs; 29 #endif 30 31 #if defined(VIDEO_VGA) 32 extern s_video_driver_t s_video_vga; 33 #endif 34 35 static s_video_driver_t *video_drivers[] = { 36 #if defined(VIDEO_BOCHS) 37 &s_video_bochs, 38 #endif 39 #if defined(VIDEO_VGA) 40 &s_video_vga, 41 #endif 42 NULL, 43 }; 28 /* dl handle of the driver. */ 29 void* driverLibrary; 44 30 45 31 int s_server_cfg_check_digit (char *ptr, char *digits) … … 76 62 } 77 63 78 int BlazeServerConfig (s_server_conf_t*config)64 int BlazeServerConfigRead(s_server_conf_t *config) 79 65 { 80 66 /* Open the registry and read the configuration methodically. */ 81 67 struct Registry registry; 82 68 struct RegKeySet keySet; 83 84 RegRegistryOpen(NULL, ®istry); 69 char* str = NULL, *mouseType; 70 71 if (RegRegistryOpen(NULL, ®istry)) 72 debugf(DSER | DFAT, "failed to open registry"); 85 73 86 74 /* Video. */ 87 RegKeySetOpen(®istry, "/Applications/Xynth/Video", 0, &keySet); 88 89 RegKeyReadString(&keySet, "driver", &config->general.driver, NULL); 90 75 if (RegKeySetOpen(®istry, "/Applications/Xynth/Video", 0, &keySet)) 76 debugf(DSER | DFAT, "failed to open video keyset"); 77 78 if (RegKeyReadString(&keySet, "driver", &str, NULL)) 79 debugf(DSER | DFAT, "failed to read driver key"); 80 81 config->general.driver = str; 82 83 /* TODO: Read mode. */ 84 85 RegKeySetClose(&keySet); 86 87 /* Input devices */ 88 if (RegKeySetOpen(®istry, "/Applications/Xynth/Input", 0, &keySet)) 89 debugf(DSER | DFAT, "failed to open input keyset"); 90 91 str = NULL; 92 93 if (RegKeyReadString(&keySet, "mouseType", &str, NULL)) 94 debugf(DSER | DFAT, "failed to read mouse type key"); 95 96 config->mouse.type = str; 97 98 str = NULL; 99 100 if (RegKeyReadString(&keySet, "kbdType", &str, NULL)) 101 debugf(DSER | DFAT, "failed to read keyboard type key"); 102 103 RegKeySetClose(&keySet); 104 91 105 RegRegistryClose(®istry); 92 } 93 106 107 return 0; 108 } 109 110 /* TODO: Don't need config parameter. */ 111 int BlazeLoadVideoDriver(char* driverName) 112 { 113 char name[128]; 114 s_video_driver_t* driverInfo; 115 int secondTime = 0; 116 117 snprintf(name, 128, "/Applications/Xynth/Drivers/%s", driverName); 118 119 /* FIXME: Remove soon. */ 120 SysIoAccess(1); 121 122 driverLibrary = dlopen(name, 0); 123 124 if (!driverLibrary) 125 debugf(DSER | DFAT, "failed to open video driver"); 126 127 driverInfo = dlsym(driverLibrary, "videoDriver"); 128 129 if (!driverInfo) 130 debugf(DSER | DFAT, "invalid video driver"); 131 132 if (driverInfo->probe) 133 if (!driverInfo->probe(server)) 134 return 1; 135 136 /* Call the start function for the video driver; it sets the resolution 137 * to the values specified in the configuration. */ 138 if (driverInfo->server_init) 139 { 140 if ((driverInfo->server_init(server) < 0)) 141 return 1; 142 }else 143 debugf(DSER | DFAT, "invalid video driver"); 144 145 server->driver = driverInfo; 146 147 return 0; 148 } 149 150 /* TODO: Load the vga driver if all else fails? */ 94 151 int s_server_cfg (s_server_conf_t *config) 95 152 { 96 int ret = 0; 97 153 BlazeServerConfigRead(config); 154 155 if (strlen(config->general.driver) == 0) 156 { 157 char* name; 158 struct FileDirectory* dir; 159 struct FileDirEnt* ent; 160 161 dir = FileDirOpen("/Applications/Xynth/Drivers/"); 162 163 while ( ( ent = FileDirNext(dir) ) ) 164 { 165 name = ent->name; 166 167 if (name[0] == '.' || !strcmp(name, "vga.so")) 168 continue; 169 170 if (!BlazeLoadVideoDriver(name)) 171 break; 172 } 173 174 if (!ent && BlazeLoadVideoDriver("vga.so")) 175 { 176 debugf(DSER | DFAT, "failed to find a valid video driver."); 177 } 178 179 FileDirClose(dir); 180 181 }else{ 182 char buffer[256]; 183 strncpy(buffer, config->general.driver, 250); 184 strcat(buffer, ".so"); 185 BlazeLoadVideoDriver(config->general.driver); 186 } 187 188 return 0; 189 } 190 191 int s_server_init (void) 192 { 98 193 int i; 99 int j;100 s_config_t *cfg;101 s_config_cat_t *cat;102 s_config_var_t *var;103 104 s_config_init(&cfg);105 if (s_config_parse(cfg, CONFDIR "xynth.conf")) {106 debugf(DSER, "Configuration file parsing failed (%s)", CONFDIR "xynth.conf");107 s_config_uninit(cfg);108 return -1;109 }110 111 i = 0;112 while (!s_list_eol(cfg->category, i)) {113 cat = s_list_get(cfg->category, i++);114 j = 0;115 while (!s_list_eol(cat->variable, j)) {116 var = s_list_get(cat->variable, j++);117 if (strcasecmp(cat->name, "general") == 0) {118 if (strcasecmp(var->name, "driver") == 0) {119 config->general.driver = strdup(var->value);120 } else if (strcasecmp(var->name, "mode") == 0) {121 config->general.mode = strdup(var->value);122 } else if (strcasecmp(var->name, "rotate") == 0) {123 config->general.rotate = atoi(var->value);124 }125 } else if (strcasecmp(cat->name, "mouse") == 0) {126 if (strcasecmp(var->name, "type") == 0) {127 config->mouse.type = strdup(var->value);128 } else if (strcasecmp(var->name, "device") == 0) {129 config->mouse.device = strdup(var->value);130 } else if (strcasecmp(var->name, "samplerate") == 0) {131 config->mouse.samplerate = atoi(var->value);132 } else if (strcasecmp(var->name, "scale") == 0) {133 config->mouse.scale = atoi(var->value);134 if (config->mouse.scale == 0) {135 config->mouse.scale = 1;136 }137 }138 } else if (strcasecmp(cat->name, "keyboard") == 0) {139 if (strcasecmp(var->name, "keyboard") == 0) {140 config->keyboard.keyboard = strdup(var->value);141 }142 }else if (strcasecmp(cat->name, "monitor") == 0) {143 char *ptr;144 char *nptr;145 char *nptr_;146 char digits[] = ".0123456789";147 if (strcasecmp(var->name, "horizsync") == 0) {148 nptr = strdup(var->value);149 nptr_ = nptr;150 ptr = s_server_cfg_token(&nptr);151 if (s_server_cfg_check_digit(ptr, digits)) {152 config->monitor.horizsync_min = atof(ptr);153 } else {154 goto hs_bad;155 }156 ptr = s_server_cfg_token(&nptr);157 if (s_server_cfg_check_digit(ptr, digits)) {158 config->monitor.horizsync_max = atof(ptr);159 } else {160 hs_bad: debugf(DSER, "Illegal horizsync setting. Correct usage: horizsync min_kHz max_kHz\n");161 ret = -1;162 }163 s_free(nptr_);164 } else if (strcasecmp(var->name, "vertrefresh") == 0) {165 nptr = strdup(var->value);166 nptr_ = nptr;167 ptr = s_server_cfg_token(&nptr);168 if (s_server_cfg_check_digit(ptr, digits)) {169 config->monitor.vertrefresh_min = atof(ptr);170 } else {171 goto vr_bad;172 }173 ptr = s_server_cfg_token(&nptr);174 if (s_server_cfg_check_digit(ptr, digits)) {175 config->monitor.vertrefresh_max = atof(ptr);176 } else {177 vr_bad: debugf(DSER, "Illegal vertrefresh setting. Correct usage: vertrefresh min_Hz max_Hz\n");178 ret = -1;179 }180 s_free(nptr_);181 } else if (strcasecmp(var->name, "timing") == 0) {182 nptr = strdup(var->value);183 nptr_ = nptr;184 ptr = s_server_cfg_token(&nptr);185 if (s_server_cfg_check_digit(ptr, digits)) {186 config->monitor.pixclock = atoi(ptr);187 } else {188 goto tm_bad;189 }190 ptr = s_server_cfg_token(&nptr);191 if (s_server_cfg_check_digit(ptr, digits)) {192 config->monitor.left_margin = atoi(ptr);193 } else {194 goto tm_bad;195 }196 ptr = s_server_cfg_token(&nptr);197 if (s_server_cfg_check_digit(ptr, digits)) {198 config->monitor.right_margin = atoi(ptr);199 } else {200 goto tm_bad;201 }202 ptr = s_server_cfg_token(&nptr);203 if (s_server_cfg_check_digit(ptr, digits)) {204 config->monitor.upper_margin = atoi(ptr);205 } else {206 goto tm_bad;207 }208 ptr = s_server_cfg_token(&nptr);209 if (s_server_cfg_check_digit(ptr, digits)) {210 config->monitor.lower_margin = atoi(ptr);211 } else {212 goto tm_bad;213 }214 ptr = s_server_cfg_token(&nptr);215 if (s_server_cfg_check_digit(ptr, digits)) {216 config->monitor.hsync_len = atoi(ptr);217 } else {218 goto tm_bad;219 }220 ptr = s_server_cfg_token(&nptr);221 if (s_server_cfg_check_digit(ptr, digits)) {222 config->monitor.vsync_len = atoi(ptr);223 } else {224 goto tm_bad;225 }226 ptr = s_server_cfg_token(&nptr);227 if (s_server_cfg_check_digit(ptr, digits)) {228 config->monitor.vmode = atoi(ptr);229 } else {230 tm_bad: debugf(DSER, "Illegal timing setting. Correct usage: vertrefresh pixclock left_margin right_margin upper_margin lower_margin hsync_len vsync_len vmode\n");231 ret = -1;232 }233 s_free(nptr_);234 }235 }236 }237 }238 s_config_uninit(cfg);239 {240 s_video_driver_t **vd;241 for (vd = video_drivers; *vd; vd++) {242 if (strcmp((*vd)->driver, config->general.driver) == 0) {243 if ((strlen((*vd)->driver) >= S_FNAME_MAX) ||244 (strlen((*vd)->device) >= S_FNAME_MAX)) {245 debugf(DSER, "driver:%s, or device:%s name is too long (> %d). skipping", (*vd)->driver, (*vd)->device, S_FNAME_MAX);246 continue;247 }248 server->driver = *vd;249 }250 }251 if (server->driver == NULL) {252 debugf(DSER, "Unknown video driver : %s", config->general.driver);253 ret = -1;254 }255 }256 257 return ret;258 }259 260 int s_server_init (void)261 {262 int i;263 int mode;264 194 void *addr; 265 195 s_server_conf_t config; … … 291 221 goto err0; 292 222 } 293 294 BlazeServerConfig(&config); 295 296 server->window->surface->buf->x = 0; 297 server->window->surface->buf->y = 0; 223 224 server->window->surface->buf->x = 0; 225 server->window->surface->buf->y = 0; 298 226 server->window->surface->buf->w = 0; 299 227 server->window->surface->buf->h = 0; … … 301 229 server->window->surface->linear_buf_pitch = 0; 302 230 server->window->surface->linear_buf_height = 0; 303 304 if (server->driver->server_init != NULL) {305 mode = server->driver->server_init(&config);306 if (mode < 0) {307 debugf(DSER, "server->driver->server_init(&config) failed");308 goto err0;309 }310 } else {311 debugf(DSER, "server->driver->server_init == NULL");312 goto err0;313 }314 231 315 232 server->window->surface->bluemask = ((1 << server->window->surface->bluelength) - 1) << server->window->surface->blueoffset; 316 233 server->window->surface->greenmask = ((1 << server->window->surface->greenlength) - 1) << server->window->surface->greenoffset; 317 234 server->window->surface->redmask = ((1 << server->window->surface->redlength) - 1) << server->window->surface->redoffset; 235 236 /* For now. */ 237 config.general.rotate = 0; 318 238 319 239 if (config.general.rotate) { … … 367 287 368 288 server->window->surface->mode = SURFACE_REAL; 369 server->mode = mode;370 289 371 290 s_event_init(&server->window->event); … … 383 302 384 303 s_free(config.general.driver); 385 s_free(config.general.mode);304 // s_free(config.general.mode); 386 305 s_free(config.mouse.type); 387 306 s_free(config.mouse.device); 388 307 s_free(config.keyboard.keyboard); 308 309 #if 0 389 310 s_free(config.irr.type); 390 311 s_free(config.irr.device); 391 312 s_free(config.irr.brate); 313 #endif 392 314 393 315 server->window->running = 1; … … 396 318 397 319 err0: s_free(config.general.driver); 398 s_free(config.general.mode);320 // s_free(config.general.mode); 399 321 s_free(config.mouse.type); 400 322 s_free(config.mouse.device); -
Whitix/trunk/user/xynth/src/server/server.h
r910 r2049 59 59 char *device; 60 60 61 int (*server_init) (s_server_ conf_t *cfg);61 int (*server_init) (s_server_t* server); 62 62 void (*server_uninit) (void); 63 64 /* Returns 1 if there is a device the driver can use, 0 otherwise. */ 65 int (*probe)(s_server_t* server); 63 66 64 67 void *driver_data; -
Whitix/trunk/user/xynth/src/server/video/bochs/server.c
r1668 r2049 13 13 #define VBE_DISPI_DATA 0x01CF 14 14 15 #define VBE_DISPI_ID4 0xB0C4 16 17 #define VBE_DISPI_ID 0x0 15 18 #define VBE_DISPI_XRES 0x1 16 19 #define VBE_DISPI_YRES 0x2 … … 24 27 #define outw(port,data) asm volatile("outw %%ax,%%dx"::"d"(port),"a"(data)) 25 28 29 static unsigned short inw(unsigned short port) 30 { 31 unsigned short retVal; 32 asm volatile("inw %%dx,%%ax" : "=a"(retVal) : "d"(port)); 33 return retVal; 34 } 35 26 36 extern int noGraphics; 27 37 28 void VbeWrite(unsigned short index, unsigned short value) 38 static unsigned short VbeRead(unsigned short index) 39 { 40 outw(VBE_DISPI_INDEX, index); 41 42 return inw(VBE_DISPI_DATA); 43 } 44 45 static void VbeWrite(unsigned short index, unsigned short value) 29 46 { 30 47 outw(VBE_DISPI_INDEX, index); … … 32 49 } 33 50 34 voidVbeSetMode(unsigned short width, unsigned short height, unsigned short bits)51 static int VbeSetMode(unsigned short width, unsigned short height, unsigned short bits) 35 52 { 36 53 VbeWrite(VBE_DISPI_ENABLE, VBE_DISPI_DISABLED); … … 39 56 VbeWrite(VBE_DISPI_BPP, bits); 40 57 VbeWrite(VBE_DISPI_ENABLE, VBE_DISPI_ENABLED | VBE_DISPI_LFB_ENABLED); 58 59 return 0; 41 60 } 42 61 43 int s_video_bochs_server_init (s_server_ conf_t *cfg)62 int s_video_bochs_server_init (s_server_t* server) 44 63 { 45 SysIoAccess(1); 64 if (VbeSetMode(BOCHS_WIDTH, BOCHS_HEIGHT, BOCHS_BPP)) 65 return -1; 66 67 server->window->surface->width=BOCHS_WIDTH; 46 68 47 if (!noGraphics)48 VbeSetMode(BOCHS_WIDTH, BOCHS_HEIGHT, BOCHS_BPP);49 50 server->window->surface->width=BOCHS_WIDTH;51 69 server->window->surface->height=BOCHS_HEIGHT; 52 70 server->window->surface->bytesperpixel=BOCHS_BPP/8; … … 60 78 server->window->surface->redlength = 8; 61 79 62 int memFd =SysOpen("/System/Devices/Special/Memory", _SYS_FILE_READ | _SYS_FILE_WRITE, 0);80 int memFd = SysOpen("/System/Devices/Special/Memory", _SYS_FILE_READ | _SYS_FILE_WRITE, 0); 63 81 64 82 server->window->surface->linear_mem_size=server->window->surface->width*server->window->surface->height*server->window->surface->bytesperpixel; … … 80 98 } 81 99 82 s_video_driver_t s_video_bochs = { 100 int BochsProbe(s_server_t* server) 101 { 102 if (VbeRead(VBE_DISPI_ID) != VBE_DISPI_ID4) 103 return 0; 104 105 return 1; 106 } 107 108 s_video_driver_t videoDriver = { 83 109 "bochs", 84 110 "/System/Devices/Special/Memory", 85 111 s_video_bochs_server_init, 86 112 s_video_bochs_server_uninit, 113 BochsProbe, 87 114 }; -
Whitix/trunk/user/xynth/src/server/video/vga/server.c
r1668 r2049 161 161 } 162 162 163 int s_video_vga_server_init (s_server_conf_t *cfg) 163 /* VGA is the lowest common denominator for video output. Every PC supports it. */ 164 int VgaProbe(s_server_t* server) 165 { 166 return 1; 167 } 168 169 int s_video_vga_server_init (s_server_t* server) 164 170 { 165 171 printf("Loading VGA driver.\n"); … … 195 201 server->window->surface->linear_mem_size=VGA_SIZE; 196 202 197 if (!noGraphics) 198 VgaInit(); 203 VgaInit(); 199 204 200 205 return 0; 201 206 } 202 207 203 s_video_driver_t s_video_vga= {208 s_video_driver_t videoDriver = { 204 209 "vga", 205 210 "/System/Devices/Special/Memory", 206 211 s_video_vga_server_init, 212 VgaProbe, 207 213 s_video_vga_server_uninit, 208 214 };
