/* Copyright (c) 2011-2012 Freescale Semiconductor, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of Freescale Semiconductor nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
*
* ALTERNATIVELY, this software may be distributed under the terms of the
* GNU General Public License ("GPL") as published by the Free Software
* Foundation, either version 2 of that License or (at your option) any
* later version.
*
* THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <fra_cfg_parser.h>
#include <usdpaa/fman.h>
#include <libxml/parser.h>
#define FRA_CFG_FILE_ROOT_NODE ("fra_cfg")
#define FRA_DEFCFG_NODE ("defcfg")
#define FRA_DEFCFG_FILE ("file")
#define RMAN_CFG_NODE ("rman_cfg")
#define RMAN_CFG_TYPE ("type")
#define RMAN_CFG_VALUE ("value")
#define RMAN_CFG_INDEX ("index")
#define RMAN_FQ_BITS_NODE ("fqbits")
#define MD_CREATE_NODE ("md_create")
#define MD_CREATE_MODE ("mode")
#define RMAN_OSID_NODE ("osid")
#define BPID_NODE ("bpid")
#define SG_BPID_NODE ("sgbpid")
#define RMAN_EFQ_NODE ("efq")
#define NETWORK_CFG_NODE ("network_cfg")
#define FMAN_PORT_NODE ("port")
#define FMAN_PORT_NAME ("name")
#define FMAN_PORT_TYPE ("type")
#define FMAN_PORT_NUM ("number")
#define FMAN_NUM ("fm")
#define TRANS_CFG_NODE ("trans_cfg")
#define TRAN_NODE ("transaction")
#define TRAN_NAME ("name")
#define TRAN_TYPE ("type")
#define TRAN_COMMON_VALUE ("value")
#define TRAN_COMMON_MASK ("mask")
#define TRAN_FLOWLVL_NODE ("flowlvl")
#define TRAN_MBOX_NODE ("mbox")
#define TRAN_LTR_NODE ("ltr")
#define TRAN_MSGLEN_NODE ("msglen")
#define TRAN_COS_NODE ("cos")
#define TRAN_STREAMID_NODE ("streamid")
#define DISTS_CFG_NODE ("dists_cfg")
#define DIST_NODE ("distribution")
#define DIST_NAME ("name")
#define DIST_TYPE ("type")
#define DISTREF_NODE ("distributionref")
#define DIST_RIO_PORT_NODE ("rio_port")
#define DIST_RIO_PORT_MASK ("mask")
#define DIST_PORT_NUMBER ("number")
#define DIST_SID_NODE ("sid")
#define DIST_SID_VALUE ("value")
#define DIST_SID_MASK ("mask")
#define DIST_DID_NODE ("did")
#define DIST_DID_VALUE ("value")
#define DIST_FQ_NODE ("queue")
#define DIST_FQ_ID ("base")
#define DIST_FQ_MODE ("mode")
#define DIST_FQ_COUNT ("count")
#define DIST_FQ_WQ ("wq")
#define DIST_TRANREF_NODE ("transactionref")
#define DIST_TRANREF_NAME ("name")
#define DIST_FMAN_PORT_NODE ("fman_port")
#define POLICIES_CFG_NODE ("policies_cfg")
#define POLICY_NODE ("policy")
#define POLICY_NAME ("name")
#define POLICY_ENABLE ("enable")
#define POLICY_DISTORDER_NODE ("dist_order")
#define POLICY_DISTREF_NODE ("distributionref")
#define POLICY_DISTREF_NAME ("name")
const char *RIO_TYPE_TO_STR[] = {
[RIO_TYPE0] = "Implementation-defined",
[RIO_TYPE1] = "reserved",
[RIO_TYPE2] = "NREAD",
[RIO_TYPE3] = "reserved",
[RIO_TYPE4] = "reserved",
[RIO_TYPE5] = "NWrite",
[RIO_TYPE6] = "SWrite",
[RIO_TYPE7] = "reserved",
[RIO_TYPE8] = "Port-Write",
[RIO_TYPE9] = "Data-streaming",
[RIO_TYPE10] = "Doorbell",
[RIO_TYPE11] = "Mailbox"
};
const char *DIST_TYPE_STR[] = {
[DIST_TYPE_UNKNOWN] = "UNKNOWN",
[DIST_TYPE_RMAN_RX] = "RMAN_RX",
[DIST_TYPE_RMAN_TX] = "RMAN_TX",
[DIST_TYPE_FMAN_RX] = "FMAN_RX",
[DIST_TYPE_FMAN_TX] = "FMAN_TX",
[DIST_TYPE_FMAN_TO_RMAN] = "FMAN_TO_RMAN",
[DIST_TYPE_RMAN_TO_FMAN] = "RMAN_TO_FMAN"
};
const char *FQ_MODE_STR[] = {"direct", "algorithmic"};
const char *MD_CREATE_MODE_STR[] = {"yes", "no"};
static struct fra_cfg *fracfg;
xmlNodePtr fra_cfg_root_node;
#define for_all_sibling_nodes(node) \
for (; unlikely(node != NULL); node = node->next)
static void fra_cfg_parse_error(void *ctx, xmlErrorPtr xep)
{
error(0, 0, "%s:%hu:%s() fra_cfg_parse_error(context(%p),"
"error pointer %p", __FILE__, __LINE__, __func__,
ctx, xep);
}
static inline int is_node(xmlNodePtr node, xmlChar *name)
{
return xmlStrcmp(node->name, name) ? 0 : 1;
}
static void *get_attributes(xmlNodePtr node, xmlChar *attr)
{
char *atr = (char *)xmlGetProp(node, attr);
if (unlikely(atr == NULL))
error(0, 0, "%s:%hu:%s() error: "
"(Node(%s)->Attribute (%s) not found",
__FILE__, __LINE__, __func__,
node->name, attr);
return atr;
}
static enum dist_type dist_type_str_to_idx(const char *type)
{
int idx;
for (idx = 0; idx < ARRAY_SIZE(DIST_TYPE_STR); idx++) {
if (!strcmp(type, DIST_TYPE_STR[idx]))
return idx;
}
return DIST_TYPE_UNKNOWN;
}
static enum RIO_TYPE rio_type_str_to_idx(const char *type)
{
int idx;
for (idx = 0; idx < ARRAY_SIZE(RIO_TYPE_TO_STR); idx++) {
if (!strcmp(type, RIO_TYPE_TO_STR[idx]))
return idx;
}
return RIO_TYPE0;
}
static void strip_blanks(char *str)
{
int i, j;
int len = strlen(str);
for (i = 0; (i < len) && (str[i] == ' '); i++)
;
for (j = 0; (i < len) && (str[i] != ' '); ++i, j++)
str[j] = str[i];
str[j] = '\0';
}
#define tran_parse_element(node, value, mask) \
do { \
char *ptr; \
ptr = get_attributes(node, BAD_CAST TRAN_COMMON_VALUE); \
if (unlikely(ptr == NULL)) \
return -EINVAL; \
value = strtoul(ptr, NULL, 0); \
ptr = get_attributes(node, BAD_CAST TRAN_COMMON_MASK); \
if (unlikely(ptr == NULL)) \
return -EINVAL; \
mask = strtoul(ptr, NULL, 0); \
} while (0)
#define search_member(member, nm, list) \
do { \
typeof(member) tmp; \
member = NULL; \
if (!nm) \
break; \
list_for_each_entry(tmp, list, node) { \
if (!strncmp(tmp->name, nm, sizeof(tmp->name))) { \
member = tmp; \
break; \
} \
} \
} while (0)
static int parse_defcfg_file(char *cfg_file, struct list_head *list,
int (*parse_node)(xmlNodePtr node, struct list_head *list))
{
xmlErrorPtr xep;
xmlDocPtr doc;
xmlNodePtr cur;
if (!cfg_file || !list || !parse_node)
return -EINVAL;
xmlInitParser();
LIBXML_TEST_VERSION;
xmlSetStructuredErrorFunc(&xep, fra_cfg_parse_error);
xmlKeepBlanksDefault(0);
doc = xmlParseFile(cfg_file);
if (unlikely(doc == NULL)) {
error(0, 0, "%s:%hu:%s() xmlParseFile(%s)",
__FILE__, __LINE__, __func__, cfg_file);
return -EINVAL;
}
cur = xmlDocGetRootElement(doc);
if (unlikely(cur == NULL)) {
error(0, 0, "%s:%hu:%s() xml file(%s) empty",
__FILE__, __LINE__, __func__, cfg_file);
goto _err;
}
parse_node(cur, list);
xmlFreeDoc(doc);
return 0;
_err:
xmlFreeDoc(doc);
return -EINVAL;
}
static int parse_tran(xmlNodePtr tran_node, struct list_head *list)
{
char *name;
char *type;
xmlNodePtr tranp;
struct rio_tran *tran;
if (!tran_node)
return -EINVAL;
name = get_attributes(tran_node, BAD_CAST TRAN_NAME);
search_member(tran, name, list);
if (!tran)
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
T2080 SRIO DOORBELL例程 (260个子文件)
libxml2.a 9.72MB
libreadline.a 1.39MB
libzlog.a 698KB
libhistory.a 200KB
libusdpaa_qbman.a 184KB
libusdpaa_dpa_offload.a 89KB
libusdpaa_sec.a 77KB
libusdpaa_helper.a 72KB
libusdpaa_fman.a 48KB
libapp_ipsecfwd_ipsec.a 44KB
libusdpaa_ppac.a 44KB
libfslcrypto.a 42KB
libapp_lpm_ip.a 37KB
libusdpaa_hx504.a 34KB
libusdpaa_syscfg.a 33KB
libusdpaa_pme.a 33KB
libapp_ipsecfwd_ip.a 32KB
libtermcap.a 31KB
libfra_cfg_parser.a 30KB
libusdpaa_of.a 27KB
libusdpaa_srams.a 26KB
librman_interface.a 25KB
libapp_rc_ip.a 25KB
libusdpaa_srio.a 18KB
libusdpaa_dma_mem.a 14KB
libusdpaa_rman.a 14KB
libapp_ipsecfwd_net.a 13KB
libapp_rc_net.a 13KB
libfra_fman_port.a 12KB
libusdpaa_rmu.a 11KB
libusdpaa_process.a 11KB
libapp_lpm_net.a 10KB
libfra_fq_interface.a 9KB
libfvl_srio.a 9KB
libusdpaa_dma.a 7KB
libtestdso.a 6KB
testdso.a 6KB
libhash_table.a 6KB
libapp_ipsecfwd_mm.a 4KB
libapp_lpm_mm.a 4KB
libapp_rc_mm.a 4KB
libfra_bpool.a 4KB
libapps_ipsecfwd_arp.a 4KB
libapp_rc_arp.a 4KB
libapp_lpm_arp.a 4KB
libfifo_queue.a 4KB
libfra_utils.a 2KB
libapp_lpm_ethernet.a 2KB
libapp_ipsecfwd_ethernet.a 2KB
libapp_rc_ethernet.a 2KB
libapp_refcount.a 2KB
libapp_ipsecfwd_refcount.a 2KB
Makefile.am 2KB
Makefile.am 2KB
Makefile.am 2KB
Makefile.am 2KB
Makefile.am 2KB
Makefile.am 2KB
Makefile.am 2KB
Makefile.am 2KB
Makefile.am 2KB
Makefile.am 2KB
Makefile.am 848B
Makefile.am 116B
fra_cfg_parser.c 33KB
fra.c 26KB
main.c 25KB
rman_interface.c 21KB
ppac.c 17KB
fra_fq_interface.c 12KB
pp.c 11KB
fra_fman_port.c 10KB
test_speed.c 6KB
fra_bpool.c 5KB
test_port_write.c 4KB
fra_debug.c 2KB
fra_bpool.d 12KB
fra_cfg_parser_fra_cfg_parser.d 10KB
fra_main.d 8KB
fra_test_port_write.d 7KB
fra_test_speed.d 7KB
fra_fra.d 7KB
fra_fman_port_fra_fman_port.d 5KB
rman_interface_rman_interface.d 5KB
fra_fq_interface_fra_fq_interface.d 4KB
fra_utils_fra_debug.d 2KB
fra 5.64MB
libxml2-2.7.8.tar.gz 4.66MB
readline-5.2.tar.gz 1.94MB
termcap-1.3.1.tar.gz 429KB
fsl_qman.h 120KB
fsl_dpa_classifier.h 45KB
parser.h 39KB
readline.h 37KB
xmlerror.h 36KB
tree.h 36KB
fsl_pme.h 29KB
fsl_dpa_stats.h 27KB
schemasInternals.h 25KB
fsl_dpa_ipsec.h 23KB
共 260 条
- 1
- 2
- 3
资源评论
- ninjacat032018-10-31代码结构很清晰,移植到别的地方用了
SSDF_ZQ
- 粉丝: 203
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功