Module Name: src Committed By: kiyohara Date: Tue Jun 25 13:56:59 UTC 2013
Modified Files: src/sys/arch/epoc32/conf: GENERIC files.epoc32 src/sys/arch/epoc32/epoc32: external.c Log Message: Configuration of external devices move to GENERIC. External bus does't know attaching devices. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/sys/arch/epoc32/conf/GENERIC \ src/sys/arch/epoc32/conf/files.epoc32 cvs rdiff -u -r1.1 -r1.2 src/sys/arch/epoc32/epoc32/external.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/epoc32/conf/GENERIC diff -u src/sys/arch/epoc32/conf/GENERIC:1.1 src/sys/arch/epoc32/conf/GENERIC:1.2 --- src/sys/arch/epoc32/conf/GENERIC:1.1 Sun Apr 28 12:11:25 2013 +++ src/sys/arch/epoc32/conf/GENERIC Tue Jun 25 13:56:59 2013 @@ -1,4 +1,4 @@ -# $NetBSD: GENERIC,v 1.1 2013/04/28 12:11:25 kiyohara Exp $ +# $NetBSD: GENERIC,v 1.2 2013/06/25 13:56:59 kiyohara Exp $ # # GENERIC machine description file # @@ -22,7 +22,7 @@ include "arch/epoc32/conf/std.epoc32" #options INCLUDE_CONFIG_FILE # embed config file in kernel binary -#ident "GENERIC-$Revision: 1.1 $" +#ident "GENERIC-$Revision: 1.2 $" maxusers 32 # estimated number of users @@ -157,7 +157,6 @@ wsdisplay* at wmlcd? console ? epockbd* at clpssoc? epockbd* at windermere? -#epockbd* at external? addr 0x10000030, 0x10000004 wskbd* at epockbd? #spi* at clpsssi* @@ -167,7 +166,12 @@ wskbd* at epockbd? #audio* at audio? # External devices -etna* at external? # ETNA Controller + +#epockbd* at external? addr 0x10000030 addr2 0x10000004 # Series 7 + +# ETNA Controller +etna* at external? addr 0x20000000 addr2 0x40000000 irq 5 # 5mx +etna* at external? addr 0x50000000 addr2 0x30000000 irq 5 # 5mx Pro pcmcia* at etna? wdc* at pcmcia? # CF Index: src/sys/arch/epoc32/conf/files.epoc32 diff -u src/sys/arch/epoc32/conf/files.epoc32:1.1 src/sys/arch/epoc32/conf/files.epoc32:1.2 --- src/sys/arch/epoc32/conf/files.epoc32:1.1 Sun Apr 28 12:11:25 2013 +++ src/sys/arch/epoc32/conf/files.epoc32 Tue Jun 25 13:56:59 2013 @@ -21,7 +21,7 @@ device internal { }: pic, pic_splfuncs attach internal at mainbus file arch/epoc32/epoc32/internal.c internal -device external { } +device external {[addr = -1], [addr2 = -1], [irq = -1]} attach external at mainbus file arch/epoc32/epoc32/external.c external file arch/epoc32/epoc32/external_io.c external Index: src/sys/arch/epoc32/epoc32/external.c diff -u src/sys/arch/epoc32/epoc32/external.c:1.1 src/sys/arch/epoc32/epoc32/external.c:1.2 --- src/sys/arch/epoc32/epoc32/external.c:1.1 Sun Apr 28 12:11:26 2013 +++ src/sys/arch/epoc32/epoc32/external.c Tue Jun 25 13:56:59 2013 @@ -1,6 +1,6 @@ -/* $NetBSD: external.c,v 1.1 2013/04/28 12:11:26 kiyohara Exp $ */ +/* $NetBSD: external.c,v 1.2 2013/06/25 13:56:59 kiyohara Exp $ */ /* - * Copyright (c) 2012 KIYOHARA Takashi + * Copyright (c) 2012, 2013 KIYOHARA Takashi * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: external.c,v 1.1 2013/04/28 12:11:26 kiyohara Exp $"); +__KERNEL_RCSID(0, "$NetBSD: external.c,v 1.2 2013/06/25 13:56:59 kiyohara Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -35,24 +35,18 @@ __KERNEL_RCSID(0, "$NetBSD: external.c,v #include <machine/epoc32.h> +#include "locators.h" + extern struct bus_space external_bs_tag; static int external_match(device_t, cfdata_t, void *); static void external_attach(device_t parent, device_t self, void *aux); +static int external_search(device_t, cfdata_t, const int *, void *); static int external_print(void *, const char *); CFATTACH_DECL_NEW(external, 0, external_match, external_attach, NULL, NULL); -static const struct { - const char *name; - bus_addr_t addr; - bus_addr_t addr2; - int irq; -} knowndevs[] = { - { "etna", 0x20000000, 0x40000000, 5 }, /* 5mx */ - { "etna", 0x50000000, 0x30000000, 5 }, /* 5mx pro */ -}; /* ARGSUSED */ static int @@ -66,21 +60,28 @@ external_match(device_t parent, cfdata_t static void external_attach(device_t parent, device_t self, void *aux) { - struct external_attach_args aa; - int i; aprint_naive("\n"); aprint_normal("\n"); - for (i = 0; i < __arraycount(knowndevs); i++) { - aa.name = knowndevs[i].name; - aa.iot = &external_bs_tag; - aa.addr = knowndevs[i].addr; - aa.addr2 = knowndevs[i].addr2; - aa.irq = knowndevs[i].irq; - config_found_sm_loc(self, "external", NULL, &aa, - external_print, NULL); - } + config_search_ia(external_search, self, "external", NULL); +} + +/* ARGSUSED */ +static int +external_search(device_t parent, cfdata_t cf, const int *ldesc, void *aux) +{ + struct external_attach_args aa; + + aa.name = cf->cf_name; + aa.iot = &external_bs_tag; + aa.addr = cf->cf_loc[EXTERNALCF_ADDR]; + aa.addr2 = cf->cf_loc[EXTERNALCF_ADDR2]; + aa.irq = cf->cf_loc[EXTERNALCF_IRQ]; + if (config_match(parent, cf, &aa)) + config_attach(parent, cf, &aa, external_print); + + return 0; } static int