1/******************************************************************************
2 *
3 * Name: acwin.h - OS specific defines, etc.
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2011, Intel Corp.
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 *    notice, this list of conditions, and the following disclaimer,
16 *    without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 *    substantially similar to the "NO WARRANTY" disclaimer below
19 *    ("Disclaimer") and any redistribution must be conditioned upon
20 *    including a substantially similar Disclaimer requirement for further
21 *    binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 *    of any contributors may be used to endorse or promote products derived
24 *    from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef __ACWIN_H__
45#define __ACWIN_H__
46
47/*! [Begin] no source code translation (Keep the include) */
48
49/* Windows uses VC */
50#ifdef _MSC_VER
51#include "acmsvc.h"
52#endif
53/*! [End] no source code translation !*/
54
55#define ACPI_MACHINE_WIDTH      32
56
57#define ACPI_USE_STANDARD_HEADERS
58
59#ifdef ACPI_DEFINE_ALTERNATE_TYPES
60/*
61 * Types used only in (Linux) translated source, defined here to enable
62 * cross-platform compilation (i.e., generate the Linux code on Windows,
63 * for test purposes only)
64 */
65typedef int                             s32;
66typedef unsigned char                   u8;
67typedef unsigned short                  u16;
68typedef unsigned int                    u32;
69typedef COMPILER_DEPENDENT_UINT64       u64;
70#endif
71
72
73/*
74 * Handle platform- and compiler-specific assembly language differences.
75 *
76 * Notes:
77 * 1) Interrupt 3 is used to break into a debugger
78 * 2) Interrupts are turned off during ACPI register setup
79 */
80
81/*! [Begin] no source code translation  */
82
83#ifdef ACPI_APPLICATION
84#define ACPI_FLUSH_CPU_CACHE()
85#else
86#define ACPI_FLUSH_CPU_CACHE()  __asm {WBINVD}
87#endif
88
89#ifdef _DEBUG
90#define ACPI_SIMPLE_RETURN_MACROS
91#endif
92
93/*! [End] no source code translation !*/
94
95/*
96 * Global Lock acquire/release code
97 *
98 * Note: Handles case where the FACS pointer is null
99 */
100#define ACPI_ACQUIRE_GLOBAL_LOCK(FacsPtr, Acq)  __asm \
101{                                                   \
102        __asm mov           eax, 0xFF               \
103        __asm mov           ecx, FacsPtr            \
104        __asm or            ecx, ecx                \
105        __asm jz            exit_acq                \
106        __asm lea           ecx, [ecx].GlobalLock   \
107                                                    \
108        __asm acq10:                                \
109        __asm mov           eax, [ecx]              \
110        __asm mov           edx, eax                \
111        __asm and           edx, 0xFFFFFFFE         \
112        __asm bts           edx, 1                  \
113        __asm adc           edx, 0                  \
114        __asm lock cmpxchg  dword ptr [ecx], edx    \
115        __asm jnz           acq10                   \
116                                                    \
117        __asm cmp           dl, 3                   \
118        __asm sbb           eax, eax                \
119                                                    \
120        __asm exit_acq:                             \
121        __asm mov           Acq, al                 \
122}
123
124#define ACPI_RELEASE_GLOBAL_LOCK(FacsPtr, Pnd) __asm \
125{                                                   \
126        __asm xor           eax, eax                \
127        __asm mov           ecx, FacsPtr            \
128        __asm or            ecx, ecx                \
129        __asm jz            exit_rel                \
130        __asm lea           ecx, [ecx].GlobalLock   \
131                                                    \
132        __asm Rel10:                                \
133        __asm mov           eax, [ecx]              \
134        __asm mov           edx, eax                \
135        __asm and           edx, 0xFFFFFFFC         \
136        __asm lock cmpxchg  dword ptr [ecx], edx    \
137        __asm jnz           Rel10                   \
138                                                    \
139        __asm cmp           dl, 3                   \
140        __asm and           eax, 1                  \
141                                                    \
142        __asm exit_rel:                             \
143        __asm mov           Pnd, al                 \
144}
145
146#endif /* __ACWIN_H__ */
147