Changeset 00bb6965 in mainline
- Timestamp:
- 2006-12-11T23:17:58Z (18 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- df496c5
- Parents:
- dff0a94
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/sparc64/include/context.h
rdff0a94 r00bb6965 46 46 #endif 47 47 48 #define context_set(c, _pc, stack, size) \ 49 (c)->pc = ((uintptr_t) _pc) - 8; \ 50 (c)->sp = ((uintptr_t) stack) + ALIGN_UP((size), STACK_ALIGNMENT) - (STACK_BIAS + SP_DELTA); \ 48 #define context_set(c, _pc, stack, size) \ 49 (c)->pc = ((uintptr_t) _pc) - 8; \ 50 (c)->sp = ((uintptr_t) stack) + ALIGN_UP((size), \ 51 STACK_ALIGNMENT) - (STACK_BIAS + SP_DELTA); \ 51 52 (c)->fp = -STACK_BIAS 52 53 53 54 54 55 /* 55 * Only saveregisters that must be preserved across56 * Save only registers that must be preserved across 56 57 * function calls. 57 58 */ -
kernel/generic/include/ipc/ipc.h
rdff0a94 r00bb6965 129 129 130 130 /** Send as_area over IPC 131 * - ARG1 - src base address 132 * - ARG2 - size of src as(filled automatically by kernel) 133 * - ARG3 - flags of the area being sent 134 * - on answer ARG1 - dst base adress 131 * - ARG1 - src as_area base address 132 * - ARG2 - size of src as_area (filled automatically by kernel) 133 * - ARG3 - flags of the as_area being sent 134 * 135 * on answer: 136 * - ARG1 - dst as_area base adress 135 137 */ 136 138 #define IPC_M_AS_AREA_SEND 5 137 139 138 140 /** Get as_area over IPC 139 * - ARG1 - Where the area will be mapped 140 * - ARG2 - Expected size of area 141 * - ARG3 - User defined argument 142 * on answer - the server sets ARG1 as src as address of the as_area 143 * to be shared, ARG2 is set to rights that will be used for sharing, 144 * which is returned as part of answer back to the receiver 141 * - ARG1 - where the as_area will be mapped 142 * - ARG2 - expected size of the as_area 143 * - ARG3 - user defined argument 144 * 145 * on answer, the server sets: 146 * 147 * - ARG1 - src as_area base address 148 * - ARG2 - flags that will be used for sharing 145 149 */ 146 150 #define IPC_M_AS_AREA_RECV 6 -
uspace/console/console.c
rdff0a94 r00bb6965 71 71 typedef struct { 72 72 keybuffer_t keybuffer; /**< Buffer for incoming keys. */ 73 FIFO_CREATE_STATIC(keyrequests, ipc_callid_t , MAX_KEYREQUESTS_BUFFERED); /**< Buffer for unsatisfied request for keys. */ 73 /** Buffer for unsatisfied request for keys. */ 74 FIFO_CREATE_STATIC(keyrequests, ipc_callid_t, 75 MAX_KEYREQUESTS_BUFFERED); 74 76 int keyrequest_counter; /**< Number of requests in buffer. */ 75 77 int client_phone; /**< Phone to connected client. */ 76 int used; /**< 1 if this virtual console is connected to some client.*/ 77 screenbuffer_t screenbuffer; /**< Screenbuffer for saving screen contents and related settings. */ 78 int used; /**< 1 if this virtual console is 79 * connected to some client.*/ 80 screenbuffer_t screenbuffer; /**< Screenbuffer for saving screen 81 * contents and related settings. */ 78 82 } connection_t; 79 83 80 static connection_t connections[CONSOLE_COUNT]; /**< Array of data for virtual consoles */ 81 static keyfield_t *interbuffer = NULL; /**< Pointer to memory shared with framebufer used for faster virt. console switching */ 82 83 static int kernel_pixmap = -1; /**< Number of fb pixmap, where kernel console is stored */ 84 static connection_t connections[CONSOLE_COUNT]; /**< Array of data for virtual 85 * consoles */ 86 static keyfield_t *interbuffer = NULL; /**< Pointer to memory shared 87 * with framebufer used for 88 * faster virtual console 89 *switching */ 90 91 static int kernel_pixmap = -1; /**< Number of fb pixmap, where kernel 92 * console is stored */ 84 93 85 94 … … 116 125 static void set_style(style_t *style) 117 126 { 118 async_msg_2(fb_info.phone, FB_SET_STYLE, style->fg_color, style->bg_color); 127 async_msg_2(fb_info.phone, FB_SET_STYLE, style->fg_color, 128 style->bg_color); 119 129 } 120 130 … … 138 148 139 149 switch (key) { 140 case '\n': 141 scr->position_y += 1; 142 scr->position_x = 0; 143 break; 144 case '\r': 145 break; 146 case '\t': 147 scr->position_x += 8; 148 scr->position_x -= scr->position_x % 8; 149 break; 150 case '\b': 151 if (scr->position_x == 0) 152 break; 153 154 scr->position_x--; 155 156 if (console == active_console) 157 prtchr(' ', scr->position_y, scr->position_x); 158 159 screenbuffer_putchar(scr, ' '); 160 161 break; 162 default: 163 if (console == active_console) 164 prtchr(key, scr->position_y, scr->position_x); 165 166 screenbuffer_putchar(scr, key); 167 scr->position_x++; 150 case '\n': 151 scr->position_y += 1; 152 scr->position_x = 0; 153 break; 154 case '\r': 155 break; 156 case '\t': 157 scr->position_x += 8; 158 scr->position_x -= scr->position_x % 8; 159 break; 160 case '\b': 161 if (scr->position_x == 0) 162 break; 163 scr->position_x--; 164 if (console == active_console) 165 prtchr(' ', scr->position_y, scr->position_x); 166 screenbuffer_putchar(scr, ' '); 167 break; 168 default: 169 if (console == active_console) 170 prtchr(key, scr->position_y, scr->position_x); 171 172 screenbuffer_putchar(scr, key); 173 scr->position_x++; 168 174 } 169 175 … … 258 264 for (i = 0; i < conn->screenbuffer.size_x; i++) 259 265 for (j = 0; j < conn->screenbuffer.size_y; j++) 260 interbuffer[i + j*conn->screenbuffer.size_x] = *get_field_at(&(conn->screenbuffer),i, j); 266 interbuffer[i + j * conn->screenbuffer.size_x] 267 = *get_field_at(&(conn->screenbuffer), 268 i, j); 261 269 /* This call can preempt, but we are already at the end */ 262 rc = async_req_2(fb_info.phone, FB_DRAW_TEXT_DATA, 0, 0, NULL, NULL); 270 rc = async_req_2(fb_info.phone, FB_DRAW_TEXT_DATA, 0, 0, NULL, 271 NULL); 263 272 }; 264 273 … … 270 279 for (j = 0; j < conn->screenbuffer.size_y; j++) 271 280 for (i = 0; i < conn->screenbuffer.size_x; i++) { 272 field = get_field_at(&(conn->screenbuffer),i, j); 281 field = get_field_at(&(conn->screenbuffer), i, 282 j); 273 283 if (!style_same(*style, field->style)) 274 284 set_style(&field->style); 275 285 style = &field->style; 276 if ((field->character == ' ') && (style_same(field->style, conn->screenbuffer.style))) 286 if ((field->character == ' ') && 287 (style_same(field->style, 288 conn->screenbuffer.style))) 277 289 continue; 278 290 … … 281 293 } 282 294 283 curs_goto(conn->screenbuffer.position_y, conn->screenbuffer.position_x); 295 curs_goto(conn->screenbuffer.position_y, 296 conn->screenbuffer.position_x); 284 297 curs_visibility(conn->screenbuffer.is_cursor_visible); 285 298 … … 311 324 break; 312 325 case KBD_MS_MOVE: 313 gcons_mouse_move(IPC_GET_ARG1(call), IPC_GET_ARG2(call)); 326 gcons_mouse_move(IPC_GET_ARG1(call), 327 IPC_GET_ARG2(call)); 314 328 retval = 0; 315 329 break; … … 322 336 323 337 conn = &connections[active_console]; 324 // if ((c >= KBD_KEY_F1) && (c < KBD_KEY_F1 + CONSOLE_COUNT)) { 338 /* 339 * if ((c >= KBD_KEY_F1) && (c < KBD_KEY_F1 + 340 * CONSOLE_COUNT)) { 341 */ 325 342 if ((c >= 0x101) && (c < 0x101 + CONSOLE_COUNT)) { 326 343 if (c == 0x112) … … 334 351 if (conn->keyrequest_counter > 0) { 335 352 conn->keyrequest_counter--; 336 ipc_answer_fast(fifo_pop(conn->keyrequests), 0, c, 0); 353 ipc_answer_fast(fifo_pop(conn->keyrequests), 0, 354 c, 0); 337 355 break; 338 356 } … … 386 404 while (conn->keyrequest_counter > 0) { 387 405 conn->keyrequest_counter--; 388 ipc_answer_fast(fifo_pop(conn->keyrequests), ENOENT, 0, 0); 406 ipc_answer_fast(fifo_pop(conn->keyrequests), 407 ENOENT, 0, 0); 389 408 break; 390 409 } … … 405 424 break; 406 425 case CONSOLE_GOTO: 407 408 screenbuffer_goto(&conn->screenbuffer,IPC_GET_ARG2(call), IPC_GET_ARG1(call));426 screenbuffer_goto(&conn->screenbuffer, 427 IPC_GET_ARG2(call), IPC_GET_ARG1(call)); 409 428 if (consnum == active_console) 410 curs_goto(IPC_GET_ARG1(call),IPC_GET_ARG2(call)); 411 412 break; 413 429 curs_goto(IPC_GET_ARG1(call), 430 IPC_GET_ARG2(call)); 431 break; 414 432 case CONSOLE_GETSIZE: 415 433 arg1 = fb_info.rows; … … 418 436 case CONSOLE_FLUSH: 419 437 if (consnum == active_console) 420 async_req_2(fb_info.phone, FB_FLUSH, 0, 0, NULL, NULL); 438 async_req_2(fb_info.phone, FB_FLUSH, 0, 0, 439 NULL, NULL); 421 440 break; 422 441 case CONSOLE_SET_STYLE: 423 424 442 arg1 = IPC_GET_ARG1(call); 425 443 arg2 = IPC_GET_ARG2(call); … … 427 445 if (consnum == active_console) 428 446 set_style_col(arg1, arg2); 429 430 447 break; 431 448 case CONSOLE_CURSOR_VISIBILITY: … … 438 455 if (keybuffer_empty(&conn->keybuffer)) { 439 456 /* buffer is empty -> store request */ 440 if (conn->keyrequest_counter < MAX_KEYREQUESTS_BUFFERED) { 457 if (conn->keyrequest_counter < 458 MAX_KEYREQUESTS_BUFFERED) { 441 459 fifo_push(conn->keyrequests, callid); 442 460 conn->keyrequest_counter++; 443 461 } else { 444 /* no key available and too many requests => fail */ 462 /* 463 * No key available and too many 464 * requests => fail. 465 */ 445 466 ipc_answer_fast(callid, ELIMIT, 0, 0); 446 467 } 447 468 continue; 448 }; 449 keybuffer_pop(&conn->keybuffer, (int *)&arg1); 450 469 } 470 keybuffer_pop(&conn->keybuffer, (int *) &arg1); 451 471 break; 452 472 } … … 465 485 /* Connect to keyboard driver */ 466 486 467 while ((kbd_phone = ipc_connect_me_to(PHONE_NS, SERVICE_KEYBOARD, 0)) < 0) { 487 while ((kbd_phone = ipc_connect_me_to(PHONE_NS, SERVICE_KEYBOARD, 0)) 488 < 0) { 468 489 usleep(10000); 469 }; 470 471 if (ipc_connect_to_me(kbd_phone, SERVICE_CONSOLE, 0, &phonehash) != 0) { 490 } 491 492 if (ipc_connect_to_me(kbd_phone, SERVICE_CONSOLE, 0, &phonehash) != 0) 493 { 472 494 return -1; 473 } ;495 } 474 496 async_new_connection(phonehash, 0, NULL, keyboard_events); 475 497 476 498 /* Connect to framebuffer driver */ 477 499 478 while ((fb_info.phone = ipc_connect_me_to(PHONE_NS, SERVICE_VIDEO, 0)) < 0) { 500 while ((fb_info.phone = ipc_connect_me_to(PHONE_NS, SERVICE_VIDEO, 0)) 501 < 0) { 479 502 usleep(10000); 480 503 } … … 490 513 async_msg_2(fb_info.phone, FB_VIEWPORT_DB, (sysarg_t)-1, 1); 491 514 492 async_req_2(fb_info.phone, FB_GET_CSIZE, 0, 0, &(fb_info.rows), &(fb_info.cols)); 515 async_req_2(fb_info.phone, FB_GET_CSIZE, 0, 0, &(fb_info.rows), 516 &(fb_info.cols)); 493 517 set_style_col(DEFAULT_FOREGROUND, DEFAULT_BACKGROUND); 494 518 clrscr(); … … 499 523 keybuffer_init(&(connections[i].keybuffer)); 500 524 501 connections[i].keyrequests.head = connections[i].keyrequests.tail = 0; 525 connections[i].keyrequests.head = 526 connections[i].keyrequests.tail = 0; 502 527 connections[i].keyrequests.items = MAX_KEYREQUESTS_BUFFERED; 503 528 connections[i].keyrequest_counter = 0; 504 529 505 if (screenbuffer_init(&(connections[i].screenbuffer), fb_info.cols, fb_info.rows ) == NULL) { 530 if (screenbuffer_init(&(connections[i].screenbuffer), 531 fb_info.cols, fb_info.rows) == NULL) { 506 532 /*FIXME: handle error */ 507 533 return -1; … … 510 536 connections[KERNEL_CONSOLE].used = 1; 511 537 512 if ((interbuffer = mmap(NULL, sizeof(keyfield_t) * fb_info.cols * fb_info.rows , PROTO_READ|PROTO_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, 0 ,0 )) != NULL) { 513 if (async_req_3(fb_info.phone, IPC_M_AS_AREA_SEND, (ipcarg_t)interbuffer, 0, AS_AREA_READ, NULL, NULL, NULL) != 0) { 514 munmap(interbuffer, sizeof(keyfield_t) * fb_info.cols * fb_info.rows); 538 if ((interbuffer = mmap(NULL, sizeof(keyfield_t) * fb_info.cols * 539 fb_info.rows, PROTO_READ | PROTO_WRITE, MAP_ANONYMOUS | 540 MAP_PRIVATE, 0, 0)) != NULL) { 541 if (async_req_3(fb_info.phone, IPC_M_AS_AREA_SEND, (ipcarg_t) 542 interbuffer, 0, AS_AREA_READ, NULL, NULL, NULL) != 0) { 543 munmap(interbuffer, sizeof(keyfield_t) * fb_info.cols 544 * fb_info.rows); 515 545 interbuffer = NULL; 516 546 } … … 523 553 if (ipc_connect_to_me(PHONE_NS, SERVICE_CONSOLE, 0, &phonehash) != 0) { 524 554 return -1; 525 } ;555 } 526 556 527 557 async_manager(); -
uspace/console/gcons.c
rdff0a94 r00bb6965 75 75 76 76 /** List of pixmaps identifying these icons */ 77 static int ic_pixmaps[CONS_LAST] = {-1, -1,-1,-1,-1,-1};77 static int ic_pixmaps[CONS_LAST] = {-1, -1, -1, -1, -1, -1}; 78 78 static int animation = -1; 79 79 … … 120 120 vp_switch(cstatus_vp[consnum]); 121 121 if (ic_pixmaps[state] != -1) 122 async_msg_2(fbphone, FB_VP_DRAW_PIXMAP, cstatus_vp[consnum], ic_pixmaps[state]); 123 124 if (state != CONS_DISCONNECTED && state != CONS_KERNEL && state != CONS_DISCONNECTED_SEL) { 125 snprintf(data, 5, "%d", consnum+1); 126 for (i=0;data[i];i++) 127 tran_putch(data[i], 1, 2+i); 122 async_msg_2(fbphone, FB_VP_DRAW_PIXMAP, cstatus_vp[consnum], 123 ic_pixmaps[state]); 124 125 if (state != CONS_DISCONNECTED && state != CONS_KERNEL && state != 126 CONS_DISCONNECTED_SEL) { 127 snprintf(data, 5, "%d", consnum + 1); 128 for (i=0; data[i]; i++) 129 tran_putch(data[i], 1, 2 + i); 128 130 } 129 131 } … … 138 140 139 141 if (active_console == KERNEL_CONSOLE) { 140 for (i =0; i < CONSOLE_COUNT; i++)142 for (i = 0; i < CONSOLE_COUNT; i++) 141 143 redraw_state(i); 142 144 if (animation != -1) … … 167 169 return; 168 170 169 if (consnum == active_console || console_state[consnum] == CONS_HAS_DATA) 171 if (consnum == active_console || console_state[consnum] == 172 CONS_HAS_DATA) 170 173 return; 171 174 … … 258 261 static int gcons_find_conbut(int x, int y) 259 262 { 260 int status_start = STATUS_START + (xres -800) / 2;;261 262 if (y < STATUS_TOP || y >= STATUS_TOP +STATUS_HEIGHT)263 int status_start = STATUS_START + (xres - 800) / 2;; 264 265 if (y < STATUS_TOP || y >= STATUS_TOP + STATUS_HEIGHT) 263 266 return -1; 264 267 … … 266 269 return -1; 267 270 268 if (x >= status_start + (STATUS_WIDTH +STATUS_SPACE)*CONSOLE_COUNT)271 if (x >= status_start + (STATUS_WIDTH + STATUS_SPACE) * CONSOLE_COUNT) 269 272 return -1; 270 273 if (((x - status_start) % (STATUS_WIDTH+STATUS_SPACE)) < STATUS_SPACE) 271 274 return -1; 272 275 273 return (x -status_start) / (STATUS_WIDTH+STATUS_SPACE);276 return (x - status_start) / (STATUS_WIDTH+STATUS_SPACE); 274 277 } 275 278 … … 315 318 316 319 /* Create area */ 317 shm = mmap(NULL, size, PROTO_READ | PROTO_WRITE, MAP_SHARED | MAP_ANONYMOUS, 0, 0); 320 shm = mmap(NULL, size, PROTO_READ | PROTO_WRITE, MAP_SHARED | 321 MAP_ANONYMOUS, 0, 0); 318 322 if (shm == MAP_FAILED) 319 323 return; … … 321 325 memcpy(shm, logo, size); 322 326 /* Send area */ 323 rc = async_req_2(fbphone, FB_PREPARE_SHM, (ipcarg_t)shm, 0, NULL, NULL); 327 rc = async_req_2(fbphone, FB_PREPARE_SHM, (ipcarg_t) shm, 0, NULL, 328 NULL); 324 329 if (rc) 325 330 goto exit; 326 rc = async_req_3(fbphone, IPC_M_AS_AREA_SEND, (ipcarg_t)shm, 0, PROTO_READ, NULL, NULL, NULL); 331 rc = async_req_3(fbphone, IPC_M_AS_AREA_SEND, (ipcarg_t) shm, 0, 332 PROTO_READ, NULL, NULL, NULL); 327 333 if (rc) 328 334 goto drop; … … 352 358 set_style(MAIN_COLOR, MAIN_COLOR); 353 359 clear(); 354 draw_pixmap(_binary_helenos_ppm_start, (size_t)&_binary_helenos_ppm_size, xres-66, 2); 355 draw_pixmap(_binary_nameic_ppm_start, (size_t)&_binary_nameic_ppm_size, 5, 17); 356 357 for (i=0;i < CONSOLE_COUNT; i++) 360 draw_pixmap(_binary_helenos_ppm_start, (size_t) 361 &_binary_helenos_ppm_size, xres - 66, 2); 362 draw_pixmap(_binary_nameic_ppm_start, (size_t) 363 &_binary_nameic_ppm_size, 5, 17); 364 365 for (i=0;i < CONSOLE_COUNT; i++) 358 366 redraw_state(i); 359 367 vp_switch(console_vp); … … 373 381 374 382 /* Create area */ 375 shm = mmap(NULL, size, PROTO_READ | PROTO_WRITE, MAP_SHARED | MAP_ANONYMOUS, 0, 0); 383 shm = mmap(NULL, size, PROTO_READ | PROTO_WRITE, MAP_SHARED | 384 MAP_ANONYMOUS, 0, 0); 376 385 if (shm == MAP_FAILED) 377 386 return -1; … … 379 388 memcpy(shm, data, size); 380 389 /* Send area */ 381 rc = async_req_2(fbphone, FB_PREPARE_SHM, (ipcarg_t)shm, 0, NULL, NULL); 390 rc = async_req_2(fbphone, FB_PREPARE_SHM, (ipcarg_t) shm, 0, NULL, 391 NULL); 382 392 if (rc) 383 393 goto exit; 384 rc = async_req_3(fbphone, IPC_M_AS_AREA_SEND, (ipcarg_t)shm, 0, PROTO_READ, NULL, NULL, NULL); 394 rc = async_req_3(fbphone, IPC_M_AS_AREA_SEND, (ipcarg_t) shm, 0, 395 PROTO_READ, NULL, NULL, NULL); 385 396 if (rc) 386 397 goto drop; … … 409 420 extern char _binary_anim_4_ppm_start[0]; 410 421 extern int _binary_anim_4_ppm_size; 422 411 423 static void make_anim(void) 412 424 { … … 414 426 int pm; 415 427 416 an = async_req(fbphone, FB_ANIM_CREATE, cstatus_vp[KERNEL_CONSOLE], NULL); 428 an = async_req(fbphone, FB_ANIM_CREATE, cstatus_vp[KERNEL_CONSOLE], 429 NULL); 417 430 if (an < 0) 418 431 return; 419 432 420 pm = make_pixmap(_binary_anim_1_ppm_start, (int)&_binary_anim_1_ppm_size); 433 pm = make_pixmap(_binary_anim_1_ppm_start, (int) 434 &_binary_anim_1_ppm_size); 421 435 async_msg_2(fbphone, FB_ANIM_ADDPIXMAP, an, pm); 422 436 423 pm = make_pixmap(_binary_anim_2_ppm_start, (int)&_binary_anim_2_ppm_size); 437 pm = make_pixmap(_binary_anim_2_ppm_start, (int) 438 &_binary_anim_2_ppm_size); 424 439 async_msg_2(fbphone, FB_ANIM_ADDPIXMAP, an, pm); 425 440 426 pm = make_pixmap(_binary_anim_3_ppm_start, (int)&_binary_anim_3_ppm_size); 441 pm = make_pixmap(_binary_anim_3_ppm_start, (int) 442 &_binary_anim_3_ppm_size); 427 443 async_msg_2(fbphone, FB_ANIM_ADDPIXMAP, an, pm); 428 444 429 pm = make_pixmap(_binary_anim_4_ppm_start, (int)&_binary_anim_4_ppm_size); 445 pm = make_pixmap(_binary_anim_4_ppm_start, (int) 446 &_binary_anim_4_ppm_size); 430 447 async_msg_2(fbphone, FB_ANIM_ADDPIXMAP, an, pm); 431 448 … … 443 460 extern char _binary_cons_kernel_ppm_start[0]; 444 461 extern int _binary_cons_kernel_ppm_size; 462 445 463 /** Initialize nice graphical console environment */ 446 464 void gcons_init(int phone) … … 461 479 /* create console viewport */ 462 480 /* Align width & height to character size */ 463 console_vp = vp_create(CONSOLE_MARGIN, CONSOLE_TOP, 464 ALIGN_DOWN(xres-2*CONSOLE_MARGIN, 8),465 ALIGN_DOWN(yres-(CONSOLE_TOP+CONSOLE_MARGIN),16));481 console_vp = vp_create(CONSOLE_MARGIN, CONSOLE_TOP, ALIGN_DOWN(xres - 482 2 * CONSOLE_MARGIN, 8), ALIGN_DOWN(yres - (CONSOLE_TOP + 483 CONSOLE_MARGIN), 16)); 466 484 if (console_vp < 0) 467 485 return; 468 486 469 487 /* Create status buttons */ 470 status_start += (xres-800) / 2; 471 for (i=0; i < CONSOLE_COUNT; i++) { 472 cstatus_vp[i] = vp_create(status_start+CONSOLE_MARGIN+i*(STATUS_WIDTH+STATUS_SPACE), 473 STATUS_TOP, STATUS_WIDTH, STATUS_HEIGHT); 488 status_start += (xres - 800) / 2; 489 for (i = 0; i < CONSOLE_COUNT; i++) { 490 cstatus_vp[i] = vp_create(status_start + CONSOLE_MARGIN + i * 491 (STATUS_WIDTH + STATUS_SPACE), STATUS_TOP, 492 STATUS_WIDTH, STATUS_HEIGHT); 474 493 if (cstatus_vp[i] < 0) 475 494 return; … … 479 498 480 499 /* Initialize icons */ 481 ic_pixmaps[CONS_SELECTED] = make_pixmap(_binary_cons_selected_ppm_start, 482 (int)&_binary_cons_selected_ppm_size); 483 ic_pixmaps[CONS_IDLE] = make_pixmap(_binary_cons_idle_ppm_start, 484 (int)&_binary_cons_idle_ppm_size); 485 ic_pixmaps[CONS_HAS_DATA] = make_pixmap(_binary_cons_has_data_ppm_start, 486 (int)&_binary_cons_has_data_ppm_size); 487 ic_pixmaps[CONS_DISCONNECTED] = make_pixmap(_binary_cons_idle_ppm_start, 488 (int)&_binary_cons_idle_ppm_size); 500 ic_pixmaps[CONS_SELECTED] = 501 make_pixmap(_binary_cons_selected_ppm_start, (int) 502 &_binary_cons_selected_ppm_size); 503 ic_pixmaps[CONS_IDLE] = make_pixmap(_binary_cons_idle_ppm_start, (int) 504 &_binary_cons_idle_ppm_size); 505 ic_pixmaps[CONS_HAS_DATA] = 506 make_pixmap(_binary_cons_has_data_ppm_start, (int) 507 &_binary_cons_has_data_ppm_size); 508 ic_pixmaps[CONS_DISCONNECTED] = 509 make_pixmap(_binary_cons_idle_ppm_start, (int) 510 &_binary_cons_idle_ppm_size); 489 511 ic_pixmaps[CONS_KERNEL] = make_pixmap(_binary_cons_kernel_ppm_start, 490 (int)&_binary_cons_kernel_ppm_size);512 (int) &_binary_cons_kernel_ppm_size); 491 513 ic_pixmaps[CONS_DISCONNECTED_SEL] = ic_pixmaps[CONS_SELECTED]; 492 514 -
uspace/fb/ega.c
rdff0a94 r00bb6965 83 83 int i; 84 84 85 for (i =0; i < scr_width*scr_height; i++) {86 scr_addr[i *2] = ' ';87 scr_addr[i *2+1] = style;85 for (i = 0; i < scr_width*scr_height; i++) { 86 scr_addr[i * 2] = ' '; 87 scr_addr[i * 2 + 1] = style; 88 88 } 89 89 } … … 93 93 int ega_cursor; 94 94 95 ega_cursor =col+scr_width*row;95 ega_cursor = col + scr_width * row; 96 96 97 outb(EGA_IO_ADDRESS 98 outb(EGA_IO_ADDRESS + 1, (ega_cursor >> 8) & 0xff);99 outb(EGA_IO_ADDRESS 97 outb(EGA_IO_ADDRESS, 0xe); 98 outb(EGA_IO_ADDRESS + 1, (ega_cursor >> 8) & 0xff); 99 outb(EGA_IO_ADDRESS, 0xf); 100 100 outb(EGA_IO_ADDRESS + 1, ega_cursor & 0xff); 101 101 } … … 105 105 uint8_t stat; 106 106 107 outb(EGA_IO_ADDRESS 107 outb(EGA_IO_ADDRESS, 0xa); 108 108 stat=inb(EGA_IO_ADDRESS + 1); 109 outb(EGA_IO_ADDRESS 110 outb(EGA_IO_ADDRESS + 1 ,stat | (1<<5));109 outb(EGA_IO_ADDRESS, 0xa); 110 outb(EGA_IO_ADDRESS + 1, stat | (1 << 5)); 111 111 } 112 112 … … 115 115 uint8_t stat; 116 116 117 outb(EGA_IO_ADDRESS 117 outb(EGA_IO_ADDRESS, 0xa); 118 118 stat=inb(EGA_IO_ADDRESS + 1); 119 outb(EGA_IO_ADDRESS 120 outb(EGA_IO_ADDRESS + 1 ,stat & (~(1<<5)));119 outb(EGA_IO_ADDRESS, 0xa); 120 outb(EGA_IO_ADDRESS + 1, stat & (~(1 << 5))); 121 121 } 122 122 … … 125 125 int i; 126 126 if (rows > 0) { 127 memcpy (scr_addr,((char *)scr_addr) + rows * scr_width * 2,127 memcpy(scr_addr, ((char *) scr_addr) + rows * scr_width * 2, 128 128 scr_width * scr_height * 2 - rows * scr_width * 2); 129 for (i = 0; i < rows * scr_width ; i++)130 (((short *) scr_addr) + scr_width * scr_height - rows *131 scr_width) 129 for (i = 0; i < rows * scr_width; i++) 130 (((short *) scr_addr) + scr_width * scr_height - rows * 131 scr_width)[i] = ((style << 8) + ' '); 132 132 } else if (rows < 0) { 133 memcpy 133 memcpy(((char *)scr_addr) - rows * scr_width * 2, scr_addr, 134 134 scr_width * scr_height * 2 + rows * scr_width * 2); 135 for (i = 0; i < - rows * scr_width; i++)136 ((short *)scr_addr) 135 for (i = 0; i < -rows * scr_width; i++) 136 ((short *)scr_addr)[i] = ((style << 8 ) + ' '); 137 137 } 138 138 } … … 140 140 static void printchar(char c, unsigned int row, unsigned int col) 141 141 { 142 scr_addr[(row *scr_width + col)*2] = c;143 scr_addr[(row *scr_width + col)*2+1] = style;142 scr_addr[(row * scr_width + col) * 2] = c; 143 scr_addr[(row * scr_width + col) * 2 + 1] = style; 144 144 145 cursor_goto(row, col+1);145 cursor_goto(row, col + 1); 146 146 } 147 147 … … 150 150 int i; 151 151 152 for (i=0; i < scr_width*scr_height; i++) { 153 scr_addr[i*2] = data[i].character; 154 scr_addr[i*2+1] = EGA_STYLE(data[i].style.fg_color, data[i].style.bg_color); 152 for (i = 0; i < scr_width * scr_height; i++) { 153 scr_addr[i * 2] = data[i].character; 154 scr_addr[i * 2 + 1] = EGA_STYLE(data[i].style.fg_color, 155 data[i].style.bg_color); 155 156 } 156 157 } … … 160 161 int i; 161 162 162 for (i=0; ( i < MAX_SAVED_SCREENS) && (saved_screens[i].data); i++)163 for (i=0; (i < MAX_SAVED_SCREENS) && (saved_screens[i].data); i++) 163 164 ; 164 165 if (i == MAX_SAVED_SCREENS) 165 166 return EINVAL; 166 if (!(saved_screens[i].data =malloc( 2 * scr_width*scr_height)))167 if (!(saved_screens[i].data = malloc(2 * scr_width * scr_height))) 167 168 return ENOMEM; 168 169 memcpy(saved_screens[i].data, scr_addr, 2 * scr_width * scr_height); … … 174 175 { 175 176 if (saved_screens[i].data) 176 memcpy(scr_addr, saved_screens[i].data, 2 * scr_width * scr_height); 177 else return EINVAL; 177 memcpy(scr_addr, saved_screens[i].data, 2 * scr_width * 178 scr_height); 179 else 180 return EINVAL; 178 181 return i; 179 182 } … … 204 207 case IPC_M_PHONE_HUNGUP: 205 208 client_connected = 0; 206 ipc_answer_fast(callid, 0,0,0);209 ipc_answer_fast(callid, 0, 0, 0); 207 210 return; /* Exit thread */ 208 211 case IPC_M_AS_AREA_SEND: 209 212 /* We accept one area for data interchange */ 210 213 intersize = IPC_GET_ARG2(call); 211 if (intersize >= scr_width*scr_height*sizeof(*interbuf)) { 212 receive_comm_area(callid,&call,(void *)&interbuf); 214 if (intersize >= scr_width * scr_height * 215 sizeof(*interbuf)) { 216 receive_comm_area(callid, &call, (void *) 217 &interbuf); 213 218 continue; 214 219 } … … 238 243 break; 239 244 } 240 printchar(c, row,col);245 printchar(c, row, col); 241 246 retval = 0; 242 247 break; … … 248 253 break; 249 254 } 250 cursor_goto(row, col);255 cursor_goto(row, col); 251 256 retval = 0; 252 257 break; 253 258 case FB_SCROLL: 254 259 i = IPC_GET_ARG1(call); 255 if (i > scr_height || i < (- (int)scr_height)) {260 if (i > scr_height || i < -((int) scr_height)) { 256 261 retval = EINVAL; 257 262 break; … … 296 301 retval = ENOENT; 297 302 } 298 ipc_answer_fast(callid, retval,0,0);303 ipc_answer_fast(callid, retval, 0, 0); 299 304 } 300 305 } … … 305 310 size_t sz; 306 311 307 308 ega_ph_addr=(void *)sysinfo_value("fb.address.physical"); 309 scr_width=sysinfo_value("fb.width"); 310 scr_height=sysinfo_value("fb.height"); 312 ega_ph_addr = (void *) sysinfo_value("fb.address.physical"); 313 scr_width = sysinfo_value("fb.width"); 314 scr_height = sysinfo_value("fb.height"); 311 315 iospace_enable(task_get_id(), (void *) EGA_IO_ADDRESS, 2); 312 316 -
uspace/fb/fb.c
rdff0a94 r00bb6965 162 162 static void bgr_byte0888(void *dst, int rgb) 163 163 { 164 *((uint32_t *) dst) = BLUE(rgb, 8) << 16 | GREEN(rgb, 8) << 8 | RED(rgb, 8); 164 *((uint32_t *) dst) = BLUE(rgb, 8) << 16 | GREEN(rgb, 8) << 8 | 165 RED(rgb, 8); 165 166 } 166 167 … … 168 169 { 169 170 int color = *(uint32_t *)(src); 170 return ((color & 0xff) << 16) | (((color >> 8) & 0xff) << 8) | ((color >> 16) & 0xff); 171 return ((color & 0xff) << 16) | (((color >> 8) & 0xff) << 8) | ((color 172 >> 16) & 0xff); 171 173 } 172 174 … … 199 201 { 200 202 /* 5-bit, 5-bits, 5-bits */ 201 *((uint16_t *)(dst)) = RED(rgb, 5) << 10 | GREEN(rgb, 5) << 5 | BLUE(rgb, 5); 203 *((uint16_t *)(dst)) = RED(rgb, 5) << 10 | GREEN(rgb, 5) << 5 | 204 BLUE(rgb, 5); 202 205 } 203 206 … … 206 209 { 207 210 int color = *(uint16_t *)(src); 208 return (((color >> 10) & 0x1f) << (16 + 3)) | (((color >> 5) & 0x1f) << (8 + 3)) | ((color & 0x1f) << 3); 211 return (((color >> 10) & 0x1f) << (16 + 3)) | (((color >> 5) & 0x1f) << 212 (8 + 3)) | ((color & 0x1f) << 3); 209 213 } 210 214 … … 213 217 { 214 218 /* 5-bit, 6-bits, 5-bits */ 215 *((uint16_t *)(dst)) = RED(rgb, 5) << 11 | GREEN(rgb, 6) << 5 | BLUE(rgb, 5); 219 *((uint16_t *)(dst)) = RED(rgb, 5) << 11 | GREEN(rgb, 6) << 5 | 220 BLUE(rgb, 5); 216 221 } 217 222 … … 220 225 { 221 226 int color = *(uint16_t *)(src); 222 return (((color >> 11) & 0x1f) << (16 + 3)) | (((color >> 5) & 0x3f) << (8 + 2)) | ((color & 0x1f) << 3); 227 return (((color >> 11) & 0x1f) << (16 + 3)) | (((color >> 5) & 0x3f) << 228 (8 + 2)) | ((color & 0x1f) << 3); 223 229 } 224 230 … … 233 239 { 234 240 int color = *(uint8_t *)src; 235 return (((color >> 5) & 0x7) << (16 + 5)) | (((color >> 3) & 0x3) << (8 + 6)) | ((color & 0x7) << 5); 241 return (((color >> 5) & 0x7) << (16 + 5)) | (((color >> 3) & 0x3) << 242 (8 + 6)) | ((color & 0x7) << 5); 236 243 } 237 244 … … 243 250 * @param color RGB color 244 251 */ 245 static void putpixel(viewport_t *vport, unsigned int x, unsigned int y, int color) 252 static void putpixel(viewport_t *vport, unsigned int x, unsigned int y, int 253 color) 246 254 { 247 255 int dx = vport->x + x; … … 267 275 } 268 276 269 static inline void putpixel_mem(char *mem, unsigned int x, unsigned int y, 270 intcolor)277 static inline void putpixel_mem(char *mem, unsigned int x, unsigned int y, int 278 color) 271 279 { 272 280 (*screen.rgb2scr)(&mem[POINTPOS(x,y)], COLOR(color)); … … 274 282 275 283 static void draw_rectangle(viewport_t *vport, unsigned int sx, unsigned int sy, 276 unsigned int width, unsigned int height, 277 int color) 284 unsigned int width, unsigned int height, int color) 278 285 { 279 286 unsigned int x, y; … … 297 304 } 298 305 if (vport->dbdata) { 299 for (y =sy;y < sy+height; y++) {306 for (y = sy; y < sy + height; y++) { 300 307 int rline = (y + vport->dboffset) % vport->height; 301 int rpos = (rline * vport->width + sx) * screen.pixelbytes; 302 memcpy(&vport->dbdata[rpos], tmpline, screen.pixelbytes * width); 308 int rpos = (rline * vport->width + sx) * 309 screen.pixelbytes; 310 memcpy(&vport->dbdata[rpos], tmpline, 311 screen.pixelbytes * width); 303 312 } 304 313 } … … 309 318 static void clear_port(viewport_t *vport) 310 319 { 311 draw_rectangle(vport, 0, 0, vport->width, vport->height, vport->style.bg_color); 320 draw_rectangle(vport, 0, 0, vport->width, vport->height, 321 vport->style.bg_color); 312 322 } 313 323 … … 322 332 323 333 if (lines > 0) { 324 for (y =vport->y; y < vport->y+vport->height - lines; y++)334 for (y = vport->y; y < vport->y+vport->height - lines; y++) 325 335 memcpy(&screen.fbaddress[POINTPOS(vport->x,y)], 326 336 &screen.fbaddress[POINTPOS(vport->x,y + lines)], 327 337 screen.pixelbytes * vport->width); 328 draw_rectangle(vport, 0, vport->height - lines, 329 vport->width,lines, vport->style.bg_color);338 draw_rectangle(vport, 0, vport->height - lines, vport->width, 339 lines, vport->style.bg_color); 330 340 } else if (lines < 0) { 331 341 lines = -lines; 332 for (y=vport->y + vport->height-1; y >= vport->y + lines; y--) 342 for (y = vport->y + vport->height-1; y >= vport->y + lines; 343 y--) 333 344 memcpy(&screen.fbaddress[POINTPOS(vport->x,y)], 334 345 &screen.fbaddress[POINTPOS(vport->x,y - lines)], 335 346 screen.pixelbytes * vport->width); 336 draw_rectangle(vport, 0, 0, vport->width, lines, vport->style.bg_color); 347 draw_rectangle(vport, 0, 0, vport->width, lines, 348 vport->style.bg_color); 337 349 } 338 350 } … … 408 420 * @param transparent If false, print background color 409 421 */ 410 static void draw_glyph(viewport_t *vport,uint8_t glyph, unsigned int sx, unsigned int sy,411 422 static void draw_glyph(viewport_t *vport,uint8_t glyph, unsigned int sx, 423 unsigned int sy, style_t style, int transparent) 412 424 { 413 425 int i; … … 419 431 for (i = 0; i < 8; i++) { 420 432 if (glline & (1 << (7 - i))) 421 putpixel(vport, sx + i, sy + y, style.fg_color); 433 putpixel(vport, sx + i, sy + y, 434 style.fg_color); 422 435 else if (!transparent) 423 putpixel(vport, sx + i, sy + y, style.bg_color); 436 putpixel(vport, sx + i, sy + y, 437 style.bg_color); 424 438 } 425 439 } … … 434 448 for (x = 0; x < COL_WIDTH; x++) 435 449 for (y = 0; y < FONT_SCANLINES; y++) 436 invert_pixel(vport, col * COL_WIDTH + x, row * FONT_SCANLINES + y); 450 invert_pixel(vport, col * COL_WIDTH + x, row * 451 FONT_SCANLINES + y); 437 452 } 438 453 … … 446 461 */ 447 462 static int viewport_create(unsigned int x, unsigned int y,unsigned int width, 448 463 unsigned int height) 449 464 { 450 465 int i; … … 488 503 * 489 504 */ 490 static bool screen_init(void *addr, unsigned int xres, unsigned int yres, unsigned int scan, unsigned int visual, bool invert_colors) 505 static bool screen_init(void *addr, unsigned int xres, unsigned int yres, 506 unsigned int scan, unsigned int visual, bool invert_colors) 491 507 { 492 508 switch (visual) { … … 578 594 * @param transparent If false, print background color with character 579 595 */ 580 static void draw_char(viewport_t *vport, char c, unsigned int row, unsigned int col,581 596 static void draw_char(viewport_t *vport, char c, unsigned int row, unsigned int 597 col, style_t style, int transparent) 582 598 { 583 599 /* Optimize - do not hide cursor if we are going to overwrite it */ … … 586 602 invert_char(vport, vport->cur_row, vport->cur_col); 587 603 588 draw_glyph(vport, c, col * COL_WIDTH, row * FONT_SCANLINES, style, transparent); 604 draw_glyph(vport, c, col * COL_WIDTH, row * FONT_SCANLINES, style, 605 transparent); 589 606 590 607 vport->cur_col = col; … … 592 609 593 610 vport->cur_col++; 594 if (vport->cur_col >= vport->cols) {611 if (vport->cur_col >= vport->cols) { 595 612 vport->cur_col = 0; 596 613 vport->cur_row++; … … 612 629 613 630 clear_port(vport); 614 for (i=0; i < vport->cols * vport->rows; i++) { 615 if (data[i].character == ' ' && style_same(data[i].style,vport->style)) 631 for (i = 0; i < vport->cols * vport->rows; i++) { 632 if (data[i].character == ' ' && style_same(data[i].style, 633 vport->style)) 616 634 continue; 617 635 col = i % vport->cols; 618 636 row = i / vport->cols; 619 draw_glyph(vport, data[i].character, col * COL_WIDTH, row * FONT_SCANLINES, 620 data[i].style, style_same(data[i].style,vport->style)); 637 draw_glyph(vport, data[i].character, col * COL_WIDTH, row * 638 FONT_SCANLINES, data[i].style, 639 style_same(data[i].style,vport->style)); 621 640 } 622 641 cursor_print(vport); … … 671 690 * Protocol for drawing pixmaps: 672 691 * - FB_PREPARE_SHM(client shm identification) 673 * - IPC_M_ SEND_AS_AREA692 * - IPC_M_AS_AREA_SEND 674 693 * - FB_DRAW_PPM(startx,starty) 675 694 * - FB_DROP_SHM 676 695 * 677 696 * Protocol for text drawing 678 * - IPC_M_ SEND_AS_AREA697 * - IPC_M_AS_AREA_SEND 679 698 * - FB_DRAW_TEXT_DATA 680 699 * … … 755 774 } 756 775 757 ppm_draw(shm, shm_size, IPC_GET_ARG1(*call), IPC_GET_ARG2(*call), 758 vport->width - x, vport->height - y, (putpixel_cb_t)putpixel, vport); 776 ppm_draw(shm, shm_size, IPC_GET_ARG1(*call), 777 IPC_GET_ARG2(*call), vport->width - x, vport->height - 778 y, (putpixel_cb_t)putpixel, vport); 759 779 break; 760 780 case FB_DRAW_TEXT_DATA: … … 763 783 break; 764 784 } 765 if (intersize < vport->cols*vport->rows*sizeof(*interbuffer)) { 785 if (intersize < vport->cols * vport->rows * 786 sizeof(*interbuffer)) { 766 787 retval = EINVAL; 767 788 break; … … 793 814 rowsize = width * screen.pixelbytes; 794 815 795 for (y=0;y < height; y++) { 796 tmp = (vport->y + y) * screen.scanline + vport->x * screen.pixelbytes; 797 memcpy(pmap->data + rowsize*y, screen.fbaddress + tmp, rowsize); 816 for (y = 0; y < height; y++) { 817 tmp = (vport->y + y) * screen.scanline + vport->x * 818 screen.pixelbytes; 819 memcpy(pmap->data + rowsize * y, screen.fbaddress + tmp, 820 rowsize); 798 821 } 799 822 } … … 852 875 853 876 for (y=0; y < realheight; y++) { 854 tmp = (vport->y + y) * screen.scanline + vport->x * screen.pixelbytes; 855 memcpy(screen.fbaddress + tmp, pmap->data + y * srcrowsize, realrowsize); 877 tmp = (vport->y + y) * screen.scanline + vport->x * 878 screen.pixelbytes; 879 memcpy(screen.fbaddress + tmp, pmap->data + y * srcrowsize, 880 realrowsize); 856 881 } 857 882 return 0; … … 865 890 866 891 /* Limit redrawing */ 867 counts = (counts +1) % 8;892 counts = (counts + 1) % 8; 868 893 if (counts) 869 894 return; 870 895 871 896 for (i=0; i < MAX_ANIMATIONS; i++) { 872 if (!animations[i].animlen || !animations[i].initialized || !animations[i].enabled) 897 if (!animations[i].animlen || !animations[i].initialized || 898 !animations[i].enabled) 873 899 continue; 874 draw_pixmap(animations[i].vp, animations[i].pixmaps[animations[i].pos]); 875 animations[i].pos = (animations[i].pos+1) % animations[i].animlen; 900 draw_pixmap(animations[i].vp, 901 animations[i].pixmaps[animations[i].pos]); 902 animations[i].pos = (animations[i].pos + 1) % 903 animations[i].animlen; 876 904 } 877 905 } … … 895 923 /* Save image under the cursor */ 896 924 if (pointer_vport == -1) { 897 pointer_vport = viewport_create(pointer_x, pointer_y, pointer_width, pointer_height); 925 pointer_vport = viewport_create(pointer_x, pointer_y, 926 pointer_width, pointer_height); 898 927 if (pointer_vport < 0) 899 928 return; … … 906 935 pointer_pixmap = save_vp_to_pixmap(&viewports[pointer_vport]); 907 936 else 908 copy_vp_to_pixmap(&viewports[pointer_vport], &pixmaps[pointer_pixmap]); 937 copy_vp_to_pixmap(&viewports[pointer_vport], 938 &pixmaps[pointer_pixmap]); 909 939 910 940 /* Draw cursor */ 911 for (i=0; i < pointer_height; i++) 912 for (j=0;j < pointer_width; j++) { 913 bytepos = i*((pointer_width-1)/8+1) + j/8; 914 visibility = pointer_mask_bits[bytepos] & (1 << (j % 8)); 941 for (i = 0; i < pointer_height; i++) 942 for (j = 0; j < pointer_width; j++) { 943 bytepos = i * ((pointer_width - 1) / 8 + 1) + j / 8; 944 visibility = pointer_mask_bits[bytepos] & (1 << (j % 945 8)); 915 946 if (visibility) { 916 color = pointer_bits[bytepos] & (1 << (j % 8)) ? 0 : 0xffffff; 917 if (pointer_x+j < screen.xres && pointer_y+i < screen.yres) 918 putpixel(&viewports[0], pointer_x+j, pointer_y+i, color); 947 color = pointer_bits[bytepos] & (1 << (j % 8)) 948 ? 0 : 0xffffff; 949 if (pointer_x + j < screen.xres && pointer_y + 950 i < screen.yres) 951 putpixel(&viewports[0], pointer_x + j, 952 pointer_y+i, color); 919 953 } 920 954 } … … 951 985 if (nvp == -1) 952 986 nvp = vp; 953 if (nvp >= MAX_VIEWPORTS || nvp < 0 || !viewports[nvp].initialized) { 954 retval = EINVAL; 955 break; 956 } 957 for (i=0; i < MAX_ANIMATIONS; i++) { 958 if (! animations[i].initialized) 987 if (nvp >= MAX_VIEWPORTS || nvp < 0 || 988 !viewports[nvp].initialized) { 989 retval = EINVAL; 990 break; 991 } 992 for (i = 0; i < MAX_ANIMATIONS; i++) { 993 if (!animations[i].initialized) 959 994 break; 960 995 } … … 980 1015 case FB_ANIM_ADDPIXMAP: 981 1016 i = IPC_GET_ARG1(*call); 982 if (i >= MAX_ANIMATIONS || i < 0 || !animations[i].initialized) { 1017 if (i >= MAX_ANIMATIONS || i < 0 || 1018 !animations[i].initialized) { 983 1019 retval = EINVAL; 984 1020 break; … … 989 1025 } 990 1026 newval = IPC_GET_ARG2(*call); 991 if (newval < 0 || newval > MAX_PIXMAPS || !pixmaps[newval].data) { 1027 if (newval < 0 || newval > MAX_PIXMAPS || 1028 !pixmaps[newval].data) { 992 1029 retval = EINVAL; 993 1030 break; … … 1004 1041 if (nvp == -1) 1005 1042 nvp = vp; 1006 if (nvp >= MAX_VIEWPORTS || nvp < 0 || !viewports[nvp].initialized) { 1043 if (nvp >= MAX_VIEWPORTS || nvp < 0 || 1044 !viewports[nvp].initialized) { 1007 1045 retval = EINVAL; 1008 1046 break; … … 1043 1081 if (nvp == -1) 1044 1082 nvp = vp; 1045 if (nvp < 0 || nvp >= MAX_VIEWPORTS || !viewports[nvp].initialized) { 1083 if (nvp < 0 || nvp >= MAX_VIEWPORTS || 1084 !viewports[nvp].initialized) { 1046 1085 retval = EINVAL; 1047 1086 break; … … 1054 1093 if (nvp == -1) 1055 1094 nvp = vp; 1056 if (nvp < 0 || nvp >= MAX_VIEWPORTS || !viewports[nvp].initialized) 1095 if (nvp < 0 || nvp >= MAX_VIEWPORTS || 1096 !viewports[nvp].initialized) 1057 1097 retval = EINVAL; 1058 1098 else … … 1126 1166 client_connected = 0; 1127 1167 /* cleanup other viewports */ 1128 for (i =1; i < MAX_VIEWPORTS; i++)1168 for (i = 1; i < MAX_VIEWPORTS; i++) 1129 1169 vport->initialized = 0; 1130 1170 return; /* Exit thread */ … … 1141 1181 ipc_answer_fast(callid,0,0,0); 1142 1182 1143 draw_char(vport, c, row, col, vport->style, IPC_GET_METHOD(call) == FB_TRANS_PUTCHAR); 1183 draw_char(vport, c, row, col, vport->style, 1184 IPC_GET_METHOD(call) == FB_TRANS_PUTCHAR); 1144 1185 continue; /* msg already answered */ 1145 1186 case FB_CLEAR: … … 1196 1237 viewports[i].dboffset = 0; 1197 1238 if (IPC_GET_ARG2(call) == 1 && !viewports[i].dbdata) 1198 viewports[i].dbdata = malloc(screen.pixelbytes*viewports[i].width * viewports[i].height); 1199 else if (IPC_GET_ARG2(call) == 0 && viewports[i].dbdata) { 1239 viewports[i].dbdata = malloc(screen.pixelbytes 1240 * viewports[i].width * 1241 viewports[i].height); 1242 else if (IPC_GET_ARG2(call) == 0 && 1243 viewports[i].dbdata) { 1200 1244 free(viewports[i].dbdata); 1201 1245 viewports[i].dbdata = NULL; … … 1221 1265 case FB_VIEWPORT_CREATE: 1222 1266 retval = viewport_create(IPC_GET_ARG1(call) >> 16, 1223 IPC_GET_ARG1(call) & 0xffff, 1224 IPC_GET_ARG2(call) >> 16, 1225 IPC_GET_ARG2(call) & 0xffff); 1267 IPC_GET_ARG1(call) & 0xffff, IPC_GET_ARG2(call) 1268 >> 16, IPC_GET_ARG2(call) & 0xffff); 1226 1269 break; 1227 1270 case FB_VIEWPORT_DELETE: … … 1284 1327 1285 1328 asz = fb_scanline * fb_height; 1286 fb_addr = as_get_mappable_page(asz, (int) sysinfo_value("fb.address.color")); 1287 1288 physmem_map(fb_ph_addr, fb_addr, ALIGN_UP(asz, PAGE_SIZE) >> PAGE_WIDTH, 1289 AS_AREA_READ | AS_AREA_WRITE); 1329 fb_addr = as_get_mappable_page(asz, (int) 1330 sysinfo_value("fb.address.color")); 1331 1332 physmem_map(fb_ph_addr, fb_addr, ALIGN_UP(asz, PAGE_SIZE) >> 1333 PAGE_WIDTH, AS_AREA_READ | AS_AREA_WRITE); 1290 1334 1291 1335 if (screen_init(fb_addr, fb_width, fb_height, fb_scanline, fb_visual, -
uspace/fb/main.c
rdff0a94 r00bb6965 46 46 dest = as_get_mappable_page(IPC_GET_ARG2(*call), 47 47 PAGE_COLOR(IPC_GET_ARG1(*call))); 48 if (ipc_answer_fast(callid, 0, (sysarg_t) dest, 0) == 0) {48 if (ipc_answer_fast(callid, 0, (sysarg_t) dest, 0) == 0) { 49 49 if (*area) 50 50 as_area_destroy(*area); … … 65 65 #endif 66 66 #ifdef EGA_ENABLED 67 if (! 67 if (!initialized && sysinfo_value("fb.kind") == 2) { 68 68 if (ega_init() == 0) 69 69 initialized = 1; -
uspace/libc/arch/sparc64/include/psthread.h
rdff0a94 r00bb6965 46 46 #endif 47 47 48 #define context_set(c, _pc, stack, size, ptls) \ 49 (c)->pc = ((uintptr_t) _pc) - 8; \ 50 (c)->sp = ((uintptr_t) stack) + ALIGN_UP((size), STACK_ALIGNMENT) - (STACK_BIAS + SP_DELTA); \ 51 (c)->fp = -STACK_BIAS; \ 48 #define context_set(c, _pc, stack, size, ptls) \ 49 (c)->pc = ((uintptr_t) _pc) - 8; \ 50 (c)->sp = ((uintptr_t) stack) + ALIGN_UP((size), \ 51 STACK_ALIGNMENT) - (STACK_BIAS + SP_DELTA); \ 52 (c)->fp = -STACK_BIAS; \ 52 53 (c)->tp = ptls 53 54 54 55 /* 55 * Only saveregisters that must be preserved across56 * Save only registers that must be preserved across 56 57 * function calls. 57 58 */
Note:
See TracChangeset
for help on using the changeset viewer.