Upstream version 11.39.266.0
[platform/framework/web/crosswalk.git] / src / third_party / npapi / npspy / extern / nspr / md / _scoos.h
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* 
3  * The contents of this file are subject to the Mozilla Public
4  * License Version 1.1 (the "License"); you may not use this file
5  * except in compliance with the License. You may obtain a copy of
6  * the License at http://www.mozilla.org/MPL/
7  * 
8  * Software distributed under the License is distributed on an "AS
9  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
10  * implied. See the License for the specific language governing
11  * rights and limitations under the License.
12  * 
13  * The Original Code is the Netscape Portable Runtime (NSPR).
14  * 
15  * The Initial Developer of the Original Code is Netscape
16  * Communications Corporation.  Portions created by Netscape are 
17  * Copyright (C) 1998-2000 Netscape Communications Corporation.  All
18  * Rights Reserved.
19  * 
20  * Contributor(s):
21  * 
22  * Alternatively, the contents of this file may be used under the
23  * terms of the GNU General Public License Version 2 or later (the
24  * "GPL"), in which case the provisions of the GPL are applicable 
25  * instead of those above.  If you wish to allow use of your 
26  * version of this file only under the terms of the GPL and not to
27  * allow others to use your version of this file under the MPL,
28  * indicate your decision by deleting the provisions above and
29  * replace them with the notice and other provisions required by
30  * the GPL.  If you do not delete the provisions above, a recipient
31  * may use your version of this file under either the MPL or the
32  * GPL.
33  */
34
35 #ifndef nspr_scoos5_defs_h___
36 #define nspr_scoos5_defs_h___
37
38 /*
39  * Internal configuration macros
40  */
41
42 #define PR_LINKER_ARCH  "scoos5"
43 #define PR_DLL_SUFFIX           ".so"
44
45 #define _PR_SI_SYSNAME      "SCO"
46 #define _PR_SI_ARCHITECTURE "x86"
47 #define _PR_STACK_VMBASE    0x50000000
48
49 #define _MD_DEFAULT_STACK_SIZE  65536L
50 #define _MD_MMAP_FLAGS          MAP_PRIVATE
51
52 #undef  HAVE_STACK_GROWING_UP
53 #define HAVE_DLL
54 #define USE_DLFCN
55
56 #if !defined (HAVE_STRERROR)
57 #define HAVE_STRERROR
58 #endif
59
60 #ifndef HAVE_WEAK_IO_SYMBOLS
61 #define HAVE_WEAK_IO_SYMBOLS
62 #endif
63
64 #define _PR_POLL_AVAILABLE
65 #define _PR_USE_POLL
66 #define _PR_NO_LARGE_FILES
67 #define _PR_STAT_HAS_ONLY_ST_ATIME
68
69 #define NEED_STRFTIME_LOCK
70 #define NEED_TIME_R
71 #define _PR_RECV_BROKEN /* recv doesn't work on Unix Domain Sockets */
72
73 #define USE_SETJMP
74
75 #ifdef _PR_LOCAL_THREADS_ONLY
76 #include <setjmp.h>
77
78 #define _MD_GET_SP(_t)  (_t)->md.jb[4]
79 #define PR_NUM_GCREGS   _SIGJBLEN
80 #define PR_CONTEXT_TYPE sigjmp_buf
81
82 #define CONTEXT(_th) ((_th)->md.jb)
83
84 #define _MD_INIT_CONTEXT(_thread, _sp, _main, status)                           \
85 {                                                                                                                                       \
86         *status = PR_TRUE;                                                                                              \
87     if (sigsetjmp(CONTEXT(_thread),1)) {                                                        \
88                 (*_main)();                                                                                             \
89     }                                                                                                                           \
90     _MD_GET_SP(_thread) = (int) ((_sp) - 64);   \
91 }
92
93 #define _MD_SWITCH_CONTEXT(_thread)                                                             \
94     if (!sigsetjmp(CONTEXT(_thread), 1)) {                                                      \
95                 (_thread)->md.errcode = errno;                                                          \
96                 _PR_Schedule();                                                                                 \
97     }
98
99 /*
100 ** Restore a thread context, saved by _MD_SWITCH_CONTEXT
101 */
102 #define _MD_RESTORE_CONTEXT(_thread)                                                            \
103 {                                                                                                                               \
104     errno = (_thread)->osErrorCode;                                                             \
105         _MD_SET_CURRENT_THREAD(_thread);                                                                \
106     siglongjmp(CONTEXT(_thread), 1);                                                            \
107 }
108
109 #endif /* _PR_LOCAL_THREADS_ONLY */
110
111 struct _MDThread {
112     jmp_buf jb;
113     int id;
114     int errcode;
115 };
116
117 struct _MDThreadStack {
118     PRInt8 notused;
119 };
120
121 struct _MDLock {
122     PRInt8 notused;
123 };
124
125 struct _MDSemaphore {
126     PRInt8 notused;
127 };
128
129 struct _MDCVar {
130     PRInt8 notused;
131 };
132
133 struct _MDSegment {
134     PRInt8 notused;
135 };
136
137 /*
138  * md-specific cpu structure field
139  */
140 #define _PR_MD_MAX_OSFD FD_SETSIZE
141
142 struct _MDCPU_Unix {
143     PRCList ioQ;
144     PRUint32 ioq_timeout;
145     PRInt32 ioq_max_osfd;
146     PRInt32 ioq_osfd_cnt;
147 #ifndef _PR_USE_POLL
148     fd_set fd_read_set, fd_write_set, fd_exception_set;
149     PRInt16 fd_read_cnt[_PR_MD_MAX_OSFD],fd_write_cnt[_PR_MD_MAX_OSFD],
150                                 fd_exception_cnt[_PR_MD_MAX_OSFD];
151 #else
152         struct pollfd *ioq_pollfds;
153         int ioq_pollfds_size;
154 #endif  /* _PR_USE_POLL */
155 };
156
157 #define _PR_IOQ(_cpu)                   ((_cpu)->md.md_unix.ioQ)
158 #define _PR_ADD_TO_IOQ(_pq, _cpu) PR_APPEND_LINK(&_pq.links, &_PR_IOQ(_cpu))
159 #define _PR_FD_READ_SET(_cpu)           ((_cpu)->md.md_unix.fd_read_set)
160 #define _PR_FD_READ_CNT(_cpu)           ((_cpu)->md.md_unix.fd_read_cnt)
161 #define _PR_FD_WRITE_SET(_cpu)          ((_cpu)->md.md_unix.fd_write_set)
162 #define _PR_FD_WRITE_CNT(_cpu)          ((_cpu)->md.md_unix.fd_write_cnt)
163 #define _PR_FD_EXCEPTION_SET(_cpu)      ((_cpu)->md.md_unix.fd_exception_set)
164 #define _PR_FD_EXCEPTION_CNT(_cpu)      ((_cpu)->md.md_unix.fd_exception_cnt)
165 #define _PR_IOQ_TIMEOUT(_cpu)           ((_cpu)->md.md_unix.ioq_timeout)
166 #define _PR_IOQ_MAX_OSFD(_cpu)          ((_cpu)->md.md_unix.ioq_max_osfd)
167 #define _PR_IOQ_OSFD_CNT(_cpu)          ((_cpu)->md.md_unix.ioq_osfd_cnt)
168 #define _PR_IOQ_POLLFDS(_cpu)           ((_cpu)->md.md_unix.ioq_pollfds)
169 #define _PR_IOQ_POLLFDS_SIZE(_cpu)      ((_cpu)->md.md_unix.ioq_pollfds_size)
170
171 #define _PR_IOQ_MIN_POLLFDS_SIZE(_cpu)  32
172
173 struct _MDCPU {
174     struct _MDCPU_Unix md_unix;
175 };
176
177 #define _MD_INIT_LOCKS()
178 #define _MD_NEW_LOCK(lock) PR_SUCCESS
179 #define _MD_FREE_LOCK(lock)
180 #define _MD_LOCK(lock)
181 #define _MD_UNLOCK(lock)
182 #define _MD_INIT_IO()
183 #define _MD_IOQ_LOCK()
184 #define _MD_IOQ_UNLOCK()
185
186 #define _MD_EARLY_INIT                  _MD_EarlyInit
187 #define _MD_FINAL_INIT                          _PR_UnixInit
188 #define _MD_INIT_RUNNING_CPU(cpu)       _MD_unix_init_running_cpu(cpu)
189 #define _MD_INIT_THREAD                 _MD_InitializeThread
190 #define _MD_EXIT_THREAD(thread)
191 #define _MD_SUSPEND_THREAD(thread)
192 #define _MD_RESUME_THREAD(thread)
193 #define _MD_CLEAN_THREAD(_thread)
194
195 #define _MD_GET_INTERVAL                  _PR_UNIX_GetInterval
196 #define _MD_INTERVAL_PER_SEC              _PR_UNIX_TicksPerSecond
197
198 #define _MD_SELECT              _select
199 #define _MD_POLL                _poll
200
201 #endif /* nspr_scoos5_defs_h___ */