Annotation of sys/arch/aviion/dev/mainbus.c, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: mainbus.c,v 1.2 2006/05/21 12:22:02 miod Exp $ */
! 2: /*
! 3: * Copyright (c) 1998 Steve Murphree, Jr.
! 4: * Copyright (c) 2004, Miodrag Vallat.
! 5: *
! 6: * Redistribution and use in source and binary forms, with or without
! 7: * modification, are permitted provided that the following conditions
! 8: * are met:
! 9: * 1. Redistributions of source code must retain the above copyright
! 10: * notice, this list of conditions and the following disclaimer.
! 11: * 2. Redistributions in binary form must reproduce the above copyright
! 12: * notice, this list of conditions and the following disclaimer in the
! 13: * documentation and/or other materials provided with the distribution.
! 14: *
! 15: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
! 16: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
! 17: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
! 18: * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
! 19: * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
! 20: * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
! 21: * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 22: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
! 23: * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
! 24: * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
! 25: * POSSIBILITY OF SUCH DAMAGE.
! 26: */
! 27:
! 28: #include <sys/param.h>
! 29: #include <sys/systm.h>
! 30: #include <sys/reboot.h>
! 31: #include <sys/conf.h>
! 32: #include <sys/device.h>
! 33: #include <sys/disklabel.h>
! 34: #include <sys/extent.h>
! 35:
! 36: #include <uvm/uvm_extern.h>
! 37:
! 38: #include <machine/autoconf.h>
! 39: #include <machine/bus.h>
! 40: #include <machine/cmmu.h>
! 41: #include <machine/cpu.h>
! 42: #include <machine/prom.h>
! 43:
! 44: void mainbus_attach(struct device *, struct device *, void *);
! 45: int mainbus_match(struct device *, void *, void *);
! 46: int mainbus_print(void *, const char *);
! 47: int mainbus_scan(struct device *, void *, void *);
! 48:
! 49: /*
! 50: * bus_space routines for 1:1 obio mappings
! 51: */
! 52:
! 53: int mainbus_map(bus_addr_t, bus_size_t, int, bus_space_handle_t *);
! 54: void mainbus_unmap(bus_space_handle_t, bus_size_t);
! 55: int mainbus_subregion(bus_space_handle_t, bus_size_t, bus_size_t,
! 56: bus_space_handle_t *);
! 57: void *mainbus_vaddr(bus_space_handle_t);
! 58:
! 59: const struct aviion_bus_space_tag mainbus_bustag = {
! 60: mainbus_map,
! 61: mainbus_unmap,
! 62: mainbus_subregion,
! 63: mainbus_vaddr
! 64: };
! 65:
! 66: /*
! 67: * Obio (internal IO) space is mapped 1:1 (see pmap_bootstrap() for details).
! 68: */
! 69:
! 70: int
! 71: mainbus_map(bus_addr_t addr, bus_size_t size, int flags,
! 72: bus_space_handle_t *ret)
! 73: {
! 74: *ret = (bus_space_handle_t)addr;
! 75: return 0;
! 76: }
! 77:
! 78: void
! 79: mainbus_unmap(bus_space_handle_t handle, bus_size_t size)
! 80: {
! 81: /* nothing to do */
! 82: }
! 83:
! 84: int
! 85: mainbus_subregion(bus_space_handle_t handle, bus_addr_t offset,
! 86: bus_size_t size, bus_space_handle_t *ret)
! 87: {
! 88: *ret = handle + offset;
! 89: return (0);
! 90: }
! 91:
! 92: void *
! 93: mainbus_vaddr(bus_space_handle_t handle)
! 94: {
! 95: return (void *)handle;
! 96: }
! 97:
! 98: /*
! 99: * Configuration glue
! 100: */
! 101:
! 102: struct cfattach mainbus_ca = {
! 103: sizeof(struct device), mainbus_match, mainbus_attach
! 104: };
! 105:
! 106: struct cfdriver mainbus_cd = {
! 107: NULL, "mainbus", DV_DULL
! 108: };
! 109:
! 110: int
! 111: mainbus_match(struct device *parent, void *cf, void *args)
! 112: {
! 113: return (mainbus_cd.cd_ndevs == 0);
! 114: }
! 115:
! 116: void
! 117: mainbus_attach(struct device *parent, struct device *self, void *args)
! 118: {
! 119: extern char cpu_model[];
! 120: extern int32_t cpuid, sysid;
! 121:
! 122: printf(": %s, cpuid 0x%x", cpu_model, cpuid);
! 123: if (sysid != -1)
! 124: printf(", sysid %x", sysid);
! 125: printf("\n");
! 126:
! 127: /*
! 128: * Display cpu/mmu details for the main processor.
! 129: */
! 130: cpu_configuration_print(1);
! 131:
! 132: (void)config_search(mainbus_scan, self, args);
! 133: }
! 134:
! 135: int
! 136: mainbus_scan(struct device *parent, void *child, void *args)
! 137: {
! 138: struct cfdata *cf = child;
! 139: struct confargs oca;
! 140:
! 141: oca.ca_iot = &mainbus_bustag;
! 142: oca.ca_paddr = (paddr_t)cf->cf_loc[0];
! 143: oca.ca_offset = (paddr_t)-1;
! 144: oca.ca_ipl = (u_int)-1;
! 145:
! 146: if ((*cf->cf_attach->ca_match)(parent, cf, &oca) == 0)
! 147: return (0);
! 148:
! 149: config_attach(parent, cf, &oca, mainbus_print);
! 150: return (1);
! 151: }
! 152:
! 153: int
! 154: mainbus_print(void *args, const char *bus)
! 155: {
! 156: struct confargs *ca = args;
! 157:
! 158: if (ca->ca_paddr != (paddr_t)-1)
! 159: printf(" addr 0x%08x", ca->ca_paddr);
! 160: return (UNCONF);
! 161: }
CVSweb