Writing a driver: how do I get resources?

John Baldwin jhb at freebsd.org
Tue Sep 23 19:12:16 UTC 2008


On Tuesday 23 September 2008 01:21:22 pm Gavin Atkinson wrote:
> On Tue, 2008-09-23 at 10:36 -0400, John Baldwin wrote:
> > On Tuesday 23 September 2008 08:38:25 am Gavin Atkinson wrote:
> > > Hi all,
> > > 
> > > Please forgive me if this email makes very little sense: I've never
> > > really looked at how ACPI works from a driver's perspective, so don't
> > > really know if what I'm trying to do is even correct.
> > > 
> > > I'm expanding the acpi_sony driver to cover the PNP ID SNY6001.  When I
> > > simply claim it by returning 0 from the probe, I get the following I/O 
> > range:
> > > 
> > > acpi_sony0: <Sony programmable I/O> port 0-0x1f on acpi0
> > > 
> > > However, if I'm reading the AML[1] and Linux drivers[2] correctly, this
> > > is not the correct range.  It appears that the _PRS method offers a
> > > choice of four I/O ranges and four IRQs, one of which is then selected
> > > by evaluating _SRS.  None of them are 0-0x1f.
> > > 
> > > Firstly, does that make sense?  Secondly, how do I do this from a
> > > driver?  I can't see any other drivers that seem to get this involved in
> > > ACPI, indeed the only mention of evaluating _PRS is within the ACPI code
> > > itself.
> > > 
> > > Lastly, I only have intermittent access to this laptop, so I apologise
> > > if I can't test things quickly.
> > 
> > Our ACPI driver isn't smart enough yet (AFAIK) to allocate new resources 
for a 
> > device that doesn't have any.  That logic should be in 
acpi_alloc_resource() 
> > and once that is present then your driver just needs to do the usual 
> > bus_alloc_resource() stuff to work.
> 
> Thanks.  So I guess there's no easy way to do it at the moment?

No. :(  What you would need to do is to change acpi_alloc_resource() such that 
if it is working on a direct child (so device_get_parent(child) == dev) and 
the child has no resources assigned yet, but there are possible resources, it 
needs to allocate a set of resources and do _SRS.

-- 
John Baldwin


More information about the freebsd-acpi mailing list