15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The contents of this file are subject to the Mozilla Public
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * License Version 1.1 (the "License"); you may not use this file
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * except in compliance with the License. You may obtain a copy of
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the License at http://www.mozilla.org/MPL/
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Software distributed under the License is distributed on an "AS
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * implied. See the License for the specific language governing
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * rights and limitations under the License.
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The Original Code is the Netscape Portable Runtime (NSPR).
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The Initial Developer of the Original Code is Netscape
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Communications Corporation.  Portions created by Netscape are
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (C) 1998-2000 Netscape Communications Corporation.  All
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Rights Reserved.
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Contributor(s):
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Alternatively, the contents of this file may be used under the
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * terms of the GNU General Public License Version 2 or later (the
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * "GPL"), in which case the provisions of the GPL are applicable
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * instead of those above.  If you wish to allow use of your
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * version of this file only under the terms of the GPL and not to
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * allow others to use your version of this file under the MPL,
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * indicate your decision by deleting the provisions above and
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * replace them with the notice and other provisions required by
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the GPL.  If you do not delete the provisions above, a recipient
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * may use your version of this file under either the MPL or the
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * GPL.
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef prmacos_h___
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define prmacos_h___
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file contains all changes and additions which need to be made to the NSPR runtime
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// for the Macintosh platform (specifically the Metrowerks environment).  This file should
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// only be incluced in Macintosh builds.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_DLL_SUFFIX		""
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _PR_LOCAL_THREADS_ONLY
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _PR_NO_PREEMPT	1
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _PR_HAVE_ATOMIC_OPS 1
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "prinit.h"
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "prio.h"
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "prlong.h"
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "prlock.h"
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "prcvar.h"
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "prsem.h"
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "prthread.h"
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "prtime.h"
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "prproces.h"
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(MAC_NSPR_STANDALONE)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "macstdlibextras.h"
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stddef.h>
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <setjmp.h>
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <Errors.h>
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <OpenTransport.h>
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <DriverServices.h>
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _PR_HAVE_PEEK_BUFFER
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _PR_PEEK_BUFFER_MAX (16 * 1024)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _PR_FD_NEED_EMULATE_MSG_PEEK(fd) 1
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct _MDProcess {
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRInt8 notused;
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct _MDThread {
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    jmp_buf      jb;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int          osErrCode;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	PRLock *     asyncIOLock;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	PRCondVar *  asyncIOCVar;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRBool       missedIONotify;
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRBool       missedAsyncNotify;
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRBool       asyncNotifyPending;
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct _MDThreadStack {
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRInt8 notused;
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct _MDLock {
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRInt8 notused;
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct _MDCVar {
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRInt8 notused;
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct _MDSemaphore {
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRInt8 notused;
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct _MDSegment {
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRInt8 notused;
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct _MDCPU {
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AbsoluteTime    lastThreadSwitch;
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AbsoluteTime    lastWakeUpProcess;
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRBool          trackScheduling;
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct _MDSocketCallerInfo {
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	PRThread *	thread;
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	void *		cookie;
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} _MDSocketCallerInfo;
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct _MDFileDesc {
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRInt32         osfd;
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRPackedBool    orderlyDisconnect;
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRPackedBool    readReady;
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRPackedBool    writeReady;
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRPackedBool    exceptReady;
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRLock *        miscLock;
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /* Server sockets: listen bit tells the notifier func what to do */
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRBool          doListen;
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /* stored error for non-blocking connects, as a Unix-style error code */
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    OTReason        disconnectError;
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    _MDSocketCallerInfo  misc;
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    _MDSocketCallerInfo  read;
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    _MDSocketCallerInfo  write;
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Iinitialization Related definitions
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_EARLY_INIT		_MD_EarlyInit
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_FINAL_INIT		_MD_FinalInit
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Interrupts Related definitions
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GET_INTSOFF()               (_pr_intsOff)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INTSOFF(_is)                                  \
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_BEGIN_MACRO                                        \
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ENTER_CRITICAL_REGION();                          \
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        (_is) = _PR_MD_GET_INTSOFF();                     \
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        _PR_MD_SET_INTSOFF(1);                            \
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        LEAVE_CRITICAL_REGION();                          \
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_END_MACRO
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if TARGET_CARBON
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void _MD_SetIntsOff(PRInt32 ints);
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SET_INTSOFF(_val)           _MD_SetIntsOff(_val)
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else /* not TARGET_CARBON */
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SET_INTSOFF(_val)           (_pr_intsOff = _val)
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* TARGET_CARBON */
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_START_INTERRUPTS			_MD_StartInterrupts
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_STOP_INTERRUPTS	    		_MD_StopInterrupts
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_BLOCK_CLOCK_INTERRUPTS()
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_UNBLOCK_CLOCK_INTERRUPTS()
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_DISABLE_CLOCK_INTERRUPTS()
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_ENABLE_CLOCK_INTERRUPTS()
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** CPU Related definitions
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_PAUSE_CPU		_MD_PauseCPU
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_CLEANUP_BEFORE_EXIT()
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_EXIT(status)	exit(status)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INIT_CPUS()
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INIT_RUNNING_CPU(cpu) _MD_InitRunningCPU(cpu)
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Process Related definitions
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern struct PRProcess * _MD_CreateProcess(
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *path,
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    char *const *argv,
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    char *const *envp,
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const PRProcessAttr *attr);
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_CREATE_PROCESS _MD_CreateProcess
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_DetachProcess(PRProcess *process);
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_DETACH_PROCESS _MD_DetachProcess
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_WaitProcess(PRProcess *process, PRInt32 *exitCode);
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_WAIT_PROCESS _MD_WaitProcess
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_KillProcess(PRProcess *process);
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_KILL_PROCESS _MD_KillProcess
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Memory Segments Related definitions
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INIT_SEGS()
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Thread Stacks Debugging Related definitions
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INIT_STACK		_MD_InitStack
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_CLEAR_STACK		_MD_ClearStack
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Locks Related definitions
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INIT_LOCKS()
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_NEW_LOCK(lock) (PR_SUCCESS)
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_FREE_LOCK(lock)
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_LOCK(lock)
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_UNLOCK(lock)
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Thread Related definitions
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NSPR_API(PRThread *) PR_GetPrimaryThread();
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(powerc) || defined(__powerc)
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GET_PC(_t) (*((PRUint32 *)((_t)->md.jb)))
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GET_SP(_t) (*((PRUint32 *)((_t)->md.jb) + 2))
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GET_TOC(_t) (*((PRUint32 *)((_t)->md.jb) + 3))
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define INIT_STACKPTR(stackTop) ((unsigned char*)stackTop - 128)
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_NUM_GCREGS 70
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GET_PC(_t) (*((PRUint32 *)((_t)->md.jb) + 6))
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GET_SP(_t) (*((PRUint32 *)((_t)->md.jb) + 12))
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define INIT_STACKPTR(stackTop) ((unsigned char*)stackTop - 4)
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_NUM_GCREGS 13
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_DEFAULT_STACK_SIZE (58 * 1024)
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_MINIMUM_STACK_SIZE (58 * 1024)
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Initialize the thread machine dependent data structure
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_InitThread(PRThread *thread);
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INIT_THREAD	_MD_InitThread
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Clean-up the thread machine dependent data structure
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	_MD_CLEAN_THREAD(_thread)						\
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_BEGIN_MACRO				      					\
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	PR_DestroyCondVar(_thread->md.asyncIOCVar);			\
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	PR_DestroyLock(_thread->md.asyncIOLock);			\
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_END_MACRO
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Initialize the thread context preparing it to execute _main.
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** *sp = 0 zeros out the sp for the first stack frame so that
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** stack walking code can find the top of the stack.
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(powerc) || defined(__powerc)
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INIT_CONTEXT(_thread, _sp, _main, _status)	\
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_BEGIN_MACRO				      					\
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 	unsigned char *sp;									\
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 	unsigned long *tvect;								\
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	long **jb = (_thread)->md.jb;		      			\
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    *((PRBool *)_status) = PR_TRUE;              		\
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	(void) setjmp(jb);			      					\
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sp = INIT_STACKPTR(_sp);							\
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    *sp = 0;                                            \
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    (_MD_GET_SP(_thread)) = (long) sp;   				\
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	tvect = (unsigned long *)_main;						\
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    (_MD_GET_PC(_thread)) = (int) *tvect;   			\
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    (_MD_GET_TOC(_thread)) = (int) *(tvect+1);   		\
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	_thread->no_sched = 0;                              \
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_END_MACRO
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INIT_CONTEXT(_thread, _sp, _main, _status)	\
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_BEGIN_MACRO				      					\
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 	unsigned char *sp;									\
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	long **jb = (_thread)->md.jb;		      			\
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    *((PRBool *)_status) = PR_TRUE;              		\
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	(void) setjmp(jb);			      					\
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sp = INIT_STACKPTR(_sp);							\
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    (_MD_GET_SP(_thread)) = (long) sp;   				\
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    (_MD_GET_PC(_thread)) = (int) _main;   				\
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	_thread->no_sched = 0;                              \
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_END_MACRO
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Switch away from the current thread context by saving its state and
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** calling the thread scheduler. Reload cpu when we come back from the
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** context switch because it might have changed.
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*    	ResetTimer();	before _PR_Schedule()		   		*/
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SWITCH_CONTEXT(_thread)                                 \
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_BEGIN_MACRO                                                  \
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_ASSERT(_thread->no_sched);                                   \
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!setjmp(_thread->md.jb)) {                                  \
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        _MD_SET_LAST_THREAD(_thread);                               \
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (_PR_MD_CURRENT_CPU()->md.trackScheduling)               \
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            _PR_MD_CURRENT_CPU()->md.lastThreadSwitch = UpTime();   \
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        _PR_Schedule();                                             \
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {                                                        \
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        PR_ASSERT(_MD_LAST_THREAD() !=_MD_CURRENT_THREAD());        \
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        _MD_LAST_THREAD()->no_sched = 0;                            \
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }                                                               \
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_END_MACRO
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Restore a thread context that was saved by _MD_SWITCH_CONTEXT or
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** initialized by _MD_INIT_CONTEXT.
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_RESTORE_CONTEXT(_newThread)	    \
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_BEGIN_MACRO			    			\
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	long **jb = (_newThread)->md.jb;	    \
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	_MD_SET_CURRENT_THREAD(_newThread); 	\
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    _newThread->no_sched = 1;		        \
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	longjmp(jb, 1);			    			\
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PR_END_MACRO
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_ERRNO()	 _MD_CURRENT_THREAD()->md.osErrCode
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_wait(PRThread *thread, PRIntervalTime timeout);
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_WAIT	_MD_wait
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Combined thread model related definitions
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_CREATE_THREAD(a,b,c,d,e,f) (PR_SUCCESS)
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_WAKEUP_WAITER(a)
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SET_PRIORITY(a,b)
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** File I/O Related definitions
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRInt32 _PR_MD_WRITE_SYNC(PRFileDesc *fd, void *buf, PRInt32 amount);
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define    _PR_MD_WRITE_SYNC _MD_WRITE_SYNC
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct _MDDir {
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	short		ioVRefNum;
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	long		ioDirID;
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	short		ioFDirIndex;
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	char		*currentEntryName;
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_DIRECTORY_SEPARATOR		'/'
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_DIRECTORY_SEPARATOR_STR	"/"
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_PATH_SEPARATOR		':'
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_PATH_SEPARATOR_STR		":"
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef enum IOOperation {
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    READ_ASYNC,
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WRITE_ASYNC
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} IOOperation;
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INIT_IO()
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_OPEN 					_MD_Open
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_OPEN_FILE 				_MD_Open
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_CLOSE_FILE 				FSClose
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_READ(fd,buf,amount) 	ReadWriteProc(fd,buf,amount,READ_ASYNC)
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_WRITE(fd,buf,amount) 	ReadWriteProc(fd,buf,amount,WRITE_ASYNC)
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_WRITE_SYNC(fd,buf,amount) WriteSyncProc(fd,buf,amount)
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GET_FILE_ERROR() 		_PR_MD_CURRENT_THREAD()->md.osErrCode
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_LSEEK 					_MD_LSeek
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_FSYNC 					_MD_FSync
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* to be implemented */
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_LSEEK64(a,b,c)           LL_ZERO
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GETOPENFILEINFO64(fd,info)   -1
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GETFILEINFO64(fd,info)   -1
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_IOQ_LOCK()
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_IOQ_UNLOCK()
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** File Manipulation definitions
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	_MD_RENAME 			_MD_Rename
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	_MD_ACCESS 			_MD_Access
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	_MD_GETFILEINFO 	_MD_GetFileInfo
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	_MD_GETOPENFILEINFO _MD_GetOpenFileInfo
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	_MD_STAT 			_MD_Stat
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	_MD_DELETE 			_MD_Delete
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_LockFile(PRInt32 osfd);
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	_MD_LOCKFILE 		_MD_LockFile
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_TLockFile(PRInt32 osfd);
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	_MD_TLOCKFILE 		_MD_TLockFile
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_UnlockFile(PRInt32 osfd);
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	_MD_UNLOCKFILE		_MD_UnlockFile
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Directory enumeration related definitions
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_OpenDir(struct _MDDir *md,const char *name);
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	_MD_OPEN_DIR 		_MD_OpenDir
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern char* _MD_ReadDir(struct _MDDir *md,PRIntn flags);
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	_MD_READ_DIR 		_MD_ReadDir
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	_MD_CLOSE_DIR 		_MD_CloseDir
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	_MD_MKDIR 			_MD_MkDir
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	_MD_MAKE_DIR		_MD_MkDir
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	_MD_RMDIR 			_MD_Delete
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Pipe I/O Related definitions (not implemented)
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_PIPEAVAILABLE(fd) -1
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Socket I/O Related definitions
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if UNIVERSAL_INTERFACES_VERSION >= 0x0330
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* In Universal Interfaces 3.3 and later, these are enums. */
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IP_TTL IP_TTL
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IP_TOS IP_TOS
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IP_ADD_MEMBERSHIP IP_ADD_MEMBERSHIP
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IP_DROP_MEMBERSHIP IP_DROP_MEMBERSHIP
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IP_MULTICAST_IF IP_MULTICAST_IF
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IP_MULTICAST_TTL IP_MULTICAST_TTL
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IP_MULTICAST_LOOP IP_MULTICAST_LOOP
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TCP_NODELAY TCP_NODELAY
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TCP_MAXSEG TCP_MAXSEG
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SOCKET 			_MD_socket
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_BIND			_MD_bind
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_LISTEN			_MD_listen
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GETSOCKNAME		_MD_getsockname
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_getsockopt(PRFileDesc *fd, PRInt32 level, PRInt32 optname, char* optval, PRInt32* optlen);
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GETSOCKOPT		_MD_getsockopt
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_setsockopt(PRFileDesc *fd, PRInt32 level, PRInt32 optname, const char* optval, PRInt32 optlen);
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SETSOCKOPT		_MD_setsockopt
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SOCKETAVAILABLE	_MD_socketavailable
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_ACCEPT			_MD_accept
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_CONNECT			_MD_connect
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SEND			_MD_send
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_RECV			_MD_recv
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_CLOSE_SOCKET	_MD_closesocket
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SENDTO			_MD_sendto
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_RECVFROM		_MD_recvfrom
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_PR_POLL			_MD_poll
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INIT_FILEDESC	_MD_initfiledesc
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_FREE_FILEDESC	_MD_freefiledesc
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_MAKE_NONBLOCK	_MD_makenonblock
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INIT_FD_INHERITABLE _MD_initfdinheritable
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_QUERY_FD_INHERITABLE _MD_queryfdinheritable
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GET_SOCKET_ERROR() 		_PR_MD_CURRENT_THREAD()->md.osErrCode
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _PR_MD_MAP_SELECT_ERROR(x) 	(x)
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Netdb Related definitions
4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_gethostname(char *name, int namelen);
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GETHOSTNAME		_MD_gethostname
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _PR_GET_HOST_ADDR_AS_NAME
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	XXX _MD_WRITEV, _MD_SHUTDOWN & _MD_GETPEERNAME not done yet!!!
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_WRITEV			_MD_writev
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SHUTDOWN		_MD_shutdown
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GETPEERNAME		_MD_getpeername
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef OLD_MACSOCK_LIBRARY
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SOCKET 			macsock_socket
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_LISTEN			macsock_listen
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SEND(fd,buf,amount,flags,timeout)	macsock_send(fd->secret->md.osfd,buf,amount,flags)
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SENDTO(fd,buf,amount,flags,addr,addrlen,timeout)	macsock_sendto(fd->secret->md.osfd,buf,amount,flags,(struct sockaddr *)addr,addrlen)
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_RECV(fd,buf,amount,flags,timeout)	macsock_recv(fd->secret->md.osfd,buf,amount,flags)
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_RECVFROM(fd,buf,amount,flags,addr,addrlen,timeout)	macsock_recvfrom(fd->secret->md.osfd,buf,amount,flags,(struct sockaddr *)addr,addrlen)
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_CLOSE_SOCKET	macsock_close
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SHUTDOWN(a,b)	(0)
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_ACCEPT(fd,addr,addrlen,timeout)	macsock_accept(fd->secret->md.osfd,(struct sockaddr *)addr,addrlen)
5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_CONNECT(fd,name,namelen,timeout)	macsock_connect(fd->secret->md.osfd,(struct sockaddr *)name,namelen)
5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_BIND(fd,name,namelen)				macsock_bind(fd->secret->md.osfd,(struct sockaddr *)name,namelen)
5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GETSOCKNAME(fd,name,namelen)		macsock_getsockname(fd->secret->md.osfd,(struct sockaddr *)name,namelen)
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GETPEERNAME(fd,name,namelen)		macsock_getpeername(fd->secret->md.osfd,(struct sockaddr *)name,namelen)
5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GETSOCKOPT(fd,level,optname,optval,optlen)		macsock_getsockopt(fd->secret->md.osfd,level,optname,optval,optlen)
5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SETSOCKOPT(fd,level,optname,optval,optlen)		macsock_setsockopt(fd->secret->md.osfd,level,optname,optval,optlen)
5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SOCKETAVAILABLE(fd,bytes)		macsock_socketavailable(fd->secret->md.osfd,bytes)
5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Memory Segements Related definitions
5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INIT_SEGS()
5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_ALLOC_SEGMENT	_MD_AllocSegment
5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_FREE_SEGMENT	_MD_FreeSegment
5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Time Related definitions
5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GET_INTERVAL 				_MD_GetInterval
5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INTERVAL_PER_SEC() 			PR_MSEC_PER_SEC
5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INTERVAL_INIT()
5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Environemnt Related definitions
5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern char *_MD_GetEnv(const char *name);
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GET_ENV			_MD_GetEnv
5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern int _MD_PutEnv(const char *variableCopy);
5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_PUT_ENV			_MD_PutEnv
5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Following is old stuff to be looked at.
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define GCPTR
5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CALLBACK
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int (*FARPROC)();
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAX_NON_PRIMARY_TIME_SLICES 	6
5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern long gTimeSlicesOnNonPrimaryThread;
5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern struct PRThread *gPrimaryThread;
5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Errors not found in the Mac StdCLib
5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define EACCES  		13      	// Permission denied
5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ENOENT			-43			// No such file or directory
5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _OS_INVALID_FD_VALUE -1
5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	STDERR_FILENO	2
5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(MAC_NSPR_STANDALONE)
5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PATH_SEPARATOR 					':'
5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PATH_SEPARATOR_STR		        ":"
5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define DIRECTORY_SEPARATOR				'/'
5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define DIRECTORY_SEPARATOR_STR			"/"
5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UNIX_THIS_DIRECTORY_STR			"./"
5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UNIX_PARENT_DIRECTORY_STR		"../"
5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Alias a few names
5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define getenv	PR_GetEnv
5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define putenv	_MD_PutEnv
5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(MAC_NSPR_STANDALONE)
5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned char (*MemoryCacheFlusherProc)(size_t size);
5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void (*PreAllocationHookProc)(void);
5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern char *strdup(const char *source);
5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void InstallPreAllocationHook(PreAllocationHookProc newHook);
5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void InstallMemoryCacheFlusher(MemoryCacheFlusherProc newFlusher);
5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern char *PR_GetDLLSearchPath(void);
5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(MAC_NSPR_STANDALONE)
5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern int strcmp(const char *str1, const char *str2);
5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern int strcasecmp(const char *str1, const char *str2);
5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void MapFullToPartialMacFile(char *);
5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern char *MapPartialToFullMacFile(const char *);
5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void ResetTimer(void);
5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void PR_PeriodicIdle(void);
6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void ActivateTimer(void);
6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void DeactivateTimer(void);
6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void PR_InitMemory(void);
6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern struct hostent *gethostbyaddr(const void *addr, int addrlen, int type);
6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern short GetVolumeRefNumFromName(const char *);
6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdio.h>			// Needed to get FILE typedef
6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern FILE *_OS_FOPEN(const char *filename, const char *mode);
6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//	Macintosh only private parts.
6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	dprintTrace			";dprintf;doTrace"
6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	dprintNoTrace		";dprintf"
6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void dprintf(const char *format, ...);
6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Entry into the memory system's cache flushing
6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(MAC_NSPR_STANDALONE)
6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRUint8 CallCacheFlushers(size_t blockSize);
6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(MAC_NSPR_STANDALONE)
6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void* reallocSmaller(void* block, size_t newSize);
6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** PR_GetSystemInfo related definitions
6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _PR_SI_SYSNAME          "MacOS"
6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _PR_SI_ARCHITECTURE     "PowerPC"
6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Memory-mapped files
6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct _MDFileMap {
6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRInt8 unused;
6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_CreateFileMap(struct PRFileMap *fmap, PRInt64 size);
6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_CREATE_FILE_MAP _MD_CreateFileMap
6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRInt32 _MD_GetMemMapAlignment(void);
6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GET_MEM_MAP_ALIGNMENT _MD_GetMemMapAlignment
6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void * _MD_MemMap(struct PRFileMap *fmap, PRInt64 offset,
6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        PRUint32 len);
6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_MEM_MAP _MD_MemMap
6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_MemUnmap(void *addr, PRUint32 size);
6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_MEM_UNMAP _MD_MemUnmap
6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_CloseFileMap(struct PRFileMap *fmap);
6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_CLOSE_FILE_MAP _MD_CloseFileMap
6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void SetLogFileTypeCreator(const char *logFile);
6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern int _MD_mac_get_nonblocking_connect_error(PRFileDesc* fd);
6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Critical section support
6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAC_CRITICAL_REGIONS  TARGET_CARBON
6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if MAC_CRITICAL_REGIONS
6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void InitCriticalRegion();
6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void TermCriticalRegion();
6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void EnterCritialRegion();
6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void LeaveCritialRegion();
6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define INIT_CRITICAL_REGION()     InitCriticalRegion()
6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TERM_CRITICAL_REGION()     TermCriticalRegion()
6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ENTER_CRITICAL_REGION()     EnterCritialRegion()
6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEAVE_CRITICAL_REGION()     LeaveCritialRegion()
6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define INIT_CRITICAL_REGION()
6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TERM_CRITICAL_REGION()
6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ENTER_CRITICAL_REGION()
6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEAVE_CRITICAL_REGION()
6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * CPU Idle support
6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void InitIdleSemaphore();
7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void TermIdleSemaphore();
7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void WaitOnIdleSemaphore();
7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void SignalIdleSemaphore();
7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Atomic operations
7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef _PR_HAVE_ATOMIC_OPS
7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRInt32 _MD_AtomicSet(PRInt32 *val, PRInt32 newval);
7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INIT_ATOMIC()
7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_ATOMIC_INCREMENT(val)   OTAtomicAdd32(1, (SInt32 *)val)
7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_ATOMIC_ADD(ptr, val)    OTAtomicAdd32(val, (SInt32 *)ptr)
7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_ATOMIC_DECREMENT(val)   OTAtomicAdd32(-1, (SInt32 *)val)
7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_ATOMIC_SET(val, newval) _MD_AtomicSet(val, newval)
7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* _PR_HAVE_ATOMIC_OPS */
7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* prmacos_h___ */
723