[26460] 2021-06-23_Linux内核笔记之中断映射

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

本版积分规则