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