From owner-freebsd-mobile Mon Jan 17 23:42:48 2000 Delivered-To: freebsd-mobile@freebsd.org Received: from public.bta.net.cn (public.bta.net.cn [202.96.0.97]) by hub.freebsd.org (Postfix) with ESMTP id 476201503E for ; Mon, 17 Jan 2000 23:38:19 -0800 (PST) (envelope-from robinson@netrinsics.com) Received: from netrinsics.com (gj-07-071.bta.net.cn [202.106.7.71]) by public.bta.net.cn (8.9.3/8.9.3) with ESMTP id PAA01138 for ; Tue, 18 Jan 2000 15:37:41 +0800 (CST) Received: (from robinson@localhost) by netrinsics.com (8.9.3/8.9.3) id PAA03315; Tue, 18 Jan 2000 15:38:00 +0800 (+0800) (envelope-from robinson) Date: Tue, 18 Jan 2000 15:38:00 +0800 (+0800) From: Michael Robinson Message-Id: <200001180738.PAA03315@netrinsics.com> To: imp@village.org, robinson@netrinsics.com Subject: Re: 3Com 3CCFE574BT works. Cc: freebsd-mobile@freebsd.org In-Reply-To: <200001180612.XAA14850@harmony.village.org> Sender: owner-freebsd-mobile@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org Warner Losh writes: >: The official way to hardwire a pccard to an IRQ in -STABLE is what, then? > >/etc/pccard.conf supports this, does it not? No, it does not. At the very best, /etc/pccard.conf supports a suggestion of an IRQ, which the system is perfectly willing to ignore, depending on the the imask value returned by wave_dead_chicken(). If you require deterministic assignment of an IRQ to a pccard, you have to hardcode an imask value in pccard_alloc_intr(), and build a kernel specifically for that case. -Michael P.S. To save people the trouble of verifying that this is the case, I include the relevant code from sys/pccard/pccard.c: --------------------------------------------------------------- /* * pccard_alloc_intr - allocate an interrupt from the * free interrupts and return its number. The interrupts * allowed are passed as a mask. */ int pccard_alloc_intr(u_int imask, inthand2_t *hand, int unit, u_int *maskp, u_int *pcic_imask) { int irq; unsigned int mask; for (irq = 1; irq < ICU_LEN; irq++) { mask = 1ul << irq; if (!(mask & imask)) continue; INTRMASK(*maskp, mask); if (register_intr(irq, 0, 0, hand, maskp, unit) == 0) { /* add this to the PCIC controller's mask */ if (pcic_imask) INTRMASK(*pcic_imask, (1 << irq)); update_intr_masks(); INTREN(mask); return(irq); } /* No luck, remove from mask again... */ INTRUNMASK(*maskp, mask); update_intr_masks(); } return(-1); } To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-mobile" in the body of the message