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 * ======== TransportShmNotify ========
38 * Transport for MessageQ that acts on shared memory.
39 *
40 * TransportShmSingle is a simplified version of {@link TransportShm}. This
41 * transport uses the Notify module to do all the real work. The 'put'
42 * function passes the message to the other processor using the 'payload'
43 * parameter to Notify_sendEvent(). The receive side simply casts this
44 * payload parameter to a MessageQ_Msg and enqueues it locally.
45 *
46 * CAVEATS:
47 *
48 * The sender will spin in Notify_sendEvent until the receive side has
49 * read the previous message. This is Notify-driver specific.
50 * NotifyDriverShm will spin before sending a new event if the prior event
51 * hasn't been handled. Some Notify drivers may support a FIFO or queue
52 * for these events to mitigate this busy-wait affect.
53 */
54 @InstanceFinalize
55 @InstanceInitError
56
57 module TransportShmNotify inherits ti.sdo.ipc.interfaces.IMessageQTransport
58 {
59 /*!
60 * ======== notifyEventId ========
61 * Notify event ID for transport.
62 */
63 config UInt16 notifyEventId = 2;
64
65 /*!
66 * @_nodoc
67 * Determines whether the put() call unconditionally does a Cache_wbInv of
68 * the message before sending a notification to the remote core.
69 * The default value of 'true' allows us to skip the additional step of
70 * checking whether cache is enabled for the message.
71 *
72 * This should be set to 'false' when it is optimal to perform this
73 * check. This may be OPTIMAL when sending a message that is allocated
74 * from a shared region whose cacheFlag is 'false' and when the write-back
75 * cache operation is expensive.
76 */
77 config Bool alwaysWriteBackMsg = true;
78
79 instance:
80
81 internal:
82
83 Void notifyFxn(UInt16 procId, UInt16 lineId, UInt32 eventId, UArg arg,
84 UInt32 payload);
85
86
87 struct Instance_State {
88 UInt16 remoteProcId;
89 UInt16 priority;
90 };
91 }