2 * Freescale SEC data structures for integration with ocf-linux
4 * Copyright (c) 2006 Freescale Semiconductor, Inc.
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
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 * 3. The name of the author may not be used to endorse or promote products
16 * derived from this software without specific prior written permission.
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 * paired descriptor and associated crypto operation
33 struct desc_cryptop_pair
{
34 struct talitos_desc cf_desc
; /* descriptor ptr */
35 struct cryptop
*cf_crp
; /* cryptop ptr */
39 * Holds data specific to a single talitos device.
41 struct talitos_softc
{
42 softc_device_decl sc_cdev
;
43 struct platform_device
*sc_dev
; /* device backpointer */
44 ocf_iomem_t sc_base_addr
;
46 int sc_num
; /* if we have multiple chips */
47 int32_t sc_cid
; /* crypto tag */
48 u64 sc_chiprev
; /* major/minor chip revision */
50 struct talitos_session
*sc_sessions
;
51 int sc_num_channels
;/* number of crypto channels */
52 int sc_chfifo_len
; /* channel fetch fifo len */
53 int sc_exec_units
; /* execution units mask */
54 int sc_desc_types
; /* descriptor types mask */
56 * mutual exclusion for intra-channel resources, e.g. fetch fifos
57 * the last entry is a meta-channel lock used by the channel scheduler
59 spinlock_t
*sc_chnfifolock
;
60 /* sc_chnlastalgo contains last algorithm for that channel */
62 /* sc_chnfifo holds pending descriptor--crypto operation pairs */
63 struct desc_cryptop_pair
**sc_chnfifo
;
66 struct talitos_session
{
68 u_int32_t ses_klen
; /* key length in bits */
69 u_int32_t ses_key
[8]; /* DES/3DES/AES key */
70 u_int32_t ses_hmac
[5]; /* hmac inner state */
71 u_int32_t ses_hmac_len
; /* hmac length */
72 u_int32_t ses_mlen
; /* desired hash result len (12=ipsec or 16) */
75 #define TALITOS_SESSION(sid) ((sid) & 0x0fffffff)
76 #define TALITOS_SID(crd, sesn) (((crd) << 28) | ((sesn) & 0x0fffffff))