#include "arch/cc.h"#include "arch/sys_arch.h"Include dependency graph for sys.h:
This graph shows which files directly or indirectly include this file:
Go to the source code of this file.
|
|
Definition at line 47 of file sys.h. Referenced by rt_3c905cif_init(), rt_3com905cif_etharp_timer(), rt_rtl8139_ifetharp_timer(), rt_rtl8139if_init(), sys_timeout(), sys_untimeout(), and tcpip_thread(). |
|
|
|
|
||||||||||||
|
|
|
|
Definition at line 189 of file sys_arch.c. Referenced by pbuf_free(), pbuf_pool_alloc(), pbuf_pool_free(), pbuf_ref(), pbuf_ref_chain(), pbuf_refresh(), sys_free(), sys_malloc(), and sys_mbox_post().
00189 {
00190 rtl_restore_interrupts((rtl_irqstate_t) *state);
00191 }
|
|
|
Definition at line 703 of file sys_arch.c. References AND, free_all_resources(), NULL, sys_free(), and threads. Referenced by rt_3com905cif_low_level_input(), and rt_rtl8139if_low_level_input().
00704 {
00705 struct sys_thread *st;
00706
00707 for(st = threads; st != NULL; st = st->next) {
00708 if(AND(st->flags,0x81)== 0x80){ //i.e. It is a standalone thread finished
00709 sys_free(st->stack);
00710 }else if(AND(st->flags,0xff)==0x00){ //i.e A thread still working
00711 pthread_delete_np(st->pthread);
00712 //This line is necessary because the thread could be standalone.
00713 //If it is not, nothing happens
00714 sys_free(st->stack);
00715 }else if(AND(st->flags,0xff)==0x01){ //i.e A registered thread still working
00716 pthread_cancel(st->pthread);
00717 pthread_join(st->pthread,NULL);
00718 }
00719 }
00720
00721 free_all_resources();
00722
00723 return;
00724 }
|
Here is the call graph for this function:
|
||||||||||||||||
|
Referenced by netconn_delete(), and sys_mbox_fetch(). |
|
||||||||||||
|
Referenced by sys_arch_mbox_fetch(), sys_sem_wait(), and sys_sem_wait_timeout(). |
|
|
|
|
|
Definition at line 239 of file sys_arch.c. References mallocs, NULL, obtain_index_to_free(), rtl_free, sys_allow_interrupts(), and sys_stop_interrupts(). Referenced by sys_arch_close(), sys_current_thread(), sys_mbox_free(), sys_search_thread(), sys_sem_free(), sys_thread_new(), and thread_start().
00239 {
00240 int index;
00241 unsigned int state;
00242
00243 sys_stop_interrupts(&state);
00244
00245 if(ptr != NULL){
00246 index = obtain_index_to_free(ptr);
00247 if(index != -1){
00248 mallocs[index] = NULL;
00249 rtl_free(ptr);
00250 n_frees++;
00251 }else{
00252 rtl_printf("sys_free: no memory reserved for this pointer\n");
00253 }
00254 }
00255
00256 sys_allow_interrupts(&state);
00257 }
|
Here is the call graph for this function:
|
|
Definition at line 728 of file sys_arch.c. References mallocs, MAX_TIMERS, NULL, signal, sys_timeouts::signal, sys_timeouts::timer_event_spec, and vector_of_timers.
00729 {
00730 int i,retval;
00731
00732 for(i=0; i<=500; i++)
00733 mallocs[i] = NULL;
00734
00735 for(i=0; i<MAX_TIMERS; i++){
00736 vector_of_timers[i].signal = RTL_SIGRTMIN + signal++;
00737 vector_of_timers[i].timer_event_spec.sigev_notify = SIGEV_SIGNAL;
00738 vector_of_timers[i].timer_event_spec.sigev_signo = vector_of_timers[i].signal;
00739 vector_of_timers[i].timer_event_spec.sigev_value.sival_int = 13;
00740
00741 retval = timer_create(CLOCK_REALTIME, &(vector_of_timers[i].timer_event_spec), &(vector_of_timers[i].timer));
00742
00743 if (retval) {
00744 rtl_printf("timer_create(CLOCK_REALTIME) failed:\n");
00745 }
00746 }
00747 }
|
|
|
Definition at line 215 of file sys_arch.c. References malloc_index, mallocs, MAX_VECTOR_MALLOCS, n_mallocs, NULL, rtl_malloc, sys_allow_interrupts(), and sys_stop_interrupts(). Referenced by sys_mbox_new(), sys_sem_new_(), sys_thread_new(), and sys_thread_register().
00215 {
00216 void *tmp;
00217 int entry = malloc_index % MAX_VECTOR_MALLOCS;
00218 unsigned int state;
00219
00220 sys_stop_interrupts(&state);
00221
00222 while(mallocs[entry] != NULL)
00223 entry = ++malloc_index % MAX_VECTOR_MALLOCS;
00224
00225 tmp = mallocs[entry] = rtl_malloc(size);
00226
00227 if(tmp != NULL){
00228 n_mallocs++;
00229 malloc_index++;
00230 }else
00231 rtl_printf("\n\n\n\nERROR: Not enough memory!\n\n\n\n");
00232
00233 sys_allow_interrupts(&state);
00234
00235 return tmp;
00236 }
|
Here is the call graph for this function:
|
||||||||||||
|
Definition at line 764 of file sys_arch.c. References sys_arch_mbox_fetch(), and sys_mbox_t. Referenced by netconn_accept(), netconn_bind(), netconn_close(), netconn_connect(), netconn_delete(), netconn_disconnect(), netconn_listen(), netconn_recv(), netconn_send(), netconn_write(), and tcpip_thread().
00765 {
00766 sys_arch_mbox_fetch(mbox, msg, 0);
00767 }
|
Here is the call graph for this function:
|
|
Referenced by netconn_delete(), and netconn_recv(). |
|
|
Definition at line 478 of file sys_arch.c. References NULL, sys_malloc(), and sys_sem_new_(). Referenced by do_listen(), netconn_bind(), netconn_connect(), netconn_listen(), netconn_new(), and tcpip_init().
00479 {
00480 struct sys_mbox *mbox;
00481
00482 mbox = sys_malloc(sizeof(struct sys_mbox));
00483
00484 if(mbox != NULL){
00485
00486 mbox->first = mbox->last = 0;
00487 mbox->mail = sys_sem_new_(0);
00488 mbox->mutex = sys_sem_new_(1);
00489
00490 return mbox;
00491 }else{
00492 rtl_printf("ERROR: Not enough memory to create mbox\n");
00493 return NULL;
00494 }
00495 }
|
Here is the call graph for this function:
|
||||||||||||
|
Referenced by do_bind(), do_close(), do_connect(), do_delconn(), do_disconnect(), do_listen(), do_recv(), do_send(), do_write(), tcpip_apimsg(), tcpip_callback(), and tcpip_input(). |
|
|
Referenced by lwip_select(), netconn_delete(), netconn_write(), and sys_mbox_free(). |
|
|
Definition at line 588 of file sys_arch.c. References sys_sem_new_(), and u8_t. Referenced by alloc_socket(), event_callback(), lwip_close(), lwip_select(), mem_init(), memp_init(), netconn_write(), and pbuf_init().
00589 {
00590 return sys_sem_new_(count);
00591 }
|
Here is the call graph for this function:
|
|
|
Definition at line 751 of file sys_arch.c. References sys_arch_sem_wait(), and sys_sem_t. Referenced by alloc_socket(), event_callback(), lwip_accept(), lwip_close(), lwip_select(), mem_free(), mem_malloc(), mem_realloc(), memp_freep(), memp_mallocp(), netconn_close(), netconn_write(), pbuf_refresh(), sys_mbox_free(), and sys_mbox_post().
00752 {
00753 sys_arch_sem_wait(sem, 0);
00754 }
|
Here is the call graph for this function:
|
||||||||||||
|
Definition at line 757 of file sys_arch.c. References sys_arch_sem_wait(), sys_sem_t, and u32_t. Referenced by lwip_select().
00758 {
00759 return sys_arch_sem_wait(sem, timeout);
00760 }
|
Here is the call graph for this function:
|
|
Definition at line 184 of file sys_arch.c. Referenced by pbuf_free(), pbuf_pool_alloc(), pbuf_pool_free(), pbuf_ref(), pbuf_ref_chain(), pbuf_refresh(), sys_free(), sys_malloc(), and sys_mbox_post().
00184 {
00185 rtl_no_interrupts((rtl_irqstate_t) *state);
00186 }
|
|
|
Definition at line 360 of file sys_arch.c. References NULL, SET, and sys_search_thread(). Referenced by cleanup_module().
00361 {
00362 struct sys_thread *thread;
00363
00364 thread = sys_search_thread(pthread);
00365
00366 if(thread != NULL){
00367 if(thread->stack != NULL) //i.e. It is a standalone thread
00368 SET(thread->flags, 0x80);
00369 else SET(thread->flags, 0x81);
00370 pthread_cancel(pthread);
00371 pthread_join(pthread,NULL);
00372 return 0;
00373 }
00374
00375
00376 return -1;
00377 }
|
Here is the call graph for this function:
|
|
Definition at line 344 of file sys_arch.c. References NULL, SET, status, and sys_current_thread(). Referenced by dns_client(), serve_echo(), sock_udpclient(), tcp_client(), and udpclient().
00345 {
00346 struct sys_thread *thread;
00347 void *status = NULL;
00348
00349 thread = sys_current_thread();
00350
00351 if(thread->stack != NULL) //i.e. It is a standalone thread
00352 SET(thread->flags, 0x80);
00353 else SET(thread->flags, 0x81);
00354
00355 pthread_exit(status);
00356 return NULL;
00357 }
|
Here is the call graph for this function:
|
||||||||||||||||
|
Definition at line 406 of file sys_arch.c. References bcopy(), name, NULL, SET, sys_free(), sys_malloc(), thread_start(), and threads. Referenced by init_module(), rt_3com905cif_low_level_init(), rt_rtl8139if_low_level_init(), slipif_init(), tcpecho_thread(), and tcpip_init().
00408 {
00409 struct sys_thread *thread;
00410 struct thread_start_param *thread_param;
00411 pthread_attr_t attr;
00412
00413 thread = sys_malloc(sizeof(struct sys_thread));
00414
00415 if(thread != NULL){
00416
00417 thread->next = threads;
00418
00419 SET(thread->flags, 0x00);
00420
00421 thread->stack = (char *) sys_malloc(sizeof(char)*THREAD_STACK_SIZE);
00422
00423 thread->timeouts = NULL;
00424
00425 #ifdef THREAD_DEBUG
00426 thread->name = (char *) sys_malloc(20);
00427 bcopy(name, thread->name, name_len);
00428 #endif
00429
00430 if(thread->stack == NULL){
00431 sys_free(thread);
00432 rtl_printf("ERROR: Not enough memory to create new thread's stack\n");
00433 return NULL;
00434 }
00435
00436 threads = thread;
00437
00438 pthread_attr_init(&attr);
00439
00440
00441 /* Because it's a thread which is trying to create another thread, RTLinux
00442 only allows that by passing to the new thread it's stack */
00443 pthread_attr_setstackaddr(&attr, thread->stack);
00444 pthread_attr_setstacksize(&attr, THREAD_STACK_SIZE);
00445 pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
00446
00447 thread_param = sys_malloc(sizeof(struct thread_start_param));
00448
00449 if(thread_param == NULL){
00450 sys_free(thread->stack);
00451 sys_free(thread);
00452 rtl_printf("ERROR: Not enough memory to create thread start param\n");
00453 return NULL;
00454 }
00455
00456 thread_param->function = function;
00457 thread_param->arg = arg;
00458 thread_param->thread = thread;
00459
00460 if(pthread_create(&(thread->pthread),&attr, thread_start, thread_param)) {
00461 rtl_printf("\nsys_thread_new: pthread_create 0x%x 0x%x\n", pthread_self(),thread->pthread);
00462 rtl_printf("Kernel Panic\n");
00463 return NULL;
00464 }
00465
00466 if(period != 0)
00467 pthread_make_periodic_np(thread->pthread, gethrtime(), period);
00468
00469 return (void *) thread->pthread;
00470 }
00471
00472 rtl_printf("ERROR: Not enough memory to create thread\n");
00473 return NULL;
00474 }
|
Here is the call graph for this function:
|
|
Definition at line 380 of file sys_arch.c. References NULL, sys_thread::pthread, SET, sys_malloc(), and threads. Referenced by tcp_client().
00381 {
00382 struct sys_thread *thread;
00383
00384 thread = sys_malloc(sizeof(struct sys_thread));
00385
00386
00387 thread->next = threads;
00388 thread->pthread = (pthread_t) pthread;
00389 thread->stack = NULL;
00390 thread->timeouts = NULL;
00391
00392 SET(thread->flags, 0x01);
00393 threads = thread;
00394
00395 pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
00396 pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
00397
00398 }
|
Here is the call graph for this function:
|
||||||||||||||||
|
Definition at line 770 of file sys_arch.c. References NULL, sys_current_thread(), sys_timeout_handler, timer_index, u16_t, and vector_of_timers. Referenced by ip_reass(), ip_reass_timer(), rt_3c905cif_init(), rt_3com905cif_etharp_timer(), rt_rtl8139_ifetharp_timer(), rt_rtl8139if_init(), and tcpip_thread().
00771 {
00772 struct sys_thread *thread;
00773 int err, sec = 0, nsec = 0;
00774
00775 thread = sys_current_thread();
00776
00777 if(thread->timeouts == NULL){
00778 thread->timeouts = &vector_of_timers[timer_index++];
00779 }
00780
00781 thread->timeouts->sa.sa_handler = h;
00782 thread->timeouts->sa.sa_mask=0;
00783 thread->timeouts->sa.sa_flags=0;
00784 thread->timeouts->sa.sa_focus=0;
00785
00786 rtl_sigemptyset(&(thread->timeouts->sa.sa_mask));
00787
00788 if (sigaction(thread->timeouts->signal, &(thread->timeouts->sa), NULL)) {
00789 rtl_printf("sigaction failed");
00790 }
00791
00792 if(msecs >= 100){
00793 sec = msecs / 1000;
00794 nsec = (msecs % 1000) * 1000000 ;
00795 }else{
00796 nsec = msecs * 1000000;
00797 }
00798
00799 thread->timeouts->ospec.it_value.tv_sec = sec;
00800 thread->timeouts->ospec.it_value.tv_nsec = nsec;
00801 thread->timeouts->ospec.it_interval.tv_sec = 0;
00802 thread->timeouts->ospec.it_interval.tv_nsec = 0;
00803
00804 err = timer_settime(thread->timeouts->timer, 0, &(thread->timeouts->ospec), &(thread->timeouts->old_setting));
00805
00806 return;
00807 }
|
Here is the call graph for this function:
|
||||||||||||
|
Definition at line 810 of file sys_arch.c. References NULL, sys_current_thread(), and sys_timeout_handler. Referenced by ip_reass().
00810 {
00811 struct sys_thread *thread;
00812
00813 thread = sys_current_thread();
00814
00815 if(thread->timeouts != NULL)
00816 timer_delete(thread->timeouts->timer);
00817 }
|
Here is the call graph for this function:
1.3.4