00001 /* 00002 * Copyright (c) 2001, Swedish Institute of Computer Science. 00003 * All rights reserved. 00004 * 00005 * Redistribution and use in source and binary forms, with or without 00006 * modification, are permitted provided that the following conditions 00007 * are met: 00008 * 1. Redistributions of source code must retain the above copyright 00009 * notice, this list of conditions and the following disclaimer. 00010 * 2. Redistributions in binary form must reproduce the above copyright 00011 * notice, this list of conditions and the following disclaimer in the 00012 * documentation and/or other materials provided with the distribution. 00013 * 3. Neither the name of the Institute nor the names of its contributors 00014 * may be used to endorse or promote products derived from this software 00015 * without specific prior written permission. 00016 * 00017 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 00018 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00019 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00020 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 00021 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 00022 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 00023 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 00024 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00025 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 00026 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 00027 * SUCH DAMAGE. 00028 * 00029 * sys.h 00030 * 00031 * Author : Adam Dunkels <adam@sics.se> 00032 * 00033 * CHANGELOG: this file has been modified by Sergio Perez Alcañiz <serpeal@disca.upv.es> 00034 * Departamento de Informática de Sistemas y Computadores 00035 * Universidad Politécnica de Valencia 00036 * Valencia (Spain) 00037 * Date: March 2003 00038 * 00039 */ 00040 00041 #ifndef __RTL_LWIP_SYS_H__ 00042 #define __RTL_LWIP_SYS_H__ 00043 00044 #include "arch/cc.h" 00045 #include "arch/sys_arch.h" 00046 00047 typedef void (* sys_timeout_handler)(int signo); 00048 00049 /* sys_init() must be called before anthing else. */ 00050 void sys_init(void); 00051 00052 /* 00053 * sys_timeout(): 00054 * 00055 * Schedule a timeout a specified amount of milliseconds in the 00056 * future. When the timeout occurs, the specified timeout handler will 00057 * be called. The handler will be passed the "arg" argument when 00058 * called. 00059 * 00060 */ 00061 void sys_timeout(u16_t msecs, sys_timeout_handler h, void *arg); 00062 struct sys_timeouts *sys_arch_timeouts(void); 00063 void sys_untimeout(sys_timeout_handler h, void *arg); 00064 00065 /* Semaphore functions. */ 00066 sys_sem_t sys_sem_new(u8_t count); 00067 int sys_sem_signal(sys_sem_t sem); 00068 u16_t sys_arch_sem_wait(sys_sem_t sem, u16_t timeout); 00069 void sys_sem_free(sys_sem_t sem); 00070 00071 void sys_sem_wait(sys_sem_t sem); 00072 00073 int sys_sem_wait_timeout(sys_sem_t sem, u32_t timeout); 00074 00075 /* Mailbox functions. */ 00076 sys_mbox_t sys_mbox_new(void); 00077 void sys_mbox_post(sys_mbox_t mbox, void *msg); 00078 u16_t sys_arch_mbox_fetch(sys_mbox_t mbox, void **msg, u16_t timeout); 00079 void sys_mbox_free(sys_mbox_t mbox); 00080 00081 void sys_mbox_fetch(sys_mbox_t mbox, void **msg); 00082 00083 /* Thread functions. */ 00084 //void sys_thread_new(void (* thread)(void *arg), void *arg, unsigned long period, char *name, int name_len); 00085 void *sys_thread_new(void (* function)(void *arg), void *arg, unsigned long period); 00086 /* The following functions are used only in Unix code, and 00087 can be omitted when porting the stack. */ 00088 /* Returns the current time in microseconds. */ 00089 void sys_arch_close(void); 00090 void * sys_thread_exit(void); 00091 int sys_thread_delete(void *pthread); 00092 void sys_thread_register(void *pthread); 00093 void register_tcpip_thread(void); 00094 void *sys_malloc(size_t size); 00095 void sys_free(void *ptr); 00096 void sys_stop_interrupts(unsigned int *state); 00097 void sys_allow_interrupts(unsigned int *state); 00098 00099 00100 extern void *rt_realloc(void *p, size_t new_len); 00101 /* 00102 #define memp_malloc(x) (sys_malloc(memp_sizes[x])) 00103 #define memp_malloc2(x) (sys_malloc(memp_sizes[x])) 00104 #define memp_mallocp(x) (sys_malloc(memp_sizes[x])) 00105 #define memp_realloc(x,y,z) (rt_realloc(z,memp_sizes[y])) 00106 #define memp_free(x,y) (sys_free(y)) 00107 #define memp_freep(x,y) (sys_free(y)) 00108 00109 #define mem_malloc(x) (sys_malloc(x)) 00110 #define mem_free(x) (sys_free(x)) 00111 #define mem_realloc(x,y) (sys_realloc(x,y)) 00112 */ 00113 00114 #endif /* __RTL_LWIP_SYS_H__ */