X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=target%2Flinux%2Fgeneric%2Ffiles%2Finclude%2Flinux%2Fswitch.h;h=4ada0e5d33a0f4ecd524aa4000c75148b40871bc;hb=bb12f1e42bb186bc4dbacc115059cb401ab05298;hp=ba1de9b18b5d3aafe1db0facab0f98f4a67dc8f5;hpb=19a364516241a4483f06c5f565322ec761a654ed;p=openwrt%2Fsvn-archive%2Farchive.git diff --git a/target/linux/generic/files/include/linux/switch.h b/target/linux/generic/files/include/linux/switch.h index ba1de9b18b..4ada0e5d33 100644 --- a/target/linux/generic/files/include/linux/switch.h +++ b/target/linux/generic/files/include/linux/switch.h @@ -13,86 +13,11 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ +#ifndef _LINUX_SWITCH_H +#define _LINUX_SWITCH_H -#ifndef __LINUX_SWITCH_H -#define __LINUX_SWITCH_H - -#include -#include -#include -#include -#ifndef __KERNEL__ -#include -#include -#include -#else #include -#endif - -/* main attributes */ -enum { - SWITCH_ATTR_UNSPEC, - /* global */ - SWITCH_ATTR_TYPE, - /* device */ - SWITCH_ATTR_ID, - SWITCH_ATTR_DEV_NAME, - SWITCH_ATTR_ALIAS, - SWITCH_ATTR_NAME, - SWITCH_ATTR_VLANS, - SWITCH_ATTR_PORTS, - SWITCH_ATTR_CPU_PORT, - /* attributes */ - SWITCH_ATTR_OP_ID, - SWITCH_ATTR_OP_TYPE, - SWITCH_ATTR_OP_NAME, - SWITCH_ATTR_OP_PORT, - SWITCH_ATTR_OP_VLAN, - SWITCH_ATTR_OP_VALUE_INT, - SWITCH_ATTR_OP_VALUE_STR, - SWITCH_ATTR_OP_VALUE_PORTS, - SWITCH_ATTR_OP_DESCRIPTION, - /* port lists */ - SWITCH_ATTR_PORT, - SWITCH_ATTR_MAX -}; - -/* commands */ -enum { - SWITCH_CMD_UNSPEC, - SWITCH_CMD_GET_SWITCH, - SWITCH_CMD_NEW_ATTR, - SWITCH_CMD_LIST_GLOBAL, - SWITCH_CMD_GET_GLOBAL, - SWITCH_CMD_SET_GLOBAL, - SWITCH_CMD_LIST_PORT, - SWITCH_CMD_GET_PORT, - SWITCH_CMD_SET_PORT, - SWITCH_CMD_LIST_VLAN, - SWITCH_CMD_GET_VLAN, - SWITCH_CMD_SET_VLAN -}; - -/* data types */ -enum switch_val_type { - SWITCH_TYPE_UNSPEC, - SWITCH_TYPE_INT, - SWITCH_TYPE_STRING, - SWITCH_TYPE_PORTS, - SWITCH_TYPE_NOVAL, -}; - -/* port nested attributes */ -enum { - SWITCH_PORT_UNSPEC, - SWITCH_PORT_ID, - SWITCH_PORT_FLAG_TAGGED, - SWITCH_PORT_ATTR_MAX -}; - -#define SWITCH_ATTR_DEFAULTS_OFFSET 0x1000 - -#ifdef __KERNEL__ +#include struct switch_dev; struct switch_op; @@ -129,6 +54,8 @@ struct switch_port_link { bool tx_flow; bool rx_flow; enum switch_port_speed speed; + /* in ethtool adv_t format */ + u32 eee; }; struct switch_port_stats { @@ -168,11 +95,14 @@ struct switch_dev_ops { int (*get_port_link)(struct switch_dev *dev, int port, struct switch_port_link *link); + int (*set_port_link)(struct switch_dev *dev, int port, + struct switch_port_link *link); int (*get_port_stats)(struct switch_dev *dev, int port, struct switch_port_stats *stats); }; struct switch_dev { + struct device_node *of_node; const struct switch_dev_ops *ops; /* will be automatically filled */ char devname[IFNAMSIZ]; @@ -191,8 +121,12 @@ struct switch_dev { struct list_head dev_list; unsigned long def_global, def_port, def_vlan; - spinlock_t lock; + struct mutex sw_mutex; struct switch_port *portbuf; + struct switch_portmap *portmap; + struct switch_port_link linkbuf; + + char buf[128]; #ifdef CONFIG_SWCONFIG_LEDS struct switch_led_trigger *led_trigger; @@ -204,6 +138,11 @@ struct switch_port { u32 flags; }; +struct switch_portmap { + u32 virt; + const char *s; +}; + struct switch_val { const struct switch_attr *attr; int port_vlan; @@ -212,6 +151,7 @@ struct switch_val { const char *s; u32 i; struct switch_port *ports; + struct switch_port_link *link; } value; }; @@ -230,6 +170,4 @@ struct switch_attr { int max; }; -#endif - -#endif +#endif /* _LINUX_SWITCH_H */