- Timestamp:
- Nov 20, 2020, 12:23:31 AM (4 years ago)
- Location:
- trunk/libs/libalmosmkh
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/libs/libalmosmkh/almosmkh.c
r661 r678 118 118 } 119 119 120 /////////////////////////////////////// 121 intget_uint32( unsigned int * buffer )120 //////////////////////////////////////// 121 void get_uint32( unsigned int * buffer ) 122 122 { 123 123 unsigned int i; … … 201 201 } 202 202 203 // final evaluation203 // write value to buffer 204 204 if ( overflow == 0 ) 205 205 { 206 206 // return value 207 207 *buffer = value; 208 return 0;209 208 } 210 209 else … … 221 220 // return 0 value 222 221 *buffer = 0; 223 return -1;224 222 } 225 223 } // end get_uint32() 226 224 227 ////////////////////////////// 225 /////////////////////////////// 228 226 int get_string( char * string, 229 227 int maxlen ) 230 228 { 231 229 int c; 232 int done = 0;233 230 int length = 0; 234 231 235 while( done == 0)232 while( 1 ) 236 233 { 237 234 // check buffer overflow … … 256 253 length++; // update length 257 254 } 258 else if (c == 0x0A) // LF character marks end of string 259 { 260 putchar( c ); 261 done = 1; 255 else if( c == 0x0A ) // LF character marks end of string 256 { 257 putchar( c ); // echo 258 string[length] = 0; // register NUL character in string 259 return length + 1; 262 260 } 263 261 else if ( (c == 0x7F) || // DEL character … … 270 268 } 271 269 } 272 else if ( c == 0 ) // EOF character 273 { 274 // cancel all echo characters 275 while( length ) 270 } 271 272 // set NUL character in string and return success 273 274 } // end get_string() 275 276 277 ///////////////////////////// 278 int fget_string( int fdid, 279 char * string, 280 int maxlen ) 281 { 282 int ret; 283 char c; 284 int length = 0; 285 286 while( 1 ) 287 { 288 // check buffer overflow 289 if( length >= maxlen-1 ) length = 0; 290 291 // read one character from stream 292 ret = read( fdid , &c , 1 ); 293 294 if( ret == 1 ) 295 { 296 if ( (c >= 0x20) && (c < 0x7F) ) // printable character 276 297 { 277 printf("\b \b"); // cancel one echo character278 length--;298 string[length] = (char)c; // register character in string 299 length++; // update length 279 300 } 280 return -1; // return failure 281 } 282 } 283 284 // set NUL character in string and return success 285 string[length] = 0; 286 return length + 1; 287 288 } // end get_string() 301 else if ( c == 0 ) // end of string 302 { 303 string[length] = (char)c; // register character in string 304 length++; // update length 305 break; // exit loop 306 } 307 // discard all characters not printable or NUL 308 } 309 else 310 { 311 printf("\n[%s] cannot read stream %d\n", __FUNCTION__, fdid ); 312 length = 0; 313 break; 314 } 315 } 316 } // end fget_string() 317 289 318 290 319 ////////////////////////////////////////////////////////////////////////////////////// … … 418 447 } 419 448 449 //////////////////////////////////////// 450 int display_fd_array( unsigned int pid ) 451 { 452 return hal_user_syscall( SYS_DISPLAY, 453 DISPLAY_FD, 454 (reg_t)pid, 0, 0 ); 455 } 456 457 /////////////////////////////////////////// 458 int display_fbf_windows( unsigned int pid ) 459 { 460 return hal_user_syscall( SYS_DISPLAY, 461 DISPLAY_WINDOWS, 462 (reg_t)pid, 0, 0 ); 463 } 464 420 465 /////////////////////////////// 421 466 int trace( unsigned int active, … … 433 478 { 434 479 char cmd; 435 int error;436 480 437 481 while( 1 ) … … 450 494 451 495 printf("b / pid = "); 452 error =get_uint32( &pid );496 get_uint32( &pid ); 453 497 454 498 printf(" / trdid = "); 455 error |=get_uint32( &trdid );456 457 if( error == 0 )display_busylocks( pid , trdid );499 get_uint32( &trdid ); 500 501 display_busylocks( pid , trdid ); 458 502 } 459 503 // return to calling process … … 470 514 471 515 printf(" / min = "); 472 error =get_uint32( &min );516 get_uint32( &min ); 473 517 474 518 printf(" / slots = "); 475 error |=get_uint32( &slots );476 477 if( error == 0 )display_fat( min , slots );519 get_uint32( &slots ); 520 521 display_fat( min , slots ); 478 522 } 479 523 // list all supported commands … … 503 547 504 548 printf("m / path = "); 505 error =get_string( path , 128 );549 get_string( path , 128 ); 506 550 507 551 printf(" / page = "); 508 error |=get_uint32( &page );552 get_uint32( &page ); 509 553 510 554 printf(" / nbytes = "); 511 error |=get_uint32( &nbytes );512 513 if( error == 0 )display_mapper( path , page , nbytes );555 get_uint32( &nbytes ); 556 557 display_mapper( path , page , nbytes ); 514 558 } 515 559 // display all processes in cluster(cxy) … … 519 563 520 564 printf("p / cxy = "); 521 error =get_uint32( &cxy );522 523 if( error == 0 )display_cluster_processes( cxy , 0 );565 get_uint32( &cxy ); 566 567 display_cluster_processes( cxy , 0 ); 524 568 } 525 569 // display DQDT … … 536 580 537 581 printf("s / cxy = "); 538 error =get_uint32( &cxy );582 get_uint32( &cxy ); 539 583 540 584 printf(" / lid = "); 541 error |=get_uint32( &lid );542 543 if( error == 0 )display_sched( cxy , lid );585 get_uint32( &lid ); 586 587 display_sched( cxy , lid ); 544 588 } 545 589 // display all processes attached to TXT(txt_id) … … 549 593 550 594 printf("t / txt_id = "); 551 error =get_uint32( &txt_id );552 553 if( error == 0 )display_txt_processes( txt_id );595 get_uint32( &txt_id ); 596 597 display_txt_processes( txt_id ); 554 598 } 555 599 // display vmm state for process(cxy, pid) … … 561 605 562 606 printf("v / cxy = "); 563 error =get_uint32( &cxy );607 get_uint32( &cxy ); 564 608 565 609 printf(" / pid = "); 566 error |=get_uint32( &pid );610 get_uint32( &pid ); 567 611 568 612 printf(" / mapping = "); 569 error |=get_uint32( &map );570 571 if( error == 0 )display_vmm( cxy , pid , map );613 get_uint32( &map ); 614 615 display_vmm( cxy , pid , map ); 572 616 } 573 617 // force the calling process to exit … … 585 629 586 630 printf("y / active = "); 587 error =get_uint32( &active );631 get_uint32( &active ); 588 632 589 633 printf(" / cxy = "); 590 error |=get_uint32( &cxy );634 get_uint32( &cxy ); 591 635 592 636 printf(" / lid = "); 593 error |=get_uint32( &lid );594 595 if( error == 0 )trace( active , cxy , lid );637 get_uint32( &lid ); 638 639 trace( active , cxy , lid ); 596 640 } 597 641 } // en while … … 1366 1410 if( child_sts[i][j] < 0 ) // failure => report error 1367 1411 { 1368 printf("\n[ERROR] in %s select core forchild[%d,%d] of <build> thread[%d,%d]\n",1412 printf("\n[ERROR] in %s : child[%d,%d] of <build> thread[%d,%d]\n", 1369 1413 __FUNCTION__ , i , j , cid , level ); 1370 1414 … … 1558 1602 ///////////////////////////////////////////////////////////////////////////////////////// 1559 1603 1560 //////////////////////////////// /////////1561 int fbf_get_config( unsignedint * width,1562 unsignedint * height,1563 unsignedint * type )1604 //////////////////////////////// 1605 int fbf_get_config( int * width, 1606 int * height, 1607 int * type ) 1564 1608 { 1565 1609 return hal_user_syscall( SYS_FBF, … … 1570 1614 } 1571 1615 1572 //////////////////////////////////// 1573 int fbf_read( void * buffer, 1574 unsigned int length, 1575 unsigned int offset ) 1576 { 1616 //////////////////////////// 1617 int fbf_read( void * buffer, 1618 int length, 1619 int offset ) 1620 { 1621 printf("[WARNING] the <%s> syscall is deprecated\n", __FUNCTION__ ); 1622 1577 1623 return hal_user_syscall( SYS_FBF, 1578 1624 (reg_t)FBF_DIRECT_READ, … … 1582 1628 } 1583 1629 1584 ///////////////////////////////////// 1585 int fbf_write( void * buffer, 1586 unsigned int length, 1587 unsigned int offset ) 1588 { 1630 ///////////////////////////// 1631 int fbf_write( void * buffer, 1632 int length, 1633 int offset ) 1634 { 1635 printf("[WARNING] the <%s> syscall is deprecated\n", __FUNCTION__ ); 1636 1589 1637 return hal_user_syscall( SYS_FBF, 1590 1638 (reg_t)FBF_DIRECT_WRITE, … … 1594 1642 } 1595 1643 1596 ////////////////////////////////////// ////////1597 int fbf_create_window( unsigned intl_zero,1598 unsigned intp_zero,1599 unsigned intnlines,1600 unsigned intnpixels,1601 void 1644 ////////////////////////////////////// 1645 int fbf_create_window( int l_zero, 1646 int p_zero, 1647 int nlines, 1648 int npixels, 1649 void ** buffer ) 1602 1650 { 1603 1651 return hal_user_syscall( SYS_FBF, … … 1608 1656 } 1609 1657 1610 ////////////////////////////////////////// 1611 int fbf_delete_window( unsigned int wid ) 1658 /////////////////////////////// 1659 int fbf_active_window( int wid, 1660 int active ) 1661 { 1662 return hal_user_syscall( SYS_FBF, 1663 (reg_t)FBF_ACTIVE_WINDOW, 1664 (reg_t)wid, 1665 (reg_t)active, 0 ); 1666 } 1667 1668 ///////////////////////////////// 1669 int fbf_delete_window( int wid ) 1612 1670 { 1613 1671 return hal_user_syscall( SYS_FBF, … … 1616 1674 } 1617 1675 1618 ////////////////////////////// /////////1619 int fbf_move_window( unsignedint wid,1620 unsignedint l_zero,1621 unsignedint p_zero )1676 ////////////////////////////// 1677 int fbf_move_window( int wid, 1678 int l_zero, 1679 int p_zero ) 1622 1680 { 1623 1681 return hal_user_syscall( SYS_FBF, … … 1628 1686 } 1629 1687 1630 //////////////////////////////// /////////1631 int fbf_resize_window( unsignedint wid,1632 unsignedint width,1633 unsignedint height )1688 //////////////////////////////// 1689 int fbf_resize_window( int wid, 1690 int width, 1691 int height ) 1634 1692 { 1635 1693 return hal_user_syscall( SYS_FBF, … … 1640 1698 } 1641 1699 1642 ///////////////////////////////// /////////1643 int fbf_refresh_window( unsignedint wid,1644 unsignedint line_first,1645 unsignedint line_last )1700 ///////////////////////////////// 1701 int fbf_refresh_window( int wid, 1702 int line_first, 1703 int line_last ) 1646 1704 { 1647 1705 return hal_user_syscall( SYS_FBF, … … 1652 1710 } 1653 1711 1712 ///////////////////////////////// 1713 int fbf_front_window( int wid ) 1714 { 1715 return hal_user_syscall( SYS_FBF, 1716 (reg_t)FBF_FRONT_WINDOW, 1717 (reg_t)wid, 0, 0 ); 1718 } 1654 1719 1655 1720 // Local Variables: -
trunk/libs/libalmosmkh/almosmkh.h
r661 r678 141 141 142 142 /*************************************************************************************** 143 * This syscall returns an 32 bits integer from the standard "stdin" stream.143 * This syscall returns an 32 bits integer from the TXT terminal. 144 144 * The value is copied in buffer pointed by the <buf> argument 145 145 * Both decimal numbers and hexadecimal numbers (prefixed by 0x) are supported. … … 148 148 * @ returns 0 if success / returns -1 if failure. 149 149 **************************************************************************************/ 150 int get_uint32( unsigned int * buffer ); 150 void get_uint32( unsigned int * buffer ); 151 151 152 152 153 /*************************************************************************************** 153 * Th is syscall returns a character string from the standard "stdin" stream.154 * The string iscopied in buffer pointed by the <string> argument.155 * If the number of characters exceed the buffer length, all character are canceled156 * in both the buffer & the echoed string, and a new string capture start.154 * These syscalls return a NUL terminated character string from the TXT terminal. 155 * The characters are copied in buffer pointed by the <string> argument. 156 * If the number of characters exceeds <maxlen>, all read characters are discarded, 157 * and removed from the <string> buffer, and a new string capture start. 157 158 * - Only printable characters c such as (0x20 <= c) and (c < 0x7f) are echoed 158 159 * and copied in the target buffer. … … 162 163 * used to correct both the buffer content and the echoed string. 163 164 *************************************************************************************** 164 * @ string : pointer on the string buffer.165 * @ string : pointer on the user space string buffer. 165 166 * @ maxlen : max number of bytes in string buffer, including the terminating NUL. 166 * @ returns string length (including NUL) if success / returns -1if failure.167 * @ returns string length (including NUL) if success / returns 0 if failure. 167 168 **************************************************************************************/ 168 169 int get_string( char * string, … … 327 328 unsigned int fdid ); 328 329 329 /***************************************************************************************** 330 /*************************************************************************************** 331 * This debug syscall displays on the kernel terminal the set of open file descriptors 332 * registered in the fd_array of a process identified by the <pid> argument. 333 * It can be called by any thread running in any cluster. 334 *************************************************************************************** 335 * @ pid : target process identifier. 336 setoreturn 0 if success / return -1 if undefined pid. 337 **************************************************************************************/ 338 int display_fd_array( unsigned int pid ); 339 340 /*************************************************************************************** 341 * This debug syscall displays on the kernel terminal the set of registered windows 342 * in the FBF device. It can be called by any thread running in any cluster. 343 *************************************************************************************** 344 * @ pid : target process identifier / all processes when pid == 0 345 * return 0 if success / return -1 if undefined pid. 346 **************************************************************************************/ 347 int display_fbf_windows( unsigned int pid ); 348 349 /*************************************************************************************** 330 350 * This debug syscall is used to activate / desactivate the context switches trace 331 351 * for a core identified by the <cxy> and <lid> arguments. 332 352 * It can be called by any thread running in any cluster. 333 **************************************************************************************** *353 **************************************************************************************** 334 354 * @ active : activate trace if non zero / desactivate if zero. 335 355 * @ cxy : cluster identifier. 336 356 * @ lid : core local index. 337 357 * @ returns O if success / returns -1 if illegal arguments. 338 *************************************************************************************** */358 ***************************************************************************************/ 339 359 int trace( unsigned int active, 340 360 unsigned int cxy, 341 361 unsigned int lid ); 342 362 343 /*************************************************************************************** *363 /*************************************************************************************** 344 364 * This syscall implements an user-level interactive debugger that can be 345 365 * introduced in any user application to display various kernel distributed structures. 346 ************************************************************************************** */366 **************************************************************************************/ 347 367 void idbg( void ); 348 368 349 369 350 /****************** Non standard (ALMOS-MKH specific) malloc operations ************** */351 352 //////////////////////////////////////////////////////////////////////////////////////// /370 /****************** Non standard (ALMOS-MKH specific) malloc operations **************/ 371 372 //////////////////////////////////////////////////////////////////////////////////////// 353 373 // General principles: 354 374 // - In user space the HEAP zone spread between the ELF zone and the STACK zone, … … 367 387 // is allocated on demand in each cluster. 368 388 // We should introduce the possibility to dynamically allocate 369 // several vsegs in each cluster , using several mmapwhen required.370 //////////////////////////////////////////////////////////////////////////////////////// /389 // several vsegs in each cluster (using several mmap) when required. 390 //////////////////////////////////////////////////////////////////////////////////////// 371 391 // Free blocks organisation in each cluster : 372 392 // - All free blocks have a size that is a power of 2, larger or equal … … 379 399 // - The pointers on the first free block for each size are stored in an 380 400 // array of pointers free[32] in the storage(x,y) descriptor. 381 //////////////////////////////////////////////////////////////////////////////////////// /401 //////////////////////////////////////////////////////////////////////////////////////// 382 402 // Allocation policy: 383 403 // - The block size required by the user can be any value, but the allocated … … 400 420 // If the vseg is aligned (the vseg base is a multiple of the 401 421 // vseg size), all allocated blocks are aligned on the actual_size. 402 //////////////////////////////////////////////////////////////////////////////////////// /422 //////////////////////////////////////////////////////////////////////////////////////// 403 423 // Free policy: 404 424 // - Each allocated block is registered in an alloc[] array of unsigned char. … … 598 618 599 619 /***************************************************************************************** 600 * This functionreturns in the <width>, <height> and <type> arguments620 * This syscall returns in the <width>, <height> and <type> arguments 601 621 * the implementation specific frame buffer features. 602 622 ***************************************************************************************** … … 606 626 * @ returns 0 if success / returns -1 if not found. 607 627 ****************************************************************************************/ 608 int fbf_get_config( unsignedint * width,609 unsignedint * height,610 unsignedint * type );611 612 /***************************************************************************************** 613 * This functioncreates a new window defined by the <l_zero>, <p_zero>, <nlines>,614 * and <npixels> arguments for the calling process, and register the process PID, the615 * allocated <wid>, and the window size and coordinates in the FBF device descriptor.616 * It returns in the output argument <buffer> the pointer on the buffer associated to617 * the window, mapped in user space.628 int fbf_get_config( int * width, 629 int * height, 630 int * type ); 631 632 /***************************************************************************************** 633 * This syscall creates a new window defined by the <l_zero>, <p_zero>, <nlines>, 634 * and <npixels> arguments for the calling process, and register the client process PID, 635 * the allocated <wid>, and the window size and coordinates in the list of windows rooted 636 * in the FBF device descriptor. It returns in the output argument <buffer> the pointer 637 * on the buffer associated to the window, mapped in user space. 618 638 * Warning : Both pixel [p_zero,l_zero] and pixel [p_zero+npixels-1,l_zero+nlines-1] 619 639 * must be contained in the frame buffer. … … 623 643 * @ nlines : [in] number of lines in the window. 624 644 * @ npixels : [in] number of pixels per line in the window. 625 * @ buffer : [out] pointer on 626 * @ returns <wid> if success / returns -1 if illegal size or coordinates. 627 ****************************************************************************************/ 628 int fbf_create_window( unsigned int l_zero, 629 unsigned int p_zero, 630 unsigned int nlines, 631 unsigned int npixels, 632 void ** buffer ); 633 634 /***************************************************************************************** 635 * This function deletes an existing window, identified by the <wid> argument. 645 * @ buffer : [out] pointer on buffer associated to window, mapped in user space. 646 * @ returns <kern_wid> if success / returns -1 if illegal size or coordinates. 647 ****************************************************************************************/ 648 int fbf_create_window( int l_zero, 649 int p_zero, 650 int nlines, 651 int npixels, 652 void ** buffer ); 653 654 /***************************************************************************************** 655 * This syscall activates/desactivates the window identified by the <wid> argument, 656 * according to the <active> argument. The calling process must be the window owner. 657 ***************************************************************************************** 658 * @ wid : window identifier. 659 * @ active : activate window if non zero / desactivate window if zero. 660 * @ returns 0 if success / returns -1 if illegal wid argument. 661 ****************************************************************************************/ 662 int fbf_active_window( int wid, 663 int active ); 664 665 /***************************************************************************************** 666 * This syscall deletes an existing window, identified by the <wid> argument. 636 667 * The calling process must be the window owner. 637 668 ***************************************************************************************** 638 669 * @ wid : window identifier. 639 * @ returns 0 if success / returns -1 if not found or process not owner.640 ****************************************************************************************/ 641 int fbf_delete_window( unsignedint wid );642 643 /***************************************************************************************** 644 * This functionrefreshes in FBF all lines of a window identified by the <wid> argument,670 * @ returns 0 if success / returns -1 if illegal wid argument. 671 ****************************************************************************************/ 672 int fbf_delete_window( int wid ); 673 674 /***************************************************************************************** 675 * This syscall refreshes in FBF all lines of a window identified by the <wid> argument, 645 676 * when the line index is in the interval [line_first,line_last[. 646 677 * It scans all registered windows to take into account the windows overlap. 678 * The calling process must be the window owner, and the line_fist / line_last indexes 679 * must be compatible with the window height. 647 680 ***************************************************************************************** 648 681 * @ wid : window identifier. 649 * @ line_first : first line index. 650 * @ line_last : last line index (excluded). 651 * @ returns 0 if success / returns -1 if illegal argument. 652 ****************************************************************************************/ 653 int fbf_refresh_window( unsigned int wid, 654 unsigned int line_first, 655 unsigned int line_last ); 656 657 /***************************************************************************************** 658 * This function changes the size of a window identified by the <wid> argument as defined 682 * @ line_first : first line index in window. 683 * @ line_last : last line index in window (excluded). 684 * @ returns 0 if success / returns -1 if illegal arguments. 685 ****************************************************************************************/ 686 int fbf_refresh_window( int wid, 687 int line_first, 688 int line_last ); 689 690 /***************************************************************************************** 691 * This syscall gives the highest priority to the window identified by the <wid> 692 * argument, and refresh the FBF to take into account the new windows overlap priorities. 693 * The calling process must be the window owner. 694 ***************************************************************************************** 695 * @ wid : window identifier. 696 * @ returns 0 if success / returns -1 if wid illegal argument. 697 ****************************************************************************************/ 698 int fbf_front_window( int wid ); 699 700 /***************************************************************************************** 701 * This syscall changes the size of a window identified by the <wid> argument as defined 659 702 * by the <width> and height> arguments. The calling process must be the window owner. 660 * WARNING : Both pixel [p_zero,l_zero] and pixel [p_zero+width-1,l_zero+height-1]661 * must becontained in the frame buffer.703 * Both pixel [p_zero,l_zero] and pixel [p_zero+width-1,l_zero+height-1] must be 704 * contained in the frame buffer. 662 705 ***************************************************************************************** 663 706 * @ wid : window identifier. … … 666 709 * @ returns 0 if success / returns -1 if illegal arguments. 667 710 ****************************************************************************************/ 668 int fbf_resize_window( unsignedint wid,669 unsignedint width,670 unsignedint height );671 672 /***************************************************************************************** 673 * This functionchanges the <l_zero> & <p_zero> coordinates of a window identified711 int fbf_resize_window( int wid, 712 int width, 713 int height ); 714 715 /***************************************************************************************** 716 * This syscall changes the <l_zero> & <p_zero> coordinates of a window identified 674 717 * by the <wid> argument. The calling process must be the window owner. 675 * WARNING :Both pixel [p_zero,l_zero] and pixel [p_zero+width-1,l_zero+height-1]718 * Both pixel [p_zero,l_zero] and pixel [p_zero+width-1,l_zero+height-1] 676 719 * must be contained in the frame buffer. 677 720 ***************************************************************************************** … … 681 724 * @ returns 0 if success / returns -1 if illegal arguments. 682 725 ****************************************************************************************/ 683 int fbf_move_window( unsigned int wid, 684 unsigned int l_zero, 685 unsigned int p_zero ); 726 int fbf_move_window( int wid, 727 int l_zero, 728 int p_zero ); 729 730 731 686 732 687 733 /***************************************************************************************** … … 695 741 * @ returns 0 if success / returns -1 if illegal arguments. 696 742 ****************************************************************************************/ 697 int fbf_write( void 698 unsigned intlength,699 unsigned intoffset );743 int fbf_write( void * buffer, 744 int length, 745 int offset ); 700 746 701 747 /***************************************************************************************** … … 709 755 * @ returns 0 if success / returns -1 if illegal arguments. 710 756 ****************************************************************************************/ 711 int fbf_read( void 712 unsigned intlength,713 unsigned intoffset );757 int fbf_read( void * buffer, 758 int length, 759 int offset ); 714 760 715 761
Note: See TracChangeset
for help on using the changeset viewer.