Home | History | Annotate | Line # | Download | only in dev
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