xref: /freebsd/sys/kern/msi_if.m (revision a0409676120c1e558d0ade943019934e0f15118d)
1#-
2# Copyright (c) 2016 The FreeBSD Foundation
3# All rights reserved.
4#
5# This software was developed by Andrew Turner under
6# sponsorship from the FreeBSD Foundation.
7#
8# Redistribution and use in source and binary forms, with or without
9# modification, are permitted provided that the following conditions
10# are met:
11# 1. Redistributions of source code must retain the above copyright
12#    notice, this list of conditions and the following disclaimer.
13# 2. Redistributions in binary form must reproduce the above copyright
14#    notice, this list of conditions and the following disclaimer in the
15#    documentation and/or other materials provided with the distribution.
16#
17# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27# SUCH DAMAGE.
28#
29# $FreeBSD$
30#
31
32INTERFACE msi;
33
34HEADER {
35	#include <machine/bus.h>
36	#include <dev/iommu/iommu_msi.h>
37
38	struct intr_irqsrc;
39};
40
41#
42# Default implementations of some methods.
43#
44CODE {
45	static int
46	iommu_init(device_t dev, device_t child, struct iommu_domain **domain)
47	{
48		*domain = NULL;
49		return (0);
50	}
51	static void
52	iommu_deinit(device_t dev, device_t child)
53	{
54	}
55};
56
57METHOD int alloc_msi {
58	device_t	dev;
59	device_t	child;
60	int		count;
61	int		maxcount;
62	device_t	*pic;
63	struct intr_irqsrc **srcs;
64};
65
66METHOD int release_msi {
67	device_t	dev;
68	device_t	child;
69	int		count;
70	struct intr_irqsrc **srcs;
71};
72
73METHOD int alloc_msix {
74	device_t	dev;
75	device_t	child;
76	device_t	*pic;
77	struct intr_irqsrc **src;
78};
79
80METHOD int release_msix {
81	device_t	dev;
82	device_t	child;
83	struct intr_irqsrc *src;
84};
85
86METHOD int map_msi {
87	device_t	dev;
88	device_t	child;
89	struct intr_irqsrc *src;
90	uint64_t	*addr;
91	uint32_t	*data;
92};
93
94METHOD int iommu_init {
95	device_t	dev;
96	device_t	child;
97	struct iommu_domain **domain;
98} DEFAULT iommu_init;
99
100METHOD void iommu_deinit {
101	device_t	dev;
102	device_t	child;
103} DEFAULT iommu_deinit;
104