2016-09-12 21:54:20 +03:00
/*
* Copyright ( C ) 2016 , Semihalf
* Author : Tomasz Nowicki < tn @ semihalf . com >
*
* This program is free software ; you can redistribute it and / or modify it
* under the terms and conditions of the GNU General Public License ,
* version 2 , as published by the Free Software Foundation .
*
* This program is distributed in the hope 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 , Inc . , 59 Temple
* Place - Suite 330 , Boston , MA 02111 - 1307 USA .
*/
# ifndef __ACPI_IORT_H__
# define __ACPI_IORT_H__
# include <linux/acpi.h>
2016-09-12 21:32:21 +03:00
# include <linux/fwnode.h>
# include <linux/irqdomain.h>
2016-09-12 21:54:20 +03:00
2016-11-21 13:01:45 +03:00
# define IORT_IRQ_MASK(irq) (irq & 0xffffffffULL)
# define IORT_IRQ_TRIGGER_MASK(irq) ((irq >> 32) & 0xffffffffULL)
2018-02-13 18:20:50 +03:00
int iort_register_domain_token ( int trans_id , phys_addr_t base ,
struct fwnode_handle * fw_node ) ;
2016-09-12 21:32:21 +03:00
void iort_deregister_domain_token ( int trans_id ) ;
struct fwnode_handle * iort_find_domain_token ( int trans_id ) ;
2016-09-12 21:54:20 +03:00
# ifdef CONFIG_ACPI_IORT
void acpi_iort_init ( void ) ;
2016-09-12 21:32:21 +03:00
u32 iort_msi_map_rid ( struct device * dev , u32 req_id ) ;
struct irq_domain * iort_get_device_domain ( struct device * dev , u32 req_id ) ;
2017-03-07 15:40:06 +03:00
void acpi_configure_pmsi_domain ( struct device * dev ) ;
2017-03-07 15:40:05 +03:00
int iort_pmsi_get_dev_id ( struct device * dev , u32 * dev_id ) ;
2016-11-21 13:01:48 +03:00
/* IOMMU interface */
2017-08-07 13:29:49 +03:00
void iort_dma_setup ( struct device * dev , u64 * dma_addr , u64 * size ) ;
2016-11-21 13:01:48 +03:00
const struct iommu_ops * iort_iommu_configure ( struct device * dev ) ;
2018-02-13 18:20:50 +03:00
int iort_iommu_msi_get_resv_regions ( struct device * dev , struct list_head * head ) ;
2016-09-12 21:54:20 +03:00
# else
static inline void acpi_iort_init ( void ) { }
2016-09-12 21:32:21 +03:00
static inline u32 iort_msi_map_rid ( struct device * dev , u32 req_id )
{ return req_id ; }
static inline struct irq_domain * iort_get_device_domain ( struct device * dev ,
u32 req_id )
{ return NULL ; }
2017-03-07 15:40:06 +03:00
static inline void acpi_configure_pmsi_domain ( struct device * dev ) { }
2016-11-21 13:01:48 +03:00
/* IOMMU interface */
2017-08-07 13:29:49 +03:00
static inline void iort_dma_setup ( struct device * dev , u64 * dma_addr ,
u64 * size ) { }
2017-09-28 16:03:33 +03:00
static inline const struct iommu_ops * iort_iommu_configure (
struct device * dev )
2016-11-21 13:01:48 +03:00
{ return NULL ; }
2018-02-13 18:20:50 +03:00
static inline
int iort_iommu_msi_get_resv_regions ( struct device * dev , struct list_head * head )
{ return 0 ; }
2016-09-12 21:54:20 +03:00
# endif
# endif /* __ACPI_IORT_H__ */