Home | History | Annotate | Line # | Download | only in xscale
      1  1.1  scw /*	$NetBSD: ixp425_qmgr.h,v 1.1 2006/12/10 10:01:49 scw Exp $	*/
      2  1.1  scw 
      3  1.1  scw /*-
      4  1.1  scw  * Copyright (c) 2006 Sam Leffler, Errno Consulting
      5  1.1  scw  * All rights reserved.
      6  1.1  scw  *
      7  1.1  scw  * Redistribution and use in source and binary forms, with or without
      8  1.1  scw  * modification, are permitted provided that the following conditions
      9  1.1  scw  * are met:
     10  1.1  scw  * 1. Redistributions of source code must retain the above copyright
     11  1.1  scw  *    notice, this list of conditions and the following disclaimer,
     12  1.1  scw  *    without modification.
     13  1.1  scw  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
     14  1.1  scw  *    similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
     15  1.1  scw  *    redistribution must be conditioned upon including a substantially
     16  1.1  scw  *    similar Disclaimer requirement for further binary redistribution.
     17  1.1  scw  *
     18  1.1  scw  * NO WARRANTY
     19  1.1  scw  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     20  1.1  scw  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     21  1.1  scw  * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
     22  1.1  scw  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
     23  1.1  scw  * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
     24  1.1  scw  * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     25  1.1  scw  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     26  1.1  scw  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
     27  1.1  scw  * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     28  1.1  scw  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
     29  1.1  scw  * THE POSSIBILITY OF SUCH DAMAGES.
     30  1.1  scw  *
     31  1.1  scw  * $FreeBSD: src/sys/arm/xscale/ixp425/ixp425_qmgr.h,v 1.1 2006/11/19 23:55:23 sam Exp $
     32  1.1  scw  */
     33  1.1  scw 
     34  1.1  scw /*-
     35  1.1  scw  * Copyright (c) 2001-2005, Intel Corporation.
     36  1.1  scw  * All rights reserved.
     37  1.1  scw  *
     38  1.1  scw  * Redistribution and use in source and binary forms, with or without
     39  1.1  scw  * modification, are permitted provided that the following conditions
     40  1.1  scw  * are met:
     41  1.1  scw  * 1. Redistributions of source code must retain the above copyright
     42  1.1  scw  *    notice, this list of conditions and the following disclaimer.
     43  1.1  scw  * 2. Redistributions in binary form must reproduce the above copyright
     44  1.1  scw  *    notice, this list of conditions and the following disclaimer in the
     45  1.1  scw  *    documentation and/or other materials provided with the distribution.
     46  1.1  scw  * 3. Neither the name of the Intel Corporation nor the names of its contributors
     47  1.1  scw  *    may be used to endorse or promote products derived from this software
     48  1.1  scw  *    without specific prior written permission.
     49  1.1  scw  *
     50  1.1  scw  *
     51  1.1  scw  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
     52  1.1  scw  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     53  1.1  scw  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     54  1.1  scw  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
     55  1.1  scw  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     56  1.1  scw  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     57  1.1  scw  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     58  1.1  scw  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     59  1.1  scw  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     60  1.1  scw  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     61  1.1  scw  * SUCH DAMAGE.
     62  1.1  scw */
     63  1.1  scw 
     64  1.1  scw #ifndef ARM_XSCALE_IXP425_QMGR_H
     65  1.1  scw #define	ARM_XSCALE_IXP425_QMGR_H
     66  1.1  scw 
     67  1.1  scw #define	IX_QMGR_MAX_NUM_QUEUES		64
     68  1.1  scw #define	IX_QMGR_MIN_QUEUPP_QID		32
     69  1.1  scw 
     70  1.1  scw #define IX_QMGR_MIN_ENTRY_SIZE_IN_WORDS 16
     71  1.1  scw 
     72  1.1  scw /* Total size of SRAM */
     73  1.1  scw #define IX_QMGR_AQM_SRAM_SIZE_IN_BYTES 0x4000
     74  1.1  scw 
     75  1.1  scw #define	IX_QMGR_Q_PRIORITY_0		0
     76  1.1  scw #define	IX_QMGR_Q_PRIORITY_1		1
     77  1.1  scw #define	IX_QMGR_Q_PRIORITY_2		2
     78  1.1  scw #define IX_QMGR_NUM_PRIORITY_LEVELS	3	/* number of priority levels */
     79  1.1  scw 
     80  1.1  scw #define	IX_QMGR_Q_STATUS_E_BIT_MASK	0x1	/* Empty */
     81  1.1  scw #define	IX_QMGR_Q_STATUS_NE_BIT_MASK	0x2	/* Nearly Empty */
     82  1.1  scw #define	IX_QMGR_Q_STATUS_NF_BIT_MASK	0x4	/* Nearly Full */
     83  1.1  scw #define	IX_QMGR_Q_STATUS_F_BIT_MASK	0x8	/* Full */
     84  1.1  scw #define	IX_QMGR_Q_STATUS_UF_BIT_MASK	0x10	/* Underflow */
     85  1.1  scw #define	IX_QMGR_Q_STATUS_OF_BIT_MASK	0x20	/* Overflow */
     86  1.1  scw 
     87  1.1  scw #define	IX_QMGR_Q_SOURCE_ID_E		0 /* Q Empty after last read */
     88  1.1  scw #define	IX_QMGR_Q_SOURCE_ID_NE		1 /* Q Nearly Empty after last read */
     89  1.1  scw #define	IX_QMGR_Q_SOURCE_ID_NF		2 /* Q Nearly Full after last write */
     90  1.1  scw #define	IX_QMGR_Q_SOURCE_ID_F		3 /* Q Full after last write */
     91  1.1  scw #define	IX_QMGR_Q_SOURCE_ID_NOT_E	4 /* Q !Empty after last write */
     92  1.1  scw #define	IX_QMGR_Q_SOURCE_ID_NOT_NE	5 /* Q !Nearly Empty after last write */
     93  1.1  scw #define	IX_QMGR_Q_SOURCE_ID_NOT_NF	6 /* Q !Nearly Full after last read */
     94  1.1  scw #define	IX_QMGR_Q_SOURCE_ID_NOT_F	7 /* Q !Full after last read */
     95  1.1  scw 
     96  1.1  scw #define IX_QMGR_UNDERFLOW_BIT_OFFSET	0x0	/* underflow bit mask */
     97  1.1  scw #define IX_QMGR_OVERFLOW_BIT_OFFSET     0x1	/* overflow bit mask */
     98  1.1  scw 
     99  1.1  scw #define IX_QMGR_QUEACC0_OFFSET		0x0000	/* q 0 access register */
    100  1.1  scw #define IX_QMGR_QUEACC_SIZE		0x4/*words*/
    101  1.1  scw 
    102  1.1  scw #define IX_QMGR_QUELOWSTAT0_OFFSET	0x400	/* Q status, q's 0-7 */
    103  1.1  scw #define IX_QMGR_QUELOWSTAT1_OFFSET	0x404	/* Q status, q's 8-15 */
    104  1.1  scw #define IX_QMGR_QUELOWSTAT2_OFFSET	0x408	/* Q status, q's 16-23 */
    105  1.1  scw #define IX_QMGR_QUELOWSTAT3_OFFSET	0x40c	/* Q status, q's 24-31 */
    106  1.1  scw 
    107  1.1  scw /* Queue status register Q status bits mask */
    108  1.1  scw #define IX_QMGR_QUELOWSTAT_QUE_STS_BITS_MASK 0xF
    109  1.1  scw /* Size of queue 0-31 status register */
    110  1.1  scw #define IX_QMGR_QUELOWSTAT_SIZE     0x4 /*words*/
    111  1.1  scw #define IX_QMGR_QUELOWSTAT_NUM_QUE_PER_WORD 8	/* # status/word */
    112  1.1  scw 
    113  1.1  scw #define IX_QMGR_QUEUOSTAT0_OFFSET	0x410	/* Q UF/OF status, q's 0-15 */
    114  1.1  scw #define IX_QMGR_QUEUOSTAT1_OFFSET	0x414	/* Q UF/OF status, q's 16-31 */
    115  1.1  scw 
    116  1.1  scw #define IX_QMGR_QUEUOSTAT_NUM_QUE_PER_WORD 16	/* # UF/OF status/word */
    117  1.1  scw 
    118  1.1  scw #define IX_QMGR_QUEUPPSTAT0_OFFSET	0x418	/* NE status, q's 32-63 */
    119  1.1  scw #define IX_QMGR_QUEUPPSTAT1_OFFSET	0x41c	/* F status, q's 32-63 */
    120  1.1  scw 
    121  1.1  scw #define IX_QMGR_INT0SRCSELREG0_OFFSET	0x420	/* INT src select, q's 0-7 */
    122  1.1  scw #define IX_QMGR_INT0SRCSELREG1_OFFSET	0x424	/* INT src select, q's 8-15 */
    123  1.1  scw #define IX_QMGR_INT0SRCSELREG2_OFFSET	0x428	/* INT src select, q's 16-23 */
    124  1.1  scw #define IX_QMGR_INT0SRCSELREG3_OFFSET	0x42c	/* INT src select, q's 24-31 */
    125  1.1  scw 
    126  1.1  scw #define IX_QMGR_INTSRC_NUM_QUE_PER_WORD 8	/* # INT src select/word */
    127  1.1  scw 
    128  1.1  scw #define IX_QMGR_QUEIEREG0_OFFSET	0x430	/* INT enable, q's 0-31 */
    129  1.1  scw #define IX_QMGR_QUEIEREG1_OFFSET	0x434	/* INT enable, q's 32-63 */
    130  1.1  scw #define IX_QMGR_QINTREG0_OFFSET		0x438	/* INT status, q's 0-31 */
    131  1.1  scw #define IX_QMGR_QINTREG1_OFFSET		0x43c	/* INT status, q's 32-63 */
    132  1.1  scw 
    133  1.1  scw #define IX_QMGR_QUECONFIG_BASE_OFFSET	0x2000	/* Q config register, q 0 */
    134  1.1  scw 
    135  1.1  scw #define IX_QMGR_QUECONFIG_SIZE		0x100	/* total size of Q config regs*/
    136  1.1  scw 
    137  1.1  scw #define IX_QMGR_QUEBUFFER_SPACE_OFFSET	0x2100	/* start of SRAM */
    138  1.1  scw 
    139  1.1  scw /* Total bits in a word */
    140  1.1  scw #define BITS_PER_WORD 32
    141  1.1  scw 
    142  1.1  scw /* Size of queue buffer space */
    143  1.1  scw #define IX_QMGR_QUE_BUFFER_SPACE_SIZE 0x1F00
    144  1.1  scw 
    145  1.1  scw /*
    146  1.1  scw  * This macro will return the address of the access register for the
    147  1.1  scw  * queue  specified by qId
    148  1.1  scw  */
    149  1.1  scw #define IX_QMGR_Q_ACCESS_ADDR_GET(qId)\
    150  1.1  scw         (((qId) * (IX_QMGR_QUEACC_SIZE * sizeof(uint32_t)))\
    151  1.1  scw 	 + IX_QMGR_QUEACC0_OFFSET)
    152  1.1  scw 
    153  1.1  scw /*
    154  1.1  scw  * Bit location of bit-3 of INT0SRCSELREG0 register to enabled
    155  1.1  scw  * sticky interrupt register.
    156  1.1  scw  */
    157  1.1  scw #define IX_QMGR_INT0SRCSELREG0_BIT3 3
    158  1.1  scw 
    159  1.1  scw /*
    160  1.1  scw  * These defines are the bit offsets of the various fields of
    161  1.1  scw  * the queue configuration register.
    162  1.1  scw  */
    163  1.1  scw #if 0
    164  1.1  scw #define IX_QMGR_Q_CONFIG_WRPTR_OFFSET       0x00
    165  1.1  scw #define IX_QMGR_Q_CONFIG_RDPTR_OFFSET       0x07
    166  1.1  scw #define IX_QMGR_Q_CONFIG_BADDR_OFFSET       0x0E
    167  1.1  scw #define IX_QMGR_Q_CONFIG_ESIZE_OFFSET       0x16
    168  1.1  scw #define IX_QMGR_Q_CONFIG_BSIZE_OFFSET       0x18
    169  1.1  scw #define IX_QMGR_Q_CONFIG_NE_OFFSET          0x1A
    170  1.1  scw #define IX_QMGR_Q_CONFIG_NF_OFFSET          0x1D
    171  1.1  scw 
    172  1.1  scw #define IX_QMGR_NE_NF_CLEAR_MASK            0x03FFFFFF
    173  1.1  scw #define IX_QMGR_NE_MASK                     0x7
    174  1.1  scw #define IX_QMGR_NF_MASK                     0x7
    175  1.1  scw #define IX_QMGR_SIZE_MASK                   0x3
    176  1.1  scw #define IX_QMGR_ENTRY_SIZE_MASK             0x3
    177  1.1  scw #define IX_QMGR_BADDR_MASK                  0x003FC000
    178  1.1  scw #define IX_QMGR_RDPTR_MASK                  0x7F
    179  1.1  scw #define IX_QMGR_WRPTR_MASK                  0x7F
    180  1.1  scw #define IX_QMGR_RDWRPTR_MASK                0x00003FFF
    181  1.1  scw #else
    182  1.1  scw #define IX_QMGR_Q_CONFIG_WRPTR_OFFSET       0
    183  1.1  scw #define IX_QMGR_WRPTR_MASK                  0x7F
    184  1.1  scw #define IX_QMGR_Q_CONFIG_RDPTR_OFFSET       7
    185  1.1  scw #define IX_QMGR_RDPTR_MASK                  0x7F
    186  1.1  scw #define IX_QMGR_Q_CONFIG_BADDR_OFFSET       14
    187  1.1  scw #define IX_QMGR_BADDR_MASK                  0x3FC000	/* XXX not used */
    188  1.1  scw #define IX_QMGR_Q_CONFIG_ESIZE_OFFSET       22
    189  1.1  scw #define IX_QMGR_ENTRY_SIZE_MASK             0x3
    190  1.1  scw #define IX_QMGR_Q_CONFIG_BSIZE_OFFSET       24
    191  1.1  scw #define IX_QMGR_SIZE_MASK                   0x3
    192  1.1  scw #define IX_QMGR_Q_CONFIG_NE_OFFSET          26
    193  1.1  scw #define IX_QMGR_NE_MASK                     0x7
    194  1.1  scw #define IX_QMGR_Q_CONFIG_NF_OFFSET          29
    195  1.1  scw #define IX_QMGR_NF_MASK                     0x7
    196  1.1  scw 
    197  1.1  scw #define IX_QMGR_RDWRPTR_MASK                0x00003FFF
    198  1.1  scw #define IX_QMGR_NE_NF_CLEAR_MASK            0x03FFFFFF
    199  1.1  scw #endif
    200  1.1  scw 
    201  1.1  scw #define IX_QMGR_BASE_ADDR_16_WORD_ALIGN     64
    202  1.1  scw #define IX_QMGR_BASE_ADDR_16_WORD_SHIFT     6
    203  1.1  scw 
    204  1.1  scw #define IX_QMGR_AQM_ADDRESS_SPACE_SIZE_IN_WORDS 0x1000
    205  1.1  scw 
    206  1.1  scw /* Base address of AQM SRAM */
    207  1.1  scw #define IX_QMGR_AQM_SRAM_BASE_ADDRESS_OFFSET \
    208  1.1  scw ((IX_QMGR_QUECONFIG_BASE_OFFSET) + (IX_QMGR_QUECONFIG_SIZE))
    209  1.1  scw 
    210  1.1  scw /* Min buffer size used for generating buffer size in QUECONFIG */
    211  1.1  scw #define IX_QMGR_MIN_BUFFER_SIZE 16
    212  1.1  scw 
    213  1.1  scw /* Reset values of QMgr hardware registers */
    214  1.1  scw #define IX_QMGR_QUELOWSTAT_RESET_VALUE    0x33333333
    215  1.1  scw #define IX_QMGR_QUEUOSTAT_RESET_VALUE     0x00000000
    216  1.1  scw #define IX_QMGR_QUEUPPSTAT0_RESET_VALUE   0xFFFFFFFF
    217  1.1  scw #define IX_QMGR_QUEUPPSTAT1_RESET_VALUE   0x00000000
    218  1.1  scw #define IX_QMGR_INT0SRCSELREG_RESET_VALUE 0x00000000
    219  1.1  scw #define IX_QMGR_QUEIEREG_RESET_VALUE      0x00000000
    220  1.1  scw #define IX_QMGR_QINTREG_RESET_VALUE       0xFFFFFFFF
    221  1.1  scw #define IX_QMGR_QUECONFIG_RESET_VALUE     0x00000000
    222  1.1  scw 
    223  1.1  scw #define IX_QMGR_QUELOWSTAT_BITS_PER_Q \
    224  1.1  scw 	(BITS_PER_WORD/IX_QMGR_QUELOWSTAT_NUM_QUE_PER_WORD)
    225  1.1  scw 
    226  1.1  scw #define IX_QMGR_QUELOWSTAT_QID_MASK 0x7
    227  1.1  scw #define IX_QMGR_Q_CONFIG_ADDR_GET(qId)\
    228  1.1  scw         (((qId) * sizeof(uint32_t)) + IX_QMGR_QUECONFIG_BASE_OFFSET)
    229  1.1  scw 
    230  1.1  scw #define IX_QMGR_ENTRY1_OFFSET 0
    231  1.1  scw #define IX_QMGR_ENTRY2_OFFSET 1
    232  1.1  scw #define IX_QMGR_ENTRY4_OFFSET 3
    233  1.1  scw 
    234  1.1  scw #ifdef __NetBSD__
    235  1.1  scw void	*ixpqmgr_init(bus_space_tag_t);
    236  1.1  scw #endif
    237  1.1  scw 
    238  1.1  scw int	ixpqmgr_qconfig(int qId, int qSizeInWords, int ne, int nf, int srcSel,
    239  1.1  scw 	    void (*cb)(int, void *), void *cbarg);
    240  1.1  scw int	ixpqmgr_qwrite(int qId, uint32_t entry);
    241  1.1  scw int	ixpqmgr_qread(int qId, uint32_t *entry);
    242  1.1  scw int	ixpqmgr_qreadm(int qId, uint32_t n, uint32_t *p);
    243  1.1  scw uint32_t ixpqmgr_getqstatus(int qId);
    244  1.1  scw uint32_t ixpqmgr_getqconfig(int qId);
    245  1.1  scw void	ixpqmgr_notify_enable(int qId, int srcSel);
    246  1.1  scw void	ixpqmgr_notify_disable(int qId);
    247  1.1  scw void	ixpqmgr_dump(void);
    248  1.1  scw 
    249  1.1  scw #endif /* ARM_XSCALE_IXP425_QMGR_H */
    250