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