From owner-freebsd-hackers@FreeBSD.ORG Fri Aug 22 20:02:46 2008 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 279D81065676 for ; Fri, 22 Aug 2008 20:02:46 +0000 (UTC) (envelope-from pb@ludd.ltu.se) Received: from mother.ludd.ltu.se (mother.ludd.ltu.se [130.240.16.3]) by mx1.freebsd.org (Postfix) with ESMTP id AA2F98FC08 for ; Fri, 22 Aug 2008 20:02:45 +0000 (UTC) (envelope-from pb@ludd.ltu.se) Received: from brother.ludd.ltu.se (root@brother.ludd.ltu.se [130.240.16.78]) by mother.ludd.ltu.se (8.13.6+Sun/8.12.10) with ESMTP id m7MK2fgY000072 for ; Fri, 22 Aug 2008 22:02:41 +0200 (MEST) Received: from brother.ludd.ltu.se (pb@localhost [127.0.0.1]) by brother.ludd.ltu.se (8.13.6+Sun/8.12.2) with ESMTP id m7MK2fUI004488 for ; Fri, 22 Aug 2008 22:02:41 +0200 (MEST) Received: (from pb@localhost) by brother.ludd.ltu.se (8.13.6+Sun/8.13.6/Submit) id m7MK2fvo004486 for freebsd-hackers@freebsd.org; Fri, 22 Aug 2008 22:02:41 +0200 (MEST) From: Peter B Message-Id: <200808222002.m7MK2fvo004486@brother.ludd.ltu.se> To: freebsd-hackers@freebsd.org Date: Fri, 22 Aug 2008 22:02:41 +0200 (MEST) X-Mailer: ELM [version 2.5 PL6] MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Mailman-Approved-At: Fri, 22 Aug 2008 20:08:46 +0000 Subject: usb match() function X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 22 Aug 2008 20:02:46 -0000 Within the usb drivers (/usr/src/sys/dev/usb/u*.c) there's an matching routine where the 'uaa->iface' is supposed to be assigned before the routine is called. However for a new device or class this doesn't seem to work. Instead 'uaa' is set like for an generic device (two interfaces, no "default" in my case). So how is one supposed to make the kernel fill in 'uaa->iface' ..? Code excerpt (v7.x): static int *_match(device_t self) { struct usb_attach_arg *uaa = device_get_ivars(self); usb_interface_descriptor_t *id; DPRINTFN(10,("*_match\n")); if (uaa->iface == NULL) return (UMATCH_NONE);