[BACK]Return to idt.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / arch / x86 / x86

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/sys/arch/x86/x86/idt.c between version 1.1.8.1 and 1.1.8.2

version 1.1.8.1, 2007/12/26 11:51:12 version 1.1.8.2, 2008/01/21 09:40:14
Line 0 
Line 1 
   /*      $NetBSD$        */
   
   /*-
    * Copyright (c) 1996, 1997, 1998, 2000 The NetBSD Foundation, Inc.
    * All rights reserved.
    *
    * This code is derived from software contributed to The NetBSD Foundation
    * by Charles M. Hannum and by Jason R. Thorpe of the Numerical Aerospace
    * Simulation Facility, NASA Ames Research Center.
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
    * are met:
    * 1. Redistributions of source code must retain the above copyright
    *    notice, this list of conditions and the following disclaimer.
    * 2. Redistributions in binary form must reproduce the above copyright
    *    notice, this list of conditions and the following disclaimer in the
    *    documentation and/or other materials provided with the distribution.
    * 3. All advertising materials mentioning features or use of this software
    *    must display the following acknowledgement:
    *      This product includes software developed by the NetBSD
    *      Foundation, Inc. and its contributors.
    * 4. Neither the name of The NetBSD Foundation nor the names of its
    *    contributors may be used to endorse or promote products derived
    *    from this software without specific prior written permission.
    *
    * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
    * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
    * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
    * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    * POSSIBILITY OF SUCH DAMAGE.
    */
   
   /*-
    * Copyright (c) 1982, 1987, 1990 The Regents of the University of California.
    * All rights reserved.
    *
    * This code is derived from software contributed to Berkeley by
    * William Jolitz.
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
    * are met:
    * 1. Redistributions of source code must retain the above copyright
    *    notice, this list of conditions and the following disclaimer.
    * 2. Redistributions in binary form must reproduce the above copyright
    *    notice, this list of conditions and the following disclaimer in the
    *    documentation and/or other materials provided with the distribution.
    * 3. Neither the name of the University nor the names of its contributors
    *    may be used to endorse or promote products derived from this software
    *    without specific prior written permission.
    *
    * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    * SUCH DAMAGE.
    *
    *      @(#)machdep.c   7.4 (Berkeley) 6/3/91
    */
   
   #include <sys/cdefs.h>
   __KERNEL_RCSID(0, "$NetBSD$");
   
   #include <sys/param.h>
   #include <sys/systm.h>
   #include <sys/mutex.h>
   
   #include <machine/segments.h>
   
   #if !defined(XEN)
   
   static kmutex_t idt_lock;
   struct gate_descriptor *idt;
   static char idt_allocmap[NIDT];
   
   /*
    * Allocate an IDT vector slot within the given range.
    */
   
   int
   idt_vec_alloc(int low, int high)
   {
           int vec;
   
           mutex_enter(&idt_lock);
           for (vec = low; vec <= high; vec++) {
                   if (idt_allocmap[vec] == 0) {
                           idt_allocmap[vec] = 1;
                           mutex_exit(&idt_lock);
                           return vec;
                   }
           }
           mutex_exit(&idt_lock);
           return 0;
   }
   
   void
   idt_vec_reserve(int vec)
   {
           int result = idt_vec_alloc(vec, vec);
   
           if (result != vec) {
                   panic("%s: failed to reserve vec %d", __func__, vec);
           }
   }
   
   void
   idt_vec_set(int vec, void (*function)(void))
   {
           /*
            * Vector should be allocated, so no locking needed.
            */
   
           KASSERT(idt_allocmap[vec] == 1);
           setgate(&idt[vec], function, 0, SDT_SYS386IGT, SEL_KPL,
               GSEL(GCODE_SEL, SEL_KPL));
   }
   
   void
   idt_vec_free(int vec)
   {
   
           mutex_enter(&idt_lock);
           unsetgate(&idt[vec]);
           idt_allocmap[vec] = 0;
           mutex_exit(&idt_lock);
   }
   
   void
   idt_init(void)
   {
   
           mutex_init(&idt_lock, MUTEX_DEFAULT, IPL_NONE);
   }
   
   #endif /* !defined(XEN) */

Legend:
Removed from v.1.1.8.1  
changed lines
  Added in v.1.1.8.2

CVSweb <webmaster@jp.NetBSD.org>