introducing a FreeBSD driver for the Apple Touchpad; and a few questions..

Rohit Grover rgrover1 at gmail.com
Wed Aug 19 21:16:12 UTC 2009


On Thu, Aug 20, 2009 at 1:44 AM, Patrick Lamaiziere
<patfbsd at davenulle.org>wrote:

> Le Wed, 19 Aug 2009 21:16:06 +0800,
> Rohit Grover <rgrover1 at gmail.com> a écrit :
>
> > I have developed a driver for the Touchpad device on Apple Macbooks.
> > Mine is a Macbook 3,1, and I run FreeBSD7.2
>
> Cool! Shall it work on a MacBookPro 3,1?


Please give it a try. The number of Y sensors on a MacBookPro might be
different. On my MacBook, I've got 20 X sensors and 10 Y sensors; but that
is with a mouse-button at the bottom of the touch-sensitive area. The button
has been replaced with additional touchpad surface in the MacBookPro. So it
will require a bit of experimentation, and even some reverse-engineering.
The key to interpreting data from the device is atp_read_sensors(). That
might have to change to support newer models.

If someone is willing to contribute with testing, I can create a version of
the driver which logs additional detail to help us with the reverse
engineering.


> Do you plan a version to the new usb stack on 8.0?
>

Certainly. I can't yet run 8.0 on my MacBook. ACPI panics the kernel right
at the beginning of boot, and even if I disable ACPI, the kernel is still
unable to mount the root partition. I have tried compiling my driver against
8.0, and I see that I will need to adapt to the new USB stack. I'm very keen
on moving to 8.0 once it can boot on my laptop. I'd be happy to maintain
support for multiple versions of FreeBSD.


>
> > For my algorithms, I would like to allocate memory dynamically out of
> > a small pool of fixed sized structures. I have read a bit about UMA;
> > is UMA a good alternative for managing a small pool (~20) of buffers
> > (of around 20 bytes in size)?
>
> I'm not sure for this, IMHO UMA does not care about the size of the
> buffers, and malloc uses UMA for the allocation.
>

But is UMA a very heavy-weight approach to managing a small pool of fixed
sized buffers whose total footprint is under 512 bytes?


> I've read a bit the source, you should not use spl on 7.x, they are
> no-ops. Instead use some mutexes. And you should not use the giant lock.
>

Thanks for pointing this out. I will research the use of SMP primitives. The
'ums' driver, which is what I am replacing, also uses splx(). Could you tell
me which giant lock I am using in my code? Is there any documentation I can
refer to for SMP synchronization under FreeBSD?

regards,
Rohit.


More information about the freebsd-drivers mailing list