/*
 * 7435a0 IRQ header file autogenerated by update_bchp.pl
 * DO NOT EDIT THIS FILE BY HAND.
 *
 * Copyright (C) 2011 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	71
#define BRCM_IRQ_EHCI0_1	72
#define BRCM_IRQ_EHCI1_0	76
#define BRCM_IRQ_EHCI1_1	77
#define BRCM_IRQ_GENET_0_A	18
#define BRCM_IRQ_GENET_0_B	19
#define BRCM_IRQ_GENET_1_A	20
#define BRCM_IRQ_GENET_1_B	21
#define BRCM_IRQ_HIF		25
#define BRCM_IRQ_HIF_SPI	26
#define BRCM_IRQ_MOCA		33
#define BRCM_IRQ_OHCI0_0	73
#define BRCM_IRQ_OHCI0_1	74
#define BRCM_IRQ_OHCI1_0	78
#define BRCM_IRQ_OHCI1_1	79
#define BRCM_IRQ_PCIE_INTA	36
#define BRCM_IRQ_PCIE_INTB	37
#define BRCM_IRQ_PCIE_INTC	38
#define BRCM_IRQ_PCIE_INTD	39
#define BRCM_IRQ_SATA		46
#define BRCM_IRQ_SDIO0		48
#define BRCM_IRQ_SDIO1		49
#define BRCM_IRQ_STANDBY	55
#define BRCM_IRQ_UARTA		67
#define BRCM_IRQ_UARTB		68
#define BRCM_IRQ_UARTC		69
#define BRCM_IRQLIST_EHCI	{ 71, 72, 76, 77 }
#define BRCM_IRQLIST_OHCI	{ 73, 74, 78, 79 }

#endif /* _BRCMIRQ_H_ */
