[26490] 2021-08-03_Linux中断子系统的驱动解析

文档创建者:s7ckTeam
浏览次数:1
最后更新:2025-01-19
2021-08-03_Linux中断子系统的驱动解析 L i n u x   L i n u x   2 0 2 1 - 0 8 - 0 3   P e t e r G I C     l i n u x   k e r n e l     G I C   v 3   ( d r i v e r s / i r q c h i p / i r q - g i c - v 3 . c ) c o m p a t i b l e G I C v 3 r e g   G I C G I C D , G I C R , G I C C # i n t e r r u p t - c e l l s ( i n t e r r u p t s )   c e l l   i n t e r r u p t - c o n t r o l l e r :   i n t e r r u p t s   P P I     D o c u m e n t a t i o n / d e v i c e t r e e / b i n d i n g s     . P e t e r   L i u N X P C S D N A R M L i n u x A n d r o i d g i c :   i n t e r r u p t - c o n t r o l l e r @ 5 1 a 0 0 0 0 0   {                 c o m p a t i b l e   =   " a r m , g i c - v 3 " ;                 r e g   =   < 0 x 0   0 x 5 1 a 0 0 0 0 0   0   0 x 1 0 0 0 0 > ,   / *   G I C   D i s t   * /                             < 0 x 0   0 x 5 1 b 0 0 0 0 0   0   0 x C 0 0 0 0 > ,   / *   G I C R   * /                             < 0 x 0   0 x 5 2 0 0 0 0 0 0   0   0 x 2 0 0 0 > ,     / *   G I C C   * /                             < 0 x 0   0 x 5 2 0 1 0 0 0 0   0   0 x 1 0 0 0 > ,     / *   G I C H   * /                             < 0 x 0   0 x 5 2 0 2 0 0 0 0   0   0 x 2 0 0 0 0 > ;   / *   G I C V   * /                 # i n t e r r u p t - c e l l s   =   < 3 > ;                 i n t e r r u p t - c o n t r o l l e r ;                 i n t e r r u p t s   =   < G I C _ P P I   9                                 ( G I C _ C P U _ M A S K _ S I M P L E ( 6 )   |   I R Q _ T Y P E _ L E V E L _ H I G H ) > ;                 i n t e r r u p t - p a r e n t   =   < & g i c > ; } ;
1 .   i r q   c h i p   d r i v e r     I R Q C H I P _ D E C L A R E     _ _ i r q c h i p _ o f _ t a b l e   : _ _ i r q c h i p _ o f _ t a b l e     v m l i n u x . l d s     _ _ i r q c h i p _ b e g i n     _ _ i r q c h i p _ o f _ e n d   o f _ i r q _ i n i t     _ _ i r q c h i p _ o f _ t a b l e   I R Q C H I P _ D E C L A R E   o f _ i r q _ i n i t     a r m , g i c - v 3   o r _ i r q _ i n i t     I R Q C H I P _ D E C L A R E     g i c _ o f _ i n i t   G I C   2 .   g i c _ o f _ i n i t   I R Q C H I P _ D E C L A R E ( g i c _ v 3 ,   " a r m , g i c - v 3 " ,   g i c _ o f _ i n i t ) ; # d e f i n e   I R Q C H I P _ D E C L A R E ( n a m e ,   c o m p a t ,   f n )   O F _ D E C L A R E _ 2 ( i r q c h i p ,   n a m e ,   c o m p a t ,   f n ) # d e f i n e   O F _ D E C L A R E _ 2 ( t a b l e ,   n a m e ,   c o m p a t ,   f n )                     _ O F _ D E C L A R E ( t a b l e ,   n a m e ,   c o m p a t ,   f n ,   o f _ i n i t _ f n _ 2 ) # d e f i n e   _ O F _ D E C L A R E ( t a b l e ,   n a m e ,   c o m p a t ,   f n ,   f n _ t y p e )                                   s t a t i c   c o n s t   s t r u c t   o f _ d e v i c e _ i d   _ _ o f _ t a b l e _ # # n a m e                                   _ _ u s e d   _ _ s e c t i o n ( _ _ # # t a b l e # # _ o f _ t a b l e )                                             =   {   . c o m p a t i b l e   =   c o m p a t ,                                                             . d a t a   =   ( f n   = =   ( f n _ t y p e ) N U L L )   ?   f n   :   f n     } # i f d e f   C O N F I G _ I R Q C H I P         # d e f i n e   I R Q C H I P _ O F _ M A T C H _ T A B L E ( )                                                         .   =   A L I G N ( 8 ) ;                                                                       V M L I N U X _ S Y M B O L ( _ _ i r q c h i p _ b e g i n )   =   . ;                                                 * ( _ _ i r q c h i p _ o f _ t a b l e )                                                               * ( _ _ i r q c h i p _ o f _ e n d ) # e n d i f s t a t i c   i n t   _ _ i n i t   g i c _ o f _ i n i t ( s t r u c t   d e v i c e _ n o d e   * n o d e ,   s t r u c t   d e v i c e _ n o d e   * p a r e n t ) {     . . . . . .   d i s t _ b a s e   =   o f _ i o m a p ( n o d e ,   0 ) ;                                                                                       - - - - - - ( 1 )   i f   ( ! d i s t _ b a s e )   {
  i f   ( ! d i s t _ b a s e )   {     p r _ e r r ( " % p O F :   u n a b l e   t o   m a p   g i c   d i s t   r e g i s t e r s n " ,   n o d e ) ;     r e t u r n   - E N X I O ;   }   e r r   =   g i c _ v a l i d a t e _ d i s t _ v e r s i o n ( d i s t _ b a s e ) ;                                                             - - - - - - ( 2 )   i f   ( e r r )   {     p r _ e r r ( " % p O F :   n o   d i s t r i b u t o r   d e t e c t e d ,   g i v i n g   u p n " ,   n o d e ) ;     g o t o   o u t _ u n m a p _ d i s t ;   }   i f   ( o f _ p r o p e r t y _ r e a d _ u 3 2 ( n o d e ,   " # r e d i s t r i b u t o r - r e g i o n s " ,   & n r _ r e d i s t _ r e g i o n s ) )     - - - - - - ( 3 )     n r _ r e d i s t _ r e g i o n s   =   1 ;   r d i s t _ r e g s   =   k z a l l o c ( s i z e o f ( * r d i s t _ r e g s )   *   n r _ r e d i s t _ r e g i o n s ,   G F P _ K E R N E L ) ;   i f   ( ! r d i s t _ r e g s )   {     e r r   =   - E N O M E M ;     g o t o   o u t _ u n m a p _ d i s t ;   }   f o r   ( i   =   0 ;   i   <   n r _ r e d i s t _ r e g i o n s ;   i + + )   {                                                                 - - - - - - ( 4 )     s t r u c t   r e s o u r c e   r e s ;     i n t   r e t ;     r e t   =   o f _ a d d r e s s _ t o _ r e s o u r c e ( n o d e ,   1   +   i ,   & r e s ) ;     r d i s t _ r e g s [ i ] . r e d i s t _ b a s e   =   o f _ i o m a p ( n o d e ,   1   +   i ) ;     i f   ( r e t   | |   ! r d i s t _ r e g s [ i ] . r e d i s t _ b a s e )   {       p r _ e r r ( " % p O F :   c o u l d n ' t   m a p   r e g i o n   % d n " ,   n o d e ,   i ) ;       e r r   =   - E N O D E V ;       g o t o   o u t _ u n m a p _ r d i s t ;     }     r d i s t _ r e g s [ i ] . p h y s _ b a s e   =   r e s . s t a r t ;   }     i f   ( o f _ p r o p e r t y _ r e a d _ u 6 4 ( n o d e ,   " r e d i s t r i b u t o r - s t r i d e " ,   & r e d i s t _ s t r i d e ) )     - - - - - - ( 5 )     r e d i s t _ s t r i d e   =   0 ;   e r r   =   g i c _ i n i t _ b a s e s ( d i s t _ b a s e ,   r d i s t _ r e g s ,   n r _ r e d i s t _ r e g i o n s ,                       - - - - - - ( 6 )                 r e d i s t _ s t r i d e ,   & n o d e - > f w n o d e ) ;   i f   ( e r r )     g o t o   o u t _ u n m a p _ r d i s t ;
1 .     G I C D   2 .     G I C D     G I C v 3     G I C v 4 G I C D _ P I D R 2 b i t [ 7 : 4 ] . 0 x 1 G I C v 1   0 x 2 G I C v 2 3 .     D T S     r e d i s t r i b u t o r - r e g i o n s   4 .     G I C R   5 .     D T S     r e d i s t r i b u t o r - s t r i d e   6 .   7 .     P P I     g i c _ p o p u l a t e _ p p i _ p a r t i t i o n s ( n o d e ) ;                                                                               - - - - - - ( 7 )   g i c _ o f _ s e t u p _ k v m _ i n f o ( n o d e ) ;   r e t u r n   0 ;     . . . . . .   r e t u r n   e r r ; }
1 .     S P I   2 .     i r q   d o m a i n   i r q _ d o m a i n     i r q   n u m b e r 3 .     a r c h     i r q   h a n d l e r g i c _ i r q _ h a n d l e     g i c   s t a t i c   i n t   _ _ i n i t   g i c _ i n i t _ b a s e s ( v o i d   _ _ i o m e m   * d i s t _ b a s e ,           s t r u c t   r e d i s t _ r e g i o n   * r d i s t _ r e g s ,           u 3 2   n r _ r e d i s t _ r e g i o n s ,           u 6 4   r e d i s t _ s t r i d e ,           s t r u c t   f w n o d e _ h a n d l e   * h a n d l e ) {     . . . . . .   t y p e r   =   r e a d l _ r e l a x e d ( g i c _ d a t a . d i s t _ b a s e   +   G I C D _ T Y P E R ) ;                                 - - - - - - ( 1 )   g i c _ d a t a . r d i s t s . i d _ b i t s   =   G I C D _ T Y P E R _ I D _ B I T S ( t y p e r ) ;   g i c _ i r q s   =   G I C D _ T Y P E R _ I R Q S ( t y p e r ) ;   i f   ( g i c _ i r q s   >   1 0 2 0 )     g i c _ i r q s   =   1 0 2 0 ;   g i c _ d a t a . i r q _ n r   =   g i c _ i r q s ;   g i c _ d a t a . d o m a i n   =   i r q _ d o m a i n _ c r e a t e _ t r e e ( h a n d l e ,   & g i c _ i r q _ d o m a i n _ o p s ,     - - - - - - ( 2 )               & g i c _ d a t a ) ;   g i c _ d a t a . r d i s t s . r d i s t   =   a l l o c _ p e r c p u ( t y p e o f ( * g i c _ d a t a . r d i s t s . r d i s t ) ) ;   g i c _ d a t a . r d i s t s . h a s _ v l p i s   =   t r u e ;   g i c _ d a t a . r d i s t s . h a s _ d i r e c t _ l p i   =   t r u e ;     . . . . . .   s e t _ h a n d l e _ i r q ( g i c _ h a n d l e _ i r q ) ;                                                                                 - - - - - - ( 3 )   g i c _ u p d a t e _ v l p i _ p r o p e r t i e s ( ) ;                                                                                     - - - - - - ( 4 )   i f   ( I S _ E N A B L E D ( C O N F I G _ A R M _ G I C _ V 3 _ I T S )   & &   g i c _ d i s t _ s u p p o r t s _ l p i s ( ) )     i t s _ i n i t ( h a n d l e ,   & g i c _ d a t a . r d i s t s ,   g i c _ d a t a . d o m a i n ) ;                                     - - - - - - ( 5 )   g i c _ s m p _ i n i t ( ) ;                                                                                                                 - - - - - - ( 6 )   g i c _ d i s t _ i n i t ( ) ;                                                                                                               - - - - - - ( 7 )   g i c _ c p u _ i n i t ( ) ;                                                                                                                 - - - - - - ( 8 )   g i c _ c p u _ p m _ i n i t ( ) ;                                                                                                           - - - - - - ( 9 )   r e t u r n   0 ;     . . . . . . }
4 .   g i c   5 .     I T S 6 .     S M P     I P I   g i c _ r a i s e _ s o f t i r 7 .     D i s t r i b u t o r 8 .     C P U   i n t e r f a c e 9 .     G I C   线 l i n u x     i r q _ d o m a i n  
i r q _ d o m a i n     i r q _ d o m a i n   i r q     i r q _ d o m a i n     i n t e r r u p t         l i n u x   k e r n e l   s t r u c t   i r q _ d e s c  
i r q _ d a t a h a n d l e _ i r q   s t r u c t   i r q a c t i o n     i r q _ d e s c     a c t i o n a c t i o n s t r u c t   i r q _ d a t a   s t r u c t   i r q _ d e s c   {   s t r u c t   i r q _ c o m m o n _ d a t a   i r q _ c o m m o n _ d a t a ;   s t r u c t   i r q _ d a t a     i r q _ d a t a ;       u n s i g n e d   i n t   _ _ p e r c p u   * k s t a t _ i r q s ;   i r q _ f l o w _ h a n d l e r _ t   h a n d l e _ i r q ;         . . . . . .   s t r u c t   i r q a c t i o n   * a c t i o n ;     . . . . . . }   _ _ _ _ c a c h e l i n e _ i n t e r n o d e a l i g n e d _ i n _ s m p ;
i r q h w i r q c h i p   i r q _ c h i p   d o m a i n   i r q _ d o m a i n   s t r u c t   i r q _ c h i p   s t r u c t   i r q _ d a t a   {   u 3 2       m a s k ;   u n s i g n e d   i n t     i r q ;   u n s i g n e d   l o n g     h w i r q ;   s t r u c t   i r q _ c o m m o n _ d a t a   * c o m m o n ;   s t r u c t   i r q _ c h i p     * c h i p ;   s t r u c t   i r q _ d o m a i n   * d o m a i n ; # i f d e f   C O N F I G _ I R Q _ D O M A I N _ H I E R A R C H Y   s t r u c t   i r q _ d a t a     * p a r e n t _ d a t a ; # e n d i f   v o i d       * c h i p _ d a t a ; } ;
p a r e n t _ d e v i c e n a m e / p r o c / i n t e r r u p t s   i r q _ s t a r t u p   N U L L   e n a b l e i r q _ s h u t d o w n   N U L L   d i s a b l e i r q _ e n a b l e 使   N U L L   c h i p - > u n m a s k i r q _ d i s a b l e i r q _ a c k i r q _ m a s k i r q _ m a s k _ a c k i r q _ u n m a s k i r q _ e o i i r q _ s e t _ a f f i n i t y   S M P     C P U   i r q _ r e t r i g g e r   C P U s t r u c t   i r q _ c h i p   {   s t r u c t   d e v i c e   * p a r e n t _ d e v i c e ;   c o n s t   c h a r   * n a m e ;   u n s i g n e d   i n t   ( * i r q _ s t a r t u p ) ( s t r u c t   i r q _ d a t a   * d a t a ) ;   v o i d     ( * i r q _ s h u t d o w n ) ( s t r u c t   i r q _ d a t a   * d a t a ) ;   v o i d     ( * i r q _ e n a b l e ) ( s t r u c t   i r q _ d a t a   * d a t a ) ;   v o i d     ( * i r q _ d i s a b l e ) ( s t r u c t   i r q _ d a t a   * d a t a ) ;   v o i d     ( * i r q _ a c k ) ( s t r u c t   i r q _ d a t a   * d a t a ) ;   v o i d     ( * i r q _ m a s k ) ( s t r u c t   i r q _ d a t a   * d a t a ) ;   v o i d     ( * i r q _ m a s k _ a c k ) ( s t r u c t   i r q _ d a t a   * d a t a ) ;   v o i d     ( * i r q _ u n m a s k ) ( s t r u c t   i r q _ d a t a   * d a t a ) ;   v o i d     ( * i r q _ e o i ) ( s t r u c t   i r q _ d a t a   * d a t a ) ;   i n t     ( * i r q _ s e t _ a f f i n i t y ) ( s t r u c t   i r q _ d a t a   * d a t a ,   c o n s t   s t r u c t   c p u m a s k   * d e s t ,   b o o l   f o r c e ) ;   i n t     ( * i r q _ r e t r i g g e r ) ( s t r u c t   i r q _ d a t a   * d a t a ) ;   i n t     ( * i r q _ s e t _ t y p e ) ( s t r u c t   i r q _ d a t a   * d a t a ,   u n s i g n e d   i n t   f l o w _ t y p e ) ;   i n t     ( * i r q _ s e t _ w a k e ) ( s t r u c t   i r q _ d a t a   * d a t a ,   u n s i g n e d   i n t   o n ) ;   v o i d     ( * i r q _ b u s _ l o c k ) ( s t r u c t   i r q _ d a t a   * d a t a ) ;   v o i d     ( * i r q _ b u s _ s y n c _ u n l o c k ) ( s t r u c t   i r q _ d a t a   * d a t a ) ;   . . . . . . } ;
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则