1*4882a593Smuzhiyun /* Copyright 2008-2015 Freescale Semiconductor, Inc. 2*4882a593Smuzhiyun * 3*4882a593Smuzhiyun * Redistribution and use in source and binary forms, with or without 4*4882a593Smuzhiyun * modification, are permitted provided that the following conditions are met: 5*4882a593Smuzhiyun * * Redistributions of source code must retain the above copyright 6*4882a593Smuzhiyun * notice, this list of conditions and the following disclaimer. 7*4882a593Smuzhiyun * * Redistributions in binary form must reproduce the above copyright 8*4882a593Smuzhiyun * notice, this list of conditions and the following disclaimer in the 9*4882a593Smuzhiyun * documentation and/or other materials provided with the distribution. 10*4882a593Smuzhiyun * * Neither the name of Freescale Semiconductor nor the 11*4882a593Smuzhiyun * names of its contributors may be used to endorse or promote products 12*4882a593Smuzhiyun * derived from this software without specific prior written permission. 13*4882a593Smuzhiyun * 14*4882a593Smuzhiyun * 15*4882a593Smuzhiyun * ALTERNATIVELY, this software may be distributed under the terms of the 16*4882a593Smuzhiyun * GNU General Public License ("GPL") as published by the Free Software 17*4882a593Smuzhiyun * Foundation, either version 2 of that License or (at your option) any 18*4882a593Smuzhiyun * later version. 19*4882a593Smuzhiyun * 20*4882a593Smuzhiyun * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY 21*4882a593Smuzhiyun * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 22*4882a593Smuzhiyun * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23*4882a593Smuzhiyun * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY 24*4882a593Smuzhiyun * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 25*4882a593Smuzhiyun * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 26*4882a593Smuzhiyun * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 27*4882a593Smuzhiyun * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28*4882a593Smuzhiyun * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 29*4882a593Smuzhiyun * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30*4882a593Smuzhiyun */ 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun #ifndef __MAC_H 33*4882a593Smuzhiyun #define __MAC_H 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun #include <linux/device.h> 36*4882a593Smuzhiyun #include <linux/if_ether.h> 37*4882a593Smuzhiyun #include <linux/phy.h> 38*4882a593Smuzhiyun #include <linux/list.h> 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun #include "fman_port.h" 41*4882a593Smuzhiyun #include "fman.h" 42*4882a593Smuzhiyun #include "fman_mac.h" 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun struct fman_mac; 45*4882a593Smuzhiyun struct mac_priv_s; 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun struct mac_device { 48*4882a593Smuzhiyun struct resource *res; 49*4882a593Smuzhiyun u8 addr[ETH_ALEN]; 50*4882a593Smuzhiyun struct fman_port *port[2]; 51*4882a593Smuzhiyun u32 if_support; 52*4882a593Smuzhiyun struct phy_device *phy_dev; 53*4882a593Smuzhiyun phy_interface_t phy_if; 54*4882a593Smuzhiyun struct device_node *phy_node; 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun bool autoneg_pause; 57*4882a593Smuzhiyun bool rx_pause_req; 58*4882a593Smuzhiyun bool tx_pause_req; 59*4882a593Smuzhiyun bool rx_pause_active; 60*4882a593Smuzhiyun bool tx_pause_active; 61*4882a593Smuzhiyun bool promisc; 62*4882a593Smuzhiyun bool allmulti; 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun int (*init)(struct mac_device *mac_dev); 65*4882a593Smuzhiyun int (*start)(struct mac_device *mac_dev); 66*4882a593Smuzhiyun int (*stop)(struct mac_device *mac_dev); 67*4882a593Smuzhiyun void (*adjust_link)(struct mac_device *mac_dev); 68*4882a593Smuzhiyun int (*set_promisc)(struct fman_mac *mac_dev, bool enable); 69*4882a593Smuzhiyun int (*change_addr)(struct fman_mac *mac_dev, enet_addr_t *enet_addr); 70*4882a593Smuzhiyun int (*set_allmulti)(struct fman_mac *mac_dev, bool enable); 71*4882a593Smuzhiyun int (*set_tstamp)(struct fman_mac *mac_dev, bool enable); 72*4882a593Smuzhiyun int (*set_multi)(struct net_device *net_dev, 73*4882a593Smuzhiyun struct mac_device *mac_dev); 74*4882a593Smuzhiyun int (*set_rx_pause)(struct fman_mac *mac_dev, bool en); 75*4882a593Smuzhiyun int (*set_tx_pause)(struct fman_mac *mac_dev, u8 priority, 76*4882a593Smuzhiyun u16 pause_time, u16 thresh_time); 77*4882a593Smuzhiyun int (*set_exception)(struct fman_mac *mac_dev, 78*4882a593Smuzhiyun enum fman_mac_exceptions exception, bool enable); 79*4882a593Smuzhiyun int (*add_hash_mac_addr)(struct fman_mac *mac_dev, 80*4882a593Smuzhiyun enet_addr_t *eth_addr); 81*4882a593Smuzhiyun int (*remove_hash_mac_addr)(struct fman_mac *mac_dev, 82*4882a593Smuzhiyun enet_addr_t *eth_addr); 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun struct fman_mac *fman_mac; 85*4882a593Smuzhiyun struct mac_priv_s *priv; 86*4882a593Smuzhiyun }; 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun struct dpaa_eth_data { 89*4882a593Smuzhiyun struct mac_device *mac_dev; 90*4882a593Smuzhiyun int mac_hw_id; 91*4882a593Smuzhiyun int fman_hw_id; 92*4882a593Smuzhiyun }; 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun extern const char *mac_driver_description; 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun int fman_set_mac_active_pause(struct mac_device *mac_dev, bool rx, bool tx); 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun void fman_get_pause_cfg(struct mac_device *mac_dev, bool *rx_pause, 99*4882a593Smuzhiyun bool *tx_pause); 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun #endif /* __MAC_H */ 102