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/idt.h (Article 2) and /hwcore/idt.h (Article 9.5)


001 /* Copyright (C) 2004  David Decotigny            001 /* Copyright (C) 2004  David Decotigny
002    Copyright (C) 1999  Free Software Foundatio << 
003                                                   002 
004    This program is free software; you can redi    003    This program is free software; you can redistribute it and/or
005    modify it under the terms of the GNU Genera    004    modify it under the terms of the GNU General Public License
006    as published by the Free Software Foundatio    005    as published by the Free Software Foundation; either version 2
007    of the License, or (at your option) any lat    006    of the License, or (at your option) any later version.
008                                                   007    
009    This program is distributed in the hope tha    008    This program is distributed in the hope that it will be useful,
010    but WITHOUT ANY WARRANTY; without even the     009    but WITHOUT ANY WARRANTY; without even the implied warranty of
011    MERCHANTABILITY or FITNESS FOR A PARTICULAR    010    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
012    GNU General Public License for more details    011    GNU General Public License for more details.
013                                                   012    
014    You should have received a copy of the GNU     013    You should have received a copy of the GNU General Public License
015    along with this program; if not, write to t    014    along with this program; if not, write to the Free Software
016    Foundation, Inc., 59 Temple Place - Suite 3    015    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
017    USA.                                           016    USA. 
018 */                                                017 */
019 #ifndef _SOS_IDT_H_                               018 #ifndef _SOS_IDT_H_
020 #define _SOS_IDT_H_                               019 #define _SOS_IDT_H_
021                                                   020 
022 /**                                               021 /**
023  * @file idt.h                                    022  * @file idt.h
024  *                                                023  *
025  * Manage the x86 Interrupt Descriptor Table,     024  * Manage the x86 Interrupt Descriptor Table, the table which maps the
026  * hardware interrupt lines, hardware exceptio    025  * hardware interrupt lines, hardware exceptions, and software
027  * interrupts, to software routines. We only d    026  * interrupts, to software routines. We only define "interrupt gate"
028  * IDT entries. Don't use it directly; refer i    027  * IDT entries. Don't use it directly; refer instead to interrupt.c,
029  * exceptions.c and syscall.c.                    028  * exceptions.c and syscall.c.
030  *                                                029  *
031  * @see Intel x86 doc, Vol 3, chapter 5           030  * @see Intel x86 doc, Vol 3, chapter 5
032  */                                               031  */
033                                                   032 
034 #include <sos/errno.h>                            033 #include <sos/errno.h>
035 #include <sos/types.h>                            034 #include <sos/types.h>
036                                                   035 
037 /* Mapping of the CPU exceptions in the IDT (i    036 /* Mapping of the CPU exceptions in the IDT (imposed by Intel
038    standards) */                                  037    standards) */
039 #define SOS_EXCEPT_BASE 0                         038 #define SOS_EXCEPT_BASE 0
040 #define SOS_EXCEPT_NUM  32                        039 #define SOS_EXCEPT_NUM  32
041 #define SOS_EXCEPT_MAX  (SOS_HWEXCEPT_BASE + S    040 #define SOS_EXCEPT_MAX  (SOS_HWEXCEPT_BASE + SOS_HWEXCEPT_NUM - 1)
042                                                   041 
043 /* Mapping of the IRQ lines in the IDT */         042 /* Mapping of the IRQ lines in the IDT */
044 #define SOS_IRQ_BASE    32                        043 #define SOS_IRQ_BASE    32
045 #define SOS_IRQ_NUM     16                        044 #define SOS_IRQ_NUM     16
046 #define SOS_IRQ_MAX     (SOS_IRQ_BASE + SOS_IR    045 #define SOS_IRQ_MAX     (SOS_IRQ_BASE + SOS_IRQ_NUM - 1)
047                                                   046 
048 /**                                               047 /**
049  * Number of IDT entries.                         048  * Number of IDT entries.
050  *                                                049  *
051  * @note Must be large enough to map the hw in    050  * @note Must be large enough to map the hw interrupts, the exceptions
052  * (=> total is 48 entries), and the syscall(s    051  * (=> total is 48 entries), and the syscall(s). Since our syscall
053  * will be 0x42, it must be >= 0x43. Intel doc    052  * will be 0x42, it must be >= 0x43. Intel doc limits this to 256
054  * entries, we use this limit.                    053  * entries, we use this limit.
055  */                                               054  */
056 #define SOS_IDTE_NUM      256 /* 0x100 */         055 #define SOS_IDTE_NUM      256 /* 0x100 */
057                                                   056 
058 /** Initialization routine: all the IDT entrie    057 /** Initialization routine: all the IDT entries (or "IDTE") are marked
059     "not present". */                             058     "not present". */
060 sos_ret_t sos_idt_setup(void);                 !! 059 sos_ret_t sos_idt_subsystem_setup(void);
061                                                   060 
062 /**                                               061 /**
063  * Enable the IDT entry if handler_address !=     062  * Enable the IDT entry if handler_address != NULL, with the given
064  * lowest_priviledge.\ Disable the IDT entry w    063  * lowest_priviledge.\ Disable the IDT entry when handler_address ==
065  * NULL (the lowest_priviledge parameter is th    064  * NULL (the lowest_priviledge parameter is then ignored). Intel doc
066  * says that there must not be more than 256 e    065  * says that there must not be more than 256 entries.
067  *                                                066  *
068  * @note IRQ Unsafe                               067  * @note IRQ Unsafe
069  */                                               068  */
070 sos_ret_t sos_idt_set_handler(int index,          069 sos_ret_t sos_idt_set_handler(int index,
071                               sos_vaddr_t hand    070                               sos_vaddr_t handler_address,
072                               int lowest_privi    071                               int lowest_priviledge /* 0..3 */);
073                                                   072 
074                                                   073 
075 /**                                               074 /**
076  * @note IRQ Unsafe                               075  * @note IRQ Unsafe
077  *                                                076  *
078  * @return the handler address and DPL in the     077  * @return the handler address and DPL in the 2nd and 3rd
079  * parameters                                     078  * parameters
080  */                                               079  */
081 sos_ret_t sos_idt_get_handler(int index,          080 sos_ret_t sos_idt_get_handler(int index,
082                               sos_vaddr_t *han    081                               sos_vaddr_t *handler_address,
083                               int *lowest_priv    082                               int *lowest_priviledge);
084                                                   083 
085 #endif /* _SOS_IDT_H_ */                          084 #endif /* _SOS_IDT_H_ */
                                                      

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