#ifndef ARM_XSCALE_IXP425_QMGR_H
#define ARM_XSCALE_IXP425_QMGR_H
#define IX_QMGR_MAX_NUM_QUEUES 64
#define IX_QMGR_MIN_QUEUPP_QID 32
#define IX_QMGR_MIN_ENTRY_SIZE_IN_WORDS 16
#define IX_QMGR_AQM_SRAM_SIZE_IN_BYTES 0x4000
#define IX_QMGR_Q_PRIORITY_0 0
#define IX_QMGR_Q_PRIORITY_1 1
#define IX_QMGR_Q_PRIORITY_2 2
#define IX_QMGR_NUM_PRIORITY_LEVELS 3
#define IX_QMGR_Q_STATUS_E_BIT_MASK 0x1
#define IX_QMGR_Q_STATUS_NE_BIT_MASK 0x2
#define IX_QMGR_Q_STATUS_NF_BIT_MASK 0x4
#define IX_QMGR_Q_STATUS_F_BIT_MASK 0x8
#define IX_QMGR_Q_STATUS_UF_BIT_MASK 0x10
#define IX_QMGR_Q_STATUS_OF_BIT_MASK 0x20
#define IX_QMGR_Q_SOURCE_ID_E 0
#define IX_QMGR_Q_SOURCE_ID_NE 1
#define IX_QMGR_Q_SOURCE_ID_NF 2
#define IX_QMGR_Q_SOURCE_ID_F 3
#define IX_QMGR_Q_SOURCE_ID_NOT_E 4
#define IX_QMGR_Q_SOURCE_ID_NOT_NE 5
#define IX_QMGR_Q_SOURCE_ID_NOT_NF 6
#define IX_QMGR_Q_SOURCE_ID_NOT_F 7
#define IX_QMGR_UNDERFLOW_BIT_OFFSET 0x0
#define IX_QMGR_OVERFLOW_BIT_OFFSET 0x1
#define IX_QMGR_QUEACC0_OFFSET 0x0000
#define IX_QMGR_QUEACC_SIZE 0x4
#define IX_QMGR_QUELOWSTAT0_OFFSET 0x400
#define IX_QMGR_QUELOWSTAT1_OFFSET 0x404
#define IX_QMGR_QUELOWSTAT2_OFFSET 0x408
#define IX_QMGR_QUELOWSTAT3_OFFSET 0x40c
#define IX_QMGR_QUELOWSTAT_QUE_STS_BITS_MASK 0xF
#define IX_QMGR_QUELOWSTAT_SIZE 0x4
#define IX_QMGR_QUELOWSTAT_NUM_QUE_PER_WORD 8
#define IX_QMGR_QUEUOSTAT0_OFFSET 0x410
#define IX_QMGR_QUEUOSTAT1_OFFSET 0x414
#define IX_QMGR_QUEUOSTAT_NUM_QUE_PER_WORD 16
#define IX_QMGR_QUEUPPSTAT0_OFFSET 0x418
#define IX_QMGR_QUEUPPSTAT1_OFFSET 0x41c
#define IX_QMGR_INT0SRCSELREG0_OFFSET 0x420
#define IX_QMGR_INT0SRCSELREG1_OFFSET 0x424
#define IX_QMGR_INT0SRCSELREG2_OFFSET 0x428
#define IX_QMGR_INT0SRCSELREG3_OFFSET 0x42c
#define IX_QMGR_INTSRC_NUM_QUE_PER_WORD 8
#define IX_QMGR_QUEIEREG0_OFFSET 0x430
#define IX_QMGR_QUEIEREG1_OFFSET 0x434
#define IX_QMGR_QINTREG0_OFFSET 0x438
#define IX_QMGR_QINTREG1_OFFSET 0x43c
#define IX_QMGR_QUECONFIG_BASE_OFFSET 0x2000
#define IX_QMGR_QUECONFIG_SIZE 0x100
#define IX_QMGR_QUEBUFFER_SPACE_OFFSET 0x2100
#define BITS_PER_WORD 32
#define IX_QMGR_QUE_BUFFER_SPACE_SIZE 0x1F00
#define IX_QMGR_Q_ACCESS_ADDR_GET(qId)\
(((qId) * (IX_QMGR_QUEACC_SIZE * sizeof(uint32_t)))\
+ IX_QMGR_QUEACC0_OFFSET)
#define IX_QMGR_INT0SRCSELREG0_BIT3 3
#if 0
#define IX_QMGR_Q_CONFIG_WRPTR_OFFSET 0x00
#define IX_QMGR_Q_CONFIG_RDPTR_OFFSET 0x07
#define IX_QMGR_Q_CONFIG_BADDR_OFFSET 0x0E
#define IX_QMGR_Q_CONFIG_ESIZE_OFFSET 0x16
#define IX_QMGR_Q_CONFIG_BSIZE_OFFSET 0x18
#define IX_QMGR_Q_CONFIG_NE_OFFSET 0x1A
#define IX_QMGR_Q_CONFIG_NF_OFFSET 0x1D
#define IX_QMGR_NE_NF_CLEAR_MASK 0x03FFFFFF
#define IX_QMGR_NE_MASK 0x7
#define IX_QMGR_NF_MASK 0x7
#define IX_QMGR_SIZE_MASK 0x3
#define IX_QMGR_ENTRY_SIZE_MASK 0x3
#define IX_QMGR_BADDR_MASK 0x003FC000
#define IX_QMGR_RDPTR_MASK 0x7F
#define IX_QMGR_WRPTR_MASK 0x7F
#define IX_QMGR_RDWRPTR_MASK 0x00003FFF
#else
#define IX_QMGR_Q_CONFIG_WRPTR_OFFSET 0
#define IX_QMGR_WRPTR_MASK 0x7F
#define IX_QMGR_Q_CONFIG_RDPTR_OFFSET 7
#define IX_QMGR_RDPTR_MASK 0x7F
#define IX_QMGR_Q_CONFIG_BADDR_OFFSET 14
#define IX_QMGR_BADDR_MASK 0x3FC000
#define IX_QMGR_Q_CONFIG_ESIZE_OFFSET 22
#define IX_QMGR_ENTRY_SIZE_MASK 0x3
#define IX_QMGR_Q_CONFIG_BSIZE_OFFSET 24
#define IX_QMGR_SIZE_MASK 0x3
#define IX_QMGR_Q_CONFIG_NE_OFFSET 26
#define IX_QMGR_NE_MASK 0x7
#define IX_QMGR_Q_CONFIG_NF_OFFSET 29
#define IX_QMGR_NF_MASK 0x7
#define IX_QMGR_RDWRPTR_MASK 0x00003FFF
#define IX_QMGR_NE_NF_CLEAR_MASK 0x03FFFFFF
#endif
#define IX_QMGR_BASE_ADDR_16_WORD_ALIGN 64
#define IX_QMGR_BASE_ADDR_16_WORD_SHIFT 6
#define IX_QMGR_AQM_ADDRESS_SPACE_SIZE_IN_WORDS 0x1000
#define IX_QMGR_AQM_SRAM_BASE_ADDRESS_OFFSET \
((IX_QMGR_QUECONFIG_BASE_OFFSET) + (IX_QMGR_QUECONFIG_SIZE))
#define IX_QMGR_MIN_BUFFER_SIZE 16
#define IX_QMGR_QUELOWSTAT_RESET_VALUE 0x33333333
#define IX_QMGR_QUEUOSTAT_RESET_VALUE 0x00000000
#define IX_QMGR_QUEUPPSTAT0_RESET_VALUE 0xFFFFFFFF
#define IX_QMGR_QUEUPPSTAT1_RESET_VALUE 0x00000000
#define IX_QMGR_INT0SRCSELREG_RESET_VALUE 0x00000000
#define IX_QMGR_QUEIEREG_RESET_VALUE 0x00000000
#define IX_QMGR_QINTREG_RESET_VALUE 0xFFFFFFFF
#define IX_QMGR_QUECONFIG_RESET_VALUE 0x00000000
#define IX_QMGR_QUELOWSTAT_BITS_PER_Q \
(BITS_PER_WORD/IX_QMGR_QUELOWSTAT_NUM_QUE_PER_WORD)
#define IX_QMGR_QUELOWSTAT_QID_MASK 0x7
#define IX_QMGR_Q_CONFIG_ADDR_GET(qId)\
(((qId) * sizeof(uint32_t)) + IX_QMGR_QUECONFIG_BASE_OFFSET)
#define IX_QMGR_ENTRY1_OFFSET 0
#define IX_QMGR_ENTRY2_OFFSET 1
#define IX_QMGR_ENTRY4_OFFSET 3
#ifdef __NetBSD__
void *ixpqmgr_init(bus_space_tag_t);
#endif
int ixpqmgr_qconfig(int qId, int qSizeInWords, int ne, int nf, int srcSel,
void (*cb)(int, void *), void *cbarg);
int ixpqmgr_qwrite(int qId, uint32_t entry);
int ixpqmgr_qread(int qId, uint32_t *entry);
int ixpqmgr_qreadm(int qId, uint32_t n, uint32_t *p);
uint32_t ixpqmgr_getqstatus(int qId);
uint32_t ixpqmgr_getqconfig(int qId);
void ixpqmgr_notify_enable(int qId, int srcSel);
void ixpqmgr_notify_disable(int qId);
void ixpqmgr_dump(void);
#endif