FreeCalypso > hg > fc-tourmaline
annotate src/nucleus/pic.c @ 53:a8c8a5521073
uartfax.c: sync with Magnetite & Selenite (Tango RI output)
| author | Mychaela Falconia <falcon@freecalypso.org> | 
|---|---|
| date | Tue, 20 Oct 2020 02:16:15 +0000 | 
| parents | 4e78acac3d88 | 
| children | 
| rev | line source | 
|---|---|
| 0 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1 /*************************************************************************/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3 /* Copyright Mentor Graphics Corporation 2002 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 4 /* All Rights Reserved. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 5 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 6 /* THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION WHICH IS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 7 /* THE PROPERTY OF MENTOR GRAPHICS CORPORATION OR ITS LICENSORS AND IS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 8 /* SUBJECT TO LICENSE TERMS. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 9 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 10 /*************************************************************************/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 11 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 12 /*************************************************************************/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 13 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 14 /* FILE NAME VERSION */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 15 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 16 /* pic.c Nucleus PLUS 1.14 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 17 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 18 /* COMPONENT */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 19 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 20 /* PI - Pipe Management */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 21 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 22 /* DESCRIPTION */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 23 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 24 /* This file contains the core routines for the pipe management */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 25 /* component. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 26 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 27 /* DATA STRUCTURES */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 28 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 29 /* None */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 30 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 31 /* FUNCTIONS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 32 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 33 /* PIC_Create_Pipe Create a message pipe */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 34 /* PIC_Delete_Pipe Delete a message pipe */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 35 /* PIC_Send_To_Pipe Send message to a pipe */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 36 /* PIC_Receive_From_Pipe Receive a message from pipe */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 37 /* PIC_Cleanup Cleanup on timeout or a */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 38 /* terminate condition */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 39 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 40 /* DEPENDENCIES */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 41 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 42 /* cs_extr.h Common Service functions */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 43 /* tc_extr.h Thread Control functions */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 44 /* pi_extr.h Pipe functions */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 45 /* hi_extr.h History functions */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 46 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 47 /* HISTORY */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 48 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 49 /* DATE REMARKS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 50 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 51 /* 03-01-1993 Created initial version 1.0 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 52 /* 04-19-1993 Verified version 1.0 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 53 /* 08-09-1993 Corrected pointer retrieval */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 54 /* loop, resulting in version 1.0a */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 55 /* 08-09-1993 Verified version 1.0a */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 56 /* 03-01-1994 Moved non-core functions into */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 57 /* supplemental files, changed */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 58 /* function interfaces to match */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 59 /* those in prototype, added */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 60 /* register options, changed */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 61 /* protection logic to reduce */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 62 /* overhead, corrected bug in */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 63 /* pipe reset, optimized item */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 64 /* copy loops, resulting in */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 65 /* version 1.1 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 66 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 67 /* 03-18-1994 Verified version 1.1 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 68 /* 04-17-1996 updated to version 1.2 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 69 /* 03-24-1998 Released version 1.3 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 70 /* 03-26-1999 Released 1.11m (new release */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 71 /* numbering scheme) */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 72 /* 04-17-2002 Released version 1.13m */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 73 /* 11-07-2002 Released version 1.14 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 74 /*************************************************************************/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 75 #define NU_SOURCE_FILE | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 76 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 77 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 78 #include "cs_extr.h" /* Common service functions */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 79 #include "tc_extr.h" /* Thread control functions */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 80 #include "pi_extr.h" /* Pipe functions */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 81 #include "hi_extr.h" /* History functions */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 82 #include "profiler.h" /* ProView interface */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 83 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 84 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 85 /* Define external inner-component global data references. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 86 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 87 extern CS_NODE *PID_Created_Pipes_List; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 88 extern UNSIGNED PID_Total_Pipes; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 89 extern TC_PROTECT PID_List_Protect; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 90 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 91 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 92 /* Define internal component function prototypes. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 93 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 94 VOID PIC_Cleanup(VOID *information); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 95 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 96 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 97 /*************************************************************************/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 98 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 99 /* FUNCTION */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 100 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 101 /* PIC_Create_Pipe */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 102 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 103 /* DESCRIPTION */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 104 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 105 /* This function creates a pipe and then places it on the list */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 106 /* of created pipes. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 107 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 108 /* CALLED BY */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 109 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 110 /* Application */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 111 /* PICE_Create_Pipe Error checking shell */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 112 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 113 /* CALLS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 114 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 115 /* CSC_Place_On_List Add to node to linked-list */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 116 /* [HIC_Make_History_Entry] Make entry in history log */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 117 /* [TCT_Check_Stack] Stack checking function */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 118 /* TCT_Protect Data structure protect */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 119 /* TCT_Unprotect Un-protect data structure */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 120 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 121 /* INPUTS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 122 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 123 /* pipe_ptr Pipe control block pointer */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 124 /* name Pipe name */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 125 /* start_address Starting address of actual */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 126 /* pipe area */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 127 /* pipe_size Total size of pipe in bytes */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 128 /* message_type Type of message supported by */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 129 /* the pipe (fixed/variable) */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 130 /* message_size Size of message. Variable */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 131 /* message-length pipes, this */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 132 /* represents the maximum size*/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 133 /* suspend_type Suspension type */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 134 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 135 /* OUTPUTS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 136 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 137 /* NU_SUCCESS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 138 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 139 /* HISTORY */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 140 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 141 /* DATE REMARKS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 142 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 143 /* 03-01-1993 Created initial version 1.0 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 144 /* 04-19-1993 Verified version 1.0 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 145 /* 03-01-1994 Changed function interfaces to */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 146 /* match those in prototype, */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 147 /* added register options, */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 148 /* resulting in version 1.1 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 149 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 150 /* 03-18-1994 Verified version 1.1 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 151 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 152 /*************************************************************************/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 153 STATUS PIC_Create_Pipe(NU_PIPE *pipe_ptr, CHAR *name, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 154 VOID *start_address, UNSIGNED pipe_size, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 155 OPTION message_type, UNSIGNED message_size, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 156 OPTION suspend_type) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 157 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 158 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 159 R1 PI_PCB *pipe; /* Pipe control block ptr */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 160 INT i; /* Working index variable */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 161 NU_SUPERV_USER_VARIABLES | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 162 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 163 /* Switch to supervisor mode */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 164 NU_SUPERVISOR_MODE(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 165 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 166 /* Move input pipe pointer into internal pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 167 pipe = (PI_PCB *) pipe_ptr; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 168 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 169 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 170 #ifdef NU_ENABLE_STACK_CHECK | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 171 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 172 /* Call stack checking function to check for an overflow condition. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 173 TCT_Check_Stack(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 174 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 175 #endif | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 176 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 177 #ifdef NU_ENABLE_HISTORY | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 178 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 179 /* Make an entry that corresponds to this function in the system history | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 180 log. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 181 HIC_Make_History_Entry(NU_CREATE_PIPE_ID, (UNSIGNED) pipe, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 182 (UNSIGNED) name, (UNSIGNED) start_address); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 183 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 184 #endif | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 185 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 186 /* First, clear the pipe ID just in case it is an old pipe | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 187 Control Block. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 188 pipe -> pi_id = 0; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 189 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 190 /* Fill in the pipe name. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 191 for (i = 0; i < NU_MAX_NAME; i++) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 192 pipe -> pi_name[i] = name[i]; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 193 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 194 /* Setup the pipe suspension type. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 195 if (suspend_type == NU_FIFO) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 196 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 197 /* FIFO suspension is selected, setup the flag accordingly. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 198 pipe -> pi_fifo_suspend = NU_TRUE; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 199 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 200 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 201 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 202 /* Priority suspension is selected. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 203 pipe -> pi_fifo_suspend = NU_FALSE; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 204 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 205 /* Setup the pipe message type. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 206 if (message_type == NU_FIXED_SIZE) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 207 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 208 /* Fixed-size messages are required. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 209 pipe -> pi_fixed_size = NU_TRUE; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 210 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 211 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 212 /* Variable-size messages are required. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 213 pipe -> pi_fixed_size = NU_FALSE; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 214 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 215 /* Setup the message size. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 216 pipe -> pi_message_size = message_size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 217 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 218 /* Clear the messages counter. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 219 pipe -> pi_messages = 0; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 220 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 221 /* Setup the actual pipe pointers. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 222 pipe -> pi_pipe_size = pipe_size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 223 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 224 /* Determine if the pipe's size needs to be adjusted. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 225 if (pipe -> pi_fixed_size) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 226 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 227 /* The size of a fixed-size message pipe must be an even multiple of | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 228 the actual message size. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 229 pipe_size = (pipe_size/message_size) * message_size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 230 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 231 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 232 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 233 /* Insure that the size is in terms of UNSIGNED data elements. This | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 234 insures that the UNSIGNED word is never written past the end of | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 235 the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 236 pipe_size = (pipe_size/sizeof(UNSIGNED)) * sizeof(UNSIGNED); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 237 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 238 pipe -> pi_available = pipe_size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 239 pipe -> pi_start = (BYTE_PTR) start_address; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 240 pipe -> pi_end = pipe -> pi_start + pipe_size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 241 pipe -> pi_read = (BYTE_PTR) start_address; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 242 pipe -> pi_write = (BYTE_PTR) start_address; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 243 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 244 /* Clear the suspension list pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 245 pipe -> pi_suspension_list = NU_NULL; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 246 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 247 /* Clear the number of tasks waiting on the pipe counter. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 248 pipe -> pi_tasks_waiting = 0; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 249 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 250 /* Clear the urgent message list pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 251 pipe -> pi_urgent_list = NU_NULL; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 252 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 253 /* Initialize link pointers. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 254 pipe -> pi_created.cs_previous = NU_NULL; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 255 pipe -> pi_created.cs_next = NU_NULL; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 256 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 257 /* Protect against access to the list of created pipes. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 258 TCT_Protect(&PID_List_Protect); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 259 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 260 /* At this point the pipe is completely built. The ID can now be | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 261 set and it can be linked into the created pipe list. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 262 pipe -> pi_id = PI_PIPE_ID; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 263 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 264 /* Link the pipe into the list of created pipes and increment the | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 265 total number of pipes in the system. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 266 CSC_Place_On_List(&PID_Created_Pipes_List, &(pipe -> pi_created)); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 267 PID_Total_Pipes++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 268 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 269 #ifdef INCLUDE_PROVIEW | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 270 _RTProf_DumpPipe(RT_PROF_CREATE_PIPE,pipe,RT_PROF_OK); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 271 #endif /* INCLUDE_PROVIEW */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 272 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 273 /* Release protection against access to the list of created pipes. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 274 TCT_Unprotect(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 275 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 276 /* Return to user mode */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 277 NU_USER_MODE(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 278 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 279 /* Return successful completion. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 280 return(NU_SUCCESS); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 281 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 282 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 283 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 284 /*************************************************************************/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 285 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 286 /* FUNCTION */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 287 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 288 /* PIC_Delete_Pipe */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 289 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 290 /* DESCRIPTION */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 291 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 292 /* This function deletes a pipe and removes it from the list of */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 293 /* created pipes. All tasks suspended on the pipe are */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 294 /* resumed. Note that this function does not free the memory */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 295 /* associated with the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 296 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 297 /* CALLED BY */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 298 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 299 /* Application */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 300 /* PICE_Delete_Pipe Error checking shell */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 301 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 302 /* CALLS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 303 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 304 /* CSC_Remove_From_List Remove node from list */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 305 /* [HIC_Make_History_Entry] Make entry in history log */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 306 /* TCC_Resume_Task Resume a suspended task */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 307 /* [TCT_Check_Stack] Stack checking function */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 308 /* TCT_Control_To_System Transfer control to system */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 309 /* TCT_Protect Protect created list */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 310 /* TCT_Set_Current_Protect Modify current protection */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 311 /* TCT_System_Protect Protect against system access*/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 312 /* TCT_System_Unprotect Release system protection */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 313 /* TCT_Unprotect Release protection */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 314 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 315 /* INPUTS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 316 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 317 /* pipe_ptr Pipe control block pointer */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 318 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 319 /* OUTPUTS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 320 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 321 /* NU_SUCCESS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 322 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 323 /* HISTORY */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 324 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 325 /* DATE REMARKS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 326 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 327 /* 03-01-1993 Created initial version 1.0 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 328 /* 04-19-1993 Verified version 1.0 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 329 /* 03-01-1994 Changed function interfaces to */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 330 /* match those in prototype, */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 331 /* added register options, changed */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 332 /* protection logic to reduce */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 333 /* overhead, resulting in */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 334 /* version 1.1 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 335 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 336 /* 03-18-1994 Verified version 1.1 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 337 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 338 /*************************************************************************/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 339 STATUS PIC_Delete_Pipe(NU_PIPE *pipe_ptr) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 340 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 341 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 342 R1 PI_PCB *pipe; /* Pipe control block ptr */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 343 PI_SUSPEND *suspend_ptr; /* Suspend block pointer */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 344 PI_SUSPEND *next_ptr; /* Next suspension block ptr */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 345 STATUS preempt; /* Status for resume call */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 346 NU_SUPERV_USER_VARIABLES | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 347 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 348 /* Switch to supervisor mode */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 349 NU_SUPERVISOR_MODE(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 350 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 351 /* Move input pipe pointer into internal pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 352 pipe = (PI_PCB *) pipe_ptr; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 353 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 354 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 355 #ifdef NU_ENABLE_STACK_CHECK | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 356 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 357 /* Call stack checking function to check for an overflow condition. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 358 TCT_Check_Stack(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 359 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 360 #endif | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 361 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 362 #ifdef NU_ENABLE_HISTORY | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 363 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 364 /* Make an entry that corresponds to this function in the system history | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 365 log. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 366 HIC_Make_History_Entry(NU_DELETE_PIPE_ID, (UNSIGNED) pipe, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 367 (UNSIGNED) 0, (UNSIGNED) 0); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 368 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 369 #endif | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 370 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 371 /* Protect against access to the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 372 TCT_System_Protect(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 373 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 374 #ifdef INCLUDE_PROVIEW | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 375 _RTProf_DumpPipe(RT_PROF_DELETE_PIPE,pipe,RT_PROF_OK); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 376 #endif /* INCLUDE_PROVIEW */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 377 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 378 /* Clear the pipe ID. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 379 pipe -> pi_id = 0; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 380 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 381 /* Release protection. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 382 TCT_Unprotect(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 383 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 384 /* Protect against access to the list of created pipes. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 385 TCT_Protect(&PID_List_Protect); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 386 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 387 /* Remove the pipe from the list of created pipes. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 388 CSC_Remove_From_List(&PID_Created_Pipes_List, &(pipe -> pi_created)); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 389 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 390 /* Decrement the total number of created pipes. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 391 PID_Total_Pipes--; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 392 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 393 /* Pickup the suspended task pointer list. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 394 suspend_ptr = pipe -> pi_suspension_list; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 395 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 396 /* Walk the chain task(s) currently suspended on the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 397 preempt = 0; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 398 while (suspend_ptr) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 399 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 400 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 401 /* Protect against system access. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 402 TCT_System_Protect(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 403 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 404 /* Resume the suspended task. Insure that the status returned is | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 405 NU_PIPE_DELETED. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 406 suspend_ptr -> pi_return_status = NU_PIPE_DELETED; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 407 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 408 /* Point to the next suspend structure in the link. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 409 next_ptr = (PI_SUSPEND *) (suspend_ptr -> pi_suspend_link.cs_next); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 410 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 411 /* Resume the specified task. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 412 preempt = preempt | | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 413 TCC_Resume_Task((NU_TASK *) suspend_ptr -> pi_suspended_task, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 414 NU_PIPE_SUSPEND); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 415 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 416 /* Determine if the next is the same as the head pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 417 if (next_ptr == pipe -> pi_suspension_list) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 418 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 419 /* Clear the suspension pointer to signal the end of the list | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 420 traversal. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 421 suspend_ptr = NU_NULL; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 422 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 423 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 424 /* Setup the next suspension pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 425 suspend_ptr = next_ptr; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 426 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 427 /* Modify current protection. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 428 TCT_Set_Current_Protect(&PID_List_Protect); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 429 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 430 /* Clear the system protection. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 431 TCT_System_Unprotect(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 432 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 433 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 434 /* Pickup the urgent message suspension list. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 435 suspend_ptr = pipe -> pi_urgent_list; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 436 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 437 /* Walk the chain task(s) currently suspended on the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 438 while (suspend_ptr) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 439 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 440 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 441 /* Protect against system access. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 442 TCT_System_Protect(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 443 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 444 /* Resume the suspended task. Insure that the status returned is | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 445 NU_PIPE_DELETED. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 446 suspend_ptr -> pi_return_status = NU_PIPE_DELETED; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 447 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 448 /* Point to the next suspend structure in the link. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 449 next_ptr = (PI_SUSPEND *) (suspend_ptr -> pi_suspend_link.cs_next); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 450 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 451 /* Resume the specified task. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 452 preempt = preempt | | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 453 TCC_Resume_Task((NU_TASK *) suspend_ptr -> pi_suspended_task, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 454 NU_PIPE_SUSPEND); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 455 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 456 /* Determine if the next is the same as the head pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 457 if (next_ptr == pipe -> pi_urgent_list) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 458 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 459 /* Clear the suspension pointer to signal the end of the list | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 460 traversal. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 461 suspend_ptr = NU_NULL; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 462 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 463 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 464 /* Position suspend pointer to the next block. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 465 suspend_ptr = next_ptr; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 466 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 467 /* Modify current protection. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 468 TCT_Set_Current_Protect(&PID_List_Protect); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 469 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 470 /* Clear the system protection. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 471 TCT_System_Unprotect(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 472 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 473 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 474 /* Determine if preemption needs to occur. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 475 if (preempt) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 476 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 477 /* Transfer control to system to facilitate preemption. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 478 TCT_Control_To_System(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 479 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 480 /* Release protection against access to the list of created pipes. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 481 TCT_Unprotect(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 482 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 483 /* Return to user mode */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 484 NU_USER_MODE(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 485 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 486 /* Return a successful completion. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 487 return(NU_SUCCESS); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 488 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 489 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 490 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 491 /*************************************************************************/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 492 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 493 /* FUNCTION */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 494 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 495 /* PIC_Send_To_Pipe */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 496 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 497 /* DESCRIPTION */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 498 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 499 /* This function sends a message to the specified pipe. The */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 500 /* message length is determined by the caller. If there are one */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 501 /* or more tasks suspended on the pipe for a message, the message */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 502 /* is copied into the message area of the first waiting task. If */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 503 /* the task's request is satisfied, it is resumed. Otherwise, if */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 504 /* the pipe cannot hold the message, suspension of the calling */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 505 /* task is an option of the caller. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 506 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 507 /* CALLED BY */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 508 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 509 /* Application */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 510 /* PICE_Send_To_Pipe Error checking shell */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 511 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 512 /* CALLS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 513 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 514 /* CSC_Place_On_List Place on suspend list */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 515 /* CSC_Priority_Place_On_List Place on priority list */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 516 /* CSC_Remove_From_List Remove from suspend list */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 517 /* [HIC_Make_History_Entry] Make entry in history log */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 518 /* TCC_Resume_Task Resume a suspended task */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 519 /* TCC_Suspend_Task Suspend calling task */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 520 /* TCC_Task_Priority Pickup task's priority */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 521 /* [TCT_Check_Stack] Stack checking function */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 522 /* TCT_Control_To_System Transfer control to system */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 523 /* TCT_Current_Thread Pickup current thread pointer*/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 524 /* TCT_System_Protect Protect pipe */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 525 /* TCT_Unprotect Release protection */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 526 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 527 /* INPUTS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 528 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 529 /* pipe_ptr Pipe control block pointer */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 530 /* message Pointer to message to send */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 531 /* size Size of message to send */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 532 /* suspend Suspension option if full */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 533 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 534 /* OUTPUTS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 535 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 536 /* NU_SUCCESS If service is successful */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 537 /* NU_PIPE_FULL If pipe is currently full */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 538 /* NU_TIMEOUT If timeout on service expires*/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 539 /* NU_PIPE_DELETED If pipe was deleted during */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 540 /* suspension */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 541 /* NU_PIPE_RESET If pipe was reset during */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 542 /* suspension */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 543 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 544 /* HISTORY */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 545 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 546 /* DATE REMARKS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 547 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 548 /* 03-01-1993 Created initial version 1.0 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 549 /* 04-19-1993 Verified version 1.0 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 550 /* 03-01-1994 Changed function interfaces to */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 551 /* match those in prototype, */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 552 /* added register options, changed */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 553 /* protection logic to reduce */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 554 /* overhead, optimized copy loop, */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 555 /* resulting in version 1.1 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 556 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 557 /* 03-18-1994 Verified version 1.1 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 558 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 559 /*************************************************************************/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 560 STATUS PIC_Send_To_Pipe(NU_PIPE *pipe_ptr, VOID *message, UNSIGNED size, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 561 UNSIGNED suspend) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 562 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 563 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 564 R1 PI_PCB *pipe; /* Pipe control block ptr */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 565 PI_SUSPEND suspend_block; /* Allocate suspension block */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 566 PI_SUSPEND *suspend_ptr; /* Pointer to suspend block */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 567 R2 BYTE_PTR source; /* Pointer to source */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 568 R3 BYTE_PTR destination; /* Pointer to destination */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 569 UNSIGNED copy_size; /* Partial copy size */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 570 R4 INT i; /* Working counter */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 571 UNSIGNED pad = 0; /* Number of pad bytes */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 572 TC_TCB *task; /* Task pointer */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 573 STATUS preempt; /* Preempt flag */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 574 STATUS status; /* Completion status */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 575 NU_SUPERV_USER_VARIABLES | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 576 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 577 /* Switch to supervisor mode */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 578 NU_SUPERVISOR_MODE(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 579 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 580 /* Move input pipe pointer into internal pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 581 pipe = (PI_PCB *) pipe_ptr; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 582 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 583 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 584 #ifdef NU_ENABLE_STACK_CHECK | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 585 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 586 /* Call stack checking function to check for an overflow condition. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 587 TCT_Check_Stack(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 588 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 589 #endif | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 590 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 591 #ifdef NU_ENABLE_HISTORY | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 592 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 593 /* Make an entry that corresponds to this function in the system history | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 594 log. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 595 HIC_Make_History_Entry(NU_SEND_TO_PIPE_ID, (UNSIGNED) pipe, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 596 (UNSIGNED) message, (UNSIGNED) size); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 597 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 598 #endif | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 599 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 600 /* Initialize the status as successful. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 601 status = NU_SUCCESS; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 602 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 603 /* Protect against simultaneous access to the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 604 TCT_System_Protect(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 605 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 606 /* Determine if an extra word of overhead needs to be added to the | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 607 calculation. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 608 if (pipe -> pi_fixed_size) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 609 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 610 /* No overhead. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 611 i = 0; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 612 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 613 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 614 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 615 /* Variable messages have one additional word of overhead. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 616 i = sizeof(UNSIGNED); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 617 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 618 /* Calculate the number of pad bytes necessary to make keep the pipe | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 619 write pointer on an UNSIGNED data element alignment. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 620 pad = (((size + sizeof(UNSIGNED) - 1)/sizeof(UNSIGNED)) * | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 621 sizeof(UNSIGNED)) - size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 622 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 623 /* Insure that padding is included in the overhead. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 624 i = i + ((INT) pad); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 625 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 626 /* Make special check to see if a suspension needs to be | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 627 forced for a variable length message. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 628 if ((pipe -> pi_suspension_list) && (pipe -> pi_messages)) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 629 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 630 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 631 /* Pickup task control block pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 632 task = (TC_TCB *) TCT_Current_Thread(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 633 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 634 /* Now we know that there are other task(s) are suspended trying | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 635 to send a variable length message. Determine whether or not | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 636 a suspension should be forced. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 637 if ((pipe -> pi_fifo_suspend) || | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 638 (suspend == NU_NO_SUSPEND) || | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 639 ((pipe -> pi_suspension_list) -> pi_suspend_link.cs_priority <= | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 640 TCC_Task_Priority(task))) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 641 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 642 /* Bump the computed size to avoid placing the new variable | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 643 length message ahead of the suspended tasks. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 644 i = (INT) pipe -> pi_available; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 645 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 646 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 647 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 648 /* Determine if there is enough room in the pipe for the message. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 649 if (pipe -> pi_available < (size + i)) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 650 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 651 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 652 /* pipe does not have room for the message. Determine if | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 653 suspension is required. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 654 if (suspend) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 655 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 656 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 657 /* Suspension is requested. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 658 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 659 /* Increment the number of tasks waiting. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 660 pipe -> pi_tasks_waiting++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 661 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 662 #ifdef INCLUDE_PROVIEW | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 663 _RTProf_DumpPipe(RT_PROF_SEND_TO_PIPE,pipe,RT_PROF_WAIT); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 664 #endif /* INCLUDE_PROVIEW */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 665 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 666 /* Setup the suspend block and suspend the calling task. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 667 suspend_ptr = &suspend_block; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 668 suspend_ptr -> pi_pipe = pipe; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 669 suspend_ptr -> pi_suspend_link.cs_next = NU_NULL; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 670 suspend_ptr -> pi_suspend_link.cs_previous= NU_NULL; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 671 suspend_ptr -> pi_message_area = (BYTE_PTR) message; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 672 suspend_ptr -> pi_message_size = size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 673 task = (TC_TCB *) TCT_Current_Thread(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 674 suspend_ptr -> pi_suspended_task = task; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 675 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 676 /* Determine if priority or FIFO suspension is associated with the | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 677 pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 678 if (pipe -> pi_fifo_suspend) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 679 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 680 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 681 /* FIFO suspension is required. Link the suspend block into | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 682 the list of suspended tasks on this pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 683 CSC_Place_On_List((CS_NODE **) &(pipe -> pi_suspension_list), | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 684 &(suspend_ptr -> pi_suspend_link)); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 685 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 686 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 687 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 688 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 689 /* Get the priority of the current thread so the suspend block | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 690 can be placed in the appropriate place. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 691 suspend_ptr -> pi_suspend_link.cs_priority = | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 692 TCC_Task_Priority(task); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 693 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 694 CSC_Priority_Place_On_List((CS_NODE **) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 695 &(pipe -> pi_suspension_list), | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 696 &(suspend_ptr -> pi_suspend_link)); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 697 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 698 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 699 /* Finally, suspend the calling task. Note that the suspension call | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 700 automatically clears the protection on the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 701 TCC_Suspend_Task((NU_TASK *) task, NU_PIPE_SUSPEND, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 702 PIC_Cleanup, suspend_ptr, suspend); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 703 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 704 /* Pickup the return status. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 705 status = suspend_ptr -> pi_return_status; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 706 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 707 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 708 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 709 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 710 /* Return a status of NU_PIPE_FULL because there is no | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 711 room in the pipe for the message. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 712 status = NU_PIPE_FULL; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 713 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 714 #ifdef INCLUDE_PROVIEW | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 715 _RTProf_DumpPipe(RT_PROF_SEND_TO_PIPE,pipe,RT_PROF_FAIL); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 716 #endif /* INCLUDE_PROVIEW */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 717 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 718 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 719 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 720 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 721 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 722 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 723 /* Determine if a task is waiting on an empty pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 724 if ((pipe -> pi_suspension_list) && (pipe -> pi_messages == 0)) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 725 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 726 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 727 /* Task is waiting on pipe for a message. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 728 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 729 /* Decrement the number of tasks waiting on pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 730 pipe -> pi_tasks_waiting--; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 731 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 732 #ifdef INCLUDE_PROVIEW | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 733 _RTProf_DumpPipe(RT_PROF_SEND_TO_PIPE,pipe,RT_PROF_OK); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 734 #endif /* INCLUDE_PROVIEW */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 735 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 736 /* Remove the first suspended block from the list. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 737 suspend_ptr = pipe -> pi_suspension_list; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 738 CSC_Remove_From_List((CS_NODE **) &(pipe -> pi_suspension_list), | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 739 &(suspend_ptr -> pi_suspend_link)); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 740 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 741 /* Setup the source and destination pointers. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 742 source = (BYTE_PTR) message; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 743 destination = suspend_ptr -> pi_message_area; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 744 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 745 /* Initialize the return status. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 746 suspend_ptr -> pi_return_status = NU_SUCCESS; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 747 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 748 /* Loop to actually copy the message. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 749 i = (INT) size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 750 do | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 751 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 752 *(destination++) = *(source); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 753 if ((--i) == 0) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 754 break; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 755 source++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 756 } while(1); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 757 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 758 /* Return the size of the message copied. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 759 suspend_ptr -> pi_actual_size = size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 760 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 761 /* Wakeup the waiting task and check for preemption. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 762 preempt = | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 763 TCC_Resume_Task((NU_TASK *) suspend_ptr -> pi_suspended_task, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 764 NU_PIPE_SUSPEND); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 765 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 766 /* Determine if preemption needs to take place. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 767 if (preempt) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 768 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 769 /* Transfer control to the system if the resumed task function | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 770 detects a preemption condition. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 771 TCT_Control_To_System(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 772 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 773 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 774 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 775 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 776 /* There is enough room in the pipe and no task is waiting. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 777 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 778 /* Setup the source pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 779 source = (BYTE_PTR) message; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 780 destination = pipe -> pi_write; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 781 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 782 /* Process according to the type of message supported. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 783 if (pipe -> pi_fixed_size) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 784 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 785 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 786 /* Fixed-size messages are supported by this pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 787 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 788 /* Loop to copy the message into the pipe area. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 789 i = (INT) size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 790 do | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 791 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 792 *(destination++) = *(source); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 793 if ((--i) == 0) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 794 break; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 795 source++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 796 } while (1); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 797 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 798 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 799 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 800 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 801 /* Variable-size messages are supported. Processing must | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 802 check for pipe wrap-around conditions. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 803 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 804 /* Place message size in first location. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 805 *((UNSIGNED *) destination) = size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 806 destination = destination + sizeof(UNSIGNED); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 807 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 808 /* Check for a wrap-around condition on the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 809 if (destination >= pipe -> pi_end) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 810 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 811 /* Wrap the write pointer back to the top of the pipe | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 812 area. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 813 destination = pipe -> pi_start; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 814 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 815 /* Decrement the number of bytes remaining for this | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 816 extra word of overhead. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 817 pipe -> pi_available = pipe -> pi_available - | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 818 sizeof(UNSIGNED); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 819 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 820 /* Calculate the number of bytes remaining from the write | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 821 pointer to the bottom of the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 822 copy_size = pipe -> pi_end - destination; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 823 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 824 /* Determine if the message needs to be wrapped around the | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 825 edge of the pipe area. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 826 if (copy_size >= size) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 827 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 828 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 829 /* Copy the whole message at once. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 830 i = (INT) size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 831 do | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 832 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 833 *(destination++) = *(source); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 834 if ((--i) == 0) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 835 break; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 836 source++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 837 } while (1); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 838 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 839 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 840 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 841 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 842 /* Copy the first half of the message. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 843 i = (INT) copy_size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 844 do | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 845 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 846 *(destination) = *(source++); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 847 if ((--i) == 0) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 848 break; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 849 destination++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 850 } while (1); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 851 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 852 /* Copy the second half of the message. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 853 destination = pipe -> pi_start; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 854 i = (INT) (size - copy_size); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 855 do | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 856 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 857 *(destination++) = *(source); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 858 if ((--i) == 0) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 859 break; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 860 source++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 861 } while (1); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 862 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 863 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 864 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 865 /* Check again for wrap-around condition on the write pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 866 if (destination >= pipe -> pi_end) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 867 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 868 /* Move the write pointer to the top of the pipe area. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 869 destination = pipe -> pi_start; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 870 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 871 /* Determine if the pipe supports variable-length messages. If | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 872 so, pad bytes are needed to keep UNSIGNED alignment. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 873 if (pad) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 874 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 875 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 876 /* Variable-size message. Add pad bytes to the write | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 877 pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 878 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 879 /* Calculate the number of bytes remaining from the write | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 880 pointer to the bottom of the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 881 copy_size = pipe -> pi_end - destination; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 882 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 883 /* If there is not enough room at the bottom of the pipe, the | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 884 pad bytes must be wrapped around to the top. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 885 if (copy_size <= pad) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 886 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 887 /* Move write pointer to the top of the pipe and make the | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 888 necessary adjustment. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 889 destination = pipe -> pi_start + (pad - copy_size); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 890 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 891 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 892 /* There is enough room in the pipe to simply add the | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 893 the pad bytes to the write pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 894 destination = destination + pad; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 895 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 896 /* Decrement the number of available bytes. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 897 pipe -> pi_available = pipe -> pi_available - pad; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 898 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 899 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 900 /* Update the actual write pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 901 pipe -> pi_write = destination; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 902 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 903 /* Decrement the number of available bytes. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 904 pipe -> pi_available = pipe -> pi_available - size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 905 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 906 /* Increment the number of messages in the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 907 pipe -> pi_messages++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 908 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 909 #ifdef INCLUDE_PROVIEW | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 910 _RTProf_DumpPipe(RT_PROF_SEND_TO_PIPE,pipe,RT_PROF_OK); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 911 #endif /* INCLUDE_PROVIEW */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 912 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 913 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 914 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 915 /* Release protection against access to the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 916 TCT_Unprotect(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 917 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 918 /* Return to user mode */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 919 NU_USER_MODE(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 920 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 921 /* Return the completion status. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 922 return(status); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 923 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 924 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 925 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 926 /*************************************************************************/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 927 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 928 /* FUNCTION */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 929 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 930 /* PIC_Receive_From_Pipe */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 931 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 932 /* DESCRIPTION */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 933 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 934 /* This function receives a message from the specified pipe. The */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 935 /* size of the message is specified by the caller. If there is a */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 936 /* message currently in the pipe, the message is removed from the */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 937 /* pipe and placed in the caller's area. Suspension is possible */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 938 /* if the request cannot be satisfied. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 939 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 940 /* CALLED BY */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 941 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 942 /* Application */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 943 /* PICE_Receive_From_Pipe Error checking shell */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 944 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 945 /* CALLS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 946 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 947 /* CSC_Place_On_List Place on suspend list */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 948 /* CSC_Remove_From_List Remove from suspend list */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 949 /* [HIC_Make_History_Entry] Make entry in history log */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 950 /* TCC_Resume_Task Resume a suspended task */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 951 /* TCC_Suspend_Task Suspend calling task */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 952 /* TCC_Task_Priority Pickup task's priority */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 953 /* [TCT_Check_Stack] Stack checking function */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 954 /* TCT_Control_To_System Transfer control to system */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 955 /* TCT_Current_Thread Pickup current thread pointer*/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 956 /* TCT_System_Protect Protect pipe */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 957 /* TCT_Unprotect Release protection */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 958 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 959 /* INPUTS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 960 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 961 /* pipe_ptr Pipe control block pointer */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 962 /* message Pointer to message to send */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 963 /* size Size of the message */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 964 /* actual_size Size of message received */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 965 /* suspend Suspension option if empty */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 966 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 967 /* OUTPUTS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 968 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 969 /* NU_SUCCESS If service is successful */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 970 /* NU_PIPE_EMPTY If pipe is currently empty */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 971 /* NU_TIMEOUT If timeout on service expires*/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 972 /* NU_PIPE_DELETED If pipe was deleted during */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 973 /* suspension */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 974 /* NU_PIPE_RESET If pipe was reset during */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 975 /* suspension */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 976 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 977 /* HISTORY */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 978 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 979 /* DATE REMARKS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 980 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 981 /* 03-01-1993 Created initial version 1.0 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 982 /* 04-19-1993 Verified version 1.0 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 983 /* 03-01-1994 Changed function interfaces to */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 984 /* match those in prototype, */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 985 /* added register options, changed */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 986 /* protection logic to reduce */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 987 /* overhead, optimized copy loop, */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 988 /* resulting in version 1.1 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 989 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 990 /* 03-18-1994 Verified version 1.1 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 991 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 992 /*************************************************************************/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 993 STATUS PIC_Receive_From_Pipe(NU_PIPE *pipe_ptr, VOID *message, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 994 UNSIGNED size, UNSIGNED *actual_size, UNSIGNED suspend) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 995 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 996 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 997 R1 PI_PCB *pipe; /* Pipe control block ptr */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 998 PI_SUSPEND suspend_block; /* Allocate suspension block */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 999 PI_SUSPEND *suspend_ptr; /* Pointer to suspend block */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1000 R2 BYTE_PTR source; /* Pointer to source */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1001 R3 BYTE_PTR destination; /* Pointer to destination */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1002 TC_TCB *task; /* Task pointer */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1003 UNSIGNED copy_size; /* Number of bytes to copy */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1004 UNSIGNED pad = 0; /* Number of pad bytes */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1005 R4 INT i; /* Working counter */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1006 STATUS preempt; /* Preemption flag */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1007 STATUS status; /* Completion status */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1008 NU_SUPERV_USER_VARIABLES | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1009 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1010 /* Switch to supervisor mode */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1011 NU_SUPERVISOR_MODE(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1012 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1013 /* Move input pipe pointer into internal pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1014 pipe = (PI_PCB *) pipe_ptr; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1015 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1016 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1017 #ifdef NU_ENABLE_STACK_CHECK | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1018 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1019 /* Call stack checking function to check for an overflow condition. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1020 TCT_Check_Stack(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1021 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1022 #endif | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1023 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1024 #ifdef NU_ENABLE_HISTORY | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1025 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1026 /* Make an entry that corresponds to this function in the system history | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1027 log. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1028 HIC_Make_History_Entry(NU_RECEIVE_FROM_PIPE_ID, (UNSIGNED) pipe, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1029 (UNSIGNED) message, (UNSIGNED) size); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1030 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1031 #endif | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1032 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1033 /* Initialize the status as successful. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1034 status = NU_SUCCESS; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1035 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1036 /* Protect against simultaneous access to the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1037 TCT_System_Protect(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1038 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1039 /* Determine if an urgent message request is currently suspended. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1040 if (pipe -> pi_urgent_list) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1041 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1042 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1043 /* If so, copy the message from the suspended request block and | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1044 resume the associated task. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1045 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1046 /* Decrement the number of tasks waiting on pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1047 pipe -> pi_tasks_waiting--; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1048 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1049 /* Remove the first suspended block from the list. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1050 suspend_ptr = pipe -> pi_urgent_list; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1051 CSC_Remove_From_List((CS_NODE **) &(pipe -> pi_urgent_list), | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1052 &(suspend_ptr -> pi_suspend_link)); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1053 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1054 /* Setup the source and destination pointers. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1055 destination = (BYTE_PTR) message; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1056 source = suspend_ptr -> pi_message_area; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1057 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1058 /* Initialize the return status. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1059 suspend_ptr -> pi_return_status = NU_SUCCESS; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1060 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1061 /* Loop to actually copy the message. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1062 i = (INT) size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1063 do | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1064 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1065 *(destination++) = *(source); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1066 if ((--i) == 0) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1067 break; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1068 source++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1069 } while (1); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1070 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1071 /* Return the size of the message copied. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1072 *actual_size = suspend_ptr -> pi_message_size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1073 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1074 /* Wakeup the waiting task and check for preemption. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1075 preempt = | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1076 TCC_Resume_Task((NU_TASK *) suspend_ptr -> pi_suspended_task, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1077 NU_PIPE_SUSPEND); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1078 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1079 /* Determine if preemption needs to take place. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1080 if (preempt) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1081 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1082 /* Transfer control to the system if the resumed task function | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1083 detects a preemption condition. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1084 TCT_Control_To_System(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1085 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1086 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1087 /* Determine if there are messages in the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1088 else if (pipe -> pi_messages) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1089 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1090 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1091 /* Copy message from pipe into the caller's area. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1092 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1093 /* Setup the source and destination pointers. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1094 destination = (BYTE_PTR) message; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1095 source = pipe -> pi_read; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1096 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1097 /* Process according to the type of message supported by the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1098 if (pipe -> pi_fixed_size) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1099 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1100 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1101 /* Pipe supports fixed-size messages. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1102 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1103 /* Copy the message from the pipe area into the destination. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1104 i = (INT) size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1105 do | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1106 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1107 *(destination) = *(source++); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1108 if ((--i) == 0) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1109 break; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1110 destination++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1111 } while (1); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1112 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1113 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1114 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1115 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1116 /* Pipe supports variable-size messages. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1117 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1118 /* Variable length message size is actually in the pipe area. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1119 size = *((UNSIGNED *) source); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1120 source = source + sizeof(UNSIGNED); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1121 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1122 /* Check for a wrap-around condition on the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1123 if (source >= pipe -> pi_end) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1124 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1125 /* Wrap the read pointer back to the top of the pipe | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1126 area. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1127 source = pipe -> pi_start; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1128 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1129 /* Increment the number of available bytes in the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1130 pipe -> pi_available = pipe -> pi_available + sizeof(UNSIGNED); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1131 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1132 /* Calculate the number of pad bytes necessary to keep | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1133 the pipe read pointer on an UNSIGNED data element alignment.*/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1134 pad = (((size + sizeof(UNSIGNED) - 1)/sizeof(UNSIGNED)) * | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1135 sizeof(UNSIGNED)) - size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1136 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1137 /* Calculate the number of bytes remaining from the read pointer | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1138 to the bottom of the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1139 copy_size = pipe -> pi_end - source; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1140 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1141 /* Determine if the message needs to be wrapped around the | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1142 edge of the pipe area. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1143 if (copy_size >= size) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1144 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1145 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1146 /* Copy the whole message at once. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1147 i = (INT) size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1148 do | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1149 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1150 *(destination) = *(source++); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1151 if ((--i) == 0) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1152 break; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1153 destination++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1154 } while (1); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1155 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1156 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1157 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1158 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1159 /* Copy the first half of the message. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1160 i = (INT) copy_size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1161 do | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1162 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1163 *(destination++) = *(source); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1164 if ((--i) == 0) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1165 break; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1166 source++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1167 } while (1); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1168 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1169 /* Copy the second half of the message. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1170 source = pipe -> pi_start; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1171 i = (INT) (size - copy_size); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1172 do | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1173 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1174 *(destination) = *(source++); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1175 if ((--i) == 0) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1176 break; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1177 destination++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1178 } while (1); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1179 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1180 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1181 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1182 /* Check again for wrap-around condition on the read pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1183 if (source >= pipe -> pi_end) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1184 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1185 /* Move the read pointer to the top of the pipe area. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1186 source = pipe -> pi_start; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1187 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1188 /* Determine if the pipe supports variable-length messages. If | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1189 so, pad bytes are needed to keep UNSIGNED alignment. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1190 if (pad) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1191 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1192 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1193 /* Variable-size message. Add pad bytes to the read | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1194 pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1195 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1196 /* Calculate the number of bytes remaining from the read | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1197 pointer to the bottom of the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1198 copy_size = pipe -> pi_end - source; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1199 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1200 /* If there is not enough room at the bottom of the pipe, the | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1201 pad bytes must be wrapped around to the top. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1202 if (copy_size <= pad) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1203 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1204 /* Move read pointer to the top of the pipe and make the | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1205 necessary adjustment. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1206 source = pipe -> pi_start + (pad - copy_size); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1207 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1208 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1209 /* There is enough room in the pipe to simply add the | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1210 the pad bytes to the read pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1211 source = source + pad; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1212 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1213 /* Add pad bytes to the available bytes count. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1214 pipe -> pi_available = pipe -> pi_available + pad; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1215 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1216 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1217 /* Adjust the actual read pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1218 pipe -> pi_read = source; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1219 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1220 /* Increment the number of available bytes. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1221 pipe -> pi_available = pipe -> pi_available + size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1222 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1223 /* Decrement the number of messages in the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1224 pipe -> pi_messages--; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1225 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1226 /* Return the number of bytes received. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1227 *actual_size = size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1228 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1229 #ifdef INCLUDE_PROVIEW | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1230 _RTProf_DumpPipe(RT_PROF_RECEIVE_FROM_PIPE,pipe,RT_PROF_OK); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1231 #endif /* INCLUDE_PROVIEW */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1232 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1233 /* Determine if any tasks suspended on a full pipe can be woken | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1234 up. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1235 if (pipe -> pi_suspension_list) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1236 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1237 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1238 /* Pickup the suspension list and examine suspension blocks | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1239 to see if the message could now fit in the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1240 suspend_ptr = pipe -> pi_suspension_list; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1241 preempt = NU_FALSE; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1242 size = suspend_ptr -> pi_message_size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1243 i = 0; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1244 pad = 0; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1245 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1246 /* Overhead of each pipe message. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1247 if (!pipe -> pi_fixed_size) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1248 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1249 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1250 /* Variable messages have one additional word of overhead. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1251 i = sizeof(UNSIGNED); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1252 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1253 /* Calculate the number of pad bytes necessary to keep | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1254 the pipe write pointer on an UNSIGNED data element | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1255 alignment. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1256 pad = (((size + sizeof(UNSIGNED) - 1)/sizeof(UNSIGNED)) * | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1257 sizeof(UNSIGNED)) - size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1258 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1259 /* Insure that padding is included in the overhead. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1260 i = i + ((INT) pad); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1261 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1262 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1263 while ((suspend_ptr) && ((size + i) <= pipe -> pi_available)) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1264 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1265 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1266 /* Place the suspended task's message into the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1267 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1268 /* Setup the source and destination pointers. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1269 source = suspend_ptr -> pi_message_area; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1270 destination = pipe -> pi_write; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1271 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1272 /* Process according to the type of message supported. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1273 if (pipe -> pi_fixed_size) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1274 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1275 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1276 /* Fixed-size messages are supported by this pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1277 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1278 /* Loop to copy the message into the pipe area. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1279 i = (INT) size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1280 do | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1281 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1282 *(destination++) = *(source); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1283 if ((--i) == 0) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1284 break; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1285 source++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1286 } while (1); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1287 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1288 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1289 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1290 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1291 /* Variable-size messages are supported. Processing must | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1292 check for pipe wrap-around conditions. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1293 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1294 /* Place message size in first location. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1295 *((UNSIGNED *) destination) = size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1296 destination = destination + sizeof(UNSIGNED); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1297 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1298 /* Check for a wrap-around condition on the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1299 if (destination >= pipe -> pi_end) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1300 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1301 /* Wrap the write pointer back to the top of the pipe | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1302 area. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1303 destination = pipe -> pi_start; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1304 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1305 /* Decrement the number of bytes remaining for this | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1306 extra word of overhead. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1307 pipe -> pi_available = pipe -> pi_available - | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1308 sizeof(UNSIGNED); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1309 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1310 /* Calculate the number of bytes remaining from the write | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1311 pointer to the bottom of the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1312 copy_size = pipe -> pi_end - destination; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1313 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1314 /* Determine if the message needs to be wrapped around the | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1315 edge of the pipe area. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1316 if (copy_size >= size) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1317 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1318 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1319 /* Copy the whole message at once. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1320 i = (INT) size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1321 do | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1322 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1323 *(destination++) = *(source); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1324 if ((--i) == 0) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1325 break; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1326 source++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1327 } while (1); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1328 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1329 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1330 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1331 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1332 /* Copy the first half of the message. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1333 i = (INT) copy_size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1334 do | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1335 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1336 *(destination) = *(source++); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1337 if ((--i) == 0) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1338 break; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1339 destination++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1340 } while (1); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1341 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1342 /* Copy the second half of the message. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1343 destination = pipe -> pi_start; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1344 i = (INT) (size - copy_size); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1345 do | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1346 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1347 *(destination++) = *(source); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1348 if ((--i) == 0) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1349 break; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1350 source++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1351 } while (1); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1352 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1353 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1354 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1355 /* Check again for wrap-around condition on the write | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1356 pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1357 if (destination >= pipe -> pi_end) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1358 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1359 /* Move the write pointer to the top of the pipe area. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1360 destination = pipe -> pi_start; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1361 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1362 /* Determine if the pipe supports variable-length messages. If | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1363 so, pad bytes are needed to keep UNSIGNED alignment. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1364 if (pad) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1365 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1366 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1367 /* Variable-size message. Add pad bytes to the write | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1368 pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1369 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1370 /* Calculate the number of bytes remaining from the write | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1371 pointer to the bottom of the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1372 copy_size = pipe -> pi_end - destination; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1373 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1374 /* If there is not enough room at the bottom of the pipe, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1375 the pad bytes must be wrapped around to the top. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1376 if (copy_size <= pad) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1377 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1378 /* Move write pointer to the top of the pipe and make | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1379 the necessary adjustment. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1380 destination = pipe -> pi_start + (pad - copy_size); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1381 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1382 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1383 /* There is enough room in the pipe to simply add | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1384 the pad bytes to the write pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1385 destination = destination + pad; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1386 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1387 /* Decrement the number of available bytes. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1388 pipe -> pi_available = pipe -> pi_available - pad; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1389 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1390 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1391 /* Update the actual write pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1392 pipe -> pi_write = destination; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1393 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1394 /* Decrement the number of available bytes. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1395 pipe -> pi_available = pipe -> pi_available - size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1396 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1397 /* Increment the number of messages in the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1398 pipe -> pi_messages++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1399 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1400 /* Decrement the number of tasks waiting counter. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1401 pipe -> pi_tasks_waiting--; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1402 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1403 /* Remove the first suspended block from the list. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1404 CSC_Remove_From_List((CS_NODE **) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1405 &(pipe -> pi_suspension_list), | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1406 &(suspend_ptr -> pi_suspend_link)); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1407 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1408 /* Return a successful status. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1409 suspend_ptr -> pi_return_status = NU_SUCCESS; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1410 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1411 /* Resume the suspended task. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1412 preempt = preempt | | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1413 TCC_Resume_Task((NU_TASK *) suspend_ptr -> pi_suspended_task, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1414 NU_PIPE_SUSPEND); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1415 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1416 /* Setup suspend pointer to the head of the list. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1417 suspend_ptr = pipe -> pi_suspension_list; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1418 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1419 /* Determine if there really is another suspended block. If | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1420 there is and the pipe supports variable length messages, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1421 calculate new size and padding parameters. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1422 if ((suspend_ptr) && (!pipe -> pi_fixed_size)) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1423 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1424 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1425 /* Get the next message size. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1426 size = suspend_ptr -> pi_message_size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1427 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1428 /* Variable messages have one additional word of | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1429 overhead. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1430 i = sizeof(UNSIGNED); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1431 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1432 /* Calculate the number of pad bytes necessary to | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1433 keep the pipe write pointer on an UNSIGNED data element | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1434 alignment. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1435 pad = (((size + sizeof(UNSIGNED) - 1)/sizeof(UNSIGNED)) * | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1436 sizeof(UNSIGNED)) - size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1437 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1438 /* Insure that padding is included in the overhead. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1439 i = i + ((INT) pad); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1440 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1441 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1442 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1443 /* Determine if a preempt condition is present. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1444 if (preempt) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1445 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1446 /* Transfer control to the system if the resumed task function | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1447 detects a preemption condition. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1448 TCT_Control_To_System(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1449 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1450 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1451 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1452 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1453 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1454 /* pipe is empty. Determine if the task wants to suspend. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1455 if (suspend) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1456 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1457 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1458 /* Increment the number of tasks waiting on the pipe counter. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1459 pipe -> pi_tasks_waiting++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1460 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1461 #ifdef INCLUDE_PROVIEW | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1462 _RTProf_DumpPipe(RT_PROF_RECEIVE_FROM_PIPE,pipe,RT_PROF_WAIT); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1463 #endif /* INCLUDE_PROVIEW */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1464 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1465 /* Setup the suspend block and suspend the calling task. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1466 suspend_ptr = &suspend_block; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1467 suspend_ptr -> pi_pipe = pipe; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1468 suspend_ptr -> pi_suspend_link.cs_next = NU_NULL; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1469 suspend_ptr -> pi_suspend_link.cs_previous = NU_NULL; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1470 suspend_ptr -> pi_message_area = (BYTE_PTR) message; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1471 suspend_ptr -> pi_message_size = size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1472 task = (TC_TCB *) TCT_Current_Thread(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1473 suspend_ptr -> pi_suspended_task = task; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1474 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1475 /* Determine if priority or FIFO suspension is associated with the | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1476 pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1477 if (pipe -> pi_fifo_suspend) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1478 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1479 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1480 /* FIFO suspension is required. Link the suspend block into | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1481 the list of suspended tasks on this pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1482 CSC_Place_On_List((CS_NODE **) &(pipe -> pi_suspension_list), | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1483 &(suspend_ptr -> pi_suspend_link)); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1484 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1485 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1486 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1487 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1488 /* Get the priority of the current thread so the suspend block | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1489 can be placed in the appropriate place. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1490 suspend_ptr -> pi_suspend_link.cs_priority = | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1491 TCC_Task_Priority(task); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1492 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1493 CSC_Priority_Place_On_List((CS_NODE **) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1494 &(pipe -> pi_suspension_list), | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1495 &(suspend_ptr -> pi_suspend_link)); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1496 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1497 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1498 /* Finally, suspend the calling task. Note that the suspension call | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1499 automatically clears the protection on the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1500 TCC_Suspend_Task((NU_TASK *) task, NU_PIPE_SUSPEND, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1501 PIC_Cleanup, suspend_ptr, suspend); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1502 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1503 /* Pickup the status of the request. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1504 status = suspend_ptr -> pi_return_status; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1505 *actual_size = suspend_ptr -> pi_actual_size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1506 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1507 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1508 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1509 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1510 /* Return a status of NU_PIPE_EMPTY because there are no | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1511 messages in the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1512 status = NU_PIPE_EMPTY; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1513 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1514 #ifdef INCLUDE_PROVIEW | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1515 _RTProf_DumpPipe(RT_PROF_RECEIVE_FROM_PIPE,pipe,RT_PROF_FAIL); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1516 #endif /* INCLUDE_PROVIEW */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1517 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1518 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1519 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1520 /* Release protection against access to the pipe. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1521 TCT_Unprotect(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1522 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1523 /* Return to user mode */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1524 NU_USER_MODE(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1525 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1526 /* Return the completion status. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1527 return(status); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1528 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1529 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1530 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1531 /*************************************************************************/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1532 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1533 /* FUNCTION */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1534 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1535 /* PIC_Cleanup */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1536 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1537 /* DESCRIPTION */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1538 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1539 /* This function is responsible for removing a suspension block */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1540 /* from a pipe. It is not called unless a timeout or a task */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1541 /* terminate is in progress. Note that protection is already in */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1542 /* effect - the same protection at suspension time. This routine */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1543 /* must be called from Supervisor mode in Supervisor/User mode */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1544 /* switching kernels. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1545 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1546 /* CALLED BY */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1547 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1548 /* TCC_Timeout Task timeout */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1549 /* TCC_Terminate Task terminate */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1550 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1551 /* CALLS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1552 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1553 /* CSC_Remove_From_List Remove suspend block from */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1554 /* the suspension list */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1555 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1556 /* INPUTS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1557 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1558 /* information Pointer to suspend block */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1559 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1560 /* OUTPUTS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1561 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1562 /* None */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1563 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1564 /* HISTORY */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1565 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1566 /* DATE REMARKS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1567 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1568 /* 03-01-1993 Created initial version 1.0 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1569 /* 04-19-1993 Verified version 1.0 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1570 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1571 /*************************************************************************/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1572 VOID PIC_Cleanup(VOID *information) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1573 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1574 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1575 PI_SUSPEND *suspend_ptr; /* Suspension block pointer */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1576 NU_SUPERV_USER_VARIABLES | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1577 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1578 /* Switch to supervisor mode */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1579 NU_SUPERVISOR_MODE(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1580 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1581 /* Use the information pointer as a suspend pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1582 suspend_ptr = (PI_SUSPEND *) information; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1583 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1584 /* By default, indicate that the service timed-out. It really does not | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1585 matter if this function is called from a terminate request since | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1586 the task does not resume. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1587 suspend_ptr -> pi_return_status = NU_TIMEOUT; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1588 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1589 /* Decrement the number of tasks waiting counter. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1590 (suspend_ptr -> pi_pipe) -> pi_tasks_waiting--; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1591 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1592 /* Determine if the suspend block is one the urgent list. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1593 if ((suspend_ptr -> pi_pipe) -> pi_urgent_list) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1594 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1595 /* Unlink the suspend block from the urgent list. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1596 CSC_Remove_From_List((CS_NODE **) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1597 &((suspend_ptr -> pi_pipe) -> pi_urgent_list), | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1598 &(suspend_ptr -> pi_suspend_link)); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1599 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1600 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1601 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1602 /* Unlink the suspend block from the suspension list. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1603 CSC_Remove_From_List((CS_NODE **) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1604 &((suspend_ptr -> pi_pipe) -> pi_suspension_list), | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1605 &(suspend_ptr -> pi_suspend_link)); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1606 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1607 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1608 /* Return to user mode */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1609 NU_USER_MODE(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1610 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1611 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1612 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1613 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1614 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1615 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1616 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1617 | 
