blob: 593c573820e068be82120bb2b8fe65e6ac737cef [file] [log] [blame]
/*
* Copyright (c) 2014, 2016, The Linux Foundation. All rights reserved.
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
* above copyright notice and this permission notice appear in all copies.
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/**
* @defgroup dess_cosmap DESS_COSMAP
* @{
*/
#include "sw.h"
#include "hsl.h"
#include "hsl_dev.h"
#include "hsl_port_prop.h"
#include "dess_cosmap.h"
#include "dess_reg.h"
#define DESS_MAX_DSCP 63
#define DESS_MAX_UP 7
#define DESS_MAX_PRI 7
#define DESS_MAX_DP 1
#define DESS_MAX_QUEUE 3
#define DESS_MAX_EH_QUEUE 5
#define DESS_DSCP_TO_PRI 0
#define DESS_DSCP_TO_DP 1
#define DESS_UP_TO_PRI 2
#define DESS_UP_TO_DP 3
#define DESS_EGRESS_REAMRK_ADDR 0x5ae00
#define DESS_EGRESS_REAMRK_NUM 16
static sw_error_t
_dess_cosmap_dscp_to_pri_dp_set(a_uint32_t dev_id, a_uint32_t mode,
a_uint32_t dscp, a_uint32_t val)
{
sw_error_t rv;
a_uint32_t index, data = 0;
if (DESS_MAX_DSCP < dscp)
{
return SW_BAD_PARAM;
}
index = dscp >> 3;
HSL_REG_ENTRY_GET(rv, dev_id, DSCP_TO_PRI, index, (a_uint8_t *) (&data),
sizeof (a_uint32_t));
SW_RTN_ON_ERROR(rv);
if (DESS_DSCP_TO_PRI == mode)
{
if (DESS_MAX_PRI < val)
{
return SW_BAD_PARAM;
}
data &= (~(0x7 << ((dscp & 0x7) << 2)));
data |= (val << ((dscp & 0x7) << 2));
}
else
{
if (DESS_MAX_DP < val)
{
return SW_BAD_PARAM;
}
data &= (~(0x1 << (((dscp & 0x7) << 2) + 3)));
data |= (val << (((dscp & 0x7) << 2) + 3));
}
HSL_REG_ENTRY_SET(rv, dev_id, DSCP_TO_PRI, index, (a_uint8_t *) (&data),
sizeof (a_uint32_t));
return rv;
}
static sw_error_t
_dess_cosmap_dscp_to_pri_dp_get(a_uint32_t dev_id, a_uint32_t mode,
a_uint32_t dscp, a_uint32_t * val)
{
sw_error_t rv;
a_uint32_t index, data = 0;
if (DESS_MAX_DSCP < dscp)
{
return SW_BAD_PARAM;
}
index = dscp >> 3;
HSL_REG_ENTRY_GET(rv, dev_id, DSCP_TO_PRI, index, (a_uint8_t *) (&data),
sizeof (a_uint32_t));
SW_RTN_ON_ERROR(rv);
data = (data >> ((dscp & 0x7) << 2)) & 0xf;
if (DESS_DSCP_TO_PRI == mode)
{
*val = data & 0x7;
}
else
{
*val = (data & 0x8) >> 3;
}
return SW_OK;
}
static sw_error_t
_dess_cosmap_up_to_pri_dp_set(a_uint32_t dev_id, a_uint32_t mode, a_uint32_t up,
a_uint32_t val)
{
sw_error_t rv;
a_uint32_t data = 0;
if (DESS_MAX_UP < up)
{
return SW_BAD_PARAM;
}
HSL_REG_ENTRY_GET(rv, dev_id, UP_TO_PRI, 0, (a_uint8_t *) (&data),
sizeof (a_uint32_t));
SW_RTN_ON_ERROR(rv);
if (DESS_UP_TO_PRI == mode)
{
if (DESS_MAX_PRI < val)
{
return SW_BAD_PARAM;
}
data &= (~(0x7 << (up << 2)));
data |= (val << (up << 2));
}
else
{
if (DESS_MAX_DP < val)
{
return SW_BAD_PARAM;
}
data &= (~(0x1 << ((up << 2) + 3)));
data |= (val << ((up << 2) + 3));
}
HSL_REG_ENTRY_SET(rv, dev_id, UP_TO_PRI, 0, (a_uint8_t *) (&data),
sizeof (a_uint32_t));
return rv;
}
static sw_error_t
_dess_cosmap_up_to_pri_dp_get(a_uint32_t dev_id, a_uint32_t mode, a_uint32_t up,
a_uint32_t * val)
{
sw_error_t rv;
a_uint32_t data = 0;
if (DESS_MAX_UP < up)
{
return SW_BAD_PARAM;
}
HSL_REG_ENTRY_GET(rv, dev_id, UP_TO_PRI, 0, (a_uint8_t *) (&data),
sizeof (a_uint32_t));
SW_RTN_ON_ERROR(rv);
data = (data >> (up << 2)) & 0xf;
if (DESS_UP_TO_PRI == mode)
{
*val = (data & 0x7);
}
else
{
*val = (data & 0x8) >> 3;
}
return SW_OK;
}
static sw_error_t
_dess_cosmap_dscp_to_ehpri_dp_set(a_uint32_t dev_id, a_uint32_t mode,
a_uint32_t dscp, a_uint32_t val)
{
sw_error_t rv;
a_uint32_t index, data = 0;
if (DESS_MAX_DSCP < dscp)
{
return SW_BAD_PARAM;
}
index = dscp >> 3;
HSL_REG_ENTRY_GET(rv, dev_id, DSCP_TO_EHPRI, index, (a_uint8_t *) (&data),
sizeof (a_uint32_t));
SW_RTN_ON_ERROR(rv);
if (DESS_DSCP_TO_PRI == mode)
{
if (DESS_MAX_PRI < val)
{
return SW_BAD_PARAM;
}
data &= (~(0x7 << ((dscp & 0x7) << 2)));
data |= (val << ((dscp & 0x7) << 2));
}
else
{
if (DESS_MAX_DP < val)
{
return SW_BAD_PARAM;
}
data &= (~(0x1 << (((dscp & 0x7) << 2) + 3)));
data |= (val << (((dscp & 0x7) << 2) + 3));
}
HSL_REG_ENTRY_SET(rv, dev_id, DSCP_TO_EHPRI, index, (a_uint8_t *) (&data),
sizeof (a_uint32_t));
return rv;
}
static sw_error_t
_dess_cosmap_dscp_to_ehpri_dp_get(a_uint32_t dev_id, a_uint32_t mode,
a_uint32_t dscp, a_uint32_t * val)
{
sw_error_t rv;
a_uint32_t index, data = 0;
if (DESS_MAX_DSCP < dscp)
{
return SW_BAD_PARAM;
}
index = dscp >> 3;
HSL_REG_ENTRY_GET(rv, dev_id, DSCP_TO_EHPRI, index, (a_uint8_t *) (&data),
sizeof (a_uint32_t));
SW_RTN_ON_ERROR(rv);
data = (data >> ((dscp & 0x7) << 2)) & 0xf;
if (DESS_DSCP_TO_PRI == mode)
{
*val = data & 0x7;
}
else
{
*val = (data & 0x8) >> 3;
}
return SW_OK;
}
static sw_error_t
_dess_cosmap_up_to_ehpri_dp_set(a_uint32_t dev_id, a_uint32_t mode, a_uint32_t up,
a_uint32_t val)
{
sw_error_t rv;
a_uint32_t data = 0;
if (DESS_MAX_UP < up)
{
return SW_BAD_PARAM;
}
HSL_REG_ENTRY_GET(rv, dev_id, UP_TO_EHPRI, 0, (a_uint8_t *) (&data),
sizeof (a_uint32_t));
SW_RTN_ON_ERROR(rv);
if (DESS_UP_TO_PRI == mode)
{
if (DESS_MAX_PRI < val)
{
return SW_BAD_PARAM;
}
data &= (~(0x7 << (up << 2)));
data |= (val << (up << 2));
}
else
{
if (DESS_MAX_DP < val)
{
return SW_BAD_PARAM;
}
data &= (~(0x1 << ((up << 2) + 3)));
data |= (val << ((up << 2) + 3));
}
HSL_REG_ENTRY_SET(rv, dev_id, UP_TO_EHPRI, 0, (a_uint8_t *) (&data),
sizeof (a_uint32_t));
return rv;
}
static sw_error_t
_dess_cosmap_up_to_ehpri_dp_get(a_uint32_t dev_id, a_uint32_t mode, a_uint32_t up,
a_uint32_t * val)
{
sw_error_t rv;
a_uint32_t data = 0;
if (DESS_MAX_UP < up)
{
return SW_BAD_PARAM;
}
HSL_REG_ENTRY_GET(rv, dev_id, UP_TO_EHPRI, 0, (a_uint8_t *) (&data),
sizeof (a_uint32_t));
SW_RTN_ON_ERROR(rv);
data = (data >> (up << 2)) & 0xf;
if (DESS_UP_TO_PRI == mode)
{
*val = (data & 0x7);
}
else
{
*val = (data & 0x8) >> 3;
}
return SW_OK;
}
static sw_error_t
_dess_cosmap_pri_to_queue_set(a_uint32_t dev_id, a_uint32_t pri,
a_uint32_t queue)
{
sw_error_t rv;
a_uint32_t data = 0;
if ((DESS_MAX_PRI < pri) || (DESS_MAX_QUEUE < queue))
{
return SW_BAD_PARAM;
}
HSL_REG_ENTRY_GET(rv, dev_id, PRI_TO_QUEUE, 0, (a_uint8_t *) (&data),
sizeof (a_uint32_t));
SW_RTN_ON_ERROR(rv);
data &= (~(0x3 << (pri << 2)));
data |= (queue << (pri << 2));
HSL_REG_ENTRY_SET(rv, dev_id, PRI_TO_QUEUE, 0, (a_uint8_t *) (&data),
sizeof (a_uint32_t));
return rv;
}
static sw_error_t
_dess_cosmap_pri_to_queue_get(a_uint32_t dev_id, a_uint32_t pri,
a_uint32_t * queue)
{
sw_error_t rv;
a_uint32_t data = 0;
if (DESS_MAX_PRI < pri)
{
return SW_BAD_PARAM;
}
HSL_REG_ENTRY_GET(rv, dev_id, PRI_TO_QUEUE, 0, (a_uint8_t *) (&data),
sizeof (a_uint32_t));
SW_RTN_ON_ERROR(rv);
*queue = (data >> (pri << 2)) & 0x3;
return SW_OK;
}
static sw_error_t
_dess_cosmap_pri_to_ehqueue_set(a_uint32_t dev_id, a_uint32_t pri,
a_uint32_t queue)
{
sw_error_t rv;
a_uint32_t data = 0;
if ((DESS_MAX_PRI < pri) || (DESS_MAX_EH_QUEUE < queue))
{
return SW_BAD_PARAM;
}
HSL_REG_ENTRY_GET(rv, dev_id, PRI_TO_EHQUEUE, 0, (a_uint8_t *) (&data),
sizeof (a_uint32_t));
SW_RTN_ON_ERROR(rv);
data &= (~(0x7 << (pri << 2)));
data |= (queue << (pri << 2));
HSL_REG_ENTRY_SET(rv, dev_id, PRI_TO_EHQUEUE, 0, (a_uint8_t *) (&data),
sizeof (a_uint32_t));
return rv;
}
static sw_error_t
_dess_cosmap_pri_to_ehqueue_get(a_uint32_t dev_id, a_uint32_t pri,
a_uint32_t * queue)
{
sw_error_t rv;
a_uint32_t data = 0;
if (DESS_MAX_PRI < pri)
{
return SW_BAD_PARAM;
}
HSL_REG_ENTRY_GET(rv, dev_id, PRI_TO_EHQUEUE, 0, (a_uint8_t *) (&data),
sizeof (a_uint32_t));
SW_RTN_ON_ERROR(rv);
*queue = (data >> (pri << 2)) & 0x7;
return SW_OK;
}
static sw_error_t
_dess_cosmap_egress_remark_set(a_uint32_t dev_id, a_uint32_t tbl_id,
fal_egress_remark_table_t * tbl)
{
sw_error_t rv;
a_uint32_t data, addr;
if (DESS_EGRESS_REAMRK_NUM <= tbl_id)
{
return SW_BAD_PARAM;
}
data = (tbl->y_up & 0x7)
| ((tbl->y_dei & 0x1) << 3)
| ((tbl->g_up & 0x7) << 4)
| ((tbl->y_dscp & 0x3f) << 8)
| ((tbl->g_dei & 0x1) << 14)
| ((tbl->g_dscp & 0x3f) << 16)
| ((tbl->remark_dscp & 0x1) << 23)
| ((tbl->remark_up & 0x1) << 22)
| ((tbl->remark_dei & 0x1) << 7);
addr = DESS_EGRESS_REAMRK_ADDR + (tbl_id << 4);
HSL_REG_ENTRY_GEN_SET(rv, dev_id, addr, sizeof (a_uint32_t),
(a_uint8_t *) (&data), sizeof (a_uint32_t));
return rv;
}
static sw_error_t
_dess_cosmap_egress_remark_get(a_uint32_t dev_id, a_uint32_t tbl_id,
fal_egress_remark_table_t * tbl)
{
sw_error_t rv;
a_uint32_t data = 0, addr;
if (DESS_EGRESS_REAMRK_NUM <= tbl_id)
{
return SW_BAD_PARAM;
}
aos_mem_zero(tbl, sizeof (fal_egress_remark_table_t));
addr = DESS_EGRESS_REAMRK_ADDR + (tbl_id << 4);
HSL_REG_ENTRY_GEN_GET(rv, dev_id, addr, sizeof (a_uint32_t),
(a_uint8_t *) (&data), sizeof (a_uint32_t));
SW_RTN_ON_ERROR(rv);
if (data & (0x1 << 23))
{
tbl->remark_dscp = A_TRUE;
tbl->y_dscp = (data >> 8) & 0x3f;
tbl->g_dscp = (data >> 16) & 0x3f;
}
if (data & (0x1 << 22))
{
tbl->remark_up = A_TRUE;
tbl->y_up = data & 0x7;
tbl->g_up = (data >> 4) & 0x7;
}
if (data & (0x1 << 7))
{
tbl->remark_dei = A_TRUE;
tbl->y_dei = (data >> 3) & 0x1;
tbl->g_dei = (data >> 14) & 0x1;
}
return SW_OK;
}
/**
* @brief Set dscp to internal priority mapping on one particular device.
* @param[in] dev_id device id
* @param[in] dscp dscp
* @param[in] pri internal priority
* @return SW_OK or error code
*/
HSL_LOCAL sw_error_t
dess_cosmap_dscp_to_pri_set(a_uint32_t dev_id, a_uint32_t dscp, a_uint32_t pri)
{
sw_error_t rv;
HSL_API_LOCK;
rv = _dess_cosmap_dscp_to_pri_dp_set(dev_id, DESS_DSCP_TO_PRI, dscp, pri);
HSL_API_UNLOCK;
return rv;
}
/**
* @brief Get dscp to internal priority mapping on one particular device.
* @param[in] dev_id device id
* @param[in] dscp dscp
* @param[out] pri internal priority
* @return SW_OK or error code
*/
HSL_LOCAL sw_error_t
dess_cosmap_dscp_to_pri_get(a_uint32_t dev_id, a_uint32_t dscp,
a_uint32_t * pri)
{
sw_error_t rv;
HSL_API_LOCK;
rv = _dess_cosmap_dscp_to_pri_dp_get(dev_id, DESS_DSCP_TO_PRI, dscp, pri);
HSL_API_UNLOCK;
return rv;
}
/**
* @brief Set dscp to internal drop precedence mapping on one particular device.
* @param[in] dev_id device id
* @param[in] dscp dscp
* @param[in] dp internal drop precedence
* @return SW_OK or error code
*/
HSL_LOCAL sw_error_t
dess_cosmap_dscp_to_dp_set(a_uint32_t dev_id, a_uint32_t dscp, a_uint32_t dp)
{
sw_error_t rv;
HSL_API_LOCK;
rv = _dess_cosmap_dscp_to_pri_dp_set(dev_id, DESS_DSCP_TO_DP, dscp, dp);
HSL_API_UNLOCK;
return rv;
}
/**
* @brief Get dscp to internal drop precedence mapping on one particular device.
* @param[in] dev_id device id
* @param[in] dscp dscp
* @param[out] dp internal drop precedence
* @return SW_OK or error code
*/
HSL_LOCAL sw_error_t
dess_cosmap_dscp_to_dp_get(a_uint32_t dev_id, a_uint32_t dscp, a_uint32_t * dp)
{
sw_error_t rv;
HSL_API_LOCK;
rv = _dess_cosmap_dscp_to_pri_dp_get(dev_id, DESS_DSCP_TO_DP, dscp, dp);
HSL_API_UNLOCK;
return rv;
}
/**
* @brief Set dot1p to internal priority mapping on one particular device.
* @param[in] dev_id device id
* @param[in] up dot1p
* @param[in] pri internal priority
* @return SW_OK or error code
*/
HSL_LOCAL sw_error_t
dess_cosmap_up_to_pri_set(a_uint32_t dev_id, a_uint32_t up, a_uint32_t pri)
{
sw_error_t rv;
HSL_API_LOCK;
rv = _dess_cosmap_up_to_pri_dp_set(dev_id, DESS_UP_TO_PRI, up, pri);
HSL_API_UNLOCK;
return rv;
}
/**
* @brief Get dot1p to internal priority mapping on one particular device.
* @param[in] dev_id device id
* @param[in] up dot1p
* @param[out] pri internal priority
* @return SW_OK or error code
*/
HSL_LOCAL sw_error_t
dess_cosmap_up_to_pri_get(a_uint32_t dev_id, a_uint32_t up, a_uint32_t * pri)
{
sw_error_t rv;
HSL_API_LOCK;
rv = _dess_cosmap_up_to_pri_dp_get(dev_id, DESS_UP_TO_PRI, up, pri);
HSL_API_UNLOCK;
return rv;
}
/**
* @brief Set dot1p to internal drop precedence mapping on one particular device.
* @param[in] dev_id device id
* @param[in] up dot1p
* @param[in] dp internal drop precedence
* @return SW_OK or error code
*/
HSL_LOCAL sw_error_t
dess_cosmap_up_to_dp_set(a_uint32_t dev_id, a_uint32_t up, a_uint32_t dp)
{
sw_error_t rv;
HSL_API_LOCK;
rv = _dess_cosmap_up_to_pri_dp_set(dev_id, DESS_UP_TO_DP, up, dp);
HSL_API_UNLOCK;
return rv;
}
/**
* @brief Get dot1p to internal drop precedence mapping on one particular device.
* @param[in] dev_id device id
* @param[in] up dot1p
* @param[in] dp internal drop precedence
* @return SW_OK or error code
*/
HSL_LOCAL sw_error_t
dess_cosmap_up_to_dp_get(a_uint32_t dev_id, a_uint32_t up, a_uint32_t * dp)
{
sw_error_t rv;
HSL_API_LOCK;
rv = _dess_cosmap_up_to_pri_dp_get(dev_id, DESS_UP_TO_DP, up, dp);
HSL_API_UNLOCK;
return rv;
}
/**
* @brief Set dscp to internal priority mapping on one particular device for WAN port.
* @param[in] dev_id device id
* @param[in] dscp dscp
* @param[in] pri internal priority
* @return SW_OK or error code
*/
HSL_LOCAL sw_error_t
dess_cosmap_dscp_to_ehpri_set(a_uint32_t dev_id, a_uint32_t dscp, a_uint32_t pri)
{
sw_error_t rv;
HSL_API_LOCK;
rv = _dess_cosmap_dscp_to_ehpri_dp_set(dev_id, DESS_DSCP_TO_PRI, dscp, pri);
HSL_API_UNLOCK;
return rv;
}
/**
* @brief Get dscp to internal priority mapping on one particular device for WAN port.
* @param[in] dev_id device id
* @param[in] dscp dscp
* @param[out] pri internal priority
* @return SW_OK or error code
*/
HSL_LOCAL sw_error_t
dess_cosmap_dscp_to_ehpri_get(a_uint32_t dev_id, a_uint32_t dscp,
a_uint32_t * pri)
{
sw_error_t rv;
HSL_API_LOCK;
rv = _dess_cosmap_dscp_to_ehpri_dp_get(dev_id, DESS_DSCP_TO_PRI, dscp, pri);
HSL_API_UNLOCK;
return rv;
}
/**
* @brief Set dscp to internal drop precedence mapping on one particular device for WAN port.
* @param[in] dev_id device id
* @param[in] dscp dscp
* @param[in] dp internal drop precedence
* @return SW_OK or error code
*/
HSL_LOCAL sw_error_t
dess_cosmap_dscp_to_ehdp_set(a_uint32_t dev_id, a_uint32_t dscp, a_uint32_t dp)
{
sw_error_t rv;
HSL_API_LOCK;
rv = _dess_cosmap_dscp_to_ehpri_dp_set(dev_id, DESS_DSCP_TO_DP, dscp, dp);
HSL_API_UNLOCK;
return rv;
}
/**
* @brief Get dscp to internal drop precedence mapping on one particular device for WAN port.
* @param[in] dev_id device id
* @param[in] dscp dscp
* @param[out] dp internal drop precedence
* @return SW_OK or error code
*/
HSL_LOCAL sw_error_t
dess_cosmap_dscp_to_ehdp_get(a_uint32_t dev_id, a_uint32_t dscp, a_uint32_t * dp)
{
sw_error_t rv;
HSL_API_LOCK;
rv = _dess_cosmap_dscp_to_ehpri_dp_get(dev_id, DESS_DSCP_TO_DP, dscp, dp);
HSL_API_UNLOCK;
return rv;
}
/**
* @brief Set dot1p to internal priority mapping on one particular device for WAN port.
* @param[in] dev_id device id
* @param[in] up dot1p
* @param[in] pri internal priority
* @return SW_OK or error code
*/
HSL_LOCAL sw_error_t
dess_cosmap_up_to_ehpri_set(a_uint32_t dev_id, a_uint32_t up, a_uint32_t pri)
{
sw_error_t rv;
HSL_API_LOCK;
rv = _dess_cosmap_up_to_ehpri_dp_set(dev_id, DESS_UP_TO_PRI, up, pri);
HSL_API_UNLOCK;
return rv;
}
/**
* @brief Get dot1p to internal priority mapping on one particular device for WAN port.
* @param[in] dev_id device id
* @param[in] up dot1p
* @param[out] pri internal priority
* @return SW_OK or error code
*/
HSL_LOCAL sw_error_t
dess_cosmap_up_to_ehpri_get(a_uint32_t dev_id, a_uint32_t up, a_uint32_t * pri)
{
sw_error_t rv;
HSL_API_LOCK;
rv = _dess_cosmap_up_to_ehpri_dp_get(dev_id, DESS_UP_TO_PRI, up, pri);
HSL_API_UNLOCK;
return rv;
}
/**
* @brief Set dot1p to internal drop precedence mapping on one particular device for WAN port.
* @param[in] dev_id device id
* @param[in] up dot1p
* @param[in] dp internal drop precedence
* @return SW_OK or error code
*/
HSL_LOCAL sw_error_t
dess_cosmap_up_to_ehdp_set(a_uint32_t dev_id, a_uint32_t up, a_uint32_t dp)
{
sw_error_t rv;
HSL_API_LOCK;
rv = _dess_cosmap_up_to_ehpri_dp_set(dev_id, DESS_UP_TO_DP, up, dp);
HSL_API_UNLOCK;
return rv;
}
/**
* @brief Get dot1p to internal drop precedence mapping on one particular device for WAN port.
* @param[in] dev_id device id
* @param[in] up dot1p
* @param[in] dp internal drop precedence
* @return SW_OK or error code
*/
HSL_LOCAL sw_error_t
dess_cosmap_up_to_ehdp_get(a_uint32_t dev_id, a_uint32_t up, a_uint32_t * dp)
{
sw_error_t rv;
HSL_API_LOCK;
rv = _dess_cosmap_up_to_ehpri_dp_get(dev_id, DESS_UP_TO_DP, up, dp);
HSL_API_UNLOCK;
return rv;
}
/**
* @brief Set internal priority to queue mapping on one particular device.
* @details Comments:
* This function is for port 1/2/3/4 which have four egress queues
* @param[in] dev_id device id
* @param[in] pri internal priority
* @param[in] queue queue id
* @return SW_OK or error code
*/
HSL_LOCAL sw_error_t
dess_cosmap_pri_to_queue_set(a_uint32_t dev_id, a_uint32_t pri,
a_uint32_t queue)
{
sw_error_t rv;
HSL_API_LOCK;
rv = _dess_cosmap_pri_to_queue_set(dev_id, pri, queue);
HSL_API_UNLOCK;
return rv;
}
/**
* @brief Get internal priority to queue mapping on one particular device.
* @details Comments:
* This function is for port 1/2/3/4 which have four egress queues
* @param[in] dev_id device id
* @param[in] pri internal priority
* @param[out] queue queue id
* @return SW_OK or error code
*/
HSL_LOCAL sw_error_t
dess_cosmap_pri_to_queue_get(a_uint32_t dev_id, a_uint32_t pri,
a_uint32_t * queue)
{
sw_error_t rv;
HSL_API_LOCK;
rv = _dess_cosmap_pri_to_queue_get(dev_id, pri, queue);
HSL_API_UNLOCK;
return rv;
}
/**
* @brief Set internal priority to queue mapping on one particular device.
* @details Comments:
* This function is for port 0/5/6 which have six egress queues
* @param[in] dev_id device id
* @param[in] pri internal priority
* @param[in] queue queue id
* @return SW_OK or error code
*/
HSL_LOCAL sw_error_t
dess_cosmap_pri_to_ehqueue_set(a_uint32_t dev_id, a_uint32_t pri,
a_uint32_t queue)
{
sw_error_t rv;
HSL_API_LOCK;
rv = _dess_cosmap_pri_to_ehqueue_set(dev_id, pri, queue);
HSL_API_UNLOCK;
return rv;
}
/**
* @brief Get internal priority to queue mapping on one particular device.
* @details Comments:
* This function is for port 0/5/6 which have six egress queues
* @param[in] dev_id device id
* @param[in] pri internal priority
* @param[in] queue queue id
* @return SW_OK or error code
*/
HSL_LOCAL sw_error_t
dess_cosmap_pri_to_ehqueue_get(a_uint32_t dev_id, a_uint32_t pri,
a_uint32_t * queue)
{
sw_error_t rv;
HSL_API_LOCK;
rv = _dess_cosmap_pri_to_ehqueue_get(dev_id, pri, queue);
HSL_API_UNLOCK;
return rv;
}
/**
* @brief Set egress queue based CoS remap table on one particular device.
* @param[in] dev_id device id
* @param[in] tbl_id CoS remap table id
* @param[in] tbl CoS remap table
* @return SW_OK or error code
*/
HSL_LOCAL sw_error_t
dess_cosmap_egress_remark_set(a_uint32_t dev_id, a_uint32_t tbl_id,
fal_egress_remark_table_t * tbl)
{
sw_error_t rv;
HSL_API_LOCK;
rv = _dess_cosmap_egress_remark_set(dev_id, tbl_id, tbl);
HSL_API_UNLOCK;
return rv;
}
/**
* @brief Get egress queue based CoS remap table on one particular device.
* @param[in] dev_id device id
* @param[in] tbl_id CoS remap table id
* @param[out] tbl CoS remap table
* @return SW_OK or error code
*/
HSL_LOCAL sw_error_t
dess_cosmap_egress_remark_get(a_uint32_t dev_id, a_uint32_t tbl_id,
fal_egress_remark_table_t * tbl)
{
sw_error_t rv;
HSL_API_LOCK;
rv = _dess_cosmap_egress_remark_get(dev_id, tbl_id, tbl);
HSL_API_UNLOCK;
return rv;
}
sw_error_t
dess_cosmap_init(a_uint32_t dev_id)
{
HSL_DEV_ID_CHECK(dev_id);
#ifndef HSL_STANDALONG
{
hsl_api_t *p_api;
SW_RTN_ON_NULL(p_api = hsl_api_ptr_get(dev_id));
p_api->cosmap_dscp_to_pri_set = dess_cosmap_dscp_to_pri_set;
p_api->cosmap_dscp_to_pri_get = dess_cosmap_dscp_to_pri_get;
p_api->cosmap_dscp_to_dp_set = dess_cosmap_dscp_to_dp_set;
p_api->cosmap_dscp_to_dp_get = dess_cosmap_dscp_to_dp_get;
p_api->cosmap_up_to_pri_set = dess_cosmap_up_to_pri_set;
p_api->cosmap_up_to_pri_get = dess_cosmap_up_to_pri_get;
p_api->cosmap_up_to_dp_set = dess_cosmap_up_to_dp_set;
p_api->cosmap_up_to_dp_get = dess_cosmap_up_to_dp_get;
p_api->cosmap_dscp_to_ehpri_set = dess_cosmap_dscp_to_ehpri_set;
p_api->cosmap_dscp_to_ehpri_get = dess_cosmap_dscp_to_ehpri_get;
p_api->cosmap_dscp_to_ehdp_set = dess_cosmap_dscp_to_ehdp_set;
p_api->cosmap_dscp_to_ehdp_get = dess_cosmap_dscp_to_ehdp_get;
p_api->cosmap_up_to_ehpri_set = dess_cosmap_up_to_ehpri_set;
p_api->cosmap_up_to_ehpri_get = dess_cosmap_up_to_ehpri_get;
p_api->cosmap_up_to_ehdp_set = dess_cosmap_up_to_ehdp_set;
p_api->cosmap_up_to_ehdp_get = dess_cosmap_up_to_ehdp_get;
p_api->cosmap_pri_to_queue_set = dess_cosmap_pri_to_queue_set;
p_api->cosmap_pri_to_queue_get = dess_cosmap_pri_to_queue_get;
p_api->cosmap_pri_to_ehqueue_set = dess_cosmap_pri_to_ehqueue_set;
p_api->cosmap_pri_to_ehqueue_get = dess_cosmap_pri_to_ehqueue_get;
p_api->cosmap_egress_remark_set = dess_cosmap_egress_remark_set;
p_api->cosmap_egress_remark_get = dess_cosmap_egress_remark_get;
}
#endif
return SW_OK;
}
/**
* @}
*/