summaryrefslogtreecommitdiffstats
path: root/target/linux/realtek/files/include/net/rtl/rtl865x_outputQueue.h
diff options
context:
space:
mode:
authorRoman Yeryomin <roman@advem.lv>2012-09-13 00:40:35 +0300
committerRoman Yeryomin <roman@advem.lv>2012-12-03 00:13:21 +0200
commit5deb3317cb51ac52de922bb55f8492624018906d (patch)
treec2fbe6346699d9bb0f2100490c3029519bb8fde8 /target/linux/realtek/files/include/net/rtl/rtl865x_outputQueue.h
parent0239d37124f9184b478a42de8a7fa1bc85a6a6fe (diff)
Add realtek target files
Signed-off-by: Roman Yeryomin <roman@advem.lv>
Diffstat (limited to 'target/linux/realtek/files/include/net/rtl/rtl865x_outputQueue.h')
-rw-r--r--target/linux/realtek/files/include/net/rtl/rtl865x_outputQueue.h165
1 files changed, 165 insertions, 0 deletions
diff --git a/target/linux/realtek/files/include/net/rtl/rtl865x_outputQueue.h b/target/linux/realtek/files/include/net/rtl/rtl865x_outputQueue.h
new file mode 100644
index 000000000..ed70fc4a9
--- /dev/null
+++ b/target/linux/realtek/files/include/net/rtl/rtl865x_outputQueue.h
@@ -0,0 +1,165 @@
+#ifndef RTL865X_OUTPUTQUEUE_H
+#define RTL865X_OUTPUTQUEUE_H
+#include <linux/if.h>
+
+#if !defined(CONFIG_RTL_LAYERED_ASIC_DRIVER)
+#define RTL865XC_MNQUEUE_OUTPUTQUEUE 1
+#define RTL865XC_QOS_OUTPUTQUEUE 1
+
+typedef struct rtl865xC_outputQueuePara_s {
+
+ uint32 ifg; /* default: Bandwidth Control Include/exclude Preamble & IFG */
+ uint32 gap; /* default: Per Queue Physical Length Gap = 20 */
+ uint32 drop; /* default: Descriptor Run Out Threshold = 500 */
+
+ uint32 systemSBFCOFF; /*System shared buffer flow control turn off threshold*/
+ uint32 systemSBFCON; /*System shared buffer flow control turn on threshold*/
+
+ uint32 systemFCOFF; /* system flow control turn off threshold */
+ uint32 systemFCON; /* system flow control turn on threshold */
+
+ uint32 portFCOFF; /* port base flow control turn off threshold */
+ uint32 portFCON; /* port base flow control turn on threshold */
+
+ uint32 queueDescFCOFF; /* Queue-Descriptor=Based Flow Control turn off Threshold */
+ uint32 queueDescFCON; /* Queue-Descriptor=Based Flow Control turn on Threshold */
+
+ uint32 queuePktFCOFF; /* Queue-Packet=Based Flow Control turn off Threshold */
+ uint32 queuePktFCON; /* Queue-Packet=Based Flow Control turn on Threshold */
+} rtl865xC_outputQueuePara_t;
+#endif
+
+#define MAX_QOS_RULE_NUM 10
+#define MAX_MARK_NUM_PER_DEV 5 // Note: not include the default mark(0) and should be <= (hw queue number - 1(for default))
+#define IPPROTO_ANY 256
+#define IPPROTO_BOTH 257
+
+#define QOS_DEF_QUEUE 0x4
+#define QOS_VALID_MASK 0x2
+#define QOS_TYPE_MASK 0x1
+#define QOS_TYPE_STR 0x0 /*0x0|QOS_VALID_MASK*/
+#define QOS_TYPE_WFQ 0x1 /*0x1|QOS_VALID_MASK*/
+
+#define EGRESS_BANDWIDTH_GRANULARITY 0x10000 /* 64*1024 */
+#define EGRESS_BANDWIDTH_GRANULARITY_BITMASK 0xffff
+#define EGRESS_BANDWIDTH_GRANULARITY_BITLEN 16
+
+#define INGRESS_BANDWIDTH_GRANULARITY_BITLEN 14
+
+#define EGRESS_WFQ_MAX_RATIO 0x80
+
+#if 0
+#define QOS_DEBUGP printk
+#else
+#define QOS_DEBUGP(format, args...)
+#endif
+
+#if 0
+#define QOS_RULE_DEBUGP printk
+#else
+#define QOS_RULE_DEBUGP(format, args...)
+#endif
+
+/* priority decision array index */
+enum PriDecIdx
+{
+ PORT_BASE = 0,
+ D1P_BASE,
+ DSCP_BASE,
+ ACL_BASE,
+ NAT_BASE,
+ PRI_TYPE_NUM,
+};
+
+typedef unsigned int bwu;
+
+typedef struct {
+ /* classify */
+ unsigned int protocol;
+ ipaddr_t local_ip_start;
+ ipaddr_t local_ip_end;
+ ipaddr_t remote_ip_start;
+ ipaddr_t remote_ip_end;
+ unsigned short lo_port_start;
+ unsigned short lo_port_end;
+ unsigned short re_port_start;
+ unsigned short re_port_end;
+
+ /* tc */
+ uint32 mark;
+ unsigned char prio;
+ unsigned char rate;
+} rtl865x_qos_entry_t, *rtl865x_qos_entry_p;
+
+typedef struct {
+ uint8 dscpRemark;
+ uint8 vlanPriRemark;
+ uint16 flags;
+
+ char ifname[IFNAMSIZ];
+ uint32 queueId; /* identify outputQueue */
+ uint32 handle;
+
+ bwu ceil;
+ bwu burst;
+ bwu bandwidth; /* average bandwidth, unit kbps */
+} rtl865x_qos_t, *rtl865x_qos_p;
+
+typedef rtl865x_qos_entry_t QOS_T;
+typedef rtl865x_qos_entry_p QOS_Tp;
+
+typedef struct _rtl865x_qos_rule_t{
+ char inIfname[IFNAMSIZ];
+ char outIfname[IFNAMSIZ];
+ rtl865x_AclRule_t *rule;
+ uint32 mark;
+ uint32 handle;
+ struct _rtl865x_qos_rule_t *next;
+} rtl865x_qos_rule_t, *rtl865x_qos_rule_p;
+
+typedef struct {
+ uint32 mark; /* mark==0 means entry not used */
+ uint32 priority;
+} rtl_qos_mark_info_t, *rtl_qos_mark_info_p;
+
+int32 rtl865x_qosSetBandwidth(uint8 *netIfName, uint32 bps);
+int32 rtl865x_qosFlushBandwidth(uint8 *netIfName);
+int32 rtl865x_qosGetPriorityByHandle(uint8 *priority, uint32 handle);
+int32 rtl865x_qosProcessQueue(uint8 *netIfName, rtl865x_qos_t *qosInfo);
+int32 rtl865x_setRule2HandleMapping(uint32 ifIdx, uint32 idx, uint32 handle);
+int32 rtl865x_qosAddMarkRule(rtl865x_qos_rule_t *rule);
+int32 rtl865x_qosFlushMarkRule(void);
+int32 rtl865x_qosCheckNaptPriority(rtl865x_AclRule_t *qosRule);
+int32 rtl865x_closeQos(uint8 *netIfName);
+int32 rtl865x_registerQosCompFunc(int8 (*p_cmpFunc)(rtl865x_qos_t *entry1, rtl865x_qos_t *entry2));
+int __init rtl865x_initOutputQueue(uint8 **netIfName);
+void __exit rtl865x_exitOutputQueue(void);
+int32 rtl865x_qosArrangeRuleByNetif(void);
+#if defined(CONFIG_RTL_PROC_DEBUG)
+int32 rtl865x_show_allQosAcl(void);
+#endif
+extern int32 rtl865x_qosArrangeRuleByNetif(void);
+int32 rtl_qosGetPriorityByMark(uint8 *netIfName, int32 mark);
+
+int32 rtl_qosGetPriorityByVid(int32 vid, int32 mark);
+int32 rtl_qosSetPriorityByMark(uint8 *netIfName, int32 mark, int32 handler, int32 enable);
+
+extern u8 netIfNameArray[NETIF_NUMBER][IFNAMSIZ];
+extern rtl865x_qos_rule_t *rtl865x_qosRuleHead;
+
+#if defined(CONFIG_RTK_QOS_FOR_CABLE_MODEM)
+void rtl_initQosForCableModem(void);
+#endif
+
+#if defined (CONFIG_RTL_HW_QOS_SUPPORT) && defined(CONFIG_RTL_QOS_PATCH)
+#define DEF_QUEUE_NUM 1
+#define MAX_QOS_PATCH_QUEUE_NUM 2
+void rtl865x_reinitOutputQueuePatchForQoS(uint32 qosEnabled);
+#endif
+
+#if defined (CONFIG_RTL_HW_QOS_SUPPORT) // sync from voip customer for multiple ppp
+int32 rtl865x_qosFlushMarkRuleByDev(uint8 *netIfName);
+int32 rtl865x_qosRearrangeRule(void);
+#endif
+
+#endif