1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 #define LOFN_BAR0 0x0010
35
36 #define LOFN_WIN_0 0x0000
37 #define LOFN_WIN_1 0x2000
38 #define LOFN_WIN_2 0x4000
39 #define LOFN_WIN_3 0x6000
40
41
42 #define LOFN_REL_DATA 0x0000
43 #define LOFN_REL_DATA_END 0x07ff
44
45 #define LOFN_REL_LEN 0x1000
46 #define LOFN_REL_LEN_REGS 0x103f
47
48 #define LOFN_REL_RNG 0x1080
49 #define LOFN_REL_RNG_END 0x10bf
50
51 #define LOFN_REL_INSTR 0x1100
52 #define LOFN_REL_INSTR_END 0x117f
53
54 #define LOFN_REL_CR 0x1fd4
55 #define LOFN_REL_SR 0x1fd8
56 #define LOFN_REL_IER 0x1fdc
57 #define LOFN_REL_RNC 0x1fe0
58 #define LOFN_REL_CFG1 0x1fe4
59 #define LOFN_REL_CFG2 0x1fe8
60 #define LOFN_REL_CHIPID 0x1fec
61
62
63 #define LOFN_REG_MASK 0x0f80
64 #define LOFN_REG_SHIFT 7
65 #define LOFN_WORD_MASK 0x007c
66 #define LOFN_WORD_SHIFT 2
67
68
69 #define LOFN_CR_ADDR_MASK 0x0000003f
70
71
72 #define LOFN_SR_CARRY 0x00000008
73 #define LOFN_SR_RNG_UF 0x00001000
74 #define LOFN_SR_RNG_RDY 0x00004000
75 #define LOFN_SR_DONE 0x00008000
76
77
78 #define LOFN_IER_RDY 0x00004000
79 #define LOFN_IER_DONE 0x00008000
80
81
82 #define LOFN_RNC_OUTSCALE 0x00000080
83 #define LOFN_RNC_1STSCALE 0x00000f00
84
85
86 #define LOFN_CFG1_RESET 0x00000001
87 #define LOFN_CFG1_MULTI 0x00000038
88 #define LOFN_CFG1_MULTI_BYP 0x00000000
89 #define LOFN_CFG1_MULTI_1X 0x00000008
90 #define LOFN_CFG1_MULTI_15X 0x00000010
91 #define LOFN_CFG1_MULTI_2X 0x00000018
92 #define LOFN_CFG1_MULTI_25X 0x00000020
93 #define LOFN_CFG1_MULTI_3X 0x00000028
94 #define LOFN_CFG1_MULTI_4X 0x00000030
95 #define LOFN_CFG1_CLOCK 0x00000040
96
97
98 #define LOFN_CFG2_RNGENA 0x00000001
99 #define LOFN_CFG2_PRCENA 0x00000002
100
101
102 #define LOFN_CHIPID_MASK 0x0000ffff
103
104 #define LOFN_REGADDR(win,r,idx) \
105 ((win) | \
106 (((r) << LOFN_REG_SHIFT) & LOFN_REG_MASK) | \
107 (((idx) << LOFN_WORD_SHIFT) & LOFN_WORD_MASK))
108
109 #define LOFN_LENADDR(win,r) \
110 ((win) | (((r) << 2) + LOFN_REL_LEN))
111
112 #define LOFN_LENMASK 0x000007ff
113
114 #define OP_DONE 0x80000000
115 #define OP_CODE_MASK 0x7c000000
116 #define OP_CODE_MODEXP 0x00000000
117 #define OP_CODE_MODMUL 0x04000000
118 #define OP_CODE_MODRED 0x08000000
119 #define OP_CODE_MODADD 0x0c000000
120 #define OP_CODE_MODSUB 0x10000000
121 #define OP_CODE_ADD 0x14000000
122 #define OP_CODE_SUB 0x18000000
123 #define OP_CODE_ADDC 0x1c000000
124 #define OP_CODE_SUBC 0x20000000
125 #define OP_CODE_MULT 0x24000000
126 #define OP_CODE_SR 0x28000000
127 #define OP_CODE_SL 0x2c000000
128 #define OP_CODE_INC 0x30000000
129 #define OP_CODE_DEC 0x34000000
130 #define OP_CODE_TAG 0x38000000
131 #define OP_CODE_NOP 0x7c000000
132
133 #define OP_RD_SHIFT 21
134 #define OP_RA_SHIFT 16
135 #define OP_RB_SHIFT 11
136 #define OP_RM_SHIFT 6
137 #define OP_R_MASK 0x1f
138 #define OP_LEN_MASK 0xffff
139
140 #define LOFN_INSTR(done,op,rd,ra,rb,rm) \
141 ((done) | (op) | \
142 (((rd) & OP_R_MASK) << OP_RD_SHIFT) | \
143 (((ra) & OP_R_MASK) << OP_RA_SHIFT) | \
144 (((rb) & OP_R_MASK) << OP_RB_SHIFT) | \
145 (((rm) & OP_R_MASK) << OP_RM_SHIFT))
146
147 #define LOFN_INSTR2(done,op,rd,ra,len) \
148 ((done) | (op) | \
149 (((rd) & OP_R_MASK) << OP_RD_SHIFT) | \
150 (((ra) & OP_R_MASK) << OP_RA_SHIFT) | \
151 ((len) & OP_LEN_MASK))
152
153
154 union lofn_reg {
155 u_int8_t b[128];
156 u_int32_t w[32];
157 };
158