mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-04 20:19:47 +08:00 
			
		
		
		
	 74321d4c99
			
		
	
	
		74321d4c99
		
	
	
	
	
		
			
			MIC host driver specific changes to enable SCIF. This patch implements the SCIF hardware bus operations and registers a SCIF device on the SCIF hardware bus. Reviewed-by: Nikhil Rao <nikhil.rao@intel.com> Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com> Signed-off-by: Sudeep Dutt <sudeep.dutt@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
		
			
				
	
	
		
			100 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Intel MIC Platform Software Stack (MPSS)
 | |
|  *
 | |
|  * Copyright(c) 2013 Intel Corporation.
 | |
|  *
 | |
|  * This program is free software; you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU General Public License, 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.
 | |
|  *
 | |
|  * The full GNU General Public License is included in this distribution in
 | |
|  * the file called "COPYING".
 | |
|  *
 | |
|  * Intel MIC Host driver.
 | |
|  *
 | |
|  */
 | |
| #ifndef MIC_SMPT_H
 | |
| #define MIC_SMPT_H
 | |
| /**
 | |
|  * struct mic_smpt_ops - MIC HW specific SMPT operations.
 | |
|  * @init: Initialize hardware specific SMPT information in mic_smpt_hw_info.
 | |
|  * @set: Set the value for a particular SMPT entry.
 | |
|  */
 | |
| struct mic_smpt_ops {
 | |
| 	void (*init)(struct mic_device *mdev);
 | |
| 	void (*set)(struct mic_device *mdev, dma_addr_t dma_addr, u8 index);
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * struct mic_smpt - MIC SMPT entry information.
 | |
|  * @dma_addr: Base DMA address for this SMPT entry.
 | |
|  * @ref_count: Number of active mappings for this SMPT entry in bytes.
 | |
|  */
 | |
| struct mic_smpt {
 | |
| 	dma_addr_t dma_addr;
 | |
| 	s64 ref_count;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * struct mic_smpt_hw_info - MIC SMPT hardware specific information.
 | |
|  * @num_reg: Number of SMPT registers.
 | |
|  * @page_shift: System memory page shift.
 | |
|  * @page_size: System memory page size.
 | |
|  * @base: System address base.
 | |
|  */
 | |
| struct mic_smpt_hw_info {
 | |
| 	u8 num_reg;
 | |
| 	u8 page_shift;
 | |
| 	u64 page_size;
 | |
| 	u64 base;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * struct mic_smpt_info - MIC SMPT information.
 | |
|  * @entry: Array of SMPT entries.
 | |
|  * @smpt_lock: Spin lock protecting access to SMPT data structures.
 | |
|  * @info: Hardware specific SMPT information.
 | |
|  * @ref_count: Number of active SMPT mappings (for debug).
 | |
|  * @map_count: Number of SMPT mappings created (for debug).
 | |
|  * @unmap_count: Number of SMPT mappings destroyed (for debug).
 | |
|  */
 | |
| struct mic_smpt_info {
 | |
| 	struct mic_smpt *entry;
 | |
| 	spinlock_t smpt_lock;
 | |
| 	struct mic_smpt_hw_info info;
 | |
| 	s64 ref_count;
 | |
| 	s64 map_count;
 | |
| 	s64 unmap_count;
 | |
| };
 | |
| 
 | |
| dma_addr_t mic_map_single(struct mic_device *mdev, void *va, size_t size);
 | |
| void mic_unmap_single(struct mic_device *mdev,
 | |
| 	dma_addr_t mic_addr, size_t size);
 | |
| dma_addr_t mic_map(struct mic_device *mdev,
 | |
| 	dma_addr_t dma_addr, size_t size);
 | |
| void mic_unmap(struct mic_device *mdev, dma_addr_t mic_addr, size_t size);
 | |
| dma_addr_t mic_to_dma_addr(struct mic_device *mdev, dma_addr_t mic_addr);
 | |
| 
 | |
| /**
 | |
|  * mic_map_error - Check a MIC address for errors.
 | |
|  *
 | |
|  * @mdev: pointer to mic_device instance.
 | |
|  *
 | |
|  * returns Whether there was an error during mic_map..(..) APIs.
 | |
|  */
 | |
| static inline bool mic_map_error(dma_addr_t mic_addr)
 | |
| {
 | |
| 	return !mic_addr;
 | |
| }
 | |
| 
 | |
| int mic_smpt_init(struct mic_device *mdev);
 | |
| void mic_smpt_uninit(struct mic_device *mdev);
 | |
| void mic_smpt_restore(struct mic_device *mdev);
 | |
| 
 | |
| #endif
 |