mm: introduce arch_has_hw_nonleaf_pmd_young()
[platform/kernel/linux-starfive.git] / arch / x86 / include / asm / msi.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _ASM_X86_MSI_H
3 #define _ASM_X86_MSI_H
4 #include <asm/hw_irq.h>
5 #include <asm/irqdomain.h>
6
7 typedef struct irq_alloc_info msi_alloc_info_t;
8
9 int pci_msi_prepare(struct irq_domain *domain, struct device *dev, int nvec,
10                     msi_alloc_info_t *arg);
11
12 /* Structs and defines for the X86 specific MSI message format */
13
14 typedef struct x86_msi_data {
15         union {
16                 struct {
17                         u32     vector                  :  8,
18                                 delivery_mode           :  3,
19                                 dest_mode_logical       :  1,
20                                 reserved                :  2,
21                                 active_low              :  1,
22                                 is_level                :  1;
23                 };
24                 u32     dmar_subhandle;
25         };
26 } __attribute__ ((packed)) arch_msi_msg_data_t;
27 #define arch_msi_msg_data       x86_msi_data
28
29 typedef struct x86_msi_addr_lo {
30         union {
31                 struct {
32                         u32     reserved_0              :  2,
33                                 dest_mode_logical       :  1,
34                                 redirect_hint           :  1,
35                                 reserved_1              :  1,
36                                 virt_destid_8_14        :  7,
37                                 destid_0_7              :  8,
38                                 base_address            : 12;
39                 };
40                 struct {
41                         u32     dmar_reserved_0         :  2,
42                                 dmar_index_15           :  1,
43                                 dmar_subhandle_valid    :  1,
44                                 dmar_format             :  1,
45                                 dmar_index_0_14         : 15,
46                                 dmar_base_address       : 12;
47                 };
48         };
49 } __attribute__ ((packed)) arch_msi_msg_addr_lo_t;
50 #define arch_msi_msg_addr_lo    x86_msi_addr_lo
51
52 #define X86_MSI_BASE_ADDRESS_LOW        (0xfee00000 >> 20)
53
54 typedef struct x86_msi_addr_hi {
55         u32     reserved                :  8,
56                 destid_8_31             : 24;
57 } __attribute__ ((packed)) arch_msi_msg_addr_hi_t;
58 #define arch_msi_msg_addr_hi    x86_msi_addr_hi
59
60 #define X86_MSI_BASE_ADDRESS_HIGH       (0)
61
62 struct msi_msg;
63 u32 x86_msi_msg_get_destid(struct msi_msg *msg, bool extid);
64
65 #endif /* _ASM_X86_MSI_H */