Annotation of sys/dev/pci/nofnreg.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: nofnreg.h,v 1.6 2003/06/02 19:08:58 jason Exp $ */
2:
3: /*
4: * Copyright (c) 2002 Jason L. Wright (jason@thought.net)
5: * All rights reserved.
6: *
7: * Redistribution and use in source and binary forms, with or without
8: * modification, are permitted provided that the following conditions
9: * are met:
10: * 1. Redistributions of source code must retain the above copyright
11: * notice, this list of conditions and the following disclaimer.
12: * 2. Redistributions in binary form must reproduce the above copyright
13: * notice, this list of conditions and the following disclaimer in the
14: * documentation and/or other materials provided with the distribution.
15: *
16: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19: * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
20: * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21: * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22: * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
24: * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
25: * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26: * POSSIBILITY OF SUCH DAMAGE.
27: *
28: * Effort sponsored in part by the Defense Advanced Research Projects
29: * Agency (DARPA) and Air Force Research Laboratory, Air Force
30: * Materiel Command, USAF, under agreement number F30602-01-2-0537.
31: *
32: */
33:
34: #define NOFN_BAR0_REGS 0x10 /* main register set */
35: #define NOFN_BAR1 0x14 /* memory space 1 */
36: #define NOFN_BAR2 0x18 /* memory space 2 */
37: #define NOFN_BAR3_PK 0x1c /* public key unit */
38:
39: #define NOFN_MIPS_PCI_BASE_0 0x0000 /* mips pci base address 0 */
40: #define NOFN_MIPS_PCI_WIN_SZ_0 0x0008 /* mips pci window size 0 */
41: #define NOFN_PCI_XLAT_0 0x0010 /* pci translation 0 */
42: #define NOFN_MIPS_PCI_BASE_1 0x0018 /* mips pci base address 1 */
43: #define NOFN_MIPS_PCI_WIN_SZ_1 0x0020 /* mips pci window size 1 */
44: #define NOFN_PCI_XLAT_1 0x0028 /* pci translation 1 */
45: #define NOFN_MIPS_SDRAM_BASE 0x0030 /* mips sdram base addr */
46: #define NOFN_MIPS_SDRAM_SZ 0x0038 /* mips sdram size */
47: #define NOFN_PCI_BARM0_SHADOW 0x0040 /* pci mbar0 shadow */
48: #define NOFN_PCI_BARM1_SHADOW 0x0050 /* pci mbar1 shadow */
49: #define NOFN_PCI_BARM_SZ 0x0060 /* size of memory window */
50: #define NOFN_XPARNT_MEM_EN 0x0068 /* enable transparent mem */
51: #define NOFN_PCI_BARR_SHADOW 0x0070 /* pci bar0 shadow, s/c regs */
52: #define NOFN_MIPS_REG_BASE 0x0078 /* mips register base */
53: #define NOFN_MAX_FREE_IDX 0x0080 /* maximum free index */
54: #define NOFN_TRAP_IN_Q 0x0090 /* enqueue core desc */
55: #define NOFN_OUT_CMPLT 0x00a0 /* output completion */
56: #define NOFN_TRAP_OUT_Q 0x00a8 /* dequeue core desc */
57: #define NOFN_CHOKE_CORE_IN_Q 0x00b0 /* choke core on input */
58: #define NOFN_DONE_BITMAP 0x00b8 /* done bitmap */
59: #define NOFN_HEAD_DESC_PTR 0x00c0 /* last core descriptor */
60: #define NOFN_TAIL_DESC_PTR 0x00c8 /* next core descriptor */
61: #define NOFN_RSLT_POST_ADR 0x00d0 /* result post address */
62: #define NOFN_SM_CTX_BASE 0x00d8 /* small session ctx base */
63: #define NOFN_DESC_BASE 0x00e8 /* core descriptor base */
64: #define NOFN_LG_CTX_BASE 0x00e0 /* large context base */
65: #define NOFN_SESSION_NUM_MASK 0x00f0 /* session number mask */
66: #define NOFN_HOST_MBOX_0 0x00f8 /* host mailbox 0 */
67: #define NOFN_REVID 0x0098 /* revision id */
68: #define NOFN_HOST_SIGNAL 0x0100 /* host signal */
69: #define NOFN_MIPS_MBOX_0 0x0108 /* mips mailbox 0 */
70: #define NOFN_MIPS_SIGNAL 0x0110 /* mips signal */
71: #define NOFN_SPINLOCK_0 0x0118 /* spinlock 0 */
72: #define NOFN_SPINLOCK_1 0x0120 /* spinlock 1 */
73: #define NOFN_PCI_INT 0x0130 /* generate a pci intr */
74: #define NOFN_PCI_INT_STAT 0x0138 /* pci interrupt status */
75: #define NOFN_PCI_INT_MASK 0x0140 /* pci interrupt mask */
76: #define NOFN_MIPS_INT 0x0148 /* mips interrupt trigger */
77: #define NOFN_MIPS_INT_STAT 0x0150 /* mips interrupt status */
78: #define NOFN_SDRAM_CFG 0x0168 /* sdram configuration */
79: #define NOFN_ENDIAN_CFG 0x0170 /* endian configuration */
80: #define NOFN_EPT 0x0178 /* endian private xfer */
81: #define NOFN_MIPS_RST 0x0180 /* mips reset */
82: #define NOFN_EEPROM_DATA_0 0x0188 /* eeprom data 0 */
83: #define NOFN_EEPROM_DATA_1 0x0190 /* eeprom data 1 */
84: #define NOFN_EEPROM_DATA_2 0x0198 /* eeprom data 2 */
85: #define NOFN_EEPROM_DATA_3 0x01a0 /* eeprom data 3 */
86: #define NOFN_CHIP_CFG 0x01d8 /* chip configuration */
87: #define NOFN_SCRATCH_0 0x01e0 /* scratch 0 */
88: #define NOFN_SCRATCH_1 0x01e8 /* scratch 1 */
89: #define NOFN_SCRATCH_2 0x01f0 /* scratch 2 */
90: #define NOFN_SCRATCH_3 0x01f8 /* scratch 3 */
91: #define NOFN_CMD_RING_CTL 0x0200 /* command ring control */
92: #define NOFN_CMD_RING_BASE 0x0208 /* command ring base */
93: #define NOFN_CMD_RING_LEN 0x0210 /* command ring length */
94: #define NOFN_CMD_RING_HEAD 0x0218 /* command ring head */
95: #define NOFN_CMD_RING_TAIL 0x0220 /* command ring tail */
96: #define NOFN_DST_RING_CTL 0x0230 /* dest ring control */
97: #define NOFN_DST_RING_BASE 0x0238 /* dest ring base */
98: #define NOFN_DST_RING_LEN 0x0240 /* dest ring length */
99: #define NOFN_DST_RING_HEAD 0x0248 /* dest ring head */
100: #define NOFN_DST_RING_TAIL 0x0250 /* dest ring tail */
101: #define NOFN_RSLT_RING_CTL 0x0258 /* result ring control */
102: #define NOFN_RSLT_RING_BASE 0x0260 /* result ring base */
103: #define NOFN_RSLT_RING_LEN 0x0268 /* result ring length */
104: #define NOFN_RSLT_RING_HEAD 0x0270 /* result ring head */
105: #define NOFN_RSLT_RING_TAIL 0x0278 /* result ring tail */
106: #define NOFN_SRC_RING_CTL 0x0288 /* src ring control */
107: #define NOFN_SRC_RING_BASE 0x0290 /* src ring base */
108: #define NOFN_SRC_RING_LEN 0x0298 /* src ring len */
109: #define NOFN_SRC_RING_HEAD 0x02a0 /* src ring head */
110: #define NOFN_SRC_RING_TAIL 0x02a8 /* src ring tail */
111: #define NOFN_FREE_RING_CTL 0x02b8 /* free ring control */
112: #define NOFN_FREE_RING_BASE 0x02c0 /* free ring base */
113: #define NOFN_FREE_RING_LEN 0x02c8 /* free ring len */
114: #define NOFN_FREE_RING_HEAD 0x02d0 /* free ring head */
115: #define NOFN_FREE_RING_TAIL 0x02d8 /* free ring tail */
116: #define NOFN_ECC_TEST 0x02e0 /* ecc test */
117: #define NOFN_ECC_SNGL_ADR 0x02e8 /* ecc singlebit error addr */
118: #define NOFN_ECC_SNGL_ECC 0x02f0 /* ecc singlebit error bits */
119: #define NOFN_ECC_SNGL_CNT 0x02f8 /* ecc singlebit error count */
120: #define NOFN_ECC_MULTI_ADR 0x0300 /* ecc multibit error addr */
121: #define NOFN_ECC_MULTI_ECC 0x0308 /* ecc multibit error bits */
122: #define NOFN_ECC_MULTI_DATAL 0x0310 /* ecc multibit err data lo */
123: #define NOFN_ECC_MULTI_DATAH 0x0318 /* ecc multibit err data hi */
124: #define NOFN_MIPS_ERR_ADR 0x0320 /* mips parity error addr */
125: #define NOFN_MIPS_ERR_DATA 0x0328 /* mips parity error data */
126: #define NOFN_MIPS_ERR_PAR 0x0330 /* mips parity error bits */
127: #define NOFN_MIPS_PAR_TEST 0x0338 /* mips parity test */
128: #define NOFN_MIPS_MBOX_1 0x0340 /* mips mailbox 1 */
129: #define NOFN_MIPS_MBOX_2 0x0348 /* mips mailbox 2 */
130: #define NOFN_MIPS_MBOX_3 0x0350 /* mips mailbox 3 */
131: #define NOFN_HOST_MBOX_1 0x0358 /* host mailbox 1 */
132: #define NOFN_HOST_MBOX_2 0x0360 /* host mailbox 2 */
133: #define NOFN_HOST_MBOX_3 0x0368 /* host mailbox 3 */
134: #define NOFN_MIPS_INT_0_MASK 0x0400 /* mips intr mask 0 */
135: #define NOFN_MIPS_INT_1_MASK 0x0408 /* mips intr mask 1 */
136: #define NOFN_MIPS_INT_2_MASK 0x0410 /* mips intr mask 2 */
137: #define NOFN_MIPS_PCI_RD_ERRADR 0x0418 /* failed read address */
138: #define NOFN_MIPS_PCI_WR_ERRADR 0x0420 /* failed write address */
139: #define NOFN_MIPS_EP0_LMT 0x0428 /* mips private limit */
140: #define NOFN_PCI_INIT_ERR_ADR 0x0430 /* pci failure address */
141: #define NOFN_ECC_SNGL_DATAL 0x0438 /* ecc singlebit err dat lo */
142: #define NOFN_ECC_SNGL_DATAH 0x0440 /* ecc singlebit err dat hi */
143: #define NOFN_GPDMA_DATA_0 0x0480 /* gpdma data 0 */
144: #define NOFN_GPDMA_DATA_1 0x0488 /* gpdma data 1 */
145: #define NOFN_GPDMA_DATA_2 0x0490 /* gpdma data 2 */
146: #define NOFN_GPDMA_DATA_3 0x0498 /* gpdma data 3 */
147: #define NOFN_GPDMA_DATA_4 0x04a0 /* gpdma data 4 */
148: #define NOFN_GPDMA_DATA_5 0x04a8 /* gpdma data 5 */
149: #define NOFN_GPDMA_DATA_6 0x04b0 /* gpdma data 6 */
150: #define NOFN_GPDMA_DATA_7 0x04b8 /* gpdma data 7 */
151: #define NOFN_GPDMA_DATA_8 0x04c0 /* gpdma data 8 */
152: #define NOFN_GPDMA_DATA_9 0x04c8 /* gpdma data 9 */
153: #define NOFN_GPDMA_DATA_10 0x04d0 /* gpdma data 10 */
154: #define NOFN_GPDMA_DATA_11 0x04d8 /* gpdma data 11 */
155: #define NOFN_GPDMA_DATA_12 0x04e0 /* gpdma data 12 */
156: #define NOFN_GPDMA_DATA_13 0x04e8 /* gpdma data 13 */
157: #define NOFN_GPDMA_DATA_14 0x04f0 /* gpdma data 14 */
158: #define NOFN_GPDMA_DATA_15 0x04f8 /* gpdma data 15 */
159: #define NOFN_GPDMA_CTL 0x0500 /* gpdma control */
160: #define NOFN_GPDMA_ADR 0x0508 /* gpdma address */
161: #define NOFN_MIPS_PK_BASE 0x0510 /* mips pk base address */
162: #define NOFN_PCI_BAR3_SHADOW 0x0518 /* pci bar3 shadow */
163: #define NOFN_AES_ROUNDS 0x0520 /* number of rounds in AES */
164: #define NOFN_MIPS_INIT 0x0530 /* mips init */
165: #define NOFN_MIPS_INIT_CTL 0x0528 /* mips init control */
166: #define NOFN_UART_TX 0x0538 /* uart tx data */
167: #define NOFN_UART_RX 0x0540 /* uart rx data */
168: #define NOFN_UART_CLK_LOW 0x0548 /* uart clock, low bits */
169: #define NOFN_UART_CLK_HIGH 0x0550 /* uart clock, high bits */
170: #define NOFN_UART_STAT 0x0558 /* uart status */
171: #define NOFN_MIPS_FLASH_BASE 0x0560 /* mips flash base addr */
172: #define NOFN_MIPS_FLASH_SZ 0x0568 /* mips flash size */
173: #define NOFN_MIPS_FLASH_XLATE 0x0570 /* mips address translation */
174: #define NOFN_MIPS_SRAM_BASE 0x0578 /* mips sram base address */
175: #define NOFN_MIPS_SRAM_SZ 0x0580 /* mips sram size */
176: #define NOFN_MIPS_SRAM_XLATE 0x0588 /* mips sram xlate */
177: #define NOFN_MIPS_MEM_LOCK 0x0590 /* mips memory lock */
178: #define NOFN_MIPS_SDRAM2_BASE 0x0598 /* mips sdram2 base addr */
179: #define NOFN_MIPS_SDRAM2_SZ 0x05a0 /* mips sdram2 size */
180: #define NOFN_MIPS_EPO2_LMT 0x05a8 /* address boundary */
181:
182: #define REVID_7851_1 0x00140000 /* 7851, first silicon */
183: #define REVID_7851_2 0x00140001 /* 7851, second silicon */
184: #define REVID_7814_7854_1 0x00140002 /* 7814/7854, first silicon */
185: #define REVID_8154_1 0x00180000 /* 8154, first silicon */
186: #define REVID_8065_1 0x00160000 /* 8065, first silicon */
187: #define REVID_8165_1 0x00170000 /* 8165, first silicon */
188:
189: #define PCIINTMASK_PK 0x80000000 /* pk processor idle */
190: #define PCIINTMASK_RNGRDY 0x40000000 /* pk rng has 8 32bit words */
191: #define PCIINTMASK_MIPSINT 0x00080000 /* mips interrupt */
192: #define PCIINTMASK_ERR_OUT 0x00010000 /* err: outbound dma */
193: #define PCIINTMASK_ERR_FREE 0x00008000 /* err: free descriptor */
194: #define PCIINTMASK_ERR_DEST 0x00004000 /* err: dest descriptor */
195: #define PCIINTMASK_ERR_RES 0x00002000 /* err: result cycle */
196: #define PCIINTMASK_ERR_RESP 0x00001000 /* err: post address cycle */
197: #define PCIINTMASK_DESCOVF 0x00000800 /* descriptor overflow */
198: #define PCIINTMASK_RESDONE 0x00000400 /* result done */
199: #define PCIINTMASK_DESTINV 0x00000200 /* destination invalidated */
200: #define PCIINTMASK_POOLINV 0x00000100 /* free desc invalidated */
201: #define PCIINTMASK_ERR_CMD 0x00000080 /* pci error fetching cmd */
202: #define PCIINTMASK_ERR_SRC 0x00000040 /* pci error fetching src */
203: #define PCIINTMASK_ERR_IN 0x00000020 /* pci error during input */
204: #define PCIINTMASK_ERR_MULTI 0x00000010 /* multibit ecc error */
205: #define PCIINTMASK_MIPSPAR 0x00000004 /* mips parity error */
206: #define PCIINTMASK_MIPSPCI 0x00000002 /* write to pciint register */
207: #define PCIINTMASK_FREE_E 0x00000001 /* free-pool empty */
208:
209: #define PCIINTSTAT_PK 0x80000000 /* pk processor idle */
210: #define PCIINTSTAT_RNGRDY 0x40000000 /* pk rng has 8 32bit words */
211: #define PCIINTSTAT_MIPSINT 0x00080000 /* mips interrupt */
212: #define PCIINTSTAT_ERR_OUT 0x00010000 /* err: outbound dma */
213: #define PCIINTSTAT_ERR_FREE 0x00008000 /* err: free descriptor */
214: #define PCIINTSTAT_ERR_DEST 0x00004000 /* err: dest descriptor */
215: #define PCIINTSTAT_ERR_RES 0x00002000 /* err: result cycle */
216: #define PCIINTSTAT_ERR_RESP 0x00001000 /* err: post address cycle */
217: #define PCIINTSTAT_DESCOVF 0x00000800 /* descriptor overflow */
218: #define PCIINTSTAT_RESDONE 0x00000400 /* result done */
219: #define PCIINTSTAT_DESTINV 0x00000200 /* destination invalidated */
220: #define PCIINTSTAT_POOLINV 0x00000100 /* free desc invalidated */
221: #define PCIINTSTAT_ERR_CMD 0x00000080 /* pci error fetching cmd */
222: #define PCIINTSTAT_ERR_SRC 0x00000040 /* pci error fetching src */
223: #define PCIINTSTAT_ERR_IN 0x00000020 /* pci error during input */
224: #define PCIINTSTAT_ERR_MULTI 0x00000010 /* multibit ecc error */
225: #define PCIINTSTAT_MIPSPAR 0x00000004 /* mips parity error */
226: #define PCIINTSTAT_MIPSPCI 0x00000002 /* write to pciint register */
227: #define PCIINTSTAT_FREE_E 0x00000001 /* free-pool empty */
228:
229: #define NOFN_PK_WIN_0 0x0000 /* big endian byte and words */
230: #define NOFN_PK_WIN_1 0x2000 /* big endian byte, little endian words */
231: #define NOFN_PK_WIN_2 0x4000 /* little endian byte and words */
232: #define NOFN_PK_WIN_3 0x6000 /* little endian byte, big endian words */
233:
234: #define NOFN_PK_REGADDR(win,r,i) \
235: ((win) | (((r) & 0xf) << 7) | (((i) & 0x1f) << 2))
236:
237: #define NOFN_PK_LENADDR(r) (0x1000 + ((r) << 2))
238: #define NOFN_PK_LENMASK 0x000007ff /* mask of length bits */
239:
240: #define NOFN_PK_RNGFIFO_BEGIN 0x1080
241: #define NOFN_PK_RNGFIFO_END 0x10bc
242: #define NOFN_PK_INSTR_BEGIN 0x1100
243: #define NOFN_PK_INSTR_END 0x12fc
244:
245: #define NOFN_PK_CR 0x1fd4 /* command */
246: #define NOFN_PK_SR 0x1fd8 /* status */
247: #define NOFN_PK_IER 0x1fdc /* interrupt enable */
248: #define NOFN_PK_RNC 0x1fe0 /* random number config */
249: #define NOFN_PK_CFG1 0x1fe4 /* config1 */
250: #define NOFN_PK_CFG2 0x1fe8 /* config2 */
251: #define NOFN_PK_CHIPID 0x1fec /* chipid */
252: #define NOFN_PK_SCR 0x1ff0 /* stack content */
253:
254: #define PK_CR_OFFSET_M 0x000001fc /* instruction offset mask */
255: #define PK_CR_OFFSET_S 2 /* instruction offset shift */
256:
257: #define PK_SR_DONE 0x00008000 /* proc is idle */
258: #define PK_SR_RRDY 0x00004000 /* random number ready */
259: #define PK_SR_UFLOW 0x00001000 /* random number underflow */
260: #define PK_SR_CARRY 0x00000008 /* alu carry bit */
261:
262: #define PK_IER_DONE 0x00008000 /* intr when alu is idle */
263: #define PK_IER_RRDY 0x00004000 /* intr when rng ready */
264:
265: #define PK_RNC_FST_SCALER 0x00000f00 /* first prescaler */
266: #define PK_RNC_OUT_SCALER 0x00000080 /* output prescaler */
267:
268: #define PK_CFG1_RESET 0x00000001 /* reset pk unit */
269:
270: #define PK_CFG2_ALU_ENA 0x00000002 /* enable alu */
271: #define PK_CFG2_RNG_ENA 0x00000001 /* enable rng */
272:
273: /* alu registers are 1024 bits wide, but must be addressed by word. */
274: union nofn_pk_reg {
275: u_int8_t b[128];
276: u_int32_t w[32];
277: };
278:
279: #define PK_OP_DONE 0x80000000 /* end of program */
280: #define PK_OPCODE_MASK 0x7c000000 /* opcode mask */
281: #define PK_OPCODE_MODEXP 0x00000000 /* modular exponentiation */
282: #define PK_OPCODE_MODMUL 0x04000000 /* modular multiplication */
283: #define PK_OPCODE_MODRED 0x08000000 /* modular reduction */
284: #define PK_OPCODE_MODADD 0x0c000000 /* modular addition */
285: #define PK_OPCODE_MODSUB 0x10000000 /* modular subtraction */
286: #define PK_OPCODE_ADD 0x14000000 /* addition */
287: #define PK_OPCODE_SUB 0x18000000 /* subtraction */
288: #define PK_OPCODE_ADDC 0x1c000000 /* addition with carry */
289: #define PK_OPCODE_SUBC 0x20000000 /* subtraction with carry */
290: #define PK_OPCODE_MULT 0x24000000 /* 2048bit multiplication */
291: #define PK_OPCODE_SR 0x28000000 /* shift right */
292: #define PK_OPCODE_SL 0x2c000000 /* shift left */
293: #define PK_OPCODE_INC 0x30000000 /* increment */
294: #define PK_OPCODE_DEC 0x34000000 /* decrement */
295: #define PK_OPCODE_TAG 0x38000000 /* set length tag */
296: #define PK_OPCODE_BRANCH 0x3c000000 /* jump to insn */
297: #define PK_OPCODE_CALL 0x40000000 /* push addr and jump */
298: #define PK_OPCODE_RETURN 0x44000000 /* pop addr and return */
299:
300: #define PK_OP_RD_SHIFT 21
301: #define PK_OP_RA_SHIFT 16
302: #define PK_OP_RB_SHIFT 11
303: #define PK_OP_RM_SHIFT 6
304: #define PK_OP_R_MASK 0x1f
305: #define PK_OP_LEN_MASK 0xffff
306:
307: #define NOFN_PK_INSTR(done,op,rd,ra,rb,rm) \
308: ((done) | (op) | \
309: (((rd) & PK_OP_R_MASK) << PK_OP_RD_SHIFT) | \
310: (((ra) & PK_OP_R_MASK) << PK_OP_RA_SHIFT) | \
311: (((rb) & PK_OP_R_MASK) << PK_OP_RB_SHIFT) | \
312: (((rm) & PK_OP_R_MASK) << PK_OP_RM_SHIFT))
313:
314: /* shift left, shift right, tag */
315: #define NOFN_PK_INSTR2(done,op,rd,ra,len) \
316: ((done) | (op) | \
317: (((rd) & PK_OP_R_MASK) << PK_OP_RD_SHIFT) | \
318: (((ra) & PK_OP_R_MASK) << PK_OP_RA_SHIFT) | \
319: ((len) & PK_OP_LEN_MASK))
CVSweb