From nms@otdel-1.org  Wed Oct 18 04:07:14 2000
Return-Path: <nms@otdel-1.org>
Received: from Draculina.otdel-1.org (Draculina.Otdel-1.ORG [195.230.65.30])
	by hub.freebsd.org (Postfix) with ESMTP id EA96037B4D7
	for <FreeBSD-gnats-submit@freebsd.org>; Wed, 18 Oct 2000 04:07:11 -0700 (PDT)
Received: by Draculina.otdel-1.org (Postfix, from userid 1002)
	id 23694F3; Wed, 18 Oct 2000 15:07:04 +0400 (MSD)
Message-Id: <20001018110704.23694F3@Draculina.otdel-1.org>
Date: Wed, 18 Oct 2000 15:07:04 +0400 (MSD)
From: nms@otdel-1.org
Reply-To: nms@otdel-1.org
To: FreeBSD-gnats-submit@freebsd.org
Subject: Option ROM(s) must be excluded from ISA IO memory space allocation
X-Send-Pr-Version: 3.2

>Number:         22078
>Category:       kern
>Synopsis:       Option ROM(s) must be excluded from ISA IO memory space allocation
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    imp
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed Oct 18 04:10:01 PDT 2000
>Closed-Date:    Fri Jun 1 15:06:50 MDT 2001
>Last-Modified:  Fri Jun 01 15:07:21 MDT 2001
>Originator:     Nikolai Saoukh
>Release:        FreeBSD 4.1.1-STABLE i386
>Organization:
>Environment:

	Any device on ISA bus with io memory window request with current
	resource manager.

>Description:

	Option ROM(s) are not excluded from ISA io memory, thus
	any request for io memory window can land upon video/...
	BIOS. See also kern/17715.

>How-To-Repeat:

	

>Fix:

Attached patch introduce new device wich take care of any option ROM(s)
present on ISA address space.

--- src/sys/isa/isa_common.c.orig	Tue Oct 10 13:49:04 2000
+++ src/sys/isa/isa_common.c	Thu Oct 12 18:24:16 2000
@@ -1047,3 +1047,95 @@
 DRIVER_MODULE(isa, nexus, isa_driver, isa_devclass, 0, 0);
 #endif
 
+/*
+ * Pseudo driver to take care of holes in ISA iomem occupied
+ * by option rom(s)
+ */
+
+#define	ORM_ID	0x00004d3e
+
+static struct isa_pnp_id orm_ids[] = {
+	{ ORM_ID,	NULL },		/* ORM0000 */
+	{ 0,		NULL },
+};
+
+static int
+orm_probe(device_t dev) {
+	return ISA_PNP_PROBE(device_get_parent(dev), dev, orm_ids);
+}
+
+static int
+orm_attach(device_t dev) {
+	return 0;
+}
+
+#define	IOMEM_START	0x0a0000
+#define	IOMEM_STEP	0x000800
+#define	IOMEM_END	0x100000
+
+static void
+orm_identify(driver_t* driver, device_t parent) {
+	device_t	child;
+	u_int32_t	chunk;
+	int		rnum = 0;
+
+	child = BUS_ADD_CHILD(parent, ISA_ORDER_SPECULATIVE, "orm", -1);
+	device_set_driver(child, driver);
+	device_set_desc(child, "Option ROM(s)");
+	isa_set_logicalid(child, ORM_ID);
+	isa_set_vendorid(child, ORM_ID);
+	for (chunk = IOMEM_START; chunk < IOMEM_END; chunk += IOMEM_STEP) {
+		struct resource*	res;
+		int			rid;
+		bus_space_tag_t		bt;
+		bus_space_handle_t	bh;
+		u_int32_t		rom_size;
+		u_int8_t		buf[3];
+
+		bus_set_resource(child, SYS_RES_MEMORY, rnum, chunk, IOMEM_STEP);
+		rid = rnum;
+		res = bus_alloc_resource(child, SYS_RES_MEMORY, &rid, 0ul, ~0ul, IOMEM_STEP, RF_ACTIVE);
+		if (res == NULL) {
+			bus_delete_resource(child, SYS_RES_MEMORY, rnum);
+			continue;
+		}
+		bt = rman_get_bustag(res);
+		bh = rman_get_bushandle(res);
+		bus_space_read_region_1(bt, bh, 0, buf, sizeof(buf));
+		bus_release_resource(child, SYS_RES_MEMORY, rid, res);
+		bus_delete_resource(child, SYS_RES_MEMORY, rnum);
+		if (buf[0] != 0x55 || buf[1] != 0xAA || (buf[2] & 0x03) != 0) {
+			continue;
+		}
+		rom_size = buf[2] << 9;
+		bus_set_resource(child, SYS_RES_MEMORY, rnum, chunk, rom_size);
+		rid = rnum;
+		res = bus_alloc_resource(child, SYS_RES_MEMORY, &rid, 0ul, ~0ul, rom_size, 0);
+		if (res == NULL) {
+			bus_delete_resource(child, SYS_RES_MEMORY, rnum);
+			continue;
+		}
+		chunk += rom_size - IOMEM_STEP;
+		rnum++;
+	}
+	if(rnum == 0)
+		device_delete_child(parent, child);
+}
+
+static device_method_t orm_methods[] = {
+	/* Device interface */
+	DEVMETHOD(device_identify,	orm_identify),
+	DEVMETHOD(device_probe,		orm_probe),
+	DEVMETHOD(device_attach,	orm_attach),
+	{ 0, 0 }
+};
+
+static driver_t orm_driver = {
+	"orm",
+	orm_methods,
+	0
+};
+
+static devclass_t orm_devclass;
+
+DRIVER_MODULE(orm, isa, orm_driver, orm_devclass, 0, 0);

>Release-Note:
>Audit-Trail:

From: Nikolai Saoukh <nms@otdel-1.org>
To: bug-followup@freebsd.org
Cc:  
Subject: kern/22078: now with man page & copyright
Date: Wed, 10 Jan 2001 17:10:02 +0300

 --IJpNTDwzlM2Ie8A6
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline
 
 Attached tarball contains source of driver to be build
 as loadable module, Makefile & man page. Is it good enough to
 be commited? ;-))
 
 Thanks
 
 --IJpNTDwzlM2Ie8A6
 Content-Type: application/x-tar-gz
 Content-Disposition: attachment; filename="orm.tar.gz"
 Content-Transfer-Encoding: base64
 
 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
 oT1eqB/LY3ksj+X/vPwLfPltSQAoAAA=
 
 --IJpNTDwzlM2Ie8A6--
 
Responsible-Changed-From-To: freebsd-bugs->imp 
Responsible-Changed-By: imp 
Responsible-Changed-When: Fri Jun 1 12:38:30 MDT 2001 
Responsible-Changed-Why:  
I'll give this a try. 

http://www.FreeBSD.org/cgi/query-pr.cgi?pr=22078 
State-Changed-From-To: open->closed 
State-Changed-By: imp 
State-Changed-When: Fri Jun 1 15:06:50 MDT 2001 
State-Changed-Why:  
I've committed this to -current.  Will MFC in a week or so. 

http://www.FreeBSD.org/cgi/query-pr.cgi?pr=22078 
>Unformatted:
