0001
0002
0003
0004
0005
0006 #ifndef IXP4XX_QMGR_H
0007 #define IXP4XX_QMGR_H
0008
0009 #include <linux/io.h>
0010 #include <linux/kernel.h>
0011
0012 #define DEBUG_QMGR 0
0013
0014 #define HALF_QUEUES 32
0015 #define QUEUES 64
0016 #define MAX_QUEUE_LENGTH 4
0017
0018 #define QUEUE_STAT1_EMPTY 1
0019 #define QUEUE_STAT1_NEARLY_EMPTY 2
0020 #define QUEUE_STAT1_NEARLY_FULL 4
0021 #define QUEUE_STAT1_FULL 8
0022 #define QUEUE_STAT2_UNDERFLOW 1
0023 #define QUEUE_STAT2_OVERFLOW 2
0024
0025 #define QUEUE_WATERMARK_0_ENTRIES 0
0026 #define QUEUE_WATERMARK_1_ENTRY 1
0027 #define QUEUE_WATERMARK_2_ENTRIES 2
0028 #define QUEUE_WATERMARK_4_ENTRIES 3
0029 #define QUEUE_WATERMARK_8_ENTRIES 4
0030 #define QUEUE_WATERMARK_16_ENTRIES 5
0031 #define QUEUE_WATERMARK_32_ENTRIES 6
0032 #define QUEUE_WATERMARK_64_ENTRIES 7
0033
0034
0035 #define QUEUE_IRQ_SRC_EMPTY 0
0036 #define QUEUE_IRQ_SRC_NEARLY_EMPTY 1
0037 #define QUEUE_IRQ_SRC_NEARLY_FULL 2
0038 #define QUEUE_IRQ_SRC_FULL 3
0039 #define QUEUE_IRQ_SRC_NOT_EMPTY 4
0040 #define QUEUE_IRQ_SRC_NOT_NEARLY_EMPTY 5
0041 #define QUEUE_IRQ_SRC_NOT_NEARLY_FULL 6
0042 #define QUEUE_IRQ_SRC_NOT_FULL 7
0043
0044 struct qmgr_regs {
0045 u32 acc[QUEUES][MAX_QUEUE_LENGTH];
0046 u32 stat1[4];
0047 u32 stat2[2];
0048 u32 statne_h;
0049 u32 statf_h;
0050 u32 irqsrc[4];
0051 u32 irqen[2];
0052 u32 irqstat[2];
0053 u32 reserved[1776];
0054 u32 sram[2048];
0055 };
0056
0057 void qmgr_put_entry(unsigned int queue, u32 val);
0058 u32 qmgr_get_entry(unsigned int queue);
0059 int qmgr_stat_empty(unsigned int queue);
0060 int qmgr_stat_below_low_watermark(unsigned int queue);
0061 int qmgr_stat_full(unsigned int queue);
0062 int qmgr_stat_overflow(unsigned int queue);
0063 void qmgr_release_queue(unsigned int queue);
0064 void qmgr_set_irq(unsigned int queue, int src,
0065 void (*handler)(void *pdev), void *pdev);
0066 void qmgr_enable_irq(unsigned int queue);
0067 void qmgr_disable_irq(unsigned int queue);
0068
0069
0070
0071 #if DEBUG_QMGR
0072 extern char qmgr_queue_descs[QUEUES][32];
0073
0074 int qmgr_request_queue(unsigned int queue, unsigned int len ,
0075 unsigned int nearly_empty_watermark,
0076 unsigned int nearly_full_watermark,
0077 const char *desc_format, const char* name);
0078 #else
0079 int __qmgr_request_queue(unsigned int queue, unsigned int len ,
0080 unsigned int nearly_empty_watermark,
0081 unsigned int nearly_full_watermark);
0082 #define qmgr_request_queue(queue, len, nearly_empty_watermark, \
0083 nearly_full_watermark, desc_format, name) \
0084 __qmgr_request_queue(queue, len, nearly_empty_watermark, \
0085 nearly_full_watermark)
0086 #endif
0087
0088 #endif