FreeCalypso > hg > freecalypso-sw
annotate gsm-fw/nucleus/mbc.c @ 754:4c7f82008335
sim_app.c: reverting failed attempt to unbreak !SIM_TOOLKIT,
with comments left in place
| author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> | 
|---|---|
| date | Sat, 11 Oct 2014 21:30:45 +0000 | 
| parents | afceeeb2cba1 | 
| children | 
| rev | line source | 
|---|---|
| 79 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 1 /*************************************************************************/ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 2 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 3 /* Copyright Mentor Graphics Corporation 2002 */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 4 /* All Rights Reserved. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 5 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 6 /* THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION WHICH IS */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 7 /* THE PROPERTY OF MENTOR GRAPHICS CORPORATION OR ITS LICENSORS AND IS */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 8 /* SUBJECT TO LICENSE TERMS. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 9 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 10 /*************************************************************************/ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 11 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 12 /*************************************************************************/ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 13 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 14 /* FILE NAME VERSION */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 15 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 16 /* mbc.c Nucleus PLUS 1.14 */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 17 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 18 /* COMPONENT */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 19 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 20 /* MB - Mailbox Management */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 21 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 22 /* DESCRIPTION */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 23 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 24 /* This file contains the core routines for the Mailbox management */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 25 /* component. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 26 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 27 /* DATA STRUCTURES */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 28 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 29 /* None */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 30 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 31 /* FUNCTIONS */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 32 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 33 /* MBC_Create_Mailbox Create a mailbox */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 34 /* MBC_Delete_Mailbox Delete a mailbox */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 35 /* MBC_Send_To_Mailbox Send a mailbox message */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 36 /* MBC_Receive_From_Mailbox Receive a mailbox message */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 37 /* MBC_Cleanup Cleanup on timeout or a */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 38 /* terminate condition */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 39 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 40 /* DEPENDENCIES */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 41 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 42 /* cs_extr.h Common Service functions */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 43 /* tc_extr.h Thread Control functions */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 44 /* mb_extr.h Mailbox functions */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 45 /* hi_extr.h History functions */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 46 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 47 /* HISTORY */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 48 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 49 /* DATE REMARKS */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 50 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 51 /* 03-01-1993 Created initial version 1.0 */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 52 /* 04-19-1993 Verified version 1.0 */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 53 /* 08-09-1993 Corrected pointer retrieval */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 54 /* loop, resulting in version 1.0a */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 55 /* 08-09-1993 Verified version 1.0a */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 56 /* 03-01-1994 Moved non-core functions into */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 57 /* supplemental files, changed */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 58 /* function interfaces to match */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 59 /* those in prototype, added */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 60 /* register options, changed */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 61 /* protection logic to reduce */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 62 /* overhead, resulting in */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 63 /* version 1.1 */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 64 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 65 /* 03-18-1994 Verified version 1.1 */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 66 /* 04-17-1996 updated to version 1.2 */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 67 /* 03-24-1998 Released version 1.3 */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 68 /* 03-26-1999 Released 1.11m (new release */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 69 /* numbering scheme) */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 70 /* 04-17-2002 Released version 1.13m */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 71 /* 11-07-2002 Released version 1.14 */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 72 /*************************************************************************/ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 73 #define NU_SOURCE_FILE | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 74 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 75 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 76 #include "cs_extr.h" /* Common service functions */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 77 #include "tc_extr.h" /* Thread control functions */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 78 #include "mb_extr.h" /* Mailbox functions */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 79 #include "hi_extr.h" /* History functions */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 80 #include "profiler.h" /* ProView interface */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 81 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 82 /* Define external inner-component global data references. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 83 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 84 extern CS_NODE *MBD_Created_Mailboxes_List; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 85 extern UNSIGNED MBD_Total_Mailboxes; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 86 extern TC_PROTECT MBD_List_Protect; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 87 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 88 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 89 /* Define internal component function prototypes. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 90 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 91 VOID MBC_Cleanup(VOID *information); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 92 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 93 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 94 /*************************************************************************/ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 95 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 96 /* FUNCTION */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 97 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 98 /* MBC_Create_Mailbox */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 99 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 100 /* DESCRIPTION */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 101 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 102 /* This function creates a mailbox and then places it on the list */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 103 /* of created mailboxes. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 104 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 105 /* CALLED BY */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 106 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 107 /* Application */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 108 /* MBCE_Create_Mailbox Error checking shell */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 109 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 110 /* CALLS */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 111 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 112 /* CSC_Place_On_List Add node to linked-list */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 113 /* [HIC_Make_History_Entry] Make entry in history log */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 114 /* [TCT_Check_Stack] Stack checking function */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 115 /* TCT_Protect Data structure protect */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 116 /* TCT_Unprotect Un-protect data structure */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 117 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 118 /* INPUTS */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 119 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 120 /* mailbox_ptr Mailbox control block pointer*/ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 121 /* name Mailbox name */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 122 /* suspend_type Suspension type */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 123 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 124 /* OUTPUTS */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 125 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 126 /* NU_SUCCESS */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 127 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 128 /* HISTORY */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 129 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 130 /* DATE REMARKS */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 131 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 132 /* 03-01-1993 Created initial version 1.0 */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 133 /* 04-19-1993 Verified version 1.0 */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 134 /* 03-01-1994 Changed function interface to */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 135 /* match the prototype, added */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 136 /* register variable logic, */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 137 /* resulting in version 1.1 */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 138 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 139 /* 03-18-1994 Verified version 1.1 */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 140 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 141 /*************************************************************************/ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 142 STATUS MBC_Create_Mailbox(NU_MAILBOX *mailbox_ptr, CHAR *name, | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 143 OPTION suspend_type) | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 144 { | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 145 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 146 R1 MB_MCB *mailbox; /* Mailbox control block ptr */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 147 INT i; /* Working index variable */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 148 NU_SUPERV_USER_VARIABLES | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 149 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 150 /* Switch to supervisor mode */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 151 NU_SUPERVISOR_MODE(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 152 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 153 /* Move input mailbox pointer into internal pointer. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 154 mailbox = (MB_MCB *) mailbox_ptr; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 155 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 156 #ifdef NU_ENABLE_STACK_CHECK | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 157 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 158 /* Call stack checking function to check for an overflow condition. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 159 TCT_Check_Stack(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 160 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 161 #endif | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 162 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 163 #ifdef NU_ENABLE_HISTORY | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 164 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 165 /* Make an entry that corresponds to this function in the system history | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 166 log. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 167 HIC_Make_History_Entry(NU_CREATE_MAILBOX_ID, (UNSIGNED) mailbox, | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 168 (UNSIGNED) name, (UNSIGNED) suspend_type); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 169 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 170 #endif | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 171 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 172 /* First, clear the mailbox ID just in case it is an old Mailbox | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 173 Control Block. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 174 mailbox -> mb_id = 0; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 175 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 176 /* Fill in the mailbox name. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 177 for (i = 0; i < NU_MAX_NAME; i++) | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 178 mailbox -> mb_name[i] = name[i]; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 179 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 180 /* Clear the message present flag- initial it to "no message present." */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 181 mailbox -> mb_message_present = NU_FALSE; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 182 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 183 /* Setup the mailbox suspension type. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 184 if (suspend_type == NU_FIFO) | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 185 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 186 /* FIFO suspension is selected, setup the flag accordingly. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 187 mailbox -> mb_fifo_suspend = NU_TRUE; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 188 else | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 189 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 190 /* Priority suspension is selected. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 191 mailbox -> mb_fifo_suspend = NU_FALSE; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 192 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 193 /* Clear the suspension list pointer. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 194 mailbox -> mb_suspension_list = NU_NULL; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 195 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 196 /* Clear the number of tasks waiting on the mailbox counter. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 197 mailbox -> mb_tasks_waiting = 0; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 198 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 199 /* Initialize link pointers. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 200 mailbox -> mb_created.cs_previous = NU_NULL; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 201 mailbox -> mb_created.cs_next = NU_NULL; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 202 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 203 /* Protect against access to the list of created mailboxes. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 204 TCT_Protect(&MBD_List_Protect); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 205 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 206 /* At this point the mailbox is completely built. The ID can now be | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 207 set and it can be linked into the created mailbox list. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 208 mailbox -> mb_id = MB_MAILBOX_ID; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 209 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 210 /* Link the mailbox into the list of created mailboxes and increment the | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 211 total number of mailboxes in the system. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 212 CSC_Place_On_List(&MBD_Created_Mailboxes_List, &(mailbox -> mb_created)); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 213 MBD_Total_Mailboxes++; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 214 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 215 #ifdef INCLUDE_PROVIEW | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 216 _RTProf_DumpMailBox(RT_PROF_CREATE_MAILBOX,mailbox,RT_PROF_OK); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 217 #endif /* INCLUDE_PROVIEW */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 218 /* Release protection against access to the list of created mailboxes. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 219 TCT_Unprotect(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 220 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 221 /* Return to user mode */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 222 NU_USER_MODE(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 223 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 224 /* Return successful completion. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 225 return(NU_SUCCESS); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 226 } | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 227 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 228 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 229 /*************************************************************************/ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 230 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 231 /* FUNCTION */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 232 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 233 /* MBC_Delete_Mailbox */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 234 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 235 /* DESCRIPTION */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 236 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 237 /* This function deletes a mailbox and removes it from the list of */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 238 /* created mailboxes. All tasks suspended on the mailbox are */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 239 /* resumed. Note that this function does not free the memory */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 240 /* associated with the mailbox control block. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 241 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 242 /* CALLED BY */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 243 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 244 /* Application */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 245 /* MBCE_Delete_Mailbox Error checking shell */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 246 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 247 /* CALLS */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 248 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 249 /* CSC_Remove_From_List Remove node from list */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 250 /* [HIC_Make_History_Entry] Make entry in history log */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 251 /* TCC_Resume_Task Resume a suspended task */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 252 /* [TCT_Check_Stack] Stack checking function */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 253 /* TCT_Control_To_System Transfer control to system */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 254 /* TCT_Protect Protect created list */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 255 /* TCT_Set_Current_Protect Setup current protection ptr */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 256 /* TCT_System_Protect Protect against system access*/ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 257 /* TCT_System_Unprotect Release system protection */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 258 /* TCT_Unprotect Release protection */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 259 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 260 /* INPUTS */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 261 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 262 /* mailbox_ptr Mailbox control block pointer*/ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 263 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 264 /* OUTPUTS */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 265 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 266 /* NU_SUCCESS */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 267 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 268 /* HISTORY */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 269 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 270 /* DATE REMARKS */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 271 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 272 /* 03-01-1993 Created initial version 1.0 */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 273 /* 04-19-1993 Verified version 1.0 */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 274 /* 03-01-1994 Changed function interface to */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 275 /* match the prototype, added */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 276 /* register variable logic, */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 277 /* optimized protection logic, */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 278 /* resulting in version 1.1 */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 279 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 280 /* 03-18-1994 Verified version 1.1 */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 281 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 282 /*************************************************************************/ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 283 STATUS MBC_Delete_Mailbox(NU_MAILBOX *mailbox_ptr) | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 284 { | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 285 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 286 R1 MB_MCB *mailbox; /* Mailbox control block ptr */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 287 MB_SUSPEND *suspend_ptr; /* Suspend block pointer */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 288 MB_SUSPEND *next_ptr; /* Next suspend block pointer*/ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 289 STATUS preempt; /* Status for resume call */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 290 NU_SUPERV_USER_VARIABLES | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 291 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 292 /* Switch to supervisor mode */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 293 NU_SUPERVISOR_MODE(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 294 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 295 /* Move input mailbox pointer into internal pointer. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 296 mailbox = (MB_MCB *) mailbox_ptr; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 297 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 298 #ifdef NU_ENABLE_STACK_CHECK | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 299 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 300 /* Call stack checking function to check for an overflow condition. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 301 TCT_Check_Stack(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 302 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 303 #endif | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 304 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 305 #ifdef NU_ENABLE_HISTORY | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 306 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 307 /* Make an entry that corresponds to this function in the system history | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 308 log. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 309 HIC_Make_History_Entry(NU_DELETE_MAILBOX_ID, (UNSIGNED) mailbox, | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 310 (UNSIGNED) 0, (UNSIGNED) 0); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 311 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 312 #endif | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 313 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 314 /* Call protection just in case another thread is using the mailbox. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 315 TCT_System_Protect(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 316 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 317 #ifdef INCLUDE_PROVIEW | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 318 _RTProf_DumpMailBox(RT_PROF_DELETE_MAILBOX,mailbox,RT_PROF_OK); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 319 #endif /* INCLUDE_PROVIEW */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 320 /* Clear the mailbox ID. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 321 mailbox -> mb_id = 0; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 322 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 323 /* Clear protection. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 324 TCT_Unprotect(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 325 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 326 /* Protect against access to the list of created mailboxes. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 327 TCT_Protect(&MBD_List_Protect); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 328 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 329 /* Remove the mailbox from the list of created mailboxes. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 330 CSC_Remove_From_List(&MBD_Created_Mailboxes_List, | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 331 &(mailbox -> mb_created)); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 332 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 333 /* Decrement the total number of created mailboxes. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 334 MBD_Total_Mailboxes--; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 335 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 336 /* Pickup the suspended task pointer list. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 337 suspend_ptr = mailbox -> mb_suspension_list; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 338 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 339 /* Walk the chain task(s) currently suspended on the mailbox. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 340 preempt = 0; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 341 while (suspend_ptr) | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 342 { | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 343 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 344 /* Protect against system access. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 345 TCT_System_Protect(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 346 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 347 /* Resume the suspended task. Insure that the status returned is | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 348 NU_MAILBOX_DELETED. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 349 suspend_ptr -> mb_return_status = NU_MAILBOX_DELETED; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 350 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 351 /* Point to the next suspend structure in the link. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 352 next_ptr = (MB_SUSPEND *) (suspend_ptr -> mb_suspend_link.cs_next); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 353 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 354 /* Resume the specified task. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 355 preempt = preempt | | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 356 TCC_Resume_Task((NU_TASK *) suspend_ptr -> mb_suspended_task, | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 357 NU_MAILBOX_SUSPEND); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 358 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 359 /* Determine if the next is the same as the head pointer. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 360 if (next_ptr == mailbox -> mb_suspension_list) | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 361 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 362 /* Clear the suspension pointer to signal the end of the list | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 363 traversal. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 364 suspend_ptr = NU_NULL; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 365 else | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 366 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 367 /* Position the suspend pointer to the next suspend block. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 368 suspend_ptr = next_ptr; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 369 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 370 /* Setup current protection pointer. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 371 TCT_Set_Current_Protect(&MBD_List_Protect); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 372 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 373 /* Unprotect the system protection. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 374 TCT_System_Unprotect(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 375 } | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 376 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 377 /* Determine if preemption needs to occur. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 378 if (preempt) | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 379 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 380 /* Transfer control to system to facilitate preemption. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 381 TCT_Control_To_System(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 382 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 383 /* Release protection against access to the list of created mailboxes. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 384 TCT_Unprotect(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 385 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 386 /* Return to user mode */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 387 NU_USER_MODE(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 388 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 389 /* Return a successful completion. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 390 return(NU_SUCCESS); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 391 } | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 392 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 393 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 394 /*************************************************************************/ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 395 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 396 /* FUNCTION */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 397 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 398 /* MBC_Send_To_Mailbox */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 399 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 400 /* DESCRIPTION */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 401 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 402 /* This function sends a 4-word message to the specified mailbox. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 403 /* If there are one or more tasks suspended on the mailbox for a */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 404 /* message, the message is copied into the message area of the */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 405 /* first task waiting and that task is resumed. If the mailbox */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 406 /* is full, suspension of the calling task is possible. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 407 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 408 /* CALLED BY */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 409 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 410 /* Application */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 411 /* MBCE_Send_To_Mailbox Error checking shell */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 412 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 413 /* CALLS */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 414 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 415 /* CSC_Place_On_List Place on suspend list */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 416 /* CSC_Priority_Place_On_List Place on priority list */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 417 /* CSC_Remove_From_List Remove from suspend list */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 418 /* [HIC_Make_History_Entry] Make entry in history log */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 419 /* TCC_Resume_Task Resume a suspended task */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 420 /* TCC_Suspend_Task Suspend calling task */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 421 /* TCC_Task_Priority Pickup task's priority */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 422 /* [TCT_Check_Stack] Stack checking function */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 423 /* TCT_Control_To_System Transfer control to system */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 424 /* TCT_Current_Thread Pickup current thread pointer*/ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 425 /* TCT_System_Protect Protect against system access*/ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 426 /* TCT_Unprotect Release protection */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 427 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 428 /* INPUTS */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 429 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 430 /* mailbox_ptr Mailbox control block pointer*/ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 431 /* message Pointer to message to send */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 432 /* suspend Suspension option if full */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 433 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 434 /* OUTPUTS */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 435 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 436 /* NU_SUCCESS If service is successful */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 437 /* NU_MAILBOX_FULL If mailbox is currently full */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 438 /* NU_TIMEOUT If timeout on service expires*/ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 439 /* NU_MAILBOX_DELETED If mailbox is deleted during */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 440 /* suspension */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 441 /* NU_MAILBOX_RESET If mailbox is deleted during */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 442 /* suspension */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 443 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 444 /* HISTORY */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 445 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 446 /* DATE REMARKS */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 447 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 448 /* 03-01-1993 Created initial version 1.0 */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 449 /* 04-19-1993 Verified version 1.0 */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 450 /* 03-01-1994 Changed function interface to */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 451 /* match the prototype, added */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 452 /* register variable logic, */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 453 /* optimized protection logic, */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 454 /* resulting in version 1.1 */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 455 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 456 /* 03-18-1994 Verified version 1.1 */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 457 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 458 /*************************************************************************/ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 459 STATUS MBC_Send_To_Mailbox(NU_MAILBOX *mailbox_ptr, VOID *message, | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 460 UNSIGNED suspend) | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 461 { | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 462 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 463 R1 MB_MCB *mailbox; /* Mailbox control block ptr */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 464 MB_SUSPEND suspend_block; /* Allocate suspension block */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 465 R2 MB_SUSPEND *suspend_ptr; /* Pointer to suspend block */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 466 R3 UNSIGNED *source_ptr; /* Pointer to source */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 467 R4 UNSIGNED *destination_ptr; /* Pointer to destination */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 468 TC_TCB *task; /* Task pointer */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 469 STATUS preempt; /* Preempt flag */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 470 STATUS status; /* Completion status */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 471 NU_SUPERV_USER_VARIABLES | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 472 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 473 /* Switch to supervisor mode */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 474 NU_SUPERVISOR_MODE(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 475 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 476 /* Move input mailbox pointer into internal pointer. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 477 mailbox = (MB_MCB *) mailbox_ptr; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 478 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 479 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 480 #ifdef NU_ENABLE_STACK_CHECK | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 481 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 482 /* Call stack checking function to check for an overflow condition. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 483 TCT_Check_Stack(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 484 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 485 #endif | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 486 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 487 #ifdef NU_ENABLE_HISTORY | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 488 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 489 /* Make an entry that corresponds to this function in the system history | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 490 log. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 491 HIC_Make_History_Entry(NU_SEND_TO_MAILBOX_ID, (UNSIGNED) mailbox, | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 492 (UNSIGNED) message, (UNSIGNED) suspend); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 493 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 494 #endif | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 495 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 496 /* Initialize the status as successful. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 497 status = NU_SUCCESS; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 498 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 499 /* Protect against simultaneous access to the mailbox. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 500 TCT_System_Protect(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 501 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 502 /* Determine if the mailbox is empty or full. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 503 if (mailbox -> mb_message_present) | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 504 { | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 505 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 506 /* Mailbox already has a message. Determine if suspension is | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 507 required. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 508 if (suspend) | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 509 { | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 510 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 511 /* Suspension is requested. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 512 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 513 /* Increment the number of tasks waiting. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 514 mailbox -> mb_tasks_waiting++; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 515 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 516 #ifdef INCLUDE_PROVIEW | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 517 _RTProf_DumpMailBox(RT_PROF_SEND_TO_MAILBOX,mailbox,RT_PROF_WAIT); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 518 #endif /* INCLUDE_PROVIEW */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 519 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 520 /* Setup the suspend block and suspend the calling task. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 521 suspend_ptr = &suspend_block; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 522 suspend_ptr -> mb_mailbox = mailbox; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 523 suspend_ptr -> mb_suspend_link.cs_next = NU_NULL; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 524 suspend_ptr -> mb_suspend_link.cs_previous = NU_NULL; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 525 suspend_ptr -> mb_message_area = (UNSIGNED *) message; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 526 task = (TC_TCB *) TCT_Current_Thread(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 527 suspend_ptr -> mb_suspended_task = task; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 528 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 529 /* Determine if priority or FIFO suspension is associated with the | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 530 mailbox. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 531 if (mailbox -> mb_fifo_suspend) | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 532 { | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 533 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 534 /* FIFO suspension is required. Link the suspend block into | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 535 the list of suspended tasks on this mailbox. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 536 CSC_Place_On_List((CS_NODE **) &(mailbox ->mb_suspension_list), | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 537 &(suspend_ptr -> mb_suspend_link)); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 538 } | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 539 else | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 540 { | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 541 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 542 /* Get the priority of the current thread so the suspend block | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 543 can be placed in the appropriate place. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 544 suspend_ptr -> mb_suspend_link.cs_priority = | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 545 TCC_Task_Priority(task); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 546 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 547 CSC_Priority_Place_On_List((CS_NODE **) | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 548 &(mailbox -> mb_suspension_list), | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 549 &(suspend_ptr -> mb_suspend_link)); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 550 } | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 551 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 552 /* Finally, suspend the calling task. Note that the suspension call | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 553 automatically clears the protection on the mailbox. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 554 TCC_Suspend_Task((NU_TASK *) task, NU_MAILBOX_SUSPEND, | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 555 MBC_Cleanup, suspend_ptr, suspend); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 556 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 557 /* Pickup the return status. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 558 status = suspend_ptr -> mb_return_status; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 559 } | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 560 else | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 561 { | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 562 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 563 /* Return a status of NU_MAILBOX_FULL because there is no | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 564 room in the mailbox for the message. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 565 status = NU_MAILBOX_FULL; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 566 #ifdef INCLUDE_PROVIEW | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 567 _RTProf_DumpMailBox(RT_PROF_SEND_TO_MAILBOX,mailbox,RT_PROF_FAIL); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 568 #endif /* INCLUDE_PROVIEW */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 569 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 570 } | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 571 } | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 572 else | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 573 { | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 574 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 575 /* Determine if a task is waiting on the mailbox. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 576 if (mailbox -> mb_suspension_list) | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 577 { | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 578 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 579 /* Task is waiting on mailbox for a message. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 580 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 581 /* Decrement the number of tasks waiting on mailbox. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 582 mailbox -> mb_tasks_waiting--; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 583 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 584 #ifdef INCLUDE_PROVIEW | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 585 _RTProf_DumpMailBox(RT_PROF_SEND_TO_MAILBOX,mailbox,RT_PROF_OK); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 586 #endif /* INCLUDE_PROVIEW */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 587 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 588 /* Remove the first suspended block from the list. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 589 suspend_ptr = mailbox -> mb_suspension_list; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 590 CSC_Remove_From_List((CS_NODE **) | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 591 &(mailbox -> mb_suspension_list), | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 592 &(suspend_ptr -> mb_suspend_link)); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 593 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 594 /* Setup the source and destination pointers. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 595 source_ptr = (UNSIGNED *) message; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 596 destination_ptr = suspend_ptr -> mb_message_area; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 597 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 598 /* Copy the message directly into the waiting task's | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 599 destination. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 600 *destination_ptr = *source_ptr; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 601 *(destination_ptr + 1) = *(source_ptr + 1); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 602 *(destination_ptr + 2) = *(source_ptr + 2); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 603 *(destination_ptr + 3) = *(source_ptr + 3); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 604 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 605 /* Setup the appropriate return value. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 606 suspend_ptr -> mb_return_status = NU_SUCCESS; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 607 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 608 /* Wakeup the waiting task and check for preemption. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 609 preempt = | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 610 TCC_Resume_Task((NU_TASK *) suspend_ptr -> mb_suspended_task, | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 611 NU_MAILBOX_SUSPEND); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 612 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 613 /* Determine if preemption needs to take place. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 614 if (preempt) | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 615 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 616 /* Transfer control to the system if the resumed task function | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 617 detects a preemption condition. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 618 TCT_Control_To_System(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 619 } | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 620 else | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 621 { | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 622 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 623 /* Mailbox is empty and no task is waiting. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 624 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 625 /* Setup the source and destination pointers. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 626 source_ptr = (UNSIGNED *) message; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 627 destination_ptr = &(mailbox -> mb_message_area[0]); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 628 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 629 /* Place the message in the mailbox. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 630 *destination_ptr = *source_ptr; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 631 *(destination_ptr + 1) = *(source_ptr + 1); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 632 *(destination_ptr + 2) = *(source_ptr + 2); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 633 *(destination_ptr + 3) = *(source_ptr + 3); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 634 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 635 /* Indicate that the mailbox has a message. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 636 mailbox -> mb_message_present = NU_TRUE; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 637 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 638 #ifdef INCLUDE_PROVIEW | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 639 _RTProf_DumpMailBox(RT_PROF_SEND_TO_MAILBOX,mailbox,RT_PROF_OK); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 640 #endif /* INCLUDE_PROVIEW */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 641 } | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 642 } | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 643 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 644 /* Release protection. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 645 TCT_Unprotect(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 646 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 647 /* Return to user mode */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 648 NU_USER_MODE(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 649 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 650 /* Return the completion status. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 651 return(status); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 652 } | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 653 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 654 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 655 /*************************************************************************/ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 656 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 657 /* FUNCTION */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 658 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 659 /* MBC_Receive_From_Mailbox */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 660 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 661 /* DESCRIPTION */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 662 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 663 /* This function receives a message from the specified mailbox. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 664 /* If there is a message currently in the mailbox, the message is */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 665 /* removed from the mailbox and placed in the caller's area. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 666 /* Otherwise, if no message is present in the mailbox, suspension */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 667 /* of the calling task is possible. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 668 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 669 /* CALLED BY */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 670 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 671 /* Application */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 672 /* MBCE_Receive_From_Mailbox Error checking shell */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 673 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 674 /* CALLS */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 675 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 676 /* CSC_Place_On_List Place on suspend list */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 677 /* CSC_Priority_Place_On_List Place on priority list */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 678 /* CSC_Remove_From_List Remove from suspend list */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 679 /* [HIC_Make_History_Entry] Make entry in history log */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 680 /* TCC_Resume_Task Resume a suspended task */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 681 /* TCC_Suspend_Task Suspend calling task */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 682 /* TCC_Task_Priority Pickup task priority */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 683 /* [TCT_Check_Stack] Stack checking function */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 684 /* TCT_Control_To_System Transfer control to system */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 685 /* TCT_Current_Thread Pickup current thread pointer*/ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 686 /* TCT_System_Protect Protect mailbox */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 687 /* TCT_Unprotect Release protection */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 688 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 689 /* INPUTS */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 690 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 691 /* mailbox_ptr Mailbox control block pointer*/ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 692 /* message Pointer to message to send */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 693 /* suspend Suspension option if empty */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 694 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 695 /* OUTPUTS */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 696 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 697 /* NU_SUCCESS If service is successful */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 698 /* NU_MAILBOX_EMPTY If mailbox is currently empty*/ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 699 /* NU_TIMEOUT If timeout on service expires*/ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 700 /* NU_MAILBOX_DELETED If mailbox is deleted during */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 701 /* suspension */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 702 /* NU_MAILBOX_RESET If mailbox is deleted during */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 703 /* suspension */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 704 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 705 /* HISTORY */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 706 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 707 /* DATE REMARKS */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 708 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 709 /* 03-01-1993 Created initial version 1.0 */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 710 /* 04-19-1993 Verified version 1.0 */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 711 /* 03-01-1994 Changed function interface to */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 712 /* match the prototype, added */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 713 /* register variable logic, */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 714 /* optimized protection logic, */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 715 /* resulting in version 1.1 */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 716 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 717 /* 03-18-1994 Verified version 1.1 */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 718 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 719 /*************************************************************************/ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 720 STATUS MBC_Receive_From_Mailbox(NU_MAILBOX *mailbox_ptr, VOID *message, | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 721 UNSIGNED suspend) | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 722 { | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 723 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 724 R1 MB_MCB *mailbox; /* Mailbox control block ptr */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 725 MB_SUSPEND suspend_block; /* Allocate suspension block */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 726 R2 MB_SUSPEND *suspend_ptr; /* Pointer to suspend block */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 727 R3 UNSIGNED *source_ptr; /* Pointer to source */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 728 R4 UNSIGNED *destination_ptr; /* Pointer to destination */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 729 TC_TCB *task; /* Task pointer */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 730 STATUS preempt; /* Preemption flag */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 731 STATUS status; /* Completion status */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 732 NU_SUPERV_USER_VARIABLES | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 733 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 734 /* Switch to supervisor mode */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 735 NU_SUPERVISOR_MODE(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 736 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 737 /* Move input mailbox pointer into internal pointer. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 738 mailbox = (MB_MCB *) mailbox_ptr; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 739 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 740 #ifdef NU_ENABLE_STACK_CHECK | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 741 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 742 /* Call stack checking function to check for an overflow condition. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 743 TCT_Check_Stack(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 744 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 745 #endif | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 746 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 747 #ifdef NU_ENABLE_HISTORY | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 748 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 749 /* Make an entry that corresponds to this function in the system history | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 750 log. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 751 HIC_Make_History_Entry(NU_RECEIVE_FROM_MAILBOX_ID, (UNSIGNED) mailbox, | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 752 (UNSIGNED) message, (UNSIGNED) suspend); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 753 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 754 #endif | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 755 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 756 /* Initialize the status as successful. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 757 status = NU_SUCCESS; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 758 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 759 /* Protect against simultaneous access to the mailbox. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 760 TCT_System_Protect(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 761 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 762 /* Determine if the mailbox is empty or full. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 763 if (mailbox -> mb_message_present) | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 764 { | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 765 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 766 /* Copy message from mailbox into the caller's area. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 767 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 768 /* Setup the source and destination pointers. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 769 source_ptr = &(mailbox -> mb_message_area[0]); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 770 destination_ptr = (UNSIGNED *) message; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 771 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 772 /* Copy the message directly into the waiting task's | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 773 destination. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 774 *destination_ptr = *source_ptr; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 775 *(destination_ptr + 1) = *(source_ptr + 1); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 776 *(destination_ptr + 2) = *(source_ptr + 2); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 777 *(destination_ptr + 3) = *(source_ptr + 3); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 778 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 779 /* Determine if another task is waiting to place something into the | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 780 mailbox. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 781 if (mailbox -> mb_suspension_list) | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 782 { | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 783 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 784 /* Yes, another task is waiting to send something to the | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 785 mailbox. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 786 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 787 /* Decrement the number of tasks waiting counter. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 788 mailbox -> mb_tasks_waiting--; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 789 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 790 #ifdef INCLUDE_PROVIEW | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 791 _RTProf_DumpMailBox(RT_PROF_RECEIVE_FROM_MAILBOX,mailbox,RT_PROF_OK); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 792 #endif /* INCLUDE_PROVIEW */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 793 /* Remove the first suspended block from the list. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 794 suspend_ptr = mailbox -> mb_suspension_list; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 795 CSC_Remove_From_List((CS_NODE **) | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 796 &(mailbox -> mb_suspension_list), | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 797 &(suspend_ptr -> mb_suspend_link)); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 798 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 799 /* Setup the source and destination pointers. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 800 source_ptr = suspend_ptr -> mb_message_area; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 801 destination_ptr = &(mailbox -> mb_message_area[0]); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 802 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 803 /* Copy the message directly into the waiting task's | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 804 destination. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 805 *destination_ptr = *source_ptr; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 806 *(destination_ptr + 1) = *(source_ptr + 1); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 807 *(destination_ptr + 2) = *(source_ptr + 2); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 808 *(destination_ptr + 3) = *(source_ptr + 3); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 809 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 810 /* Setup the appropriate return value. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 811 suspend_ptr -> mb_return_status = NU_SUCCESS; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 812 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 813 /* Resume the suspended task. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 814 preempt = | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 815 TCC_Resume_Task((NU_TASK *) suspend_ptr -> mb_suspended_task, | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 816 NU_MAILBOX_SUSPEND); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 817 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 818 /* Determine if a preempt condition is present. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 819 if (preempt) | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 820 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 821 /* Transfer control to the system if the resumed task function | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 822 detects a preemption condition. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 823 TCT_Control_To_System(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 824 } | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 825 else | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 826 { | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 827 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 828 /* Clear the message present flag. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 829 mailbox -> mb_message_present = NU_FALSE; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 830 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 831 #ifdef INCLUDE_PROVIEW | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 832 _RTProf_DumpMailBox(RT_PROF_RECEIVE_FROM_MAILBOX,mailbox,RT_PROF_OK); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 833 #endif /* INCLUDE_PROVIEW */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 834 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 835 } | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 836 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 837 } | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 838 else | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 839 { | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 840 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 841 /* Mailbox is empty. Determine if suspension is required. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 842 if (suspend) | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 843 { | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 844 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 845 /* Suspension is required. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 846 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 847 /* Increment the number of tasks waiting on the mailbox counter. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 848 mailbox -> mb_tasks_waiting++; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 849 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 850 #ifdef INCLUDE_PROVIEW | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 851 _RTProf_DumpMailBox(RT_PROF_RECEIVE_FROM_MAILBOX,mailbox,RT_PROF_WAIT); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 852 #endif /* INCLUDE_PROVIEW */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 853 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 854 /* Setup the suspend block and suspend the calling task. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 855 suspend_ptr = &suspend_block; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 856 suspend_ptr -> mb_mailbox = mailbox; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 857 suspend_ptr -> mb_suspend_link.cs_next = NU_NULL; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 858 suspend_ptr -> mb_suspend_link.cs_previous = NU_NULL; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 859 suspend_ptr -> mb_message_area = (UNSIGNED *) message; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 860 task = (TC_TCB *) TCT_Current_Thread(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 861 suspend_ptr -> mb_suspended_task = task; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 862 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 863 /* Determine if priority or FIFO suspension is associated with the | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 864 mailbox. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 865 if (mailbox -> mb_fifo_suspend) | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 866 { | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 867 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 868 /* FIFO suspension is required. Link the suspend block into | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 869 the list of suspended tasks on this mailbox. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 870 CSC_Place_On_List((CS_NODE **) &(mailbox ->mb_suspension_list), | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 871 &(suspend_ptr -> mb_suspend_link)); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 872 } | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 873 else | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 874 { | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 875 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 876 /* Get the priority of the current thread so the suspend block | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 877 can be placed in the appropriate place. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 878 suspend_ptr -> mb_suspend_link.cs_priority = | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 879 TCC_Task_Priority(task); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 880 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 881 CSC_Priority_Place_On_List((CS_NODE **) | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 882 &(mailbox -> mb_suspension_list), | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 883 &(suspend_block.mb_suspend_link)); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 884 } | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 885 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 886 /* Finally, suspend the calling task. Note that the suspension call | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 887 automatically clears the protection on the mailbox. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 888 TCC_Suspend_Task((NU_TASK *) task, NU_MAILBOX_SUSPEND, | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 889 MBC_Cleanup, &suspend_block, suspend); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 890 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 891 /* Pickup the return status. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 892 status = suspend_ptr -> mb_return_status; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 893 } | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 894 else | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 895 { | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 896 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 897 /* Return a status of NU_MAILBOX_EMPTY because there is | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 898 nothing in the mailbox. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 899 status = NU_MAILBOX_EMPTY; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 900 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 901 #ifdef INCLUDE_PROVIEW | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 902 _RTProf_DumpMailBox(RT_PROF_RECEIVE_FROM_MAILBOX,mailbox,RT_PROF_FAIL); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 903 #endif /* INCLUDE_PROVIEW */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 904 } | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 905 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 906 } | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 907 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 908 /* Release protection. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 909 TCT_Unprotect(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 910 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 911 /* Return to user mode */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 912 NU_USER_MODE(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 913 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 914 /* Return the completion status. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 915 return(status); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 916 } | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 917 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 918 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 919 /*************************************************************************/ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 920 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 921 /* FUNCTION */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 922 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 923 /* MBC_Cleanup */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 924 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 925 /* DESCRIPTION */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 926 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 927 /* This function is responsible for removing a suspension block */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 928 /* from a mailbox. It is not called unless a timeout or a task */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 929 /* terminate is in progress. Note that protection is already in */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 930 /* effect - the same protection at suspension time. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 931 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 932 /* CALLED BY */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 933 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 934 /* TCC_Timeout Task timeout */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 935 /* TCC_Terminate Task terminate */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 936 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 937 /* CALLS */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 938 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 939 /* CSC_Remove_From_List Remove suspend block from */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 940 /* the suspension list */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 941 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 942 /* INPUTS */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 943 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 944 /* information Pointer to suspend block */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 945 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 946 /* OUTPUTS */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 947 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 948 /* None */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 949 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 950 /* HISTORY */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 951 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 952 /* DATE REMARKS */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 953 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 954 /* 03-01-1993 Created initial version 1.0 */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 955 /* 04-19-1993 Verified version 1.0 */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 956 /* */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 957 /*************************************************************************/ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 958 VOID MBC_Cleanup(VOID *information) | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 959 { | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 960 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 961 MB_SUSPEND *suspend_ptr; /* Suspension block pointer */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 962 NU_SUPERV_USER_VARIABLES | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 963 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 964 /* Switch to supervisor mode */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 965 NU_SUPERVISOR_MODE(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 966 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 967 /* Use the information pointer as a suspend pointer. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 968 suspend_ptr = (MB_SUSPEND *) information; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 969 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 970 /* By default, indicate that the service timed-out. It really does not | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 971 matter if this function is called from a terminate request since | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 972 the task does not resume. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 973 suspend_ptr -> mb_return_status = NU_TIMEOUT; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 974 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 975 /* Decrement the number of tasks waiting counter. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 976 (suspend_ptr -> mb_mailbox) -> mb_tasks_waiting--; | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 977 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 978 /* Unlink the suspend block from the suspension list. */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 979 CSC_Remove_From_List((CS_NODE **) | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 980 &((suspend_ptr -> mb_mailbox) -> mb_suspension_list), | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 981 &(suspend_ptr -> mb_suspend_link)); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 982 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 983 /* Return to user mode */ | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 984 NU_USER_MODE(); | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 985 } | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 986 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 987 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 988 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 989 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 990 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 991 | 
| 
947b1f473960
beginning of nuc-fw
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 992 | 
