2013-07-15 08:50:57 +04:00
/*
* 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 .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 , USA .
*
* 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 ;
2015-03-26 15:43:18 +03:00
struct iommu_domain iommu_domain ;
2013-07-15 08:50:57 +04:00
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 */