forked from acontis/atemsys
-
Notifications
You must be signed in to change notification settings - Fork 0
/
atemsys.h
431 lines (378 loc) · 22.7 KB
/
atemsys.h
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
/*-----------------------------------------------------------------------------
* atemsys.h
* Copyright (c) 2009 - 2020 acontis technologies GmbH, Ravensburg, Germany
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* Response Paul Bussmann
* Description atemsys.ko headerfile
* Note: This header is also included by userspace!
* Changes:
*
* V1.0.00 - Inital, PCI/PCIe only.
* V1.1.00 - PowerPC tweaks.
* Support for SoC devices (no PCI, i.e. Freescale eTSEC).
* Support for current linux kernel's (3.0). Removed deprecated code.
* V1.2.00 - 64 bit support. Compat IOCTL's for 32-Bit usermode apps.
* V1.2.01 - request_irq() sometimes failed -> Map irq to virq under powerpc.
* V1.2.02 - Support for current Linux kernel (3.8.0)
* V1.2.03 - Support for current Linux kernel (3.8.13) on armv7l (beaglebone)
* V1.2.04 - Use dma_alloc_coherent for arm, because of DMA memory corruption on
* Xilinx Zynq.
* V1.2.05 - OF Device Tree support for Xilinx Zynq (VIRQ mapping)
* V1.2.06 - Wrong major version.
* V1.2.07 - Tolerate closing, e.g. due to system()-calls.
* V1.2.08 - Add VM_DONTCOPY to prevent crash on system()-calls
* V1.2.09 - Apply second controller name change in dts (standard GEM driver for Xilinx Zynq) to avoid default driver loading.
* V1.2.10 - Removed IO address alignment to support R6040
* V1.2.11 - Fix lockup in device_read (tLinkOsIst if NIC in interrupt mode) on dev_int_disconnect
* V1.2.12 - Fix underflow in dev_disable_irq() when more than one interrupts pending because of disable_irq_nosync usage
* V1.2.13 - Fix usage of x64 PCI physical addresses
* V1.2.14 - Changes for using with kernel beginnig from 2.6.18
* V1.2.15 - Add udev auto-loading support via DTB
* V1.2.16 - Add interrupt mode support for Xenomai 3 (Cobalt)
* V1.3.01 - Add IOCTL_MOD_GETVERSION
* V1.3.02 - Add support for kernel >= 4.11.00
* V1.3.03 - Fix IOCTL_MOD_GETVERSION
* V1.3.04 - Fix interrupt deadlock in Xenomai 2
* V1.3.05 - Use correct PCI domain
* V1.3.06 - Use rtdm_printk for Cobalt, add check if dev_int_disconnect was successful
* V1.3.07 - Remove IOCTL_PCI_RELEASE_DEVICE warnings due to untracked IOCTL_PCI_CONF_DEVICE
* V1.3.08 - Add support for kernel >= 4.13.00
* V1.3.09 - Add support for PRU ICSS in Device Tree
* V1.3.10 - Fix compilation on Ubuntu 18.04, Kernel 4.9.90, Xenomai 3.0.6 x64 Cobalt
* V1.3.11 - Add enable access to ARM cycle count register(CCNT)
* V1.3.12 - Add atemsys API version selection
* V1.3.13 - Add ARM64 support
* V1.3.14 - Fix edge type interrupt (enabled if Kernel >= 3.4.1, because exported irq_to_desc needed)
* Fix Xenomai Cobalt interrupt mode
* V1.3.15 - Fix crash while loading kernel module on ARM64
* Add support for kernel >= 5.0.00
* V1.3.16 - Handle API changes at kernel >= 4.18.00
* Fix ARM DMA allocation for PCIe
* V1.4.01 - Register atemsys as Device Tree Ethernet driver "atemsys"
* and use Linux PHY and Mdio-Bus Handling
* V1.4.02 - Device Tree Ethernet driver improved robustness for unbind linux driver
* Fix for kernel >= 5.0.00 with device tree,
* Fix ARM/AARCH64 DMA configuration for PCIe and
* Fix occasional insmod Kernel Oops
* V1.4.03 - Add log level (insmod atemsys loglevel=6) analog to kernel log level
* V1.4.04 - Fix Device Tree Ethernet driver robustness
* Add Device Tree Ethernet driver support for ICSS
* V1.4.05 - Add IOMMU/Vt-D support
* V1.4.06 - Fix IOMMU/Vt-D support for ARM
* Fix Mdio-Bus timeout for kernel >= 5.0.00
* V1.4.07 - Add support for imx8 / FslFec 64bit
* V1.4.08 - Fix Xilinx Ultrascale
* Fix cleanup of Device Tree Ethernet driver
* V1.4.09 - Add atemsys as PCI driver for Intel, Realtek and Beckhoff
* Add memory allocation and mapping on platform / PCI driver device
* Fix PHY driver for FslFec 64Bit
* V1.4.10 - Fix Device Tree Ethernet driver: Mdio/Phy sup-node, test 4.6.x kernel
* Add Device Tree Ethernet driver support for GEM
* Fix PCI driver: force DMA to 32 bit
* V1.4.11 - Fix for kernel >= 5.5.00 with device tree,
* Fix Device Tree Ethernet driver support for DW3504
* Fix PCI driver: only for kernel >= 4.4.00
* V1.4.12 - Fix for kernel >= 5.11.00,
* Add support for 64Bit IO Memory of PCI card
* V1.4.13 - Fix for kernel <= 3.16.00,
* Add HAVE_ACCESS_OK_TYPE define to handle non-mainstream API variance
* Connect to interrupt via binded device tree - platform device
* V1.4.14 - Fix for arm/aarch64 kernel >= 5.10.00,
* Add support for 64Bit DMA Memory
* Add support for PCI DMA address translation
* V1.4.15 - Fix API version IO Controls
* V1.4.16 - Fix Xenomai3 on arm,
* Add support for Device Tree Ethernet driver and PCI driver with Xenomai3
* Fix PCI DMA address translation on arm
* V1.4.17 - Fix dma_set_mask_and_coherent() missing in kernels under 3.12.55
* V1.4.18 - Remove obsolete ARM cycle count register(CCNT)
* Fix PCI driver do registration for all Ethernet network adapters
* Add modul parameter AllowedPciDevices to adjust PCI driver, AllowedPciDevices="" will turn off PCI driver,
* (insmod atemsys AllowedPciDevices="0000:01:00.0;0000:02:00.0")
* V1.4.19 - Fix Xenomai2 ARMv8 32Bit
* V1.4.20 - Fix support for CMA for kernel > 4.9.00
* V1.4.21 - Add Device Tree Ethernet driver support for CPSW
* Add Device Tree Ethernet driver phy reset
* Fix Device Tree Ethernet on Xenomai3
* Add HAVE_IRQ_TO_DESC define to handle non-mainstream API variance
* V1.4.22 - Fix Build Warnings
* Fix kernel config depending irq structures
* Fix kernel version 4.12 to 4.15 for handle of dma_coherent bit
* Add IOMMU support, new mapping to userspace active and tested for kernel > 5.4,
* use old mapping with ATEMSYS_LEGACY_DMA=1 define or
* activate new mapping with ATEMSYS_LEGACY_DMA=0 define for older kernel
* V1.4.23 - Fix PCI bars
* V1.4.24 - Add Device Tree Ethernet driver support for STM32mp135
* V1.4.25 - Add IOCTL_INT_CPU_AFFINITY
* Add Device Tree Ethernet driver support for RockChip
* V1.4.26 - Fix for arm/aarch64 kernel >= 6.00.00,
* Fix version of_dma_configure
* Add ATEMSYS_IOCTL_IOMEM_CMD for Kernel mode access to protected registers
* Add ATEMSYS_IOCTL_CPSWG_CMD to configure K3_UDMA_CPSWG Channels, Flows and Rings
* V1.4.27 - Fix ATEMSYS_IOCTL_CPSWG_CMD kernel version,
* Add Device Tree Ethernet driver support for CPSWG
* V1.4.28 - Fix for PCIe compatibility with Atemsys before V1.3.5,
* - Fix for Kernel > 6.05.00
* V1.4.29 - Add support for TI AM64 CPSWG
* - Fix PCI dma_coherent bit handling for Kernel between 4.15.0 and 5.4.0
* atemsys is shared across EC-Master V2.7+
*----------------------------------------------------------------------------*/
#ifndef ATEMSYS_H
#define ATEMSYS_H
#include <linux/ioctl.h>
#include <linux/types.h>
#ifndef EC_ATEMSYSVERSION
#define EC_ATEMSYSVERSION(a,b,c) (((a)<<2*8)+((b)<<1*8)+((c)<<0*8))
#endif
#define ATEMSYS_VERSION_STR "1.4.29"
#define ATEMSYS_VERSION_NUM 1,4,29
#if (defined ATEMSYS_C)
#define USE_ATEMSYS_API_VERSION EC_ATEMSYSVERSION(1,4,29)
#endif
/* support selection */
#if (USE_ATEMSYS_API_VERSION < EC_ATEMSYSVERSION(1,3,5)) || (!defined USE_ATEMSYS_API_VERSION)
/* till v1.3.04 */
#define ATEMSYS_T_PCI_SELECT_DESC ATEMSYS_T_PCI_SELECT_DESC_v1_0_00
#define ATEMSYS_T_PCI_MEMBAR ATEMSYS_T_PCI_MEMBAR_v1_0_00
#define ATEMSYS_IOCTL_PCI_FIND_DEVICE ATEMSYS_IOCTL_PCI_FIND_DEVICE_v1_0_00
#define ATEMSYS_IOCTL_PCI_CONF_DEVICE ATEMSYS_IOCTL_PCI_CONF_DEVICE_v1_0_00
#elif (USE_ATEMSYS_API_VERSION < EC_ATEMSYSVERSION(1,4,12))
/* v1.3.05 till v1.4.11 */
#define ATEMSYS_T_PCI_SELECT_DESC ATEMSYS_T_PCI_SELECT_DESC_v1_3_05
#define ATEMSYS_T_PCI_MEMBAR ATEMSYS_T_PCI_MEMBAR_v1_3_05
#define ATEMSYS_IOCTL_PCI_FIND_DEVICE ATEMSYS_IOCTL_PCI_FIND_DEVICE_v1_3_05
#define ATEMSYS_IOCTL_PCI_CONF_DEVICE ATEMSYS_IOCTL_PCI_CONF_DEVICE_v1_3_05
#else /* v1.4.12 and later */
#define ATEMSYS_T_PCI_SELECT_DESC ATEMSYS_T_PCI_SELECT_DESC_v1_4_12
#define ATEMSYS_T_PCI_MEMBAR ATEMSYS_T_PCI_MEMBAR_v1_4_12
#define ATEMSYS_IOCTL_PCI_FIND_DEVICE ATEMSYS_IOCTL_PCI_FIND_DEVICE_v1_4_12
#define ATEMSYS_IOCTL_PCI_CONF_DEVICE ATEMSYS_IOCTL_PCI_CONF_DEVICE_v1_4_12
#endif
#define DRIVER_SUCCESS 0
/*
* The major device number. We can't rely on dynamic
* registration any more, because ioctls need to know
* it.
*/
#define MAJOR_NUM 101
#define ATEMSYS_IOCTL_PCI_RELEASE_DEVICE _IO(MAJOR_NUM, 2)
#define ATEMSYS_IOCTL_INT_CONNECT _IOW(MAJOR_NUM, 3, __u32)
#define ATEMSYS_IOCTL_INT_DISCONNECT _IOW(MAJOR_NUM, 4, __u32)
#define ATEMSYS_IOCTL_INT_INFO _IOR(MAJOR_NUM, 5, ATEMSYS_T_INT_INFO)
#define ATEMSYS_IOCTL_MOD_GETVERSION _IOR(MAJOR_NUM, 6, __u32)
#define ATEMSYS_IOCTL_CPU_ENABLE_CYCLE_COUNT _IOW(MAJOR_NUM, 7, __u32)
#define ATEMSYS_IOCTL_GET_MAC_INFO _IOWR(MAJOR_NUM, 8, ATEMSYS_T_MAC_INFO)
#define ATEMSYS_IOCTL_PHY_START_STOP _IOWR(MAJOR_NUM, 9, ATEMSYS_T_PHY_START_STOP_INFO)
#define ATEMSYS_IOCTL_GET_MDIO_ORDER _IOWR(MAJOR_NUM, 10, ATEMSYS_T_MDIO_ORDER)
#define ATEMSYS_IOCTL_RETURN_MDIO_ORDER _IOWR(MAJOR_NUM, 11, ATEMSYS_T_MDIO_ORDER)
#define ATEMSYS_IOCTL_GET_PHY_INFO _IOWR(MAJOR_NUM, 12, ATEMSYS_T_PHY_INFO)
#define ATEMSYS_IOCTL_MOD_SET_API_VERSION _IOR(MAJOR_NUM, 13, __u32)
#define ATEMSYS_IOCTL_PHY_RESET _IOWR(MAJOR_NUM, 14, __u32)
#define ATEMSYS_IOCTL_INT_SET_CPU_AFFINITY _IOWR(MAJOR_NUM, 15, __u32)
#define ATEMSYS_IOCTL_IOMEM_CMD _IOWR(MAJOR_NUM, 16, ATEMSYS_T_IOMEM_CMD)
#define ATEMSYS_IOCTL_CPSWG_CMD _IOWR(MAJOR_NUM, 17, ATEMSYS_T_CPSWG_CMD)
/* support legacy source code */
#define IOCTL_PCI_FIND_DEVICE ATEMSYS_IOCTL_PCI_FIND_DEVICE
#define IOCTL_PCI_CONF_DEVICE ATEMSYS_IOCTL_PCI_CONF_DEVICE
#define IOCTL_PCI_RELEASE_DEVICE ATEMSYS_IOCTL_PCI_RELEASE_DEVICE
#define IOCTL_INT_CONNECT ATEMSYS_IOCTL_INT_CONNECT
#define IOCTL_INT_DISCONNECT ATEMSYS_IOCTL_INT_DISCONNECT
#define IOCTL_INT_INFO ATEMSYS_IOCTL_INT_INFO
#define IOCTL_MOD_GETVERSION ATEMSYS_IOCTL_MOD_GETVERSION
#define IOCTL_CPU_ENABLE_CYCLE_COUNT ATEMSYS_IOCTL_CPU_ENABLE_CYCLE_COUNT
#define IOCTL_PCI_FIND_DEVICE_v1_3_04 ATEMSYS_IOCTL_PCI_FIND_DEVICE_v1_3_04
#define IOCTL_PCI_CONF_DEVICE_v1_3_04 ATEMSYS_IOCTL_PCI_CONF_DEVICE_v1_3_04
#define USE_PCI_INT ATEMSYS_USE_PCI_INT
#define INT_INFO ATEMSYS_T_INT_INFO
#define PCI_SELECT_DESC ATEMSYS_T_PCI_SELECT_DESC
/*
* The name of the device driver
*/
#define ATEMSYS_DEVICE_NAME "atemsys"
/* CONFIG_XENO_COBALT/CONFIG_XENO_MERCURY defined in xeno_config.h (may not be available when building atemsys.ko) */
#if (!defined CONFIG_XENO_COBALT) && (!defined CONFIG_XENO_MERCURY) && (defined CONFIG_XENO_VERSION_MAJOR) && (CONFIG_XENO_VERSION_MAJOR >= 3)
#define CONFIG_XENO_COBALT
#endif
/*
* The name of the device file
*/
#ifdef CONFIG_XENO_COBALT
#define ATEMSYS_FILE_NAME "/dev/rtdm/" ATEMSYS_DEVICE_NAME
#else
#define ATEMSYS_FILE_NAME "/dev/" ATEMSYS_DEVICE_NAME
#endif /* CONFIG_XENO_COBALT */
#define ATEMSYS_PCI_MAXBAR (6)
#define ATEMSYS_USE_PCI_INT (0xFFFFFFFF) /* Query the selected PCI device for the assigned IRQ number */
typedef struct
{
__u32 dwInterrupt;
} __attribute__((packed)) ATEMSYS_T_INT_INFO;
/* v1_4_12 */
#define ATEMSYS_IOCTL_PCI_FIND_DEVICE_v1_4_12 _IOWR(MAJOR_NUM, 0, ATEMSYS_T_PCI_SELECT_DESC_v1_4_12)
#define ATEMSYS_IOCTL_PCI_CONF_DEVICE_v1_4_12 _IOWR(MAJOR_NUM, 1, ATEMSYS_T_PCI_SELECT_DESC_v1_4_12)
typedef struct
{
__u64 qwIOMem; /* [out] IO Memory of PCI card (physical address) */
__u32 dwIOLen; /* [out] Length of the IO Memory area*/
} __attribute__((packed)) ATEMSYS_T_PCI_MEMBAR_v1_4_12;
typedef struct
{
__s32 nVendID; /* [in] vendor ID */
__s32 nDevID; /* [in] device ID */
__s32 nInstance; /* [in] instance to look for (0 is the first instance) */
__s32 nPciBus; /* [in/out] bus */
__s32 nPciDev; /* [in/out] device */
__s32 nPciFun; /* [in/out] function */
__s32 nBarCnt; /* [out] Number of entries in aBar */
__u32 dwIrq; /* [out] IRQ or USE_PCI_INT */
ATEMSYS_T_PCI_MEMBAR_v1_4_12 aBar[ATEMSYS_PCI_MAXBAR]; /* [out] IO memory */
__s32 nPciDomain; /* [in/out] domain */
} __attribute__((packed)) ATEMSYS_T_PCI_SELECT_DESC_v1_4_12;
/* v1_3_05 */
#define ATEMSYS_IOCTL_PCI_FIND_DEVICE_v1_3_05 _IOWR(MAJOR_NUM, 0, ATEMSYS_T_PCI_SELECT_DESC_v1_3_05)
#define ATEMSYS_IOCTL_PCI_CONF_DEVICE_v1_3_05 _IOWR(MAJOR_NUM, 1, ATEMSYS_T_PCI_SELECT_DESC_v1_3_05)
typedef struct
{
__u32 dwIOMem; /* [out] IO Memory of PCI card (physical address) */
__u32 dwIOLen; /* [out] Length of the IO Memory area*/
} __attribute__((packed)) ATEMSYS_T_PCI_MEMBAR_v1_3_05;
typedef struct
{
__s32 nVendID; /* [in] vendor ID */
__s32 nDevID; /* [in] device ID */
__s32 nInstance; /* [in] instance to look for (0 is the first instance) */
__s32 nPciBus; /* [in/out] bus */
__s32 nPciDev; /* [in/out] device */
__s32 nPciFun; /* [in/out] function */
__s32 nBarCnt; /* [out] Number of entries in aBar */
__u32 dwIrq; /* [out] IRQ or USE_PCI_INT */
ATEMSYS_T_PCI_MEMBAR_v1_3_05 aBar[ATEMSYS_PCI_MAXBAR]; /* [out] IO memory */
__s32 nPciDomain; /* [in/out] domain */
} __attribute__((packed)) ATEMSYS_T_PCI_SELECT_DESC_v1_3_05;
/* v1_0_00 */
#define ATEMSYS_IOCTL_PCI_FIND_DEVICE_v1_3_04 ATEMSYS_IOCTL_PCI_FIND_DEVICE_v1_0_00
#define ATEMSYS_IOCTL_PCI_CONF_DEVICE_v1_3_04 ATEMSYS_IOCTL_PCI_CONF_DEVICE_v1_0_00
#define ATEMSYS_IOCTL_PCI_FIND_DEVICE_v1_0_00 _IOWR(MAJOR_NUM, 0, ATEMSYS_T_PCI_SELECT_DESC_v1_0_00)
#define ATEMSYS_IOCTL_PCI_CONF_DEVICE_v1_0_00 _IOWR(MAJOR_NUM, 1, ATEMSYS_T_PCI_SELECT_DESC_v1_0_00)
typedef struct
{
__u32 dwIOMem; /* [out] IO Memory of PCI card (physical address) */
__u32 dwIOLen; /* [out] Length of the IO Memory area*/
} __attribute__((packed)) ATEMSYS_T_PCI_MEMBAR_v1_0_00;
typedef struct
{
__s32 nVendID; /* [in] vendor ID */
__s32 nDevID; /* [in] device ID */
__s32 nInstance; /* [in] instance to look for (0 is the first instance) */
__s32 nPciBus; /* [in/out] bus */
__s32 nPciDev; /* [in/out] device */
__s32 nPciFun; /* [in/out] function */
__s32 nBarCnt; /* [out] Number of entries in aBar */
__u32 dwIrq; /* [out] IRQ or USE_PCI_INT */
ATEMSYS_T_PCI_MEMBAR_v1_0_00 aBar[ATEMSYS_PCI_MAXBAR]; /* [out] IO memory */
} __attribute__((packed)) ATEMSYS_T_PCI_SELECT_DESC_v1_0_00;
/* must match EC_T_PHYINTERFACE in EcLink.h */
typedef enum _EC_T_PHYINTERFACE_ATEMSYS
{
eATEMSYS_PHY_FIXED_LINK = 1 << 0,
eATEMSYS_PHY_MII = 1 << 1,
eATEMSYS_PHY_RMII = 1 << 2,
eATEMSYS_PHY_GMII = 1 << 3,
eATEMSYS_PHY_SGMII = 1 << 4,
eATEMSYS_PHY_RGMII = 1 << 5,
eATEMSYS_PHY_OSDRIVER = 1 << 6,
/* Borland C++ datatype alignment correction */
eATEMSYS_PHY_BCppDummy = 0xFFFFFFFF
} ATEMSYS_T_PHYINTERFACE;
#define EC_LINKOS_IDENT_MAX_LEN 0x20 /* must match EcLink.h */
#define PHY_AUTO_ADDR (__u32) -1 /* must match EcPhy.h */
typedef struct
{
char szIdent[EC_LINKOS_IDENT_MAX_LEN]; /* [out] Name of Mac e.g. "FslFec" */
__u32 dwInstance; /* [out] Number of used Mac (in official order!) */
__u32 dwIndex; /* [in] Index of Mac in atemsys handling */
__u64 qwRegAddr; /* [in] Hardware register address of mac */
__u32 dwRegSize; /* [in] Hardware register size of mac */
__u32 dwStatus; /* [in] Status of mac according to device tree */
ATEMSYS_T_PHYINTERFACE ePhyMode; /* [in] Phy mac connection mode mii, rmii, rgmii, gmii, sgmii defined in SDK/INC/EcLink.h */
__u32 bNoMdioBus; /* [in] Mac don't need to run own Mdio Bus */
__u32 dwPhyAddr; /* [in] Address of PHY on mdio bus */
__u32 dwErrorCode; /* [in] Error code defined in SDK/INC/EcError.h */
__u32 bPhyResetSupported; /* [in] Device tree has data for phy reset */
__u32 dwReserved[15];
} __attribute__((packed)) ATEMSYS_T_MAC_INFO;
typedef struct
{
__u32 dwIndex; /* [out] Index of Mac in atemsys handling */
__u32 bInUse; /* [in] Descriptor is in use */
__u32 bInUseByIoctl; /* [in] Descriptor is in use by ATEMSYS_IOCTRLs */
__u32 bWriteOrder; /* [in/out] Mdio operation - write = 1, read = 0 */
__u16 wMdioAddr; /* [in/out] Current address */
__u16 wReg; /* [in/out] Current register */
__u16 wValue; /* [in/out] Current value read or write */
__u32 dwTimeoutMsec; /* [in] Timeout in milli seconds */
__u32 dwErrorCode; /* [in] Error code defined in SDK/INC/EcError.h */
__u32 dwReserved[4];
} __attribute__((packed)) ATEMSYS_T_MDIO_ORDER;
typedef struct
{
__u32 dwIndex; /* [out] Index of Mac in atemsys handling */
__u32 dwLink; /* [in] Link defined in /linux/phy.h */
__u32 dwDuplex; /* [in] Duplex defined in /linux/phy.h (0x00: half, 0x01: full, 0xFF: unknown) */
__u32 dwSpeed; /* [in] Speed defined in /linux/phy.h */
__u32 bPhyReady; /* [in] Mdio Bus is currently not active */
__u32 dwErrorCode; /* [in] Error code defined in SDK/INC/EcError.h */
__u32 dwReserved[4];
} __attribute__((packed)) ATEMSYS_T_PHY_INFO;
typedef struct
{
__u32 dwIndex; /* [out] Index of Mac in atemsys handling */
__u32 bStart; /* [out] Start = 1, stop = 0 */
__u32 dwErrorCode; /* [in] Error code defined in SDK/INC/EcError.h */
__u32 dwReserved[4];
} __attribute__((packed)) ATEMSYS_T_PHY_START_STOP_INFO;
typedef struct
{
__u32 dwIndex; /* [out] Index of Mac in atemsys handling */
__u32 dwCmd; /* [out] Id of the command */
#define ATEMSYS_IOMEM_CMD_MAP_PERMANENT 1
#define ATEMSYS_IOMEM_CMD_UNMAP_PERMANENT 2
#define ATEMSYS_IOMEM_CMD_READ 3
#define ATEMSYS_IOMEM_CMD_WRITE 4
__u64 qwPhys; /* [out] physical memory address */
__u32 dwSize; /* [out] size of the memory area */
__u32 dwOffset; /* [out] memory offset for read and write command */
__u32 dwDataSize; /* [out] data size for read and write command */
__u32 dwData[4]; /* [in/out] data buffer for read and write command */
} __attribute__((packed)) ATEMSYS_T_IOMEM_CMD;
typedef struct
{
__u32 dwIndex; /* [out] Index of Mac in atemsys handling */
__u32 dwChannelIdx; /* [out] Index of the internal channel handling */
__u32 dwCmd; /* [out] Id of the command */
#define ATEMSYS_CPSWG_CMD_CONFIG_TX 1
#define ATEMSYS_CPSWG_CMD_CONFIG_RX 2
#define ATEMSYS_CPSWG_CMD_ENABLE_TX 3
#define ATEMSYS_CPSWG_CMD_ENABLE_RX 4
#define ATEMSYS_CPSWG_CMD_DISABLE_TX 5
#define ATEMSYS_CPSWG_CMD_DISABLE_RX 6
#define ATEMSYS_CPSWG_CMD_RELEASE_TX 7
#define ATEMSYS_CPSWG_CMD_RELEASE_RX 8
__u64 qwRingDma; /* [in] 1. ring physical memory address */
__u32 dwRingSize; /* [in/out] 1. ring size / number of elements */
__u32 dwRingId; /* [in] 1. ring index */
__u64 qwRingFdqDma; /* [in] 2. ring physical memory address */
__u32 dwRingFdqSize; /* [in/put] 2. ring size / number of elements */
__u32 dwRingFdqId; /* [in] 2. ring index */
__u32 dwChanId; /* [in] Channel index */
__u32 dwFlowIdBase; /* [in] Flow index */
__u32 bRingFdqUsingRingMode; /* [in/out] RingMode of RingFdq set to RING_MODE_RING */
__u32 dwReserved[31];
} __attribute__((packed)) ATEMSYS_T_CPSWG_CMD;
#endif /* ATEMSYS_H */