xref: /freebsd/sys/contrib/alpine-hal/al_hal_pcie_interrupts.h (revision f4b37ed0f8b307b1f3f0f630ca725d68f1dff30d)
1*f4b37ed0SZbigniew Bodek /*-
2*f4b37ed0SZbigniew Bodek ********************************************************************************
3*f4b37ed0SZbigniew Bodek Copyright (C) 2015 Annapurna Labs Ltd.
4*f4b37ed0SZbigniew Bodek 
5*f4b37ed0SZbigniew Bodek This file may be licensed under the terms of the Annapurna Labs Commercial
6*f4b37ed0SZbigniew Bodek License Agreement.
7*f4b37ed0SZbigniew Bodek 
8*f4b37ed0SZbigniew Bodek Alternatively, this file can be distributed under the terms of the GNU General
9*f4b37ed0SZbigniew Bodek Public License V2 as published by the Free Software Foundation and can be
10*f4b37ed0SZbigniew Bodek found at http://www.gnu.org/licenses/gpl-2.0.html
11*f4b37ed0SZbigniew Bodek 
12*f4b37ed0SZbigniew Bodek Alternatively, redistribution and use in source and binary forms, with or
13*f4b37ed0SZbigniew Bodek without modification, are permitted provided that the following conditions are
14*f4b37ed0SZbigniew Bodek met:
15*f4b37ed0SZbigniew Bodek 
16*f4b37ed0SZbigniew Bodek     *     Redistributions of source code must retain the above copyright notice,
17*f4b37ed0SZbigniew Bodek this list of conditions and the following disclaimer.
18*f4b37ed0SZbigniew Bodek 
19*f4b37ed0SZbigniew Bodek     *     Redistributions in binary form must reproduce the above copyright
20*f4b37ed0SZbigniew Bodek notice, this list of conditions and the following disclaimer in
21*f4b37ed0SZbigniew Bodek the documentation and/or other materials provided with the
22*f4b37ed0SZbigniew Bodek distribution.
23*f4b37ed0SZbigniew Bodek 
24*f4b37ed0SZbigniew Bodek THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
25*f4b37ed0SZbigniew Bodek ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
26*f4b37ed0SZbigniew Bodek WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27*f4b37ed0SZbigniew Bodek DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
28*f4b37ed0SZbigniew Bodek ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
29*f4b37ed0SZbigniew Bodek (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30*f4b37ed0SZbigniew Bodek LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
31*f4b37ed0SZbigniew Bodek ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32*f4b37ed0SZbigniew Bodek (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33*f4b37ed0SZbigniew Bodek SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34*f4b37ed0SZbigniew Bodek 
35*f4b37ed0SZbigniew Bodek *******************************************************************************/
36*f4b37ed0SZbigniew Bodek 
37*f4b37ed0SZbigniew Bodek #ifndef _AL_HAL_PCIE_INTERRUPTS_H_
38*f4b37ed0SZbigniew Bodek #define _AL_HAL_PCIE_INTERRUPTS_H_
39*f4b37ed0SZbigniew Bodek 
40*f4b37ed0SZbigniew Bodek #include "al_hal_common.h"
41*f4b37ed0SZbigniew Bodek #include "al_hal_pcie.h"
42*f4b37ed0SZbigniew Bodek #include "al_hal_iofic.h"
43*f4b37ed0SZbigniew Bodek 
44*f4b37ed0SZbigniew Bodek /**
45*f4b37ed0SZbigniew Bodek  * @defgroup group_pcie_interrupts PCIe interrupts
46*f4b37ed0SZbigniew Bodek  * @ingroup grouppcie
47*f4b37ed0SZbigniew Bodek  *  @{
48*f4b37ed0SZbigniew Bodek  *  The PCIe interrupts HAL can be used to control PCIe unit interrupts.
49*f4b37ed0SZbigniew Bodek  *  There are 5 groups of interrupts: app group A, B, C, D and AXI.
50*f4b37ed0SZbigniew Bodek  *  Only 2 interrupts go from the pcie unit to the GIC:
51*f4b37ed0SZbigniew Bodek  *  1. Summary for all the int groups (AXI+APP CORE).
52*f4b37ed0SZbigniew Bodek  *  2. INTA assert/deassert (RC only).
53*f4b37ed0SZbigniew Bodek  *  For the specific GIC interrupt line, please check the architecture reference
54*f4b37ed0SZbigniew Bodek  *  manual.
55*f4b37ed0SZbigniew Bodek  *  The reset mask state of all interrupts is: Masked
56*f4b37ed0SZbigniew Bodek  *
57*f4b37ed0SZbigniew Bodek  * @file   al_hal_pcie_interrupts.h
58*f4b37ed0SZbigniew Bodek  *
59*f4b37ed0SZbigniew Bodek  */
60*f4b37ed0SZbigniew Bodek 
61*f4b37ed0SZbigniew Bodek /**
62*f4b37ed0SZbigniew Bodek  * PCIe interrupt groups
63*f4b37ed0SZbigniew Bodek  */
64*f4b37ed0SZbigniew Bodek enum al_pcie_int_group {
65*f4b37ed0SZbigniew Bodek 	AL_PCIE_INT_GRP_A,
66*f4b37ed0SZbigniew Bodek 	AL_PCIE_INT_GRP_B,
67*f4b37ed0SZbigniew Bodek 	AL_PCIE_INT_GRP_C, /* Rev3 only */
68*f4b37ed0SZbigniew Bodek 	AL_PCIE_INT_GRP_D, /* Rev3 only */
69*f4b37ed0SZbigniew Bodek 	AL_PCIE_INT_GRP_AXI_A,
70*f4b37ed0SZbigniew Bodek };
71*f4b37ed0SZbigniew Bodek 
72*f4b37ed0SZbigniew Bodek /**
73*f4b37ed0SZbigniew Bodek  * App group A interrupts mask - don't change
74*f4b37ed0SZbigniew Bodek  * All interrupts not listed below should be masked
75*f4b37ed0SZbigniew Bodek  */
76*f4b37ed0SZbigniew Bodek enum al_pcie_app_int_grp_a {
77*f4b37ed0SZbigniew Bodek 	/** [RC only] Deassert_INTD received */
78*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_DEASSERT_INTD = AL_BIT(0),
79*f4b37ed0SZbigniew Bodek 	/** [RC only] Deassert_INTC received */
80*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_DEASSERT_INTC = AL_BIT(1),
81*f4b37ed0SZbigniew Bodek 	/** [RC only] Deassert_INTB received */
82*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_DEASSERT_INTB = AL_BIT(2),
83*f4b37ed0SZbigniew Bodek 	/**
84*f4b37ed0SZbigniew Bodek 	 * [RC only] Deassert_INTA received - there's a didcated GIC interrupt
85*f4b37ed0SZbigniew Bodek 	 * line that reflects the status of ASSERT/DEASSERT of INTA
86*f4b37ed0SZbigniew Bodek 	 */
87*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_DEASSERT_INTA = AL_BIT(3),
88*f4b37ed0SZbigniew Bodek 	/** [RC only] Assert_INTD received */
89*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_ASSERT_INTD = AL_BIT(4),
90*f4b37ed0SZbigniew Bodek 	/** [RC only] Assert_INTC received */
91*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_ASSERT_INTC = AL_BIT(5),
92*f4b37ed0SZbigniew Bodek 	/** [RC only] Assert_INTB received */
93*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_ASSERT_INTB = AL_BIT(6),
94*f4b37ed0SZbigniew Bodek 	/**
95*f4b37ed0SZbigniew Bodek 	 * [RC only] Assert_INTA received - there's a didcated GIC interrupt
96*f4b37ed0SZbigniew Bodek 	 * line that reflects the status of ASSERT/DEASSERT of INTA
97*f4b37ed0SZbigniew Bodek 	 */
98*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_ASSERT_INTA = AL_BIT(7),
99*f4b37ed0SZbigniew Bodek 	/** [RC only] MSI Controller Interrupt */
100*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_MSI_CNTR_RCV_INT = AL_BIT(8),
101*f4b37ed0SZbigniew Bodek 	/** [EP only] MSI sent grant */
102*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_MSI_TRNS_GNT = AL_BIT(9),
103*f4b37ed0SZbigniew Bodek 	/** [RC only] System error detected  (ERR_COR, ERR_FATAL, ERR_NONFATAL) */
104*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_SYS_ERR_RC = AL_BIT(10),
105*f4b37ed0SZbigniew Bodek 	/** [EP only] Software initiates FLR on a Physical Function */
106*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_FLR_PF_ACTIVE = AL_BIT(11),
107*f4b37ed0SZbigniew Bodek 	/** [RC only] Root Error Command register assertion notification */
108*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_AER_RC_ERR = AL_BIT(12),
109*f4b37ed0SZbigniew Bodek 	/** [RC only] Root Error Command register assertion notification With MSI or MSIX enabled */
110*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_AER_RC_ERR_MSI = AL_BIT(13),
111*f4b37ed0SZbigniew Bodek 	/** [RC only] PME Status bit assertion in the Root Status register With INTA */
112*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_PME_INT = AL_BIT(15),
113*f4b37ed0SZbigniew Bodek 	/** [RC only] PME Status bit assertion in the Root Status register With MSI or MSIX enabled */
114*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_PME_MSI = AL_BIT(16),
115*f4b37ed0SZbigniew Bodek 	/** [RC/EP] The core assert link down event, whenever the link is going down */
116*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_LINK_DOWN = AL_BIT(21),
117*f4b37ed0SZbigniew Bodek 	/** [EP only] When the EP gets a command to shut down, signal the software to block any new TLP. */
118*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_PM_XTLH_BLOCK_TLP = AL_BIT(22),
119*f4b37ed0SZbigniew Bodek 	/** [RC/EP] PHY/MAC link up */
120*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_XMLH_LINK_UP = AL_BIT(23),
121*f4b37ed0SZbigniew Bodek 	/** [RC/EP] Data link up */
122*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_RDLH_LINK_UP = AL_BIT(24),
123*f4b37ed0SZbigniew Bodek 	/** [RC/EP] The LTSSM is in RCVRY_LOCK state. */
124*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_LTSSM_RCVRY_STATE = AL_BIT(25),
125*f4b37ed0SZbigniew Bodek 	/**
126*f4b37ed0SZbigniew Bodek 	 * [RC/EP] CFG write transaction to the configuration space by the RC peer
127*f4b37ed0SZbigniew Bodek 	 * For RC the int/ will be set from DBI write (internal SoC write)]
128*f4b37ed0SZbigniew Bodek 	 */
129*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_CFG_WR = AL_BIT(26),
130*f4b37ed0SZbigniew Bodek 	/** [EP only] CFG access in EP mode */
131*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_CFG_ACCESS = AL_BIT(31),
132*f4b37ed0SZbigniew Bodek };
133*f4b37ed0SZbigniew Bodek 
134*f4b37ed0SZbigniew Bodek /**
135*f4b37ed0SZbigniew Bodek  * App group B interrupts mask - don't change
136*f4b37ed0SZbigniew Bodek  * All interrupts not listed below should be masked
137*f4b37ed0SZbigniew Bodek  */
138*f4b37ed0SZbigniew Bodek enum al_pcie_app_int_grp_b {
139*f4b37ed0SZbigniew Bodek 	/** [RC only] PM_PME Message received */
140*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_GRP_B_PM_PME_MSG_RCVD = AL_BIT(0),
141*f4b37ed0SZbigniew Bodek 	/** [RC only] PME_TO_Ack Message received */
142*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_GRP_B_PME_TO_ACK_MSG_RCVD = AL_BIT(1),
143*f4b37ed0SZbigniew Bodek 	/** [EP only] PME_Turn_Off Message received */
144*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_GRP_B_PME_TURN_OFF_MSG_RCVD = AL_BIT(2),
145*f4b37ed0SZbigniew Bodek 	/** [RC only] ERR_CORR Message received */
146*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_GRP_B_CORR_ERR_MSG_RCVD = AL_BIT(3),
147*f4b37ed0SZbigniew Bodek 	/** [RC only] ERR_NONFATAL Message received */
148*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_GRP_B_NON_FTL_ERR_MSG_RCVD = AL_BIT(4),
149*f4b37ed0SZbigniew Bodek 	/** [RC only] ERR_FATAL Message received */
150*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_GRP_B_FTL_ERR_MSG_RCVD = AL_BIT(5),
151*f4b37ed0SZbigniew Bodek 	/**
152*f4b37ed0SZbigniew Bodek 	 * [RC/EP] Vendor Defined Message received
153*f4b37ed0SZbigniew Bodek 	 * Asserted when a vevdor message is received (with no data), buffers 2
154*f4b37ed0SZbigniew Bodek 	 * messages only, and latch the headers in registers
155*f4b37ed0SZbigniew Bodek 	 */
156*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_GRP_B_VNDR_MSG_A_RCVD = AL_BIT(6),
157*f4b37ed0SZbigniew Bodek 	/**
158*f4b37ed0SZbigniew Bodek 	 * [RC/EP] Vendor Defined Message received
159*f4b37ed0SZbigniew Bodek 	 * Asserted when a vevdor message is received (with no data), buffers 2
160*f4b37ed0SZbigniew Bodek 	 * messages only, and latch the headers in registers
161*f4b37ed0SZbigniew Bodek 	 */
162*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_GRP_B_VNDR_MSG_B_RCVD = AL_BIT(7),
163*f4b37ed0SZbigniew Bodek 	/** [EP only] Link Autonomous Bandwidth Status is updated */
164*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_GRP_B_LNK_BW_UPD = AL_BIT(12),
165*f4b37ed0SZbigniew Bodek 	/** [EP only] Link Equalization Request bit in the Link Status 2 Register has been set */
166*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_GRP_B_LNK_EQ_REQ = AL_BIT(13),
167*f4b37ed0SZbigniew Bodek 	/** [RC/EP] OB Vendor message request is granted by the PCIe core */
168*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_GRP_B_OB_VNDR_MSG_REQ_GRNT = AL_BIT(14),
169*f4b37ed0SZbigniew Bodek 	/** [RC only] CPL timeout from the PCIe core indiication */
170*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_GRP_B_CPL_TO = AL_BIT(15),
171*f4b37ed0SZbigniew Bodek 	/** [RC/EP] Slave Response Composer Lookup Error */
172*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_GRP_B_SLV_RESP_COMP_LKUP_ERR = AL_BIT(16),
173*f4b37ed0SZbigniew Bodek 	/** [RC/EP] Parity Error */
174*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_GRP_B_PARITY_ERR = AL_BIT(17),
175*f4b37ed0SZbigniew Bodek 	/** [EP only] Speed change request */
176*f4b37ed0SZbigniew Bodek 	AL_PCIE_APP_INT_GRP_B_SPEED_CHANGE = AL_BIT(31),
177*f4b37ed0SZbigniew Bodek };
178*f4b37ed0SZbigniew Bodek 
179*f4b37ed0SZbigniew Bodek /**
180*f4b37ed0SZbigniew Bodek  * AXI interrupts mask - don't change
181*f4b37ed0SZbigniew Bodek  * These are internal errors that can happen on the internal chip interface
182*f4b37ed0SZbigniew Bodek  * between the PCIe port and the I/O Fabric over the AXI bus. The notion of
183*f4b37ed0SZbigniew Bodek  * master and slave refer to the PCIe port master interface towards the I/O
184*f4b37ed0SZbigniew Bodek  * Fabric (i.e. for inbound PCIe writes/reads toward the I/O Fabric), while the
185*f4b37ed0SZbigniew Bodek  * slave interface refer to the I/O Fabric to PCIe port interface where the
186*f4b37ed0SZbigniew Bodek  * internal chip DMAs and CPU cluster is initiating transactions.
187*f4b37ed0SZbigniew Bodek  * All interrupts not listed below should be masked.
188*f4b37ed0SZbigniew Bodek  */
189*f4b37ed0SZbigniew Bodek enum al_pcie_axi_int {
190*f4b37ed0SZbigniew Bodek 	/** [RC/EP] Master Response Composer Lookup Error */
191*f4b37ed0SZbigniew Bodek 	AL_PCIE_AXI_INT_MSTR_RESP_COMP_LKUP_ERR = AL_BIT(0),
192*f4b37ed0SZbigniew Bodek 	/** [RC/EP] PARITY ERROR on the master data read channel */
193*f4b37ed0SZbigniew Bodek 	AL_PCIE_AXI_INT_PARITY_ERR_MSTR_DATA_RD_CHNL = AL_BIT(2),
194*f4b37ed0SZbigniew Bodek 	/** [RC/EP] PARITY ERROR on the slave addr read channel */
195*f4b37ed0SZbigniew Bodek 	AL_PCIE_AXI_INT_PARITY_ERR_SLV_ADDR_RD_CHNL = AL_BIT(3),
196*f4b37ed0SZbigniew Bodek 	/** [RC/EP] PARITY ERROR on the slave addr write channel */
197*f4b37ed0SZbigniew Bodek 	AL_PCIE_AXI_INT_PARITY_ERR_SLV_ADDR_WR_CHNL = AL_BIT(4),
198*f4b37ed0SZbigniew Bodek 	/** [RC/EP] PARITY ERROR on the slave data write channel */
199*f4b37ed0SZbigniew Bodek 	AL_PCIE_AXI_INT_PARITY_ERR_SLV_DATA_WR_CHNL = AL_BIT(5),
200*f4b37ed0SZbigniew Bodek 	/** [RC only] Software error: ECAM write request with invalid bus number */
201*f4b37ed0SZbigniew Bodek 	AL_PCIE_AXI_INT_ECAM_WR_REQ_INVLD_BUS_NUM = AL_BIT(7),
202*f4b37ed0SZbigniew Bodek 	/** [RC only] Software error: ECAM read request with invalid bus number */
203*f4b37ed0SZbigniew Bodek 	AL_PCIE_AXI_INT_ECAM_RD_REQ_INVLD_BUS_NUM = AL_BIT(8),
204*f4b37ed0SZbigniew Bodek 	/** [RC/EP] Read AXI completion has ERROR */
205*f4b37ed0SZbigniew Bodek 	AL_PCIE_AXI_INT_RD_AXI_COMPL_ERR = AL_BIT(11),
206*f4b37ed0SZbigniew Bodek 	/** [RC/EP] Write AXI completion has ERROR */
207*f4b37ed0SZbigniew Bodek 	AL_PCIE_AXI_INT_WR_AXI_COMPL_ERR = AL_BIT(12),
208*f4b37ed0SZbigniew Bodek 	/** [RC/EP] Read AXI completion has timed out */
209*f4b37ed0SZbigniew Bodek 	AL_PCIE_AXI_INT_RD_AXI_COMPL_TO = AL_BIT(13),
210*f4b37ed0SZbigniew Bodek 	/** [RC/EP] Write AXI completion has timed out */
211*f4b37ed0SZbigniew Bodek 	AL_PCIE_AXI_INT_WR_AXI_COMPL_TO = AL_BIT(14),
212*f4b37ed0SZbigniew Bodek 	/** [RC/EP] Parity error AXI domain */
213*f4b37ed0SZbigniew Bodek 	AL_PCIE_AXI_INT_AXI_DOM_PARITY_ERR = AL_BIT(15),
214*f4b37ed0SZbigniew Bodek 	/** [RC/EP] POS error interrupt */
215*f4b37ed0SZbigniew Bodek 	AL_PCIE_AXI_INT_POS_ERR = AL_BIT(16),
216*f4b37ed0SZbigniew Bodek };
217*f4b37ed0SZbigniew Bodek 
218*f4b37ed0SZbigniew Bodek /**
219*f4b37ed0SZbigniew Bodek  * @brief   Initialize and configure PCIe controller interrupts
220*f4b37ed0SZbigniew Bodek  * 	    Doesn't change the mask state of the interrupts
221*f4b37ed0SZbigniew Bodek  * 	    The reset mask state of all interrupts is: Masked
222*f4b37ed0SZbigniew Bodek  *
223*f4b37ed0SZbigniew Bodek  * @param   pcie_port pcie port handle
224*f4b37ed0SZbigniew Bodek  */
225*f4b37ed0SZbigniew Bodek void al_pcie_ints_config(struct al_pcie_port *pcie_port);
226*f4b37ed0SZbigniew Bodek 
227*f4b37ed0SZbigniew Bodek /**
228*f4b37ed0SZbigniew Bodek  * Unmask PCIe app group interrupts
229*f4b37ed0SZbigniew Bodek  * @param  pcie_port pcie_port pcie port handle
230*f4b37ed0SZbigniew Bodek  * @param  int_group interrupt group
231*f4b37ed0SZbigniew Bodek  * @param  int_mask  int_mask interrupts to unmask ('1' to unmask)
232*f4b37ed0SZbigniew Bodek  */
233*f4b37ed0SZbigniew Bodek void al_pcie_app_int_grp_unmask(
234*f4b37ed0SZbigniew Bodek 	struct al_pcie_port *pcie_port,
235*f4b37ed0SZbigniew Bodek 	enum al_pcie_int_group int_group,
236*f4b37ed0SZbigniew Bodek 	uint32_t int_mask);
237*f4b37ed0SZbigniew Bodek 
238*f4b37ed0SZbigniew Bodek /**
239*f4b37ed0SZbigniew Bodek  * Mask PCIe app group interrupts
240*f4b37ed0SZbigniew Bodek  * @param  pcie_port pcie_port pcie port handle
241*f4b37ed0SZbigniew Bodek  * @param  int_group interrupt group
242*f4b37ed0SZbigniew Bodek  * @param  int_mask  int_mask interrupts to unmask ('1' to mask)
243*f4b37ed0SZbigniew Bodek  */
244*f4b37ed0SZbigniew Bodek void al_pcie_app_int_grp_mask(
245*f4b37ed0SZbigniew Bodek 	struct al_pcie_port *pcie_port,
246*f4b37ed0SZbigniew Bodek 	enum al_pcie_int_group int_group,
247*f4b37ed0SZbigniew Bodek 	uint32_t int_mask);
248*f4b37ed0SZbigniew Bodek 
249*f4b37ed0SZbigniew Bodek /**
250*f4b37ed0SZbigniew Bodek  * Clear the PCIe app group interrupt cause
251*f4b37ed0SZbigniew Bodek  * @param  pcie_port pcie port handle
252*f4b37ed0SZbigniew Bodek  * @param  int_group interrupt group
253*f4b37ed0SZbigniew Bodek  * @param  int_cause interrupt cause
254*f4b37ed0SZbigniew Bodek  */
255*f4b37ed0SZbigniew Bodek void al_pcie_app_int_grp_cause_clear(
256*f4b37ed0SZbigniew Bodek 	struct al_pcie_port *pcie_port,
257*f4b37ed0SZbigniew Bodek 	enum al_pcie_int_group int_group,
258*f4b37ed0SZbigniew Bodek 	uint32_t int_cause);
259*f4b37ed0SZbigniew Bodek 
260*f4b37ed0SZbigniew Bodek /**
261*f4b37ed0SZbigniew Bodek  * Read PCIe app group interrupt cause
262*f4b37ed0SZbigniew Bodek  * @param  pcie_port pcie port handle
263*f4b37ed0SZbigniew Bodek  * @param  int_group interrupt group
264*f4b37ed0SZbigniew Bodek  * @return interrupt cause or 0 in case the group is not supported
265*f4b37ed0SZbigniew Bodek  */
266*f4b37ed0SZbigniew Bodek uint32_t al_pcie_app_int_grp_cause_read(
267*f4b37ed0SZbigniew Bodek 	struct al_pcie_port *pcie_port,
268*f4b37ed0SZbigniew Bodek 	enum al_pcie_int_group int_group);
269*f4b37ed0SZbigniew Bodek 
270*f4b37ed0SZbigniew Bodek #endif
271*f4b37ed0SZbigniew Bodek /** @} end of group_pcie_interrupts group */
272