xref: /openbmc/linux/arch/ia64/include/asm/fpswa.h (revision 498495dba268b20e8eadd7fe93c140c68b6cc9d2)
1*b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
27f30491cSTony Luck #ifndef _ASM_IA64_FPSWA_H
37f30491cSTony Luck #define _ASM_IA64_FPSWA_H
47f30491cSTony Luck 
57f30491cSTony Luck /*
67f30491cSTony Luck  * Floating-point Software Assist
77f30491cSTony Luck  *
87f30491cSTony Luck  * Copyright (C) 1999 Intel Corporation.
97f30491cSTony Luck  * Copyright (C) 1999 Asit Mallick <asit.k.mallick@intel.com>
107f30491cSTony Luck  * Copyright (C) 1999 Goutham Rao <goutham.rao@intel.com>
117f30491cSTony Luck  */
127f30491cSTony Luck 
137f30491cSTony Luck typedef struct {
147f30491cSTony Luck 	/* 4 * 128 bits */
157f30491cSTony Luck 	unsigned long fp_lp[4*2];
167f30491cSTony Luck } fp_state_low_preserved_t;
177f30491cSTony Luck 
187f30491cSTony Luck typedef struct {
197f30491cSTony Luck 	/* 10 * 128 bits */
207f30491cSTony Luck 	unsigned long fp_lv[10 * 2];
217f30491cSTony Luck } fp_state_low_volatile_t;
227f30491cSTony Luck 
237f30491cSTony Luck typedef	struct {
247f30491cSTony Luck 	/* 16 * 128 bits */
257f30491cSTony Luck 	unsigned long fp_hp[16 * 2];
267f30491cSTony Luck } fp_state_high_preserved_t;
277f30491cSTony Luck 
287f30491cSTony Luck typedef struct {
297f30491cSTony Luck 	/* 96 * 128 bits */
307f30491cSTony Luck 	unsigned long fp_hv[96 * 2];
317f30491cSTony Luck } fp_state_high_volatile_t;
327f30491cSTony Luck 
337f30491cSTony Luck /**
347f30491cSTony Luck  * floating point state to be passed to the FP emulation library by
357f30491cSTony Luck  * the trap/fault handler
367f30491cSTony Luck  */
377f30491cSTony Luck typedef struct {
387f30491cSTony Luck 	unsigned long			bitmask_low64;
397f30491cSTony Luck 	unsigned long			bitmask_high64;
407f30491cSTony Luck 	fp_state_low_preserved_t	*fp_state_low_preserved;
417f30491cSTony Luck 	fp_state_low_volatile_t		*fp_state_low_volatile;
427f30491cSTony Luck 	fp_state_high_preserved_t	*fp_state_high_preserved;
437f30491cSTony Luck 	fp_state_high_volatile_t	*fp_state_high_volatile;
447f30491cSTony Luck } fp_state_t;
457f30491cSTony Luck 
467f30491cSTony Luck typedef struct {
477f30491cSTony Luck 	unsigned long status;
487f30491cSTony Luck 	unsigned long err0;
497f30491cSTony Luck 	unsigned long err1;
507f30491cSTony Luck 	unsigned long err2;
517f30491cSTony Luck } fpswa_ret_t;
527f30491cSTony Luck 
537f30491cSTony Luck /**
547f30491cSTony Luck  * function header for the Floating Point software assist
557f30491cSTony Luck  * library. This function is invoked by the Floating point software
567f30491cSTony Luck  * assist trap/fault handler.
577f30491cSTony Luck  */
587f30491cSTony Luck typedef fpswa_ret_t (*efi_fpswa_t) (unsigned long trap_type, void *bundle, unsigned long *ipsr,
597f30491cSTony Luck 				    unsigned long *fsr, unsigned long *isr, unsigned long *preds,
607f30491cSTony Luck 				    unsigned long *ifs, fp_state_t *fp_state);
617f30491cSTony Luck 
627f30491cSTony Luck /**
637f30491cSTony Luck  * This is the FPSWA library interface as defined by EFI.  We need to pass a
647f30491cSTony Luck  * pointer to the interface itself on a call to the assist library
657f30491cSTony Luck  */
667f30491cSTony Luck typedef struct {
677f30491cSTony Luck 	unsigned int	 revision;
687f30491cSTony Luck 	unsigned int	 reserved;
697f30491cSTony Luck 	efi_fpswa_t	 fpswa;
707f30491cSTony Luck } fpswa_interface_t;
717f30491cSTony Luck 
727f30491cSTony Luck extern fpswa_interface_t *fpswa_interface;
737f30491cSTony Luck 
747f30491cSTony Luck #endif /* _ASM_IA64_FPSWA_H */
75