*BSD News Article 74857


Return to BSD News archive

Path: euryale.cc.adfa.oz.au!newshost.anu.edu.au!harbinger.cc.monash.edu.au!munnari.OZ.AU!comp.vuw.ac.nz!usenet
From: milton@Comp.VUW.AC.NZ (milton)
Newsgroups: comp.unix.bsd.freebsd.misc
Subject: Re: CDROM won't play audio CD & Silent SoundBlaster16
Date: 28 Jul 1996 12:06:15 +1200
Organization: Dept. of Computer Science, Victoria Uni. of Wellington, NZ.
Lines: 63
Sender: milton@bats.comp.vuw.ac.nz
Message-ID: <ch4n30l6y2w.fsf@bats.comp.vuw.ac.nz>
References: <31F9716E.ABD322C@grolier.Fr>
NNTP-Posting-Host: bats.comp.vuw.ac.nz
In-reply-to: Un L'Unique's message of Fri, 26 Jul 1996 18:31:26 -0700
X-Face: 1z?<f6:W_X?x4,("n&O@BTQZcRfJ;|'YmfV`a<zZqH/?y<o<uQNn:A\5*DH|"FAkV9]\z"1
 '2%*6{0b$JO'+GRo**}!f=85':yX7,s8s@o}A(]C2+}[4g$`&K1WUcU^F2nX~UMl?1S7A@u=To/5
X-uri: http://www.comp.vuw.ac.nz/~milton/
X-Newsreader: Gnus v5.1

Un L'Unique <Un@grolier.Fr> writes:

> atapi1.0: unknown phase
> [...]

  This problem is fixed with this patch that I made. I haven't got in
  touch with the person who maintains the code, and I haven't really
  tested it out on any other CD-ROM except mine (Pioneer DR-UA-124x)
  and another person (Benjamin Lewis) with an ACER (CD-767E).
 
  This patch enables the device to be properly detected and configured
  to audio. It is having troubles retrieving the capabilities
  information from the CD-ROM. 

  After you patch the sources, you may still come across a message
  like this:
    wcd0: medium type unknown          

  I haven't worked out exactly why this happens. But basically the
  capabilities page returns with some bogus capability
  information. Anyone else out there experienced this problem? I have
  seen this behaviour on my Pioneer, but under the NetBSD driver. 

M.

  The patch follows:

*** atapi.c.ctm Tue Jul 23 23:28:07 1996
--- atapi.c     Thu Jul 25 21:59:28 1996
***************
*** 651,656 ****
--- 651,657 ----
  {
        u_char ireason;
        u_short len, i;
+       int retries=0;
  
        if (atapi_wait (ata->port, 0) < 0) {
                ac->result.status = inb (ata->port + AR_STATUS);
***************
*** 662,667 ****
--- 663,669 ----
                return (0);
        }
  
+ again:
        ac->result.status = inb (ata->port + AR_STATUS);
        ac->result.error = inb (ata->port + AR_ERROR);
        len = inb (ata->port + AR_CNTLO);
***************
*** 676,681 ****
--- 678,687 ----
        }
        switch ((ireason & (ARI_CMD | ARI_IN)) | (ac->result.status & ARS_DRQ)) {
        default:
+               if (++retries < 100) {
+                 DELAY(100);
+                 goto again;
+               }
                printf ("atapi%d.%d: unknown phase\n", ata->ctrlr, ac->unit);
                ac->result.code = RES_ERR;
                break;
--