aboutsummaryrefslogtreecommitdiff
path: root/en_US.ISO8859-1/htdocs/projects/acpi/index.sgml
blob: ff65002c3e104773269653d16b6ecfb53b712bfa (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
<!DOCTYPE HTML PUBLIC "-//FreeBSD//DTD HTML 4.01 Transitional-Based Extension//EN" [
<!ENTITY base CDATA "../..">
<!ENTITY date "$FreeBSD: www/en/projects/acpi/index.sgml,v 1.12 2006/08/05 16:31:34 joel Exp $">
<!ENTITY title "FreeBSD ACPI project">
<!ENTITY email 'marks'>
<!ENTITY acpi-mail 'freebsd-acpi@FreeBSD.org'>
<!ENTITY % navinclude.developers "INCLUDE">

<!-- Status levels -->
<!ENTITY status.na "<font color=green>N/A</font>">
<!ENTITY status.done "<font color=green>Done</font>">
<!ENTITY status.wip "<font color=blue>In progress</font>">
<!ENTITY status.untested "<font color=orange>Needs testing</font>">
<!ENTITY status.new "<font color=red>Not done</font>">
<!ENTITY status.unknown "<font color=red>Unknown</font>">

<!ENTITY % developers SYSTEM "../../developers.sgml"> %developers;

]>

<html>
  &header;

    <h2>Contents</h2>
    <ul>
      <li><a href="#description">Description</a></li>
      <li><a href="#todo-list">TODO List</a></li>
      <li><a href="#platform-status">Platform Support Status</a></li>
      <li><a href="#references">References</a></li>
    </ul>

    <a name="description"></a>
    <h2>Description</h2>

    <p>The acpi driver provides support for the Intel/Microsoft/Compaq/Toshiba
    ACPI standard. This support includes platform hardware discovery (superseding
    the PnP and PCI BIOS), as well as power management (superseding
    APM) and other features. ACPI core support is provided by the ACPI-CA
    reference implementation from Intel.</p>

    <p>Information on using and debugging ACPI can be found in the
      <a href="/doc/en_US.ISO8859-1/books/handbook/acpi-debug.html">
      handbook entry</a> and
      <a href="/cgi/man.cgi?query=acpi&amp;sektion=4&amp;format=html">man page</a>.</p>

    <p>If you are looking for the list of completed projects not located
      on this page, it can be found
      <a href="completed.html">here</a>.</p>


    <a name="todo-list"></a>
    <h2>TODO List</h2>

    <a name="high-priority"></a>
    <h3>High Priority Tasks</h3>

    <table class="tblbasic">
      <thead>
	<tr>
	  <th> Task </th>
	  <th> Responsible </th>
	  <th> Last updated </th>
	  <th> Priority </th>
	  <th> Notes </th>
	</tr>
      </thead>

      <tbody>
	<tr>
	  <td> Save/Restore PCI capabilities lists and MSI config space </td>
          <td> &a.njl; </td>
	  <td> August 3, 2006 </td>
	  <td> &status.wip; </td>
	  <td> &nbsp; </td>
        </tr>

	<tr>
	  <td> Investigate disabling the LAPIC timer when using ACPI C2-3
	    states.  Otherwise, the system hangs and no timer interrupts
	    occur while idle.</td>
	  <td> &nbsp; </td>
	  <td> August 3, 2006 </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>
      </tbody>

      <tbody>
	<tr>
	  <th scope="rowgroup" colspan="0"> <em>acpi_cpu &mdash; Finish
	    work on CPU driver</em> </th>
	</tr>

	<tr>
	  <td> _CST re-evaluation </td>
          <td> &a.njl; </td>
	  <td> December 4, 2004 </td>
	  <td> &status.new; </td>
	  <td> Needs testing/debugging </td>
	</tr>

	<tr>
	  <td> Fix shared user of a P_BLK (refcount) </td>
          <td> &a.njl; </td>
	  <td> December 4, 2004 </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> Disable acpi_cpu taking over idling if only
	    C1 available </td>
          <td> &a.njl; </td>
	  <td> December 4, 2004 </td>
	  <td> &status.new; </td>
	  <td> I still want to keep acpi_cpu in the loop on SMP systems
	    so we should leave this as-is for now. </td>
	</tr>
      </tbody>

      <tbody>
	<tr>
	  <td> eject methods &mdash;  implement eject and dynamic
	    reprobing of acpi namespace </td>
          <td> &a.njl; </td>
	  <td> December 4, 2004 </td>
	  <td> &status.untested; </td>
	  <td> &nbsp; </td>
	</tr>
      </tbody>
    </table>
    
    
    <a name="medium-priority"></a>
    <h3>Medium Priority Tasks</h3>

    <table class="tblbasic">
      <tbody>
	<tr>
	  <td> Hotkey/backlight/sound generic driver -- Add a driver
	    that generalizes the various device-specific ways of
	    adjusting backlight, sound volume, hotkey support, etc.
	    It should provide generic sysctls for these and attach to
	    the hw-specific drivers (acpi_video, acpi_asus, acpi_toshiba,
	    etc.) </td>
          <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>
      </tbody>
    </table>

    <a name="low-priority"></a>
    <h3>Low Priority Tasks</h3>

    <table class="tblbasic">
      <tbody>
	<tr>
	  <td> Implement X suspend/resume notification.  Currently,
	    the X server on FreeBSD is not notified of a suspend.
	    We explicitly switch to a VTY on syscons before resume
	    to get the server to save and then restore all the registers.
	    This works for many systems but not if the display is left in
	    less initialized at resume than the VTY switch code can handle.
	    There is an interface (in the X server bsd_apm.c) for doing ioctls
	    to find out about the suspend.  First, check if this file is
	    built on FreeBSD as it appears to only be built on NetBSD.
	    Then implement the ioctls in both apm and acpi (on the apm
	    compat device).
	    <a href="http://www.root.org/~nate/freebsd/bsd_apm.diff">Here is a
	    patch</a> to help the X file compile.  For acpi, we do not want
	    a user process dying to hold up the suspend process so implement
	    the notification with a timeout.  That is, if the kernel generates
	    a APM_STANDBY_REQ notification and it doesn't receive a
	    APM_IOC_STANDBY within say 5 seconds, continue the suspend process.
	    This is needed for standby when X is not running, for instance, or
	    when an emergency suspend is generated by a battery going
	    critical.</td>
          <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> Examine the two video resume hacks (int 0x10, lcall 0xc000).
	    Linux has begun to test calling the "lcall" VESA reset after
	    PCI devices (including the video card) have been fully resumed,
	    including power state set to PS0. This works for many Radeon
	    cards but fails for others.  We could implement this in vm86
	    calls from a proper video driver resume method.  Investigate
	    integrate the techniques used by the <a
	    href="http://www.freebsd.org/cgi/url.cgi?ports/sysutils/radeontool/pkg-descr">Radeontool
	    port</a> in video resume.</td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> ACPI-CA should really enable GPEs before calling \_WAK.
	    Currently it does the opposite.  This does not match the ACPI
	    spec where \_WAK should be called after the system is up
	    and running (\_BFS is what should be called as soon as
	    possible after waking.) </td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> Potential ASL bug: We may need to work around some systems
	    having the S3 object listed under the LPC bus device (PNP0A03)
	    instead of root (\).  This is ACPI-CA's responsibility. </td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> For systems that fail to power off, try using the suspend code
	    (acpi_SetSleepState) instead. </td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> See if we can enable EC access early even if an ECDT is not
	    present. The _INI method for some ECs accesses the EC region
	    even though _REG has not been called since the region is not
	    initialized yet. It is likely that Windows hard-codes the EC
	    resources and enables the region before initializing the device
	    even though this is not allowed by the spec. </td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> Implement reset register functionality for rebooting systems
	    that lack a keyboard controller (see ACPI v2 FADT->ResetRegister). </td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> Be sure not to try to disable ACPI on systems that do not have
	    SMI_CMD or ACPI_ENABLE/DISABLE values in the FADT.  The ia64 machines
	    specify ACPI-only (no legacy mode) so they have 0 for these
	    values and we should not enable/disable ACPI on them.  Doing so
	    gives a "failed to switch modes" warning but no real problems, 
	    apparently. </td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> Check our implementation of AcpiOsDerivePciId().
	    It is probably not quite right.  Compare against Linux. </td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> Run instructions on cpu0 for suspend/resume.  We currently do
	    this for shutdown in kern_shutdown.c:boot().  This will also be
	    required for SMP cpufreq drivers that set the frequency via a
	    CPU-specific MSR. </td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> Traverse local reference (scope) types in namespace when probing
	    devices. </td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> Implement support for _PRS/_SRS and dependent functions.
	    This will allow serial port configuration to occur. </td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> Add EC burst mode -- Code was written before to add burst mode to
	    the EC.  Unfortunately, it had to be disabled since it did not
	    appear to work on all systems.  Perhaps on some systems
	    do not function correctly without burst mode, so it will be added
	    back with some logic to fallback if it fails. </td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> Intel firmware seems to describe the PCI root bridge where
	    chipset configuration space lives with _STA==0x8.  The spec
	    says this means "functional, but not present".  The current
	    code ignores things that are "not present"
	    (<a href="https://sourceforge.net/mailarchive/message.php?msg_id=6923358">
	    msg</a>).  It is suggested that this should be handled by not
	    attaching a driver to the device (i.e. bridge) but probe its children.
	    Present on Big Sur and Bull systems. </td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td>Re-work device wake setup to not be recursive.
	    The acpi_wake_sysctl_walk() syscall has to call itself to
	    handle child devices on other busses (PCI).  This should
	    probably be changed to be a DEVMETHOD. </td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> device_power -- Add a "power" argument to devctl(8)
	    that allows a device to be set into various low power or
	    off states. </td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> device_eject -- Add a devctl(8) program that has an
	    "eject" argument.  Allow users to eject various object
	    names ("/dev/cdrom", "/mnt/flashdrive", "wi0", "pci0:2:0").
	    Call the appropriate _EJD and _EJx methods if appropriate.</td>
	  <td> &a.imp;, &a.jhb;, and &a.takawata; </td>
	  <td> &nbsp; </td>
	  <td> &status.wip; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> suspend to disk -- Implement a suspend/resume from disk
	    mechanism.  Possibly use the dump functions to dump pages to
	    disk, then use ACPI to put the system in S4 or power-off.
	    Resume would require changes to the loader to load the memory
	    image directly and then begin executing again. </td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> HP/Toshiba Satellite driver -- Enabling the extra
	    one-touch/multimedia keys, console blanking, battery and
	    temperature reporting, etc.  Get an idea of what is needed from
	    the <a href="http://sourceforge.net/projects/omke/">Linux OMKE project
	    </a>. </td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> ASL capture bootable CD-R -- Build a set of scripts to
	    generate a bootable CD-R.  It should have a GENERIC kernel
	    and acpidump/iasl as well as all support libraries.  Replace
	    init with a script such that booting the CD generates an
	    acpidump -t -d &gt; machine.asl and dmesg &gt; machine.dmesg in
	    an MFS partition.  Then burn this info to a second track on the
	    CD-R.  This will make an easy way to take a batch of CDRWs to
	    the local computer store, place them in the CDRW drive, boot
	    FreeBSD and get the ASL. </td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> ASL Explorer -- Graphical utility for examining the output
	    of acpidump(8).  Contact &a.njl; for info about the design if you
	    are interested in implementing this. </td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> Document acpi kernel interfaces -- Document the interfaces
	    for drivers found in acpivar.h. </td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> KTR support for ACPI debug messages -- Use the KTR logging
	    facility instead of printf for ACPI debugging messages.  This
	    would allow more verbose messages and fast dumping. </td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> Add support for the real-time clock (RTC) to use to wake
	    or power-on systems at a certain time of day. </td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> Quiesce USB when no device is attached (see Linux UHCI) --
	    this would help such systems use C3 more, saving power with
	    USB loaded.  While at it, fix uhci suspend/resume. </td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

      </tbody>
    </table>

    <a name="references"></a>
    <h2>References</h2>

    <ul>
      <li><a href="http://acpi.info/spec.htm">Advanced
      Configuration and Power Interface Specification</a></li>
    </ul>

  &footer;
  </body>
</html>