Home | History | Annotate | Line # | Download | only in dev
sxreg.h revision 1.2
      1 /*	$NetBSD: sxreg.h,v 1.2 2013/02/06 04:06:29 macallan Exp $	*/
      2 
      3 /*-
      4  * Copyright (c) 2013 The NetBSD Foundation, Inc.
      5  * All rights reserved.
      6  *
      7  * This code is derived from software contributed to The NetBSD Foundation
      8  * by Michael Lorenz.
      9  *
     10  * Redistribution and use in source and binary forms, with or without
     11  * modification, are permitted provided that the following conditions
     12  * are met:
     13  * 1. Redistributions of source code must retain the above copyright
     14  *    notice, this list of conditions and the following disclaimer.
     15  * 2. Redistributions in binary form must reproduce the above copyright
     16  *    notice, this list of conditions and the following disclaimer in the
     17  *    documentation and/or other materials provided with the distribution.
     18  *
     19  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     20  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     21  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     23  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     29  * POSSIBILITY OF SUCH DAMAGE.
     30  */
     31 
     32 /* register definitions for Sun's SX / SPAM rendering engine */
     33 
     34 #ifndef SXREG_H
     35 #define SXREG_H
     36 
     37 /* SX control registers */
     38 #define SX_CONTROL_STATUS	0x00000000
     39 #define SX_ERROR		0x00000004
     40 #define SX_PAGE_BOUND_LOWER	0x00000008
     41 #define SX_PAGE_BOUND_UPPER	0x0000000c
     42 #define SX_PLANEMASK		0x00000010
     43 #define SX_ROP_CONTROL		0x00000014	/* 8 bit ROP */
     44 #define SX_IQ_OVERFLOW_COUNTER	0x00000018
     45 #define SX_DIAGNOSTICS		0x0000001c
     46 #define SX_INSTRUCTIONS		0x00000020
     47 #define SX_ID			0x00000028
     48 #define SX_R0_INIT		0x0000002c
     49 #define SX_SOFTRESET		0x00000030
     50 /* write registers directly, only when processor is stopped */
     51 #define SX_DIRECT_R0		0x00000100
     52 #define SX_DIRECT_R1		0x00000104	/* and so on until R127 */
     53 /* write registers via pseudo instructions */
     54 #define SX_QUEUED_R0		0x00000300
     55 #define SX_QUEUED_R1		0x00000304	/* and so on until R127 */
     56 #define SX_QUEUED(r)		(0x300 + (r << 2))
     57 
     58 /* special purpose registers */
     59 #define R_ZERO	0
     60 #define R_SCAM	1
     61 #define R_MASK	2	/* bitmask for SX_STORE_SELECT */
     62 
     63 /*
     64  * registers are repeated at 0x1000 with certain parts read only
     65  * ( like the PAGE_BOUND registers ) which userlanf has no business writing to
     66  */
     67 
     68 /* SX_CONTROL_STATUS */
     69 #define SX_EE1		0x00000001	/* illegal instruction */
     70 #define SX_EE2		0x00000002	/* page bound error */
     71 #define SX_EE3		0x00000004	/* illegal memory access */
     72 #define SX_EE4		0x00000008	/* illegal register access */
     73 #define SX_EE5		0x00000010	/* alignment violation */
     74 #define SX_EE6		0x00000020	/* illegal instruction queue write */
     75 #define SX_EI		0x00000080	/* interrupt on error */
     76 #define SX_PB		0x00001000	/* enable page bound checking */
     77 #define SX_WO		0x00002000	/* write occured ( by SX ) */
     78 #define SX_GO		0x00004000	/* start/stop the processor */
     79 #define SX_MT		0x00008000	/* instruction queue is empty */
     80 
     81 /* SX_ERROR */
     82 #define SX_SE1		0x00000001	/* illegal instruction */
     83 #define SX_SE2		0x00000002	/* page bound error */
     84 #define SX_SE3		0x00000004	/* illegal memory access */
     85 #define SX_SE4		0x00000008	/* illegal register access */
     86 #define SX_SE5		0x00000010	/* alignment violation */
     87 #define SX_SE6		0x00000020	/* illegal instruction queue write */
     88 #define SX_SI		0x00000080	/* interrupt on error */
     89 
     90 /* SX_ID */
     91 #define SX_ARCHITECTURE_MASK	0x000000ff
     92 #define SX_CHIP_REVISION	0x0000ff00
     93 
     94 /* SX_DIAGNOSTICS */
     95 #define SX_IQ_FIFO_ACCESS	0x00000001	/* allow memory instructions
     96 						 * in SX_INSTRUCTIONS */
     97 
     98 /*
     99  * memory referencing instructions are written to 0x800000000 + PA
    100  * so we have to go through ASI 0x28 ( ASI_BYPASS + 8 )
    101  */
    102 #define ASI_SX	0x28
    103 
    104 /* load / store instructions */
    105 #define SX_STORE_COND	(0x4 << 19)	/* conditional write with mask */
    106 #define SX_STORE_CLAMP	(0x2 << 19)
    107 #define SX_STORE_MASK	(0x1 << 19)	/* apply plane mask */
    108 #define SX_STORE_SELECT	(0x8 << 19)	/* expand with plane reg dest[0]/dest[1] */
    109 #define SX_LOAD		(0xa << 19)
    110 #define SX_STORE	(0x0 << 19)
    111 
    112 /* data type */
    113 #define SX_UBYTE_0	(0x00 << 14)
    114 #define SX_UBYTE_8	(0x01 << 14)
    115 #define SX_UBYTE_16	(0x02 << 14)
    116 #define SX_UBYTE_24	(0x03 << 14)
    117 #define SX_SBYTE_0	(0x04 << 14)
    118 #define SX_SBYTE_8	(0x05 << 14)
    119 #define SX_SBYTE_16	(0x06 << 14)
    120 #define SX_SBYTE_24	(0x07 << 14)
    121 #define SX_UQUAD_0	(0x08 << 14)
    122 #define SX_UQUAD_8	(0x09 << 14)
    123 #define SX_UQUAD_16	(0x0a << 14)
    124 #define SX_UQUAD_24	(0x0b << 14)
    125 #define SX_SQUAD_0	(0x0c << 14)
    126 #define SX_SQUAD_8	(0x0d << 14)
    127 #define SX_SQUAD_16	(0x0e << 14)
    128 #define SX_SQUAD_24	(0x0f << 14)
    129 #define SX_UCHAN_0	(0x10 << 14)
    130 #define SX_UCHAN_8	(0x11 << 14)
    131 #define SX_UCHAN_16	(0x12 << 14)
    132 #define SX_UCHAN_24	(0x13 << 14)
    133 #define SX_SCHAN_0	(0x14 << 14)
    134 #define SX_SCHAN_8	(0x15 << 14)
    135 #define SX_SCHAN_16	(0x16 << 14)
    136 #define SX_SCHAN_24	(0x17 << 14)
    137 #define SX_USHORT_0	(0x18 << 14)
    138 #define SX_USHORT_8	(0x19 << 14)
    139 #define SX_USHORT_16	(0x1a << 14)
    140 #define SX_SSHORT_0	(0x1c << 14)
    141 #define SX_SSHORT_8	(0x1d << 14)
    142 #define SX_SSHORT_16	(0x1e << 14)
    143 #define SX_LONG		(0x1b << 14)
    144 #define SX_PACKED	(0x1f << 14)
    145 
    146 
    147 #define SX_LD(dreg, cnt, o)  (0x80000000 | ((cnt) << 23) | SX_LOAD | \
    148 				SX_LONG | (dreg << 7) | (o))
    149 #define SX_LDB(dreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_LOAD | \
    150 				SX_UBYTE_0 | (dreg << 7) | (o))
    151 #define SX_LDP(dreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_LOAD | \
    152 				SX_PACKED | (dreg << 7) | (o))
    153 #define SX_ST(sreg, cnt, o)  (0x80000000 | ((cnt) << 23) | SX_STORE | \
    154 				SX_LONG | (sreg << 7) | (o))
    155 #define SX_STB(sreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_STORE | \
    156 				SX_UBYTE_0 | (sreg << 7) | (o))
    157 #define SX_STP(sreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_STORE | \
    158 				SX_PACKED | (sreg << 7) | (o))
    159 #define SX_STS(sreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_STORE_SELECT \
    160 				| SX_LONG | (sreg << 7) | (o))
    161 #define SX_STBS(reg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_STORE_SELECT \
    162 				| SX_UBYTE_0 | (reg << 7) | (o))
    163 
    164 #endif /* SXREG_H */
    165