root/arch/i386/include/i82093var.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


    1 /*      $OpenBSD: i82093var.h,v 1.5 2006/05/09 18:41:22 kettenis Exp $  */
    2 /* $NetBSD: i82093var.h,v 1.1 2003/02/26 21:26:10 fvdl Exp $ */
    3 
    4 /*-
    5  * Copyright (c) 2000 The NetBSD Foundation, Inc.
    6  * All rights reserved.
    7  *
    8  * This code is derived from software contributed to The NetBSD Foundation
    9  * by RedBack Networks Inc.
   10  *
   11  * Author: Bill Sommerfeld
   12  *
   13  * Redistribution and use in source and binary forms, with or without
   14  * modification, are permitted provided that the following conditions
   15  * are met:
   16  * 1. Redistributions of source code must retain the above copyright
   17  *    notice, this list of conditions and the following disclaimer.
   18  * 2. Redistributions in binary form must reproduce the above copyright
   19  *    notice, this list of conditions and the following disclaimer in the
   20  *    documentation and/or other materials provided with the distribution.
   21  * 3. All advertising materials mentioning features or use of this software
   22  *    must display the following acknowledgement:
   23  *        This product includes software developed by the NetBSD
   24  *        Foundation, Inc. and its contributors.
   25  * 4. Neither the name of The NetBSD Foundation nor the names of its
   26  *    contributors may be used to endorse or promote products derived
   27  *    from this software without specific prior written permission.
   28  *
   29  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
   30  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
   31  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   32  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
   33  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   34  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   35  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   36  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   37  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   38  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   39  * POSSIBILITY OF SUCH DAMAGE.
   40  */
   41 
   42 #ifndef _I386_I82093VAR_H_
   43 #define _I386_I82093VAR_H_
   44 
   45 #include <machine/apicvar.h>
   46 
   47 struct ioapic_pin 
   48 {
   49         struct intrhand         *ip_handler; 
   50         struct ioapic_pin       *ip_next; /* next pin on this vector */
   51         struct mp_intr_map      *ip_map;
   52         int                     ip_vector; /* IDT vector */
   53         int                     ip_type;
   54         int                     ip_minlevel;
   55         int                     ip_maxlevel;
   56 };
   57 
   58 struct ioapic_softc {
   59         struct                  device sc_dev;  /* generic device glue */
   60         struct ioapic_softc     *sc_next;
   61         int                     sc_apicid;
   62         int                     sc_apic_vers;
   63         int                     sc_apic_vecbase; /* global int base if ACPI */
   64         int                     sc_apic_sz;     /* apic size*/
   65         int                     sc_flags;
   66         paddr_t                 sc_pa;          /* PA of ioapic */
   67         volatile u_int32_t      *sc_reg;        /* KVA of ioapic addr */
   68         volatile u_int32_t      *sc_data;       /* KVA of ioapic data */
   69         struct ioapic_pin       *sc_pins;       /* sc_apic_sz entries */
   70 };      
   71 
   72 /*
   73  * MP: intr_handle_t is bitfielded.
   74  * ih&0xff -> line number.
   75  * ih&0x10000000 -> if 0, old-style isa irq; if 1, routed via ioapic.
   76  * (ih&0xff0000)>>16 -> ioapic id.
   77  * (ih&0x00ff00)>>8 -> ioapic line.
   78  */
   79 
   80 #define APIC_INT_VIA_APIC       0x10000000
   81 #define APIC_INT_APIC_MASK      0x00ff0000
   82 #define APIC_INT_APIC_SHIFT     16
   83 #define APIC_INT_PIN_MASK       0x0000ff00
   84 #define APIC_INT_PIN_SHIFT      8
   85 #define APIC_INT_LINE_MASK      0x000000ff
   86 
   87 #define APIC_IRQ_APIC(x) ((x & APIC_INT_APIC_MASK) >> APIC_INT_APIC_SHIFT)
   88 #define APIC_IRQ_PIN(x) ((x & APIC_INT_PIN_MASK) >> APIC_INT_PIN_SHIFT)
   89 
   90 /* I/O APIC ID remapping helper macros. */
   91 #define IOAPIC_REMAP_MASK       (IOAPIC_ID_MASK >> IOAPIC_ID_SHIFT)
   92 #define IOAPIC_REMAP_FLAG       ((IOAPIC_REMAP_MASK + 1) << 1)
   93 #define IOAPIC_REMAP(old_id, new_id) \
   94     (ioapic_id_remap[(old_id)] = IOAPIC_REMAP_FLAG | (new_id))
   95 #define IOAPIC_REMAPPED(id)     (ioapic_id_remap[(id)] & IOAPIC_REMAP_FLAG)
   96 #define IOAPIC_REMAPPED_ID(id)  \
   97     (IOAPIC_REMAPPED(id) ? ioapic_id_remap[(id)] & IOAPIC_REMAP_MASK : (id))
   98 
   99 void   *apic_intr_establish(int, int, int, int (*)(void *), void *, char *); 
  100 void    apic_intr_disestablish(void *);
  101 
  102 void    ioapic_print_redir(struct ioapic_softc *, char *, int);
  103 void    ioapic_format_redir(char *, char *, int, u_int32_t, u_int32_t);
  104 struct ioapic_softc *ioapic_find(int);
  105 struct ioapic_softc *ioapic_find_bybase(int);
  106 
  107 void    ioapic_enable(void);
  108 void    lapic_vectorset(void); /* XXX */
  109 
  110 extern int ioapic_bsp_id;
  111 extern int nioapics;
  112 extern struct ioapic_softc *ioapics;
  113 extern u_int16_t ioapic_id_map;
  114 extern u_int8_t ioapic_id_remap[];
  115 
  116 #endif /* !_I386_I82093VAR_H_ */

/* [<][>][^][v][top][bottom][index][help] */