mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 12:43:29 +02:00
ia64 currently organizes the iommu probing along machves, which isn't very helpful. Instead just try to probe for Intel IOMMUs in mem_init as they are properly described in ACPI and if none was found initialize the swiotlb buffer. The HP SBA handling is then only done delayed when the actual hardware is probed. Only in the case that we actually found usable IOMMUs we then set up the DMA ops and free the not needed swiotlb buffer. This scheme gets rid of the need for the dma_init machvec operation, and the dig_vtd machvec. Signed-off-by: Christoph Hellwig <hch@lst.de> Link: https://lkml.kernel.org/r/20190813072514.23299-24-hch@lst.de Signed-off-by: Tony Luck <tony.luck@intel.com>
70 lines
1.8 KiB
C
70 lines
1.8 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Machine vector for IA-64.
|
|
*
|
|
* Copyright (C) 1999 Silicon Graphics, Inc.
|
|
* Copyright (C) Srinivasa Thirumalachar <sprasad@engr.sgi.com>
|
|
* Copyright (C) Vijay Chander <vijay@engr.sgi.com>
|
|
* Copyright (C) 1999-2001, 2003-2004 Hewlett-Packard Co.
|
|
* David Mosberger-Tang <davidm@hpl.hp.com>
|
|
*/
|
|
#ifndef _ASM_IA64_MACHVEC_H
|
|
#define _ASM_IA64_MACHVEC_H
|
|
|
|
#include <linux/types.h>
|
|
|
|
struct device;
|
|
|
|
typedef void ia64_mv_setup_t (char **);
|
|
|
|
extern void machvec_setup (char **);
|
|
|
|
# if defined (CONFIG_IA64_DIG)
|
|
# include <asm/machvec_dig.h>
|
|
# elif defined (CONFIG_IA64_HP_ZX1)
|
|
# include <asm/machvec_hpzx1.h>
|
|
# elif defined (CONFIG_IA64_SGI_UV)
|
|
# include <asm/machvec_uv.h>
|
|
# elif defined (CONFIG_IA64_GENERIC)
|
|
|
|
# ifdef MACHVEC_PLATFORM_HEADER
|
|
# include MACHVEC_PLATFORM_HEADER
|
|
# else
|
|
# define ia64_platform_name ia64_mv.name
|
|
# define platform_setup ia64_mv.setup
|
|
# endif
|
|
|
|
/* __attribute__((__aligned__(16))) is required to make size of the
|
|
* structure multiple of 16 bytes.
|
|
* This will fillup the holes created because of section 3.3.1 in
|
|
* Software Conventions guide.
|
|
*/
|
|
struct ia64_machine_vector {
|
|
const char *name;
|
|
ia64_mv_setup_t *setup;
|
|
} __attribute__((__aligned__(16))); /* align attrib? see above comment */
|
|
|
|
#define MACHVEC_INIT(name) \
|
|
{ \
|
|
#name, \
|
|
platform_setup, \
|
|
}
|
|
|
|
extern struct ia64_machine_vector ia64_mv;
|
|
extern void machvec_init (const char *name);
|
|
extern void machvec_init_from_cmdline(const char *cmdline);
|
|
|
|
# else
|
|
# error Unknown configuration. Update arch/ia64/include/asm/machvec.h.
|
|
# endif /* CONFIG_IA64_GENERIC */
|
|
|
|
/*
|
|
* Define default versions so we can extend machvec for new platforms without having
|
|
* to update the machvec files for all existing platforms.
|
|
*/
|
|
#ifndef platform_setup
|
|
# define platform_setup machvec_setup
|
|
#endif
|
|
|
|
#endif /* _ASM_IA64_MACHVEC_H */
|