[BACK]Return to irongate_bus_mem.c CVS log [TXT][DIR] Up to [local] / sys / arch / alpha / pci

Annotation of sys/arch/alpha/pci/irongate_bus_mem.c, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: irongate_bus_mem.c,v 1.5 2001/11/06 19:53:13 miod Exp $       */
        !             2: /* $NetBSD: irongate_bus_mem.c,v 1.7 2001/04/17 21:52:00 thorpej Exp $ */
        !             3:
        !             4: /*-
        !             5:  * Copyright (c) 2000, 2001 The NetBSD Foundation, Inc.
        !             6:  * All rights reserved.
        !             7:  *
        !             8:  * This code is derived from software contributed to The NetBSD Foundation
        !             9:  * by Jason R. Thorpe.
        !            10:  *
        !            11:  * Redistribution and use in source and binary forms, with or without
        !            12:  * modification, are permitted provided that the following conditions
        !            13:  * are met:
        !            14:  * 1. Redistributions of source code must retain the above copyright
        !            15:  *    notice, this list of conditions and the following disclaimer.
        !            16:  * 2. Redistributions in binary form must reproduce the above copyright
        !            17:  *    notice, this list of conditions and the following disclaimer in the
        !            18:  *    documentation and/or other materials provided with the distribution.
        !            19:  * 3. All advertising materials mentioning features or use of this software
        !            20:  *    must display the following acknowledgement:
        !            21:  *     This product includes software developed by the NetBSD
        !            22:  *     Foundation, Inc. and its contributors.
        !            23:  * 4. Neither the name of The NetBSD Foundation nor the names of its
        !            24:  *    contributors may be used to endorse or promote products derived
        !            25:  *    from this software without specific prior written permission.
        !            26:  *
        !            27:  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
        !            28:  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
        !            29:  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
        !            30:  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
        !            31:  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
        !            32:  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
        !            33:  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
        !            34:  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
        !            35:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
        !            36:  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
        !            37:  * POSSIBILITY OF SUCH DAMAGE.
        !            38:  */
        !            39:
        !            40: #include <sys/param.h>
        !            41: #include <sys/systm.h>
        !            42: #include <sys/malloc.h>
        !            43: #include <sys/syslog.h>
        !            44: #include <sys/device.h>
        !            45:
        !            46: #include <uvm/uvm_extern.h>
        !            47:
        !            48: #include <machine/bus.h>
        !            49:
        !            50: #include <alpha/pci/irongatereg.h>
        !            51: #include <alpha/pci/irongatevar.h>
        !            52:
        !            53: #define        CHIP            irongate
        !            54:
        !            55: #define        CHIP_EX_MALLOC_SAFE(v)  (((struct irongate_config *)(v))->ic_mallocsafe)
        !            56: #define        CHIP_MEM_EXTENT(v)      (((struct irongate_config *)(v))->ic_mem_ex)
        !            57:
        !            58: #define        CHIP_MEM_SYS_START(v)   IRONGATE_MEM_BASE
        !            59:
        !            60: /*
        !            61:  * AMD 751 core logic appears on EV6.  We require at least EV56
        !            62:  * support for the assembler to emit BWX opcodes.
        !            63:  */
        !            64: __asm(".arch ev6");
        !            65:
        !            66: #include <alpha/pci/pci_bwx_bus_mem_chipdep.c>
        !            67:
        !            68: #include <sys/kcore.h>
        !            69:
        !            70: #include <dev/isa/isareg.h>
        !            71:
        !            72: extern phys_ram_seg_t mem_clusters[];
        !            73: extern int mem_cluster_cnt;
        !            74:
        !            75: void
        !            76: irongate_bus_mem_init2(bus_space_tag_t t, void *v)
        !            77: {
        !            78:        u_long size, start, end;
        !            79:        int i, error;
        !            80:
        !            81:        /*
        !            82:         * Since the AMD 751 doesn't have DMA windows, we need to
        !            83:         * allocate RAM out of the extent map.
        !            84:         */
        !            85:        for (i = 0; i < mem_cluster_cnt; i++) {
        !            86:                start = mem_clusters[i].start;
        !            87:                size = mem_clusters[i].size & ~PAGE_MASK;
        !            88:                end = mem_clusters[i].start + size;
        !            89:
        !            90:                if (start <= IOM_BEGIN && end >= IOM_END) {
        !            91:                        /*
        !            92:                         * The ISA hole lies somewhere in this
        !            93:                         * memory cluster.  The UP1000 firmware
        !            94:                         * doesn't report this to us properly,
        !            95:                         * so we have to cope, since devices are
        !            96:                         * mapped into the ISA hole, but RAM is
        !            97:                         * not.
        !            98:                         *
        !            99:                         * Sigh, the UP1000 is a really cool machine,
        !           100:                         * but it is sometimes too PC-like for my
        !           101:                         * taste.
        !           102:                         */
        !           103:                        if (start < IOM_BEGIN) {
        !           104:                                error = extent_alloc_region(CHIP_MEM_EXTENT(v),
        !           105:                                    start, (IOM_BEGIN - start),
        !           106:                                    EX_NOWAIT |
        !           107:                                    (CHIP_EX_MALLOC_SAFE(v) ? EX_MALLOCOK : 0));
        !           108:                                if (error) {
        !           109:                                        printf("WARNING: unable to reserve "
        !           110:                                            "chunk from mem cluster %d "
        !           111:                                            "(0x%lx - 0x%lx)\n", i,
        !           112:                                            start, (u_long) IOM_BEGIN - 1);
        !           113:                                }
        !           114:                        }
        !           115:                        if (end > IOM_END) {
        !           116:                                error = extent_alloc_region(CHIP_MEM_EXTENT(v),
        !           117:                                    IOM_END, (end - IOM_END),
        !           118:                                    EX_NOWAIT |
        !           119:                                    (CHIP_EX_MALLOC_SAFE(v) ? EX_MALLOCOK : 0));
        !           120:                                if (error) {
        !           121:                                        printf("WARNING: unable to reserve "
        !           122:                                            "chunk from mem cluster %d "
        !           123:                                            "(0x%lx - 0x%lx)\n", i,
        !           124:                                            (u_long) IOM_END, end - 1);
        !           125:                                }
        !           126:                        }
        !           127:                } else {
        !           128:                        error = extent_alloc_region(CHIP_MEM_EXTENT(v),
        !           129:                            start, size,
        !           130:                            EX_NOWAIT |
        !           131:                            (CHIP_EX_MALLOC_SAFE(v) ? EX_MALLOCOK : 0));
        !           132:                        if (error) {
        !           133:                                printf("WARNING: unable reserve mem cluster %d "
        !           134:                                    "(0x%lx - 0x%lx)\n", i, start,
        !           135:                                    start + (size - 1));
        !           136:                        }
        !           137:                }
        !           138:        }
        !           139: }

CVSweb