1 // Copyright (C) 2018-2020 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
8 /// @brief Application configuration Leon header
10 #ifndef _XLINKPRIVATEDEFINES_H
11 #define _XLINKPRIVATEDEFINES_H
13 #include "XLinkStream.h"
15 #if !defined(XLINK_ALIGN_TO_BOUNDARY)
16 # if defined(_WIN32) && !defined(__GNUC__)
17 # define XLINK_ALIGN_TO_BOUNDARY(_n) __declspec(align(_n))
19 # define XLINK_ALIGN_TO_BOUNDARY(_n) __attribute__((aligned(_n)))
21 #endif // XLINK_ALIGN_TO_BOUNDARY
28 #define MAXIMUM_SEMAPHORES 32
29 #define __CACHE_LINE_SIZE 64
31 typedef int32_t eventId_t;
34 * @brief State for xLinkDesc_t
43 * @brief Device description
45 typedef struct xLinkDeviceHandle_t {
46 XLinkProtocol_t protocol;
48 } xLinkDeviceHandle_t;
51 * @brief XLink primitive for each device
53 typedef struct xLinkDesc_t {
54 // Incremental number, doesn't get decremented.
55 uint32_t nextUniqueStreamId;
56 streamDesc_t availableStreams[XLINK_MAX_STREAMS];
57 xLinkState_t peerState;
58 xLinkDeviceHandle_t deviceHandle;
60 XLink_sem_t dispatcherClosedSem;
62 //Deprecated fields. Begin.
64 //Deprecated fields. End.
68 streamId_t XLinkAddOrUpdateStream(void *fd, const char *name,
69 uint32_t writeSize, uint32_t readSize, streamId_t forcedId);
71 //events which are coming from remote
74 /*USB-X_LINK_PCIE related events*/
78 XLINK_CREATE_STREAM_REQ,
79 XLINK_CLOSE_STREAM_REQ,
83 //note that is important to separate request and response
87 XLINK_CREATE_STREAM_RESP,
88 XLINK_CLOSE_STREAM_RESP,
93 /*X_LINK_IPC related events*/
96 IPC_CREATE_STREAM_REQ,
101 IPC_CREATE_STREAM_RESP,
102 IPC_CLOSE_STREAM_RESP,
109 } xLinkEventOrigin_t;
117 #define MAX_EVENTS 64
118 #define MAX_SCHEDULERS MAX_LINKS
119 #define XLINK_MAX_DEVICES MAX_LINKS
121 typedef struct xLinkEventHeader_t{
123 xLinkEventType_t type;
124 char streamName[MAX_STREAM_NAME_LENGTH];
133 uint32_t localServe : 1;
134 uint32_t terminate : 1;
135 uint32_t bufferFull : 1;
136 uint32_t sizeTooBig : 1;
137 uint32_t noSuchStream : 1;
142 typedef struct xLinkEvent_t {
143 XLINK_ALIGN_TO_BOUNDARY(64) xLinkEventHeader_t header;
144 xLinkDeviceHandle_t deviceHandle;
148 #define XLINK_INIT_EVENT(event, in_streamId, in_type, in_size, in_data, in_deviceHandle) do { \
149 (event).header.streamId = (in_streamId); \
150 (event).header.type = (in_type); \
151 (event).header.size = (in_size); \
152 (event).data = (in_data); \
153 (event).deviceHandle = (in_deviceHandle); \
156 #define XLINK_EVENT_ACKNOWLEDGE(event) do { \
157 (event)->header.flags.bitField.ack = 1; \
158 (event)->header.flags.bitField.nack = 0; \
161 #define XLINK_EVENT_NOT_ACKNOWLEDGE(event) do { \
162 (event)->header.flags.bitField.ack = 0; \
163 (event)->header.flags.bitField.nack = 1; \
166 #define XLINK_SET_EVENT_FAILED_AND_SERVE(event) do { \
167 XLINK_EVENT_NOT_ACKNOWLEDGE(event); \
168 (event)->header.flags.bitField.localServe = 1; \
177 /* end of include file */