162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#ifndef _ASM_M68K_MODULE_H 362306a36Sopenharmony_ci#define _ASM_M68K_MODULE_H 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#include <asm-generic/module.h> 662306a36Sopenharmony_ci 762306a36Sopenharmony_cienum m68k_fixup_type { 862306a36Sopenharmony_ci m68k_fixup_memoffset, 962306a36Sopenharmony_ci m68k_fixup_vnode_shift, 1062306a36Sopenharmony_ci}; 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_cistruct m68k_fixup_info { 1362306a36Sopenharmony_ci enum m68k_fixup_type type; 1462306a36Sopenharmony_ci void *addr; 1562306a36Sopenharmony_ci}; 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_cistruct mod_arch_specific { 1862306a36Sopenharmony_ci struct m68k_fixup_info *fixup_start, *fixup_end; 1962306a36Sopenharmony_ci}; 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci#ifdef CONFIG_MMU 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci#define MODULE_ARCH_INIT { \ 2462306a36Sopenharmony_ci .fixup_start = __start_fixup, \ 2562306a36Sopenharmony_ci .fixup_end = __stop_fixup, \ 2662306a36Sopenharmony_ci} 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci#define m68k_fixup(type, addr) \ 3062306a36Sopenharmony_ci " .section \".m68k_fixup\",\"aw\"\n" \ 3162306a36Sopenharmony_ci " .long " #type "," #addr "\n" \ 3262306a36Sopenharmony_ci " .previous\n" 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci#endif /* CONFIG_MMU */ 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ciextern struct m68k_fixup_info __start_fixup[], __stop_fixup[]; 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_cistruct module; 3962306a36Sopenharmony_ciextern void module_fixup(struct module *mod, struct m68k_fixup_info *start, 4062306a36Sopenharmony_ci struct m68k_fixup_info *end); 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci#endif /* _ASM_M68K_MODULE_H */ 43