#ifndef STORMPROTOS_POWERPC_SPROTOS_H
#define STORMPROTOS_POWERPC_SPROTOS_H

/*
**  $VER: powerpc_sprotos.h 2.0 (15.03.98)
**  WarpOS Release 14.1
**
**  '(C) Copyright 1998 Haage & Partner Computer GmbH'
**       All Rights Reserved
*/


#ifndef UTILITY_TAGITEM_H
#include <utility/tagitem.h>
#endif

#ifndef DEVICES_TIMER_H
#include <devices/timer.h>
#endif

#ifndef POWERPC_PORTSPPC_H
#include <powerpc/portsPPC.h>
#endif

#ifndef POWERPC_TASKS_H
#include <powerpc/tasksppc.h>
#endif

#ifndef POWERPC_SEMAPHORES_H
#include <powerpc/semaphoresppc.h>
#endif

#ifdef __PPC__

/*
Attention: The names for this PPC functions (all have a suffix "_" 
           are subject to change. As soon as the StormC PPC compiler 
           is able to add the "struct Library *" by default for 
           shared library functions the names will loose the suffix.

           Please use the __inline functions from the end of this file.           
*/

extern "AmigaLib" PowerPCBase {

        /* *** call 68K */
        ULONG Run68K_(struct Library *, struct PPCArgs *) = -300;
        ULONG WaitFor68K_(struct Library *, struct PPCArgs *) = -306;
        
        /* *** debugging */
        VOID SPrintF_(struct Library *, STRPTR, APTR) = -312;

        /* *** memory */
        APTR AllocVecPPC_(struct Library *, ULONG, ULONG, ULONG) = -324;
        LONG FreeVecPPC_(struct Library *, APTR) = -330;

        /* *** time measurement */
        VOID GetSysTimePPC_(struct Library*, struct timeval *) = -684;
        VOID AddTimePPC_(struct Library*, struct timeval *, struct timeval *) = -690;
        VOID SubTimePPC_(struct Library*, struct timeval *, struct timeval *) = -696;
        LONG CmpTimePPC_(struct Library*, struct timeval *, struct timeval *) = -702;
        
#ifndef POWERPCLIB_V7
        /* *** more debugging */
        ULONG SnoopTask_(struct Library *, struct TagItem *) = -714;
/*      ULONG SnoopTaskTags_(struct Library *, Tag tag1, ...) = -714; */
        VOID EndSnoopTask_(struct Library *, ULONG) = -720;

        /* *** more memory */
        VOID FreeAllMem_(struct Library *) = -654;
        VOID CopyMemPPC_(struct Library *, APTR, APTR, ULONG) = -660;

        /* *** lists */
        VOID AddHeadPPC_(struct Library *, struct List *, struct Node *) = -408;
        VOID AddTailPPC_(struct Library *, struct List *, struct Node *) = -414;
        VOID EnqueuePPC_(struct Library *, struct List *, struct Node *) = -438;
        struct Node *FindNamePPC_(struct Library *, struct List *, STRPTR) = -444;
        VOID InsertPPC_(struct Library *, struct Node *, struct Node *) = -402;
        struct Node *RemHeadPPC_(struct Library *, struct List *) = -426;
        VOID RemovePPC_(struct Library *, struct Node *) = -420;
        struct Node *RemTailPPC_(struct Library *, struct Node *) = -432;
        
        /* *** semaphores */
        VOID AddSemaphorePPC_(struct Library *, struct SignalSemaphorePPC *) = -366;
        LONG AttemptSemaphorePPC_(struct Library *, struct SignalSemaphorePPC *) = -384;
        struct SignalSemaphorePPC *FindSemaphorePPC_(struct Library *, STRPTR) = -396;
        VOID FreeSemaphorePPC_(struct Library *, struct SignalSemaphorePPC *) = -360;
        LONG InitSemaphorePPC_(struct Library *, struct SignalSemaphorePPC *) = -354;
        VOID ObtainSemaphorePPC_(struct Library *, struct SignalSemaphorePPC *) = -378;
        VOID ReleaseSemaphorePPC_(struct Library *, struct SignalSemaphorePPC *) = -390;
        VOID RemSemaphorePPC_(struct Library *, struct SignalSemaphorePPC *) = -372;
        
        /* *** signals */
        LONG AllocSignalPPC_(struct Library *, LONG) = -468;
        VOID FreeSignalPPC_(struct Library *, LONG) = -474;
        ULONG SetSignalPPC_(struct Library *, ULONG, ULONG) = -480;
        VOID SignalPPC_(struct Library *, struct TaskPPC *, ULONG) = -486;
        ULONG WaitPPC_(struct Library *, ULONG) = -492;
        ULONG WaitTime_(struct Library *, ULONG, ULONG) = -552;
        
        /* *** tasks */
        struct TaskPPC *CreateTaskPPC_(struct Library *, struct TagItem *) = -336;
/*      struct TaskPPC *CreateTaskPPCTags_(struct Library *, Tag tag1, ...) = -336; */
        VOID DeleteTaskPPC_(struct Library *, struct TaskPPC *) = -342;
        struct TaskPPC *FindTaskPPC_(struct Library *, STRPTR) = -348;
        struct TaskPtr *LockTaskList_(struct Library *) = -564;
        LONG SetTaskPriPPC_(struct Library *, struct TaskPPC *, LONG) = -498;
        VOID UnLockTaskList_(struct Library *) = -570;
        struct TaskPPC *FindTaskByID_(struct Library *, LONG) = -738;
        LONG SetNiceValue_(struct Library *, struct TaskPPC *, LONG) = -744;

        /* *** ports */
        VOID AddPortPPC_(struct Library *, struct MsgPortPPC *) = -612;
        struct MsgPortPPC *CreateMsgPortPPC_(struct Library *) = -600;
        VOID DeleteMsgPortPPC_(struct Library *, struct MsgPortPPC *) = -606;
        struct MsgPortPPC *FindPortPPC_(struct Library *, STRPTR) = -624;
        struct Message *GetMsgPPC_(struct Library *, struct MsgPortPPC *) = -642;
        VOID PutMsgPPC_(struct Library *, struct MsgPortPPC *, struct Message *) = -636;
        struct Message *WaitPortPPC_(struct Library *, struct MsgPortPPC *) = - 630;
        VOID RemPortPPC_(struct Library *, struct MsgPortPPC *) = -618;
        VOID ReplyMsgPPC_(struct Library *, struct Message *) = -648;
        struct Message *AllocXMsgPPC_(struct Library *, ULONG, struct MsgPortPPC *) = -666;
        VOID FreeXMsgPPC_(struct Library *, struct Message *) = -672;
        VOID PutXMsgPPC_(struct Library *, struct MsgPort *, struct Message *) = -678;
        struct MsgPortPPC *SetReplyPortPPC_(struct Library *, struct Message *, struct MsgPortPPC *) = -708;

        /* *** tag items */
        struct TagItem *FindTagItemPPC_(struct Library *, ULONG, struct TagItem *) = -450;
        ULONG GetTagDataPPC_(struct Library *, ULONG, ULONG, struct TagItem *) = -456;
        struct TagItem *NextTagItemPPC_(struct Library *, struct TagItem **) = -462;
        
        /* *** hardware */
        VOID ChangeMMU_(struct Library *, ULONG) = -588;
        VOID GetInfo_(struct Library *, struct TagItem *) = -594;
        VOID SetCache_(struct Library *, ULONG, APTR, ULONG) = -510;
        ULONG SetHardware_(struct Library *, ULONG, APTR) = -540;
        VOID GetHALInfo_(struct Library *, struct TagItem *) = -726;
        VOID SetScheduling_(struct Library *, struct TagItem *) = -732;
        
        /* *** exceptions */
        VOID ModifyFPExc_(struct Library *, ULONG) = -546;
        VOID RemExcHandler_(struct Library *, APTR) = -522;
        APTR SetExcHandler_(struct Library *, struct TagItem *) = -516;
/*      APTR SetExcHandlerTags_(struct Library *, Tag tag1, ...) = -516; */
        VOID SetExcMMU_(struct Library *) = -576;
        VOID ClearExcMMU_(struct Library *) = -582;
        
        /* *** supervisor */
        ULONG Super_(struct Library *) = -528;
        VOID User_(struct Library *, ULONG) = -534;
        
        /* *** 68K connection */
        VOID Signal68K_(struct Library *, struct Task *, ULONG) = -504;
        
#endif /* POWERPCLIB_V7 */
};

__inline ULONG Run68K(struct PPCArgs *a1) 
{ 
        extern struct Library *PowerPCBase;
        return Run68K_(PowerPCBase,a1); 
}
__inline ULONG WaitFor68K(struct PPCArgs *a1)
{
        extern struct Library *PowerPCBase;
        return WaitFor68K_(PowerPCBase,a1);
}
__inline VOID SPrintF(STRPTR a1, APTR a2)
{
        extern struct Library *PowerPCBase;
        SPrintF_(PowerPCBase,a1,a2);
}
__inline APTR AllocVecPPC(ULONG a1, ULONG a2, ULONG a3)
{
        extern struct Library *PowerPCBase;
        return AllocVecPPC_(PowerPCBase,a1,a2,a3);
}
__inline VOID GetSysTimePPC(struct timeval *a1)
{
        extern struct Library *PowerPCBase;
        GetSysTimePPC_(PowerPCBase,a1);
}

__inline VOID AddTimePPC(struct timeval *a1, struct timeval *a2)
{
        extern struct Library *PowerPCBase;
        AddTimePPC_(PowerPCBase,a1,a2);
}

__inline VOID SubTimePPC(struct timeval *a1, struct timeval *a2)
{
        extern struct Library *PowerPCBase;
        SubTimePPC_(PowerPCBase,a1,a2);
}

__inline LONG CmpTimePPC(struct timeval *a1, struct timeval *a2)
{
        extern struct Library *PowerPCBase;
        return CmpTimePPC_(PowerPCBase,a1,a2);
}

__inline VOID FreeVecPPC(APTR a1)
{
        extern struct Library *PowerPCBase;
        FreeVecPPC_(PowerPCBase,a1);
}

#ifndef POWERPCLIB_V7
__inline ULONG SnoopTask(struct TagItem *a1)
{
        extern struct Library *PowerPCBase;
        return SnoopTask_(PowerPCBase,a1);
}
__inline ULONG SnoopTaskTags(Tag tag1, ...)
{
        extern struct Library *PowerPCBase;
        return SnoopTask_(PowerPCBase,(struct TagItem *) &tag1);
}
__inline VOID EndSnoopTask(ULONG a1)
{
        extern struct Library *PowerPCBase;
        EndSnoopTask_(PowerPCBase,a1);
}
__inline VOID FreeAllMem()
{
        extern struct Library *PowerPCBase;
        FreeAllMem_(PowerPCBase);
}
__inline VOID CopyMemPPC(APTR a1, APTR a2, ULONG a3)
{
        extern struct Library *PowerPCBase;
        CopyMemPPC_(PowerPCBase,a1,a2,a3);
}
__inline VOID AddHeadPPC(struct List *a1, struct Node *a2)
{
        extern struct Library *PowerPCBase;
        AddHeadPPC_(PowerPCBase,a1,a2);
}
__inline VOID AddTailPPC(struct List *a1, struct Node *a2)
{
        extern struct Library *PowerPCBase;
        AddTailPPC_(PowerPCBase,a1,a2);
}
__inline VOID EnqueuePPC(struct List *a1, struct Node *a2)
{
        extern struct Library *PowerPCBase;
        EnqueuePPC_(PowerPCBase,a1,a2);
}
__inline struct Node *FindNamePPC(struct List *a1, STRPTR a2)
{
        extern struct Library *PowerPCBase;
        return FindNamePPC_(PowerPCBase,a1,a2);
}
__inline VOID InsertPPC(struct Node *a1, struct Node *a2)
{
        extern struct Library *PowerPCBase;
        InsertPPC_(PowerPCBase,a1,a2);
}
__inline struct Node *RemHeadPPC(struct List *a1)
{
        extern struct Library *PowerPCBase;
        return RemHeadPPC_(PowerPCBase,a1);
}
__inline VOID RemovePPC(struct Node *a1)
{
        extern struct Library *PowerPCBase;
        RemovePPC_(PowerPCBase,a1);
}
__inline struct Node *RemTailPPC(struct Node *a1)
{
        extern struct Library *PowerPCBase;
        return RemTailPPC_(PowerPCBase,a1);
}
__inline VOID AddSemaphorePPC(struct SignalSemaphorePPC *a1)
{
        extern struct Library *PowerPCBase;
        AddSemaphorePPC_(PowerPCBase,a1);
}
__inline LONG AttemptSemaphorePPC(struct SignalSemaphorePPC *a1)
{
        extern struct Library *PowerPCBase;
        return AttemptSemaphorePPC_(PowerPCBase,a1);
}
__inline struct SignalSemaphorePPC *FindSemaphorePPC(STRPTR a1)
{
        extern struct Library *PowerPCBase;
        return FindSemaphorePPC_(PowerPCBase,a1);
}
__inline VOID FreeSemaphorePPC(struct SignalSemaphorePPC *a1)
{
        extern struct Library *PowerPCBase;
        FreeSemaphorePPC_(PowerPCBase,a1);
}
__inline LONG InitSemaphorePPC(struct SignalSemaphorePPC *a1)
{
        extern struct Library *PowerPCBase;
        return InitSemaphorePPC_(PowerPCBase,a1);
}
__inline VOID ObtainSemaphorePPC(struct SignalSemaphorePPC *a1)
{
        extern struct Library *PowerPCBase;
        ObtainSemaphorePPC_(PowerPCBase,a1);
}
__inline VOID ReleaseSemaphorePPC(struct SignalSemaphorePPC *a1)
{
        extern struct Library *PowerPCBase;
        ReleaseSemaphorePPC_(PowerPCBase,a1);
}
__inline VOID RemSemaphorePPC(struct SignalSemaphorePPC *a1)
{
        extern struct Library *PowerPCBase;
        RemSemaphorePPC_(PowerPCBase,a1);
}
__inline LONG AllocSignalPPC(LONG a1)
{
        extern struct Library *PowerPCBase;
        return AllocSignalPPC_(PowerPCBase,a1);
}
__inline VOID FreeSignalPPC(LONG a1)
{
        extern struct Library *PowerPCBase;
        FreeSignalPPC_(PowerPCBase,a1);
}
__inline ULONG SetSignalPPC(ULONG a1, ULONG a2)
{
        extern struct Library *PowerPCBase;
        return SetSignalPPC_(PowerPCBase,a1,a2);
}
__inline VOID SignalPPC(struct TaskPPC *a1, ULONG a2)
{
        extern struct Library *PowerPCBase;
        SignalPPC_(PowerPCBase,a1,a2);
}
__inline ULONG WaitPPC(ULONG a1)
{
        extern struct Library *PowerPCBase;
        return WaitPPC_(PowerPCBase,a1);
}
__inline ULONG WaitTime(ULONG a1, ULONG a2)
{
        extern struct Library *PowerPCBase;
        return WaitTime_(PowerPCBase,a1,a2);
}
__inline struct TaskPPC *CreateTaskPPC(struct TagItem *a1)
{
        extern struct Library *PowerPCBase;
        return CreateTaskPPC_(PowerPCBase,a1);
}
__inline struct TaskPPC *CreateTaskPPCTags(Tag tag1, ...)
{
        extern struct Library *PowerPCBase;
        return CreateTaskPPC_(PowerPCBase,(struct TagItem *) &tag1);
}
__inline VOID DeleteTaskPPC(struct TaskPPC *a1)
{
        extern struct Library *PowerPCBase;
        DeleteTaskPPC_(PowerPCBase,a1);
}
__inline struct TaskPPC *FindTaskPPC(STRPTR a1)
{
        extern struct Library *PowerPCBase;
        return FindTaskPPC_(PowerPCBase,a1);
}
__inline struct TaskPtr *LockTaskList()
{
        extern struct Library *PowerPCBase;
        return LockTaskList_(PowerPCBase);
}
__inline LONG SetTaskPriPPC(struct TaskPPC *a1, LONG a2)
{
        extern struct Library *PowerPCBase;
        return SetTaskPriPPC_(PowerPCBase,a1,a2);
}
__inline VOID UnLockTaskList()
{
        extern struct Library *PowerPCBase;
        UnLockTaskList_(PowerPCBase);
}
__inline struct TaskPPC *FindTaskByID(LONG a1)
{
        extern struct Library *PowerPCBase;
        return FindTaskByID_(PowerPCBase,a1);
}
__inline LONG SetNiceValue(struct TaskPPC *a1, LONG a2)
{
        extern struct Library *PowerPCBase;
        return SetNiceValue_(PowerPCBase,a1,a2);
}
__inline VOID AddPortPPC(struct MsgPortPPC *a1)
{
        extern struct Library *PowerPCBase;
        AddPortPPC_(PowerPCBase,a1);
}
__inline struct MsgPortPPC *CreateMsgPortPPC()
{
        extern struct Library *PowerPCBase;
        return CreateMsgPortPPC_(PowerPCBase);
}
__inline VOID DeleteMsgPortPPC(struct MsgPortPPC *a1)
{
        extern struct Library *PowerPCBase;
        DeleteMsgPortPPC_(PowerPCBase,a1);
}
__inline struct MsgPortPPC *FindPortPPC(STRPTR a1)
{
        extern struct Library *PowerPCBase;
        return FindPortPPC_(PowerPCBase,a1);
}
__inline struct Message *GetMsgPPC(struct MsgPortPPC *a1)
{
        extern struct Library *PowerPCBase;
        return GetMsgPPC_(PowerPCBase,a1);
}
__inline VOID PutMsgPPC(struct MsgPortPPC *a1, struct Message *a2)
{
        extern struct Library *PowerPCBase;
        PutMsgPPC_(PowerPCBase,a1,a2);
}
__inline VOID RemPortPPC(struct MsgPortPPC *a1)
{
        extern struct Library *PowerPCBase;
        RemPortPPC_(PowerPCBase,a1);
}
__inline VOID ReplyMsgPPC(struct Message *a1)
{
        extern struct Library *PowerPCBase;
        ReplyMsgPPC_(PowerPCBase,a1);
}
__inline struct Message *AllocXMsgPPC(ULONG a1, struct MsgPortPPC *a2)
{
        extern struct Library *PowerPCBase;
        return AllocXMsgPPC_(PowerPCBase,a1,a2);
}
__inline VOID FreeXMsgPPC(struct Message *a1)
{
        extern struct Library *PowerPCBase;
        FreeXMsgPPC_(PowerPCBase,a1);
}
__inline VOID PutXMsgPPC(struct MsgPort *a1, struct Message *a2)
{
        extern struct Library *PowerPCBase;
        PutXMsgPPC_(PowerPCBase,a1,a2);
}
__inline struct MsgPortPPC *SetReplyPortPPC(struct Message *a1, struct MsgPortPPC *a2)
{
        extern struct Library *PowerPCBase;
        return SetReplyPortPPC_(PowerPCBase,a1,a2);
}
__inline struct TagItem *FindTagItemPPC(ULONG a1, struct TagItem *a2)
{
        extern struct Library *PowerPCBase;
        return FindTagItemPPC_(PowerPCBase,a1,a2);
}
__inline ULONG GetTagDataPPC(ULONG a1, ULONG a2, struct TagItem *a3)
{
        extern struct Library *PowerPCBase;
        return GetTagDataPPC_(PowerPCBase,a1,a2,a3);
}
__inline struct TagItem *NextTagItemPPC(struct TagItem **a1)
{
        extern struct Library *PowerPCBase;
        return NextTagItemPPC_(PowerPCBase,a1);
}
__inline VOID ChangeMMU(ULONG a1)
{
        extern struct Library *PowerPCBase;
        ChangeMMU_(PowerPCBase,a1);
}
__inline VOID GetInfo(struct TagItem *a1)
{
        extern struct Library *PowerPCBase;
        GetInfo_(PowerPCBase,a1);
}
__inline VOID SetCache(ULONG a1, APTR a2, ULONG a3)
{
        extern struct Library *PowerPCBase;
        SetCache_(PowerPCBase,a1,a2,a3);
}
__inline ULONG SetHardware(ULONG a1, APTR a2)
{
        extern struct Library *PowerPCBase;
        return SetHardware_(PowerPCBase,a1,a2);
}
__inline VOID GetHALInfo(struct TagItem *a1)
{
        extern struct Library *PowerPCBase;
        GetHALInfo_(PowerPCBase,a1);
}
__inline VOID SetScheduling(struct TagItem *a1)
{
        extern struct Library *PowerPCBase;
        SetScheduling_(PowerPCBase,a1);
}
__inline VOID ModifyFPExc(ULONG a1)
{
        extern struct Library *PowerPCBase;
        ModifyFPExc_(PowerPCBase,a1);
}
__inline VOID RemExcHandler(APTR a1)
{
        extern struct Library *PowerPCBase;
        RemExcHandler_(PowerPCBase,a1);
}
__inline APTR SetExcHandler(struct TagItem *a1)
{
        extern struct Library *PowerPCBase;
        return SetExcHandler_(PowerPCBase,a1);
}
__inline APTR SetExcHandlerTags(Tag tag1, ...)
{
        extern struct Library *PowerPCBase;
        return SetExcHandler_(PowerPCBase,(struct TagItem *) &tag1);
}
__inline VOID SetExcMMU()
{
        extern struct Library *PowerPCBase;
        SetExcMMU_(PowerPCBase);
}
__inline VOID ClearExcMMU()
{
        extern struct Library *PowerPCBase;
        ClearExcMMU_(PowerPCBase);
}
__inline ULONG Super()
{
        extern struct Library *PowerPCBase;
        return Super_(PowerPCBase);
}
__inline VOID User(ULONG a1)
{
        extern struct Library *PowerPCBase;
        User_(PowerPCBase,a1);
}
__inline VOID Signal68K(struct Task *a1, ULONG a2)
{
        extern struct Library *PowerPCBase;
        Signal68K_(PowerPCBase,a1,a2);
}
#endif /* POWERPCLIB_V7 */
#endif /* __PPC__ */

#endif /* STORMPROTOS_POWERPC_SPROTOS_H */
