PDK API Guide for J721E
gptpipc.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2023 Texas Instruments Incorporated
3  * Copyright (c) 2023 Excelfore Corporation (https://excelfore.com)
4  *
5  * All rights reserved not granted herein.
6  * Limited License.
7  *
8  * Texas Instruments Incorporated grants a world-wide, royalty-free,
9  * non-exclusive license under copyrights and patents it now or hereafter
10  * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
11  * this software subject to the terms herein. With respect to the foregoing patent
12  * license, such license is granted solely to the extent that any such patent is necessary
13  * to Utilize the software alone. The patent license shall not apply to any combinations which
14  * include this software, other than combinations with devices manufactured by or for TI ("TI Devices").
15  * No hardware patent is licensed hereunder.
16  *
17  * Redistributions must preserve existing copyright notices and reproduce this license (including the
18  * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
19  * in the documentation and/or other materials provided with the distribution
20  *
21  * Redistribution and use in binary form, without modification, are permitted provided that the following
22  * conditions are met:
23  *
24  * * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
25  * software provided in binary form.
26  * * any redistribution and use are licensed by TI for use only with TI Devices.
27  * * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
28  *
29  * If software source code is provided to you, modification and redistribution of the source code are permitted
30  * provided that the following conditions are met:
31  *
32  * * any redistribution and use of the source code, including any resulting derivative works, are licensed by
33  * TI for use only with TI Devices.
34  * * any redistribution and use of any object code compiled from the source code and any resulting derivative
35  * works, are licensed by TI for use only with TI Devices.
36  *
37  * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
38  * promote products derived from this software without specific prior written permission.
39  *
40  * DISCLAIMER.
41  *
42  * THIS SOFTWARE IS PROVIDED BY TI AND TI"S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
43  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
44  * IN NO EVENT SHALL TI AND TI"S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
45  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
46  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
47  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
48  * POSSIBILITY OF SUCH DAMAGE.
49 */
58 #ifndef __GPTPIPC_H_
59 #define __GPTPIPC_H_
60 
61 #include "gptpbasetypes.h"
62 #include <stdint.h>
63 
69 #define GPTP2D_IPC_CB_SOCKET_NODE "/tmp/gptp2d_ipc"
70 
71 
75 typedef enum {
88 
89 #define GPTPIPC_EXT_SCRIPT "gptpipc_extscript"
90 
94 typedef enum {
108 
112 #define GPTPIPC_EVENT_CLOCK_FLAG_NETDEV_DOWN (1<<GPTPIPC_EVENT_CLOCK_NETDEV_DOWN)
113 #define GPTPIPC_EVENT_CLOCK_FLAG_NETDEV_UP (1<<GPTPIPC_EVENT_CLOCK_NETDEV_UP)
114 #define GPTPIPC_EVENT_CLOCK_FLAG_PHASE_UPDATE (1<<GPTPIPC_EVENT_CLOCK_PHASE_UPDATE)
115 #define GPTPIPC_EVENT_CLOCK_FLAG_FREQ_UPDATE (1<<GPTPIPC_EVENT_CLOCK_FREQ_UPDATE)
116 #define GPTPIPC_EVENT_CLOCK_FLAG_GM_SYNCED (1<<GPTPIPC_EVENT_CLOCK_GM_SYNCED)
117 #define GPTPIPC_EVENT_CLOCK_FLAG_GM_UNSYNCED (1<<GPTPIPC_EVENT_CLOCK_GM_UNSYNCED)
118 #define GPTPIPC_EVENT_CLOCK_FLAG_GM_CHANGE (1<<GPTPIPC_EVENT_CLOCK_GM_CHANGE)
119 #define GPTPIPC_EVENT_PORT_FLAG_AS_CAPABLE_DOWN (1<<GPTPIPC_EVENT_PORT_AS_CAPABLE_DOWN)
120 #define GPTPIPC_EVENT_PORT_FLAG_AS_CAPABLE_UP (1<<GPTPIPC_EVENT_PORT_AS_CAPABLE_UP)
121 #define GPTPIPC_EVENT_CLOCK_FLAG_ACTIVE_DOMAIN (1<<GPTPIPC_EVENT_CLOCK_ACTIVE_DOMAIN)
122 #define GPTPIPC_EVENT_CLOCK_FLAG_TIMELEAP_FUTURE (1<<GPTPIPC_EVENT_CLOCK_TIMELEAP_FUTURE)
123 #define GPTPIPC_EVENT_CLOCK_FLAG_TIMELEAP_PAST (1<<GPTPIPC_EVENT_CLOCK_TIMELEAP_PAST)
124 
128 typedef struct gptpipc_notice_data {
129  uint32_t event_flags;
130  int32_t domainNumber;
131  int32_t domainIndex;
132  int32_t portIndex;
136  uint8_t lastGmFreqChangePk[sizeof(double)];
137 } __attribute__((packed)) gptpipc_notice_data_t;
138 
150  int32_t subcmd;
151  int32_t msgtype;
152  int32_t eventtype;
153  float eventrate;
154  int32_t repeat;
155  int32_t interval;
156  int32_t eventpara;
157 } __attribute__((packed)) gptpipc_client_req_abnormal_t;
158 
167 typedef struct gptpipc_client_req_data {
169  // if domainNumber==-1, use domainIndex; if domainIndex==-1, use domainNumber
170  // if domainNumber==-1 and domainIndex==-1, all domains info is requested
171  int32_t domainNumber;
172  int32_t domainIndex;
173  // for ndprot, if portIndex=0, all ports info is requested. domain is always 0
174  // for gprot, if portIndex=0, all ports info for a specific domain or all domains
175  int32_t portIndex;
176  union {
177  gptpipc_client_req_abnormal_t abnd;
178  }u;
179 } __attribute__((packed)) gptpipc_client_req_data_t;
180 
190 #define GPTPIPC_MAX_NETDEV_NAME 16
191 #define GPTPIPC_MAX_PTPDEV_NAME 32
192 typedef struct gptpipc_data_netlink {
193  uint32_t speed;
194  uint32_t duplex;
196  uint8_t up;
199 } __attribute__((packed)) gptpipc_data_netlink_t;
200 
207 typedef struct gptpipc_ndport_data {
208  gptpipc_data_netlink_t nlstatus;
209 } __attribute__((packed)) gptpipc_ndport_data_t;
210 
225 typedef struct gptpipc_gport_data {
226  int32_t domainNumber;
227  int32_t portIndex;
229  uint8_t asCapable;
230  uint8_t portOper;
231  uint8_t gmStable;
232  uint8_t selectedState;
233  uint64_t pDelay;
237 } __attribute__((packed)) gptpipc_gport_data_t;
238 
255 typedef struct gptpipc_clock_data{
256  int32_t domainNumber;
257  int32_t portIndex;
263  int32_t adjppb;
265  uint16_t lastSyncSeqID;
266  uint8_t gmsync;
267  uint8_t domainActive;
268  uint8_t lastGmFreqChangePk[sizeof(double)];
269 } __attribute__((packed)) gptpipc_clock_data_t;
270 
272  int32_t portIndex;
273  uint32_t pdelay_req_send;
274  uint32_t pdelay_resp_rec;
278  uint32_t pdelay_req_rec;
282 } __attribute__((packed)) gptpipc_statistics_system_t;
283 
284 typedef struct gptpipc_statistics_tas{
285  int32_t domainNumber;
286  int32_t portIndex;
287  uint32_t sync_send;
288  uint32_t sync_fup_send;
289  uint32_t sync_rec;
290  uint32_t sync_rec_valid;
291  uint32_t sync_fup_rec;
293  uint32_t announce_send;
294  uint32_t announce_rec;
298  uint32_t signal_rec;
301 } __attribute__((packed)) gptpipc_statistics_tas_t;
302 
306 typedef enum {
314 
318 typedef struct gptpipc_gptpd_data{
320  union {
321  gptpipc_notice_data_t notice;
322  gptpipc_ndport_data_t ndportd;
323  gptpipc_gport_data_t gportd;
324  gptpipc_clock_data_t clockd;
325  gptpipc_statistics_system_t statsd;
326  gptpipc_statistics_tas_t stattd;
327  }u;
328 } __attribute__((packed)) gptpipc_gptpd_data_t;
329 
330 typedef int (*gptpipc_cb_t)(gptpipc_gptpd_data_t *ipcrd, void *cb_data);
331 
345 typedef struct gptpipc_thread_data{
347  int ipcstop;
348  char *pname;
349  int query_interval; //in msec
350  bool printdata;
351  int ipcfd;
353  void *cbdata;
354  int udpport;
355  char *udpaddr;
357 
369 
378 int gptpipc_init(gptpipc_thread_data_t *ipctd, int wait_toutsec);
379 
388 
389 #endif
390 
uint8_t domainActive
Definition: gptpipc.h:267
int32_t domainIndex
Definition: gptpipc.h:131
union gptpipc_gptpd_data::@3 u
int32_t portIndex
Definition: gptpipc.h:286
gptpipc_statistics_tas_t stattd
Definition: gptpipc.h:326
gptp clock data.
Definition: gptpipc.h:255
uint64_t lastSyncReceiptLocalTime_nsec
Definition: gptpipc.h:262
int32_t eventpara
Definition: gptpipc.h:156
Definition: gptpipc.h:96
#define GPTPIPC_MAX_PTPDEV_NAME
Definition: gptpipc.h:191
int32_t eventtype
Definition: gptpipc.h:152
Definition: gptpipc.h:79
CB_THREAD_T ipcthread
Definition: gptpipc.h:346
Definition: gptpipc.h:284
gptp notice data type
Definition: gptpipc.h:128
uint16_t gmTimeBaseIndicator
Definition: gptpipc.h:264
uint8_t gmStable
Definition: gptpipc.h:231
Definition: gptpipc.h:81
Definition: gptpipc.h:102
int64_t lastGmPhaseChange_nsec
Definition: gptpipc.h:134
ClockIdentity gmClockId
Definition: gptpipc.h:260
Definition: gptpipc.h:104
void * cbdata
Definition: gptpipc.h:353
int query_interval
Definition: gptpipc.h:349
Definition: gptpipc.h:271
Definition: gptpipc.h:78
uint32_t event_flags
Definition: gptpipc.h:129
int32_t domainNumber
Definition: gptpipc.h:285
int64_t lastGmPhaseChange_nsec
Definition: gptpipc.h:258
gptpipc_ndport_data_t ndportd
Definition: gptpipc.h:322
int gptpipc_close(gptpipc_thread_data_t *ipctd)
close IPC thread.
gptpipc_notice_data_t notice
Definition: gptpipc.h:321
gptpd_data_type_t dtype
Definition: gptpipc.h:319
gptpipc_cb_t cb
Definition: gptpipc.h:352
gptpipc_client_req_abnormal_t abnd
Definition: gptpipc.h:177
int32_t domainIndex
Definition: gptpipc.h:172
gptpipc_data_netlink_t nlstatus
Definition: gptpipc.h:208
int32_t portIndex
Definition: gptpipc.h:227
Definition: gptpipc.h:310
uint32_t signal_rec
Definition: gptpipc.h:298
int32_t repeat
Definition: gptpipc.h:154
uint32_t pdelay_req_rec
Definition: gptpipc.h:278
#define GPTPIPC_MAX_NETDEV_NAME
gptp data for netlink. this structure is formed with following details:
Definition: gptpipc.h:190
int32_t domainNumber
Definition: gptpipc.h:171
gptpipc_statistics_system_t statsd
Definition: gptpipc.h:325
int32_t portIndex
Definition: gptpipc.h:143
Definition: gptpipc.h:95
int32_t domainNumber
Definition: gptpipc.h:226
char * udpaddr
Definition: gptpipc.h:355
Definition: gptpipc.h:84
Definition: gptpipc.h:97
ClockIdentity clockId
Definition: gptpipc.h:259
Definition: gptpipc.h:83
char * pname
Definition: gptpipc.h:348
int send_ipc_request(int ipcfd, int domainNumber, int portIndex, gptp_ipc_command_t cmd)
request IPC data
Definition: gptpipc.h:103
Definition: gptpipc.h:99
Definition: gptpipc.h:77
uint32_t signal_gptp_capable_rec
Definition: gptpipc.h:300
gptpipc_clock_data_t clockd
Definition: gptpipc.h:324
uint32_t announce_rec
Definition: gptpipc.h:294
uint64_t lastSyncReceiptTime_nsec
Definition: gptpipc.h:261
Definition: gptpipc.h:100
gptp ipc client request, register/deregister abnormal event.
Definition: gptpipc.h:149
Definition: gptpipc.h:307
int32_t domainNumber
Definition: gptpipc.h:141
Definition: gptpipc.h:308
Definition: gptpipc.h:309
int ipcfd
Definition: gptpipc.h:351
int(* gptpipc_cb_t)(gptpipc_gptpd_data_t *ipcrd, void *cb_data)
Definition: gptpipc.h:330
union gptpipc_client_req_data::@1 u
uint32_t sync_send
Definition: gptpipc.h:287
gptpipc_event_t
Enumeration for GPTP IPC events.
Definition: gptpipc.h:94
Definition: gptpipc.h:311
uint32_t pdelay_resp_fup_rec
Definition: gptpipc.h:276
float eventrate
Definition: gptpipc.h:153
Definition: gptpipc.h:312
int32_t portIndex
Definition: gptpipc.h:257
uint32_t announce_send
Definition: gptpipc.h:293
Definition: gptpipc.h:98
#define MAX_PATH_TRACE_N
Macro to define maximum path trace.
Definition: gptpbasetypes.h:79
int32_t domainNumber
Definition: gptpipc.h:130
Definition: gptpipc.h:86
double pDelayRateRatio
Definition: gptpipc.h:234
uint64_t pDelay
Definition: gptpipc.h:233
Definition: gptpipc.h:80
uint8_t selectedState
Definition: gptpipc.h:232
Definition: gptpipc.h:105
uint8_t gmsync
Definition: gptpipc.h:266
uint32_t signal_msg_interval_rec
Definition: gptpipc.h:299
int32_t msgtype
Definition: gptpipc.h:151
uint16_t gmTimeBaseIndicator
Definition: gptpipc.h:135
uint8_t ClockIdentity[CLOCK_IDENTITY_LENGTH]
Definition: gptpbasetypes.h:86
gptp_ipc_command_t cmd
Definition: gptpipc.h:140
uint8_t asCapable
Definition: gptpipc.h:229
uint32_t announce_rec_valid
Definition: gptpipc.h:295
int32_t domainNumber
Definition: gptpipc.h:256
uint32_t pdelay_resp_rec_valid
Definition: gptpipc.h:275
bool printdata
Definition: gptpipc.h:350
uint32_t sync_fup_rec
Definition: gptpipc.h:291
Definition: gptpipc.h:82
variables to run gptp ipc thread
Definition: gptpipc.h:345
int gptpipc_init(gptpipc_thread_data_t *ipctd, int wait_toutsec)
run gptp2d ipc thread
gptp ipc client request data. this structure formed with following details:
Definition: gptpipc.h:167
int32_t portIndex
Definition: gptpipc.h:272
#define CB_THREAD_T
Definition: cb_thread.h:91
uint32_t sync_rec_valid
Definition: gptpipc.h:290
ClockIdentity gmIdentity
Definition: gptpipc.h:133
int32_t subcmd
Definition: gptpipc.h:150
uint32_t signal_gptp_capable_send
Definition: gptpipc.h:297
int32_t portIndex
Definition: gptpipc.h:175
to retreive netlink status. this structure has nlstatus type of gptpipc_data_netlinnk_t....
Definition: gptpipc.h:207
uint32_t pdelay_req_rec_valid
Definition: gptpipc.h:279
uint32_t pdelay_resp_send
Definition: gptpipc.h:280
uint32_t signal_msg_interval_send
Definition: gptpipc.h:296
uint8_t annPathSequenceCount
Definition: gptpipc.h:235
uint16_t lastSyncSeqID
Definition: gptpipc.h:265
data type to be used in IPC.
Definition: gptpipc.h:318
gptpd_data_type_t
data from gptp2d to connected clients
Definition: gptpipc.h:306
gptpipc_gport_data_t gportd
Definition: gptpipc.h:323
gptp_ipc_command_t cmd
Definition: gptpipc.h:168
ClockIdentity gmClockId
Definition: gptpipc.h:228
Definition: gptpipc.h:85
uint8_t portOper
Definition: gptpipc.h:230
uint32_t pdelay_req_send
Definition: gptpipc.h:273
File contains base datatypes used, as per IEEE 802.1AS Standard Documentation.
gptp_ipc_command_t
command for gptp ipc.
Definition: gptpipc.h:75
uint32_t sync_rec
Definition: gptpipc.h:289
int32_t portIndex
Definition: gptpipc.h:132
int32_t interval
Definition: gptpipc.h:155
uint8_t lastGmFreqChangePk[sizeof(double)]
Definition: gptpipc.h:136
ClockIdentity annPathSequence[MAX_PATH_TRACE_N]
Definition: gptpipc.h:236
uint32_t pdelay_resp_fup_rec_valid
Definition: gptpipc.h:277
Definition: gptpipc.h:76
Definition: gptpipc.h:106
uint32_t pdelay_resp_rec
Definition: gptpipc.h:274
int udpport
Definition: gptpipc.h:354
int32_t adjppb
Definition: gptpipc.h:263
typedef __attribute__
int ipcstop
Definition: gptpipc.h:347
grand master port data. this structure formed with following details:
Definition: gptpipc.h:225
uint32_t sync_fup_rec_valid
Definition: gptpipc.h:292
uint32_t pdelay_resp_fup_send
Definition: gptpipc.h:281
Definition: gptpipc.h:101
uint32_t sync_fup_send
Definition: gptpipc.h:288
uint8_t lastGmFreqChangePk[sizeof(double)]
Definition: gptpipc.h:268