2021-09-30 14:31:00 +00:00
/* SPDX-License-Identifier: GPL-2.0-only */
/ *
* Copyright ( c ) 2 0 2 1 , M i c r o s o f t C o r p o r a t i o n .
* Pasha T a t a s h i n < p a s h a . t a t a s h i n @soleen.com>
* /
# include < l i n u x / l i n k a g e . h >
# include < a s m / a s s e m b l e r . h >
# include < a s m / k v m _ a s m . h >
.macro invalid_vector label
SYM_ C O D E _ S T A R T _ L O C A L ( \ l a b e l )
.align 7
b \ l a b e l
SYM_ C O D E _ E N D ( \ l a b e l )
.endm
.macro el1_sync_vector
SYM_ C O D E _ S T A R T _ L O C A L ( e l 1 _ s y n c )
.align 7
cmp x0 , #H V C _ S E T _ V E C T O R S / * C a l l e d f r o m h i b e r n a t e * /
b. n e 1 f
msr v b a r _ e l 2 , x1
mov x0 , x z r
eret
2021-09-30 14:31:06 +00:00
1 : cmp x0 , #H V C _ S O F T _ R E S T A R T / * C a l l e d f r o m k e x e c * /
b. n e 2 f
mov x0 , x2
mov x2 , x4
mov x4 , x1
mov x1 , x3
br x4
2 : /* Unexpected argument, set an error */
2021-09-30 14:31:00 +00:00
mov_ q x0 , H V C _ S T U B _ E R R
eret
SYM_ C O D E _ E N D ( e l 1 _ s y n c )
.endm
SYM_ C O D E _ S T A R T ( t r a n s _ p g d _ s t u b _ v e c t o r s )
invalid_ v e c t o r h y p _ s t u b _ e l 2 t _ s y n c _ i n v a l i d / / S y n c h r o n o u s E L 2 t
invalid_ v e c t o r h y p _ s t u b _ e l 2 t _ i r q _ i n v a l i d / / I R Q E L 2 t
invalid_ v e c t o r h y p _ s t u b _ e l 2 t _ f i q _ i n v a l i d / / F I Q E L 2 t
invalid_ v e c t o r h y p _ s t u b _ e l 2 t _ e r r o r _ i n v a l i d / / E r r o r E L 2 t
invalid_ v e c t o r h y p _ s t u b _ e l 2 h _ s y n c _ i n v a l i d / / S y n c h r o n o u s E L 2 h
invalid_ v e c t o r h y p _ s t u b _ e l 2 h _ i r q _ i n v a l i d / / I R Q E L 2 h
invalid_ v e c t o r h y p _ s t u b _ e l 2 h _ f i q _ i n v a l i d / / F I Q E L 2 h
invalid_ v e c t o r h y p _ s t u b _ e l 2 h _ e r r o r _ i n v a l i d / / E r r o r E L 2 h
el1 _ s y n c _ v e c t o r / / S y n c h r o n o u s 6 4 - b i t E L 1
invalid_ v e c t o r h y p _ s t u b _ e l 1 _ i r q _ i n v a l i d / / I R Q 6 4 - b i t E L 1
invalid_ v e c t o r h y p _ s t u b _ e l 1 _ f i q _ i n v a l i d / / F I Q 6 4 - b i t E L 1
invalid_ v e c t o r h y p _ s t u b _ e l 1 _ e r r o r _ i n v a l i d / / E r r o r 6 4 - b i t E L 1
invalid_ v e c t o r h y p _ s t u b _ 3 2 b _ e l 1 _ s y n c _ i n v a l i d / / S y n c h r o n o u s 3 2 - b i t E L 1
invalid_ v e c t o r h y p _ s t u b _ 3 2 b _ e l 1 _ i r q _ i n v a l i d / / I R Q 3 2 - b i t E L 1
invalid_ v e c t o r h y p _ s t u b _ 3 2 b _ e l 1 _ f i q _ i n v a l i d / / F I Q 3 2 - b i t E L 1
invalid_ v e c t o r h y p _ s t u b _ 3 2 b _ e l 1 _ e r r o r _ i n v a l i d / / E r r o r 3 2 - b i t E L 1
.align 11
SYM_ I N N E R _ L A B E L ( _ _ t r a n s _ p g d _ s t u b _ v e c t o r s _ e n d , S Y M _ L _ L O C A L )
SYM_ C O D E _ E N D ( t r a n s _ p g d _ s t u b _ v e c t o r s )
# Check t h e t r a n s _ p g d _ s t u b _ v e c t o r s d i d n ' t o v e r f l o w
.org . - ( _ _ trans_ p g d _ s t u b _ v e c t o r s _ e n d - t r a n s _ p g d _ s t u b _ v e c t o r s ) + S Z _ 2 K