mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2025-04-24 06:02:55 +00:00
Fixed SYS_ARCH_PROTECT macros when NO_SYS is not defined.
Added documentation for lightweight protection. Fixed debug statement in ip.c. Removed tabs in files I changed.
This commit is contained in:
parent
7f1becc682
commit
e13c78820f
@ -121,3 +121,26 @@ to be implemented as well:
|
|||||||
"thread()". The "arg" argument will be passed as an argument to the
|
"thread()". The "arg" argument will be passed as an argument to the
|
||||||
thread() function. The id of the new thread is returned.
|
thread() function. The id of the new thread is returned.
|
||||||
|
|
||||||
|
- sys_prot_t sys_arch_protect(void)
|
||||||
|
|
||||||
|
This optional function does a "fast" critical region protection and returns
|
||||||
|
the previous protection level. This function is only called during very short
|
||||||
|
critical regions. An embedded system which supports ISR-based drivers might
|
||||||
|
want to implement this function by disabling interrupts. Task-based systems
|
||||||
|
might want to implement this by using a mutex or disabling tasking. This
|
||||||
|
function should support recursive calls from the same task or interrupt. In
|
||||||
|
other words, sys_arch_protect() could be called while already protected. In
|
||||||
|
that case the return value indicates that it is already protected.
|
||||||
|
|
||||||
|
sys_arch_protect() is only required if your port is supporting an operating
|
||||||
|
system.
|
||||||
|
|
||||||
|
- void sys_arch_unprotect(sys_prot_t pval)
|
||||||
|
|
||||||
|
This optional function does a "fast" set of critical region protection to the
|
||||||
|
value specified by pval. See the documentation for sys_arch_protect() for
|
||||||
|
more information. This function is only required if your port is supporting
|
||||||
|
an operating system.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -349,7 +349,7 @@ ip_input(struct pbuf *p, struct netif *inp) {
|
|||||||
|
|
||||||
#if IP_REASSEMBLY
|
#if IP_REASSEMBLY
|
||||||
if((IPH_OFFSET(iphdr) & htons(IP_OFFMASK | IP_MF)) != 0) {
|
if((IPH_OFFSET(iphdr) & htons(IP_OFFMASK | IP_MF)) != 0) {
|
||||||
DEBUGF(IP_DEBUG, ("IP packet is a fragment (id=0x%04x tot_len=%u len=%u MF=%u offset=%u), calling ip_reass()\n", ntohs(IPH_ID(iphdr)), p->tot_len, ntohs(IPH_LEN(iphdr)), !!(IPH_OFFSET(iphdr) & htons(IP_MF)), (ntohs(IPH_OFFSET(iphdr)) & IP_OFFMASK))*8);
|
DEBUGF(IP_DEBUG, ("IP packet is a fragment (id=0x%04x tot_len=%u len=%u MF=%u offset=%u), calling ip_reass()\n", ntohs(IPH_ID(iphdr)), p->tot_len, ntohs(IPH_LEN(iphdr)), !!(IPH_OFFSET(iphdr) & htons(IP_MF)), (ntohs(IPH_OFFSET(iphdr)) & IP_OFFMASK)*8));
|
||||||
p = ip_reass(p);
|
p = ip_reass(p);
|
||||||
if(p == NULL) {
|
if(p == NULL) {
|
||||||
return ERR_OK;
|
return ERR_OK;
|
||||||
|
@ -36,9 +36,6 @@
|
|||||||
|
|
||||||
#include "lwip/opt.h"
|
#include "lwip/opt.h"
|
||||||
|
|
||||||
#define SYS_ARCH_DECL_PROTECT(lev)
|
|
||||||
#define SYS_ARCH_PROTECT(lev)
|
|
||||||
#define SYS_ARCH_UNPROTECT(lev)
|
|
||||||
|
|
||||||
#if NO_SYS
|
#if NO_SYS
|
||||||
|
|
||||||
@ -61,6 +58,11 @@ struct sys_timeout {u8_t dummy;};
|
|||||||
|
|
||||||
#define sys_thread_new(t,a)
|
#define sys_thread_new(t,a)
|
||||||
|
|
||||||
|
/* We don't need protection if there is no OS */
|
||||||
|
#define SYS_ARCH_DECL_PROTECT(lev)
|
||||||
|
#define SYS_ARCH_PROTECT(lev)
|
||||||
|
#define SYS_ARCH_UNPROTECT(lev)
|
||||||
|
|
||||||
#else /* NO_SYS */
|
#else /* NO_SYS */
|
||||||
|
|
||||||
#include "arch/sys_arch.h"
|
#include "arch/sys_arch.h"
|
||||||
@ -115,13 +117,37 @@ void sys_mbox_fetch(sys_mbox_t mbox, void **msg);
|
|||||||
mechanism than using semaphores. Otherwise semaphores can be used for
|
mechanism than using semaphores. Otherwise semaphores can be used for
|
||||||
implementation */
|
implementation */
|
||||||
#ifndef SYS_ARCH_PROTECT
|
#ifndef SYS_ARCH_PROTECT
|
||||||
|
/** SYS_LIGHTWEIGHT_PROT
|
||||||
|
* define SYS_LIGHTWEIGHT_PROT in lwipopts.h if you want inter-task protection
|
||||||
|
* for certain critical regions during buffer allocation, deallocation and memory
|
||||||
|
* allocation and deallocation.
|
||||||
|
*/
|
||||||
#ifdef SYS_LIGHTWEIGHT_PROT
|
#ifdef SYS_LIGHTWEIGHT_PROT
|
||||||
|
|
||||||
#undef SYS_ARCH_DECL_PROTECT
|
/** SYS_ARCH_DECL_PROTECT
|
||||||
|
* declare a protection variable. This macro will default to defining a variable of
|
||||||
|
* type sys_prot_t. If a particular port needs a different implementation, then
|
||||||
|
* this macro may be defined in sys_arch.h.
|
||||||
|
*/
|
||||||
#define SYS_ARCH_DECL_PROTECT(lev) sys_prot_t lev
|
#define SYS_ARCH_DECL_PROTECT(lev) sys_prot_t lev
|
||||||
#undef SYS_ARCH_PROTECT
|
/** SYS_ARCH_PROTECT
|
||||||
|
* Perform a "fast" protect. This could be implemented by
|
||||||
|
* disabling interrupts for an embedded system or by using a semaphore or
|
||||||
|
* mutex. The implementation should allow calling SYS_ARCH_PROTECT when
|
||||||
|
* already protected. The old protection level is returned in the variable
|
||||||
|
* "lev". This macro will default to calling the sys_arch_protect() function
|
||||||
|
* which should be implemented in sys_arch.c. If a particular port needs a
|
||||||
|
* different implementation, then this macro may be defined in sys_arch.h
|
||||||
|
*/
|
||||||
#define SYS_ARCH_PROTECT(lev) lev = sys_arch_protect()
|
#define SYS_ARCH_PROTECT(lev) lev = sys_arch_protect()
|
||||||
#undef SYS_ARCH_UNPROTECT
|
/** SYS_ARCH_UNPROTECT
|
||||||
|
* Perform a "fast" set of the protection level to "lev". This could be
|
||||||
|
* implemented by setting the interrupt level to "lev" within the MACRO or by
|
||||||
|
* using a semaphore or mutex. This macro will default to calling the
|
||||||
|
* sys_arch_unprotect() function which should be implemented in
|
||||||
|
* sys_arch.c. If a particular port needs a different implementation, then
|
||||||
|
* this macro may be defined in sys_arch.h
|
||||||
|
*/
|
||||||
#define SYS_ARCH_UNPROTECT(lev) sys_arch_unprotect(lev)
|
#define SYS_ARCH_UNPROTECT(lev) sys_arch_unprotect(lev)
|
||||||
sys_prot_t sys_arch_protect(void);
|
sys_prot_t sys_arch_protect(void);
|
||||||
void sys_arch_unprotect(sys_prot_t pval);
|
void sys_arch_unprotect(sys_prot_t pval);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user