2005-04-16 15:20:36 -07:00
/ *
2006-10-03 23:01:26 +02:00
* include/ a s m - a r m / h a r d w a r e / e n t r y - m a c r o - i o m d . S
2005-04-16 15:20:36 -07:00
*
* Low- l e v e l I R Q h e l p e r m a c r o s f o r I O C / I O M D b a s e d p l a t f o r m s
*
* This f i l e i s l i c e n s e d u n d e r t h e t e r m s o f t h e G N U G e n e r a l P u b l i c
* License v e r s i o n 2 . T h i s p r o g r a m i s l i c e n s e d " a s i s " w i t h o u t a n y
* warranty o f a n y k i n d , w h e t h e r e x p r e s s o r i m p l i e d .
* /
/* IOC / IOMD based hardware */
# include < a s m / h a r d w a r e / i o m d . h >
.equ ioc_ b a s e _ h i g h , I O C _ B A S E & 0 x f f00 0 0 0 0
.equ ioc_ b a s e _ l o w , I O C _ B A S E & 0 x00 f f00 0 0
.macro disable_fiq
mov r12 , #i o c _ b a s e _ h i g h
.if ioc_base_low
orr r12 , r12 , #i o c _ b a s e _ l o w
.endif
strb r12 , [ r12 , #0x38 ] @ Disable FIQ register
.endm
.macro get_ i r q n r _ a n d _ b a s e , i r q n r , i r q s t a t , b a s e , t m p
mov r4 , #i o c _ b a s e _ h i g h @ p o i n t a t I O C
.if ioc_base_low
orr r4 , r4 , #i o c _ b a s e _ l o w
.endif
ldrb \ i r q s t a t , [ r4 , #I O M D _ I R Q R E Q B ] @ g e t h i g h p r i o r i t y f i r s t
ldr \ b a s e , =irq_prio_h
teq \ i r q s t a t , #0
# ifdef I O M D _ B A S E
ldreqb \ i r q s t a t , [ r4 , #I O M D _ D M A R E Q ] @ g e t d m a
addeq \ b a s e , \ b a s e , #256 @ irq_prio_h table size
teqeq \ i r q s t a t , #0
bne 2 4 0 6 f
# endif
ldreqb \ i r q s t a t , [ r4 , #I O M D _ I R Q R E Q A ] @ g e t l o w p r i o r i t y
addeq \ b a s e , \ b a s e , #256 @ irq_prio_d table size
teqeq \ i r q s t a t , #0
# ifdef I O M D _ I R Q R E Q C
ldreqb \ i r q s t a t , [ r4 , #I O M D _ I R Q R E Q C ]
addeq \ b a s e , \ b a s e , #256 @ irq_prio_l table size
teqeq \ i r q s t a t , #0
# endif
# ifdef I O M D _ I R Q R E Q D
ldreqb \ i r q s t a t , [ r4 , #I O M D _ I R Q R E Q D ]
addeq \ b a s e , \ b a s e , #256 @ irq_prio_lc table size
teqeq \ i r q s t a t , #0
# endif
2406 : ldrneb \ i r q n r , [ \ b a s e , \ i r q s t a t ] @ get IRQ number
.endm
/ *
* Interrupt t a b l e ( i n c o r p o r a t e s p r i o r i t y ) . P l e a s e n o t e t h a t w e
* rely o n t h e o r d e r o f t h e s e t a b l e s ( s e e a b o v e c o d e ) .
* /
.align 5
irq_prio_h : .byte 0 , 8 , 9 , 8 , 1 0 , 1 0 , 1 0 , 1 0 , 1 1 , 1 1 , 1 1 , 1 1 , 1 0 , 1 0 , 1 0 , 1 0
.byte 1 2 , 8 , 9 , 8 , 1 0 , 1 0 , 1 0 , 1 0 , 1 1 , 1 1 , 1 1 , 1 1 , 1 0 , 1 0 , 1 0 , 1 0
.byte 1 3 , 1 3 , 1 3 , 1 3 , 1 0 , 1 0 , 1 0 , 1 0 , 1 1 , 1 1 , 1 1 , 1 1 , 1 0 , 1 0 , 1 0 , 1 0
.byte 1 3 , 1 3 , 1 3 , 1 3 , 1 0 , 1 0 , 1 0 , 1 0 , 1 1 , 1 1 , 1 1 , 1 1 , 1 0 , 1 0 , 1 0 , 1 0
.byte 1 4 , 1 4 , 1 4 , 1 4 , 1 0 , 1 0 , 1 0 , 1 0 , 1 1 , 1 1 , 1 1 , 1 1 , 1 0 , 1 0 , 1 0 , 1 0
.byte 1 4 , 1 4 , 1 4 , 1 4 , 1 0 , 1 0 , 1 0 , 1 0 , 1 1 , 1 1 , 1 1 , 1 1 , 1 0 , 1 0 , 1 0 , 1 0
.byte 1 3 , 1 3 , 1 3 , 1 3 , 1 0 , 1 0 , 1 0 , 1 0 , 1 1 , 1 1 , 1 1 , 1 1 , 1 0 , 1 0 , 1 0 , 1 0
.byte 1 3 , 1 3 , 1 3 , 1 3 , 1 0 , 1 0 , 1 0 , 1 0 , 1 1 , 1 1 , 1 1 , 1 1 , 1 0 , 1 0 , 1 0 , 1 0
.byte 1 5 , 1 5 , 1 5 , 1 5 , 1 0 , 1 0 , 1 0 , 1 0 , 1 1 , 1 1 , 1 1 , 1 1 , 1 0 , 1 0 , 1 0 , 1 0
.byte 1 5 , 1 5 , 1 5 , 1 5 , 1 0 , 1 0 , 1 0 , 1 0 , 1 1 , 1 1 , 1 1 , 1 1 , 1 0 , 1 0 , 1 0 , 1 0
.byte 1 3 , 1 3 , 1 3 , 1 3 , 1 0 , 1 0 , 1 0 , 1 0 , 1 1 , 1 1 , 1 1 , 1 1 , 1 0 , 1 0 , 1 0 , 1 0
.byte 1 3 , 1 3 , 1 3 , 1 3 , 1 0 , 1 0 , 1 0 , 1 0 , 1 1 , 1 1 , 1 1 , 1 1 , 1 0 , 1 0 , 1 0 , 1 0
.byte 1 5 , 1 5 , 1 5 , 1 5 , 1 0 , 1 0 , 1 0 , 1 0 , 1 1 , 1 1 , 1 1 , 1 1 , 1 0 , 1 0 , 1 0 , 1 0
.byte 1 5 , 1 5 , 1 5 , 1 5 , 1 0 , 1 0 , 1 0 , 1 0 , 1 1 , 1 1 , 1 1 , 1 1 , 1 0 , 1 0 , 1 0 , 1 0
.byte 1 3 , 1 3 , 1 3 , 1 3 , 1 0 , 1 0 , 1 0 , 1 0 , 1 1 , 1 1 , 1 1 , 1 1 , 1 0 , 1 0 , 1 0 , 1 0
.byte 1 3 , 1 3 , 1 3 , 1 3 , 1 0 , 1 0 , 1 0 , 1 0 , 1 1 , 1 1 , 1 1 , 1 1 , 1 0 , 1 0 , 1 0 , 1 0
# ifdef I O M D _ B A S E
irq_prio_d : .byte 0 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6 , 1 9 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6
.byte 2 0 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6 , 1 9 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6
.byte 2 1 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6 , 1 9 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6
.byte 2 1 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6 , 1 9 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6
.byte 2 2 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6 , 1 9 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6
.byte 2 2 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6 , 1 9 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6
.byte 2 1 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6 , 1 9 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6
.byte 2 1 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6 , 1 9 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6
.byte 2 3 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6 , 1 9 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6
.byte 2 3 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6 , 1 9 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6
.byte 2 1 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6 , 1 9 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6
.byte 2 1 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6 , 1 9 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6
.byte 2 2 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6 , 1 9 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6
.byte 2 2 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6 , 1 9 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6
.byte 2 1 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6 , 1 9 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6
.byte 2 1 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6 , 1 9 , 1 6 , 1 7 , 1 6 , 1 8 , 1 6 , 1 7 , 1 6
# endif
irq_prio_l : .byte 0 , 0 , 1 , 0 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3
.byte 4 , 0 , 1 , 0 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3
.byte 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5
.byte 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5
.byte 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3
.byte 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3
.byte 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5
.byte 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5
.byte 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7
.byte 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7
.byte 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7
.byte 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7
.byte 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7
.byte 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7
.byte 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7
.byte 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7
# ifdef I O M D _ I R Q R E Q C
irq_prio_lc : .byte 24 , 2 4 , 2 5 , 2 4 , 2 6 , 2 6 , 2 6 , 2 6 , 2 7 , 2 7 , 2 7 , 2 7 , 2 7 , 2 7 , 2 7 , 2 7
.byte 2 8 , 2 4 , 2 5 , 2 4 , 2 6 , 2 6 , 2 6 , 2 6 , 2 7 , 2 7 , 2 7 , 2 7 , 2 7 , 2 7 , 2 7 , 2 7
.byte 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9
.byte 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9
.byte 3 0 , 3 0 , 3 0 , 3 0 , 3 0 , 3 0 , 3 0 , 3 0 , 2 7 , 2 7 , 2 7 , 2 7 , 2 7 , 2 7 , 2 7 , 2 7
.byte 3 0 , 3 0 , 3 0 , 3 0 , 3 0 , 3 0 , 3 0 , 3 0 , 2 7 , 2 7 , 2 7 , 2 7 , 2 7 , 2 7 , 2 7 , 2 7
.byte 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9
.byte 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9 , 2 9
.byte 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1
.byte 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1
.byte 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1
.byte 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1
.byte 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1
.byte 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1
.byte 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1
.byte 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1 , 3 1
# endif
# ifdef I O M D _ I R Q R E Q D
irq_prio_ld : .byte 40 , 4 0 , 4 1 , 4 0 , 4 2 , 4 2 , 4 2 , 4 2 , 4 3 , 4 3 , 4 3 , 4 3 , 4 3 , 4 3 , 4 3 , 4 3
.byte 4 4 , 4 0 , 4 1 , 4 0 , 4 2 , 4 2 , 4 2 , 4 2 , 4 3 , 4 3 , 4 3 , 4 3 , 4 3 , 4 3 , 4 3 , 4 3
.byte 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5
.byte 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5
.byte 4 6 , 4 6 , 4 6 , 4 6 , 4 6 , 4 6 , 4 6 , 4 6 , 4 3 , 4 3 , 4 3 , 4 3 , 4 3 , 4 3 , 4 3 , 4 3
.byte 4 6 , 4 6 , 4 6 , 4 6 , 4 6 , 4 6 , 4 6 , 4 6 , 4 3 , 4 3 , 4 3 , 4 3 , 4 3 , 4 3 , 4 3 , 4 3
.byte 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5
.byte 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5 , 4 5
.byte 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7
.byte 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7
.byte 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7
.byte 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7
.byte 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7
.byte 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7
.byte 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7
.byte 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7 , 4 7
# endif