2 * Copyright (C) 2001-2003 by NBMK Encryption Technologies.
5 * NBMK Encryption Technologies provides no support of any kind for
6 * this software. Questions or concerns about it may be addressed to
7 * the members of the relevant open-source community at
8 * <tech-crypto@netbsd.org>.
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions are
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions and the following disclaimer.
17 * 2. Redistributions in binary form must reproduce the above
18 * copyright notice, this list of conditions and the following
19 * disclaimer in the documentation and/or other materials provided
20 * with the distribution.
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35 /*****************************************************************************
36 * @(#) n8_driver_main.h 1.27@(#)
37 *****************************************************************************/
39 /*****************************************************************************/
40 /** @file n8_driver_main.h
41 * @brief NSP2000 Device Driver main common header
43 * This file contains all data structures, constants, and prototypes used by
44 * the NSP2000 Device Driver.
46 *****************************************************************************/
48 /*****************************************************************************
50 * 02/12/04 bac Fixed time-related defines to be more clear.
51 * 04/21/03 brr Move several non-configuration constants here from
53 * 03/19/03 brr Added statistics to better track IRS's.
54 * 02/20/03 brr Eliminated all references to shared memory.
55 * 11/25/02 brr Move multiply defined constants to this on file. Also
56 * reformat to conform to coding standards.
57 * 10/10/02 brr Eliminate eventWaitType.
58 * 06/25/02 brr Moved SKS constants here from n8_driver_parms.h.
59 * 05/30/02 brr Keep statistics for bus errors.
60 * 05/20/02 brr Revert to a single AMBA wait queue.
61 * 05/02/02 brr Moved SKS semaphore here from queue struture.
62 * 03/19/02 msz Shadow memory is now called shared memory.
63 * 02/25/02 brr Removed references to qmgrData.
64 * 02/15/02 brr Removed obsolete FPGA defines, added context memory support.
65 * 01/15/02 msz Support of an array of AMBA wait blocks.
66 * 11/26/01 mmd Added N8_PCIDEVICES_t type and PCIinfo field to NspInstance_t.
67 * Pruned some no-longer used fields. Renamed from simon_drv.h.
68 * 11/15/01 mmd Eliminated memory struct field.
69 * 11/14/01 mmd Moved all magic numbers to n8_driver_parms.h.
70 * 11/10/01 brr Modified to support static allocations of persistant data
72 * 11/06/01 mmd Added FPGA_Type and FPGA_CrystalType fields to
74 * 10/11/01 mmd Added programmed field to SimonInstance_t.
75 * 09/25/01 mmd Added SKSSize, ContextMemSize, HardwareVersion, and
76 * RevisionID to SimonInstance_t, and changed field name from
78 * 09/24/01 mmd Added AMBAblock, AMBAbitmask, and AMBAirqstatus to
80 * 09/20/01 mmd Removed pid field from SimonInstance_t.
81 * 09/13/01 mmd Added FPGAsessionID and FPGAlocked to the SimonInstance_t
82 * structure, for FPGA lock safeguarding.
83 * 09/12/01 mmd Moved declaration of NSPDeviceTable_g, NSPcount_g, and
84 * N8_FPGA_g to driverglobals.h.
85 * 09/10/01 mmd Moved declaration of global resources to this header.
86 * 09/07/01 mmd Added DEF_PSEUDO_DEVICE to implement the pseudo device.
87 * 08/21/01 mmd Added new fields to SimonInstance_t (coretype, FPGALock).
88 * 08/16/01 mmd Removed inclusion of n8_types.h..
89 * 07/27/01 brr Added PLX & LCR macros.
90 * 06/17/01 mmd Further cleanup and debugging.
91 * 05/29/01 mmd Incorporated suggestions from code review.
92 * 05/17/01 mmd Original version.
93 ****************************************************************************/
95 #ifndef N8_DRIVER_MAIN_H
96 #define N8_DRIVER_MAIN_H
100 #include "n8_device_info.h"
101 #include "n8_driver_parms.h"
102 #include "contextMem.h"
104 /* Time-related macros */
105 #define N8_USECS_PER_SEC 1000000
106 #define N8_USECS_PER_MSEC 1000
107 #define N8_USECS_PER_TICK (N8_USECS_PER_SEC/HZ)
108 #define N8_MINIMUM_YIELD_USECS (10 * N8_USECS_PER_MSEC)
110 /*****************************************************************************
111 * HARDWARE IDENTIFICATION - *
112 * PCI devices are identified with unique vendor/device ID's. Also, here are *
113 * some memory resource parameters for FPGAs, since they don't indicate the *
114 * correct needed amount of address space for operation. *
115 *****************************************************************************/
117 #define DEF_ASIC_VENDOR_ID 0x170b
118 #define DEF_ASIC_DEVICE_ID 0x0100
119 #define DEF_ASIC_PCI_MEMORY_SIZE_2 (16384 * 4) /* 64K */
121 #define N8_DEF_SKS_MEMSIZE 512
122 #define N8_SKS_PROM_SIZE 4096
124 #define N8_EA_CMD_BLK_SIZE 128
125 #define N8_PKE_CMD_BLK_SIZE 32
126 #define N8_RNG_CMD_BLK_SIZE 8
129 #define N8_MAX_CMD_QUE_EXP 15
130 #define N8_MIN_CMD_QUE_EXP 4
132 #define N8_DEF_RNG_QUE_SIZE (1<<N8_DEF_RNG_QUE_EXP)
134 /* The following two values are inSilicon PCI test registers that need */
135 /* to be set to the PCI standards rather than their defaults. */
136 #define INSILICON_PCI_TRDY_TIMEOUT 0x40
137 #define INSILICON_PCI_RETRY_TIMEOUT 0x41
139 /**************************************************************************
140 * DEVICE INFORMATION STRUCTURES - *
142 * The NSPDeviceTable_g is an array of structures, one per hardware *
143 * instance, that retain assorted information about each instance. The *
144 * minor number of any request indexes into this array. NSPcount_g *
145 * maintains the number of detected NSP2000 hardware instances. *
146 **************************************************************************/
150 unsigned long base_address
[6];
151 unsigned long base_range
[6];
152 unsigned short vendor_id
;
153 unsigned short device_id
;
154 unsigned char revision_id
;
158 /* Device instance information structure */
161 void *dev
; /* nsp2000_softsc_t * */
162 wait_queue_head_t RNHblock
; /* Wait queue for RNH IRQ's */
163 wait_queue_head_t CCHblock
; /* Wait queue for CCH IRQ's */
164 wait_queue_head_t PKHblock
; /* Wait queue for PKH IRQ's */
165 wait_queue_head_t AMBAblock
; /* Wait queue for AMBA IRQ's */
167 unsigned long RNHbitmask
; /* RNH IRQ bitmask */
168 unsigned long CCHbitmask
; /* CCH IRQ bitmask */
169 unsigned long PKHbitmask
; /* PKH IRQ bitmask */
170 unsigned long AMBAbitmask
; /* AMBA IRQ bitmask */
172 unsigned long RNHirqstatus
; /* RNH control/status @ IRQ */
173 unsigned long CCHirqstatus
; /* CCH control/status @ IRQ */
174 unsigned long PKHirqstatus
; /* PKH control/status @ IRQ */
175 unsigned long AMBAirqstatus
; /* AMBA control/status @ IRQ */
177 int RNHbuserrors
; /* Counter for bus errors */
178 int PKHbuserrors
; /* Counter for bus errors */
179 int CCHbuserrors
; /* Counter for bus errors */
180 int RNHcmderrors
; /* Counter for RNH errors */
181 int PKHcmderrors
; /* Counter for PKH errors */
182 int CCHcmderrors
; /* Counter for CCH errors */
184 N8_PCIDEVICES_t PCIinfo
; /* PCI config info per inst */
186 unsigned long contextMemSize
; /* Size of context memory (bytes) */
187 unsigned long contextMemEntries
;/* Size of context memory (entries) */
188 unsigned long contextMemNext
; /* Index to begin search for */
189 /* next allocation. */
190 ContextMemoryMap_t
*contextMemMap_p
; /* pointer to context memory */
191 /* allocation map. */
192 ATOMICLOCK_t contextMemSem
; /* Mutual exclusion semaphore*/
194 /********************************************************************************/
195 unsigned short HardwareVersion
; /* PCI Device ID */
196 unsigned char RevisionID
; /* PCI Revision ID */
197 unsigned char chip
; /* Number or this chip */
198 void *RNqueue_p
; /* Pointer to RN queue */
199 unsigned long RNqueue_size
; /* Size of RN queue in bytes */
200 unsigned long RNqueue_base
; /* Phys. base addr. of RN queue */
201 void *PKqueue_p
; /* Pointer to PK queue */
202 unsigned long PKqueue_size
; /* Size of PK queue in bytes */
203 unsigned long PKqueue_base
; /* Phys. base addr. of PK queue */
204 void *EAqueue_p
; /* Pointer to EA queue */
205 unsigned long EAqueue_size
; /* Size of EA queue in bytes */
206 unsigned long EAqueue_base
; /* Phys. base addr. of EA queue */
207 char SKS_map
[N8_DEF_SKS_MEMSIZE
]; /* SKS allocation map */
208 unsigned long SKS_size
; /* Size of SKS in bytes */
209 ATOMICLOCK_t SKSSem
; /* resource lock for SKS map */
210 void *RNGparms_p
; /* Pointer to RNG parm struct */
211 unsigned long RNGparms_size
; /* Size of RNG parm struct (byte)*/
212 unsigned long RNGparms_base
; /* Phys. base addr. of RNG parms */
213 unsigned long *NSPregs_p
; /* NSP register mapping */
214 unsigned long NSPregs_base
; /* Phys. base addr. of NSP regs */
215 uint16_t EAreadIndex
; /* EA read index */
216 uint16_t PKreadIndex
; /* PK read index */
217 N8_Hardware_t hardwareType
; /* Device type for this chip */
223 #endif /* N8_DRIVER_MAIN_H */