• Amit Cohen's avatar
    mlxsw: Add an initial PGT table support · d8782ec5
    Amit Cohen authored
    The PGT (Port Group Table) table maps an index to a bitmap of local ports
    to which a packet needs to be replicated. This table is used for layer 2
    multicast and flooding.
    
    In the legacy model, software did not interact with this table directly.
    Instead, it was accessed by firmware in response to registers such as
    SFTR and SMID. In the new model, the SFTR register is deprecated and
    software has full control over the PGT table using the SMID register.
    
    The entire state of the PGT table needs to be maintained in software
    because member ports in a PGT entry needs to be reference counted to avoid
    releasing entries which are still in use.
    
    Add the following APIs:
    1. mlxsw_sp_pgt_{init, fini}() - allocate/free the PGT table.
    2. mlxsw_sp_pgt_mid_alloc_range() - allocate a range of MID indexes in PGT.
       To be used by FID code during initialization to reserve specific PGT
       indexes for flooding entries.
    3. mlxsw_sp_pgt_mid_free_range() - free indexes in a given range.
    4. mlxsw_sp_pgt_mid_alloc() - allocate one MID index in the PGT at a
       non-specific range, just search for free index. To be used by MDB code.
    5. mlxsw_sp_pgt_mid_free() - free the given index.
    
    Note that alloc() functions do not allocate the entries in software, just
    allocate IDs using 'idr'.
    Signed-off-by: default avatarAmit Cohen <amcohen@nvidia.com>
    Reviewed-by: default avatarPetr Machata <petrm@nvidia.com>
    Signed-off-by: default avatarIdo Schimmel <idosch@nvidia.com>
    Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
    d8782ec5
resources.h 5.05 KB