1/* 2 * Copyright (c) 2012 GCT Semiconductor, Inc. All rights reserved. 3 * 4 * This software is licensed under the terms of the GNU General Public 5 * License version 2, as published by the Free Software Foundation, and 6 * may be copied, distributed, and modified under those terms. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU General Public License for more details. 12 */ 13 14#ifndef __GDM72XX_GDM_QOS_H__ 15#define __GDM72XX_GDM_QOS_H__ 16 17#include <linux/types.h> 18#include <linux/usb.h> 19#include <linux/list.h> 20 21#define QOS_MAX 16 22#define IPTYPEOFSERVICE 0x8000 23#define PROTOCOL 0x4000 24#define IPMASKEDSRCADDRESS 0x2000 25#define IPMASKEDDSTADDRESS 0x1000 26#define PROTOCOLSRCPORTRANGE 0x800 27#define PROTOCOLDSTPORTRANGE 0x400 28#define DSTMACADDR 0x200 29#define SRCMACADDR 0x100 30#define ETHERTYPE 0x80 31#define IEEE802_1DUSERPRIORITY 0x40 32#define IEEE802_1QVLANID 0x10 33 34struct gdm_wimax_csr_s { 35 bool enabled; 36 u32 sfid; 37 u8 qos_buf_count; 38 u16 classifier_rule_en; 39 u8 ip2s_lo; 40 u8 ip2s_hi; 41 u8 ip2s_mask; 42 u8 protocol; 43 u8 ipsrc_addr[16]; 44 u8 ipsrc_addrmask[16]; 45 u8 ipdst_addr[16]; 46 u8 ipdst_addrmask[16]; 47 u16 srcport_lo; 48 u16 srcport_hi; 49 u16 dstport_lo; 50 u16 dstport_hi; 51}; 52 53struct qos_entry_s { 54 struct list_head list; 55 struct sk_buff *skb; 56 struct net_device *dev; 57 58}; 59 60struct qos_cb_s { 61 struct list_head qos_list[QOS_MAX]; 62 int qos_list_cnt; 63 int qos_null_idx; 64 struct gdm_wimax_csr_s csr[QOS_MAX]; 65 spinlock_t qos_lock; 66 int qos_limit_size; 67}; 68 69void gdm_qos_init(void *nic_ptr); 70void gdm_qos_release_list(void *nic_ptr); 71int gdm_qos_send_hci_pkt(struct sk_buff *skb, struct net_device *dev); 72void gdm_recv_qos_hci_packet(void *nic_ptr, u8 *buf, int size); 73 74#endif /* __GDM72XX_GDM_QOS_H__ */ 75