xref: /openbsd-src/sys/arch/sparc64/dev/core.c (revision eb7eaf8de3ff431d305450f61b441e5460c82246)
1*eb7eaf8dSmpi /*	$OpenBSD: core.c,v 1.2 2021/10/24 17:05:03 mpi Exp $	*/
2e5512404Skettenis /*
3e5512404Skettenis  * Copyright (c) 2008 Mark Kettenis
4e5512404Skettenis  *
5e5512404Skettenis  * Permission to use, copy, modify, and distribute this software for any
6e5512404Skettenis  * purpose with or without fee is hereby granted, provided that the above
7e5512404Skettenis  * copyright notice and this permission notice appear in all copies.
8e5512404Skettenis  *
9e5512404Skettenis  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10e5512404Skettenis  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11e5512404Skettenis  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12e5512404Skettenis  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13e5512404Skettenis  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14e5512404Skettenis  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15e5512404Skettenis  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16e5512404Skettenis  */
17e5512404Skettenis 
18e5512404Skettenis #include <sys/param.h>
19e5512404Skettenis #include <sys/device.h>
20e5512404Skettenis #include <sys/systm.h>
21e5512404Skettenis 
22e5512404Skettenis #include <machine/autoconf.h>
23e5512404Skettenis #include <machine/openfirm.h>
24e5512404Skettenis 
25e5512404Skettenis int	core_match(struct device *, void *, void *);
26e5512404Skettenis void	core_attach(struct device *, struct device *, void *);
27e5512404Skettenis 
28*eb7eaf8dSmpi const struct cfattach core_ca = {
29e5512404Skettenis 	sizeof(struct device), core_match, core_attach
30e5512404Skettenis };
31e5512404Skettenis 
32e5512404Skettenis struct cfdriver core_cd = {
33e5512404Skettenis 	NULL, "core", DV_DULL
34e5512404Skettenis };
35e5512404Skettenis 
36e5512404Skettenis int	core_print(void *, const char *);
37e5512404Skettenis 
38e5512404Skettenis int
core_match(struct device * parent,void * match,void * aux)39e5512404Skettenis core_match(struct device *parent, void *match, void *aux)
40e5512404Skettenis {
41e5512404Skettenis 	struct mainbus_attach_args *ma = aux;
42e5512404Skettenis 
43e5512404Skettenis 	if (strcmp(ma->ma_name, "core") == 0)
44e5512404Skettenis 		return (1);
45e5512404Skettenis 
46e5512404Skettenis 	return (0);
47e5512404Skettenis }
48e5512404Skettenis 
49e5512404Skettenis void
core_attach(struct device * parent,struct device * self,void * aux)50e5512404Skettenis core_attach(struct device *parent, struct device *self, void *aux)
51e5512404Skettenis {
52e5512404Skettenis 	struct mainbus_attach_args *ma = aux;
53e5512404Skettenis 	struct mainbus_attach_args nma;
54e5512404Skettenis 	char buf[32];
55e5512404Skettenis 	int node;
56e5512404Skettenis 
57e5512404Skettenis 	printf("\n");
58e5512404Skettenis 
59e5512404Skettenis 	for (node = OF_child(ma->ma_node); node; node = OF_peer(node)) {
60e5512404Skettenis 		if (!checkstatus(node))
61e5512404Skettenis 			continue;
62e5512404Skettenis 
63e5512404Skettenis 		OF_getprop(node, "name", buf, sizeof(buf));
64e5512404Skettenis 		if (strcmp(buf, "cpu") == 0)
65e5512404Skettenis 			OF_getprop(ma->ma_node, "compatible", buf, sizeof(buf));
66e5512404Skettenis 
67e5512404Skettenis 		bzero(&nma, sizeof(nma));
68e5512404Skettenis 		nma.ma_node = node;
69e5512404Skettenis 		nma.ma_name = buf;
70e5512404Skettenis 		config_found(self, &nma, core_print);
71e5512404Skettenis 	}
72e5512404Skettenis }
73e5512404Skettenis 
74e5512404Skettenis int
core_print(void * aux,const char * name)75e5512404Skettenis core_print(void *aux, const char *name)
76e5512404Skettenis {
77e5512404Skettenis 	struct mainbus_attach_args *ma = aux;
78e5512404Skettenis 
79e5512404Skettenis 	if (name)
80e5512404Skettenis 		printf("\"%s\" at %s", ma->ma_name, name);
81e5512404Skettenis 	return (UNCONF);
82e5512404Skettenis }
83