/*
*	Copyright. All rights is diminished
*
*	$Author: August 2011-10-20
*
*
*	Ethtool for adsl-switch-0412
*/
#ifndef _RTL_AUG_H
#define _RTL_AUG_H

#include <linux/version.h>
#include <linux/stddef.h>
#include <linux/module.h>
#include <linux/types.h>
#include <asm/byteorder.h>
#include <linux/init.h>
#include <linux/mm.h>
#include <linux/errno.h>
#include <linux/ioport.h>
#include <linux/pci.h>
#include <linux/kernel.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/skbuff.h>
#include <linux/delay.h>
#include <linux/timer.h>
#include <linux/slab.h>
#include <linux/vmalloc.h>
#include <linux/interrupt.h>
#include <linux/string.h>
#include <linux/pagemap.h>
#include <linux/dma-mapping.h>
#include <linux/bitops.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <linux/capability.h>
#include <linux/in.h>
#include <linux/ip.h>
#include <linux/ipv6.h>
#include <linux/tcp.h>
#include <linux/udp.h>
#include <net/pkt_sched.h>
#include <linux/list.h>
#include <linux/reboot.h>
#include <net/checksum.h>
#include <linux/mii.h>
#include <linux/ethtool.h>
#include <linux/if_vlan.h>

#include <bspchip.h>

#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)
#include <linux/kconfig.h>
#else
#include <linux/config.h>
#endif
#include <linux/module.h>
#include <linux/netlink.h>
#include <linux/sched.h>
#include <net/sock.h>

#include <net/rtl/rtl_nic.h>

#include "version.h"
#include <net/rtl/rtl_types.h>
#include <net/rtl/rtl_glue.h>

#include "AsicDriver/asicRegs.h"
#include "AsicDriver/rtl865x_asicCom.h"
#include "AsicDriver/rtl865x_asicL2.h"
#ifdef CONFIG_RTL_LAYERED_ASIC_DRIVER_L3
#include "AsicDriver/rtl865x_asicL3.h"
#endif

#include "common/mbuf.h"
#include <net/rtl/rtl_queue.h>
#include "common/rtl_errno.h"
#include "rtl865xc_swNic.h"

/*common*/
#include "common/rtl865x_vlan.h"
#include <net/rtl/rtl865x_netif.h>
#include "common/rtl865x_netif_local.h"

/*l2*/
#ifdef CONFIG_RTL_LAYERED_DRIVER_L2
#include "l2Driver/rtl865x_fdb.h"
#endif

/*l3*/
#ifdef CONFIG_RTL_LAYERED_DRIVER_L3
#include "l3Driver/rtl865x_ip.h"
#include "l3Driver/rtl865x_nexthop.h"
#include <net/rtl/rtl865x_ppp.h>
#include "l3Driver/rtl865x_ppp_local.h"
#include "l3Driver/rtl865x_route.h"
#include "l3Driver/rtl865x_arp.h"
#include <net/rtl/rtl865x_nat.h>
#endif


#ifdef CONFIG_RTL_MULTI_LAN_DEV

static __inline__  int ethtool_get_port_by_dev(struct net_device *dev)
{
	unsigned int j;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)
	struct dev_priv	 *dp = (struct dev_priv *)netdev_priv(dev);
#else
	struct dev_priv	 *dp = (struct dev_priv *)dev->priv;
#endif
	for(j = 0; j < RTL8651_PORT_NUMBER; ++j) 
	{ 
		if(dp->portmask & (1 << j)) 
			return j; 
	}

	return -1;
}







void rtl_set_ethtool_ops(struct net_device *netdev);

#endif



#ifdef CONFIG_RTL_NLMSG_PROTOCOL
extern struct sock *global_rtlmsg_sock;

extern int 	rtl_gbl_rtlmsg_sock_init(void);

extern void rtl_nlmsg_handler(struct sk_buff *skb);

extern int 	rtl_nl_send_lkchg_msg(const unsigned int old_ptmks, 
											const unsigned int new_ptmks);

#endif



#endif