FreeBSD on ASUS Eee PC 1015PD

I installed FreeBSD 8.1-RELEASE on my notebook ASUS Eee PC 1015PD according to the information at http://wiki.freebsd.org/AsusEee. There are some ACPI-related issues that need to be dealt with.

Hardware

 device detail driver comment
 ethernet Atheros AR8132 PCIe Fast
 Ethernet
 acl(4) 
 wireless RaLink RT3090 Wireless
 802.11n 1T/1R PCIe
 ???
 
 graphics Intel Pineview (M) SVGA
 controller
 ports/x11-drivers/xf86-video-intel29 
 audio Intel 82801G High Definition
 Audio Controller
 snd_hda(4) 
 SD card reader


 umass(4)
 
 hotkeys 

 acpi_asus(4) see below
 webcam USB2.0 UVC VGA WebCam
 Azurewave
 ???
 

Suspend/resume

To make suspend/resume work, hyperthreading should be turned off in /boot/loader.conf.

machdep.hyperthreading_allowed="0"

Unfortunately X server crashes on resume from suspend.

To keep the touchpad functioning after resume the following hint has to be added to /boot/device.hints. -- 2010/11/27

hint.psm.0.flags="0x2000"

Hotkey

acpi_asus(4) is loaded but does not recognize the functionality, unless "Windows 2009" should be deleted from AcpiInterfacesSupported[] in /sys/contrib/dev/acpica/utilities/uteval.c.

NOTE: This is kludgy. ASTD should be corrected.

Index: contrib/dev/acpica/utilities/uteval.c
===================================================================
--- contrib/dev/acpica/utilities/uteval.c    (revision 215401)
+++ contrib/dev/acpica/utilities/uteval.c    (working copy)
@@ -148,7 +148,9 @@
     {"Windows 2006",        ACPI_OSI_WIN_VISTA},        /* Windows Vista - Added 03/2006 */
     {"Windows 2006.1",      ACPI_OSI_WINSRV_2008},      /* Windows Server 2008 - Added 09/2009 */
     {"Windows 2006 SP1",    ACPI_OSI_WIN_VISTA_SP1},    /* Windows Vista SP1 - Added 09/2009 */
+#if 0
     {"Windows 2009",        ACPI_OSI_WIN_7},            /* Windows 7 and Server 2008 R2 - Added 09/2009 */
+#endif
 
     /* Feature Group Strings */ 

I added sysctls to acpi_asus(4) driver for turning on/off the LCD backlight and touchpad  for my notebook (see the patch below). The patch was submitted as PR 152438.

Index: dev/acpi_support/acpi_asus.c
===================================================================
--- dev/acpi_support/acpi_asus.c    (revision 215401)
+++ dev/acpi_support/acpi_asus.c    (working copy)
@@ -60,6 +60,7 @@
 #define ACPI_ASUS_METHOD_CAMERA    4
 #define ACPI_ASUS_METHOD_CARDRD    5
 #define ACPI_ASUS_METHOD_WLAN    6
+#define ACPI_ASUS_METHOD_TPD    7
 
 #define _COMPONENT    ACPI_OEM
 ACPI_MODULE_NAME("ASUS")
@@ -94,6 +95,9 @@
     char    *wlan_get;
     char    *wlan_set;
 
+    char    *tpd_get;
+    char    *tpd_set;
+
     void    (*n_func)(ACPI_HANDLE, UINT32, void *);
 
     char    *lcdd;
@@ -137,6 +141,7 @@
     int            s_cam;
     int            s_crd;
     int            s_wlan;
+    int            s_tpd;
 };
 
 static void    acpi_asus_lcdd_notify(ACPI_HANDLE h, UINT32 notify,
@@ -449,12 +454,16 @@
         .name        = "EEE",
         .brn_get    = "\\_SB.ATKD.PBLG",
         .brn_set    = "\\_SB.ATKD.PBLS",
+        .lcd_get    = "\\_SB.ATKD.PBPG",
+        .lcd_set    = "\\_SB.ATKD.PBPS",
         .cam_get    = "\\_SB.ATKD.CAMG",
         .cam_set    = "\\_SB.ATKD.CAMS",
         .crd_set    = "\\_SB.ATKD.CRDS",
         .crd_get    = "\\_SB.ATKD.CRDG",
         .wlan_get    = "\\_SB.ATKD.WLDG",
         .wlan_set    = "\\_SB.ATKD.WLDS",
+        .tpd_get    = "\\_SB.ATKD.TPDG",
+        .tpd_set    = "\\_SB.ATKD.TPDS",
         .n_func        = acpi_asus_eeepc_notify
     },
 
@@ -503,6 +512,12 @@
         .description    = "wireless lan state",
         .flags        = CTLTYPE_INT | CTLFLAG_RW
     },
+    {
+        .name        = "touchpad",
+        .method        = ACPI_ASUS_METHOD_TPD,
+        .description    = "touchpad state",
+        .flags        = CTLTYPE_INT | CTLFLAG_RW
+    },
 
     { .name = NULL }
 };
@@ -994,6 +1009,9 @@
     case ACPI_ASUS_METHOD_WLAN:
         val = sc->s_wlan;
         break;
+    case ACPI_ASUS_METHOD_TPD:
+        val = sc->s_tpd;
+        break;
     }
 
     return (val);
@@ -1050,8 +1068,11 @@
         if (arg < 0 || arg > 1)
             return (EINVAL);
 
-        if (strncmp(sc->model->name, "L3H", 3) != 0)
+        if (strncmp(sc->model->name, "EEE", 3) == 0)
             status = AcpiEvaluateObject(sc->handle,
+                sc->model->lcd_set, &acpiargs, NULL);
+        else if (strncmp(sc->model->name, "L3H", 3) != 0)
+            status = AcpiEvaluateObject(sc->handle,
                 sc->model->lcd_set, NULL, NULL);
         else
             status = acpi_SetInteger(sc->handle,
@@ -1091,6 +1112,16 @@
         if (ACPI_SUCCESS(status))
             sc->s_wlan = arg;
         break;
+    case ACPI_ASUS_METHOD_TPD:
+        if (arg < 0 || arg > 1)
+            return (EINVAL);
+
+        status = AcpiEvaluateObject(sc->handle,
+            sc->model->tpd_set, &acpiargs, NULL);
+
+        if (ACPI_SUCCESS(status))
+            sc->s_tpd = arg;
+        break;
     }
 
     return (0);
@@ -1209,6 +1240,14 @@
                 return (TRUE);
         }
         return (FALSE);
+    case ACPI_ASUS_METHOD_TPD:
+        if (sc->model->tpd_get) {
+            status = acpi_GetInteger(sc->handle,
+                sc->model->tpd_get, &sc->s_tpd);
+            if (ACPI_SUCCESS(status))
+                return (TRUE);
+        }
+        return (FALSE);
     }
     return (FALSE);
 }

dmesg

Here is dmesg from FreeBSD 8.1-RELEASE running on my notebook:

Copyright (c) 1992-2010 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
    The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 8.1-RELEASE #12: Wed Nov 17 00:30:44 JST 2010
    y7goto@cobalt2.my.domain:/usr/home/y7goto/GENERIC i386
Timecounter "i8254" frequency 1193182 Hz quality 0
CPU: Intel(R) Atom(TM) CPU N455   @ 1.66GHz (1666.49-MHz 686-class CPU)
  Origin = "GenuineIntel"  Id = 0x106ca  Family = 6  Model = 1c  Stepping = 10
  Features=0xbfe9fbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE>
  Features2=0x40e39d<SSE3,DTES64,MON,DS_CPL,EST,TM2,SSSE3,CX16,xTPR,PDCM,MOVBE>
  AMD Features=0x20100000<NX,LM>
  AMD Features2=0x1<LAHF>
  TSC: P-state invariant
real memory  = 1073741824 (1024 MB)
avail memory = 1018191872 (971 MB)
ACPI APIC Table: <A_M_I_ OEMAPIC >
FreeBSD/SMP: Multiprocessor System Detected: 1 CPUs
FreeBSD/SMP: 0 package(s) x 1 core(s) x 2 HTT threads
 cpu0 (BSP): APIC ID:  0
  cpu (AP/HT): APIC ID:  1 (disabled)
WARNING: Non-uniform processors.
WARNING: Using suboptimal topology.
ioapic0: Changing APIC ID to 2
ioapic0 <Version 2.0> irqs 0-23 on motherboard
kbd1 at kbdmux0
acpi0: <_ASUS_ Notebook> on motherboard
acpi0: [ITHREAD]
acpi_ec0: <Embedded Controller: GPE 0x1c, ECDT> port 0x62,0x66 on acpi0
acpi0: Power Button (fixed)
acpi0: reservation of ffb00000, 100000 (3) failed
acpi0: reservation of fff00000, 100000 (3) failed
acpi0: reservation of fee00000, 1000 (3) failed
acpi0: reservation of 0, a0000 (3) failed
acpi0: reservation of 100000, 3f600000 (3) failed
Timecounter "ACPI-safe" frequency 3579545 Hz quality 850
acpi_timer0: <24-bit timer at 3.579545MHz> port 0x808-0x80b on acpi0
cpu0: <ACPI CPU> on acpi0
acpi_hpet0: <High Precision Event Timer> iomem 0xfed00000-0xfed003ff on acpi0
Timecounter "HPET" frequency 14318180 Hz quality 900
pcib0: <ACPI Host-PCI bridge> port 0xcf8-0xcff on acpi0
pci0: <ACPI PCI bus> on pcib0
vgapci0: <VGA-compatible display> port 0xdc00-0xdc07 mem 0xf7e00000-0xf7e7ffff,0xd0000000-0xdfffffff,0xf7d00000-0xf7dfffff irq 16 at device 2.0 on pci0
agp0: <Intel Pineview (M) SVGA controller> on vgapci0
agp0: detected 8188k stolen memory
agp0: aperture size is 256M
vgapci1: <VGA-compatible display> mem 0xf7e80000-0xf7efffff at device 2.1 on pci0
hdac0: <Intel 82801G High Definition Audio Controller> mem 0xf7cf8000-0xf7cfbfff irq 22 at device 27.0 on pci0
hdac0: HDA Driver Revision: 20100226_0142
hdac0: [ITHREAD]
pcib1: <ACPI PCI-PCI bridge> irq 16 at device 28.0 on pci0
pci4: <ACPI PCI bus> on pcib1
pcib2: <ACPI PCI-PCI bridge> irq 17 at device 28.1 on pci0
pci2: <ACPI PCI bus> on pcib2
pci2: <network> at device 0.0 (no driver attached)
pcib3: <ACPI PCI-PCI bridge> irq 19 at device 28.3 on pci0
pci1: <ACPI PCI bus> on pcib3
alc0: <Atheros AR8132 PCIe Fast Ethernet> port 0xec00-0xec7f mem 0xf7fc0000-0xf7ffffff irq 19 at device 0.0 on pci1
alc0: 15872 Tx FIFO, 15360 Rx FIFO
alc0: Using 1 MSI message(s).
miibus0: <MII bus> on alc0
atphy0: <Atheros F1 10/100/1000 PHY> PHY 0 on miibus0
atphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
alc0: Ethernet address: 20:cf:30:1e:87:b8
alc0: [FILTER]
uhci0: <Intel 82801G (ICH7) USB controller USB-A> port 0xd400-0xd41f irq 23 at device 29.0 on pci0
uhci0: [ITHREAD]
uhci0: LegSup = 0x2f00
usbus0: <Intel 82801G (ICH7) USB controller USB-A> on uhci0
uhci1: <Intel 82801G (ICH7) USB controller USB-B> port 0xd480-0xd49f irq 19 at device 29.1 on pci0
uhci1: [ITHREAD]
uhci1: LegSup = 0x2f00
usbus1: <Intel 82801G (ICH7) USB controller USB-B> on uhci1
uhci2: <Intel 82801G (ICH7) USB controller USB-C> port 0xd800-0xd81f irq 18 at device 29.2 on pci0
uhci2: [ITHREAD]
uhci2: LegSup = 0x2f00
usbus2: <Intel 82801G (ICH7) USB controller USB-C> on uhci2
uhci3: <Intel 82801G (ICH7) USB controller USB-D> port 0xd880-0xd89f irq 16 at device 29.3 on pci0
uhci3: [ITHREAD]
uhci3: LegSup = 0x2f00
usbus3: <Intel 82801G (ICH7) USB controller USB-D> on uhci3
ehci0: <Intel 82801GB/R (ICH7) USB 2.0 controller> mem 0xf7cf7c00-0xf7cf7fff irq 23 at device 29.7 on pci0
ehci0: [ITHREAD]
usbus4: EHCI version 1.0
usbus4: <Intel 82801GB/R (ICH7) USB 2.0 controller> on ehci0
pcib4: <ACPI PCI-PCI bridge> at device 30.0 on pci0
pci5: <ACPI PCI bus> on pcib4
isab0: <PCI-ISA bridge> at device 31.0 on pci0
isa0: <ISA bus> on isab0
atapci0: <Intel ICH7 SATA300 controller> port 0xd080-0xd087,0xd000-0xd003,0xcc00-0xcc07,0xc880-0xc883,0xc800-0xc81f mem 0xf7cf7800-0xf7cf7bff irq 21 at device 31.2 on pci0
atapci0: [ITHREAD]
atapci0: AHCI called from vendor specific driver
atapci0: AHCI v1.10 controller with 4 3Gbps ports, PM not supported
ata2: <ATA channel 0> on atapci0
ata2: [ITHREAD]
acpi_asus0: <ASUS EeePC> on acpi0
acpi_lid0: <Control Method Lid Switch> on acpi0
acpi_button0: <Sleep Button> on acpi0
acpi_button1: <Power Button> on acpi0
acpi_tz0: <Thermal Zone> on acpi0
battery0: <ACPI Control Method Battery> on acpi0
acpi_acad0: <AC Adapter> on acpi0
atrtc0: <AT realtime clock> port 0x70-0x71 irq 8 on acpi0
atkbdc0: <Keyboard controller (i8042)> port 0x60,0x64 irq 1 on acpi0
atkbd0: <AT Keyboard> irq 1 on atkbdc0
kbd0 at atkbd0
atkbd0: [GIANT-LOCKED]
atkbd0: [ITHREAD]
psm0: <PS/2 Mouse> irq 12 on atkbdc0
psm0: [GIANT-LOCKED]
psm0: [ITHREAD]
psm0: model IntelliMouse, device ID 3
pmtimer0 on isa0
sc0: <System console> at flags 0x100 on isa0
sc0: VGA <16 virtual consoles, flags=0x300>
vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0
ata0 at port 0x1f0-0x1f7,0x3f6 irq 14 on isa0
ata0: [ITHREAD]
ata1 at port 0x170-0x177,0x376 irq 15 on isa0
ata1: [ITHREAD]
ppc0: parallel port not found.
est0: <Enhanced SpeedStep Frequency Control> on cpu0
p4tcc0: <CPU Frequency Thermal Control> on cpu0
Timecounter "TSC" frequency 1666493030 Hz quality 800
Timecounters tick every 10.000 msec
usbus0: 12Mbps Full Speed USB v1.0
usbus1: 12Mbps Full Speed USB v1.0
usbus2: 12Mbps Full Speed USB v1.0
usbus3: 12Mbps Full Speed USB v1.0
usbus4: 480Mbps High Speed USB v2.0
battery0: battery initialization start
ad4: 152627MB <Seagate ST9160314AS 0002SDM1> at ata2-master UDMA100 SATA 3Gb/s
acpi_acad0: acline initialization start
acpi_acad0: On Line
acpi_acad0: acline initialization done, tried 1 times
ugen0.1: <Intel> at usbus0
uhub0: <Intel UHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus0
ugen1.1: <Intel> at usbus1
uhub1: <Intel UHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus1
ugen2.1: <Intel> at usbus2
uhub2: <Intel UHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus2
ugen3.1: <Intel> at usbus3
uhub3: <Intel UHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus3
ugen4.1: <Intel> at usbus4
uhub4: <Intel EHCI root HUB, class 9/0, rev 2.00/1.00, addr 1> on usbus4
battery0: battery initialization done, tried 1 times
hdac0: HDA Codec #0: Realtek ALC269
pcm0: <HDA Realtek ALC269 PCM #0 Analog> at cad 0 nid 1 on hdac0
pcm1: <HDA Realtek ALC269 PCM #1 Analog> at cad 0 nid 1 on hdac0
uhub0: 2 ports with 2 removable, self powered
uhub1: 2 ports with 2 removable, self powered
uhub2: 2 ports with 2 removable, self powered
uhub3: 2 ports with 2 removable, self powered
Root mount waiting for: usbus4
Root mount waiting for: usbus4
Root mount waiting for: usbus4
Root mount waiting for: usbus4
uhub4: 8 ports with 8 removable, self powered
Root mount waiting for: usbus4
Root mount waiting for: usbus4
ugen4.2: <Azurewave> at usbus4
Trying to mount root from ufs:/dev/ad4s1a
alc0: link state changed to UP
drm0: <Intel Pineview (M)> on vgapci0
info: [drm] MSI enabled 1 message(s)
vgapci0: child drm0 requested pci_enable_busmaster
info: [drm] AGP at 0xd0000000 256MB
info: [drm] Initialized i915 1.6.0 20080730