sdk-core v2026.11.05
PS2 SDK - core tier (build-critical EE/IOP modules)
Loading...
Searching...
No Matches
sys.h
Go to the documentation of this file.
1
5
6/*
7 * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
8 * All rights reserved.
9 *
10 * Redistribution and use in source and binary forms, with or without modification,
11 * are permitted provided that the following conditions are met:
12 *
13 * 1. Redistributions of source code must retain the above copyright notice,
14 * this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright notice,
16 * this list of conditions and the following disclaimer in the documentation
17 * and/or other materials provided with the distribution.
18 * 3. The name of the author may not be used to endorse or promote products
19 * derived from this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
22 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
23 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
24 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
26 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
29 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
30 * OF SUCH DAMAGE.
31 *
32 * This file is part of the lwIP TCP/IP stack.
33 *
34 * Author: Adam Dunkels <adam@sics.se>
35 */
36
37#ifndef LWIP_HDR_SYS_H
38#define LWIP_HDR_SYS_H
39
40#include "lwip/opt.h"
41
42#ifdef __cplusplus
43extern "C" {
44#endif
45
46#if NO_SYS
47
48/* For a totally minimal and standalone system, we provide null
49 definitions of the sys_ functions. */
50typedef u8_t sys_sem_t;
51typedef u8_t sys_mutex_t;
52typedef u8_t sys_mbox_t;
53
54#define sys_sem_new(s, c) ERR_OK
55#define sys_sem_signal(s)
56#define sys_sem_wait(s)
57#define sys_arch_sem_wait(s,t)
58#define sys_sem_free(s)
59#define sys_sem_valid(s) 0
60#define sys_sem_valid_val(s) 0
61#define sys_sem_set_invalid(s)
62#define sys_sem_set_invalid_val(s)
63#define sys_mutex_new(mu) ERR_OK
64#define sys_mutex_lock(mu)
65#define sys_mutex_unlock(mu)
66#define sys_mutex_free(mu)
67#define sys_mutex_valid(mu) 0
68#define sys_mutex_set_invalid(mu)
69#define sys_mbox_new(m, s) ERR_OK
70#define sys_mbox_fetch(m,d)
71#define sys_mbox_tryfetch(m,d)
72#define sys_mbox_post(m,d)
73#define sys_mbox_trypost(m,d)
74#define sys_mbox_free(m)
75#define sys_mbox_valid(m)
76#define sys_mbox_valid_val(m)
77#define sys_mbox_set_invalid(m)
78#define sys_mbox_set_invalid_val(m)
79
80#define sys_thread_new(n,t,a,s,p)
81
82#define sys_msleep(t)
83
84#else /* NO_SYS */
85
87#define SYS_ARCH_TIMEOUT 0xffffffffUL
88
92#define SYS_MBOX_EMPTY SYS_ARCH_TIMEOUT
93
94#include "lwip/err.h"
95#include "arch/sys_arch.h"
96
98typedef void (*lwip_thread_fn)(void *arg);
99
100/* Function prototypes for functions to be implemented by platform ports
101 (in sys_arch.c) */
102
103/* Mutex functions: */
104
107#ifndef LWIP_COMPAT_MUTEX
108#define LWIP_COMPAT_MUTEX 0
109#endif
110
111#if LWIP_COMPAT_MUTEX
112/* for old ports that don't have mutexes: define them to binary semaphores */
113#define sys_mutex_t sys_sem_t
114#define sys_mutex_new(mutex) sys_sem_new(mutex, 1)
115#define sys_mutex_lock(mutex) sys_sem_wait(mutex)
116#define sys_mutex_unlock(mutex) sys_sem_signal(mutex)
117#define sys_mutex_free(mutex) sys_sem_free(mutex)
118#define sys_mutex_valid(mutex) sys_sem_valid(mutex)
119#define sys_mutex_set_invalid(mutex) sys_sem_set_invalid(mutex)
120
121#else /* LWIP_COMPAT_MUTEX */
122
137err_t sys_mutex_new(sys_mutex_t *mutex);
143void sys_mutex_lock(sys_mutex_t *mutex);
149void sys_mutex_unlock(sys_mutex_t *mutex);
155void sys_mutex_free(sys_mutex_t *mutex);
156#ifndef sys_mutex_valid
164int sys_mutex_valid(sys_mutex_t *mutex);
165#endif
166#ifndef sys_mutex_set_invalid
174void sys_mutex_set_invalid(sys_mutex_t *mutex);
175#endif
176#endif /* LWIP_COMPAT_MUTEX */
177
178/* Semaphore functions: */
179
195err_t sys_sem_new(sys_sem_t *sem, u8_t count);
201void sys_sem_signal(sys_sem_t *sem);
219u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout);
225void sys_sem_free(sys_sem_t *sem);
227#define sys_sem_wait(sem) sys_arch_sem_wait(sem, 0)
228#ifndef sys_sem_valid
236int sys_sem_valid(sys_sem_t *sem);
237#endif
238#ifndef sys_sem_set_invalid
246void sys_sem_set_invalid(sys_sem_t *sem);
247#endif
248#ifndef sys_sem_valid_val
252#define sys_sem_valid_val(sem) sys_sem_valid(&(sem))
253#endif
254#ifndef sys_sem_set_invalid_val
258#define sys_sem_set_invalid_val(sem) sys_sem_set_invalid(&(sem))
259#endif
260
261#ifndef sys_msleep
266void sys_msleep(u32_t ms); /* only has a (close to) 1 ms resolution. */
267#endif
268
269/* Mailbox functions. */
270
285err_t sys_mbox_new(sys_mbox_t *mbox, int size);
294void sys_mbox_post(sys_mbox_t *mbox, void *msg);
304err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg);
314err_t sys_mbox_trypost_fromisr(sys_mbox_t *mbox, void *msg);
336u32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, u32_t timeout);
337/* Allow port to override with a macro, e.g. special timeout for sys_arch_mbox_fetch() */
338#ifndef sys_arch_mbox_tryfetch
355u32_t sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg);
356#endif
360#define sys_mbox_tryfetch(mbox, msg) sys_arch_mbox_tryfetch(mbox, msg)
369void sys_mbox_free(sys_mbox_t *mbox);
370#define sys_mbox_fetch(mbox, msg) sys_arch_mbox_fetch(mbox, msg, 0)
371#ifndef sys_mbox_valid
379int sys_mbox_valid(sys_mbox_t *mbox);
380#endif
381#ifndef sys_mbox_set_invalid
389void sys_mbox_set_invalid(sys_mbox_t *mbox);
390#endif
391#ifndef sys_mbox_valid_val
395#define sys_mbox_valid_val(mbox) sys_mbox_valid(&(mbox))
396#endif
397#ifndef sys_mbox_set_invalid_val
401#define sys_mbox_set_invalid_val(mbox) sys_mbox_set_invalid(&(mbox))
402#endif
403
404
420sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread, void *arg, int stacksize, int prio);
421
422#endif /* NO_SYS */
423
430#if !defined LWIP_MARK_TCPIP_THREAD || defined __DOXYGEN__
431#define LWIP_MARK_TCPIP_THREAD()
432#endif
433
439void sys_init(void);
440
441#ifndef sys_jiffies
445u32_t sys_jiffies(void);
446#endif
447
448#ifdef LWIP_FUZZ_SYS_NOW
449/* This offset should be added to the time 'sys_now()' returns */
450extern u32_t sys_now_offset;
451#endif
452
461u32_t sys_now(void);
462
463/* Critical Region Protection */
464/* These functions must be implemented in the sys_arch.c file.
465 In some implementations they can provide a more light-weight protection
466 mechanism than using semaphores. Otherwise semaphores can be used for
467 implementation */
468#ifndef SYS_ARCH_PROTECT
474#if SYS_LIGHTWEIGHT_PROT
475
483#define SYS_ARCH_DECL_PROTECT(lev) sys_prot_t lev
495#define SYS_ARCH_PROTECT(lev) lev = sys_arch_protect()
506#define SYS_ARCH_UNPROTECT(lev) sys_arch_unprotect(lev)
507sys_prot_t sys_arch_protect(void);
508void sys_arch_unprotect(sys_prot_t pval);
509
510#else
511
512#define SYS_ARCH_DECL_PROTECT(lev)
513#define SYS_ARCH_PROTECT(lev)
514#define SYS_ARCH_UNPROTECT(lev)
515
516#endif /* SYS_LIGHTWEIGHT_PROT */
517
518#endif /* SYS_ARCH_PROTECT */
519
520/*
521 * Macros to set/get and increase/decrease variables in a thread-safe way.
522 * Use these for accessing variable that are used from more than one thread.
523 */
524
525#ifndef SYS_ARCH_INC
526#define SYS_ARCH_INC(var, val) do { \
527 SYS_ARCH_DECL_PROTECT(old_level); \
528 SYS_ARCH_PROTECT(old_level); \
529 var += val; \
530 SYS_ARCH_UNPROTECT(old_level); \
531 } while(0)
532#endif /* SYS_ARCH_INC */
533
534#ifndef SYS_ARCH_DEC
535#define SYS_ARCH_DEC(var, val) do { \
536 SYS_ARCH_DECL_PROTECT(old_level); \
537 SYS_ARCH_PROTECT(old_level); \
538 var -= val; \
539 SYS_ARCH_UNPROTECT(old_level); \
540 } while(0)
541#endif /* SYS_ARCH_DEC */
542
543#ifndef SYS_ARCH_GET
544#define SYS_ARCH_GET(var, ret) do { \
545 SYS_ARCH_DECL_PROTECT(old_level); \
546 SYS_ARCH_PROTECT(old_level); \
547 ret = var; \
548 SYS_ARCH_UNPROTECT(old_level); \
549 } while(0)
550#endif /* SYS_ARCH_GET */
551
552#ifndef SYS_ARCH_SET
553#define SYS_ARCH_SET(var, val) do { \
554 SYS_ARCH_DECL_PROTECT(old_level); \
555 SYS_ARCH_PROTECT(old_level); \
556 var = val; \
557 SYS_ARCH_UNPROTECT(old_level); \
558 } while(0)
559#endif /* SYS_ARCH_SET */
560
561#ifndef SYS_ARCH_LOCKED
562#define SYS_ARCH_LOCKED(code) do { \
563 SYS_ARCH_DECL_PROTECT(old_level); \
564 SYS_ARCH_PROTECT(old_level); \
565 code; \
566 SYS_ARCH_UNPROTECT(old_level); \
567 } while(0)
568#endif /* SYS_ARCH_LOCKED */
569
570
571#ifdef __cplusplus
572}
573#endif
574
575#endif /* LWIP_HDR_SYS_H */
void sys_mbox_set_invalid(sys_mbox_t *mbox)
Definition sys_arch.c:200
u32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, u32_t timeout)
Definition sys_arch.c:254
int sys_mbox_valid(sys_mbox_t *mbox)
Definition sys_arch.c:167
void sys_mbox_post(sys_mbox_t *mbox, void *msg)
Definition sys_arch.c:192
err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg)
Definition sys_arch.c:171
err_t sys_mbox_new(sys_mbox_t *mbox, int size)
Definition sys_arch.c:141
void sys_mbox_free(sys_mbox_t *mbox)
Definition sys_arch.c:162
err_t sys_mbox_trypost_fromisr(sys_mbox_t *mbox, void *msg)
Definition sys_arch.c:188
u32_t sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg)
Definition sys_arch.c:259
sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread, void *arg, int stacksize, int prio)
Definition sys_arch.c:110
void sys_msleep(u32_t ms)
Definition sys.c:135
void sys_init(void)
Definition sys_arch.c:339
void sys_mutex_free(sys_mutex_t *mutex)
err_t sys_mutex_new(sys_mutex_t *mutex)
void sys_mutex_set_invalid(sys_mutex_t *mutex)
void sys_mutex_lock(sys_mutex_t *mutex)
void sys_mutex_unlock(sys_mutex_t *mutex)
int sys_mutex_valid(sys_mutex_t *mutex)
int sys_sem_valid(sys_sem_t *sem)
Definition sys_arch.c:281
void sys_sem_set_invalid(sys_sem_t *sem)
Definition sys_arch.c:285
void sys_sem_free(sys_sem_t *sem)
Definition sys_arch.c:334
u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout)
Definition sys_arch.c:289
void sys_sem_signal(sys_sem_t *sem)
Definition sys_arch.c:329
err_t sys_sem_new(sys_sem_t *sem, u8_t count)
Definition sys_arch.c:263
u32_t sys_now(void)
Definition sys_arch.c:411
u32_t sys_jiffies(void)
void(*) lwip_thread_fn(void *arg)
Definition sys.h:98
u32 count
start sector of fragmented bd/file