| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290 | #ifndef __ASM_MACH_INTC_H#define __ASM_MACH_INTC_H#include <linux/sh_intc.h>#define INTC_IRQ_PINS_ENUM_16L(p)				\	p ## _IRQ0, p ## _IRQ1, p ## _IRQ2, p ## _IRQ3,		\	p ## _IRQ4, p ## _IRQ5, p ## _IRQ6, p ## _IRQ7,		\	p ## _IRQ8, p ## _IRQ9, p ## _IRQ10, p ## _IRQ11,	\	p ## _IRQ12, p ## _IRQ13, p ## _IRQ14, p ## _IRQ15#define INTC_IRQ_PINS_ENUM_16H(p)				\	p ## _IRQ16, p ## _IRQ17, p ## _IRQ18, p ## _IRQ19,	\	p ## _IRQ20, p ## _IRQ21, p ## _IRQ22, p ## _IRQ23,	\	p ## _IRQ24, p ## _IRQ25, p ## _IRQ26, p ## _IRQ27,	\	p ## _IRQ28, p ## _IRQ29, p ## _IRQ30, p ## _IRQ31#define INTC_IRQ_PINS_VECT_16L(p, vect)				\	vect(p ## _IRQ0, 0x0200), vect(p ## _IRQ1, 0x0220),	\	vect(p ## _IRQ2, 0x0240), vect(p ## _IRQ3, 0x0260),	\	vect(p ## _IRQ4, 0x0280), vect(p ## _IRQ5, 0x02a0),	\	vect(p ## _IRQ6, 0x02c0), vect(p ## _IRQ7, 0x02e0),	\	vect(p ## _IRQ8, 0x0300), vect(p ## _IRQ9, 0x0320),	\	vect(p ## _IRQ10, 0x0340), vect(p ## _IRQ11, 0x0360),	\	vect(p ## _IRQ12, 0x0380), vect(p ## _IRQ13, 0x03a0),	\	vect(p ## _IRQ14, 0x03c0), vect(p ## _IRQ15, 0x03e0)#define INTC_IRQ_PINS_VECT_16H(p, vect)				\	vect(p ## _IRQ16, 0x3200), vect(p ## _IRQ17, 0x3220),	\	vect(p ## _IRQ18, 0x3240), vect(p ## _IRQ19, 0x3260),	\	vect(p ## _IRQ20, 0x3280), vect(p ## _IRQ21, 0x32a0),	\	vect(p ## _IRQ22, 0x32c0), vect(p ## _IRQ23, 0x32e0),	\	vect(p ## _IRQ24, 0x3300), vect(p ## _IRQ25, 0x3320),	\	vect(p ## _IRQ26, 0x3340), vect(p ## _IRQ27, 0x3360),	\	vect(p ## _IRQ28, 0x3380), vect(p ## _IRQ29, 0x33a0),	\	vect(p ## _IRQ30, 0x33c0), vect(p ## _IRQ31, 0x33e0)#define INTC_IRQ_PINS_MASK_16L(p, base)					\	{ base + 0x40, base + 0x60, 8, /* INTMSK00A / INTMSKCLR00A */	\	  { p ## _IRQ0, p ## _IRQ1, p ## _IRQ2, p ## _IRQ3,		\	    p ## _IRQ4, p ## _IRQ5, p ## _IRQ6, p ## _IRQ7 } },		\	{ base + 0x44, base + 0x64, 8, /* INTMSK10A / INTMSKCLR10A */	\	  { p ## _IRQ8, p ## _IRQ9, p ## _IRQ10, p ## _IRQ11,		\	    p ## _IRQ12, p ## _IRQ13, p ## _IRQ14, p ## _IRQ15 } }#define INTC_IRQ_PINS_MASK_16H(p, base)					\	{ base + 0x48, base + 0x68, 8, /* INTMSK20A / INTMSKCLR20A */	\	  { p ## _IRQ16, p ## _IRQ17, p ## _IRQ18, p ## _IRQ19,		\	    p ## _IRQ20, p ## _IRQ21, p ## _IRQ22, p ## _IRQ23 } },	\	{ base + 0x4c, base + 0x6c, 8, /* INTMSK30A / INTMSKCLR30A */	\	  { p ## _IRQ24, p ## _IRQ25, p ## _IRQ26, p ## _IRQ27,		\	    p ## _IRQ28, p ## _IRQ29, p ## _IRQ30, p ## _IRQ31 } }#define INTC_IRQ_PINS_PRIO_16L(p, base)					\	{ base + 0x10, 0, 32, 4, /* INTPRI00A */			\	  { p ## _IRQ0, p ## _IRQ1, p ## _IRQ2, p ## _IRQ3,		\	    p ## _IRQ4, p ## _IRQ5, p ## _IRQ6, p ## _IRQ7 } },		\	{ base + 0x14, 0, 32, 4, /* INTPRI10A */			\	  { p ## _IRQ8, p ## _IRQ9, p ## _IRQ10, p ## _IRQ11,		\	    p ## _IRQ12, p ## _IRQ13, p ## _IRQ14, p ## _IRQ15 } }#define INTC_IRQ_PINS_PRIO_16H(p, base)					\	{ base + 0x18, 0, 32, 4, /* INTPRI20A */			\	  { p ## _IRQ16, p ## _IRQ17, p ## _IRQ18, p ## _IRQ19,		\	    p ## _IRQ20, p ## _IRQ21, p ## _IRQ22, p ## _IRQ23 } },	\	{ base + 0x1c, 0, 32, 4, /* INTPRI30A */			\	  { p ## _IRQ24, p ## _IRQ25, p ## _IRQ26, p ## _IRQ27,		\	    p ## _IRQ28, p ## _IRQ29, p ## _IRQ30, p ## _IRQ31 } }#define INTC_IRQ_PINS_SENSE_16L(p, base)				\	{ base + 0x00, 32, 4, /* ICR1A */				\	  { p ## _IRQ0, p ## _IRQ1, p ## _IRQ2, p ## _IRQ3,		\	    p ## _IRQ4, p ## _IRQ5, p ## _IRQ6, p ## _IRQ7 } },		\	{ base + 0x04, 32, 4, /* ICR2A */				\	  { p ## _IRQ8, p ## _IRQ9, p ## _IRQ10, p ## _IRQ11,		\	    p ## _IRQ12, p ## _IRQ13, p ## _IRQ14, p ## _IRQ15 } }#define INTC_IRQ_PINS_SENSE_16H(p, base)				\	{ base + 0x08, 32, 4, /* ICR3A */				\	  { p ## _IRQ16, p ## _IRQ17, p ## _IRQ18, p ## _IRQ19,		\	    p ## _IRQ20, p ## _IRQ21, p ## _IRQ22, p ## _IRQ23 } },	\	{ base + 0x0c, 32, 4, /* ICR4A */				\	  { p ## _IRQ24, p ## _IRQ25, p ## _IRQ26, p ## _IRQ27,		\	    p ## _IRQ28, p ## _IRQ29, p ## _IRQ30, p ## _IRQ31 } }#define INTC_IRQ_PINS_ACK_16L(p, base)					\	{ base + 0x20, 0, 8, /* INTREQ00A */				\	  { p ## _IRQ0, p ## _IRQ1, p ## _IRQ2, p ## _IRQ3,		\	    p ## _IRQ4, p ## _IRQ5, p ## _IRQ6, p ## _IRQ7 } },		\	{ base + 0x24, 0, 8, /* INTREQ10A */				\	  { p ## _IRQ8, p ## _IRQ9, p ## _IRQ10, p ## _IRQ11,		\	    p ## _IRQ12, p ## _IRQ13, p ## _IRQ14, p ## _IRQ15 } }#define INTC_IRQ_PINS_ACK_16H(p, base)					\	{ base + 0x28, 0, 8, /* INTREQ20A */				\	  { p ## _IRQ16, p ## _IRQ17, p ## _IRQ18, p ## _IRQ19,		\	    p ## _IRQ20, p ## _IRQ21, p ## _IRQ22, p ## _IRQ23 } },	\	{ base + 0x2c, 0, 8, /* INTREQ30A */				\	  { p ## _IRQ24, p ## _IRQ25, p ## _IRQ26, p ## _IRQ27,		\	    p ## _IRQ28, p ## _IRQ29, p ## _IRQ30, p ## _IRQ31 } }#define INTC_IRQ_PINS_16(p, base, vect, str)				\									\static struct resource p ## _resources[] __initdata = {			\	[0] = {								\		.start	= base,						\		.end	= base + 0x64,					\		.flags	= IORESOURCE_MEM,				\	},								\};									\									\enum {									\	p ## _UNUSED = 0,						\	INTC_IRQ_PINS_ENUM_16L(p),					\};									\									\static struct intc_vect p ## _vectors[] __initdata = {			\	INTC_IRQ_PINS_VECT_16L(p, vect),				\};									\									\static struct intc_mask_reg p ## _mask_registers[] __initdata = {	\	INTC_IRQ_PINS_MASK_16L(p, base),				\};									\									\static struct intc_prio_reg p ## _prio_registers[] __initdata = {	\	INTC_IRQ_PINS_PRIO_16L(p, base),				\};									\									\static struct intc_sense_reg p ## _sense_registers[] __initdata = {	\	INTC_IRQ_PINS_SENSE_16L(p, base),				\};									\									\static struct intc_mask_reg p ## _ack_registers[] __initdata = {	\	INTC_IRQ_PINS_ACK_16L(p, base),					\};									\									\static struct intc_desc p ## _desc __initdata = {			\	.name = str,							\	.resource = p ## _resources,					\	.num_resources = ARRAY_SIZE(p ## _resources),			\	.hw = INTC_HW_DESC(p ## _vectors, NULL,				\			     p ## _mask_registers, p ## _prio_registers, \			     p ## _sense_registers, p ## _ack_registers) \}#define INTC_IRQ_PINS_16H(p, base, vect, str)				\									\static struct resource p ## _resources[] __initdata = {			\	[0] = {								\		.start	= base,						\		.end	= base + 0x64,					\		.flags	= IORESOURCE_MEM,				\	},								\};									\									\enum {									\	p ## _UNUSED = 0,						\	INTC_IRQ_PINS_ENUM_16H(p),					\};									\									\static struct intc_vect p ## _vectors[] __initdata = {			\	INTC_IRQ_PINS_VECT_16H(p, vect),				\};									\									\static struct intc_mask_reg p ## _mask_registers[] __initdata = {	\	INTC_IRQ_PINS_MASK_16H(p, base),				\};									\									\static struct intc_prio_reg p ## _prio_registers[] __initdata = {	\	INTC_IRQ_PINS_PRIO_16H(p, base),				\};									\									\static struct intc_sense_reg p ## _sense_registers[] __initdata = {	\	INTC_IRQ_PINS_SENSE_16H(p, base),				\};									\									\static struct intc_mask_reg p ## _ack_registers[] __initdata = {	\	INTC_IRQ_PINS_ACK_16H(p, base),					\};									\									\static struct intc_desc p ## _desc __initdata = {			\	.name = str,							\	.resource = p ## _resources,					\	.num_resources = ARRAY_SIZE(p ## _resources),			\	.hw = INTC_HW_DESC(p ## _vectors, NULL,				\			     p ## _mask_registers, p ## _prio_registers, \			     p ## _sense_registers, p ## _ack_registers) \}#define INTC_IRQ_PINS_32(p, base, vect, str)				\									\static struct resource p ## _resources[] __initdata = {			\	[0] = {								\		.start	= base,						\		.end	= base + 0x6c,					\		.flags	= IORESOURCE_MEM,				\	},								\};									\									\enum {									\	p ## _UNUSED = 0,						\	INTC_IRQ_PINS_ENUM_16L(p),					\	INTC_IRQ_PINS_ENUM_16H(p),					\};									\									\static struct intc_vect p ## _vectors[] __initdata = {			\	INTC_IRQ_PINS_VECT_16L(p, vect),				\	INTC_IRQ_PINS_VECT_16H(p, vect),				\};									\									\static struct intc_mask_reg p ## _mask_registers[] __initdata = {	\	INTC_IRQ_PINS_MASK_16L(p, base),				\	INTC_IRQ_PINS_MASK_16H(p, base),				\};									\									\static struct intc_prio_reg p ## _prio_registers[] __initdata = {	\	INTC_IRQ_PINS_PRIO_16L(p, base),				\	INTC_IRQ_PINS_PRIO_16H(p, base),				\};									\									\static struct intc_sense_reg p ## _sense_registers[] __initdata = {	\	INTC_IRQ_PINS_SENSE_16L(p, base),				\	INTC_IRQ_PINS_SENSE_16H(p, base),				\};									\									\static struct intc_mask_reg p ## _ack_registers[] __initdata = {	\	INTC_IRQ_PINS_ACK_16L(p, base),					\	INTC_IRQ_PINS_ACK_16H(p, base),					\};									\									\static struct intc_desc p ## _desc __initdata = {			\	.name = str,							\	.resource = p ## _resources,					\	.num_resources = ARRAY_SIZE(p ## _resources),			\	.hw = INTC_HW_DESC(p ## _vectors, NULL,				\			     p ## _mask_registers, p ## _prio_registers, \			     p ## _sense_registers, p ## _ack_registers) \}#define INTC_PINT_E_EMPTY#define INTC_PINT_E_NONE 0, 0, 0, 0, 0, 0, 0, 0,#define INTC_PINT_E(p)							\	PINT ## p ## 0, PINT ## p ## 1, PINT ## p ## 2, PINT ## p ## 3,	\	PINT ## p ## 4, PINT ## p ## 5, PINT ## p ## 6, PINT ## p ## 7,#define INTC_PINT_V_NONE#define INTC_PINT_V(p, vect)					\	vect(PINT ## p ## 0, 0), vect(PINT ## p ## 1, 1),	\	vect(PINT ## p ## 2, 2), vect(PINT ## p ## 3, 3),	\	vect(PINT ## p ## 4, 4), vect(PINT ## p ## 5, 5),	\	vect(PINT ## p ## 6, 6), vect(PINT ## p ## 7, 7),#define INTC_PINT(p, mask_reg, sense_base, str,				\	enums_1, enums_2, enums_3, enums_4,				\	vect_1, vect_2, vect_3, vect_4,					\	mask_a, mask_b, mask_c, mask_d,					\	sense_a, sense_b, sense_c, sense_d)				\									\enum {									\	PINT ## p ## _UNUSED = 0,					\	enums_1 enums_2 enums_3 enums_4 				\};									\									\static struct intc_vect p ## _vectors[] __initdata = {			\	vect_1 vect_2 vect_3 vect_4					\};									\									\static struct intc_mask_reg p ## _mask_registers[] __initdata = {	\	{ mask_reg, 0, 32, /* PINTER */					\	  { mask_a mask_b mask_c mask_d } }				\};									\									\static struct intc_sense_reg p ## _sense_registers[] __initdata = {	\	{ sense_base + 0x00, 16, 2, /* PINTCR */			\	  { sense_a } },						\	{ sense_base + 0x04, 16, 2, /* PINTCR */			\	  { sense_b } },						\	{ sense_base + 0x08, 16, 2, /* PINTCR */			\	  { sense_c } },						\	{ sense_base + 0x0c, 16, 2, /* PINTCR */			\	  { sense_d } },						\};									\									\static struct intc_desc p ## _desc __initdata = {			\	.name = str,							\	.hw = INTC_HW_DESC(p ## _vectors, NULL,				\			     p ## _mask_registers, NULL,		\			     p ## _sense_registers, NULL),		\}#endif  /* __ASM_MACH_INTC_H */
 |