1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
32 33 34 35
36
37 package ti.sdo.ipc.gates;
38
39 import xdc.runtime.Assert;
40 import xdc.runtime.IGateProvider;
41
42 import ti.sdo.ipc.interfaces.IGateMPSupport;
43
44 /*!
45 * ======== GateHWSem ========
46 * Multiprocessor gate that utilizes hardware semaphores
47 */
48 @ModuleStartup
49
50 module GateHWSem inherits IGateMPSupport
51 {
52 /*! @_nodoc */
53 metaonly struct BasicView {
54 Ptr semNum;
55 UInt nested;
56 String enteredBy;
57 }
58
59 /*!
60 * ======== rovViewInfo ========
61 * @_nodoc
62 */
63 @Facet
64 metaonly config xdc.rov.ViewInfo.Instance rovViewInfo =
65 xdc.rov.ViewInfo.create({
66 viewMap: [
67 ['Basic',
68 {
69 type: xdc.rov.ViewInfo.INSTANCE,
70 viewInitFxn: 'viewInitBasic',
71 structName: 'BasicView'
72 }
73 ],
74 ]
75 });
76
77 /*!
78 * ======== A_invSemNum ========
79 * Asserted when supplied semNum is invalid for the relevant device
80 */
81 config Assert.Id A_invSemNum = {
82 msg: "A_invSemNum: Invalid hardware semaphore number"
83 };
84
85 /*!
86 * ======== setReserved ========
87 * Reserve a HW sempahore for use outside of IPC.
88 *
89 * GateMP will, by default, manage all HW semaphores on the device unless
90 * this API is used to set aside specific HW semaphores for use outside
91 * of IPC.
92 *
93 * @param(semNum) HW semaphore number to reserve
94 */
95 metaonly Void setReserved(UInt semNum);
96
97 instance:
98
99 /*!
100 * @_nodoc
101 * ======== enter ========
102 * Enter this gate
103 */
104 @DirectCall
105 override IArg enter();
106
107 /*!
108 * @_nodoc
109 * ======== leave ========
110 * Leave this gate
111 */
112 @DirectCall
113 override Void leave(IArg key);
114
115 internal:
116
117 /*! Device-specific base address for HW Semaphore subsystem */
118 config Ptr baseAddr;
119
120 /*! Device-specific query offset for HW Semaphore subsystem (for ROV) */
121 config Ptr queryAddr;
122
123 /*! Device-specific number of semphores in the HW Semaphore subsystem */
124 config UInt numSems;
125
126 /*! Mask of reserved HW semaphores */
127 config Bits32 reservedMaskArr[];
128
129 struct Instance_State {
130 UInt semNum;
131 UInt nested;
132 IGateProvider.Handle localGate;
133 };
134 }
135 136 137
138