19dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#ifndef _VME_PIO2_H_
29dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define _VME_PIO2_H_
39dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
49dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CARDS_MAX			32
59dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
69dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_VARIANT_LENGTH		5
79dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
89dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_NUM_CHANNELS		32
99dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_NUM_IRQS			11
109dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_NUM_CNTRS			6
119dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
129dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_SIZE			0x40
139dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
149dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_DATA0			0x0
159dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_DATA1			0x1
169dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_DATA2			0x2
179dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_DATA3			0x3
189dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
199dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welchstatic const int PIO2_REGS_DATA[4] = { PIO2_REGS_DATA0, PIO2_REGS_DATA1,
209dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_REGS_DATA2, PIO2_REGS_DATA3 };
219dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
229dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_INT_STAT0		0x8
239dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_INT_STAT1		0x9
249dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_INT_STAT2		0xa
259dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_INT_STAT3		0xb
269dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
279dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welchstatic const int PIO2_REGS_INT_STAT[4] = { PIO2_REGS_INT_STAT0,
289dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_REGS_INT_STAT1,
299dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_REGS_INT_STAT2,
309dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_REGS_INT_STAT3 };
319dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
329dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_INT_STAT_CNTR		0xc
339dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_INT_MASK0		0x10
349dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_INT_MASK1		0x11
359dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_INT_MASK2		0x12
369dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_INT_MASK3		0x13
379dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_INT_MASK4		0x14
389dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_INT_MASK5		0x15
399dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_INT_MASK6		0x16
409dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_INT_MASK7		0x17
419dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
429dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welchstatic const int PIO2_REGS_INT_MASK[8] = { PIO2_REGS_INT_MASK0,
439dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_REGS_INT_MASK1,
449dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_REGS_INT_MASK2,
459dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_REGS_INT_MASK3,
469dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_REGS_INT_MASK4,
479dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_REGS_INT_MASK5,
489dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_REGS_INT_MASK6,
499dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_REGS_INT_MASK7 };
509dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
519dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
529dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
539dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_CTRL			0x18
549dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_VME_VECTOR		0x19
559dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_CNTR0			0x20
569dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_CNTR1			0x22
579dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_CNTR2			0x24
589dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_CTRL_WRD0		0x26
599dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_CNTR3			0x28
609dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_CNTR4			0x2a
619dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_CNTR5			0x2c
629dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_CTRL_WRD1		0x2e
639dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
649dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_REGS_ID			0x30
659dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
669dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
679dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch/* PIO2_REGS_DATAx (0x0 - 0x3) */
689dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
699dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welchstatic const int PIO2_CHANNEL_BANK[32] = { 0, 0, 0, 0, 0, 0, 0, 0,
709dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					1, 1, 1, 1, 1, 1, 1, 1,
719dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					2, 2, 2, 2, 2, 2, 2, 2,
729dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					3, 3, 3, 3, 3, 3, 3, 3 };
739dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
749dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL0_BIT		(1 << 0)
759dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL1_BIT		(1 << 1)
769dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL2_BIT		(1 << 2)
779dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL3_BIT		(1 << 3)
789dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL4_BIT		(1 << 4)
799dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL5_BIT		(1 << 5)
809dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL6_BIT		(1 << 6)
819dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL7_BIT		(1 << 7)
829dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL8_BIT		(1 << 0)
839dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL9_BIT		(1 << 1)
849dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL10_BIT		(1 << 2)
859dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL11_BIT		(1 << 3)
869dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL12_BIT		(1 << 4)
879dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL13_BIT		(1 << 5)
889dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL14_BIT		(1 << 6)
899dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL15_BIT		(1 << 7)
909dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL16_BIT		(1 << 0)
919dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL17_BIT		(1 << 1)
929dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL18_BIT		(1 << 2)
939dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL19_BIT		(1 << 3)
949dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL20_BIT		(1 << 4)
959dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL21_BIT		(1 << 5)
969dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL22_BIT		(1 << 6)
979dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL23_BIT		(1 << 7)
989dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL24_BIT		(1 << 0)
999dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL25_BIT		(1 << 1)
1009dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL26_BIT		(1 << 2)
1019dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL27_BIT		(1 << 3)
1029dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL28_BIT		(1 << 4)
1039dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL29_BIT		(1 << 5)
1049dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL30_BIT		(1 << 6)
1059dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CHANNEL31_BIT		(1 << 7)
1069dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
1079dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welchstatic const int PIO2_CHANNEL_BIT[32] = { PIO2_CHANNEL0_BIT, PIO2_CHANNEL1_BIT,
1089dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_CHANNEL2_BIT, PIO2_CHANNEL3_BIT,
1099dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_CHANNEL4_BIT, PIO2_CHANNEL5_BIT,
1109dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_CHANNEL6_BIT, PIO2_CHANNEL7_BIT,
1119dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_CHANNEL8_BIT, PIO2_CHANNEL9_BIT,
1129dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_CHANNEL10_BIT, PIO2_CHANNEL11_BIT,
1139dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_CHANNEL12_BIT, PIO2_CHANNEL13_BIT,
1149dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_CHANNEL14_BIT, PIO2_CHANNEL15_BIT,
1159dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_CHANNEL16_BIT, PIO2_CHANNEL17_BIT,
1169dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_CHANNEL18_BIT, PIO2_CHANNEL19_BIT,
1179dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_CHANNEL20_BIT, PIO2_CHANNEL21_BIT,
1189dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_CHANNEL22_BIT, PIO2_CHANNEL23_BIT,
1199dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_CHANNEL24_BIT, PIO2_CHANNEL25_BIT,
1209dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_CHANNEL26_BIT, PIO2_CHANNEL27_BIT,
1219dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_CHANNEL28_BIT, PIO2_CHANNEL29_BIT,
1229dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_CHANNEL30_BIT, PIO2_CHANNEL31_BIT
1239dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					};
1249dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
1259dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch/* PIO2_REGS_INT_STAT_CNTR (0xc) */
1269dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_COUNTER0			(1 << 0)
1279dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_COUNTER1			(1 << 1)
1289dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_COUNTER2			(1 << 2)
1299dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_COUNTER3			(1 << 3)
1309dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_COUNTER4			(1 << 4)
1319dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_COUNTER5			(1 << 5)
1329dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
1339dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welchstatic const int PIO2_COUNTER[6] = { PIO2_COUNTER0, PIO2_COUNTER1,
1349dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_COUNTER2, PIO2_COUNTER3,
1359dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_COUNTER4, PIO2_COUNTER5 };
1369dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
1379dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch/* PIO2_REGS_CTRL (0x18) */
1389dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_VME_INT_MASK		0x7
1399dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_LED			(1 << 6)
1409dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_LOOP			(1 << 7)
1419dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
1429dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch/* PIO2_REGS_VME_VECTOR (0x19) */
1439dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_VME_VECTOR_SPUR		0x0
1449dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_VME_VECTOR_BANK0		0x1
1459dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_VME_VECTOR_BANK1		0x2
1469dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_VME_VECTOR_BANK2		0x3
1479dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_VME_VECTOR_BANK3		0x4
1489dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_VME_VECTOR_CNTR0		0x5
1499dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_VME_VECTOR_CNTR1		0x6
1509dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_VME_VECTOR_CNTR2		0x7
1519dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_VME_VECTOR_CNTR3		0x8
1529dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_VME_VECTOR_CNTR4		0x9
1539dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_VME_VECTOR_CNTR5		0xa
1549dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
1559dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_VME_VECTOR_MASK		0xf0
1569dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
1579dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welchstatic const int PIO2_VECTOR_BANK[4] = { PIO2_VME_VECTOR_BANK0,
1589dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_VME_VECTOR_BANK1,
1599dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_VME_VECTOR_BANK2,
1609dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_VME_VECTOR_BANK3 };
1619dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
1629dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welchstatic const int PIO2_VECTOR_CNTR[6] = { PIO2_VME_VECTOR_CNTR0,
1639dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_VME_VECTOR_CNTR1,
1649dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_VME_VECTOR_CNTR2,
1659dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_VME_VECTOR_CNTR3,
1669dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_VME_VECTOR_CNTR4,
1679dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_VME_VECTOR_CNTR5 };
1689dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
1699dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch/* PIO2_REGS_CNTRx (0x20 - 0x24 & 0x28 - 0x2c) */
1709dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
1719dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welchstatic const int PIO2_CNTR_DATA[6] = { PIO2_REGS_CNTR0, PIO2_REGS_CNTR1,
1729dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_REGS_CNTR2, PIO2_REGS_CNTR3,
1739dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_REGS_CNTR4, PIO2_REGS_CNTR5 };
1749dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
1759dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch/* PIO2_REGS_CTRL_WRDx (0x26 & 0x2e) */
1769dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
1779dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welchstatic const int PIO2_CNTR_CTRL[6] = { PIO2_REGS_CTRL_WRD0,
1789dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_REGS_CTRL_WRD0,
1799dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_REGS_CTRL_WRD0,
1809dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_REGS_CTRL_WRD1,
1819dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_REGS_CTRL_WRD1,
1829dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_REGS_CTRL_WRD1 };
1839dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
1849dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CNTR_SC_DEV0		0
1859dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CNTR_SC_DEV1		(1 << 6)
1869dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CNTR_SC_DEV2		(2 << 6)
1879dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CNTR_SC_RDBACK		(3 << 6)
1889dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
1899dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welchstatic const int PIO2_CNTR_SC_DEV[6] = { PIO2_CNTR_SC_DEV0, PIO2_CNTR_SC_DEV1,
1909dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_CNTR_SC_DEV2, PIO2_CNTR_SC_DEV0,
1919dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch					PIO2_CNTR_SC_DEV1, PIO2_CNTR_SC_DEV2 };
1929dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
1939dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CNTR_RW_LATCH		0
1949dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CNTR_RW_LSB		(1 << 4)
1959dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CNTR_RW_MSB		(2 << 4)
1969dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CNTR_RW_BOTH		(3 << 4)
1979dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
1989dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CNTR_MODE0			0
1999dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CNTR_MODE1			(1 << 1)
2009dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CNTR_MODE2			(2 << 1)
2019dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CNTR_MODE3			(3 << 1)
2029dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CNTR_MODE4			(4 << 1)
2039dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CNTR_MODE5			(5 << 1)
2049dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
2059dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#define PIO2_CNTR_BCD			1
2069dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
2079dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
2089dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
2099dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welchenum pio2_bank_config { NOFIT, INPUT, OUTPUT, BOTH };
2109dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welchenum pio2_int_config { NONE = 0, LOW2HIGH = 1, HIGH2LOW = 2, EITHER = 4 };
2119dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
2129dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch/* Bank configuration structure */
2139dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welchstruct pio2_io_bank {
2149dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch	enum pio2_bank_config config;
2159dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch	u8 value;
2169dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch	enum pio2_int_config irq[8];
2179dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch};
2189dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
2199dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch/* Counter configuration structure */
2209dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welchstruct pio2_cntr {
2219dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch	int mode;
2229dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch	int count;
2239dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch};
2249dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
2259dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welchstruct pio2_card {
2269dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch	int id;
2279dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch	int bus;
2289dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch	long base;
2299dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch	int irq_vector;
2309dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch	int irq_level;
2319dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch	char variant[6];
2329dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch	int led;
2339dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
2349dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch	struct vme_dev *vdev;
2359dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch	struct vme_resource *window;
2369dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
2379dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch	struct gpio_chip gc;
2389dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch	struct pio2_io_bank bank[4];
2399dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
2409dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch	struct pio2_cntr cntr[6];
2419dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch};
2429dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
2439dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welchint pio2_cntr_reset(struct pio2_card *);
2449dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
2459dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welchint pio2_gpio_reset(struct pio2_card *);
246bf3a85be67068a0f55804349e6e1dce80008c45cGerard Snitselaarint __devinit pio2_gpio_init(struct pio2_card *);
247bf3a85be67068a0f55804349e6e1dce80008c45cGerard Snitselaarvoid pio2_gpio_exit(struct pio2_card *);
2489dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch
2499dc367bc4c76cc4c6595e9fab6a5a02523b537c6Martyn Welch#endif /* _VME_PIO2_H_ */
250