forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.0 KiB
73 lines
2.0 KiB
/* SPDX-License-Identifier: GPL-2.0-only */ |
|
/* |
|
* |
|
* Copyright (C) 2013 Freescale Semiconductor, Inc. |
|
*/ |
|
|
|
#ifndef __FSL_PAMU_DOMAIN_H |
|
#define __FSL_PAMU_DOMAIN_H |
|
|
|
#include "fsl_pamu.h" |
|
|
|
struct dma_window { |
|
phys_addr_t paddr; |
|
u64 size; |
|
int valid; |
|
int prot; |
|
}; |
|
|
|
struct fsl_dma_domain { |
|
/* |
|
* Indicates the geometry size for the domain. |
|
* This would be set when the geometry is |
|
* configured for the domain. |
|
*/ |
|
dma_addr_t geom_size; |
|
/* |
|
* Number of windows assocaited with this domain. |
|
* During domain initialization, it is set to the |
|
* the maximum number of subwindows allowed for a LIODN. |
|
* Minimum value for this is 1 indicating a single PAMU |
|
* window, without any sub windows. Value can be set/ |
|
* queried by set_attr/get_attr API for DOMAIN_ATTR_WINDOWS. |
|
* Value can only be set once the geometry has been configured. |
|
*/ |
|
u32 win_cnt; |
|
/* |
|
* win_arr contains information of the configured |
|
* windows for a domain. This is allocated only |
|
* when the number of windows for the domain are |
|
* set. |
|
*/ |
|
struct dma_window *win_arr; |
|
/* list of devices associated with the domain */ |
|
struct list_head devices; |
|
/* dma_domain states: |
|
* mapped - A particular mapping has been created |
|
* within the configured geometry. |
|
* enabled - DMA has been enabled for the given |
|
* domain. This translates to setting of the |
|
* valid bit for the primary PAACE in the PAMU |
|
* PAACT table. Domain geometry should be set and |
|
* it must have a valid mapping before DMA can be |
|
* enabled for it. |
|
* |
|
*/ |
|
int mapped; |
|
int enabled; |
|
/* stash_id obtained from the stash attribute details */ |
|
u32 stash_id; |
|
struct pamu_stash_attribute dma_stash; |
|
u32 snoop_id; |
|
struct iommu_domain iommu_domain; |
|
spinlock_t domain_lock; |
|
}; |
|
|
|
/* domain-device relationship */ |
|
struct device_domain_info { |
|
struct list_head link; /* link to domain siblings */ |
|
struct device *dev; |
|
u32 liodn; |
|
struct fsl_dma_domain *domain; /* pointer to domain */ |
|
}; |
|
#endif /* __FSL_PAMU_DOMAIN_H */
|
|
|