⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ixethdbfeatures.c

📁 AMCC POWERPC 44X系列的U-BOOT文件
💻 C
📖 第 1 页 / 共 2 页
字号:
    }    /* force port enabled */    portInfo->enabled = TRUE;    if (enable)    {        /* turn on enable bit */        portInfo->featureStatus |= feature;#ifdef CONFIG_WITH_VLAN /* test-only: VLAN support not included to save space!!! */        /* if this is VLAN/QoS set the default priority table */        if (feature == IX_ETH_DB_VLAN_QOS)        {            /* turn on VLAN/QoS (most permissive mode):                - set default 802.1Q priority mapping table, in accordance to the                  availability of traffic classes                - set the acceptable frame filter to accept all                - set the Ingress tagging mode to pass-through                - set full VLAN membership list                - set full TTI table                - set the default 802.1Q tag to 0 (VLAN ID 0, Pri 0, CFI 0)                - enable TPID port extraction            */            portInfo->ixEthDBTrafficClassCount = portInfo->ixEthDBTrafficClassAvailable;            /* set default 802.1Q priority mapping table - note that C indexing starts from 0, so we substract 1 here */            memcpy (defaultPriorityTable,                (const void *) ixEthIEEE802_1QUserPriorityToTrafficClassMapping[portInfo->ixEthDBTrafficClassCount - 1],                sizeof (defaultPriorityTable));            /* update priority mapping and AQM queue assignments */            status = ixEthDBPriorityMappingTableSet(portID, defaultPriorityTable);            if (status == IX_ETH_DB_SUCCESS)            {                status = ixEthDBAcceptableFrameTypeSet(portID, IX_ETH_DB_ACCEPT_ALL_FRAMES);            }            if (status == IX_ETH_DB_SUCCESS)            {                status = ixEthDBIngressVlanTaggingEnabledSet(portID, IX_ETH_DB_PASS_THROUGH);            }            /* set membership and TTI tables */            memset (vlanSet, 0xFF, sizeof (vlanSet));            if (status == IX_ETH_DB_SUCCESS)            {                /* use the internal function to bypass PVID check */                status = ixEthDBPortVlanTableSet(portID, portInfo->vlanMembership, vlanSet);            }            if (status == IX_ETH_DB_SUCCESS)            {                /* use the internal function to bypass PVID check */                status = ixEthDBPortVlanTableSet(portID, portInfo->transmitTaggingInfo, vlanSet);            }            /* reset the PVID */            if (status == IX_ETH_DB_SUCCESS)            {                status = ixEthDBPortVlanTagSet(portID, 0);            }            /* enable TPID port extraction */            if (status == IX_ETH_DB_SUCCESS)            {                status = ixEthDBVlanPortExtractionEnable(portID, TRUE);            }        }        else if (feature == IX_ETH_DB_FIREWALL)#endif        {            /* firewall starts in black-list mode unless otherwise configured before *             * note that invalid source MAC address filtering is disabled by default */            if (portInfo->firewallMode != IX_ETH_DB_FIREWALL_BLACK_LIST                && portInfo->firewallMode != IX_ETH_DB_FIREWALL_WHITE_LIST)            {                status = ixEthDBFirewallModeSet(portID, IX_ETH_DB_FIREWALL_BLACK_LIST);                if (status == IX_ETH_DB_SUCCESS)                {                    status = ixEthDBFirewallInvalidAddressFilterEnable(portID, FALSE);                }            }        }        if (status != IX_ETH_DB_SUCCESS)        {            /* checks failed, disable */            portInfo->featureStatus &= ~feature;        }    }    else    {        /* turn off features */        if (feature == IX_ETH_DB_FIREWALL)        {            /* turning off the firewall is equivalent to:                - set to black-list mode                - clear all the entries and download the new table                - turn off the invalid source address checking            */            status = ixEthDBDatabaseClear(portID, IX_ETH_DB_FIREWALL_RECORD);            if (status == IX_ETH_DB_SUCCESS)            {                status = ixEthDBFirewallModeSet(portID, IX_ETH_DB_FIREWALL_BLACK_LIST);            }            if (status == IX_ETH_DB_SUCCESS)            {                status = ixEthDBFirewallInvalidAddressFilterEnable(portID, FALSE);            }            if (status == IX_ETH_DB_SUCCESS)            {                status = ixEthDBFirewallTableDownload(portID);            }        }        else if (feature == IX_ETH_DB_WIFI_HEADER_CONVERSION)        {            /* turn off header conversion */            status = ixEthDBDatabaseClear(portID, IX_ETH_DB_WIFI_RECORD);            if (status == IX_ETH_DB_SUCCESS)            {                status = ixEthDBWiFiConversionTableDownload(portID);            }        }#ifdef CONFIG_WITH_VLAN /* test-only: VLAN support not included to save space!!! */        else if (feature == IX_ETH_DB_VLAN_QOS)        {            /* turn off VLAN/QoS:                - set a priority mapping table with one traffic class                - set the acceptable frame filter to accept all                - set the Ingress tagging mode to pass-through                - clear the VLAN membership list                - clear the TTI table                - set the default 802.1Q tag to 0 (VLAN ID 0, Pri 0, CFI 0)                - disable TPID port extraction            */            /* initialize all => traffic class 0 priority mapping table */            memset (defaultPriorityTable, 0, sizeof (defaultPriorityTable));            portInfo->ixEthDBTrafficClassCount = 1;            status = ixEthDBPriorityMappingTableSet(portID, defaultPriorityTable);            if (status == IX_ETH_DB_SUCCESS)            {                status = ixEthDBAcceptableFrameTypeSet(portID, IX_ETH_DB_ACCEPT_ALL_FRAMES);            }            if (status == IX_ETH_DB_SUCCESS)            {                status = ixEthDBIngressVlanTaggingEnabledSet(portID, IX_ETH_DB_PASS_THROUGH);            }            /* clear membership and TTI tables */            memset (vlanSet, 0, sizeof (vlanSet));            if (status == IX_ETH_DB_SUCCESS)            {                /* use the internal function to bypass PVID check */                status = ixEthDBPortVlanTableSet(portID, portInfo->vlanMembership, vlanSet);            }            if (status == IX_ETH_DB_SUCCESS)            {                /* use the internal function to bypass PVID check */                status = ixEthDBPortVlanTableSet(portID, portInfo->transmitTaggingInfo, vlanSet);            }            /* reset the PVID */            if (status == IX_ETH_DB_SUCCESS)            {                status = ixEthDBPortVlanTagSet(portID, 0);            }            /* disable TPID port extraction */            if (status == IX_ETH_DB_SUCCESS)            {                status = ixEthDBVlanPortExtractionEnable(portID, FALSE);            }        }#endif        if (status == IX_ETH_DB_SUCCESS)        {            /* checks passed, disable */            portInfo->featureStatus &= ~feature;        }    }    /* restore port enabled state */    portInfo->enabled = portEnabled;    return status;}/** * @brief returns the status of a feature * * @param portID port ID * @param present location to store a boolean value indicating * if the feature is present (TRUE) or not (FALSE) * @param enabled location to store a booleam value indicating * if the feature is present (TRUE) or not (FALSE) * * Note that this function is documented in the main component * header file, IxEthDB.h. * * @return IX_ETH_DB_SUCCESS if the operation completed * successfully or an appropriate error message otherwise */IX_ETH_DB_PUBLICIxEthDBStatus ixEthDBFeatureStatusGet(IxEthDBPortId portID, IxEthDBFeature feature, BOOL *present, BOOL *enabled){    PortInfo *portInfo;    IX_ETH_DB_CHECK_PORT(portID);    IX_ETH_DB_CHECK_REFERENCE(present);    IX_ETH_DB_CHECK_REFERENCE(enabled);    portInfo = &ixEthDBPortInfo[portID];    *present = (portInfo->featureCapability & feature) != 0;    *enabled = (portInfo->featureStatus & feature) != 0;    return IX_ETH_DB_SUCCESS;}/** * @brief returns the value of an EthDB property * * @param portID ID of the port * @param feature feature owning the property * @param property ID of the property * @param type location to store the property type into * @param value location to store the property value into * * Note that this function is documented in the main component * header file, IxEthDB.h. * * @return IX_ETH_DB_SUCCESS if the operation completed * successfully or an appropriate error message otherwise */IX_ETH_DB_PUBLICIxEthDBStatus ixEthDBFeaturePropertyGet(IxEthDBPortId portID, IxEthDBFeature feature, IxEthDBProperty property, IxEthDBPropertyType *type, void *value){    IX_ETH_DB_CHECK_PORT_EXISTS(portID);    IX_ETH_DB_CHECK_REFERENCE(type);    IX_ETH_DB_CHECK_REFERENCE(value);    if (feature == IX_ETH_DB_VLAN_QOS)    {        if (property == IX_ETH_DB_QOS_TRAFFIC_CLASS_COUNT_PROPERTY)        {            * (UINT32 *) value = ixEthDBPortInfo[portID].ixEthDBTrafficClassCount;            *type              = IX_ETH_DB_INTEGER_PROPERTY;            return IX_ETH_DB_SUCCESS;        }        else if (property >= IX_ETH_DB_QOS_TRAFFIC_CLASS_0_RX_QUEUE_PROPERTY            && property <= IX_ETH_DB_QOS_TRAFFIC_CLASS_7_RX_QUEUE_PROPERTY)        {            UINT32 classDelta = property - IX_ETH_DB_QOS_TRAFFIC_CLASS_0_RX_QUEUE_PROPERTY;            if (classDelta >= ixEthDBPortInfo[portID].ixEthDBTrafficClassCount)            {                return IX_ETH_DB_FAIL;            }            * (UINT32 *) value = ixEthDBPortInfo[portID].ixEthDBTrafficClassAQMAssignments[classDelta];            *type              = IX_ETH_DB_INTEGER_PROPERTY;            return IX_ETH_DB_SUCCESS;        }    }    return IX_ETH_DB_INVALID_ARG;}/** * @brief sets the value of an EthDB property * * @param portID ID of the port * @param feature feature owning the property * @param property ID of the property * @param value location containing the property value * * This function implements a private property intended * only for EthAcc usage. Upon setting the IX_ETH_DB_QOS_QUEUE_CONFIGURATION_COMPLETE * property (the value is ignored), the availability of traffic classes is * frozen to whatever traffic class structure is currently in use. * This means that if VLAN_QOS has been enabled before EthAcc * initialization then all the defined traffic classes will be available; * otherwise only one traffic class (0) will be available. * * Note that this function is documented in the main component * header file, IxEthDB.h as not accepting any parameters. The * current implementation is only intended for the private use of EthAcc. * * Also note that once this function is called the effect is irreversible, * unless EthDB is complete unloaded and re-initialized. * * @return IX_ETH_DB_INVALID_ARG (no read-write properties are * supported in this release) */IX_ETH_DB_PUBLICIxEthDBStatus ixEthDBFeaturePropertySet(IxEthDBPortId portID, IxEthDBFeature feature, IxEthDBProperty property, void *value){    IX_ETH_DB_CHECK_PORT_EXISTS(portID);    if ((feature == IX_ETH_DB_VLAN_QOS) && (property == IX_ETH_DB_QOS_QUEUE_CONFIGURATION_COMPLETE))    {        ixEthDBPortInfo[portID].ixEthDBTrafficClassAvailable = ixEthDBPortInfo[portID].ixEthDBTrafficClassCount;        return IX_ETH_DB_SUCCESS;    }    return IX_ETH_DB_INVALID_ARG;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -