Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 28 Jun 1998 21:35:27 +0930 (CST)
From:      Peter Childs <pjchilds@imforei.apana.org.au>
To:        FreeBSD-gnats-submit@FreeBSD.ORG
Subject:   kern/7095: Gravis MAX in 2.2.6 suffers from isa.c bitrot
Message-ID:  <199806281205.VAA02342@al.imforei.apana.org.au>

next in thread | raw e-mail | index | archive | help

>Number:         7095
>Category:       kern
>Synopsis:       Gravis MAX in 2.2.6 suffers from isa.c bitrot
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:
>Keywords:
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sun Jun 28 05:10:01 PDT 1998
>Last-Modified:
>Originator:     Peter Childs
>Organization:
imforei
>Release:        FreeBSD 2.2.6-STABLE i386
>Environment:

	2.2.6-RELEASE with Voxware snd and Gravis Ultrasound MAX (non-pnp)

>Description:

	When stuffing large amounts of digital audio out of the GUS
 	the console is flooded (as is syslog) with

 isa_dmastart: channel 1 not acquired
 isa_dmastart: channel 1 not acquired
 isa_dmastart: channel 1 busy

	A quick comparison between /sys/i386/isa/isa.c in RELENG_2_2 and
	HEAD shows why this is occuring in 2.2-stable and not current...

>How-To-Repeat:

	Steal a Gravis Ultrasound MAX and install 2.2.6-RELEASE (or around)

>Fix:

	Apply patch like this...  this stops my syslog/xconsole getting
	flooded.. I still get a strange effect for the first few seconds
	of playing mp3 files like the "buffers" haven't been cleaned from		the last mp3 file played (i can hear snippets of the last song...)

	I'll chase that.. but this will fix the isa_dmastart prob for
	2.2.7-RELEASE at least...

*** isa.c.orig	Mon Jun 29 04:09:33 1998
--- isa.c	Sun Jun 28 21:18:49 1998
***************
*** 732,738 ****
   * isa_dmastart(): program 8237 DMA controller channel, avoid page alignment
   * problems by using a bounce buffer.
   */
! void isa_dmastart(int flags, caddr_t addr, u_int nbytes, int chan)
  {
  	vm_offset_t phys;
  	int waport;
--- 732,739 ----
   * isa_dmastart(): program 8237 DMA controller channel, avoid page alignment
   * problems by using a bounce buffer.
   */
! void
! isa_dmastart(int flags, caddr_t addr, u_int nbytes, int chan)
  {
  	vm_offset_t phys;
  	int waport;
***************
*** 745,757 ****
  	if ((chan < 4 && nbytes > (1<<16))
  	    || (chan >= 4 && (nbytes > (1<<17) || (u_int)addr & 1)))
  		panic("isa_dmastart: impossible request");
! #endif
  	if ((dma_inuse & (1 << chan)) == 0)
  		printf("isa_dmastart: channel %d not acquired\n", chan);
  
      if (!(flags & B_RAW))
  	if (dma_busy & (1 << chan))
  		printf("isa_dmastart: channel %d busy\n", chan);
  
  	dma_busy |= (1 << chan);
  
--- 746,766 ----
  	if ((chan < 4 && nbytes > (1<<16))
  	    || (chan >= 4 && (nbytes > (1<<17) || (u_int)addr & 1)))
  		panic("isa_dmastart: impossible request");
! 
  	if ((dma_inuse & (1 << chan)) == 0)
  		printf("isa_dmastart: channel %d not acquired\n", chan);
+ #endif
  
+ #if 0
+ 	/*
+ 	 * XXX This should be checked, but drivers like ad1848 only call
+ 	 * isa_dmastart() once because they use Auto DMA mode.  If we
+ 	 * leave this in, drivers that do this will print this continuously.
+ 	 */
      if (!(flags & B_RAW))
  	if (dma_busy & (1 << chan))
  		printf("isa_dmastart: channel %d busy\n", chan);
+ #endif
  
  	dma_busy |= (1 << chan);



>Audit-Trail:
>Unformatted:

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199806281205.VAA02342>