SimpleOS

LXR

Navigation



Site hébergé par : enix

The LXR Cross Referencer for SOS

source navigation ]
diff markup ]
identifier search ]
general search ]
 
 
Article:1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 6.5 ] [ 7 ] [ 7.5 ] [ 8 ] [ 9 ] [ 9.5 ]

Diff markup

Differences between /hwcore/irq_wrappers.S (Article 6) and /hwcore/irq_wrappers.S (Article 4)


001 /* Copyright (C) 2004  The KOS Team               001 /* Copyright (C) 2004  The KOS Team
002    Copyright (C) 1999  Free Software Foundatio    002    Copyright (C) 1999  Free Software Foundation, Inc.
003                                                   003 
004    This program is free software; you can redi    004    This program is free software; you can redistribute it and/or
005    modify it under the terms of the GNU Genera    005    modify it under the terms of the GNU General Public License
006    as published by the Free Software Foundatio    006    as published by the Free Software Foundation; either version 2
007    of the License, or (at your option) any lat    007    of the License, or (at your option) any later version.
008                                                   008    
009    This program is distributed in the hope tha    009    This program is distributed in the hope that it will be useful,
010    but WITHOUT ANY WARRANTY; without even the     010    but WITHOUT ANY WARRANTY; without even the implied warranty of
011    MERCHANTABILITY or FITNESS FOR A PARTICULAR    011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
012    GNU General Public License for more details    012    GNU General Public License for more details.
013                                                   013    
014    You should have received a copy of the GNU     014    You should have received a copy of the GNU General Public License
015    along with this program; if not, write to t    015    along with this program; if not, write to the Free Software
016    Foundation, Inc., 59 Temple Place - Suite 3    016    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
017    USA.                                           017    USA. 
018 */                                                018 */
019 #define ASM_SOURCE 1                              019 #define ASM_SOURCE 1
020                                                   020          
021 .file "irq_wrappers.S"                            021 .file "irq_wrappers.S"
022                                                   022 
023 .text                                             023 .text
024                                                   024 
025 /** The address of the table of handlers (defi !! 025 /* The address of the table of handlers (defined in irq.c) */
026 .extern sos_irq_handler_array                     026 .extern sos_irq_handler_array
027                                                   027 
028 /** The address of the table of wrappers (defi !! 028 /* The address of the table of wrappers (defined below, and shared
029    with irq.c */                                  029    with irq.c */
030 .globl sos_irq_wrapper_array                      030 .globl sos_irq_wrapper_array
031                                                   031 
032 /** The variable holding the nested level of t << 
033 .extern sos_irq_nested_level_counter           << 
034                                                   032 
035 /* These pre-handlers are for IRQ (Master PIC)    033 /* These pre-handlers are for IRQ (Master PIC) */
036 .irp id, 0,1,2,3,4,5,6,7                          034 .irp id, 0,1,2,3,4,5,6,7
037                                                   035 
038         .p2align 2, 0x90                          036         .p2align 2, 0x90
039                                                   037 
040         sos_irq_wrapper_\id:                      038         sos_irq_wrapper_\id:
041         .type sos_irq_wrapper_\id,@function       039         .type sos_irq_wrapper_\id,@function
042                                                   040 
043                 /*                                041                 /*
044                  * Backup the CPU context         042                  * Backup the CPU context
045                  */                               043                  */
046                                                   044 
047                 /* Fake error code */             045                 /* Fake error code */
048                 pushl $0                          046                 pushl $0
049                                                   047 
050                 /* Backup the actual context *    048                 /* Backup the actual context */
051                 pushl %ebp                        049                 pushl %ebp
052                 movl %esp, %ebp                   050                 movl %esp, %ebp
053                                                   051 
054                 pushl %edi                        052                 pushl %edi
055                 pushl %esi                        053                 pushl %esi
056                 pushl %edx                        054                 pushl %edx
057                 pushl %ecx                        055                 pushl %ecx
058                 pushl %ebx                        056                 pushl %ebx
059                 pushl %eax                        057                 pushl %eax
060                 subl  $2,%esp                     058                 subl  $2,%esp
061                 pushw %ss                         059                 pushw %ss
062                 pushw %ds                         060                 pushw %ds
063                 pushw %es                         061                 pushw %es
064                 pushw %fs                         062                 pushw %fs
065                 pushw %gs                         063                 pushw %gs
066                                                   064 
067                 /*                             << 
068                  * Increment IRQ nested level  << 
069                  */                            << 
070                 incl sos_irq_nested_level_coun << 
071                                                << 
072                 /* Send EOI to PIC. See Intel     065                 /* Send EOI to PIC. See Intel 8259 datasheet
073                    available on Kos website */    066                    available on Kos website */  
074                 movb  $0x20, %al                  067                 movb  $0x20, %al
075                 outb  %al, $0x20                  068                 outb  %al, $0x20
076                                                   069         
077                 /*                                070                 /*
078                  * Call the handler with the I !! 071                  * Call the handler with IRQ number as argument
079                  * address of the stored CPU c << 
080                  */                               072                  */
081                 pushl %esp                     << 
082                 pushl $\id                        073                 pushl $\id
083                 leal  sos_irq_handler_array,%e    074                 leal  sos_irq_handler_array,%edi
084                 call  *\id*4(%edi)                075                 call  *\id*4(%edi)
085                 /* Unallocate the arguments pa !! 076                 addl  $4, %esp
086                 addl  $8, %esp                 << 
087                                                << 
088                 /*                             << 
089                  * Decrement IRQ nested level  << 
090                  */                            << 
091                 cli  /* Just in case we messed << 
092                 subl $1, sos_irq_nested_level_ << 
093                                                << 
094                 /* sos_irq_nested_level_counte << 
095                 jnc 2f                         << 
096                                                << 
097         1:      /* Yes: Print fatal error mess << 
098                 pushl $msg_nested_level_overfl << 
099                 call sos_display_fatal_error   << 
100                 addl $4, %esp ; jmp 1b         << 
101                 /* Never returns */            << 
102                                                << 
103         2:      /* No:   all right ! */        << 
104                                                   077 
105                 /* Restore the context */         078                 /* Restore the context */
106                 popw  %gs                         079                 popw  %gs
107                 popw  %fs                         080                 popw  %fs
108                 popw  %es                         081                 popw  %es
109                 popw  %ds                         082                 popw  %ds
110                 popw  %ss                         083                 popw  %ss
111                 addl  $2,%esp                     084                 addl  $2,%esp
112                 popl  %eax                        085                 popl  %eax
113                 popl  %ebx                        086                 popl  %ebx
114                 popl  %ecx                        087                 popl  %ecx
115                 popl  %edx                        088                 popl  %edx
116                 popl  %esi                        089                 popl  %esi
117                 popl  %edi                        090                 popl  %edi
118                 popl  %ebp                        091                 popl  %ebp
119                                                   092 
120                 /* Remove fake error code */      093                 /* Remove fake error code */
121                 addl  $4, %esp                    094                 addl  $4, %esp
122                                                   095 
123                 iret                              096                 iret
124         .endr                                     097         .endr
125                                                   098 
126                                                   099 
127 /* These pre-handlers are for IRQ (Slave PIC)     100 /* These pre-handlers are for IRQ (Slave PIC) */
128 .irp id, 8,9,10,11,12,13,14,15                    101 .irp id, 8,9,10,11,12,13,14,15
129                                                   102 
130         .p2align 2, 0x90                          103         .p2align 2, 0x90
131                                                   104 
132         sos_irq_wrapper_\id:                      105         sos_irq_wrapper_\id:
133         .type sos_irq_wrapper_\id,@function       106         .type sos_irq_wrapper_\id,@function
134                                                   107 
135                 /*                                108                 /*
136                  * Backup the CPU context         109                  * Backup the CPU context
137                  */                               110                  */
138                                                   111 
139                 /* Fake error code */             112                 /* Fake error code */
140                 pushl $0                          113                 pushl $0
141                                                   114 
142                 /* Backup the actual context *    115                 /* Backup the actual context */
143                 pushl %ebp                        116                 pushl %ebp
144                 movl %esp, %ebp                   117                 movl %esp, %ebp
145                                                   118 
146                 pushl %edi                        119                 pushl %edi
147                 pushl %esi                        120                 pushl %esi
148                 pushl %edx                        121                 pushl %edx
149                 pushl %ecx                        122                 pushl %ecx
150                 pushl %ebx                        123                 pushl %ebx
151                 pushl %eax                        124                 pushl %eax
152                 subl  $2,%esp                     125                 subl  $2,%esp
153                 pushw %ss                         126                 pushw %ss
154                 pushw %ds                         127                 pushw %ds
155                 pushw %es                         128                 pushw %es
156                 pushw %fs                         129                 pushw %fs
157                 pushw %gs                         130                 pushw %gs
158                                                   131 
159                 /*                             << 
160                  * Increment IRQ nested level  << 
161                  */                            << 
162                 incl sos_irq_nested_level_coun << 
163                                                << 
164                 /* Send EOI to PIC. See Intel     132                 /* Send EOI to PIC. See Intel 8259 datasheet
165                    available on Kos website */    133                    available on Kos website */  
166                 movb  $0x20, %al                  134                 movb  $0x20, %al
167                 outb  %al, $0xa0                  135                 outb  %al, $0xa0
168                 outb  %al, $0x20                  136                 outb  %al, $0x20
169                                                   137 
170                 /*                                138                 /*
171                  * Call the handler with the I !! 139                  * Call the handler with IRQ number as argument
172                  * address of the stored CPU c << 
173                  */                               140                  */
174                 pushl %esp                     << 
175                 pushl $\id                        141                 pushl $\id
176                 leal  sos_irq_handler_array,%e    142                 leal  sos_irq_handler_array,%edi
177                 call  *\id*4(%edi)                143                 call  *\id*4(%edi)
178                 /* Unallocate the arguments pa !! 144                 addl  $4, %esp
179                 addl  $8, %esp                 << 
180                                                << 
181                 /*                             << 
182                  * Decrement IRQ nested level  << 
183                  */                            << 
184                 cli  /* Just in case we messed << 
185                 subl $1, sos_irq_nested_level_ << 
186                                                << 
187                 /* sos_irq_nested_level_counte << 
188                 jnc 2f                         << 
189                                                << 
190         1:      /* Yes: Print fatal error mess << 
191                 pushl $msg_nested_level_overfl << 
192                 call sos_display_fatal_error   << 
193                 addl $4, %esp ; jmp 1b         << 
194                 /* Never returns */            << 
195                                                << 
196         2:      /* No:   all right ! */        << 
197                                                   145 
198                 /* Restore the context */         146                 /* Restore the context */
199                 popw  %gs                         147                 popw  %gs
200                 popw  %fs                         148                 popw  %fs
201                 popw  %es                         149                 popw  %es
202                 popw  %ds                         150                 popw  %ds
203                 popw  %ss                         151                 popw  %ss
204                 addl  $2,%esp                     152                 addl  $2,%esp
205                 popl  %eax                        153                 popl  %eax
206                 popl  %ebx                        154                 popl  %ebx
207                 popl  %ecx                        155                 popl  %ecx
208                 popl  %edx                        156                 popl  %edx
209                 popl  %esi                        157                 popl  %esi
210                 popl  %edi                        158                 popl  %edi
211                 popl  %ebp                        159                 popl  %ebp
212                                                   160 
213                 /* Remove fake error code */      161                 /* Remove fake error code */
214                 addl  $4, %esp                    162                 addl  $4, %esp
215                                                   163 
216                 iret                              164                 iret
217         .endr                                     165         .endr
218                                                   166 
219 .section ".rodata"                             << 
220 msg_nested_level_overflow:                     << 
221         .string "irq_wrappers.S: IRQ Nested le << 
222                                                << 
223 /* Build the sos_irq_wrapper_array, shared wit    167 /* Build the sos_irq_wrapper_array, shared with irq.c */
                                                   >> 168 .section ".rodata"
224 .p2align 5, 0x0                                   169 .p2align 5, 0x0
225 sos_irq_wrapper_array:                            170 sos_irq_wrapper_array:
226         .irp id, 0,1,2,3,4,5,6,7,8,9,10,11,12,    171         .irp id, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
227                 .long (sos_irq_wrapper_\id)       172                 .long (sos_irq_wrapper_\id)
228         .endr                                     173         .endr
                                                      

source navigation ] diff markup ] identifier search ] general search ]