1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Copyright 2015 Freescale Semiconductor, Inc. 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * Ethernet Switch commands 7*4882a593Smuzhiyun */ 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #ifndef _CMD_ETHSW_H_ 10*4882a593Smuzhiyun #define _CMD_ETHSW_H_ 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #define ETHSW_MAX_CMD_PARAMS 20 13*4882a593Smuzhiyun #define ETHSW_CMD_PORT_ALL -1 14*4882a593Smuzhiyun #define ETHSW_CMD_VLAN_ALL -1 15*4882a593Smuzhiyun #define ETHSW_CMD_AGGR_GRP_NONE -1 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun /* IDs used to track keywords in a command */ 18*4882a593Smuzhiyun enum ethsw_keyword_id { 19*4882a593Smuzhiyun ethsw_id_key_end = -1, 20*4882a593Smuzhiyun ethsw_id_help, 21*4882a593Smuzhiyun ethsw_id_show, 22*4882a593Smuzhiyun ethsw_id_port, 23*4882a593Smuzhiyun ethsw_id_enable, 24*4882a593Smuzhiyun ethsw_id_disable, 25*4882a593Smuzhiyun ethsw_id_statistics, 26*4882a593Smuzhiyun ethsw_id_clear, 27*4882a593Smuzhiyun ethsw_id_learning, 28*4882a593Smuzhiyun ethsw_id_auto, 29*4882a593Smuzhiyun ethsw_id_vlan, 30*4882a593Smuzhiyun ethsw_id_fdb, 31*4882a593Smuzhiyun ethsw_id_add, 32*4882a593Smuzhiyun ethsw_id_del, 33*4882a593Smuzhiyun ethsw_id_flush, 34*4882a593Smuzhiyun ethsw_id_pvid, 35*4882a593Smuzhiyun ethsw_id_untagged, 36*4882a593Smuzhiyun ethsw_id_all, 37*4882a593Smuzhiyun ethsw_id_none, 38*4882a593Smuzhiyun ethsw_id_egress, 39*4882a593Smuzhiyun ethsw_id_tag, 40*4882a593Smuzhiyun ethsw_id_classified, 41*4882a593Smuzhiyun ethsw_id_shared, 42*4882a593Smuzhiyun ethsw_id_private, 43*4882a593Smuzhiyun ethsw_id_ingress, 44*4882a593Smuzhiyun ethsw_id_filtering, 45*4882a593Smuzhiyun ethsw_id_aggr, 46*4882a593Smuzhiyun ethsw_id_count, /* keep last */ 47*4882a593Smuzhiyun }; 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun enum ethsw_keyword_opt_id { 50*4882a593Smuzhiyun ethsw_id_port_no = ethsw_id_count + 1, 51*4882a593Smuzhiyun ethsw_id_vlan_no, 52*4882a593Smuzhiyun ethsw_id_pvid_no, 53*4882a593Smuzhiyun ethsw_id_add_del_no, 54*4882a593Smuzhiyun ethsw_id_add_del_mac, 55*4882a593Smuzhiyun ethsw_id_aggr_no, 56*4882a593Smuzhiyun ethsw_id_count_all, /* keep last */ 57*4882a593Smuzhiyun }; 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun struct ethsw_command_def { 60*4882a593Smuzhiyun int cmd_to_keywords[ETHSW_MAX_CMD_PARAMS]; 61*4882a593Smuzhiyun int cmd_keywords_nr; 62*4882a593Smuzhiyun int port; 63*4882a593Smuzhiyun int vid; 64*4882a593Smuzhiyun int aggr_grp; 65*4882a593Smuzhiyun uchar ethaddr[6]; 66*4882a593Smuzhiyun int (*cmd_function)(struct ethsw_command_def *parsed_cmd); 67*4882a593Smuzhiyun }; 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun /* Structure to be created and initialized by an Ethernet Switch driver */ 70*4882a593Smuzhiyun struct ethsw_command_func { 71*4882a593Smuzhiyun const char *ethsw_name; 72*4882a593Smuzhiyun int (*port_enable)(struct ethsw_command_def *parsed_cmd); 73*4882a593Smuzhiyun int (*port_disable)(struct ethsw_command_def *parsed_cmd); 74*4882a593Smuzhiyun int (*port_show)(struct ethsw_command_def *parsed_cmd); 75*4882a593Smuzhiyun int (*port_stats)(struct ethsw_command_def *parsed_cmd); 76*4882a593Smuzhiyun int (*port_stats_clear)(struct ethsw_command_def *parsed_cmd); 77*4882a593Smuzhiyun int (*port_learn)(struct ethsw_command_def *parsed_cmd); 78*4882a593Smuzhiyun int (*port_learn_show)(struct ethsw_command_def *parsed_cmd); 79*4882a593Smuzhiyun int (*fdb_show)(struct ethsw_command_def *parsed_cmd); 80*4882a593Smuzhiyun int (*fdb_flush)(struct ethsw_command_def *parsed_cmd); 81*4882a593Smuzhiyun int (*fdb_entry_add)(struct ethsw_command_def *parsed_cmd); 82*4882a593Smuzhiyun int (*fdb_entry_del)(struct ethsw_command_def *parsed_cmd); 83*4882a593Smuzhiyun int (*pvid_show)(struct ethsw_command_def *parsed_cmd); 84*4882a593Smuzhiyun int (*pvid_set)(struct ethsw_command_def *parsed_cmd); 85*4882a593Smuzhiyun int (*vlan_show)(struct ethsw_command_def *parsed_cmd); 86*4882a593Smuzhiyun int (*vlan_set)(struct ethsw_command_def *parsed_cmd); 87*4882a593Smuzhiyun int (*port_untag_show)(struct ethsw_command_def *parsed_cmd); 88*4882a593Smuzhiyun int (*port_untag_set)(struct ethsw_command_def *parsed_cmd); 89*4882a593Smuzhiyun int (*port_egr_vlan_show)(struct ethsw_command_def *parsed_cmd); 90*4882a593Smuzhiyun int (*port_egr_vlan_set)(struct ethsw_command_def *parsed_cmd); 91*4882a593Smuzhiyun int (*vlan_learn_show)(struct ethsw_command_def *parsed_cmd); 92*4882a593Smuzhiyun int (*vlan_learn_set)(struct ethsw_command_def *parsed_cmd); 93*4882a593Smuzhiyun int (*port_ingr_filt_show)(struct ethsw_command_def *parsed_cmd); 94*4882a593Smuzhiyun int (*port_ingr_filt_set)(struct ethsw_command_def *parsed_cmd); 95*4882a593Smuzhiyun int (*port_aggr_show)(struct ethsw_command_def *parsed_cmd); 96*4882a593Smuzhiyun int (*port_aggr_set)(struct ethsw_command_def *parsed_cmd); 97*4882a593Smuzhiyun }; 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun int ethsw_define_functions(const struct ethsw_command_func *cmd_func); 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun #endif /* _CMD_ETHSW_H_ */ 102