/*
 * 7445a0 IRQ header file autogenerated by update_bchp.pl
 * DO NOT EDIT THIS FILE BY HAND.
 *
 * Copyright (C) 2012 Broadcom Corporation
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */

#ifndef _BRCMIRQ_H_
#define _BRCMIRQ_H_

#define BRCM_IRQ_EHCI0_0	80
#define BRCM_IRQ_EHCI0_1	81
#define BRCM_IRQ_EHCI1_0	87
#define BRCM_IRQ_EHCI1_1	88
#define BRCM_IRQ_GENET_0_A	21
#define BRCM_IRQ_GENET_0_B	22
#define BRCM_IRQ_GENET_1_A	23
#define BRCM_IRQ_GENET_1_B	24
#define BRCM_IRQ_HIF		33
#define BRCM_IRQ_HIF_SPI	34
#define BRCM_IRQ_MOCA		30
#define BRCM_IRQ_OHCI0_0	82
#define BRCM_IRQ_OHCI0_1	83
#define BRCM_IRQ_OHCI1_0	89
#define BRCM_IRQ_OHCI1_1	90
#define BRCM_IRQ_PCIE_INTA	48
#define BRCM_IRQ_PCIE_INTB	49
#define BRCM_IRQ_PCIE_INTC	50
#define BRCM_IRQ_PCIE_INTD	51
#define BRCM_IRQ_SATA		31
#define BRCM_IRQ_SDIO0		39
#define BRCM_IRQ_SDIO1		40
#define BRCM_IRQ_STANDBY	65
#define BRCM_IRQ_UARTA		76
#define BRCM_IRQ_UARTB		77
#define BRCM_IRQ_UARTC		78
#define BRCM_IRQLIST_EHCI	{ 80, 81, 87, 88 }
#define BRCM_IRQLIST_OHCI	{ 82, 83, 89, 90 }

#endif /* _BRCMIRQ_H_ */
