Home | History | Annotate | Line # | Download | only in apbus
apbus_subr.c revision 1.8.38.1
      1  1.8.38.1     yamt /*	$NetBSD: apbus_subr.c,v 1.8.38.1 2014/05/22 11:40:00 yamt Exp $	*/
      2       1.1   tsubai 
      3       1.1   tsubai /*-
      4       1.1   tsubai  * Copyright (C) 1999 SHIMIZU Ryo.  All rights reserved.
      5       1.1   tsubai  *
      6       1.1   tsubai  * Redistribution and use in source and binary forms, with or without
      7       1.1   tsubai  * modification, are permitted provided that the following conditions
      8       1.1   tsubai  * are met:
      9       1.1   tsubai  * 1. Redistributions of source code must retain the above copyright
     10       1.1   tsubai  *    notice, this list of conditions and the following disclaimer.
     11       1.1   tsubai  * 2. Redistributions in binary form must reproduce the above copyright
     12       1.1   tsubai  *    notice, this list of conditions and the following disclaimer in the
     13       1.1   tsubai  *    documentation and/or other materials provided with the distribution.
     14       1.1   tsubai  * 3. The name of the author may not be used to endorse or promote products
     15       1.1   tsubai  *    derived from this software without specific prior written permission.
     16       1.1   tsubai  *
     17       1.1   tsubai  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     18       1.1   tsubai  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     19       1.1   tsubai  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     20       1.1   tsubai  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     21       1.1   tsubai  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     22       1.1   tsubai  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     23       1.1   tsubai  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     24       1.1   tsubai  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25       1.1   tsubai  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     26       1.1   tsubai  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27       1.1   tsubai  */
     28       1.5    lukem 
     29       1.5    lukem #include <sys/cdefs.h>
     30  1.8.38.1     yamt __KERNEL_RCSID(0, "$NetBSD: apbus_subr.c,v 1.8.38.1 2014/05/22 11:40:00 yamt Exp $");
     31       1.1   tsubai 
     32       1.1   tsubai #include <sys/param.h>
     33       1.1   tsubai #include <sys/systm.h>
     34       1.1   tsubai 
     35       1.1   tsubai #include <newsmips/apbus/apbusvar.h>
     36       1.1   tsubai 
     37       1.6  tsutsui static void apctl_dump(struct apbus_ctl *);
     38       1.3     matt 
     39       1.1   tsubai void *
     40       1.6  tsutsui apbus_device_to_hwaddr(struct apbus_dev *apbus_dev)
     41       1.1   tsubai {
     42       1.1   tsubai 	struct apbus_ctl *ctl;
     43       1.1   tsubai 
     44       1.2   tsubai 	if (apbus_dev == NULL)
     45       1.2   tsubai 		return NULL;
     46       1.1   tsubai 
     47       1.1   tsubai 	ctl = apbus_dev->apbd_ctl;
     48       1.2   tsubai 	if (ctl == NULL)
     49       1.2   tsubai 		return NULL;
     50       1.1   tsubai 
     51       1.1   tsubai 	return (void *)ctl->apbc_hwbase;
     52       1.1   tsubai }
     53       1.1   tsubai 
     54       1.2   tsubai struct apbus_dev *
     55       1.6  tsutsui apbus_lookupdev(char *devname)
     56       1.1   tsubai {
     57       1.2   tsubai 	struct apbus_dev *dp;
     58       1.1   tsubai 
     59       1.1   tsubai 	dp = _sip->apbsi_dev;
     60       1.2   tsubai 	if (devname == NULL || *devname == '\0')
     61       1.1   tsubai 		return dp;
     62       1.1   tsubai 
     63       1.2   tsubai 	/* search apbus_dev named 'devname' */
     64       1.1   tsubai 	while (dp) {
     65       1.8  tsutsui 		if (strcmp(devname, dp->apbd_name) == 0)
     66       1.1   tsubai 			return dp;
     67       1.1   tsubai 
     68       1.1   tsubai 		dp = dp->apbd_link;
     69       1.1   tsubai 	}
     70       1.1   tsubai 
     71       1.2   tsubai 	return NULL;
     72       1.1   tsubai }
     73       1.1   tsubai 
     74       1.3     matt static void
     75       1.6  tsutsui apctl_dump(struct apbus_ctl *apctl)
     76       1.1   tsubai {
     77       1.1   tsubai 	if (!apctl)
     78       1.1   tsubai 		return;
     79       1.1   tsubai 
     80       1.2   tsubai 	printf("	apbus_ctl dump (%p)\n", apctl);
     81       1.1   tsubai 
     82       1.1   tsubai 	printf("	Num:		%d\n", apctl->apbc_ctlno);
     83       1.1   tsubai 	printf("	HWaddr:		0x%08x\n", apctl->apbc_hwbase);
     84       1.1   tsubai 	printf("	softc:		%p\n", apctl->apbc_softc);
     85       1.1   tsubai 	printf("	Slot:		%d\n", apctl->apbc_sl);
     86       1.1   tsubai 	printf("\n");
     87       1.4  tsutsui 
     88       1.1   tsubai 	if (apctl->apbc_link)
     89       1.1   tsubai 		apctl_dump(apctl->apbc_link);
     90       1.1   tsubai }
     91       1.1   tsubai 
     92       1.1   tsubai void
     93       1.6  tsutsui apdevice_dump(struct apbus_dev *apdev)
     94       1.1   tsubai {
     95       1.1   tsubai 	struct apbus_ctl *apctl;
     96       1.1   tsubai 
     97       1.2   tsubai 	if (apdev == NULL)
     98       1.1   tsubai 		return;
     99       1.1   tsubai 
    100       1.1   tsubai 	/* only no pseudo device */
    101       1.1   tsubai 	apctl = apdev->apbd_ctl;
    102       1.2   tsubai 	if (apctl == NULL || apctl->apbc_hwbase == 0)
    103       1.1   tsubai 		return;
    104       1.1   tsubai 
    105       1.2   tsubai 	printf("apbus_dev dump (%p)\n", apdev);
    106       1.2   tsubai 	printf("name:		%s\n", apdev->apbd_name);
    107       1.2   tsubai 	printf("vendor:		%s\n", apdev->apbd_vendor);
    108       1.1   tsubai 	printf("atr:		%08x\n", apdev->apbd_atr);
    109       1.1   tsubai 	printf("rev:		%d\n", apdev->apbd_rev);
    110       1.1   tsubai 	printf("driver:		0x%08x\n", (unsigned int)apdev->apbd_driver);
    111       1.1   tsubai 	printf("ctl:		0x%08x\n", (unsigned int)apdev->apbd_ctl);
    112       1.1   tsubai 	printf("link:		0x%08x\n", (unsigned int)apdev->apbd_link);
    113       1.1   tsubai 	printf("\n");
    114       1.1   tsubai 
    115       1.1   tsubai 	apctl_dump(apctl);
    116       1.1   tsubai }
    117