[BACK]Return to mtrr.c CVS log [TXT][DIR] Up to [local] / sys / arch / i386 / i386

Annotation of sys/arch/i386/i386/mtrr.c, Revision 1.1

1.1     ! nbrk        1: /* $OpenBSD: mtrr.c,v 1.10 2007/05/02 18:52:17 matthieu Exp $ */
        !             2: /*-
        !             3:  * Copyright (c) 1999 Michael Smith <msmith@freebsd.org>
        !             4:  * Copyright (c) 1999 Brian Fundakowski Feldman
        !             5:  * All rights reserved.
        !             6:  *
        !             7:  * Redistribution and use in source and binary forms, with or without
        !             8:  * modification, are permitted provided that the following conditions
        !             9:  * are met:
        !            10:  * 1. Redistributions of source code must retain the above copyright
        !            11:  *    notice, this list of conditions and the following disclaimer.
        !            12:  * 2. Redistributions in binary form must reproduce the above copyright
        !            13:  *    notice, this list of conditions and the following disclaimer in the
        !            14:  *    documentation and/or other materials provided with the distribution.
        !            15:  *
        !            16:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
        !            17:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            18:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            19:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
        !            20:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            21:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            22:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            23:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            24:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            25:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            26:  * SUCH DAMAGE.
        !            27:  *
        !            28:  */
        !            29:
        !            30: #include <sys/param.h>
        !            31: #include <sys/memrange.h>
        !            32: #include <sys/systm.h>
        !            33:
        !            34: #include <machine/specialreg.h>
        !            35:
        !            36: extern struct mem_range_ops i686_mrops;
        !            37: extern struct mem_range_ops k6_mrops;
        !            38:
        !            39: void mtrrattach(int);
        !            40:
        !            41: void
        !            42: mtrrattach(int num)
        !            43: {
        !            44:        int family, model, step;
        !            45:
        !            46:        if (num > 1)
        !            47:                return;
        !            48:
        !            49:        family = (cpu_id >> 8) & 0xf;
        !            50:        model  = (cpu_id >> 4) & 0xf;
        !            51:        step   = (cpu_id >> 0) & 0xf;
        !            52:
        !            53:        if (strcmp(cpu_vendor, "AuthenticAMD") == 0 &&
        !            54:            family == 0x5 &&
        !            55:            (model > 0x8 ||
        !            56:             (model == 0x8 &&
        !            57:              step > 0x7))) {
        !            58:                mem_range_softc.mr_op = &k6_mrops;
        !            59:
        !            60:                /* Try for i686 MTRRs */
        !            61:        } else if ((cpu_feature & CPUID_MTRR) &&
        !            62:                   (family == 0x6 || family == 0xf) &&
        !            63:                   ((strcmp(cpu_vendor, "GenuineIntel") == 0) ||
        !            64:                    (strcmp(cpu_vendor, "AuthenticAMD") == 0))) {
        !            65:                mem_range_softc.mr_op = &i686_mrops;
        !            66:
        !            67:        }
        !            68:        /* Initialise memory range handling */
        !            69:        if (mem_range_softc.mr_op != NULL)
        !            70:                mem_range_softc.mr_op->init(&mem_range_softc);
        !            71: }
        !            72:

CVSweb