FreeCalypso > hg > fc-tourmaline
annotate src/nucleus/qus.c @ 242:da5857b13d02
components/fcbm: defines and includes for Condat display driver
| author | Mychaela Falconia <falcon@freecalypso.org> | 
|---|---|
| date | Mon, 03 May 2021 03:00:54 +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 /* qus.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 /* QU - Queue 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 supplemental routines for the Queue */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 25 /* Management 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 /* QUS_Reset_Queue Reset a queue */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 34 /* QUS_Send_To_Front_Of_Queue Send message to queue's front*/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 35 /* QUS_Broadcast_To_Queue Broadcast a message to queue */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 36 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 37 /* DEPENDENCIES */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 38 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 39 /* cs_extr.h Common Service functions */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 40 /* tc_extr.h Thread Control functions */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 41 /* qu_extr.h Queue functions */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 42 /* hi_extr.h History functions */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 43 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 44 /* HISTORY */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 45 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 46 /* DATE REMARKS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 47 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 48 /* 03-01-1994 Created initial version 1.1 from */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 49 /* routines originally in core */ | 
| 
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-18-1994 Verified version 1.1 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 52 /* 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 | 53 /* 02-04-1998 Corrected SPR434 resulting in */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 54 /* version 1.2a. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 55 /* 03-24-1998 Released version 1.3 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 56 /* 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 | 57 /* numbering scheme) */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 58 /* 04-17-2002 Released version 1.13m */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 59 /* 11-07-2002 Released version 1.14 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 60 /*************************************************************************/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 61 #define NU_SOURCE_FILE | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 62 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 63 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 64 #include "cs_extr.h" /* Common service functions */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 65 #include "tc_extr.h" /* Thread control functions */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 66 #include "qu_extr.h" /* Queue functions */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 67 #include "hi_extr.h" /* History functions */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 68 #include "profiler.h" /* ProView interface */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 69 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 70 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 71 /* Define internal component function prototypes. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 72 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 73 VOID QUC_Cleanup(VOID *information); | 
| 
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 | 
| 
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 /* FUNCTION */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 79 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 80 /* QUS_Reset_Queue */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 81 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 82 /* DESCRIPTION */ | 
| 
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 /* This function resets the specified queue back to the original */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 85 /* state. Any messages in the queue are discarded. Also, any */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 86 /* tasks currently suspended on the queue are resumed with the */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 87 /* reset status. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 88 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 89 /* CALLED BY */ | 
| 
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 /* Application */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 92 /* QUSE_Reset_Queue Error checking shell */ | 
| 
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 /* CALLS */ | 
| 
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 /* [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 | 97 /* TCC_Resume_Task Resume a suspended task */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 98 /* [TCT_Check_Stack] Stack checking function */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 99 /* 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 | 100 /* TCT_System_Protect Protect queue data structures*/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 101 /* TCT_Unprotect Release protection */ | 
| 
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 /* INPUTS */ | 
| 
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 /* queue_ptr Queue control block pointer */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 106 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 107 /* OUTPUTS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 108 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 109 /* NU_SUCCESS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 110 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 111 /* HISTORY */ | 
| 
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 /* DATE REMARKS */ | 
| 
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 /* 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 | 116 /* 04-19-1993 Verified version 1.0 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 117 /* 03-01-1994 Changed function interfaces to */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 118 /* match those in prototype, */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 119 /* added register options, changed */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 120 /* protection logic to reduce */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 121 /* overhead, fixed read and write */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 122 /* pointers to both point at the */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 123 /* start, resulting in version 1.1 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 124 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 125 /* 03-18-1994 Verified version 1.1 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 126 /* 02-04-1998 Corrected SPR434. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 127 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 128 /*************************************************************************/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 129 STATUS QUS_Reset_Queue(NU_QUEUE *queue_ptr) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 130 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 131 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 132 R1 QU_QCB *queue; /* Queue control block ptr */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 133 QU_SUSPEND *suspend_ptr; /* Suspend block pointer */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 134 QU_SUSPEND *next_ptr; /* Next suspend block pointer*/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 135 STATUS preempt; /* Status for resume call */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 136 NU_SUPERV_USER_VARIABLES | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 137 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 138 /* Move input queue pointer into internal pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 139 queue = (QU_QCB *) queue_ptr; | 
| 
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 /* Switch to supervisor mode */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 142 NU_SUPERVISOR_MODE(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 143 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 144 #ifdef NU_ENABLE_STACK_CHECK | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 145 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 146 /* 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 | 147 TCT_Check_Stack(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 148 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 149 #endif | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 150 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 151 #ifdef NU_ENABLE_HISTORY | 
| 
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 /* 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 | 154 log. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 155 HIC_Make_History_Entry(NU_RESET_QUEUE_ID, (UNSIGNED) queue, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 156 (UNSIGNED) 0, (UNSIGNED) 0); | 
| 
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 #endif | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 159 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 160 /* Protect against access to the queue. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 161 TCT_System_Protect(); | 
| 
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 /* Pickup the suspended task suspension list. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 164 suspend_ptr = queue -> qu_suspension_list; | 
| 
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 /* Walk the chain task(s) currently suspended on the queue. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 167 preempt = 0; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 168 while (suspend_ptr) | 
| 
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 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 171 /* 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 | 172 NU_QUEUE_RESET. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 173 suspend_ptr -> qu_return_status = NU_QUEUE_RESET; | 
| 
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 /* 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 | 176 next_ptr = (QU_SUSPEND *) (suspend_ptr -> qu_suspend_link.cs_next); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 177 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 178 /* Resume the specified task. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 179 preempt = preempt | | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 180 TCC_Resume_Task((NU_TASK *) suspend_ptr -> qu_suspended_task, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 181 NU_QUEUE_SUSPEND); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 182 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 183 /* 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 | 184 if (next_ptr == queue -> qu_suspension_list) | 
| 
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 /* 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 | 187 traversal. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 188 suspend_ptr = NU_NULL; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 189 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 190 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 191 /* Position the suspend pointer to the next suspend block. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 192 suspend_ptr = next_ptr; | 
| 
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 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 195 /* Pickup the urgent message suspension list. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 196 suspend_ptr = queue -> qu_urgent_list; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 197 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 198 /* Walk the chain task(s) currently suspended on the queue. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 199 while (suspend_ptr) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 200 { | 
| 
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 /* 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 | 203 NU_QUEUE_RESET. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 204 suspend_ptr -> qu_return_status = NU_QUEUE_RESET; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 205 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 206 /* 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 | 207 next_ptr = (QU_SUSPEND *) (suspend_ptr -> qu_suspend_link.cs_next); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 208 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 209 /* Resume the specified task. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 210 preempt = preempt | | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 211 TCC_Resume_Task((NU_TASK *) suspend_ptr -> qu_suspended_task, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 212 NU_QUEUE_SUSPEND); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 213 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 214 /* 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 | 215 if (next_ptr == queue -> qu_urgent_list) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 216 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 217 /* 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 | 218 traversal. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 219 suspend_ptr = NU_NULL; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 220 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 221 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 222 /* Position suspend pointer to the next suspend block. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 223 suspend_ptr = next_ptr; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 224 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 225 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 226 /* Initialize various elements of the queue. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 227 queue -> qu_available = queue -> qu_end - queue -> qu_start; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 228 queue -> qu_messages = 0; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 229 queue -> qu_read = queue -> qu_start; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 230 queue -> qu_write = queue -> qu_start; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 231 queue -> qu_tasks_waiting = 0; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 232 queue -> qu_suspension_list = NU_NULL; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 233 queue -> qu_urgent_list = NU_NULL; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 234 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 235 #ifdef INCLUDE_PROVIEW | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 236 _RTProf_DumpQueue(RT_PROF_RESET_QUEUE,queue,RT_PROF_OK); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 237 #endif | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 238 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 239 /* Determine if preemption needs to occur. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 240 if (preempt) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 241 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 242 /* Transfer control to system to facilitate preemption. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 243 TCT_Control_To_System(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 244 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 245 /* Release protection against access to the queue. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 246 TCT_Unprotect(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 247 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 248 /* Return to user mode */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 249 NU_USER_MODE(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 250 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 251 /* Return a successful completion. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 252 return(NU_SUCCESS); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 253 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 254 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 255 | 
| 
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 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 258 /* FUNCTION */ | 
| 
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 /* QUS_Send_To_Front_Of_Queue */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 261 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 262 /* DESCRIPTION */ | 
| 
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 /* This function sends a message to the front of the specified */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 265 /* message queue. The message length is determined by the caller. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 266 /* If there are any tasks suspended on the queue for a message, the */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 267 /* message is copied into the message area of the first waiting */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 268 /* task and that task is resumed. If there is enough room in the */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 269 /* queue, the message is copied in front of all other messages. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 270 /* If there is not enough room in the queue, suspension of the */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 271 /* caller is possible. */ | 
| 
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 /* CALLED BY */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 274 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 275 /* Application */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 276 /* QUSE_Send_To_Front_Of_Queue Error checking shell */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 277 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 278 /* CALLS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 279 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 280 /* 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 | 281 /* 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 | 282 /* [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 | 283 /* TCC_Resume_Task Resume a suspended task */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 284 /* TCC_Suspend_Task Suspend calling task */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 285 /* [TCT_Check_Stack] Stack checking function */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 286 /* 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 | 287 /* TCT_Current_Thread Pickup current thread pointer*/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 288 /* TCT_System_Protect Protect queue */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 289 /* TCT_Unprotect Release protection */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 290 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 291 /* INPUTS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 292 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 293 /* queue_ptr Queue control block pointer */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 294 /* message Pointer to message to send */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 295 /* size Size of message to send */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 296 /* suspend Suspension option if full */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 297 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 298 /* OUTPUTS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 299 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 300 /* NU_SUCCESS If service is successful */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 301 /* NU_QUEUE_FULL If queue is currently full */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 302 /* NU_TIMEOUT If timeout on service expires*/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 303 /* NU_QUEUE_DELETED If queue was deleted during */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 304 /* suspension */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 305 /* NU_QUEUE_RESET If queue was reset during */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 306 /* suspension */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 307 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 308 /* HISTORY */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 309 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 310 /* DATE REMARKS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 311 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 312 /* 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 | 313 /* 04-19-1993 Verified version 1.0 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 314 /* 03-01-1994 Changed function interfaces to */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 315 /* match those in prototype, */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 316 /* added register options, changed */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 317 /* protection logic to reduce */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 318 /* overhead, optimized copy loop, */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 319 /* resulting in version 1.1 */ | 
| 
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 /* 03-18-1994 Verified version 1.1 */ | 
| 
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 /*************************************************************************/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 324 STATUS QUS_Send_To_Front_Of_Queue(NU_QUEUE *queue_ptr, VOID *message, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 325 UNSIGNED size, UNSIGNED suspend) | 
| 
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 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 328 R1 QU_QCB *queue; /* Queue control block ptr */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 329 QU_SUSPEND suspend_block; /* Allocate suspension block */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 330 QU_SUSPEND *suspend_ptr; /* Pointer to suspend block */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 331 R3 UNSIGNED_PTR source; /* Pointer to source */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 332 R4 UNSIGNED_PTR destination; /* Pointer to destination */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 333 UNSIGNED copy_size; /* Partial copy size */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 334 R2 INT i; /* Working counter */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 335 TC_TCB *task; /* Task pointer */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 336 STATUS preempt; /* Preempt flag */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 337 STATUS status; /* Completion status */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 338 NU_SUPERV_USER_VARIABLES | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 339 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 340 /* Switch to supervisor mode */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 341 NU_SUPERVISOR_MODE(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 342 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 343 /* Move input queue pointer into internal pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 344 queue = (QU_QCB *) queue_ptr; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 345 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 346 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 347 #ifdef NU_ENABLE_STACK_CHECK | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 348 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 349 /* 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 | 350 TCT_Check_Stack(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 351 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 352 #endif | 
| 
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 #ifdef NU_ENABLE_HISTORY | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 355 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 356 /* 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 | 357 log. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 358 HIC_Make_History_Entry(NU_SEND_TO_FRONT_OF_QUEUE_ID, (UNSIGNED) queue, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 359 (UNSIGNED) message, (UNSIGNED) size); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 360 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 361 #endif | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 362 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 363 /* Initialize the status as successful. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 364 status = NU_SUCCESS; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 365 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 366 /* Protect against simultaneous access to the queue. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 367 TCT_System_Protect(); | 
| 
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 /* 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 | 370 calculation. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 371 if (queue -> qu_fixed_size) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 372 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 373 /* No overhead. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 374 i = 0; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 375 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 376 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 377 /* 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 | 378 i = 1; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 379 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 380 /* 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 | 381 forced for a variable length message. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 382 if ((queue -> qu_suspension_list) && (queue -> qu_messages)) | 
| 
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 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 385 /* Pickup task control block pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 386 task = (TC_TCB *) TCT_Current_Thread(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 387 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 388 /* 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 | 389 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 | 390 a suspension should be forced. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 391 if ((queue -> qu_fifo_suspend) || | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 392 (suspend == NU_NO_SUSPEND) || | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 393 ((queue -> qu_suspension_list) -> qu_suspend_link.cs_priority <= | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 394 TCC_Task_Priority(task))) | 
| 
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 /* 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 | 397 length message ahead of the suspended tasks. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 398 i = (INT) queue -> qu_available; | 
| 
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 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 402 /* Determine if there is enough room in the queue for the message. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 403 if (queue -> qu_available < (size + i)) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 404 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 405 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 406 /* Queue 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 | 407 suspension is required. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 408 if (suspend) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 409 { | 
| 
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 /* Suspension is requested. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 412 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 413 /* Increment the number of tasks waiting. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 414 queue -> qu_tasks_waiting++; | 
| 
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 #ifdef INCLUDE_PROVIEW | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 417 _RTProf_DumpQueue(RT_PROF_SEND_TO_FRONT_OF_QUEUE,queue,RT_PROF_WAIT); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 418 #endif | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 419 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 420 /* 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 | 421 suspend_ptr = &suspend_block; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 422 suspend_ptr -> qu_queue = queue; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 423 suspend_ptr -> qu_suspend_link.cs_next = NU_NULL; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 424 suspend_ptr -> qu_suspend_link.cs_previous = NU_NULL; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 425 suspend_ptr -> qu_message_area = (UNSIGNED_PTR) message; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 426 suspend_ptr -> qu_message_size = size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 427 task = (TC_TCB *) TCT_Current_Thread(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 428 suspend_ptr -> qu_suspended_task = task; | 
| 
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 /* Place the task on the urgent message suspension list. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 431 CSC_Place_On_List((CS_NODE **) &(queue -> qu_urgent_list), | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 432 &(suspend_ptr -> qu_suspend_link)); | 
| 
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 /* Move the head pointer of the list to make this suspension the | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 435 first in the list. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 436 queue -> qu_urgent_list = (QU_SUSPEND *) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 437 (queue -> qu_urgent_list) -> qu_suspend_link.cs_previous; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 438 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 439 /* 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 | 440 automatically clears the protection on the queue. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 441 TCC_Suspend_Task((NU_TASK *) task, NU_QUEUE_SUSPEND, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 442 QUC_Cleanup, suspend_ptr, suspend); | 
| 
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 /* Pickup the return status. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 445 status = suspend_ptr -> qu_return_status; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 446 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 447 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 448 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 449 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 450 /* Return a status of NU_QUEUE_FULL because there is no | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 451 room in the queue for the message. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 452 status = NU_QUEUE_FULL; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 453 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 454 #ifdef INCLUDE_PROVIEW | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 455 _RTProf_DumpQueue(RT_PROF_SEND_TO_FRONT_OF_QUEUE,queue,RT_PROF_FAIL); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 456 #endif | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 457 } | 
| 
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 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 460 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 461 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 462 /* Determine if a task is waiting on an empty queue. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 463 if ((queue -> qu_suspension_list) && (queue -> qu_messages == 0)) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 464 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 465 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 466 /* Task is waiting on queue for a message. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 467 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 468 /* Decrement the number of tasks waiting on queue. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 469 queue -> qu_tasks_waiting--; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 470 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 471 #ifdef INCLUDE_PROVIEW | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 472 _RTProf_DumpQueue(RT_PROF_SEND_TO_FRONT_OF_QUEUE,queue,RT_PROF_OK); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 473 #endif | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 474 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 475 /* 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 | 476 suspend_ptr = queue -> qu_suspension_list; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 477 CSC_Remove_From_List((CS_NODE **) &(queue -> qu_suspension_list), | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 478 &(suspend_ptr -> qu_suspend_link)); | 
| 
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 /* Setup the source and destination pointers. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 481 source = (UNSIGNED_PTR) message; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 482 destination = suspend_ptr -> qu_message_area; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 483 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 484 /* Initialize the return status. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 485 suspend_ptr -> qu_return_status = NU_SUCCESS; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 486 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 487 /* Loop to actually copy the message. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 488 i = (INT) size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 489 do | 
| 
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 *(destination++) = *(source); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 492 if ((--i) == 0) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 493 break; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 494 source++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 495 } while (1); | 
| 
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 /* Return the size of the message copied. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 498 suspend_ptr -> qu_actual_size = size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 499 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 500 /* 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 | 501 preempt = | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 502 TCC_Resume_Task((NU_TASK *) suspend_ptr -> qu_suspended_task, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 503 NU_QUEUE_SUSPEND); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 504 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 505 /* Determine if preemption needs to take place. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 506 if (preempt) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 507 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 508 /* 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 | 509 detects a preemption condition. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 510 TCT_Control_To_System(); | 
| 
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 else | 
| 
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 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 515 /* There is enough room in the queue and no task is waiting. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 516 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 517 /* Setup the source pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 518 source = (UNSIGNED_PTR) message; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 519 destination = queue -> qu_read; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 520 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 521 /* 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 | 522 if (queue -> qu_fixed_size) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 523 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 524 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 525 /* Fixed-size message queue. */ | 
| 
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 /* Determine if the read pointer is at the top of the queue | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 528 area. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 529 if (destination == queue -> qu_start) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 530 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 531 /* Prepare to place the message in the lower part | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 532 of the queue area. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 533 destination = queue -> qu_end - size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 534 else | 
| 
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 /* Backup the length of a message from the current | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 537 read pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 538 destination = destination - size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 539 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 540 /* Adjust the actual read pointer before the copy is done. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 541 queue -> qu_read = destination; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 542 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 543 /* Copy the message into the queue area. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 544 i = (INT) size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 545 do | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 546 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 547 *(destination++) = *(source); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 548 if ((--i) == 0) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 549 break; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 550 source++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 551 } while (1); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 552 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 553 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 554 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 555 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 556 /* Variable-size message queue. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 557 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 558 /* Calculate the number of words remaining at the top of the | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 559 queue. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 560 copy_size = destination - queue -> qu_start; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 561 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 562 /* Determine if part of the message needs to be placed at the | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 563 bottom of the queue area. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 564 if (copy_size < (size + i)) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 565 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 566 /* Compute the starting location for the message. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 567 destination = queue -> qu_end - ((size +i) - copy_size); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 568 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 569 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 570 /* Compute the starting location for the message. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 571 destination = destination - (size + i); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 572 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 573 /* Adjust the actual queue read pointer also. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 574 queue -> qu_read = destination; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 575 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 576 /* Place message size in first location. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 577 *(destination++) = size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 578 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 579 /* Check for a wrap-around condition on the queue. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 580 if (destination >= queue -> qu_end) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 581 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 582 /* Wrap the write pointer back to the top of the queue | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 583 area. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 584 destination = queue -> qu_start; | 
| 
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 /* Decrement the number of words remaining by 1 for this | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 587 extra word of overhead. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 588 queue -> qu_available--; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 589 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 590 /* Calculate the number of words remaining from the | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 591 destination pointer to the bottom of the queue. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 592 copy_size = queue -> qu_end - destination; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 593 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 594 /* 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 | 595 edge of the queue area. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 596 if (copy_size >= 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 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 599 /* Copy the whole message at once. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 600 i = (INT) size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 601 do | 
| 
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 *(destination++) = *(source); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 604 if ((--i) == 0) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 605 break; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 606 source++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 607 } while (1); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 608 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 609 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 610 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 611 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 612 /* Copy the first half of the message. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 613 i = (INT) copy_size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 614 do | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 615 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 616 *(destination) = *(source++); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 617 if ((--i) == 0) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 618 break; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 619 destination++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 620 } while (1); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 621 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 622 /* Copy the second half of the message. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 623 destination = queue -> qu_start; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 624 i = (INT) (size - copy_size); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 625 do | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 626 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 627 *(destination++) = *(source); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 628 if ((--i) == 0) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 629 break; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 630 source++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 631 } while (1); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 632 } | 
| 
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 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 635 /* Decrement the number of available words. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 636 queue -> qu_available = queue -> qu_available - size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 637 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 638 /* Increment the number of messages in the queue. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 639 queue -> qu_messages++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 640 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 641 #ifdef INCLUDE_PROVIEW | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 642 _RTProf_DumpQueue(RT_PROF_SEND_TO_FRONT_OF_QUEUE,queue,RT_PROF_OK); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 643 #endif | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 644 | 
| 
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 /* Release protection against access to the queue. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 649 TCT_Unprotect(); | 
| 
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 /* Return to user mode */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 652 NU_USER_MODE(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 653 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 654 /* Return the completion status. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 655 return(status); | 
| 
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 | 
| 
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 /*************************************************************************/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 660 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 661 /* FUNCTION */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 662 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 663 /* QUS_Broadcast_To_Queue */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 664 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 665 /* DESCRIPTION */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 666 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 667 /* This function sends a message to all tasks waiting for a message */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 668 /* from the specified queue. If there are no tasks waiting for a */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 669 /* message the service performs like a standard send request. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 670 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 671 /* CALLED BY */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 672 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 673 /* Application */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 674 /* QUSE_Broadcast_To_Queue Error checking shell */ | 
| 
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 /* CALLS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 677 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 678 /* 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 | 679 /* 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 | 680 /* 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 | 681 /* [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 | 682 /* TCC_Resume_Task Resume a suspended task */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 683 /* TCC_Suspend_Task Suspend calling task */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 684 /* TCC_Task_Priority Pickup task's priority */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 685 /* [TCT_Check_Stack] Stack checking function */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 686 /* 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 | 687 /* TCT_Current_Thread Pickup current thread pointer*/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 688 /* TCT_System_Protect Protect queue */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 689 /* TCT_Unprotect Release protection */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 690 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 691 /* INPUTS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 692 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 693 /* queue_ptr Queue control block pointer */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 694 /* message Pointer to message to send */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 695 /* size Size of message to send */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 696 /* suspend Suspension option if full */ | 
| 
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 /* OUTPUTS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 699 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 700 /* NU_SUCCESS If service is successful */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 701 /* NU_QUEUE_FULL If queue is currently full */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 702 /* NU_TIMEOUT If timeout on service expires*/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 703 /* NU_QUEUE_DELETED If queue was deleted during */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 704 /* suspension */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 705 /* NU_QUEUE_RESET If queue was reset during */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 706 /* suspension */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 707 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 708 /* HISTORY */ | 
| 
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 /* DATE REMARKS */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 711 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 712 /* 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 | 713 /* 04-19-1993 Verified version 1.0 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 714 /* 03-01-1994 Changed function interfaces to */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 715 /* match those in prototype, */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 716 /* added register options, changed */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 717 /* protection logic to reduce */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 718 /* overhead, optimized copy loop, */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 719 /* resulting in version 1.1 */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 720 /* */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 721 /* 03-18-1994 Verified version 1.1 */ | 
| 
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 /*************************************************************************/ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 724 STATUS QUS_Broadcast_To_Queue(NU_QUEUE *queue_ptr, VOID *message, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 725 UNSIGNED size, UNSIGNED suspend) | 
| 
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 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 728 R1 QU_QCB *queue; /* Queue control block ptr */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 729 QU_SUSPEND suspend_block; /* Allocate suspension block */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 730 QU_SUSPEND *suspend_ptr; /* Pointer to suspend block */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 731 R3 UNSIGNED_PTR source; /* Pointer to source */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 732 R4 UNSIGNED_PTR destination; /* Pointer to destination */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 733 UNSIGNED copy_size; /* Partial copy size */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 734 R2 INT i; /* Working counter */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 735 TC_TCB *task; /* Task pointer */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 736 STATUS preempt; /* Preempt flag */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 737 STATUS status; /* Completion status */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 738 NU_SUPERV_USER_VARIABLES | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 739 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 740 /* Switch to supervisor mode */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 741 NU_SUPERVISOR_MODE(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 742 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 743 /* Move input queue pointer into internal pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 744 queue = (QU_QCB *) queue_ptr; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 745 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 746 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 747 #ifdef NU_ENABLE_STACK_CHECK | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 748 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 749 /* 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 | 750 TCT_Check_Stack(); | 
| 
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 #endif | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 753 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 754 #ifdef NU_ENABLE_HISTORY | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 755 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 756 /* 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 | 757 log. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 758 HIC_Make_History_Entry(NU_BROADCAST_TO_QUEUE_ID, (UNSIGNED) queue, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 759 (UNSIGNED) message, (UNSIGNED) 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 #endif | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 762 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 763 /* Initialize the status as successful. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 764 status = NU_SUCCESS; | 
| 
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 /* Protect against simultaneous access to the queue. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 767 TCT_System_Protect(); | 
| 
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 /* 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 | 770 calculation. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 771 if (queue -> qu_fixed_size) | 
| 
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 /* No overhead. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 774 i = 0; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 775 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 776 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 777 /* 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 | 778 i = 1; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 779 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 780 /* 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 | 781 forced for a variable length message. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 782 if ((queue -> qu_suspension_list) && (queue -> qu_messages)) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 783 { | 
| 
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 /* Pickup task control block pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 786 task = (TC_TCB *) TCT_Current_Thread(); | 
| 
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 /* 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 | 789 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 | 790 a suspension should be forced. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 791 if ((queue -> qu_fifo_suspend) || | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 792 (suspend == NU_NO_SUSPEND) || | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 793 ((queue -> qu_suspension_list) -> qu_suspend_link.cs_priority <= | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 794 TCC_Task_Priority(task))) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 795 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 796 /* 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 | 797 length message ahead of the suspended tasks. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 798 i = (INT) queue -> qu_available; | 
| 
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 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 802 /* Determine if there is enough room in the queue for the message. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 803 if (queue -> qu_available < (size + i)) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 804 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 805 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 806 /* Queue 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 | 807 suspension is required. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 808 if (suspend) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 809 { | 
| 
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 /* Suspension is requested. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 812 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 813 /* Increment the number of tasks waiting. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 814 queue -> qu_tasks_waiting++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 815 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 816 #ifdef INCLUDE_PROVIEW | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 817 _RTProf_DumpQueue(RT_PROF_BROADCAST_TO_QUEUE,queue,RT_PROF_WAIT); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 818 #endif | 
| 
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 /* 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 | 821 suspend_ptr = &suspend_block; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 822 suspend_ptr -> qu_queue = queue; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 823 suspend_ptr -> qu_suspend_link.cs_next = NU_NULL; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 824 suspend_ptr -> qu_suspend_link.cs_previous = NU_NULL; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 825 suspend_ptr -> qu_message_area = (UNSIGNED_PTR) message; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 826 suspend_ptr -> qu_message_size = size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 827 task = (TC_TCB *) TCT_Current_Thread(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 828 suspend_ptr -> qu_suspended_task = task; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 829 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 830 /* 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 | 831 queue. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 832 if (queue -> qu_fifo_suspend) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 833 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 834 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 835 /* 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 | 836 the list of suspended tasks on this queue. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 837 CSC_Place_On_List((CS_NODE **) &(queue -> qu_suspension_list), | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 838 &(suspend_ptr -> qu_suspend_link)); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 839 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 840 else | 
| 
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 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 843 /* 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 | 844 can be placed in the appropriate place. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 845 suspend_ptr -> qu_suspend_link.cs_priority = | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 846 TCC_Task_Priority(task); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 847 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 848 CSC_Priority_Place_On_List((CS_NODE **) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 849 &(queue -> qu_suspension_list), | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 850 &(suspend_ptr -> qu_suspend_link)); | 
| 
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 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 853 /* 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 | 854 automatically clears the protection on the queue. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 855 TCC_Suspend_Task((NU_TASK *) task, NU_QUEUE_SUSPEND, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 856 QUC_Cleanup, suspend_ptr, suspend); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 857 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 858 /* Pickup the return status. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 859 status = suspend_ptr -> qu_return_status; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 860 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 861 else | 
| 
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 /* Return a status of NU_QUEUE_FULL because there is no | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 865 room in the queue for the message. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 866 status = NU_QUEUE_FULL; | 
| 
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 #ifdef INCLUDE_PROVIEW | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 869 _RTProf_DumpQueue(RT_PROF_BROADCAST_TO_QUEUE,queue,RT_PROF_FAIL); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 870 #endif | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 871 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 872 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 873 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 874 else | 
| 
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 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 877 /* Determine if a task is waiting on an empty queue. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 878 if ((queue -> qu_suspension_list) && (queue -> qu_messages == 0)) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 879 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 880 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 881 #ifdef INCLUDE_PROVIEW | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 882 _RTProf_DumpQueue(RT_PROF_BROADCAST_TO_QUEUE,queue,RT_PROF_OK); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 883 #endif | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 884 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 885 /* Yes, one or more tasks are waiting for a message from this | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 886 queue. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 887 preempt = 0; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 888 do | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 889 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 890 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 891 /* Decrement the number of tasks waiting on queue. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 892 queue -> qu_tasks_waiting--; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 893 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 894 /* 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 | 895 suspend_ptr = queue -> qu_suspension_list; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 896 CSC_Remove_From_List((CS_NODE **) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 897 &(queue -> qu_suspension_list), | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 898 &(suspend_ptr -> qu_suspend_link)); | 
| 
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 /* Setup the source and destination pointers. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 901 source = (UNSIGNED_PTR) message; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 902 destination = suspend_ptr -> qu_message_area; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 903 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 904 /* Initialize the return status. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 905 suspend_ptr -> qu_return_status = NU_SUCCESS; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 906 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 907 /* Loop to actually copy the message. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 908 i = (INT) size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 909 do | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 910 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 911 *(destination++) = *(source); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 912 if ((--i) == 0) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 913 break; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 914 source++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 915 } while (1); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 916 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 917 /* Return the size of the message copied. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 918 suspend_ptr -> qu_actual_size = size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 919 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 920 /* 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 | 921 preempt = preempt | | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 922 TCC_Resume_Task((NU_TASK *) suspend_ptr -> qu_suspended_task, | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 923 NU_QUEUE_SUSPEND); | 
| 
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 /* Move the suspend pointer to the next node, which is now | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 926 at the head of the list. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 927 suspend_ptr = queue -> qu_suspension_list; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 928 } while (suspend_ptr); | 
| 
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 /* Determine if preemption needs to take place. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 931 if (preempt) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 932 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 933 /* 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 | 934 detects a preemption condition. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 935 TCT_Control_To_System(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 936 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 937 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 938 { | 
| 
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 /* There is enough room in the queue and no task is waiting. */ | 
| 
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 /* Setup the source pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 943 source = (UNSIGNED_PTR) message; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 944 destination = queue -> qu_write; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 945 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 946 /* 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 | 947 if (queue -> qu_fixed_size) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 948 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 949 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 950 /* Fixed-size messages are supported by this queue. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 951 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 952 /* Loop to copy the message into the queue area. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 953 i = (INT) size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 954 do | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 955 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 956 *(destination++) = *(source); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 957 if ((--i) == 0) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 958 break; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 959 source++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 960 } while (1); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 961 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 962 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 963 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 964 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 965 /* Variable-size messages are supported. Processing must | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 966 check for queue wrap-around conditions. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 967 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 968 /* Place message size in first location. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 969 *(destination++) = size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 970 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 971 /* Check for a wrap-around condition on the queue. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 972 if (destination >= queue -> qu_end) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 973 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 974 /* Wrap the write pointer back to the top of the queue | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 975 area. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 976 destination = queue -> qu_start; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 977 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 978 /* Decrement the number of words remaining by 1 for this | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 979 extra word of overhead. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 980 queue -> qu_available--; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 981 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 982 /* Calculate the number of words remaining from the write | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 983 pointer to the bottom of the queue. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 984 copy_size = queue -> qu_end - destination; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 985 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 986 /* 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 | 987 edge of the queue area. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 988 if (copy_size >= size) | 
| 
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 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 991 /* Copy the whole message at once. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 992 i = (INT) size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 993 do | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 994 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 995 *(destination++) = *(source); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 996 if ((--i) == 0) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 997 break; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 998 source++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 999 } while(1); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1000 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1001 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1002 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1003 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1004 /* Copy the first half of the message. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1005 i = (INT) copy_size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1006 do | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1007 { | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1008 *(destination) = *(source++); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1009 if ((--i) == 0) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1010 break; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1011 destination++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1012 } while (1); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1013 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1014 /* Copy the second half of the message. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1015 destination = queue -> qu_start; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1016 i = (INT) (size - copy_size); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1017 do | 
| 
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 *(destination++) = *(source); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1020 if ((--i) == 0) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1021 break; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1022 source++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1023 } while (1); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1024 } | 
| 
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 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1027 /* 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 | 1028 if (destination >= queue -> qu_end) | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1029 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1030 /* Move the write pointer to the top of the queue area. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1031 queue -> qu_write = queue -> qu_start; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1032 else | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1033 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1034 /* Simply copy the last position of the destination pointer | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1035 into the write pointer. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1036 queue -> qu_write = destination; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1037 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1038 /* Decrement the number of available words. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1039 queue -> qu_available = queue -> qu_available - size; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1040 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1041 /* Increment the number of messages in the queue. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1042 queue -> qu_messages++; | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1043 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1044 #ifdef INCLUDE_PROVIEW | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1045 _RTProf_DumpQueue(RT_PROF_BROADCAST_TO_QUEUE,queue,RT_PROF_OK); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1046 #endif | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1047 } | 
| 
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 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1050 /* Release protection against access to the queue. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1051 TCT_Unprotect(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1052 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1053 /* Return to user mode */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1054 NU_USER_MODE(); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1055 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1056 /* Return the completion status. */ | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1057 return(status); | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1058 } | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1059 | 
| 
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 | 
| 
4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1062 | 
