mirror of https://gitee.com/openkylin/linux.git
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
|