Home | History | Annotate | Download | only in arch
      1 #include "arch/sys_arch.h"
      2 #include "lwip/sys.h"
      3 #include "lwip/mem.h"
      4 #include <stdlib.h>
      5 #include <thread.h>
      6 
      7 void sys_init(void)
      8 {
      9 }
     10 
     11 err_t sys_sem_new(sys_sem_t *sem, u8_t count)
     12 {
     13     if (!sem)
     14 	return EINVAL;
     15     *sem = malloc(sizeof(struct semaphore));
     16     if (!*sem)
     17 	return ENOMEM;
     18 
     19     sem_init(*sem, count);
     20     return 0;
     21 }
     22 
     23 void sys_sem_free(sys_sem_t *sem)
     24 {
     25     if (!!sem && !!*sem) {
     26 	sys_sem_set_invalid(sem);
     27 	free(*sem);
     28 	*sem = NULL;
     29     }
     30 }
     31 
     32 void sys_sem_set_invalid(sys_sem_t *sem)
     33 {
     34     if (!sem || !*sem)
     35 	return;
     36     sem_set_invalid(*sem);
     37 }
     38 
     39 
     40 int sys_sem_valid(sys_sem_t *sem)
     41 {
     42     if (!sem || !*sem)
     43 	return 0;
     44     return sem_is_valid(*sem);
     45 }
     46 
     47 u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout)
     48 {
     49     mstime_t rv;
     50 
     51     if (!sem || !*sem)
     52 	return SYS_ARCH_TIMEOUT;
     53     rv = sem_down(*sem, timeout);
     54     if (rv == (mstime_t)-1)
     55 	return SYS_ARCH_TIMEOUT;
     56     else
     57 	return rv;
     58 }
     59 
     60 err_t sys_mbox_new(sys_mbox_t *mbox, int size)
     61 {
     62     if (!mbox)
     63 	return EINVAL;
     64     *mbox = malloc(MBOX_BYTES(size));
     65     if (!(*mbox))
     66 	return ENOMEM;
     67 
     68     mbox_init(*mbox, size);
     69     return 0;
     70 }
     71 
     72 void sys_mbox_free(sys_mbox_t *mbox)
     73 {
     74     if (!!mbox && !!*mbox) {
     75 	sys_mbox_set_invalid(mbox);
     76 	free(*mbox);
     77 	*mbox = NULL;
     78     }
     79 }
     80 
     81 void sys_mbox_post(sys_mbox_t *mbox, void *msg)
     82 {
     83     if (!!mbox)
     84 	mbox_post(*mbox, msg, 0);
     85 }
     86 
     87 err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg)
     88 {
     89     if (!mbox)
     90 	return EINVAL;
     91     return mbox_post(*mbox, msg, -1);
     92 }
     93 
     94 u32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, u32_t timeout)
     95 {
     96     mstime_t rv;
     97 
     98     if (!mbox)
     99 	return SYS_MBOX_EMPTY;
    100     rv = mbox_fetch(*mbox, msg, timeout);
    101     if (rv == (mstime_t)-1)
    102 	return SYS_ARCH_TIMEOUT;
    103     else
    104 	return rv;
    105 }
    106 
    107 u32_t sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg)
    108 {
    109     if (!mbox)
    110 	return SYS_MBOX_EMPTY;
    111     return mbox_fetch(*mbox, msg, -1);
    112 }
    113 
    114 void sys_mbox_set_invalid(sys_mbox_t *mbox)
    115 {
    116     if (!!mbox)
    117 	mbox_set_invalid(*mbox);
    118 }
    119 
    120 int sys_mbox_valid(sys_mbox_t *mbox)
    121 {
    122     return ((!!mbox) && mbox_is_valid(*mbox));
    123 }
    124 
    125 
    126 sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread,
    127 			    void *arg, int stacksize, int prio)
    128 {
    129     return start_thread(name, stacksize, prio, thread, arg);
    130 }
    131 
    132