tdl-xoa-driver 1.5.1__py3-none-any.whl → 1.6.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. {tdl_xoa_driver-1.5.1.dist-info → tdl_xoa_driver-1.6.0.dist-info}/METADATA +1 -1
  2. {tdl_xoa_driver-1.5.1.dist-info → tdl_xoa_driver-1.6.0.dist-info}/RECORD +89 -88
  3. xoa_driver/__init__.py +2 -2
  4. xoa_driver/enums.py +10 -10
  5. xoa_driver/functions/anlt.py +60 -78
  6. xoa_driver/functions/cli/testbed_config.py +1 -1
  7. xoa_driver/functions/cmis/_replies.py +4 -4
  8. xoa_driver/functions/mgmt.py +206 -250
  9. xoa_driver/functions/tools.py +11 -6
  10. xoa_driver/internals/commands/c_commands.py +59 -0
  11. xoa_driver/internals/commands/enums.py +101 -90
  12. xoa_driver/internals/commands/m4_commands.py +25 -0
  13. xoa_driver/internals/commands/m4e_commands.py +6 -0
  14. xoa_driver/internals/commands/m_commands.py +51 -1
  15. xoa_driver/internals/commands/p4_commands.py +63 -1
  16. xoa_driver/internals/commands/p4e_commands.py +9 -0
  17. xoa_driver/internals/commands/p4g_commands.py +139 -0
  18. xoa_driver/internals/commands/p_commands.py +455 -61
  19. xoa_driver/internals/commands/pc_commands.py +9 -0
  20. xoa_driver/internals/commands/pd_commands.py +11 -0
  21. xoa_driver/internals/commands/pe_commands.py +27 -0
  22. xoa_driver/internals/commands/pec_commands.py +9 -0
  23. xoa_driver/internals/commands/ped_commands.py +23 -0
  24. xoa_driver/internals/commands/pef_commands.py +43 -0
  25. xoa_driver/internals/commands/pf_commands.py +11 -0
  26. xoa_driver/internals/commands/pl1_commands.py +315 -48
  27. xoa_driver/internals/commands/pl_commands.py +8 -0
  28. xoa_driver/internals/commands/pm_commands.py +11 -0
  29. xoa_driver/internals/commands/pp_commands.py +84 -27
  30. xoa_driver/internals/commands/pr_commands.py +25 -0
  31. xoa_driver/internals/commands/ps_commands.py +47 -1
  32. xoa_driver/internals/commands/pt_commands.py +15 -0
  33. xoa_driver/internals/commands/px_commands.py +180 -136
  34. xoa_driver/internals/commands/subtypes.py +4 -3
  35. xoa_driver/internals/core/transporter/protocol/payload/base_struct.py +1 -1
  36. xoa_driver/internals/hli/indices/macsecscs/base_macsecsc.py +41 -3
  37. xoa_driver/internals/hli/modules/modules_l23/family_combi.py +0 -64
  38. xoa_driver/internals/hli/modules/modules_l23/family_edun.py +0 -2
  39. xoa_driver/internals/hli/modules/modules_l23/{family_g.py → family_loki.py} +29 -1
  40. xoa_driver/internals/hli/modules/modules_l23/family_odin.py +412 -0
  41. xoa_driver/internals/hli/modules/modules_l23/{family_l.py → family_thor.py} +44 -0
  42. xoa_driver/internals/hli/ports/port_l23/chimera/port_chimera.py +3 -3
  43. xoa_driver/internals/hli/ports/port_l23/family_edun.py +9 -44
  44. xoa_driver/internals/hli/ports/port_l23/{family_l1.py → family_freya.py} +10 -45
  45. xoa_driver/internals/hli/ports/port_l23/{family_g.py → family_loki.py} +33 -32
  46. xoa_driver/internals/hli/ports/port_l23/family_odin.py +225 -0
  47. xoa_driver/internals/hli/ports/port_l23/family_thor.py +67 -0
  48. xoa_driver/internals/hli/ports/port_l23/layer1/anlt.py +512 -0
  49. xoa_driver/internals/hli/ports/port_l23/layer1/brr.py +26 -0
  50. xoa_driver/internals/hli/ports/port_l23/layer1/eye_diagram.py +71 -0
  51. xoa_driver/internals/hli/ports/port_l23/{pcs_pma_ijkl_chimera.py → layer1/impair.py} +7 -7
  52. xoa_driver/internals/hli/ports/port_l23/layer1/laser_power.py +28 -0
  53. xoa_driver/internals/hli/ports/port_l23/{family_e.py → layer1/lower_power.py} +1 -51
  54. xoa_driver/internals/hli/ports/port_l23/{freya_l1.py → layer1/medium.py} +38 -358
  55. xoa_driver/internals/hli/ports/port_l23/layer1/pcs_fec.py +219 -0
  56. xoa_driver/internals/hli/ports/port_l23/layer1/pma.py +43 -0
  57. xoa_driver/internals/hli/ports/port_l23/layer1/prbs.py +39 -0
  58. xoa_driver/internals/hli/ports/port_l23/layer1/preamble.py +25 -0
  59. xoa_driver/internals/hli/ports/port_l23/{fault_jkl.py → layer1/rs_fault.py} +2 -2
  60. xoa_driver/internals/hli/ports/port_l23/layer1/siv.py +69 -0
  61. xoa_driver/internals/hli/ports/port_l23/layer1_edun.py +103 -0
  62. xoa_driver/internals/hli/ports/port_l23/layer1_freya.py +103 -0
  63. xoa_driver/internals/hli/ports/port_l23/layer1_loki.py +74 -0
  64. xoa_driver/internals/hli/ports/port_l23/layer1_thor.py +70 -0
  65. xoa_driver/internals/hli/ports/port_l23/port_l23ve.py +4 -4
  66. xoa_driver/internals/hli/ports/port_l23/sec/__init__.py +0 -0
  67. xoa_driver/internals/hli/ports/port_l23/sec/macsec.py +108 -0
  68. xoa_driver/internals/hli/ports/port_l23/tcvr/__init__.py +0 -0
  69. xoa_driver/internals/hli/ports/port_l23/{bases/port_transceiver.py → tcvr/cmis.py} +4 -118
  70. xoa_driver/internals/hli/ports/port_l23/tcvr/transceiver.py +124 -0
  71. xoa_driver/internals/hli/ports/port_l23/trafficgen/__init__.py +0 -0
  72. xoa_driver/internals/hli/ports/port_l23/{bases → trafficgen}/port_l23.py +1 -1
  73. xoa_driver/internals/hli/ports/port_l23/{bases → trafficgen}/port_l23_genuine.py +5 -45
  74. xoa_driver/internals/hli/ports/port_l23/{bases/port_reception_statistics.py → trafficgen/port_rx_stats.py} +0 -21
  75. xoa_driver/internals/hli/ports/port_l23/{bases/port_transmission_statistics.py → trafficgen/port_tx_stats.py} +2 -22
  76. xoa_driver/internals/hli/ports/port_l23/trafficgen/runt.py +32 -0
  77. xoa_driver/internals/hli/testers/l23_tester.py +1 -3
  78. xoa_driver/internals/utils/indices/_interfaces.py +18 -6
  79. xoa_driver/internals/utils/indices/index_manager.py +8 -2
  80. xoa_driver/internals/utils/managers/ports_manager.py +5 -2
  81. xoa_driver/misc.py +6 -6
  82. xoa_driver/modules.py +31 -47
  83. xoa_driver/ports.py +10 -29
  84. xoa_driver/internals/hli/modules/modules_l23/family_d.py +0 -75
  85. xoa_driver/internals/hli/modules/modules_l23/family_e.py +0 -85
  86. xoa_driver/internals/hli/modules/modules_l23/family_f.py +0 -145
  87. xoa_driver/internals/hli/modules/modules_l23/family_h.py +0 -40
  88. xoa_driver/internals/hli/modules/modules_l23/family_i.py +0 -25
  89. xoa_driver/internals/hli/modules/modules_l23/family_j.py +0 -25
  90. xoa_driver/internals/hli/modules/modules_l23/family_k.py +0 -39
  91. xoa_driver/internals/hli/modules/modules_l23/family_m.py +0 -25
  92. xoa_driver/internals/hli/modules/modules_l23/family_n.py +0 -40
  93. xoa_driver/internals/hli/ports/port_l23/edun_l1.py +0 -181
  94. xoa_driver/internals/hli/ports/port_l23/family_combi.py +0 -37
  95. xoa_driver/internals/hli/ports/port_l23/family_d.py +0 -51
  96. xoa_driver/internals/hli/ports/port_l23/family_f.py +0 -151
  97. xoa_driver/internals/hli/ports/port_l23/family_h.py +0 -67
  98. xoa_driver/internals/hli/ports/port_l23/family_i.py +0 -84
  99. xoa_driver/internals/hli/ports/port_l23/family_j.py +0 -68
  100. xoa_driver/internals/hli/ports/port_l23/family_k.py +0 -73
  101. xoa_driver/internals/hli/ports/port_l23/family_l.py +0 -82
  102. xoa_driver/internals/hli/ports/port_l23/family_m.py +0 -29
  103. xoa_driver/internals/hli/ports/port_l23/pcs_pma_ghijkl.py +0 -369
  104. xoa_driver/internals/hli/ports/port_l23/pcs_pma_l.py +0 -78
  105. {tdl_xoa_driver-1.5.1.dist-info → tdl_xoa_driver-1.6.0.dist-info}/WHEEL +0 -0
  106. {tdl_xoa_driver-1.5.1.dist-info → tdl_xoa_driver-1.6.0.dist-info}/licenses/LICENSE +0 -0
  107. {tdl_xoa_driver-1.5.1.dist-info → tdl_xoa_driver-1.6.0.dist-info}/top_level.txt +0 -0
  108. /xoa_driver/internals/hli/modules/modules_l23/{family_l1.py → family_freya.py} +0 -0
  109. /xoa_driver/internals/hli/ports/port_l23/{bases → layer1}/__init__.py +0 -0
  110. /xoa_driver/internals/hli/ports/port_l23/{bases → trafficgen}/port_capture.py +0 -0
@@ -1,369 +0,0 @@
1
- from typing import (
2
- TYPE_CHECKING,
3
- Tuple,
4
- )
5
- from typing import Self
6
- if TYPE_CHECKING:
7
- from xoa_driver.internals.core import interfaces as itf
8
- from xoa_driver.internals.commands import (
9
- PP_ALARMS_ERRORS,
10
- PP_TXLANECONFIG,
11
- PP_TXLANEINJECT,
12
- PP_TXPRBSCONFIG,
13
- PP_TXERRORRATE,
14
- PP_TXINJECTONE,
15
- PP_RXTOTALSTATS,
16
- PP_RXFECSTATS,
17
- PP_RXLANELOCK,
18
- PP_RXLANESTATUS,
19
- PP_RXLANEERRORS,
20
- PP_RXPRBSSTATUS,
21
- PP_RXCLEAR,
22
- PP_RXLASERPOWER,
23
- PP_TXLASERPOWER,
24
- PP_EYEMEASURE,
25
- PP_EYERESOLUTION,
26
- PP_EYEREAD,
27
- PP_EYEINFO,
28
- PP_PHYTXEQ,
29
- PP_PHYRETUNE,
30
- PP_PHYAUTOTUNE,
31
- PP_EYEBER,
32
- PP_PHYAUTONEG,
33
- PP_TXPRBSTYPE,
34
- PP_RXPRBSTYPE,
35
- # PP_FECMODE, # moved to all genuine ports
36
- PP_EYEDWELLBITS,
37
- PP_PHYSIGNALSTATUS,
38
- PP_PRBSTYPE,
39
- PP_PHYSETTINGS,
40
- PP_PHYRXEQ,
41
- )
42
- from xoa_driver import enums
43
-
44
-
45
- class PcsPmaAlarms:
46
- """L23 high-speed port PCS/PMA alarms"""
47
-
48
- def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
49
- self.errors = PP_ALARMS_ERRORS(conn, module_id, port_id)
50
- """Error count of each alarm on a L23 high-speed port.
51
-
52
- :type: PP_ALARMS_ERRORS
53
- """
54
-
55
-
56
- class PcsPmaTransceiver:
57
- """L23 high-speed port PCS/PMA transceivers"""
58
-
59
- def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
60
- self.tx_laser_power = PP_TXLASERPOWER(conn, module_id, port_id)
61
- """Power of TX laser.
62
-
63
- :type: PP_TXLASERPOWER
64
- """
65
-
66
- self.rx_laser_power = PP_RXLASERPOWER(conn, module_id, port_id)
67
- """Power of RX laser.
68
-
69
- :type: PP_RXLASERPOWER
70
- """
71
-
72
-
73
- class PcsPmaRxLaneStatus:
74
- """L23 high-speed port PCS/PMA lane status"""
75
-
76
- def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int, lane_idx: int) -> None:
77
- self.errors = PP_RXLANEERRORS(conn, module_id, port_id, lane_idx)
78
- """RX lane error statistics.
79
-
80
- :type: PP_RXLANEERRORS
81
- """
82
-
83
- self.lock = PP_RXLANELOCK(conn, module_id, port_id, lane_idx)
84
- """RX lane lock.
85
-
86
- :type: PP_RXLANELOCK
87
- """
88
-
89
- self.status = PP_RXLANESTATUS(conn, module_id, port_id, lane_idx)
90
- """RX lane status
91
-
92
- :type: PP_RXLANESTATUS
93
- """
94
-
95
-
96
- class PcsPmaTxErrorGeneration:
97
- """L23 high-speed port PCS/PMA TX error generation."""
98
-
99
- def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
100
- self.error_rate = PP_TXERRORRATE(conn, module_id, port_id)
101
- """The rate of continuous bit-level error injection.
102
-
103
- :type: PP_TXERRORRATE
104
- """
105
-
106
- self.inject_one = PP_TXINJECTONE(conn, module_id, port_id)
107
- """Inject a single bit-level error.
108
-
109
- :type: PP_TXINJECTONE
110
- """
111
-
112
-
113
- class PcsPmaRx:
114
- """L23 high-speed port PCS/PMA RX"""
115
-
116
- def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
117
- self.total_status = PP_RXTOTALSTATS(conn, module_id, port_id)
118
- """RX FEC total counters.
119
-
120
- :type: PP_RXTOTALSTATS
121
- """
122
-
123
- self.fec_status = PP_RXFECSTATS(conn, module_id, port_id)
124
- """RX FEC statistics.
125
-
126
- :type: PP_RXFECSTATS
127
- """
128
-
129
- self.clear = PP_RXCLEAR(conn, module_id, port_id)
130
- """Clear all the PCS/PMA receiver statistics.
131
-
132
- :type: PP_RXCLEAR
133
- """
134
-
135
-
136
- class PcsPmaPhy:
137
- """L23 high-speed port PCS/PMA PHY settings."""
138
-
139
- def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
140
- self.auto_neg = PP_PHYAUTONEG(conn, module_id, port_id)
141
- """ Auto-negotiation settings of the PHY.
142
-
143
- :type: PP_PHYAUTONEG
144
- """
145
-
146
- self.signal_status = PP_PHYSIGNALSTATUS(conn, module_id, port_id)
147
- """The PHY signal status.
148
-
149
- :type: PP_PHYSIGNALSTATUS
150
- """
151
-
152
- self.settings = PP_PHYSETTINGS(conn, module_id, port_id)
153
- """Low-level PHY settings
154
-
155
- :type: PP_PHYSETTINGS
156
- """
157
-
158
-
159
- class Lane:
160
- """L23 high-speed port lane configuration and status."""
161
-
162
- def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int, lane_idx: int) -> None:
163
- self.rx_status = PcsPmaRxLaneStatus(conn, module_id, port_id, lane_idx)
164
- """PCS/PMA RX lane status.
165
- """
166
-
167
- self.tx_error_inject = PP_TXLANEINJECT(conn, module_id, port_id, lane_idx)
168
- """Inject CAUI error into a TX lane.
169
-
170
- :type: PP_TXLANEINJECT
171
- """
172
-
173
- self.tx_config = PP_TXLANECONFIG(conn, module_id, port_id, lane_idx)
174
- """TX lane configuration.
175
-
176
- :type: PP_TXLANECONFIG
177
- """
178
-
179
-
180
- class PcsPma:
181
- """L23 high-speed port PCS/PMA"""
182
-
183
- def __init__(self, conn: "itf.IConnection", port) -> None:
184
- self._conn = conn
185
- self.__port = port
186
-
187
- self.alarms = PcsPmaAlarms(conn, *port.kind)
188
- """PCS/PMA alarms
189
-
190
- :type: PcsPmaAlarms
191
- """
192
-
193
- self.transceiver = PcsPmaTransceiver(conn, *port.kind)
194
- """PCS/PMA transceiver
195
-
196
- :type: PcsPmaTransceiver
197
- """
198
-
199
- self.error_gen = PcsPmaTxErrorGeneration(conn, *port.kind)
200
- """PCS/PMA error generation
201
-
202
- :type: PcsPmaTxErrorGeneration
203
- """
204
-
205
- self.rx = PcsPmaRx(conn, *port.kind)
206
- """PCS/PMA RX
207
-
208
- :type: PcsPmaRx
209
- """
210
-
211
- self.phy = PcsPmaPhy(conn, *port.kind)
212
- """PCS/PMA PHY
213
-
214
- :type: PcsPmaPhy
215
- """
216
-
217
- self.prbs_config = PRBSConfig(conn, *port.kind)
218
- """PCS/PMA PRBS Configuration
219
-
220
- :type: PRBSConfig
221
- """
222
-
223
- self.lanes: Tuple["Lane", ...] = tuple(
224
- Lane(self._conn, *self.__port.kind, lane_idx=idx)
225
- for idx in range(self.__port.info.capabilities.lane_count)
226
- ) # TODO: need to fix, currently port.info.capabilities must be none because lanes are created before awaiting the port
227
-
228
-
229
- class PRBSConfig:
230
- """L23 high-speed port PRBS configuration."""
231
-
232
- def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
233
- self.type = PP_PRBSTYPE(conn, module_id, port_id)
234
- """PRBS type used when in PRBS mode.
235
-
236
- :type: PP_PRBSTYPE
237
- """
238
-
239
-
240
- class SDEyeDiagram:
241
- """L23 high-speed port SerDes eye diagram."""
242
-
243
- def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int, serdes_xindex: int) -> None:
244
- self.__conn = conn
245
- self.__module_id = module_id
246
- self.__port_id = port_id
247
- self.__serdes_index = serdes_xindex
248
- self.measure = PP_EYEMEASURE(conn, module_id, port_id, serdes_xindex)
249
- """BER eye measurement.
250
-
251
- :type: PP_EYEMEASURE
252
- """
253
-
254
- self.resolution = PP_EYERESOLUTION(conn, module_id, port_id, serdes_xindex)
255
- """Resolution for BER eye measurement.
256
-
257
- :type: PP_EYERESOLUTION
258
- """
259
-
260
- self.info = PP_EYEINFO(conn, module_id, port_id, serdes_xindex)
261
- """Information of BER eye measurement.
262
-
263
- :type: PP_EYEINFO
264
- """
265
-
266
- self.ber = PP_EYEBER(conn, module_id, port_id, serdes_xindex)
267
- """BER estimation of an eye diagram.
268
-
269
- :type: PP_EYEBER
270
- """
271
-
272
- self.dwell_bits = PP_EYEDWELLBITS(conn, module_id, port_id, serdes_xindex)
273
- """Dwell bits for an eye capture.
274
-
275
- :type: PP_EYEDWELLBITS
276
- """
277
-
278
- def __await__(self):
279
- return self._setup().__await__()
280
-
281
- async def _setup(self) -> Self:
282
- resolution = await self.resolution.get()
283
- self.read_column = tuple(
284
- PP_EYEREAD(
285
- self.__conn,
286
- self.__module_id,
287
- self.__port_id,
288
- self.__serdes_index,
289
- _colum_xindex=x
290
- )
291
- for x in range(resolution.x_resolution)
292
- )
293
- return self
294
-
295
-
296
- class SDPhy:
297
- """L23 high-speed port SerDes PHY configuration and status."""
298
-
299
- def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int, serdes_xindex: int) -> None:
300
- self.tx_equalizer = PP_PHYTXEQ(conn, module_id, port_id, serdes_xindex)
301
- """Equalizer settings of the on-board PHY in the TX direction.
302
-
303
- :type: PP_PHYTXEQ
304
- """
305
-
306
- self.rx_equalizer = PP_PHYRXEQ(conn, module_id, port_id, serdes_xindex)
307
- """Equalizer settings of the on-board PHY in the RX direction.
308
-
309
- :type: PP_PHYRXEQ
310
- """
311
-
312
- self.retune = PP_PHYRETUNE(conn, module_id, port_id, serdes_xindex)
313
- """Retuning of the PHY.
314
-
315
- :type: PP_PHYRETUNE
316
- """
317
-
318
- self.autotune = PP_PHYAUTOTUNE(conn, module_id, port_id, serdes_xindex)
319
- """Autotune of the PHY.
320
-
321
- :type: PP_PHYAUTOTUNE
322
- """
323
-
324
- class Prbs:
325
- """L23 high-speed port SerDes PRBS configuration and status."""
326
-
327
- def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int, serdes_xindex: int) -> None:
328
- self.control = PP_TXPRBSCONFIG(conn, module_id, port_id, serdes_xindex)
329
- """TX PRBS configuration of a SerDes.
330
-
331
- :type: PP_TXPRBSCONFIG
332
- """
333
-
334
- self.status = PP_RXPRBSSTATUS(conn, module_id, port_id, serdes_xindex)
335
- """RX PRBS status on a SerDes
336
-
337
- :type: PP_RXPRBSSTATUS
338
- """
339
-
340
-
341
-
342
- class SerDes:
343
- """L23 high-speed port SerDes configuration and status."""
344
-
345
- def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int, serdes_xindex: int) -> None:
346
- self.prbs = Prbs(conn, module_id, port_id, serdes_xindex)
347
- """PRBS configuration
348
-
349
- :type: Prbs
350
- """
351
-
352
- self.phy = SDPhy(conn, module_id, port_id, serdes_xindex)
353
- """PHY configuration
354
-
355
- :type: SDPhy
356
- """
357
-
358
- self.eye_diagram = SDEyeDiagram(conn, module_id, port_id, serdes_xindex)
359
- """Eye diagram
360
-
361
- :type: SDEyeDiagram
362
- """
363
-
364
- def __await__(self):
365
- return self._setup().__await__()
366
-
367
- async def _setup(self) -> Self:
368
- await self.eye_diagram
369
- return self
@@ -1,78 +0,0 @@
1
- from typing import (
2
- TYPE_CHECKING,
3
- Tuple,
4
- )
5
- if TYPE_CHECKING:
6
- from xoa_driver.internals.core import interfaces as itf
7
- from xoa_driver.internals.commands import (
8
- PP_AUTONEG,
9
- PP_AUTONEGSTATUS,
10
- PP_LINKTRAIN,
11
- PP_LINKTRAINSTATUS,
12
- )
13
-
14
-
15
- class AutoNeg:
16
- """L23 high-speed port PCS/PMA auto-negotiation"""
17
-
18
- def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
19
- self.settings = PP_AUTONEG(conn, module_id, port_id)
20
- """Auto-negotiation settings of the PHY.
21
-
22
- :type: PP_AUTONEG
23
- """
24
-
25
- self.status = PP_AUTONEGSTATUS(conn, module_id, port_id)
26
- """Status of auto-negotiation settings of the PHY.
27
-
28
- :type: PP_AUTONEGSTATUS
29
- """
30
-
31
-
32
- class LinkTrain:
33
- """L23 high-speed port PCS/PMA link training"""
34
-
35
- def __init__(self, conn: "itf.IConnection", port) -> None:
36
- self.settings = PP_LINKTRAIN(conn, *port.kind)
37
- """Link training settings.
38
-
39
- :type: PP_LINKTRAIN
40
- """
41
-
42
- self.per_lane_status: Tuple[PP_LINKTRAINSTATUS, ...] = tuple(
43
- PP_LINKTRAINSTATUS(conn, *port.kind, _serdes_xindex=idx)
44
- for idx in range(port.info.capabilities.serdes_count)
45
- )
46
- """Link training status.
47
-
48
- :type: PP_LINKTRAINSTATUS
49
- """
50
-
51
-
52
- class PcsPma:
53
- """L23 high-speed port PCS/PMA settings"""
54
-
55
- def __init__(self, conn: "itf.IConnection", port) -> None:
56
- self.auto_neg = AutoNeg(conn, *port.kind)
57
- """PCS/PMA auto-negotiation settings.
58
-
59
- :type: AutoNeg
60
- """
61
-
62
- self.link_training = LinkTrain(conn, port)
63
- """PCS/PMA link training settings.
64
-
65
- :type: LinkTrain
66
- """
67
-
68
-
69
- # # Temporary ports are not supporting LinkTrain, in future release of xenaserver it will be the same as regular PcsPma
70
- # class PcsPmaL1:
71
- # """L23 high-speed port PCS/PMA settings"""
72
-
73
- # def __init__(self, conn: "itf.IConnection", port) -> None:
74
- # self.auto_neg = AutoNeg(conn, *port.kind)
75
- # """PCS/PMA auto-negotiation settings.
76
-
77
- # :type: AutoNeg
78
- # """