mirror of
https://github.com/Stichting-MINIX-Research-Foundation/netbsd.git
synced 2025-08-08 21:49:06 -04:00
345 lines
16 KiB
C
345 lines
16 KiB
C
/*-
|
|
* Copyright (C) 2001-2003 by NBMK Encryption Technologies.
|
|
* All rights reserved.
|
|
*
|
|
* NBMK Encryption Technologies provides no support of any kind for
|
|
* this software. Questions or concerns about it may be addressed to
|
|
* the members of the relevant open-source community at
|
|
* <tech-crypto@netbsd.org>.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are
|
|
* met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
*
|
|
* 2. Redistributions in binary form must reproduce the above
|
|
* copyright notice, this list of conditions and the following
|
|
* disclaimer in the documentation and/or other materials provided
|
|
* with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
/*****************************************************************************
|
|
* @(#) n8_enqueue_common.h 1.32@(#)
|
|
*****************************************************************************/
|
|
|
|
/*****************************************************************************/
|
|
/** @file n8_enqueue_common.h
|
|
* @brief Common queueing definitions.
|
|
*
|
|
* Common infrastructure for queueing requests.
|
|
*
|
|
*****************************************************************************/
|
|
|
|
/*****************************************************************************
|
|
* Revision history:
|
|
* 05/19/03 brr Eliminate freeList_p from API request.
|
|
* 05/15/03 brr Eliminated obsolete N8_freeList_t & include n8_rn_common.h.
|
|
* 04/01/03 brr Eliminated APIReqIndex.
|
|
* 03/19/03 brr Added APIReqIndex to API_Request_t to support waiting on a
|
|
* specifice request.
|
|
* 03/10/03 brr Added support for API callbacks.
|
|
* 06/10/02 hml Added the userRequest boolean to API_Request_t.
|
|
* 06/06/02 brr Moved waitQueue to the queue structure.
|
|
* 05/30/02 brr Added common struct for queue statistics.
|
|
* 05/14/02 brr Removed all fields associated with chained requests.
|
|
* 05/07/02 msz Added field to QMgr Request to mark as synchronous.
|
|
* 04/30/02 brr Removed obsolete fields in API requests.
|
|
* 04/10/02 mmd Removed obsolete NSP_PSEUDO_DEVICE_NAME.
|
|
* 03/27/02 hml Removed obsolete include file.
|
|
* 03/26/02 brr Added dataoffset to API_Request_t.
|
|
* 03/06/02 msz Added physical address to QMgrRequest
|
|
* (Chained subsequent messages in kernel support)
|
|
* 02/28/02 brr Move internal QMgr structure to QMQueue.h
|
|
* 02/20/02 brr Removed obsolete "size" variables since FPGA's are not
|
|
* supported.
|
|
* 02/18/02 brr Support user space API, removed obsolete Context memory
|
|
* references.
|
|
* 02/19/02 msz No more randomParmSem.
|
|
* 01/31/02 brr Added postProcessBuffer to API_Request_t.
|
|
* 01/25/02 bac Added ccmFreeIndex_p to QueueControl_t.
|
|
* 01/28/02 msz No more nextRequestToBeReturnedToAPI_index
|
|
* 01/21/02 msz Added event wait type information.
|
|
* 01/23/02 brr Modified API_Request_t to support reduced memory allocations.
|
|
* 01/17/02 msz Changes to support mirror registers - BUG 413
|
|
* 01/16/01 brr Moved several definition here from QMgrInit.h.
|
|
* 12/15/01 msz Adding shadow copy of command queue. Fix for BUG 382, 411.
|
|
* 12/04/01 msz Changes to allow chaining of requests.
|
|
* Changed N8_QueueStatusCodes_t, added N8_QueueErrorCodes_t
|
|
* 11/15/01 msz Added nextAPIRequest_t to API_Request_t so they can be
|
|
* chained together.
|
|
* 11/11/01 mmd Added nspData field to QueueControl_t.
|
|
* 11/10/01 brr Modified to support static allocations of persistant data
|
|
* by the driver.
|
|
* 10/30/01 hml Added EA_ContextSize and SKS_MemorySize to QueueControl_t.
|
|
* 10/29/01 msz Added bncConstantsSem.
|
|
* 10/02/01 bac API_Request_t copyBackCommandBlock changed name and is now a
|
|
* N8_Boolean_t.
|
|
* 10/02/01 msz Changed sharedPerUnit as it now accessed differently.
|
|
* 09/26/01 msz Merged with hml 9/21/01 and 09/13/01 changes below, note
|
|
* however that there is no longer any seed_source to add.
|
|
* 09/21/01 hml Reordered and augmented the Queue control structure.
|
|
* 09/13/01 hml Added seed_source.
|
|
* 09/26/01 msz No longer need seed_source, started shared per execution
|
|
* unit data.
|
|
* 09/24/01 msz Added some comments.
|
|
* 09/13/01 msz Added seed_source.
|
|
* 09/06/01 bac Renumbered enums to start with non-zero (BUG #190).
|
|
* 08/29/01 msz Moved elapsedTimeInQueueAndSimon so it is per request rather
|
|
* than per command. Eliminated numCmdBlksProcessed from
|
|
* API_Request_t, eliminated nextCmdToBeReturnedToAPI_index,
|
|
* index_of_next_command_to_evaluate.
|
|
* 08/27/01 msz Renamed fcnToCallbackWhenRequestIsFilled to callback
|
|
* and FcnCalledOnRequestCompletionOrError to callback
|
|
* 08/16/01 mmd Now including n8_driver_api.h instead of simon.h and
|
|
* simon_driver_api.h.
|
|
* 08/20/01 msz Use n8_time and n8_timeval_t
|
|
* 08/08/01 msz Removed include of n8_semaphore.h
|
|
* Merged other Revision history into this one.
|
|
* 08/08/01 hml Added contextListSem and randomParmSem to queue control struct.
|
|
* 08/06/01 msz Combined sizeOfRNG_Q with sizeOfQueue, some moving around
|
|
* of offsets of values in QueueControl_t.
|
|
* 08/01/01 bac Removed N8_QueueStatusCodes_t and N8_QueueReturnCodes_t
|
|
* as they are now defined elsewhere.
|
|
* 07/31/01 bac Documented simon_error_report_t to clarify the index.
|
|
* 07/30/01 bac Added BNC_multiplier and PK_BytesPerBignumDigit to
|
|
* queue control.
|
|
* 07/23/01 bac Forced to add ENQUEUE enums back in for integration. They
|
|
* will be removed later.
|
|
* 07/17/01 bac Consolidated all success enums to be N8_QUEUE_SUCCESS. Added
|
|
* values to enum definitions for easier lookup.
|
|
* 07/20/01 hml Added chip to the queue control.
|
|
* 07/20/01 bac Added hardware type and BNC bits per digit to the queue
|
|
* control.
|
|
* 07/19/01 bac Moved LLReqCtrl_t, API_Request_t, and RN_Request_t to here
|
|
* from other header files.
|
|
* 07/10/01 bac Changed DEFAULT_QUEUE_LEN_LOG_2 to be 10 (1024).
|
|
* 06/15/01 hml added unit and chip to the API_Request_t structure.
|
|
* 05/01/01 bac Added to API_Reqeust_t the freeList_p and postProcessingData_p
|
|
* 04/24/01 bac fixed merge error.
|
|
* 04/16/01 jke moved enqueue retvals from n8_pk_common.h, genericized names
|
|
* 04/16/01 jke moved status and return types from PK*.h and genericized for
|
|
* use in EA and PK
|
|
* 04/12/01 jke added header per spec
|
|
* 04/11/01 bac Standardization. Removed non-ANSI-compliant code.
|
|
* 03/28/01 jke copied from EnQueue.h
|
|
****************************************************************************/
|
|
/** @defgroup subsystem_name Subsystem Title (not used for a header file)
|
|
*/
|
|
/*****************************************************************************
|
|
* n8_enqueue_common.h
|
|
*
|
|
* #defs and typedefs used in implementing the request queues.
|
|
*
|
|
*****************************************************************************/
|
|
|
|
|
|
|
|
#ifndef N8_ENQUEUE_COMMON_H
|
|
#define N8_ENQUEUE_COMMON_H
|
|
|
|
#include "n8_time.h" /* for the n8_timeval_t */
|
|
#include "n8_common.h"
|
|
#include "n8_OS_intf.h"
|
|
#include "n8_pub_common.h"
|
|
#include "n8_pk_common.h" /* for typedef of PK_CMD_BLOCK */
|
|
#include "n8_ea_common.h" /* for typedef of EA_CMD_BLOCK */
|
|
#include "n8_malloc_common.h"
|
|
|
|
|
|
typedef struct simon_error_report_t
|
|
{
|
|
int errorReturnedFromSimon; /* error returned from the hardware.
|
|
* look at the hardware specification
|
|
* error flags for deciphering this
|
|
* number */
|
|
int indexOfCommandThatCausedError; /* index of command that caused the
|
|
* error. (1...number of commands) */
|
|
} simon_error_report_t;
|
|
|
|
|
|
/*****************************************************************************
|
|
* N8_QueueErrorCodes_t
|
|
*****************************************************************************/
|
|
/** @ingroup QMgr
|
|
* @brief This enum contains the error status of a request from SAPI to QMGR.
|
|
*
|
|
* N8_QUEUE_REQUEST_OK The request has no error
|
|
* N8_QUEUE_REQUEST_ERROR There was an error in or with the
|
|
* request.
|
|
*
|
|
*****************************************************************************/
|
|
|
|
/* Error status of request/event that is in the queue */
|
|
typedef enum
|
|
{
|
|
N8_QUEUE_REQUEST_OK = 1,
|
|
N8_QUEUE_REQUEST_ERROR = 2,
|
|
} N8_QueueErrorCodes_t;
|
|
|
|
|
|
/*****************************************************************************
|
|
* QMgrRequest_t
|
|
*****************************************************************************/
|
|
/** @ingroup QMgr
|
|
* @struct QMgrRequest_t
|
|
* @brief This structure contains the common part of a RN_request_ and
|
|
* API_Request_t (and any other request types that might be added).
|
|
*
|
|
* requestStatus tells if the request is in API or QMgr, or if its FINISHED
|
|
* requestError tells if the request is in error state
|
|
* unit tells the component the request goes to (eg. PK, EA, RNG)
|
|
* chip tells what chipset the request is for
|
|
* callback is a pointer to a callback routine, or a NULL if
|
|
* there is no callback routine.
|
|
* physicalAddress The Physical Address of this request (used in user address
|
|
* to kernel address conversions)
|
|
* synchronous This request has been generated by a synchronous API call.
|
|
*
|
|
*****************************************************************************/
|
|
|
|
typedef struct QMgrRequest_t
|
|
{
|
|
N8_QueueStatusCodes_t requestStatus;
|
|
N8_QueueErrorCodes_t requestError;
|
|
N8_Component_t unit;
|
|
int chip;
|
|
void (* callback) (struct QMgrRequest_t *);
|
|
unsigned long physicalAddress;
|
|
N8_Boolean_t synchronous;
|
|
|
|
} QMgrRequest_t;
|
|
|
|
|
|
/*****************************************************************************
|
|
* RN_Request_t
|
|
*****************************************************************************/
|
|
/** @ingroup QMgr
|
|
* @struct RN_Request_t
|
|
* @brief This structure contains the a request to the RNG queue.
|
|
*
|
|
* userBuffer_p Where to copy the random numbers to.
|
|
* userRequest Flag to indicate request came from user space.
|
|
* numBytesRequested Has the number of random bytes the user requested
|
|
* numBytesProvided Used to store how many bytes have been copied out.
|
|
*
|
|
*****************************************************************************/
|
|
|
|
typedef struct RN_Request_t
|
|
{
|
|
char *userBuffer_p;
|
|
int userRequest; /* Flag to indicate request */
|
|
/* received from user space. */
|
|
int numBytesRequested;
|
|
int numBytesProvided;
|
|
} RN_Request_t;
|
|
|
|
|
|
/*****************************************************************************
|
|
* API_request_t
|
|
*****************************************************************************/
|
|
/** @ingroup QMgr
|
|
* @struct API_request_t
|
|
* @brief This structure contains the a request to the EA or PK queue. The
|
|
* first section of this structure must be a QMgrRequest_t type.
|
|
* qr Has common QMgrRequest data.
|
|
*
|
|
*****************************************************************************/
|
|
|
|
typedef struct
|
|
{
|
|
QMgrRequest_t qr; /* NOTE: the QMgrRequest_t contains the common
|
|
* elements between an API_Request_t and an
|
|
* RN_Request_t. IT MUST BE THE FIRST ENTRY IN
|
|
* THIS STRUCTURE. */
|
|
|
|
/* QMgr Only members */
|
|
int index_of_first_command;
|
|
int index_of_last_command;
|
|
|
|
/* Shared members */
|
|
EA_CMD_BLOCK_t *EA_CommandBlock_ptr;
|
|
PK_CMD_BLOCK_t *PK_CommandBlock_ptr;
|
|
int numNewCmds;
|
|
N8_Boolean_t copyBackCommandBlock;
|
|
simon_error_report_t err_rpt_bfr;
|
|
|
|
N8_Callback_t usrCallback; /* User's callback function */
|
|
void *usrData; /* Pointer to user's data */
|
|
|
|
/* SAPI Only members */
|
|
uint32_t dataoffset;
|
|
N8_Boolean_t userRequest; /* N8_TRUE: This request was alloced by
|
|
N8_AllocateRequest */
|
|
N8_Boolean_t userSpace; /* N8_TRUE: This request was generated
|
|
in user space */
|
|
|
|
/* set this pointer to any data that needs to be associated with
|
|
* this request for processing after the completion of the request
|
|
*/
|
|
void *postProcessingData_p;
|
|
int copyBackSize;
|
|
N8_Buffer_t *copyBackFrom_p;
|
|
N8_Buffer_t *copyBackTo_p;
|
|
struct uio *copyBackTo_uio;
|
|
uint32_t postProcessBuffer[12];
|
|
} API_Request_t;
|
|
|
|
|
|
/*****************************************************************************
|
|
* QueueStats_t
|
|
*****************************************************************************/
|
|
/** @ingroup QMgr
|
|
* @struct QueueStats_t
|
|
* @brief This structure contains the statistics for each queue.
|
|
*
|
|
*****************************************************************************/
|
|
|
|
typedef struct
|
|
{
|
|
|
|
uint32_t hardwareErrorCount; /**< Counter of hardware errors
|
|
detected. A non zero value does
|
|
not mean there is a hardware
|
|
problem. */
|
|
uint32_t requestsQueued; /**< Counter of number of requests
|
|
that have been queued (not the
|
|
number of current requests). */
|
|
uint32_t requestsCompleted; /**< Counter of number of queued requests
|
|
that have been completed, regardless
|
|
of success or failure. */
|
|
uint32_t requestCheckCalled; /**< Counter of number of times we
|
|
have called check request on
|
|
this queue. */
|
|
uint32_t requestsPreempted; /**< Counter of number of times a
|
|
request has been preempted by
|
|
a signal or timeout. */
|
|
} QueueStats_t;
|
|
|
|
|
|
typedef struct
|
|
{
|
|
N8_Unit_t chip;
|
|
|
|
QueueStats_t PKstats;
|
|
QueueStats_t EAstats;
|
|
QueueStats_t RNstats;
|
|
|
|
} N8_QueueStatistics_t;
|
|
|
|
|
|
#endif /* ifdef N8_ENQUEUE_COMMON_H */
|