Annotation of sys/dev/pci/ubsecvar.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: ubsecvar.h,v 1.36 2003/06/04 16:02:41 jason Exp $ */
2:
3: /*
4: * Copyright (c) 2000 Theo de Raadt
5: * Copyright (c) 2001 Patrik Lindergren (patrik@ipunplugged.com)
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: *
11: * 1. Redistributions of source code must retain the above copyright
12: * notice, this list of conditions and the following disclaimer.
13: * 2. Redistributions in binary form must reproduce the above copyright
14: * notice, this list of conditions and the following disclaimer in the
15: * documentation and/or other materials provided with the distribution.
16: *
17: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20: * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22: * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26: * THIS SOFTWARE, EVEN IF ADVISED OF THE 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: /* Maximum queue length */
35: #ifndef UBS_MAX_NQUEUE
36: #define UBS_MAX_NQUEUE 60
37: #endif
38:
39: #define UBS_MAX_SCATTER 64 /* Maximum scatter/gather depth */
40:
41: #ifndef UBS_MAX_AGGR
42: #define UBS_MAX_AGGR 5 /* Maximum aggregation count */
43: #endif
44:
45: #define UBSEC_CARD(sid) (((sid) & 0xf0000000) >> 28)
46: #define UBSEC_SESSION(sid) ( (sid) & 0x0fffffff)
47: #define UBSEC_SID(crd, sesn) (((crd) << 28) | ((sesn) & 0x0fffffff))
48:
49: #define UBS_DEF_RTY 0xff /* PCI Retry Timeout */
50: #define UBS_DEF_TOUT 0xff /* PCI TRDY Timeout */
51: #define UBS_DEF_CACHELINE 0x01 /* Cache Line setting */
52:
53: struct ubsec_dma_alloc {
54: u_int32_t dma_paddr;
55: caddr_t dma_vaddr;
56: bus_dmamap_t dma_map;
57: bus_dma_segment_t dma_seg;
58: bus_size_t dma_size;
59: int dma_nseg;
60: };
61:
62: struct ubsec_q2 {
63: SIMPLEQ_ENTRY(ubsec_q2) q_next;
64: struct ubsec_dma_alloc q_mcr;
65: struct ubsec_dma_alloc q_ctx;
66: u_int q_type;
67: };
68:
69: struct ubsec_q2_rng {
70: struct ubsec_q2 rng_q;
71: struct ubsec_dma_alloc rng_buf;
72: int rng_used;
73: };
74:
75: /* C = (M ^ E) mod N */
76: #define UBS_MODEXP_PAR_M 0
77: #define UBS_MODEXP_PAR_E 1
78: #define UBS_MODEXP_PAR_N 2
79: struct ubsec_q2_modexp {
80: struct ubsec_q2 me_q;
81: struct cryptkop * me_krp;
82: struct ubsec_dma_alloc me_M;
83: struct ubsec_dma_alloc me_E;
84: struct ubsec_dma_alloc me_C;
85: struct ubsec_dma_alloc me_epb;
86: int me_modbits;
87: int me_shiftbits;
88: int me_normbits;
89: };
90:
91: #define UBS_RSAPRIV_PAR_P 0
92: #define UBS_RSAPRIV_PAR_Q 1
93: #define UBS_RSAPRIV_PAR_DP 2
94: #define UBS_RSAPRIV_PAR_DQ 3
95: #define UBS_RSAPRIV_PAR_PINV 4
96: #define UBS_RSAPRIV_PAR_MSGIN 5
97: #define UBS_RSAPRIV_PAR_MSGOUT 6
98: struct ubsec_q2_rsapriv {
99: struct ubsec_q2 rpr_q;
100: struct cryptkop * rpr_krp;
101: struct ubsec_dma_alloc rpr_msgin;
102: struct ubsec_dma_alloc rpr_msgout;
103: };
104:
105: #define UBSEC_RNG_BUFSIZ 16 /* measured in 32bit words */
106:
107: struct ubsec_dmachunk {
108: struct ubsec_mcr d_mcr;
109: struct ubsec_mcr_add d_mcradd[UBS_MAX_AGGR-1];
110: struct ubsec_pktbuf d_sbuf[UBS_MAX_SCATTER-1];
111: struct ubsec_pktbuf d_dbuf[UBS_MAX_SCATTER-1];
112: u_int32_t d_macbuf[5];
113: union {
114: struct ubsec_pktctx_long ctxl;
115: struct ubsec_pktctx ctx;
116: } d_ctx;
117: };
118:
119: struct ubsec_dma {
120: SIMPLEQ_ENTRY(ubsec_dma) d_next;
121: struct ubsec_dmachunk *d_dma;
122: struct ubsec_dma_alloc d_alloc;
123: };
124:
125: #define UBS_FLAGS_KEY 0x01 /* has key accelerator */
126: #define UBS_FLAGS_LONGCTX 0x02 /* uses long ipsec ctx */
127: #define UBS_FLAGS_BIGKEY 0x04 /* 2048bit keys */
128: #define UBS_FLAGS_HWNORM 0x08 /* hardware normalization */
129: #define UBS_FLAGS_RNG 0x10 /* hardware rng */
130:
131: struct ubsec_q {
132: SIMPLEQ_ENTRY(ubsec_q) q_next;
133: int q_nstacked_mcrs;
134: struct ubsec_q *q_stacked_mcr[UBS_MAX_AGGR-1];
135: struct cryptop *q_crp;
136: struct ubsec_dma *q_dma;
137:
138: struct mbuf *q_src_m, *q_dst_m;
139: struct uio *q_src_io, *q_dst_io;
140:
141: bus_dmamap_t q_src_map;
142: bus_dmamap_t q_dst_map;
143:
144: int q_sesn;
145: int q_flags;
146: };
147:
148: struct ubsec_softc {
149: struct device sc_dv; /* generic device */
150: void *sc_ih; /* interrupt handler cookie */
151: bus_space_handle_t sc_sh; /* memory handle */
152: bus_space_tag_t sc_st; /* memory tag */
153: bus_dma_tag_t sc_dmat; /* dma tag */
154: int sc_flags; /* device specific flags */
155: u_int32_t sc_statmask; /* interrupt status mask */
156: int32_t sc_cid; /* crypto tag */
157: SIMPLEQ_HEAD(,ubsec_q) sc_queue; /* packet queue, mcr1 */
158: int sc_nqueue; /* count enqueued, mcr1 */
159: SIMPLEQ_HEAD(,ubsec_q) sc_qchip; /* on chip, mcr1 */
160: SIMPLEQ_HEAD(,ubsec_q) sc_freequeue; /* list of free queue elements */
161: SIMPLEQ_HEAD(,ubsec_q2) sc_queue2; /* packet queue, mcr2 */
162: int sc_nqueue2; /* count enqueued, mcr2 */
163: SIMPLEQ_HEAD(,ubsec_q2) sc_qchip2; /* on chip, mcr2 */
164: int sc_nsessions; /* # of sessions */
165: struct ubsec_session *sc_sessions; /* sessions */
166: struct timeout sc_rngto; /* rng timeout */
167: int sc_rnghz; /* rng poll time */
168: struct ubsec_q2_rng sc_rng;
169: struct ubsec_dma sc_dmaa[UBS_MAX_NQUEUE];
170: struct ubsec_q *sc_queuea[UBS_MAX_NQUEUE];
171: SIMPLEQ_HEAD(,ubsec_q2) sc_q2free; /* free list */
172: };
173:
174: #define UBSEC_QFLAGS_COPYOUTIV 0x1
175:
176: struct ubsec_session {
177: u_int32_t ses_used;
178: u_int32_t ses_deskey[6]; /* 3DES key */
179: u_int32_t ses_hminner[5]; /* hmac inner state */
180: u_int32_t ses_hmouter[5]; /* hmac outer state */
181: u_int32_t ses_iv[2]; /* [3]DES iv */
182: };
183:
184: struct ubsec_stats {
185: u_int64_t hst_ibytes;
186: u_int64_t hst_obytes;
187: u_int32_t hst_ipackets;
188: u_int32_t hst_opackets;
189: u_int32_t hst_invalid;
190: u_int32_t hst_nomem;
191: u_int32_t hst_queuefull;
192: u_int32_t hst_dmaerr;
193: u_int32_t hst_mcrerr;
194: u_int32_t hst_nodmafree;
195: };
CVSweb