xref: /freebsd/sys/dev/ioat/ioat_hw.h (revision 685dc743dc3b5645e34836464128e1c0558b404b)
1e974f91cSConrad Meyer /*-
2e974f91cSConrad Meyer  * Copyright (C) 2012 Intel Corporation
3e974f91cSConrad Meyer  * All rights reserved.
4e974f91cSConrad Meyer  *
5e974f91cSConrad Meyer  * Redistribution and use in source and binary forms, with or without
6e974f91cSConrad Meyer  * modification, are permitted provided that the following conditions
7e974f91cSConrad Meyer  * are met:
8e974f91cSConrad Meyer  * 1. Redistributions of source code must retain the above copyright
9e974f91cSConrad Meyer  *    notice, this list of conditions and the following disclaimer.
10e974f91cSConrad Meyer  * 2. Redistributions in binary form must reproduce the above copyright
11e974f91cSConrad Meyer  *    notice, this list of conditions and the following disclaimer in the
12e974f91cSConrad Meyer  *    documentation and/or other materials provided with the distribution.
13e974f91cSConrad Meyer  *
14e974f91cSConrad Meyer  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15e974f91cSConrad Meyer  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16e974f91cSConrad Meyer  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17e974f91cSConrad Meyer  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18e974f91cSConrad Meyer  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19e974f91cSConrad Meyer  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20e974f91cSConrad Meyer  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21e974f91cSConrad Meyer  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22e974f91cSConrad Meyer  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23e974f91cSConrad Meyer  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24e974f91cSConrad Meyer  * SUCH DAMAGE.
25e974f91cSConrad Meyer  */
26e974f91cSConrad Meyer #ifndef __IOAT_HW_H__
27e974f91cSConrad Meyer #define __IOAT_HW_H__
28e974f91cSConrad Meyer 
29e974f91cSConrad Meyer #define	IOAT_MAX_CHANNELS		32
30e974f91cSConrad Meyer 
31e974f91cSConrad Meyer #define	IOAT_CHANCNT_OFFSET		0x00
32e974f91cSConrad Meyer 
33e974f91cSConrad Meyer #define	IOAT_XFERCAP_OFFSET		0x01
34b81eee4aSConrad Meyer /* Only bits [4:0] are valid. */
35b81eee4aSConrad Meyer #define	IOAT_XFERCAP_VALID_MASK		0x1f
36e974f91cSConrad Meyer 
37e974f91cSConrad Meyer #define	IOAT_GENCTRL_OFFSET		0x02
38e974f91cSConrad Meyer 
39e974f91cSConrad Meyer #define	IOAT_INTRCTRL_OFFSET		0x03
40e974f91cSConrad Meyer #define	IOAT_INTRCTRL_MASTER_INT_EN	0x01
41e974f91cSConrad Meyer 
42e974f91cSConrad Meyer #define	IOAT_ATTNSTATUS_OFFSET		0x04
43e974f91cSConrad Meyer 
44e974f91cSConrad Meyer #define	IOAT_CBVER_OFFSET		0x08
45e974f91cSConrad Meyer 
46e974f91cSConrad Meyer #define	IOAT_INTRDELAY_OFFSET		0x0C
47*5ca9fc2aSConrad Meyer #define	IOAT_INTRDELAY_SUPPORTED	(1 << 15)
48*5ca9fc2aSConrad Meyer /* Reserved.				(1 << 14) */
49*5ca9fc2aSConrad Meyer /* [13:0] is the coalesce period, in microseconds. */
50*5ca9fc2aSConrad Meyer #define	IOAT_INTRDELAY_US_MASK		((1 << 14) - 1)
51e974f91cSConrad Meyer 
52e974f91cSConrad Meyer #define	IOAT_CS_STATUS_OFFSET		0x0E
53e974f91cSConrad Meyer 
54e974f91cSConrad Meyer #define	IOAT_DMACAPABILITY_OFFSET	0x10
55e974f91cSConrad Meyer 
56e974f91cSConrad Meyer /* DMA Channel Registers */
57e974f91cSConrad Meyer #define	IOAT_CHANCTRL_OFFSET			0x80
58e974f91cSConrad Meyer #define	IOAT_CHANCTRL_CHANNEL_PRIORITY_MASK	0xF000
59e974f91cSConrad Meyer #define	IOAT_CHANCTRL_COMPL_DCA_EN		0x0200
60e974f91cSConrad Meyer #define	IOAT_CHANCTRL_CHANNEL_IN_USE		0x0100
61e974f91cSConrad Meyer #define	IOAT_CHANCTRL_DESCRIPTOR_ADDR_SNOOP_CONTROL	0x0020
62e974f91cSConrad Meyer #define	IOAT_CHANCTRL_ERR_INT_EN		0x0010
63e974f91cSConrad Meyer #define	IOAT_CHANCTRL_ANY_ERR_ABORT_EN		0x0008
64e974f91cSConrad Meyer #define	IOAT_CHANCTRL_ERR_COMPLETION_EN		0x0004
65e974f91cSConrad Meyer #define	IOAT_CHANCTRL_INT_REARM			0x0001
66e974f91cSConrad Meyer #define	IOAT_CHANCTRL_RUN			(IOAT_CHANCTRL_INT_REARM |\
67faefad9cSConrad Meyer 						 IOAT_CHANCTRL_ERR_COMPLETION_EN |\
68faefad9cSConrad Meyer 						 IOAT_CHANCTRL_ANY_ERR_ABORT_EN |\
69faefad9cSConrad Meyer 						 IOAT_CHANCTRL_ERR_INT_EN)
70e974f91cSConrad Meyer 
71e974f91cSConrad Meyer #define	IOAT_CHANCMD_OFFSET		0x84
72e974f91cSConrad Meyer #define	IOAT_CHANCMD_RESET		0x20
73e974f91cSConrad Meyer #define	IOAT_CHANCMD_SUSPEND		0x04
74e974f91cSConrad Meyer 
75e974f91cSConrad Meyer #define	IOAT_DMACOUNT_OFFSET		0x86
76e974f91cSConrad Meyer 
77e974f91cSConrad Meyer #define	IOAT_CHANSTS_OFFSET_LOW		0x88
78e974f91cSConrad Meyer #define	IOAT_CHANSTS_OFFSET_HIGH	0x8C
79e974f91cSConrad Meyer #define	IOAT_CHANSTS_OFFSET		0x88
80e974f91cSConrad Meyer 
81e974f91cSConrad Meyer #define	IOAT_CHANSTS_STATUS		0x7ULL
82e974f91cSConrad Meyer #define	IOAT_CHANSTS_ACTIVE		0x0
83e974f91cSConrad Meyer #define	IOAT_CHANSTS_IDLE		0x1
84e974f91cSConrad Meyer #define	IOAT_CHANSTS_SUSPENDED		0x2
85e974f91cSConrad Meyer #define	IOAT_CHANSTS_HALTED		0x3
86faefad9cSConrad Meyer #define	IOAT_CHANSTS_ARMED		0x4
87e974f91cSConrad Meyer 
88e974f91cSConrad Meyer #define	IOAT_CHANSTS_UNAFFILIATED_ERROR	0x8ULL
89e974f91cSConrad Meyer #define	IOAT_CHANSTS_SOFT_ERROR		0x10ULL
90e974f91cSConrad Meyer 
91e974f91cSConrad Meyer #define	IOAT_CHANSTS_COMPLETED_DESCRIPTOR_MASK	(~0x3FULL)
92e974f91cSConrad Meyer 
93e974f91cSConrad Meyer #define	IOAT_CHAINADDR_OFFSET_LOW	0x90
94e974f91cSConrad Meyer #define	IOAT_CHAINADDR_OFFSET_HIGH	0x94
95e974f91cSConrad Meyer 
96e974f91cSConrad Meyer #define	IOAT_CHANCMP_OFFSET_LOW		0x98
97e974f91cSConrad Meyer #define	IOAT_CHANCMP_OFFSET_HIGH	0x9C
98e974f91cSConrad Meyer 
99e974f91cSConrad Meyer #define	IOAT_CHANERR_OFFSET		0xA8
100e974f91cSConrad Meyer 
101cea5b880SConrad Meyer #define	IOAT_CHANERR_XSADDERR		(1 << 0)
102cea5b880SConrad Meyer #define	IOAT_CHANERR_XDADDERR		(1 << 1)
103cea5b880SConrad Meyer #define	IOAT_CHANERR_NDADDERR		(1 << 2)
104cea5b880SConrad Meyer #define	IOAT_CHANERR_DERR		(1 << 3)
105cea5b880SConrad Meyer #define	IOAT_CHANERR_CHADDERR		(1 << 4)
106cea5b880SConrad Meyer #define	IOAT_CHANERR_CCMDERR		(1 << 5)
107cea5b880SConrad Meyer #define	IOAT_CHANERR_CUNCORERR		(1 << 6)
108cea5b880SConrad Meyer #define	IOAT_CHANERR_DUNCORERR		(1 << 7)
109cea5b880SConrad Meyer #define	IOAT_CHANERR_RDERR		(1 << 8)
110cea5b880SConrad Meyer #define	IOAT_CHANERR_WDERR		(1 << 9)
111cea5b880SConrad Meyer #define	IOAT_CHANERR_DCERR		(1 << 10)
112cea5b880SConrad Meyer #define	IOAT_CHANERR_DXSERR		(1 << 11)
113cea5b880SConrad Meyer #define	IOAT_CHANERR_CMPADDERR		(1 << 12)
114cea5b880SConrad Meyer #define	IOAT_CHANERR_INTCFGERR		(1 << 13)
115cea5b880SConrad Meyer #define	IOAT_CHANERR_SEDERR		(1 << 14)
116cea5b880SConrad Meyer #define	IOAT_CHANERR_UNAFFERR		(1 << 15)
117cea5b880SConrad Meyer #define	IOAT_CHANERR_CXPERR		(1 << 16)
118cea5b880SConrad Meyer /* Reserved.				(1 << 17) */
119cea5b880SConrad Meyer #define	IOAT_CHANERR_DCNTERR		(1 << 18)
120cea5b880SConrad Meyer #define	IOAT_CHANERR_DIFFERR		(1 << 19)
121cea5b880SConrad Meyer #define	IOAT_CHANERR_GTVERR		(1 << 20)
122cea5b880SConrad Meyer #define	IOAT_CHANERR_ATVERR		(1 << 21)
123cea5b880SConrad Meyer #define	IOAT_CHANERR_RTVERR		(1 << 22)
124cea5b880SConrad Meyer #define	IOAT_CHANERR_BBERR		(1 << 23)
125cea5b880SConrad Meyer #define	IOAT_CHANERR_RDIFFERR		(1 << 24)
126cea5b880SConrad Meyer #define	IOAT_CHANERR_RGTVERR		(1 << 25)
127cea5b880SConrad Meyer #define	IOAT_CHANERR_RATVERR		(1 << 26)
128cea5b880SConrad Meyer #define	IOAT_CHANERR_RRTVERR		(1 << 27)
129cea5b880SConrad Meyer 
13059acd4baSConrad Meyer #define	IOAT_CHANERR_STR \
13159acd4baSConrad Meyer     "\20\34RRTVERR\33RATVERR\32RGTVERR\31RDIFFERR\30BBERR\27RTVERR\26ATVERR" \
13259acd4baSConrad Meyer     "\25GTVERR\24DIFFERR\23DCNTERR\21CXPERR\20UNAFFERR\17SEDERR\16INTCFGERR" \
13359acd4baSConrad Meyer     "\15CMPADDERR\14DXSERR\13DCERR\12WDERR\11RDERR\10DUNCORERR\07CUNCORERR" \
13459acd4baSConrad Meyer     "\06CCMDERR\05CHADDERR\04DERR\03NDADDERR\02XDADDERR\01XSADDERR"
13559acd4baSConrad Meyer 
13659acd4baSConrad Meyer 
137e974f91cSConrad Meyer #define	IOAT_CFG_CHANERR_INT_OFFSET		0x180
138e974f91cSConrad Meyer #define	IOAT_CFG_CHANERRMASK_INT_OFFSET		0x184
139e974f91cSConrad Meyer 
140e974f91cSConrad Meyer #define	IOAT_MIN_ORDER			4
141e974f91cSConrad Meyer #define	IOAT_MAX_ORDER			16
142e974f91cSConrad Meyer 
143e974f91cSConrad Meyer #endif /* __IOAT_HW_H__ */
144