• Lv Zheng's avatar
    ACPICA: Debugger: Convert some mechanisms to OSPM specific · f8d31489
    Lv Zheng authored
    The following mechanisms are OSPM specific:
    1. Redirect output destination to console: no file redirection will be
       needed by an in-kernel debugger, there is even no file can be accessed
       when the debugger is running in the kernel mode.
    2. Output command prompts: programs other than acpiexec can have different
       prompt characters and the prompt characters may be implemented as a
       special character sequence to form a char device IO protocol.
    3. Command ready/complete handshake: OSPM debugger may wait more conditions
       to implement OSPM specific semantics (for example, FIFO full/empty
       conditions for O_NONBLOCK or IO open/close conditions).
    Leaving such OSPM specific stuffs in the ACPICA debugger core blocks
    Linux debugger IO driver implementation.
    
    Several new OSL APIs are provided by this patch:
    1. acpi_os_initialize_command_signals: initialize command handshake mechanism
       or any other OSPM specific stuffs.
    2. acpi_os_terminate_command_signals: reversal of
       acpi_os_initialize_command_signals.
    3. acpi_os_wait_command_ready: putting debugger task into wait state when a
       command is not ready. OSPMs can terminate command loop by returning
       AE_CTRL_TERMINATE from this API. Normally, wait_event() or
       wait_for_multiple_object() may be used to implement this API.
    4. acpi_os_notify_command_complete: putting user task into running state when a
       command has been completed. OSPMs can terminate command loop by
       returning AE_CTRL_TERMINATE from this API. Normally, wake_up() or
       set_event() may be used to implement this API.
    This patch also converts current command signaling implementation into a
    generic debugger layer (osgendbg.c) to be used by the existing OSPMs or
    acpiexec, in return, Linux can have chance to implement its own command
    handshake mechanism. This patch also implements acpiexec batch mode in a
    multi-threading mode comaptible style as a demo (this can be confirmed by
    configuring acpiexec into DEBUGGER_MULTI_THREADED mode where the batch mode
    is still working). Lv Zheng.
    
    Note that the OSPM specific command handshake mechanism is required by
    Linux kernel because:
    1. Linux kernel trends to use wait queue to synchronize two threads, using
       mutexes to achieve that will cause false "dead lock" warnings.
    2. The command handshake mechanism implemented by ACPICA is implemented in
       this way because of a design issue in debugger IO streaming. Debugger IO
       outputs are simply cached using a giant buffer, this should be tuned by
       Linux in the future.
    Signed-off-by: default avatarLv Zheng <lv.zheng@intel.com>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    f8d31489
acpiosxf.h 13 KB