1300445Sadrian/*-
2300445Sadrian * Copyright (c) 2015-2016 Landon Fuller <landon@landonf.org>
3300445Sadrian * All rights reserved.
4300445Sadrian *
5300445Sadrian * Redistribution and use in source and binary forms, with or without
6300445Sadrian * modification, are permitted provided that the following conditions
7300445Sadrian * are met:
8300445Sadrian * 1. Redistributions of source code must retain the above copyright
9300445Sadrian *    notice, this list of conditions and the following disclaimer,
10300445Sadrian *    without modification.
11300445Sadrian * 2. Redistributions in binary form must reproduce at minimum a disclaimer
12300445Sadrian *    similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
13300445Sadrian *    redistribution must be conditioned upon including a substantially
14300445Sadrian *    similar Disclaimer requirement for further binary redistribution.
15300445Sadrian *
16300445Sadrian * NO WARRANTY
17300445Sadrian * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18300445Sadrian * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19300445Sadrian * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
20300445Sadrian * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
21300445Sadrian * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
22300445Sadrian * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23300445Sadrian * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24300445Sadrian * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
25300445Sadrian * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26300445Sadrian * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
27300445Sadrian * THE POSSIBILITY OF SUCH DAMAGES.
28300445Sadrian */
29300445Sadrian
30300445Sadrian#include <sys/cdefs.h>
31300445Sadrian__FBSDID("$FreeBSD$");
32300445Sadrian
33300445Sadrian#include <sys/param.h>
34300445Sadrian#include <sys/kernel.h>
35300445Sadrian#include <sys/bus.h>
36300445Sadrian#include <sys/module.h>
37300445Sadrian
38300445Sadrian#include <dev/bhnd/bhnd_ids.h>
39300445Sadrian#include <dev/bhnd/bhnd.h>
40300445Sadrian
41300445Sadrian#include "bhndbvar.h"
42300445Sadrian
43300445Sadrian/*
44300445Sadrian * bhnd(4) driver mix-in providing a shared common methods for
45300445Sadrian * bhnd devices attached via a bhndb bridge.
46300445Sadrian */
47300445Sadrian
48300445Sadrianstatic int
49300445Sadrianbhnd_bhndb_read_board_info(device_t dev, device_t child,
50300445Sadrian    struct bhnd_board_info *info)
51300445Sadrian{
52300445Sadrian	int	error;
53300445Sadrian
54300445Sadrian	/* Initialize with NVRAM-derived values */
55300445Sadrian	if ((error = bhnd_bus_generic_read_board_info(dev, child, info)))
56300445Sadrian		return (error);
57300445Sadrian
58300445Sadrian	/* Let the bridge fill in any additional data */
59300445Sadrian	return (BHNDB_POPULATE_BOARD_INFO(device_get_parent(dev), dev, info));
60300445Sadrian}
61300445Sadrian
62300445Sadrianstatic bhnd_attach_type
63300445Sadrianbhnd_bhndb_get_attach_type(device_t dev, device_t child)
64300445Sadrian{
65300445Sadrian	/* It's safe to assume that a bridged device is always an adapter */
66300445Sadrian	return (BHND_ATTACH_ADAPTER);
67300445Sadrian}
68300445Sadrian
69300445Sadrianstatic device_method_t bhnd_bhndb_methods[] = {
70300445Sadrian	/* BHND interface */
71300445Sadrian	DEVMETHOD(bhnd_bus_get_attach_type,	bhnd_bhndb_get_attach_type),
72300445Sadrian	DEVMETHOD(bhnd_bus_read_board_info,	bhnd_bhndb_read_board_info),
73300445Sadrian
74300445Sadrian	DEVMETHOD_END
75300445Sadrian};
76300445Sadrian
77300445SadrianDEFINE_CLASS_0(bhnd, bhnd_bhndb_driver, bhnd_bhndb_methods, 0);
78