Skip to content
This repository was archived by the owner on Feb 27, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion xoa_driver/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
__version__ = "2.1.1"
__version__ = "2.1.2"
__short_version__ = "2.0"
10 changes: 10 additions & 0 deletions xoa_driver/enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,11 @@
LinkTrainEncoding,
LinkTrainPresets,
AnLtLogControl,
RxEqExtCap,
RxEqExtCapStatus,
PreCodingStatus,
GrayCodingStatus,
Endianness,
)

__all__ = (
Expand Down Expand Up @@ -324,4 +329,9 @@
"LinkTrainEncoding",
"LinkTrainPresets",
"AnLtLogControl",
"RxEqExtCap",
"RxEqExtCapStatus",
"PreCodingStatus",
"GrayCodingStatus",
"Endianness",
)
79 changes: 76 additions & 3 deletions xoa_driver/internals/commands/enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -1192,10 +1192,27 @@ class MulticastHeaderFormat(IntEnum):


class PFCMode(IntEnum):
"""Priority Flow Control (PFC) Mode"""

"""The PFC CoS value of the stream"""
ZERO = 0
"""the PFC CoS value = 0"""
ONE = 1
"""the PFC CoS value = 1"""
TWO = 2
"""the PFC CoS value = 2"""
THREE = 3
"""the PFC CoS value = 3"""
FOUR = 4
"""the PFC CoS value = 4"""
FIVE = 5
"""the PFC CoS value = 5"""
SIX = 6
"""the PFC CoS value = 6"""
SEVEN = 7
"""the PFC CoS value = 7"""
VLAN_PCP = 128
"""VLAN PCP"""
"""PFC CoS value is automatically using the outer VLAN PCP value of the stream. If the VLAN field is missing, the stream won't have a PFC CoS."""
OFF = 129
"""Remove PFC CoS value of the stream."""


class PRBSOnOff(IntEnum):
Expand Down Expand Up @@ -2459,4 +2476,60 @@ class AnLtLogControl(IntEnum):
"""link training algorithm -1 state machine transitions"""


class RxEqExtCap(IntEnum):
"""Rx Equalizer Advanced Capability type."""

CTLE_LOW = 0
"""CTLE low frequency."""

CTLE_HIGH = 1
"""CTLE high frequency."""


class RxEqExtCapStatus(IntEnum):
"""Status for Rx Equalizer Advanced Capability."""

STATUS_AUTO = 0
"""Auto."""

STATUS_MANUAL = 1
"""Manual."""

STATUS_FREEZE = 2
"""Freeze."""


class PreCodingStatus(IntEnum):
"""Rx/Tx Pre-Coding Status."""

OFF = 0
"""Off"""

ON = 1
"""On"""

AUTO = 2
"""Auto"""


class GrayCodingStatus(IntEnum):
"""Rx/Tx Gray-Coding Status."""

OFF = 0
"""Off"""

ON = 1
"""On"""


class Endianness(IntEnum):
"""Endianness (Big/Little Endian)."""

NORMAL = 0
"""Big Endian"""

REVERTED = 1
"""Little Endian"""


# endregion
245 changes: 244 additions & 1 deletion xoa_driver/internals/commands/pp_commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,11 @@
PRBSPattern,
PHYSignalStatus,
OnOffDefault,
RxEqExtCap,
RxEqExtCapStatus,
PreCodingStatus,
GrayCodingStatus,
Endianness,
)


Expand Down Expand Up @@ -1803,7 +1808,7 @@ def set(self, link_training_on_off: OnOff, precode_on_off: OnOffDefault, graycod
@dataclass
class PP_PHYRXEQ:
"""
RX EQ parameters.
RX EQ parameters (For non Freya Modules).
"""

code: typing.ClassVar[int] = 380
Expand Down Expand Up @@ -1853,6 +1858,56 @@ def set(self, auto: int, ctle: int, reserved: int) -> Token[None]:
return Token(self._connection, build_set_request(self, module=self._module, port=self._port, indices=[self._serdes_xindex], auto=auto, ctle=ctle, reserved=reserved))


@register_command
@dataclass
class PP_PHYRXEQ_EXT:
"""
GET/SET RX EQ Advanced parameters(Only for Freya Modules).
"""

code: typing.ClassVar[int] = 397
pushed: typing.ClassVar[bool] = True

_connection: 'interfaces.IConnection'
_module: int
_port: int
_serdes_xindex: int
_capability_type: RxEqExtCap

class GetDataAttr(ResponseBodyStruct):
status: RxEqExtCapStatus = field(XmpInt())
"""The status of the capability"""
value: int = field(XmpInt())
"""The value for the capability"""

class SetDataAttr(RequestBodyStruct):
status: RxEqExtCapStatus = field(XmpInt())
"""The status of the capability Auto/Manual/Freeze"""
value: int = field(XmpInt())
"""The value for the capability"""

def get(self) -> Token[GetDataAttr]:
"""Get RX EQ Advanced parameters.

:return: status Auto/Manual/Freeze, value.
:rtype: PP_PHYRXEQ_EXT.GetDataAttr
"""

return Token(self._connection, build_get_request(self, module=self._module, port=self._port, indices=[self._serdes_xindex, self._capability_type]))

def set(self, status: RxEqExtCapStatus, value: int) -> Token[None]:
"""Set RX EQ Advanced parameters.
The type of the capability(RxEqExtCap) should be passed as the second index.

:param status: Auto/Manual/Freeze
:type status: RxEqExtCapStatus
:param value: The value for the capability
:type value: int
"""

return Token(self._connection, build_set_request(self, module=self._module, port=self._port, indices=[self._serdes_xindex, self._capability_type], status=status, value=value))


@register_command
@dataclass
class PP_AUTONEG:
Expand Down Expand Up @@ -2088,3 +2143,191 @@ def get(self) -> Token[GetDataAttr]:
"""

return Token(self._connection, build_get_request(self, module=self._module, port=self._port, indices=[self._lane_xindex]))

@register_command
@dataclass
class PP_RXPRECODING:
"""
GET/SET Rx Pre-Coding Configurations.
"""

code: typing.ClassVar[int] = 420
pushed: typing.ClassVar[bool] = True

_connection: 'interfaces.IConnection'
_module: int
_port: int
_serdes_xindex: int

class GetDataAttr(ResponseBodyStruct):
status: PreCodingStatus = field(XmpInt())
"""Status Off/On/Auto"""
endianness: Endianness = field(XmpInt())
"""Endianness Normal/Reverted(BigEndian/LittleEndian)) """

class SetDataAttr(RequestBodyStruct):
status: PreCodingStatus = field(XmpInt())
"""Status Off/On/Auto"""
endianness: Endianness = field(XmpInt())
"""Endianness Normal/Reverted(BigEndian/LittleEndian)) """

def get(self) -> Token[GetDataAttr]:
"""Get the Rx Pre-Coding Configurations.

:return: Rx Pre-Coding configurations including status, and endianness type.
:rtype: PP_RXPRECODING.GetDataAttr
"""

return Token(self._connection, build_get_request(self, module=self._module, port=self._port, indices=[self._serdes_xindex]))

def set(self, status: PreCodingStatus, endianness: Endianness) -> Token[None]:
"""Set the Rx Pre-coding settings of the PHY.

:param status: The status(Off/On/Auto)
:type status: PreCodingStatus
:param endianness: Endianness type
:type endianness: Endianness
"""

return Token(self._connection, build_set_request(self, module=self._module, port=self._port, indices=[self._serdes_xindex], status=status, endianness=endianness))

@register_command
@dataclass
class PP_TXPRECODING:
"""
GET/SET Tx Pre-Coding Configurations.
"""

code: typing.ClassVar[int] = 421
pushed: typing.ClassVar[bool] = True

_connection: 'interfaces.IConnection'
_module: int
_port: int
_serdes_xindex: int

class GetDataAttr(ResponseBodyStruct):
status: PreCodingStatus = field(XmpInt())
"""Status Off/On/Auto"""
endianness: Endianness = field(XmpInt())
"""Endianness Normal/Reverted(BigEndian/LittleEndian)) """

class SetDataAttr(RequestBodyStruct):
status: PreCodingStatus = field(XmpInt())
"""Status Off/On/Auto"""
endianness: Endianness = field(XmpInt())
"""Endianness Normal/Reverted(BigEndian/LittleEndian)) """

def get(self) -> Token[GetDataAttr]:
"""Get the Tx Pre-Coding Configurations.

:return: Tx Pre-Coding configurations including status, and endianness type.
:rtype: PP_TXPRECODING.GetDataAttr
"""

return Token(self._connection, build_get_request(self, module=self._module, port=self._port, indices=[self._serdes_xindex]))

def set(self, status: PreCodingStatus, endianness: Endianness) -> Token[None]:
"""Set the Tx Pre-coding settings of the PHY.

:param status: The status(Off/On/Auto)
:type status: PreCodingStatus
:param endianness: Endianness type
:type endianness: Endianness
"""

return Token(self._connection, build_set_request(self, module=self._module, port=self._port, indices=[self._serdes_xindex], status=status, endianness=endianness))

@register_command
@dataclass
class PP_RXGRAYCODING:
"""
GET/SET Rx Gray-Coding Configurations.
"""

code: typing.ClassVar[int] = 422
pushed: typing.ClassVar[bool] = True

_connection: 'interfaces.IConnection'
_module: int
_port: int
_serdes_xindex: int

class GetDataAttr(ResponseBodyStruct):
status: GrayCodingStatus = field(XmpInt())
"""Status Off/On"""
endianness: Endianness = field(XmpInt())
"""Endianness Normal/Reverted(BigEndian/LittleEndian)) """

class SetDataAttr(RequestBodyStruct):
status: GrayCodingStatus = field(XmpInt())
"""Status Off/On"""
endianness: Endianness = field(XmpInt())
"""Endianness Normal/Reverted(BigEndian/LittleEndian)) """

def get(self) -> Token[GetDataAttr]:
"""Get the Rx Gray-Coding Configurations.

:return: Rx Gray-Coding configurations including status, and endianness type.
:rtype: PP_RXGRAYCODING.GetDataAttr
"""

return Token(self._connection, build_get_request(self, module=self._module, port=self._port, indices=[self._serdes_xindex]))

def set(self, status: GrayCodingStatus, endianness: Endianness) -> Token[None]:
"""Set the Rx Gray-coding settings of the PHY.

:param status: The status(Off/On)
:type status: GrayCodingStatus
:param endianness: Endianness type
:type endianness: Endianness
"""

return Token(self._connection, build_set_request(self, module=self._module, port=self._port, indices=[self._serdes_xindex], status=status, endianness=endianness))

@register_command
@dataclass
class PP_TXGRAYCODING:
"""
GET/SET Tx Gray-Coding Configurations.
"""

code: typing.ClassVar[int] = 423
pushed: typing.ClassVar[bool] = True

_connection: 'interfaces.IConnection'
_module: int
_port: int
_serdes_xindex: int

class GetDataAttr(ResponseBodyStruct):
status: GrayCodingStatus = field(XmpInt())
"""Status Off/On/Auto"""
endianness: Endianness = field(XmpInt())
"""Endianness Normal/Reverted(BigEndian/LittleEndian)) """

class SetDataAttr(RequestBodyStruct):
status: GrayCodingStatus = field(XmpInt())
"""Status Off/On/Auto"""
endianness: Endianness = field(XmpInt())
"""Endianness Normal/Reverted(BigEndian/LittleEndian)) """

def get(self) -> Token[GetDataAttr]:
"""Get the Tx Gray-Coding Configurations.

:return: Tx Gray-Coding configurations including status, and endianness type.
:rtype: PP_TXGRAYCODING.GetDataAttr
"""

return Token(self._connection, build_get_request(self, module=self._module, port=self._port, indices=[self._serdes_xindex]))

def set(self, status: GrayCodingStatus, endianness: Endianness) -> Token[None]:
"""Set the Tx Gray-coding settings of the PHY.

:param status: The status(Off/On/Auto)
:type status: GrayCodingStatus
:param endianness: Endianness type
:type endianness: Endianness
"""

return Token(self._connection, build_set_request(self, module=self._module, port=self._port, indices=[self._serdes_xindex], status=status, endianness=endianness))
Loading