69 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2010-2014, The Linux Foundation. All rights reserved.
 | |
|  *
 | |
|  * This program is free software; you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU General Public License version 2 and
 | |
|  * only version 2 as published by the Free Software Foundation.
 | |
|  *
 | |
|  * This program is distributed in the hope that it will be useful,
 | |
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
|  * GNU General Public License for more details.
 | |
|  */
 | |
| 
 | |
| #ifndef _CORE_H_
 | |
| #define _CORE_H_
 | |
| 
 | |
| #include "dma.h"
 | |
| 
 | |
| /**
 | |
|  * struct qce_device - crypto engine device structure
 | |
|  * @queue: crypto request queue
 | |
|  * @lock: the lock protects queue and req
 | |
|  * @done_tasklet: done tasklet object
 | |
|  * @req: current active request
 | |
|  * @result: result of current transform
 | |
|  * @base: virtual IO base
 | |
|  * @dev: pointer to device structure
 | |
|  * @core: core device clock
 | |
|  * @iface: interface clock
 | |
|  * @bus: bus clock
 | |
|  * @dma: pointer to dma data
 | |
|  * @burst_size: the crypto burst size
 | |
|  * @pipe_pair_id: which pipe pair id the device using
 | |
|  * @async_req_enqueue: invoked by every algorithm to enqueue a request
 | |
|  * @async_req_done: invoked by every algorithm to finish its request
 | |
|  */
 | |
| struct qce_device {
 | |
| 	struct crypto_queue queue;
 | |
| 	spinlock_t lock;
 | |
| 	struct tasklet_struct done_tasklet;
 | |
| 	struct crypto_async_request *req;
 | |
| 	int result;
 | |
| 	void __iomem *base;
 | |
| 	struct device *dev;
 | |
| 	struct clk *core, *iface, *bus;
 | |
| 	struct qce_dma_data dma;
 | |
| 	int burst_size;
 | |
| 	unsigned int pipe_pair_id;
 | |
| 	int (*async_req_enqueue)(struct qce_device *qce,
 | |
| 				 struct crypto_async_request *req);
 | |
| 	void (*async_req_done)(struct qce_device *qce, int ret);
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * struct qce_algo_ops - algorithm operations per crypto type
 | |
|  * @type: should be CRYPTO_ALG_TYPE_XXX
 | |
|  * @register_algs: invoked by core to register the algorithms
 | |
|  * @unregister_algs: invoked by core to unregister the algorithms
 | |
|  * @async_req_handle: invoked by core to handle enqueued request
 | |
|  */
 | |
| struct qce_algo_ops {
 | |
| 	u32 type;
 | |
| 	int (*register_algs)(struct qce_device *qce);
 | |
| 	void (*unregister_algs)(struct qce_device *qce);
 | |
| 	int (*async_req_handle)(struct crypto_async_request *async_req);
 | |
| };
 | |
| 
 | |
| #endif /* _CORE_H_ */
 | 
