From owner-freebsd-stable Mon Oct 18 13:15:13 1999 Delivered-To: freebsd-stable@freebsd.org Received: from pathlink.net (linda.pathlink.com [165.113.238.197]) by hub.freebsd.org (Postfix) with ESMTP id 06EDF14EE2 for ; Mon, 18 Oct 1999 13:15:09 -0700 (PDT) (envelope-from kachun@pathlink.com) Received: from dvl-1 (dvl-1.pathlink.com [207.211.168.211]) by pathlink.net (8.9.3/8.8.7) with SMTP id NAA46986 for ; Mon, 18 Oct 1999 13:15:17 -0700 (PDT) Message-Id: <199910182015.NAA46986@pathlink.net> To: freebsd-stable@freebsd.org Subject: Re: Promise Ultra66 From: kachun@pathlink.com (Kachun Lee) Date: Mon, 18 Oct 1999 13:14:55 -0700 X-Mailer: WinVN 0.99.8 (x86 32bit) In-Reply-To: References: MIME-Version: 1.0 Content-Type: Text/Plain; charset=US-ASCII Sender: owner-freebsd-stable@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG In article , you say... > >I am trying to get FreeBSD 3.3-stable to detect a Promise Ultra66 IDE >adapter. I searched through the mailing list archives, but could not >find an answer. I tried the configuration detailed in LINT, but it still >isn't detected. On boot, the card announces itself and detects my Western >Digital AC29100 and sets it up for UDMA mode 4. The kernel will start to >load, then panic because it cannot see a hard disk controller. > >Anyone out there have success with this, and if so, can I have a peek at >your config file? > > >========================================================== >= Bryan D. Liesner LeezSoft Communications, Inc. = >= A subsidiary of LeezSoft Inc. = >= bleez@netaxs.com Home of the Gipper = >========================================================== > > > >To Unsubscribe: send mail to majordomo@FreeBSD.org >with "unsubscribe freebsd-stable" in the body of the message A similar post I made to comp.unix.bsd.freebsd.misc... I am trying to get some comment about if there is any side effect in the wd.c patch... I got the Promise Ultra66 working with the ide_pci.c patch below. I was using v3.3, but I believe it should work with v3.2. But with ATAPI option set, the wd.c needed to be patched (same with Promise Ultra33) also, or else the controller would fail the wdreset. I did not know the full ramification of the wd.c patch to other controllers and ATAPI devices... I only tried it with a CDROM. *** ide_pci.c Wed Oct 13 15:27:44 1999 --- ide_pci.c.01 Mon Oct 18 10:44:31 1999 *************** *** 61,66 **** --- 61,67 ---- #endif #define PROMISE_ULTRA33 0x4d33105a + #define PROMISE_ULTRA66 0x4d38105a struct ide_pci_cookie; /* structs vendor_fns, ide_pci_cookie are recursive */ *************** *** 1217,1222 **** --- 1218,1224 ---- if ((data & PCI_CLASS_MASK) == PCI_CLASS_MASS_STORAGE && ((data & PCI_SUBCLASS_MASK) == 0x00010000 || + ((data & PCI_SUBCLASS_MASK) == 0x00800000) || ((data & PCI_SUBCLASS_MASK) == 0x00040000))) { if (type == 0x71118086) return ("Intel PIIX4 Bus-master IDE controller"); *************** *** 1226,1231 **** --- 1228,1235 ---- return ("Intel PIIX Bus-master IDE controller"); if (type == PROMISE_ULTRA33) return ("Promise Ultra/33 IDE controller"); + if (type == PROMISE_ULTRA66) + return ("Promise Ultra/66 IDE controller"); if (type == 0x05711106) return ("VIA 82C586x (Apollo) Bus-master IDE controller"); if (type == 0x01021078) *************** *** 1263,1269 **** /* set up vendor-specific stuff */ type = pci_conf_read(tag, PCI_ID_REG); ! if (type != PROMISE_ULTRA33) { /* is it busmaster capable? bail if not */ class = pci_conf_read(tag, PCI_CLASS_REG); if (!(class & 0x8000)) { --- 1267,1279 ---- /* set up vendor-specific stuff */ type = pci_conf_read(tag, PCI_ID_REG); ! switch(type) ! { ! case PROMISE_ULTRA33: ! case PROMISE_ULTRA66: ! break; ! ! default: /* is it busmaster capable? bail if not */ class = pci_conf_read(tag, PCI_CLASS_REG); if (!(class & 0x8000)) { *************** *** 1291,1296 **** --- 1301,1307 ---- break; case PROMISE_ULTRA33: + case PROMISE_ULTRA66: /* Promise controllers */ vp = &vs_promise; break; *************** *** 1308,1314 **** break; } ! if (type != PROMISE_ULTRA33) { if ((class & 0x100) == 0) { iobase_wd_1 = IO_WD1; altiobase_wd_1 = iobase_wd_1 + wd_altsts; --- 1319,1326 ---- break; } ! switch(type) { ! default: if ((class & 0x100) == 0) { iobase_wd_1 = IO_WD1; altiobase_wd_1 = iobase_wd_1 + wd_altsts; *************** *** 1324,1330 **** iobase_wd_2 = pci_conf_read(tag, 0x18) & 0xfffc; altiobase_wd_2 = pci_conf_read(tag, 0x1c) & 0xfffc; } ! } else { iobase_wd_1 = pci_conf_read(tag, 0x10) & 0xfffc; altiobase_wd_1 = pci_conf_read(tag, 0x14) & 0xfffc; iobase_wd_2 = pci_conf_read(tag, 0x18) & 0xfffc; --- 1336,1344 ---- iobase_wd_2 = pci_conf_read(tag, 0x18) & 0xfffc; altiobase_wd_2 = pci_conf_read(tag, 0x1c) & 0xfffc; } ! break; ! case PROMISE_ULTRA33: ! case PROMISE_ULTRA66: iobase_wd_1 = pci_conf_read(tag, 0x10) & 0xfffc; altiobase_wd_1 = pci_conf_read(tag, 0x14) & 0xfffc; iobase_wd_2 = pci_conf_read(tag, 0x18) & 0xfffc; ----------------------------------------------------------------------- wd.c patch - only need when ATAPI is set... see caution above. *** wd.c Mon Aug 30 17:24:28 1999 --- wd.c.01 Mon Oct 18 11:03:05 1999 *************** *** 2302,2310 **** --- 2302,2312 ---- #ifdef ATAPI if (wdwait(du, 0, TIMEOUT) != 0) err = 1; /* no IDE drive found */ du->dk_error = inb(du->dk_port + wd_error); + #if 0 /* Promise Ultra33/66 would not pass this */ if (du->dk_error != 0x01) err = 1; /* the drive is incompatible */ + #endif #else if (wdwait(du, WDCS_READY | WDCS_SEEKCMPLT, TIMEOUT) != 0) { printf("wdreset: error1: 0x%x\n", du->dk_error); To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-stable" in the body of the message