ppc_acpi.c revision 330897
1184870Syongari/*-
2184870Syongari * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3184870Syongari *
4184870Syongari * Copyright (c) 2006 Marcel Moolenaar
5184870Syongari * All rights reserved.
6184870Syongari *
7184870Syongari * Redistribution and use in source and binary forms, with or without
8184870Syongari * modification, are permitted provided that the following conditions
9184870Syongari * are met:
10184870Syongari * 1. Redistributions of source code must retain the above copyright
11184870Syongari *    notice, this list of conditions and the following disclaimer.
12184870Syongari * 2. Redistributions in binary form must reproduce the above copyright
13184870Syongari *    notice, this list of conditions and the following disclaimer in the
14184870Syongari *    documentation and/or other materials provided with the distribution.
15184870Syongari *
16184870Syongari * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17184870Syongari * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18184870Syongari * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19184870Syongari * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20184870Syongari * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21184870Syongari * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22184870Syongari * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23184870Syongari * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24184870Syongari * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25184870Syongari * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26184870Syongari * SUCH DAMAGE.
27184870Syongari */
28184870Syongari
29184870Syongari#include <sys/cdefs.h>
30184870Syongari__FBSDID("$FreeBSD: stable/11/sys/dev/ppc/ppc_acpi.c 330897 2018-03-14 03:19:51Z eadler $");
31184870Syongari
32184870Syongari#include "opt_isa.h"
33184870Syongari
34184870Syongari#include <sys/param.h>
35184870Syongari#include <sys/kernel.h>
36184870Syongari#include <sys/module.h>
37184870Syongari#include <sys/bus.h>
38184870Syongari
39184870Syongari#include <machine/bus.h>
40184870Syongari
41184870Syongari#include <isa/isareg.h>
42184870Syongari#include <isa/isavar.h>
43184870Syongari
44184870Syongari#include <dev/ppbus/ppbconf.h>
45184870Syongari#include <dev/ppbus/ppb_msq.h>
46184870Syongari#include <dev/ppc/ppcvar.h>
47184870Syongari#include <dev/ppc/ppcreg.h>
48184870Syongari
49184870Syongari#include "ppbus_if.h"
50184870Syongari
51184870Syongaristatic int ppc_acpi_probe(device_t dev);
52184870Syongari
53184870Syongariint ppc_isa_attach(device_t dev);
54184870Syongariint ppc_isa_write(device_t, char *, int, int);
55184870Syongari
56184870Syongaristatic device_method_t ppc_acpi_methods[] = {
57184870Syongari	/* device interface */
58184870Syongari	DEVMETHOD(device_probe,		ppc_acpi_probe),
59184870Syongari#ifdef DEV_ISA
60184870Syongari	DEVMETHOD(device_attach,	ppc_isa_attach),
61184870Syongari#else
62184870Syongari	DEVMETHOD(device_attach,	ppc_attach),
63184870Syongari#endif
64184870Syongari	DEVMETHOD(device_detach,	ppc_detach),
65184870Syongari
66184870Syongari	/* bus interface */
67184870Syongari	DEVMETHOD(bus_read_ivar,	ppc_read_ivar),
68184870Syongari	DEVMETHOD(bus_write_ivar,	ppc_write_ivar),
69184870Syongari	DEVMETHOD(bus_alloc_resource,	ppc_alloc_resource),
70184870Syongari	DEVMETHOD(bus_release_resource,	ppc_release_resource),
71184870Syongari
72184870Syongari	/* ppbus interface */
73184870Syongari	DEVMETHOD(ppbus_io,		ppc_io),
74184870Syongari	DEVMETHOD(ppbus_exec_microseq,	ppc_exec_microseq),
75184870Syongari	DEVMETHOD(ppbus_reset_epp,	ppc_reset_epp),
76184870Syongari	DEVMETHOD(ppbus_setmode,	ppc_setmode),
77184870Syongari	DEVMETHOD(ppbus_ecp_sync,	ppc_ecp_sync),
78184870Syongari	DEVMETHOD(ppbus_read,		ppc_read),
79184870Syongari#ifdef DEV_ISA
80184870Syongari	DEVMETHOD(ppbus_write,		ppc_isa_write),
81184870Syongari#else
82184870Syongari	DEVMETHOD(ppbus_write,		ppc_write),
83184870Syongari#endif
84184870Syongari
85184870Syongari	{ 0, 0 }
86184870Syongari};
87184870Syongari
88184870Syongaristatic driver_t ppc_acpi_driver = {
89184870Syongari	ppc_driver_name,
90184870Syongari	ppc_acpi_methods,
91184870Syongari	sizeof(struct ppc_data),
92184870Syongari};
93184870Syongari
94184870Syongaristatic struct isa_pnp_id lpc_ids[] = {
95184870Syongari	{ 0x0004d041, "Standard parallel printer port" },	/* PNP0400 */
96184870Syongari	{ 0x0104d041, "ECP parallel printer port" },		/* PNP0401 */
97184870Syongari	{ 0 }
98184870Syongari};
99184870Syongari
100184870Syongaristatic int
101184870Syongarippc_acpi_probe(device_t dev)
102184870Syongari{
103184870Syongari	device_t parent;
104184870Syongari	int error;
105184870Syongari
106184870Syongari	parent = device_get_parent(dev);
107184870Syongari
108184870Syongari	error = ISA_PNP_PROBE(parent, dev, lpc_ids);
109184870Syongari	if (error)
110184870Syongari		return (ENXIO);
111184870Syongari
112184870Syongari	device_set_desc(dev, "Parallel port");
113184870Syongari	return (ppc_probe(dev, 0));
114184870Syongari}
115184870Syongari
116184870SyongariDRIVER_MODULE(ppc, acpi, ppc_acpi_driver, ppc_devclass, 0, 0);
117184870Syongari