xref: /dpdk/dts/framework/params/eal.py (revision 0264e4087f9504a2847258c99c4dec0e9c42922e)
1# SPDX-License-Identifier: BSD-3-Clause
2# Copyright(c) 2024 Arm Limited
3
4"""Module representing the DPDK EAL-related parameters."""
5
6from dataclasses import dataclass, field
7from typing import Literal
8
9from framework.params import Params, Switch
10from framework.testbed_model.cpu import LogicalCoreList
11from framework.testbed_model.port import Port
12from framework.testbed_model.virtual_device import VirtualDevice
13
14
15def _port_to_pci(port: Port) -> str:
16    return port.pci
17
18
19@dataclass(kw_only=True)
20class EalParams(Params):
21    """The environment abstraction layer parameters.
22
23    Attributes:
24        lcore_list: The list of logical cores to use.
25        memory_channels: The number of memory channels to use.
26        prefix: Set the file prefix string with which to start DPDK, e.g.: ``prefix="vf"``.
27        no_pci: Switch to disable PCI bus, e.g.: ``no_pci=True``.
28        vdevs: Virtual devices, e.g.::
29
30            vdevs=[
31                VirtualDevice('net_ring0'),
32                VirtualDevice('net_ring1')
33            ]
34
35        ports: The list of ports to allow.
36        other_eal_param: user defined DPDK EAL parameters, e.g.::
37
38            ``other_eal_param='--single-file-segments'``
39    """
40
41    lcore_list: LogicalCoreList | None = field(default=None, metadata=Params.short("l"))
42    memory_channels: int | None = field(default=None, metadata=Params.short("n"))
43    prefix: str = field(default="dpdk", metadata=Params.long("file-prefix"))
44    no_pci: Switch = None
45    vdevs: list[VirtualDevice] | None = field(
46        default=None, metadata=Params.multiple() | Params.long("vdev")
47    )
48    allowed_ports: list[Port] | None = field(
49        default=None,
50        metadata=Params.convert_value(_port_to_pci) | Params.multiple() | Params.short("a"),
51    )
52    blocked_ports: list[Port] | None = field(
53        default=None,
54        metadata=Params.convert_value(_port_to_pci) | Params.multiple() | Params.short("b"),
55    )
56    other_eal_param: Params | None = None
57    _separator: Literal[True] = field(default=True, init=False, metadata=Params.short("-"))
58