*BSD News Article 68040


Return to BSD News archive

Newsgroups: comp.unix.bsd.freebsd.misc
Path: euryale.cc.adfa.oz.au!newshost.anu.edu.au!harbinger.cc.monash.edu.au!news.rmit.EDU.AU!news.unimelb.EDU.AU!munnari.OZ.AU!spool.mu.edu!howland.reston.ans.net!surfnet.nl!tuegate.tue.nl!news.IAEhv.nl!rvv!rob
From: rob@rvv.IAEhv.nl (Rob van Vliet)
Subject: Re: IDE CDRom woes :(
X-Newsreader: TIN [version 1.2 PL2]
Organization: Rob van Vliet & Tracey McCreedy
Message-ID: <Dr4AyI.7M@rvv.IAEhv.nl>
References: <4m23md$cd0@snow.btinternet.com> <3189B4E3.41C67EA6@sprynet.com> <DqyIF3.BH@rvv.IAEhv.nl>
Date: Thu, 9 May 1996 02:59:06 GMT
Lines: 65

Rob van Vliet (rob@rvv.IAEhv.nl) wrote:
: Stephane Russell (sstef@sprynet.com) wrote:
: : The ATAPI driver seems to have problems to detect the cdrom after the seeking
: : of the controller's disks. If you can, put your cdrom on a controller with no
: : other hard disk on it and reconfigure your kernel like this:

: : controller      wdc1    at isa? port "IO_WD2" bio irq 15 vector wdintr
: : #disk            wd2     at wdc1 drive 0
: : #disk            wd3     at wdc1 drive 1

: : options         ATAPI   #Enable ATAPI support for IDE bus
: : device          wcd0    #IDE CD-ROM

: Tried this, and every other possibility I could think of, but it doesn't
: work: at boottime the kernel says: "wdc1: not found at 0x170"

: Specs: PCI Pentium 90, AMI Bios
: wd0 (Maxtor) and wd1 (Seagate) on wdc0.
: CD-ROM (Stingray 6speed) on wdc1 (master)

After trying everything "normal" I could think of, put this bad hack in 
/usr/src/sys/i386/isa/wd.c, in wdprobe :

------------------------
/* 
 * Probe for controller.
 */
static int
wdprobe(struct isa_device *dvp)
{
        int     unit = dvp->id_unit;
        struct disk *du;

        if (unit >= NWDC)
                return (0);

        du = malloc(sizeof *du, M_TEMP, M_NOWAIT);
        
        if (du == NULL)
                return (0);
        bzero(du, sizeof *du);
        du->dk_ctrlr = dvp->id_unit;
        du->dk_port = dvp->id_iobase;

        if (unit==1) {				/* These five lines */
                wdc_registerdev(dvp);		/* are bad, I know */ 
                free(du, M_TEMP);		/* But at least now */
                return (IO_WDCSIZE);    	/* I have wdc1 :)  */
        }
        
        wdc_registerdev(dvp);

        /* check if we have registers that work */
------------------------

I know, it's far from perfect, but it works for me.

Cheers,

Rob
-- 
------------------------------------------------------------------
Rob van Vliet                  Tel:            (+31)-(0)40-2119541
Leliestraat 1                  Fax:            (+31)-(0)40-2435729
5615 BK  EINDHOVEN             E-mail:                rvv@iaehv.nl