From owner-svn-src-head@freebsd.org Thu Jul 2 19:21:30 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 99E1899355B; Thu, 2 Jul 2015 19:21:30 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 8AD8E2029; Thu, 2 Jul 2015 19:21:30 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.14.9/8.14.9) with ESMTP id t62JLUll040521; Thu, 2 Jul 2015 19:21:30 GMT (envelope-from marcel@FreeBSD.org) Received: (from marcel@localhost) by repo.freebsd.org (8.14.9/8.14.9/Submit) id t62JLT6p040517; Thu, 2 Jul 2015 19:21:29 GMT (envelope-from marcel@FreeBSD.org) Message-Id: <201507021921.t62JLT6p040517@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: marcel set sender to marcel@FreeBSD.org using -f From: Marcel Moolenaar Date: Thu, 2 Jul 2015 19:21:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r285058 - in head/sys: dev/proto modules/proto X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 02 Jul 2015 19:21:30 -0000 Author: marcel Date: Thu Jul 2 19:21:29 2015 New Revision: 285058 URL: https://svnweb.freebsd.org/changeset/base/285058 Log: Add an ISA/ACPI bus attachment to proto(4). Added: head/sys/dev/proto/proto_bus_isa.c (contents, props changed) Modified: head/sys/dev/proto/proto_core.c head/sys/modules/proto/Makefile Added: head/sys/dev/proto/proto_bus_isa.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/dev/proto/proto_bus_isa.c Thu Jul 2 19:21:29 2015 (r285058) @@ -0,0 +1,121 @@ +/*- + * Copyright (c) 2015 Marcel Moolenaar + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include + +static int proto_isa_probe(device_t dev); +static int proto_isa_attach(device_t dev); + +static device_method_t proto_isa_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, proto_isa_probe), + DEVMETHOD(device_attach, proto_isa_attach), + DEVMETHOD(device_detach, proto_detach), + DEVMETHOD_END +}; + +static driver_t proto_isa_driver = { + proto_driver_name, + proto_isa_methods, + sizeof(struct proto_softc), +}; + +static int +proto_isa_probe(device_t dev) +{ + struct sbuf *sb; + struct resource *res; + int rid, type; + + rid = 0; + type = SYS_RES_IOPORT; + res = bus_alloc_resource_any(dev, type, &rid, RF_ACTIVE); + if (res == NULL) { + type = SYS_RES_MEMORY; + res = bus_alloc_resource_any(dev, type, &rid, RF_ACTIVE); + } + if (res == NULL) + return (ENODEV); + + sb = sbuf_new_auto(); + sbuf_printf(sb, "isa:%#lx", rman_get_start(res)); + sbuf_finish(sb); + device_set_desc_copy(dev, sbuf_data(sb)); + sbuf_delete(sb); + bus_release_resource(dev, type, rid, res); + return (BUS_PROBE_HOOVER); +} + +static int +proto_isa_alloc(device_t dev, int type, int nrids) +{ + struct resource *res; + struct proto_softc *sc; + int count, rid; + + sc = device_get_softc(dev); + count = 0; + for (rid = 0; rid < nrids; rid++) { + res = bus_alloc_resource_any(dev, type, &rid, RF_ACTIVE); + if (res == NULL) + break; + proto_add_resource(sc, type, rid, res); + count++; + } + if (type == SYS_RES_DRQ && count > 0) + proto_add_resource(sc, PROTO_RES_BUSDMA, 0, NULL); + return (count); +} + +static int +proto_isa_attach(device_t dev) +{ + + proto_isa_alloc(dev, SYS_RES_IRQ, ISA_NIRQ); + proto_isa_alloc(dev, SYS_RES_DRQ, ISA_NDRQ); + proto_isa_alloc(dev, SYS_RES_IOPORT, ISA_NPORT); + proto_isa_alloc(dev, SYS_RES_MEMORY, ISA_NMEM); + return (proto_attach(dev)); +} + +DRIVER_MODULE(proto, acpi, proto_isa_driver, proto_devclass, NULL, NULL); +DRIVER_MODULE(proto, isa, proto_isa_driver, proto_devclass, NULL, NULL); Modified: head/sys/dev/proto/proto_core.c ============================================================================== --- head/sys/dev/proto/proto_core.c Thu Jul 2 19:14:30 2015 (r285057) +++ head/sys/dev/proto/proto_core.c Thu Jul 2 19:21:29 2015 (r285058) @@ -54,12 +54,15 @@ __FBSDID("$FreeBSD$"); #include CTASSERT(SYS_RES_IRQ != PROTO_RES_UNUSED && + SYS_RES_DRQ != PROTO_RES_UNUSED && SYS_RES_MEMORY != PROTO_RES_UNUSED && SYS_RES_IOPORT != PROTO_RES_UNUSED); CTASSERT(SYS_RES_IRQ != PROTO_RES_PCICFG && + SYS_RES_DRQ != PROTO_RES_PCICFG && SYS_RES_MEMORY != PROTO_RES_PCICFG && SYS_RES_IOPORT != PROTO_RES_PCICFG); CTASSERT(SYS_RES_IRQ != PROTO_RES_BUSDMA && + SYS_RES_DRQ != PROTO_RES_BUSDMA && SYS_RES_MEMORY != PROTO_RES_BUSDMA && SYS_RES_IOPORT != PROTO_RES_BUSDMA); @@ -132,6 +135,8 @@ proto_attach(device_t dev) case SYS_RES_IRQ: /* XXX TODO */ break; + case SYS_RES_DRQ: + break; case SYS_RES_MEMORY: case SYS_RES_IOPORT: r->r_size = rman_get_size(r->r_d.res); @@ -185,6 +190,10 @@ proto_detach(device_t dev) bus_release_resource(dev, r->r_type, r->r_rid, r->r_d.res); break; + case SYS_RES_DRQ: + bus_release_resource(dev, r->r_type, r->r_rid, + r->r_d.res); + break; case SYS_RES_MEMORY: case SYS_RES_IOPORT: bus_release_resource(dev, r->r_type, r->r_rid, Modified: head/sys/modules/proto/Makefile ============================================================================== --- head/sys/modules/proto/Makefile Thu Jul 2 19:14:30 2015 (r285057) +++ head/sys/modules/proto/Makefile Thu Jul 2 19:21:29 2015 (r285058) @@ -4,6 +4,7 @@ KMOD= proto SRCS= \ + proto_bus_isa.c \ proto_bus_pci.c \ proto_busdma.c \ proto_core.c @@ -11,10 +12,12 @@ SRCS= \ SRCS+= \ bus_if.h \ device_if.h \ - pci_if.h \ + isa_if.h \ + pci_if.h MFILES= \ dev/pci/pci_if.m \ + isa/isa_if.m \ kern/bus_if.m \ kern/device_if.m