ec.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:5k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  *
  3.  * Module Name: ec.h
  4.  *   $Revision: 19 $
  5.  *
  6.  *****************************************************************************/
  7. /*
  8.  *  Copyright (C) 2000, 2001 Andrew Grover
  9.  *
  10.  *  This program is free software; you can redistribute it and/or modify
  11.  *  it under the terms of the GNU General Public License as published by
  12.  *  the Free Software Foundation; either version 2 of the License, or
  13.  *  (at your option) any later version.
  14.  *
  15.  *  This program is distributed in the hope that it will be useful,
  16.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18.  *  GNU General Public License for more details.
  19.  *
  20.  *  You should have received a copy of the GNU General Public License
  21.  *  along with this program; if not, write to the Free Software
  22.  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  23.  */
  24. #ifndef __EC_H__
  25. #define __EC_H__
  26. #include <linux/spinlock.h>
  27. #include <asm/semaphore.h>
  28. #include <actypes.h>
  29. #include <acexcep.h>
  30. #include <bm.h>
  31. /*****************************************************************************
  32.  *                            Types & Other Defines
  33.  *****************************************************************************/
  34. #define EC_DEFAULT_TIMEOUT 1000 /* 1 second */
  35. #define EC_GPE_UNKNOWN 0xFFFFFFFF
  36. #define EC_PORT_UNKNOWN 0x00000000
  37. #define EC_BURST_ENABLE_ACKNOWLEDGE 0x90
  38. /*
  39.  * Commands:
  40.  * ---------
  41.  */
  42. typedef u8 EC_COMMAND;
  43. #define EC_COMMAND_UNKNOWN ((EC_COMMAND) 0x00)
  44. #define EC_COMMAND_READ ((EC_COMMAND) 0x80)
  45. #define EC_COMMAND_WRITE ((EC_COMMAND) 0x81)
  46. #define EC_COMMAND_QUERY ((EC_COMMAND) 0x84)
  47. /*
  48.  * EC_STATUS:
  49.  * ----------
  50.  * The encoding of the EC status register is illustrated below.
  51.  * Note that a set bit (1) indicates the property is TRUE
  52.  * (e.g. if bit 0 is set then the output buffer is full).
  53.  * +-+-+-+-+-+-+-+-+
  54.  * |7|6|5|4|3|2|1|0|
  55.  * +-+-+-+-+-+-+-+-+
  56.  *  | | | | | | | |
  57.  *  | | | | | | | +- Output Buffer Full (OBF)?
  58.  *  | | | | | | +--- Input Buffer Full (IBF)?
  59.  *  | | | | | +----- <reserved>
  60.  *  | | | | +------- data Register is command Byte?
  61.  *  | | | +--------- Burst Mode Enabled?
  62.  *  | | +----------- SCI event?
  63.  *  | +------------- SMI event?
  64.  *  +--------------- <Reserved>
  65.  *
  66.  */
  67. typedef u32 EC_STATUS;
  68. #define EC_FLAG_OUTPUT_BUFFER ((EC_STATUS) 0x01)
  69. #define EC_FLAG_INPUT_BUFFER ((EC_STATUS) 0x02)
  70. #define EC_FLAG_BURST_MODE ((EC_STATUS) 0x10)
  71. #define EC_FLAG_SCI ((EC_STATUS) 0x20)
  72. /*
  73.  * EC_EVENT:
  74.  * ---------
  75.  */
  76. typedef u32 EC_EVENT;
  77. #define EC_EVENT_UNKNOWN ((EC_EVENT) 0x00)
  78. #define EC_EVENT_NONE ((EC_EVENT) 0x00)
  79. #define EC_EVENT_OUTPUT_BUFFER_FULL ((EC_EVENT) 0x01)
  80. #define EC_EVENT_INPUT_BUFFER_EMPTY ((EC_EVENT) 0x02)
  81. #define EC_EVENT_SCI ((EC_EVENT) 0x03)
  82. /*
  83.  * Hardware IDs:
  84.  * -------------
  85.  */
  86. #define EC_HID_EC "PNP0C09"
  87. /*
  88.  * EC_REQUEST:
  89.  * -----------
  90.  */
  91. typedef struct
  92. {
  93. EC_COMMAND              command;
  94. u8                      address;
  95. u8                      data;
  96. } EC_REQUEST;
  97. /*
  98.  * Device Context:
  99.  * ---------------
  100.  */
  101. typedef struct
  102. {
  103. BM_HANDLE               device_handle;
  104. acpi_handle             acpi_handle;
  105. u32                     gpe_bit;
  106. u32 status_port;
  107. u32 command_port;
  108. u32 data_port;
  109. u32 use_global_lock;
  110. u8                      query_data;
  111. acpi_handle             mutex;
  112. } EC_CONTEXT;
  113. /*****************************************************************************
  114.  *                             Function Prototypes
  115.  *****************************************************************************/
  116. /* ec.c */
  117. acpi_status
  118. ec_initialize(void);
  119. acpi_status
  120. ec_terminate(void);
  121. acpi_status
  122. ec_notify (
  123. u32                     notify_type,
  124. u32                     device,
  125. void                    **context);
  126. acpi_status
  127. ec_request(
  128. BM_REQUEST              *request_info,
  129. void                    *context);
  130. /* ectransx.c */
  131. acpi_status
  132. ec_transaction (
  133. EC_CONTEXT              *ec,
  134. EC_REQUEST              *ec_request);
  135. acpi_status
  136. ec_io_read (
  137. EC_CONTEXT              *ec,
  138. u32          io_port,
  139. u8                      *data,
  140. EC_EVENT                wait_event);
  141. acpi_status
  142. ec_io_write (
  143. EC_CONTEXT              *ec,
  144. u32          io_port,
  145. u8                      data,
  146. EC_EVENT                wait_event);
  147. /* ecgpe.c */
  148. acpi_status
  149. ec_install_gpe_handler (
  150. EC_CONTEXT              *ec);
  151. acpi_status
  152. ec_remove_gpe_handler (
  153. EC_CONTEXT              *ec);
  154. /* ecspace.c */
  155. acpi_status
  156. ec_install_space_handler (
  157. EC_CONTEXT              *ec);
  158. acpi_status
  159. ec_remove_space_handler (
  160. EC_CONTEXT              *ec);
  161. #endif  /* __EC_H__ */