hb.c revision 1.2 1 1.2 tsubai /* $NetBSD: hb.c,v 1.2 1998/06/05 14:19:22 tsubai Exp $ */
2 1.1 tsubai
3 1.1 tsubai #include <sys/param.h>
4 1.1 tsubai #include <sys/systm.h>
5 1.1 tsubai #include <sys/device.h>
6 1.1 tsubai
7 1.1 tsubai #include <machine/autoconf.h>
8 1.1 tsubai #include <machine/adrsmap.h>
9 1.1 tsubai
10 1.1 tsubai static int hb_match __P((struct device *, struct cfdata *, void *));
11 1.1 tsubai static void hb_attach __P((struct device *, struct device *, void *));
12 1.2 tsubai static int hb_search __P((struct device *, struct cfdata *, void *));
13 1.1 tsubai static int hb_print __P((void *, const char *));
14 1.1 tsubai
15 1.1 tsubai struct cfattach hb_ca = {
16 1.1 tsubai sizeof(struct device), hb_match, hb_attach
17 1.1 tsubai };
18 1.1 tsubai
19 1.1 tsubai extern struct cfdriver hb_cd;
20 1.1 tsubai
21 1.1 tsubai static int
22 1.1 tsubai hb_match(parent, cf, aux)
23 1.1 tsubai struct device *parent;
24 1.1 tsubai struct cfdata *cf;
25 1.1 tsubai void *aux;
26 1.1 tsubai {
27 1.1 tsubai struct confargs *ca = aux;
28 1.1 tsubai
29 1.1 tsubai if (strcmp(ca->ca_name, hb_cd.cd_name) != 0)
30 1.1 tsubai return 0;
31 1.1 tsubai
32 1.1 tsubai return 1;
33 1.1 tsubai }
34 1.1 tsubai
35 1.1 tsubai static char *hbdevs[] = {
36 1.1 tsubai "clock",
37 1.1 tsubai "fb",
38 1.1 tsubai "zsc",
39 1.1 tsubai "kb",
40 1.1 tsubai "ms",
41 1.1 tsubai "le",
42 1.1 tsubai "sc",
43 1.1 tsubai NULL
44 1.1 tsubai };
45 1.1 tsubai
46 1.1 tsubai static void
47 1.1 tsubai hb_attach(parent, self, aux)
48 1.1 tsubai struct device *parent;
49 1.1 tsubai struct device *self;
50 1.1 tsubai void *aux;
51 1.1 tsubai {
52 1.1 tsubai struct confargs ca;
53 1.1 tsubai char **p = hbdevs;
54 1.1 tsubai
55 1.1 tsubai printf("\n");
56 1.1 tsubai bzero(&ca, sizeof(ca));
57 1.1 tsubai
58 1.1 tsubai while (*p) {
59 1.1 tsubai ca.ca_name = *p;
60 1.2 tsubai config_search(hb_search, self, &ca);
61 1.1 tsubai p++;
62 1.1 tsubai }
63 1.1 tsubai }
64 1.1 tsubai
65 1.2 tsubai static int
66 1.2 tsubai hb_search(parent, cf, aux)
67 1.2 tsubai struct device *parent;
68 1.2 tsubai struct cfdata *cf;
69 1.2 tsubai void *aux;
70 1.2 tsubai {
71 1.2 tsubai struct confargs *ca = aux;
72 1.2 tsubai
73 1.2 tsubai ca->ca_addr = cf->cf_addr;
74 1.2 tsubai
75 1.2 tsubai if ((*cf->cf_attach->ca_match)(parent, cf, ca) != 0)
76 1.2 tsubai config_attach(parent, cf, ca, hb_print);
77 1.2 tsubai
78 1.2 tsubai return 0;
79 1.2 tsubai }
80 1.2 tsubai
81 1.1 tsubai /*
82 1.1 tsubai * Print out the confargs. The (parent) name is non-NULL
83 1.1 tsubai * when there was no match found by config_found().
84 1.1 tsubai */
85 1.1 tsubai static int
86 1.1 tsubai hb_print(args, name)
87 1.1 tsubai void *args;
88 1.1 tsubai const char *name;
89 1.1 tsubai {
90 1.1 tsubai struct confargs *ca = args;
91 1.1 tsubai
92 1.1 tsubai /* Be quiet about empty HB locations. */
93 1.1 tsubai if (name)
94 1.1 tsubai return(QUIET);
95 1.1 tsubai
96 1.1 tsubai if (ca->ca_addr != -1)
97 1.1 tsubai printf(" addr 0x%x", ca->ca_addr);
98 1.1 tsubai
99 1.1 tsubai return(UNCONF);
100 1.1 tsubai }
101 1.1 tsubai
102