1299928Sandrew#-
2299928Sandrew# Copyright (c) 2016 The FreeBSD Foundation
3299928Sandrew# All rights reserved.
4299928Sandrew#
5299928Sandrew# This software was developed by Andrew Turner under
6299928Sandrew# sponsorship from the FreeBSD Foundation.
7299928Sandrew#
8299928Sandrew# Redistribution and use in source and binary forms, with or without
9299928Sandrew# modification, are permitted provided that the following conditions
10299928Sandrew# are met:
11299928Sandrew# 1. Redistributions of source code must retain the above copyright
12299928Sandrew#    notice, this list of conditions and the following disclaimer.
13299928Sandrew# 2. Redistributions in binary form must reproduce the above copyright
14299928Sandrew#    notice, this list of conditions and the following disclaimer in the
15299928Sandrew#    documentation and/or other materials provided with the distribution.
16299928Sandrew#
17299928Sandrew# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18299928Sandrew# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19299928Sandrew# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20299928Sandrew# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21299928Sandrew# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22299928Sandrew# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23299928Sandrew# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24299928Sandrew# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25299928Sandrew# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26299928Sandrew# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27299928Sandrew# SUCH DAMAGE.
28299928Sandrew#
29299928Sandrew# $FreeBSD: releng/11.0/sys/kern/msi_if.m 299928 2016-05-16 09:11:40Z andrew $
30299928Sandrew#
31299928Sandrew
32299928SandrewINTERFACE msi;
33299928Sandrew
34299928SandrewHEADER {
35299928Sandrew	struct intr_irqsrc;
36299928Sandrew};
37299928Sandrew
38299928SandrewMETHOD int alloc_msi {
39299928Sandrew	device_t	dev;
40299928Sandrew	device_t	child;
41299928Sandrew	int		count;
42299928Sandrew	int		maxcount;
43299928Sandrew	device_t	*pic;
44299928Sandrew	struct intr_irqsrc **srcs;
45299928Sandrew};
46299928Sandrew
47299928SandrewMETHOD int release_msi {
48299928Sandrew	device_t	dev;
49299928Sandrew	device_t	child;
50299928Sandrew	int		count;
51299928Sandrew	struct intr_irqsrc **srcs;
52299928Sandrew};
53299928Sandrew
54299928SandrewMETHOD int alloc_msix {
55299928Sandrew	device_t	dev;
56299928Sandrew	device_t	child;
57299928Sandrew	device_t	*pic;
58299928Sandrew	struct intr_irqsrc **src;
59299928Sandrew};
60299928Sandrew
61299928SandrewMETHOD int release_msix {
62299928Sandrew	device_t	dev;
63299928Sandrew	device_t	child;
64299928Sandrew	struct intr_irqsrc *src;
65299928Sandrew};
66299928Sandrew
67299928SandrewMETHOD int map_msi {
68299928Sandrew	device_t	dev;
69299928Sandrew	device_t	child;
70299928Sandrew	struct intr_irqsrc *src;
71299928Sandrew	uint64_t	*addr;
72299928Sandrew	uint32_t	*data;
73299928Sandrew};
74299928Sandrew
75