21
     )ˆÁÀ965_†I|¥�+¿Å Å    )/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _ASM_X86_IOMMU_H
#define _ASM_X86_IOMMU_H

#include <linux/acpi.h>

#include <asm/e820/api.h>

extern int force_iommu, no_iommu;
extern int iommu_detected;
extern int iommu_merge;
extern int panic_on_overflow;
extern bool amd_iommu_snp_en;

#ifdef CONFIG_SWIOTLB
extern bool x86_swiotlb_enable;
#else
#define x86_swiotlb_enable false
#endif

/* 10 seconds */
#define DMAR_OPERATION_TIMEOUT ((cycles_t) tsc_khz*10*1000)

static inline int __init
arch_rmrr_sanity_check(struct acpi_dmar_reserved_memory *rmrr)
{
	u64 start = rmrr->base_address;
	u64 end = rmrr->end_address + 1;
	int entry_type;

	entry_type = e820__get_entry_type(start, end);
	if (entry_type == E820_TYPE_RESERVED || entry_type == E820_TYPE_NVS)
		return 0;

	pr_err(FW_BUG "No firmware reserved region can cover this RMRR [%#018Lx-%#018Lx], contact BIOS vendor for fixes\n",
	       start, end - 1);
	return -EINVAL;
}

#endif /* _ASM_X86_IOMMU_H */
     +�Ç¿Å      +File not found.
     -�Ç¿Å      -File not found.
     /ˆÂÁ168¿Å  ¨    /# SPDX-License-Identifier: GPL-2.0

obj-$(CONFIG_USB_ROLE_SWITCH)		+= roles.o
roles-y					:= class.o
obj-$(CONFIG_USB_ROLES_INTEL_XHCI)	+= intel-xhci-usb-role-switch.o
     1�Ç¿Å      1File not found.
     3ˆÂÁƒ,µ¾¿Å 	    3/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _X86_POSTED_INTR_H
#define _X86_POSTED_INTR_H

#define POSTED_INTR_ON  0
#define POSTED_INTR_SN  1

#define PID_TABLE_ENTRY_VALID 1

/* Posted-Interrupt Descriptor */
struct pi_desc {
	u32 pir[8];     /* Posted interrupt requested */
	union {
		struct {
			u16	notifications; /* Suppress and outstanding bits */
			u8	nv;
			u8	rsvd_2;
			u32	ndst;
		};
		u64 control;
	};
	u32 rsvd[6];
} __aligned(64);

static inline bool pi_test_and_set_on(struct pi_desc *pi_desc)
{
	return test_and_set_bit(POSTED_INTR_ON, (unsigned long *)&pi_desc->control);
}

static inline bool pi_test_and_clear_on(struct pi_desc *pi_desc)
{
	return test_and_clear_bit(POSTED_INTR_ON, (unsigned long *)&pi_desc->control);
}

static inline bool pi_test_and_clear_sn(struct pi_desc *pi_desc)
{
	return test_and_clear_bit(POSTED_INTR_SN, (unsigned long *)&pi_desc->control);
}

static inline bool pi_test_and_set_pir(int vector, struct pi_desc *pi_desc)
{
	return test_and_set_bit(vector, (unsigned long *)pi_desc->pir);
}

static inline bool pi_is_pir_empty(struct pi_desc *pi_desc)
{
	return bitmap_empty((unsigned long *)pi_desc->pir, NR_VECTORS);
}

static inline void pi_set_sn(struct pi_desc *pi_desc)
{
	set_bit(POSTED_INTR_SN, (unsigned long *)&pi_desc->control);
}

static inline void pi_set_on(struct pi_desc *pi_desc)
{
	set_bit(POSTED_INTR_ON, (unsigned long *)&pi_desc->control);
}

static inline void pi_clear_on(struct pi_desc *pi_desc)
{
	clear_bit(POSTED_INTR_ON, (unsigned long *)&pi_desc->control);
}

static inline void pi_clear_sn(struct pi_desc *pi_desc)
{
	clear_bit(POSTED_INTR_SN, (unsigned long *)&pi_desc->control);
}

static inline bool pi_test_on(struct pi_desc *pi_desc)
{
	return test_bit(POSTED_INTR_ON, (unsigned long *)&pi_desc->control);
}

static inline bool pi_test_sn(struct pi_desc *pi_desc)
{
	return test_bit(POSTED_INTR_SN, (unsigned long *)&pi_desc->control);
}

static inline bool pi_test_pir(int vector, struct pi_desc *pi_desc)
{
	return test_bit(vector, (unsigned long *)pi_desc->pir);
}

/* Non-atomic helpers */
static inline void __pi_set_sn(struct pi_desc *pi_desc)
{
	pi_desc->notifications |= BIT(POSTED_INTR_SN);
}

static inline void __pi_clear_sn(struct pi_desc *pi_desc)
{
	pi_desc->notifications &= ~BIT(POSTED_INTR_SN);
}

#endif /* _X86_POSTED_INTR_H */
  1   5ˆl–äY>”êe¶…8 …p\TÅ£Âƒq×Ÿ_�uÐb&=LyZof¯ÁÇ …    5‹     Ì[ÍrIr¾×SÔò`‘#¢dïÆ½^”H‰!‘’IŽ´ÁÁ„£Ðè®ÆVuòáxõ3ø´sá3Ì‰çOUu5ÎÈž=xc5$Ñ]Y™Yùóef¡?Üúî·ÿOô‡[øO^äÚÉ©.”\fNÎ”Q6«ÕD.u�ËEõOY_^ØÌ¸>•u®¤«;V´¤¨ü�jwšÈÑg9Z>—Û/ööþ¸#33‘GEeufä™Ê�vã\þiZöì¿ÍÊëþDýß|þb‡È¼m&•“uEüN«bîdeä•.{uE´&j¤zÅó=Ó›)[fFô/ÞÈ�Ç'ò¹Ü‚=ÿ +Ÿ?ß’RôÏßÈƒÃËÃã—oN¿?}-€�öäG-�O¶ºR“]©´‘êºö'º®¬œÞ[ùÁV3›•¥VVY"ó·ƒÃ³s s!ú#+†Ó 5œ~�?¼_Ô