Upstream version 11.39.266.0
[platform/framework/web/crosswalk.git] / src / third_party / npapi / npspy / extern / nspr / md / _sony.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_sony_defs_h___
36 #define nspr_sony_defs_h___
37  
38 #define PR_LINKER_ARCH          "sony"
39 #define _PR_SI_SYSNAME          "SONY"
40 #define _PR_SI_ARCHITECTURE     "mips"
41 #define PR_DLL_SUFFIX           ".so"
42  
43 #define _PR_VMBASE              0x30000000
44 #define _PR_STACK_VMBASE        0x50000000
45 #define _MD_DEFAULT_STACK_SIZE  65536L
46 #define _MD_MMAP_FLAGS          MAP_PRIVATE
47
48 #define _MD_GET_INTERVAL        _PR_UNIX_GetInterval
49 #define _MD_INTERVAL_PER_SEC    _PR_UNIX_TicksPerSecond
50
51 #if defined(_PR_LOCAL_THREADS_ONLY)
52 #include <ucontext.h>
53 #include <sys/regset.h>
54  
55 #define PR_NUM_GCREGS   NGREG
56 #define PR_CONTEXT_TYPE ucontext_t
57  
58 #define CONTEXT(_thread)        (&(_thread)->md.context)
59  
60 #define _MD_GET_SP(_t)          (_t)->md.context.uc_mcontext.gregs[CXT_SP]
61  
62 /*
63 ** Initialize the thread context preparing it to execute _main()
64 */
65 #define _MD_INIT_CONTEXT(_thread, _sp, _main, status)               \
66 {                                                                   \
67     *status = PR_TRUE;  \
68     getcontext(CONTEXT(_thread));                                    \
69     CONTEXT(_thread)->uc_stack.ss_sp = (char*) (_thread)->stack->stackBottom; \
70     CONTEXT(_thread)->uc_stack.ss_size = (_thread)->stack->stackSize; \
71     _MD_GET_SP(_thread) = (greg_t) (_sp) - 64;             \
72     makecontext(CONTEXT(_thread), _main, 0);              \
73 }
74  
75 #define _MD_SWITCH_CONTEXT(_thread)      \
76     if (!getcontext(CONTEXT(_thread))) { \
77         (_thread)->md.errcode = errno;      \
78         _PR_Schedule();                  \
79     }
80  
81 /*
82 ** Restore a thread context, saved by _MD_SWITCH_CONTEXT
83 */
84 #define _MD_RESTORE_CONTEXT(_thread)   \
85 {                                      \
86     ucontext_t *uc = CONTEXT(_thread); \
87     uc->uc_mcontext.gregs[CXT_V0] = 1; \
88     uc->uc_mcontext.gregs[CXT_A3] = 0; \
89     _MD_SET_CURRENT_THREAD(_thread);      \
90     errno = (_thread)->md.errcode;        \
91     setcontext(uc);                    \
92 }
93
94 /* Machine-dependent (MD) data structures */
95
96 struct _MDThread {
97     PR_CONTEXT_TYPE context;
98     int id;
99     int errcode;
100 };
101
102 struct _MDThreadStack {
103     PRInt8 notused;
104 };
105
106 struct _MDLock {
107     PRInt8 notused;
108 };
109
110 struct _MDSemaphore {
111     PRInt8 notused;
112 };
113
114 struct _MDCVar {
115     PRInt8 notused;
116 };
117
118 struct _MDSegment {
119     PRInt8 notused;
120 };
121
122 /*
123  * md-specific cpu structure field
124  */
125 #define _PR_MD_MAX_OSFD FD_SETSIZE
126
127 struct _MDCPU_Unix {
128     PRCList ioQ;
129     PRUint32 ioq_timeout;
130     PRInt32 ioq_max_osfd;
131     PRInt32 ioq_osfd_cnt;
132 #ifndef _PR_USE_POLL
133     fd_set fd_read_set, fd_write_set, fd_exception_set;
134     PRInt16 fd_read_cnt[_PR_MD_MAX_OSFD],fd_write_cnt[_PR_MD_MAX_OSFD],
135                                 fd_exception_cnt[_PR_MD_MAX_OSFD];
136 #else
137         struct pollfd *ioq_pollfds;
138         int ioq_pollfds_size;
139 #endif  /* _PR_USE_POLL */
140 };
141
142 #define _PR_IOQ(_cpu)                   ((_cpu)->md.md_unix.ioQ)
143 #define _PR_ADD_TO_IOQ(_pq, _cpu) PR_APPEND_LINK(&_pq.links, &_PR_IOQ(_cpu))
144 #define _PR_FD_READ_SET(_cpu)           ((_cpu)->md.md_unix.fd_read_set)
145 #define _PR_FD_READ_CNT(_cpu)           ((_cpu)->md.md_unix.fd_read_cnt)
146 #define _PR_FD_WRITE_SET(_cpu)          ((_cpu)->md.md_unix.fd_write_set)
147 #define _PR_FD_WRITE_CNT(_cpu)          ((_cpu)->md.md_unix.fd_write_cnt)
148 #define _PR_FD_EXCEPTION_SET(_cpu)      ((_cpu)->md.md_unix.fd_exception_set)
149 #define _PR_FD_EXCEPTION_CNT(_cpu)      ((_cpu)->md.md_unix.fd_exception_cnt)
150 #define _PR_IOQ_TIMEOUT(_cpu)           ((_cpu)->md.md_unix.ioq_timeout)
151 #define _PR_IOQ_MAX_OSFD(_cpu)          ((_cpu)->md.md_unix.ioq_max_osfd)
152 #define _PR_IOQ_OSFD_CNT(_cpu)          ((_cpu)->md.md_unix.ioq_osfd_cnt)
153 #define _PR_IOQ_POLLFDS(_cpu)           ((_cpu)->md.md_unix.ioq_pollfds)
154 #define _PR_IOQ_POLLFDS_SIZE(_cpu)      ((_cpu)->md.md_unix.ioq_pollfds_size)
155
156 #define _PR_IOQ_MIN_POLLFDS_SIZE(_cpu)  32
157
158 struct _MDCPU {
159     struct _MDCPU_Unix md_unix;
160 };
161
162 #define _MD_INIT_LOCKS()
163 #define _MD_NEW_LOCK(lock) PR_SUCCESS
164 #define _MD_FREE_LOCK(lock)
165 #define _MD_LOCK(lock)
166 #define _MD_UNLOCK(lock)
167 #define _MD_INIT_IO()
168 #define _MD_IOQ_LOCK()
169 #define _MD_IOQ_UNLOCK()
170
171 #define _MD_EARLY_INIT                  _MD_EarlyInit
172 #define _MD_FINAL_INIT                  _PR_UnixInit
173 #define _MD_INIT_RUNNING_CPU(cpu)       _MD_unix_init_running_cpu(cpu)
174 #define _MD_INIT_THREAD                 _MD_InitializeThread
175 #define _MD_EXIT_THREAD(thread)
176 #define _MD_SUSPEND_THREAD(thread)
177 #define _MD_RESUME_THREAD(thread)
178 #define _MD_CLEAN_THREAD(_thread)
179
180 /* The following defines unwrapped versions of select() and poll(). */
181 extern int _select (int, fd_set *, fd_set *, fd_set *, struct timeval *);
182 #define _MD_SELECT              _select
183
184 #include <sys/poll.h>
185 extern int _poll(struct pollfd *fds, unsigned long nfds, int timeout);
186 #define _MD_POLL _poll
187  
188 #endif /* _PR_LOCAL_THREADS_ONLY */
189  
190 #undef  HAVE_STACK_GROWING_UP
191 #define HAVE_DLL
192 #define USE_DLFCN
193 #define NEED_TIME_R
194 #define NEED_STRFTIME_LOCK
195  
196 /*
197 ** Missing function prototypes
198 */
199 extern int gethostname(char *name, int namelen);
200  
201 #endif /* nspr_sony_defs_h___ */