13fc155dcSAndrew Turner#- 23fc155dcSAndrew Turner# Copyright (c) 2016 The FreeBSD Foundation 33fc155dcSAndrew Turner# 43fc155dcSAndrew Turner# This software was developed by Andrew Turner under 53fc155dcSAndrew Turner# sponsorship from the FreeBSD Foundation. 63fc155dcSAndrew Turner# 73fc155dcSAndrew Turner# Redistribution and use in source and binary forms, with or without 83fc155dcSAndrew Turner# modification, are permitted provided that the following conditions 93fc155dcSAndrew Turner# are met: 103fc155dcSAndrew Turner# 1. Redistributions of source code must retain the above copyright 113fc155dcSAndrew Turner# notice, this list of conditions and the following disclaimer. 123fc155dcSAndrew Turner# 2. Redistributions in binary form must reproduce the above copyright 133fc155dcSAndrew Turner# notice, this list of conditions and the following disclaimer in the 143fc155dcSAndrew Turner# documentation and/or other materials provided with the distribution. 153fc155dcSAndrew Turner# 163fc155dcSAndrew Turner# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 173fc155dcSAndrew Turner# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 183fc155dcSAndrew Turner# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 193fc155dcSAndrew Turner# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 203fc155dcSAndrew Turner# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 213fc155dcSAndrew Turner# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 223fc155dcSAndrew Turner# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 233fc155dcSAndrew Turner# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 243fc155dcSAndrew Turner# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 253fc155dcSAndrew Turner# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 263fc155dcSAndrew Turner# SUCH DAMAGE. 273fc155dcSAndrew Turner# 283fc155dcSAndrew Turner# 293fc155dcSAndrew Turner 303fc155dcSAndrew TurnerINTERFACE msi; 313fc155dcSAndrew Turner 323fc155dcSAndrew TurnerHEADER { 33e707c8beSRuslan Bukin #include <machine/bus.h> 34e707c8beSRuslan Bukin #include <dev/iommu/iommu_msi.h> 35e707c8beSRuslan Bukin 363fc155dcSAndrew Turner struct intr_irqsrc; 373fc155dcSAndrew Turner}; 383fc155dcSAndrew Turner 39*f32f0095SRuslan Bukin# 40*f32f0095SRuslan Bukin# Default implementations of some methods. 41*f32f0095SRuslan Bukin# 42*f32f0095SRuslan BukinCODE { 43*f32f0095SRuslan Bukin static int 44*f32f0095SRuslan Bukin iommu_init(device_t dev, device_t child, struct iommu_domain **domain) 45*f32f0095SRuslan Bukin { 46*f32f0095SRuslan Bukin *domain = NULL; 47*f32f0095SRuslan Bukin return (0); 48*f32f0095SRuslan Bukin } 49*f32f0095SRuslan Bukin static void 50*f32f0095SRuslan Bukin iommu_deinit(device_t dev, device_t child) 51*f32f0095SRuslan Bukin { 52*f32f0095SRuslan Bukin } 53*f32f0095SRuslan Bukin}; 54*f32f0095SRuslan Bukin 553fc155dcSAndrew TurnerMETHOD int alloc_msi { 563fc155dcSAndrew Turner device_t dev; 573fc155dcSAndrew Turner device_t child; 583fc155dcSAndrew Turner int count; 593fc155dcSAndrew Turner int maxcount; 603fc155dcSAndrew Turner device_t *pic; 613fc155dcSAndrew Turner struct intr_irqsrc **srcs; 623fc155dcSAndrew Turner}; 633fc155dcSAndrew Turner 643fc155dcSAndrew TurnerMETHOD int release_msi { 653fc155dcSAndrew Turner device_t dev; 663fc155dcSAndrew Turner device_t child; 673fc155dcSAndrew Turner int count; 683fc155dcSAndrew Turner struct intr_irqsrc **srcs; 693fc155dcSAndrew Turner}; 703fc155dcSAndrew Turner 713fc155dcSAndrew TurnerMETHOD int alloc_msix { 723fc155dcSAndrew Turner device_t dev; 733fc155dcSAndrew Turner device_t child; 743fc155dcSAndrew Turner device_t *pic; 753fc155dcSAndrew Turner struct intr_irqsrc **src; 763fc155dcSAndrew Turner}; 773fc155dcSAndrew Turner 783fc155dcSAndrew TurnerMETHOD int release_msix { 793fc155dcSAndrew Turner device_t dev; 803fc155dcSAndrew Turner device_t child; 813fc155dcSAndrew Turner struct intr_irqsrc *src; 823fc155dcSAndrew Turner}; 833fc155dcSAndrew Turner 843fc155dcSAndrew TurnerMETHOD int map_msi { 853fc155dcSAndrew Turner device_t dev; 863fc155dcSAndrew Turner device_t child; 873fc155dcSAndrew Turner struct intr_irqsrc *src; 883fc155dcSAndrew Turner uint64_t *addr; 893fc155dcSAndrew Turner uint32_t *data; 903fc155dcSAndrew Turner}; 913fc155dcSAndrew Turner 92e707c8beSRuslan BukinMETHOD int iommu_init { 93e707c8beSRuslan Bukin device_t dev; 94e707c8beSRuslan Bukin device_t child; 95e707c8beSRuslan Bukin struct iommu_domain **domain; 96*f32f0095SRuslan Bukin} DEFAULT iommu_init; 97*f32f0095SRuslan Bukin 98*f32f0095SRuslan BukinMETHOD void iommu_deinit { 99*f32f0095SRuslan Bukin device_t dev; 100*f32f0095SRuslan Bukin device_t child; 101*f32f0095SRuslan Bukin} DEFAULT iommu_deinit; 102