#ifndef RTL867x_8367b_QOS_H
#define RTL867x_8367b_QOS_H

#include <net/rtl/rtl867x_hwnat_qosrule.h>

#include "../../rtl8367b/rtk_api_qos.h"
#include "../../rtl8367b/rtk_api_acl.h"


//#define DBG_8367B_QOS
#ifdef DBG_8367B_QOS
#define DBG_8367B_QOS_PRK printk
#else
#define DBG_8367B_QOS_PRK(format, args...)
#endif

typedef struct rtl867x_8367b_qos_rule{

	/* matching data field*/
	rtk_filter_cfg_t* rule_cfg;

	/* qos policy */
	uint32			priority;
	uint32			swQid;	

	/* index refer to ip/port range */
	uint32			iprange_use_bitmask;
	uint32			portrange_use_bitmask;

	/* sw_qosrule index */
	uint32			index;	
	/* for linking list */
	struct list_head qos_rule_list;
} rtl867x_8367b_qos_rule_t;

int32 rtl867x_8367b_enableQos(int sp_queue_num, int wrr_queue_num, int ceil[],int rate[] ,int32 default_sw_qid);
int32 rtl867x_8367b_closeQos(void);
int rtl867x_8367b_add_qosrule(rtl867x_hwnat_qos_rule_t *input_qos_rule ,int q_index,int* return_index);
int rtl867x_8367b_del_qosrule(int index);
void rtl867x_8367b_flush_qosrule(void);
void rtl867x_8367b_qosShowDebugInfo(void);
void rtl867x_8367b_flush_qosrule(void);
void rtl867x_8367b_qosShowSwRule(void);

#endif