/* SPDX-License-Identifier: GPL-2.0 */ /* * Machine vector for IA-64. * * Copyright (C) 1999 Silicon Graphics, Inc. * Copyright (C) Srinivasa Thirumalachar * Copyright (C) Vijay Chander * Copyright (C) 1999-2001, 2003-2004 Hewlett-Packard Co. * David Mosberger-Tang */ #ifndef _ASM_IA64_MACHVEC_H #define _ASM_IA64_MACHVEC_H #include struct device; typedef void ia64_mv_setup_t (char **); typedef void ia64_mv_irq_init_t (void); typedef void ia64_mv_dma_init (void); typedef const struct dma_map_ops *ia64_mv_dma_get_ops(struct device *); static inline void machvec_noop (void) { } extern void machvec_setup (char **); # if defined (CONFIG_IA64_HP_SIM) # include # elif defined (CONFIG_IA64_DIG) # include # elif defined(CONFIG_IA64_DIG_VTD) # include # elif defined (CONFIG_IA64_HP_ZX1) # include # elif defined (CONFIG_IA64_HP_ZX1_SWIOTLB) # include # elif defined (CONFIG_IA64_SGI_UV) # include # 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 # define platform_irq_init ia64_mv.irq_init # define platform_dma_init ia64_mv.dma_init # define platform_dma_get_ops ia64_mv.dma_get_ops # 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; ia64_mv_irq_init_t *irq_init; ia64_mv_dma_init *dma_init; ia64_mv_dma_get_ops *dma_get_ops; } __attribute__((__aligned__(16))); /* align attrib? see above comment */ #define MACHVEC_INIT(name) \ { \ #name, \ platform_setup, \ platform_irq_init, \ platform_dma_init, \ platform_dma_get_ops, \ } 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 */ extern void swiotlb_dma_init(void); extern const struct dma_map_ops *dma_get_ops(struct device *); /* * 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 #ifndef platform_irq_init # define platform_irq_init machvec_noop #endif #ifndef platform_dma_init # define platform_dma_init swiotlb_dma_init #endif #ifndef platform_dma_get_ops # define platform_dma_get_ops dma_get_ops #endif #endif /* _ASM_IA64_MACHVEC_H */