summaryrefslogtreecommitdiff
path: root/include/ethsw.h
diff options
context:
space:
mode:
authorCodrin Ciubotariu <codrin.ciubotariu@freescale.com>2015-07-24 16:55:27 +0300
committerYork Sun <yorksun@freescale.com>2015-09-21 08:29:47 -0700
commit4ea54e3f2394cfca9ffaa14c181d2ae8a11677a8 (patch)
tree3724a951d66ebb94314b467a46ea5c64c6b459cc /include/ethsw.h
parent9de059871f8364dd898faf0b6057b8fa69fa2728 (diff)
downloadu-boot-imx-4ea54e3f2394cfca9ffaa14c181d2ae8a11677a8.zip
u-boot-imx-4ea54e3f2394cfca9ffaa14c181d2ae8a11677a8.tar.gz
u-boot-imx-4ea54e3f2394cfca9ffaa14c181d2ae8a11677a8.tar.bz2
common/cmd_ethsw: Add generic commands for Ethernet Switches
This patch creates a flexible parser for Ethernet Switch configurations that should support complex commands. The parser searches for predefined keywords in the command and calls the proper function when a match is found. Also, the parser allows for optional keywords, such as "port", to apply the command on a port or on all ports. For now, the defined commands are: ethsw [port <port_no>] { enable | disable | show } Signed-off-by: Codrin Ciubotariu <codrin.ciubotariu@freescale.com> Reviewed-by: York Sun <yorksun@freescale.com>
Diffstat (limited to 'include/ethsw.h')
-rw-r--r--include/ethsw.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/include/ethsw.h b/include/ethsw.h
new file mode 100644
index 0000000..9e80095
--- /dev/null
+++ b/include/ethsw.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2015 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ *
+ * Ethernet Switch commands
+ */
+
+#ifndef _CMD_ETHSW_H_
+#define _CMD_ETHSW_H_
+
+#define ETHSW_MAX_CMD_PARAMS 20
+#define ETHSW_CMD_PORT_ALL -1
+
+/* IDs used to track keywords in a command */
+enum ethsw_keyword_id {
+ ethsw_id_key_end = -1,
+ ethsw_id_help,
+ ethsw_id_show,
+ ethsw_id_port,
+ ethsw_id_enable,
+ ethsw_id_disable,
+ ethsw_id_count, /* keep last */
+};
+
+enum ethsw_keyword_opt_id {
+ ethsw_id_port_no = ethsw_id_count + 1,
+ ethsw_id_count_all, /* keep last */
+};
+
+struct ethsw_command_def {
+ int cmd_to_keywords[ETHSW_MAX_CMD_PARAMS];
+ int cmd_keywords_nr;
+ int port;
+ int (*cmd_function)(struct ethsw_command_def *parsed_cmd);
+};
+
+/* Structure to be created and initialized by an Ethernet Switch driver */
+struct ethsw_command_func {
+ const char *ethsw_name;
+ int (*port_enable)(struct ethsw_command_def *parsed_cmd);
+ int (*port_disable)(struct ethsw_command_def *parsed_cmd);
+ int (*port_show)(struct ethsw_command_def *parsed_cmd);
+};
+
+int ethsw_define_functions(const struct ethsw_command_func *cmd_func);
+
+#endif /* _CMD_ETHSW_H_ */