Updated PCI IDs to latest snapshot.
[tangerine.git] / rom / dos / dopkt.c
blob292804bb8ea859c1fa05a1d76e81bb092980c48c
1 /*
2 Copyright © 1995-2009, The AROS Development Team. All rights reserved.
3 $Id$
5 Desc:
6 Lang: English
7 */
8 #ifdef DEBUG
9 #undef DEBUG
10 #endif
11 #define DEBUG 0
12 #include <aros/debug.h>
13 #include "dos_intern.h"
15 /*****************************************************************************
17 NAME */
18 #include <proto/dos.h>
20 AROS_LH7(LONG, DoPkt,
22 /* SYNOPSIS */
23 AROS_LHA(struct MsgPort *, port, D1),
24 AROS_LHA(LONG , action, D2),
25 AROS_LHA(LONG , arg1, D3),
26 AROS_LHA(LONG , arg2, D4),
27 AROS_LHA(LONG , arg3, D5),
28 AROS_LHA(LONG , arg4, D6),
29 AROS_LHA(LONG , arg5, D7),
31 /* LOCATION */
32 struct DosLibrary *, DOSBase, 40, Dos)
34 /* FUNCTION
36 Send a dos packet to a filesystem and wait for the action to complete.
38 INPUTS
40 RESULT
42 NOTES
44 Callable from a task.
46 This function should NOT be used; it's only here for AmigaOS compatibility.
48 EXAMPLE
50 BUGS
52 SEE ALSO
54 INTERNALS
56 *****************************************************************************/
58 AROS_LIBFUNC_INIT
61 * First I create a regular dos packet and then let
62 * SendPkt rewrite it.
65 LONG res;
66 struct Process *me = (struct Process *)FindTask(NULL);
67 struct DosPacket *dp = (struct DosPacket *)AllocDosObject(DOS_STDPKT,
68 NULL);
69 struct MsgPort *replyPort;
71 BOOL i_am_process = TRUE;
73 if (NULL == dp)
75 return FALSE;
78 kprintf("Allocated packet %p\n", dp);
80 if (__is_process(me))
82 replyPort = &me->pr_MsgPort;
84 else
86 /* Make sure that tasks can use DoPkt(). */
87 replyPort = CreateMsgPort();
89 if (NULL == replyPort)
91 return FALSE;
94 i_am_process = FALSE;
97 dp->dp_Type = action;
98 dp->dp_Arg1 = arg1;
99 dp->dp_Arg2 = arg2;
100 dp->dp_Arg3 = arg3;
101 dp->dp_Arg4 = arg4;
102 dp->dp_Arg5 = arg5;
104 SendPkt(dp, port, replyPort);
106 internal_WaitPkt(replyPort, DOSBase);
108 SetIoErr(dp->dp_Res2);
109 res = dp->dp_Res1;
111 if (FALSE == i_am_process)
113 DeleteMsgPort(replyPort);
116 FreeDosObject(DOS_STDPKT, dp);
118 return res;
120 AROS_LIBFUNC_EXIT
121 } /* DoPkt */