Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 18 Jul 2009 07:06:51 -0700
From:      Julian Elischer <julian@elischer.org>
To:        Andre Albsmeier <Andre.Albsmeier@siemens.com>
Cc:        freebsd-hackers@freebsd.org, Rui Paulo <rpaulo@freebsd.org>
Subject:   Re: Reading acpi memory from a driver attached to hostb
Message-ID:  <4A61D6FB.2090904@elischer.org>
In-Reply-To: <20090718081011.GA6920@curry.mchp.siemens.de>
References:  <20090717190450.GA4697@curry.mchp.siemens.de> <4A60D6D1.3050703@elischer.org> <20090718081011.GA6920@curry.mchp.siemens.de>

next in thread | previous in thread | raw e-mail | index | archive | help
Andre Albsmeier wrote:
> On Fri, 17-Jul-2009 at 12:53:53 -0700, Julian Elischer wrote:
>> Andre Albsmeier wrote:
>>> [CC'ing this to Rui Paulo since he tried to help me a while ago]
>>>
>>> Since my driver is a child of hostb0, I have no idea of how to access
>>> acpi0's memory area. Here is a devinfo -r to make things clear:
>>>
>> ...
>>> Earlier, I was given the hint to attach as a child of acpi (see the
>>> old mail attached below) but in this case I didn't have access to the
>>> hostb registers which I need as well.
>>>
>>> The only thing I see is: Attach two drivers -- one as child of acpi
>>> and another as child of hostb and let them communicate somehow (no
>>> idea how to do this).
>>>
>>> I have also done crazy things like searching for acpi0 and trying
>>> to bus_alloc_resource() the memory I am interested in but this also
>>> failed.
>>>
>>> Or is it possible to free(!) somehow the address space from acpi0
>>> and pass it to hostb0 so I can bus_alloc_resource() it?
>>>
>> You can probably make two drivers in one which cooperate to
>> allow access to both sets of resources.
> 
> Hmm, that's what I meant by: Attach two drivers -- one as child of acpi
> and another as child of hostb...
> 
> And that's similar to Rui Paulo's suggestion a while ago:
> 
>> You'll probably need to create a fake ACPI child driver to access it.
>>
>> Create your identify routine with something like:
>>
>> static void mydriver_identify(driver_t *driver, device_t parent)
>> {
>>         if (device_find_child(parent, "mydriver", -1) == NULL &&
>>             mydriver_match(parent))
>>                 device_add_child(parent, "mydriver", -1);
>> }
>>
>> mydriver_match() should check if you were given the acpi0 device.
> 
> But in order to attach to acpi0, I need to say
> 
> DRIVER_MODULE( eccmon, acpi, eccmon_driver, eccmon_devclass,  NULL, NULL );
> 
> instead of
> 
> DRIVER_MODULE( eccmon, hostb, eccmon_driver, eccmon_devclass,  NULL, NULL );

try both  with different devclass and other args.

> 
> This way I could attach to acpi but not to hostb anymore....
> 
> I have searched the net for solutions, I have read newbus-draft.txt
> and newbus-intro.txt and Warner Losh's newbus-led.c (thanks to all
> of these my driver is working on other mainboards where it doesn't
> have to access foreign memory) but didn't find anything.
> 
> Thanks,
> 
> 	-Andre




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4A61D6FB.2090904>