xref: /netbsd-src/sys/arch/x86/pci/msipic.h (revision 30654f1ba6f1a02a94ef16311f6c9a73e9ea0b7f)
1 /*	$NetBSD: msipic.h,v 1.4 2022/05/23 15:03:05 bouyer Exp $	*/
2 
3 /*
4  * Copyright (c) 2015 Internet Initiative Japan Inc.
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
17  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
18  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
20  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26  * POSSIBILITY OF SUCH DAMAGE.
27  */
28 
29 #ifndef _X86_PCI_MSIPIC_H_
30 #define _X86_PCI_MSIPIC_H_
31 
32 #include <dev/pci/pcivar.h>
33 
34 struct pic	*msipic_construct_msi_pic(const struct pci_attach_args *);
35 void		msipic_destruct_msi_pic(struct pic *);
36 struct pic	*msipic_construct_msix_pic(const struct pci_attach_args *);
37 void		msipic_destruct_msix_pic(struct pic *);
38 struct pic	*msipic_find_msi_pic(int);
39 int		msipic_set_msi_vectors(struct pic *, pci_intr_handle_t *, int);
40 
41 bool		msipic_is_msi_pic(struct pic *);
42 int		msipic_get_devid(struct pic *);
43 
44 struct msipic_pci_info {
45 	int mp_bus, mp_dev, mp_fun;
46 	int mp_veccnt; /* The number of MSI/MSI-X vectors. */
47 	uint32_t mp_table_base; /* Xen: MSI-X table location in memory space */
48 	int *mp_xen_pirq; /* Xen: pirq numbers */
49 };
50 
51 const struct msipic_pci_info *msipic_get_pci_info(struct pic *);
52 
53 void		msipic_init(void);
54 
55 #endif /* _X86_PCI_MSIPIC_H_ */
56