From owner-freebsd-hackers@FreeBSD.ORG Mon Aug 21 11:00:50 2006 Return-Path: X-Original-To: freebsd-hackers@freebsd.org Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 4D6B416A542 for ; Mon, 21 Aug 2006 11:00:49 +0000 (UTC) (envelope-from rik@inse.ru) Received: from mail.inse.ru (inse.ru [144.206.128.1]) by mx1.FreeBSD.org (Postfix) with ESMTP id 099F143D53 for ; Mon, 21 Aug 2006 11:00:48 +0000 (GMT) (envelope-from rik@inse.ru) Received: from [127.0.0.1] (www.inse.ru [144.206.128.1]) by mail.inse.ru (Postfix) with ESMTP id B2E6133C46; Mon, 21 Aug 2006 15:00:42 +0400 (MSD) Message-ID: <44E994AF.6040805@inse.ru> Date: Mon, 21 Aug 2006 15:10:39 +0400 From: Roman Kurakin User-Agent: Thunderbird 1.5.0.5 (X11/20060813) MIME-Version: 1.0 To: "M. Warner Losh" References: <44E87CCD.30105@inse.ru> <20060820.220124.387191884.imp@bsdimp.com> In-Reply-To: <20060820.220124.387191884.imp@bsdimp.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-hackers@freebsd.org Subject: Re: global data via module howto 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: Mon, 21 Aug 2006 11:00:50 -0000 M. Warner Losh wrote: > In message: <44E87CCD.30105@inse.ru> > Roman Kurakin writes: > : I have the following problem: > : module A > : int x; > : > : module B > : extern int x; > : > : Module A is loaded, module B can't be loaded cause of unknow 'x'. > : What should I do to make x global? > > Better to make module B depend on module A. Making it global is > generally a bad idea. > > in module A: > MODULE_VERSION(A, 1); > > In module B: > MODULE_DEPEND(B, A, 1, 1, 1); > Module dependence is not the goal. > Warner > > : PS. I am working on porting irda support for USB devices from NetBSD. > : The current model consists of two layers hw and sw. hw is the usb device > : driver. sw is some software layer the same for all device and it is a > : child on top of hw 'bus'. To make this working I need to add > : DRIVER_MODULE for each 'bus'. To make sw independent from the > : bus I need to export _driver and _class structures and put DRIVER_MODULE > : in 'bus' code instead of 'child'. > > Are you sure that you need to do this? I'm pretty sure that you can > create a base class irdabus and then derive all the hw modules that > implement irdabus from than and all the children will automatically > probe. No need to export the driver/class structures. > I have a bit reversed case. In common case we have a driver for "bus" with many consumers. And we have children that declares itself via DRIVER_MODULE. If child could work on several buses it declares itself several times one for each bus. In my case I have several drivers that could be treated as bus driver for the same child: -----------USB------------ | | | ustir uirda smth_else \ | / ---------irframe-------- Imagine, if the network interface was implemented as a child of every network adapter. This is the same. In common case I'll put DRIVER_MODULE in a child for each bus and recompile after adding a new one. In this case I do no want to recompile the child for every new "bus" since child do not depend on such "bus" - it is the same for all. So we may call this a pseudo-device with unknown list of buses. I know, I could implement this other way, but I just want to play with newbus a bit and the original NetBSD driver was implemented this way. rik > Warner > _______________________________________________ > freebsd-hackers@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-hackers > To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org" >