1 /*
2 * Copyright (c) 2008 Texas Instruments. All rights reserved.
3 * This program and the accompanying materials are made available under the
4 * terms of the Eclipse Public License v1.0 and Eclipse Distribution License
5 * v. 1.0 which accompanies this distribution. The Eclipse Public License is
6 * available at http://www.eclipse.org/legal/epl-v10.html and the Eclipse
7 * Distribution License is available at
8 * http://www.eclipse.org/org/documents/edl-v10.php.
9 *
10 * Contributors:
11 * Texas Instruments - initial implementation
12 * */
13 /*
14 * ======== Semaphore.xdc ========
15 */
16
17 import xdc.runtime.Assert;
18 import xdc.runtime.Error;
19 import xdc.runtime.knl.ISemaphore;
20
21 /*!
22 * ======== Semaphore ========
23 * Provides semaphore services when an ISemaphore.Handle is available.
24 *
25 * An application can isolate itself from ISemaphore implementations by using
26 * this module. The application must first obtain an ISemaphore.Handle.
27 * It make get such a handle by directly calling {@link SemThread#create} or
28 * {@link SemProcess#create}. Then the application can use the generic
29 * APIs provided by this module.
30 */
31
32 module Semaphore
33 {
34 /*!
35 * ======== PendStatus ========
36 * Error codes returned by Semaphore_pend
37 */
38 enum PendStatus {
39 PendStatus_ERROR = -1,
40 PendStatus_TIMEOUT = 0,
41 PendStatus_SUCCESS = 1
42 };
43
44 /*! Used as the timeout value to specify wait forever */
45 const UInt FOREVER = ISemaphore.FOREVER;
46
47 /*!
48 * Proxy used for optimization.
49 *
50 * If ALL ISemaphore.Handles were created using the same module
51 * (e.g SemProcess) then setting this Proxy to SemProcess and
52 * setting Semaphore.Proxy.abstractInstances$ = false,
53 * Semaphore APIs can have better performance.
54 */
55 proxy Proxy inherits ISemaphore;
56
57 /*!
58 * ======== pend ========
59 * Wait for the semaphore to have a nonzero count, then decrement it.
60 *
61 * The function returns one of the following:
62 * @p(blist) 63 * -{@link #PendStatus_ERROR} if an error occured.
64 * -{@link #PendStatus_TIMEOUT} denotes timeout.
65 * -{@link #PendStatus_SUCCESS} semaphore was decremented.
66 *
67 * @p 68 *
69 * @param(sem) ISemaphore.Handle to be used
70 * @param(timeout) timeout in microseconds or
71 * {@link #FOREVER Semaphore_FOREVER} to wait forever
72 * @param(eb) Pointer to Error.Block
73 * @a(returns) status returned. (refer to above description)
74 */
75 Int pend(ISemaphore.Handle sem, UInt timeout, Error.Block *eb);
76
77 /*!
78 * ======== post ========
79 * Increment the semaphore count.
80 *
81 * @param(sem) ISemaphore.Handle to be used
82 * @param(eb) Pointer to Error.Block
83 * @a(returns) true for success, false for error in Error block.
84 */
85 Bool post(ISemaphore.Handle sem, Error.Block *eb);
86 }
87 /*
88 * @(#) xdc.runtime.knl; 1, 0, 0,195; 9-20-2012 15:02:06; /db/ztree/library/trees/xdc/xdc-y36x/src/packages/
89 */
90