linux/drivers/iommu/fsl_pamu_domain.h
<<
>>
Prefs
   1/*
   2 * This program is free software; you can redistribute it and/or modify
   3 * it under the terms of the GNU General Public License, version 2, as
   4 * published by the Free Software Foundation.
   5 *
   6 * This program is distributed in the hope that it will be useful,
   7 * but WITHOUT ANY WARRANTY; without even the implied warranty of
   8 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   9 * GNU General Public License for more details.
  10 *
  11 * You should have received a copy of the GNU General Public License
  12 * along with this program; if not, write to the Free Software
  13 * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  14 *
  15 * Copyright (C) 2013 Freescale Semiconductor, Inc.
  16 *
  17 */
  18
  19#ifndef __FSL_PAMU_DOMAIN_H
  20#define __FSL_PAMU_DOMAIN_H
  21
  22#include "fsl_pamu.h"
  23
  24struct dma_window {
  25        phys_addr_t paddr;
  26        u64 size;
  27        int valid;
  28        int prot;
  29};
  30
  31struct fsl_dma_domain {
  32        /*
  33         * Indicates the geometry size for the domain.
  34         * This would be set when the geometry is
  35         * configured for the domain.
  36         */
  37        dma_addr_t                      geom_size;
  38        /*
  39         * Number of windows assocaited with this domain.
  40         * During domain initialization, it is set to the
  41         * the maximum number of subwindows allowed for a LIODN.
  42         * Minimum value for this is 1 indicating a single PAMU
  43         * window, without any sub windows. Value can be set/
  44         * queried by set_attr/get_attr API for DOMAIN_ATTR_WINDOWS.
  45         * Value can only be set once the geometry has been configured.
  46         */
  47        u32                             win_cnt;
  48        /*
  49         * win_arr contains information of the configured
  50         * windows for a domain. This is allocated only
  51         * when the number of windows for the domain are
  52         * set.
  53         */
  54        struct dma_window               *win_arr;
  55        /* list of devices associated with the domain */
  56        struct list_head                devices;
  57        /* dma_domain states:
  58         * mapped - A particular mapping has been created
  59         * within the configured geometry.
  60         * enabled - DMA has been enabled for the given
  61         * domain. This translates to setting of the
  62         * valid bit for the primary PAACE in the PAMU
  63         * PAACT table. Domain geometry should be set and
  64         * it must have a valid mapping before DMA can be
  65         * enabled for it.
  66         *
  67         */
  68        int                             mapped;
  69        int                             enabled;
  70        /* stash_id obtained from the stash attribute details */
  71        u32                             stash_id;
  72        struct pamu_stash_attribute     dma_stash;
  73        u32                             snoop_id;
  74        struct iommu_domain             *iommu_domain;
  75        spinlock_t                      domain_lock;
  76};
  77
  78/* domain-device relationship */
  79struct device_domain_info {
  80        struct list_head link;  /* link to domain siblings */
  81        struct device *dev;
  82        u32 liodn;
  83        struct fsl_dma_domain *domain; /* pointer to domain */
  84};
  85#endif  /* __FSL_PAMU_DOMAIN_H */
  86