diff --git a/cpu/native/include/native_internal.h b/cpu/native/include/native_internal.h index 5c63ffc2f2..28c814c734 100644 --- a/cpu/native/include/native_internal.h +++ b/cpu/native/include/native_internal.h @@ -46,6 +46,12 @@ #include "kernel_types.h" + +/** + * Prototype for native's internal callbacks + */ +typedef void (*_native_callback_t)(void); + /** * internal functions */ @@ -120,7 +126,7 @@ ssize_t _native_write(int fd, const void *buf, size_t count); /** * register interrupt handler handler for interrupt sig */ -int register_interrupt(int sig, void (*handler)(void)); +int register_interrupt(int sig, _native_callback_t handler); /** * unregister interrupt handler for interrupt sig diff --git a/cpu/native/irq_cpu.c b/cpu/native/irq_cpu.c index e78f1a440f..a921d2b9bb 100644 --- a/cpu/native/irq_cpu.c +++ b/cpu/native/irq_cpu.c @@ -59,10 +59,7 @@ volatile unsigned int _native_saved_eip; volatile int _native_sigpend; int _sig_pipefd[2]; -struct int_handler_t { - void (*func)(void); -}; -static struct int_handler_t native_irq_handlers[255]; +static _native_callback_t native_irq_handlers[255]; char sigalt_stk[SIGSTKSZ]; void print_thread_sigmask(ucontext_t *cp) @@ -74,7 +71,7 @@ void print_thread_sigmask(ucontext_t *cp) } for (int i = 1; i < (NSIG); i++) { - if (native_irq_handlers[i].func != NULL) { + if (native_irq_handlers[i] != NULL) { printf("%s: %s\n", strsignal(i), (sigismember(&_native_sig_set, i) ? "blocked" : "unblocked") @@ -121,7 +118,7 @@ void native_print_signals(void) } for (int i = 1; i < (NSIG); i++) { - if (native_irq_handlers[i].func != NULL || i == SIGUSR1) { + if (native_irq_handlers[i] != NULL || i == SIGUSR1) { printf("%s: %s in active thread\n", strsignal(i), (sigismember(&_native_sig_set, i) ? "blocked" : "unblocked") @@ -259,9 +256,9 @@ void native_irq_handler(void) int sig = _native_popsig(); _native_sigpend--; - if (native_irq_handlers[sig].func != NULL) { + if (native_irq_handlers[sig] != NULL) { DEBUG("calling interrupt handler for %i\n", sig); - native_irq_handlers[sig].func(); + native_irq_handlers[sig](); } else if (sig == SIGUSR1) { DEBUG("ignoring SIGUSR1\n"); @@ -360,7 +357,7 @@ void native_isr_entry(int sig, siginfo_t *info, void *context) * TODO: use appropriate data structure for signal * handlers. */ -int register_interrupt(int sig, void (*handler)(void)) +int register_interrupt(int sig, _native_callback_t handler) { DEBUG("register_interrupt()\n"); @@ -369,7 +366,7 @@ int register_interrupt(int sig, void (*handler)(void)) err(EXIT_FAILURE, "register_interrupt: sigdelset"); } - native_irq_handlers[sig].func = handler; + native_irq_handlers[sig] = handler; /* set current dINT sigmask for all signals */ struct sigaction sa; @@ -377,7 +374,7 @@ int register_interrupt(int sig, void (*handler)(void)) sa.sa_mask = _native_sig_set_dint; sa.sa_flags = SA_RESTART | SA_SIGINFO | SA_ONSTACK; for (int i = 0; i < 255; i++) { - if (native_irq_handlers[i].func != NULL) { + if (native_irq_handlers[i] != NULL) { if (sigaction(sig, &sa, NULL)) { err(EXIT_FAILURE, "register_interrupt: sigaction"); } @@ -400,7 +397,7 @@ int unregister_interrupt(int sig) err(EXIT_FAILURE, "unregister_interrupt: sigaddset"); } - native_irq_handlers[sig].func = NULL; + native_irq_handlers[sig] = NULL; /* reset signal handler for sig */ struct sigaction sa; @@ -413,7 +410,7 @@ int unregister_interrupt(int sig) /* change sigmask for remaining signal handlers */ sa.sa_sigaction = native_isr_entry; for (int i = 0; i < 255; i++) { - if (native_irq_handlers[i].func != NULL) { + if (native_irq_handlers[i] != NULL) { if (sigaction(sig, &sa, NULL)) { err(EXIT_FAILURE, "register_interrupt: sigaction"); } @@ -451,7 +448,7 @@ void native_interrupt_init(void) _native_sigpend = 0; for (int i = 0; i < 255; i++) { - native_irq_handlers[i].func = NULL; + native_irq_handlers[i] = NULL; } sa.sa_sigaction = native_isr_entry; diff --git a/cpu/native/net/interface.c b/cpu/native/net/interface.c index 43ac8b9faf..4e596535d1 100644 --- a/cpu/native/net/interface.c +++ b/cpu/native/net/interface.c @@ -29,15 +29,13 @@ #include "transceiver.h" #include "msg.h" +#include "native_internal.h" #include "tap.h" #include "nativenet.h" #include "nativenet_internal.h" #include "cpu.h" -struct nativenet_callback_s { - void (*func)(void); -}; -static struct nativenet_callback_s _nativenet_callbacks[255]; +static _native_callback_t _nativenet_callbacks[255]; struct rx_buffer_s _nativenet_rx_buffer[RX_BUF_SIZE]; static volatile uint8_t rx_buffer_next; @@ -151,14 +149,14 @@ void nativenet_switch_to_rx(void) /* nativenet_internal.h *************************************************/ /************************************************************************/ -int _nativenet_register_cb(int event, void (*func)(void)) +int _nativenet_register_cb(int event, _native_callback_t func) { if (event > NNEV_MAXEV) { DEBUG("_nativenet_register_cb: event > NNEV_MAXEV\n"); return -1; } - _nativenet_callbacks[event].func = func; + _nativenet_callbacks[event] = func; return 0; } @@ -169,7 +167,7 @@ int _nativenet_unregister_cb(int event) return -1; } - _nativenet_callbacks[event].func = NULL; + _nativenet_callbacks[event] = NULL; return 0; } @@ -180,8 +178,8 @@ void do_cb(int event) return; } - if (_nativenet_callbacks[event].func != NULL) { - _nativenet_callbacks[event].func(); + if (_nativenet_callbacks[event] != NULL) { + _nativenet_callbacks[event](); } }