/*
 * Copyright (c) 2012 GCT Semiconductor, Inc. All rights reserved.
 *
 * This software is licensed under the terms of the GNU General Public
 * License version 2, as published by the Free Software Foundation, and
 * may be copied, distributed, and modified under those terms.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 */

#if !defined(GDM_QOS_H_20090403)
#define GDM_QOS_H_20090403

#include <linux/types.h>
#include <linux/usb.h>
#include <linux/list.h>

#define BOOLEAN	u8

#define QOS_MAX				16
#define IPTYPEOFSERVICE			0x8000
#define	PROTOCOL			0x4000
#define	IPMASKEDSRCADDRESS		0x2000
#define	IPMASKEDDSTADDRESS		0x1000
#define	PROTOCOLSRCPORTRANGE		0x800
#define	PROTOCOLDSTPORTRANGE		0x400
#define	DSTMACADDR			0x200
#define	SRCMACADDR			0x100
#define	ETHERTYPE			0x80
#define	IEEE802_1DUSERPRIORITY		0x40
#define	IEEE802_1QVLANID		0x10

struct gdm_wimax_csr_s {
	/*	union{
		U16 all;
		struct _CS_CLASSIFIER_RULE_ENABLE{
			IPTypeOfService:1,
			Protocol:1,
			IPMaskedSrcAddress:1,
			IPMaskedDstAddress:1,
			ProtocolSrcPortRange:1,
			ProtocolDstPortRange:1,
			DstMacAddr:1,
			SrcMacAddr:1,
			Ethertype:1,
			IEEE802_1DUserPriority:1,
			IEEE802_1QVLANID:1,
			Reserved:5;
		} fields;
	} */
	BOOLEAN		enabled;
	u32		SFID;
	u8		qos_buf_count;
	u16		classifier_rule_en;
	u8		ip2s_lo;
	u8		ip2s_hi;
	u8		ip2s_mask;
	u8		protocol;
	u8		ipsrc_addr[16];
	u8		ipsrc_addrmask[16];
	u8		ipdst_addr[16];
	u8		ipdst_addrmask[16];
	u16		srcport_lo;
	u16		srcport_hi;
	u16		dstport_lo;
	u16		dstport_hi;
};

struct qos_entry_s {
	struct list_head	list;
	struct sk_buff		*skb;
	struct net_device	*dev;

};

struct qos_cb_s {
	struct list_head	qos_list[QOS_MAX];
	u32			qos_list_cnt;
	u32			qos_null_idx;
	struct gdm_wimax_csr_s	csr[QOS_MAX];
	spinlock_t		qos_lock;
	u32			qos_limit_size;
};

void gdm_qos_init(void *nic_ptr);
void gdm_qos_release_list(void *nic_ptr);
int gdm_qos_send_hci_pkt(struct sk_buff *skb, struct net_device *dev);
void gdm_recv_qos_hci_packet(void *nic_ptr, u8 *buf, int size);

#endif
