17c478bd9Sstevel@tonic-gate /****************************************************************************** 27c478bd9Sstevel@tonic-gate * 37c478bd9Sstevel@tonic-gate * Name: acmsvc.h - VC specific defines, etc. 47c478bd9Sstevel@tonic-gate * 57c478bd9Sstevel@tonic-gate *****************************************************************************/ 67c478bd9Sstevel@tonic-gate 726f3cdf0SGordon Ross /* 8*7b1019a6SJerry Jelinek * Copyright (C) 2000 - 2016, Intel Corp. 97c478bd9Sstevel@tonic-gate * All rights reserved. 107c478bd9Sstevel@tonic-gate * 1126f3cdf0SGordon Ross * Redistribution and use in source and binary forms, with or without 1226f3cdf0SGordon Ross * modification, are permitted provided that the following conditions 1326f3cdf0SGordon Ross * are met: 1426f3cdf0SGordon Ross * 1. Redistributions of source code must retain the above copyright 1526f3cdf0SGordon Ross * notice, this list of conditions, and the following disclaimer, 1626f3cdf0SGordon Ross * without modification. 1726f3cdf0SGordon Ross * 2. Redistributions in binary form must reproduce at minimum a disclaimer 1826f3cdf0SGordon Ross * substantially similar to the "NO WARRANTY" disclaimer below 1926f3cdf0SGordon Ross * ("Disclaimer") and any redistribution must be conditioned upon 2026f3cdf0SGordon Ross * including a substantially similar Disclaimer requirement for further 2126f3cdf0SGordon Ross * binary redistribution. 2226f3cdf0SGordon Ross * 3. Neither the names of the above-listed copyright holders nor the names 2326f3cdf0SGordon Ross * of any contributors may be used to endorse or promote products derived 2426f3cdf0SGordon Ross * from this software without specific prior written permission. 2526f3cdf0SGordon Ross * 2626f3cdf0SGordon Ross * Alternatively, this software may be distributed under the terms of the 2726f3cdf0SGordon Ross * GNU General Public License ("GPL") version 2 as published by the Free 2826f3cdf0SGordon Ross * Software Foundation. 2926f3cdf0SGordon Ross * 3026f3cdf0SGordon Ross * NO WARRANTY 3126f3cdf0SGordon Ross * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 3226f3cdf0SGordon Ross * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 3326f3cdf0SGordon Ross * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 3426f3cdf0SGordon Ross * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 3526f3cdf0SGordon Ross * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 3626f3cdf0SGordon Ross * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 3726f3cdf0SGordon Ross * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 3826f3cdf0SGordon Ross * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 3926f3cdf0SGordon Ross * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 4026f3cdf0SGordon Ross * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 4126f3cdf0SGordon Ross * POSSIBILITY OF SUCH DAMAGES. 4226f3cdf0SGordon Ross */ 437c478bd9Sstevel@tonic-gate 447c478bd9Sstevel@tonic-gate #ifndef __ACMSVC_H__ 457c478bd9Sstevel@tonic-gate #define __ACMSVC_H__ 467c478bd9Sstevel@tonic-gate 47*7b1019a6SJerry Jelinek /* Note: do not include any C library headers here */ 48*7b1019a6SJerry Jelinek 49*7b1019a6SJerry Jelinek /* 50*7b1019a6SJerry Jelinek * Note: MSVC project files should define ACPI_DEBUGGER and ACPI_DISASSEMBLER 51*7b1019a6SJerry Jelinek * as appropriate to enable editor functions like "Find all references". 52*7b1019a6SJerry Jelinek * The editor isn't smart enough to dig through the include files to find 53*7b1019a6SJerry Jelinek * out if these are actually defined. 54*7b1019a6SJerry Jelinek */ 55*7b1019a6SJerry Jelinek 56*7b1019a6SJerry Jelinek /* 57*7b1019a6SJerry Jelinek * Map low I/O functions for MS. This allows us to disable MS language 58*7b1019a6SJerry Jelinek * extensions for maximum portability. 59*7b1019a6SJerry Jelinek */ 60*7b1019a6SJerry Jelinek #define open _open 61*7b1019a6SJerry Jelinek #define read _read 62*7b1019a6SJerry Jelinek #define write _write 63*7b1019a6SJerry Jelinek #define close _close 64*7b1019a6SJerry Jelinek #define stat _stat 65*7b1019a6SJerry Jelinek #define fstat _fstat 66*7b1019a6SJerry Jelinek #define mkdir _mkdir 67*7b1019a6SJerry Jelinek #define O_RDONLY _O_RDONLY 68*7b1019a6SJerry Jelinek #define O_BINARY _O_BINARY 69*7b1019a6SJerry Jelinek #define O_CREAT _O_CREAT 70*7b1019a6SJerry Jelinek #define O_WRONLY _O_WRONLY 71*7b1019a6SJerry Jelinek #define O_TRUNC _O_TRUNC 72*7b1019a6SJerry Jelinek #define S_IREAD _S_IREAD 73*7b1019a6SJerry Jelinek #define S_IWRITE _S_IWRITE 74*7b1019a6SJerry Jelinek #define S_IFDIR _S_IFDIR 75*7b1019a6SJerry Jelinek 7626f3cdf0SGordon Ross /* Eliminate warnings for "old" (non-secure) versions of clib functions */ 7726f3cdf0SGordon Ross 7826f3cdf0SGordon Ross #ifndef _CRT_SECURE_NO_WARNINGS 7926f3cdf0SGordon Ross #define _CRT_SECURE_NO_WARNINGS 8026f3cdf0SGordon Ross #endif 8126f3cdf0SGordon Ross 8226f3cdf0SGordon Ross /* Eliminate warnings for POSIX clib function names (open, write, etc.) */ 8326f3cdf0SGordon Ross 8426f3cdf0SGordon Ross #ifndef _CRT_NONSTDC_NO_DEPRECATE 8526f3cdf0SGordon Ross #define _CRT_NONSTDC_NO_DEPRECATE 8626f3cdf0SGordon Ross #endif 8726f3cdf0SGordon Ross 8826f3cdf0SGordon Ross #define COMPILER_DEPENDENT_INT64 __int64 8926f3cdf0SGordon Ross #define COMPILER_DEPENDENT_UINT64 unsigned __int64 9026f3cdf0SGordon Ross #define ACPI_INLINE __inline 917c478bd9Sstevel@tonic-gate 927c478bd9Sstevel@tonic-gate /* 937c478bd9Sstevel@tonic-gate * Calling conventions: 947c478bd9Sstevel@tonic-gate * 957c478bd9Sstevel@tonic-gate * ACPI_SYSTEM_XFACE - Interfaces to host OS (handlers, threads) 967c478bd9Sstevel@tonic-gate * ACPI_EXTERNAL_XFACE - External ACPI interfaces 977c478bd9Sstevel@tonic-gate * ACPI_INTERNAL_XFACE - Internal ACPI interfaces 987c478bd9Sstevel@tonic-gate * ACPI_INTERNAL_VAR_XFACE - Internal variable-parameter list interfaces 997c478bd9Sstevel@tonic-gate */ 1007c478bd9Sstevel@tonic-gate #define ACPI_SYSTEM_XFACE __cdecl 1017c478bd9Sstevel@tonic-gate #define ACPI_EXTERNAL_XFACE 1027c478bd9Sstevel@tonic-gate #define ACPI_INTERNAL_XFACE 1037c478bd9Sstevel@tonic-gate #define ACPI_INTERNAL_VAR_XFACE __cdecl 1047c478bd9Sstevel@tonic-gate 1057c478bd9Sstevel@tonic-gate #ifndef _LINT 1067c478bd9Sstevel@tonic-gate /* 1077c478bd9Sstevel@tonic-gate * Math helper functions 1087c478bd9Sstevel@tonic-gate */ 1097c478bd9Sstevel@tonic-gate #define ACPI_DIV_64_BY_32(n_hi, n_lo, d32, q32, r32) \ 1107c478bd9Sstevel@tonic-gate { \ 1117c478bd9Sstevel@tonic-gate __asm mov edx, n_hi \ 1127c478bd9Sstevel@tonic-gate __asm mov eax, n_lo \ 1137c478bd9Sstevel@tonic-gate __asm div d32 \ 1147c478bd9Sstevel@tonic-gate __asm mov q32, eax \ 1157c478bd9Sstevel@tonic-gate __asm mov r32, edx \ 1167c478bd9Sstevel@tonic-gate } 1177c478bd9Sstevel@tonic-gate 1187c478bd9Sstevel@tonic-gate #define ACPI_SHIFT_RIGHT_64(n_hi, n_lo) \ 1197c478bd9Sstevel@tonic-gate { \ 1207c478bd9Sstevel@tonic-gate __asm shr n_hi, 1 \ 1217c478bd9Sstevel@tonic-gate __asm rcr n_lo, 1 \ 1227c478bd9Sstevel@tonic-gate } 1237c478bd9Sstevel@tonic-gate #else 1247c478bd9Sstevel@tonic-gate 1257c478bd9Sstevel@tonic-gate /* Fake versions to make lint happy */ 1267c478bd9Sstevel@tonic-gate 1277c478bd9Sstevel@tonic-gate #define ACPI_DIV_64_BY_32(n_hi, n_lo, d32, q32, r32) \ 1287c478bd9Sstevel@tonic-gate { \ 1297c478bd9Sstevel@tonic-gate q32 = n_hi / d32; \ 1307c478bd9Sstevel@tonic-gate r32 = n_lo / d32; \ 1317c478bd9Sstevel@tonic-gate } 1327c478bd9Sstevel@tonic-gate 1337c478bd9Sstevel@tonic-gate #define ACPI_SHIFT_RIGHT_64(n_hi, n_lo) \ 1347c478bd9Sstevel@tonic-gate { \ 1357c478bd9Sstevel@tonic-gate n_hi >>= 1; \ 1367c478bd9Sstevel@tonic-gate n_lo >>= 1; \ 1377c478bd9Sstevel@tonic-gate } 1387c478bd9Sstevel@tonic-gate #endif 1397c478bd9Sstevel@tonic-gate 1407c478bd9Sstevel@tonic-gate /* warn C4100: unreferenced formal parameter */ 1417c478bd9Sstevel@tonic-gate #pragma warning(disable:4100) 1427c478bd9Sstevel@tonic-gate 1437c478bd9Sstevel@tonic-gate /* warn C4127: conditional expression is constant */ 1447c478bd9Sstevel@tonic-gate #pragma warning(disable:4127) 1457c478bd9Sstevel@tonic-gate 1467c478bd9Sstevel@tonic-gate /* warn C4706: assignment within conditional expression */ 1477c478bd9Sstevel@tonic-gate #pragma warning(disable:4706) 1487c478bd9Sstevel@tonic-gate 1497c478bd9Sstevel@tonic-gate /* warn C4131: uses old-style declarator (iASL compiler only) */ 1507c478bd9Sstevel@tonic-gate #pragma warning(disable:4131) 1517c478bd9Sstevel@tonic-gate 15226f3cdf0SGordon Ross #if _MSC_VER > 1200 /* Versions above VC++ 6 */ 15326f3cdf0SGordon Ross #pragma warning( disable : 4295 ) /* needed for acpredef.h array */ 15426f3cdf0SGordon Ross #endif 1557c478bd9Sstevel@tonic-gate 156*7b1019a6SJerry Jelinek 157*7b1019a6SJerry Jelinek /* Debug support. */ 158*7b1019a6SJerry Jelinek 159*7b1019a6SJerry Jelinek #ifdef _DEBUG 160*7b1019a6SJerry Jelinek 161*7b1019a6SJerry Jelinek /* 162*7b1019a6SJerry Jelinek * Debugging memory corruption issues with windows: 163*7b1019a6SJerry Jelinek * Add #include <crtdbg.h> to accommon.h if necessary. 164*7b1019a6SJerry Jelinek * Add _ASSERTE(_CrtCheckMemory()); where needed to test memory integrity. 165*7b1019a6SJerry Jelinek * This can quickly localize the memory corruption. 166*7b1019a6SJerry Jelinek */ 167*7b1019a6SJerry Jelinek #define ACPI_DEBUG_INITIALIZE() \ 168*7b1019a6SJerry Jelinek _CrtSetDbgFlag (\ 169*7b1019a6SJerry Jelinek _CRTDBG_CHECK_ALWAYS_DF | \ 170*7b1019a6SJerry Jelinek _CRTDBG_ALLOC_MEM_DF | \ 171*7b1019a6SJerry Jelinek _CRTDBG_DELAY_FREE_MEM_DF | \ 172*7b1019a6SJerry Jelinek _CRTDBG_LEAK_CHECK_DF | \ 173*7b1019a6SJerry Jelinek _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG)); 174*7b1019a6SJerry Jelinek 175*7b1019a6SJerry Jelinek #if 0 176*7b1019a6SJerry Jelinek /* 177*7b1019a6SJerry Jelinek * _CrtSetBreakAlloc can be used to set a breakpoint at a particular 178*7b1019a6SJerry Jelinek * memory leak, add to the macro above. 179*7b1019a6SJerry Jelinek */ 180*7b1019a6SJerry Jelinek Detected memory leaks! 181*7b1019a6SJerry Jelinek Dumping objects -> 182*7b1019a6SJerry Jelinek ..\..\source\os_specific\service_layers\oswinxf.c(701) : {937} normal block at 0x002E9190, 40 bytes long. 183*7b1019a6SJerry Jelinek Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 184*7b1019a6SJerry Jelinek 185*7b1019a6SJerry Jelinek _CrtSetBreakAlloc (937); 186*7b1019a6SJerry Jelinek #endif 187*7b1019a6SJerry Jelinek 188*7b1019a6SJerry Jelinek #endif 189*7b1019a6SJerry Jelinek 190*7b1019a6SJerry Jelinek #if _MSC_VER > 1200 /* Versions above VC++ 6 */ 191*7b1019a6SJerry Jelinek #define COMPILER_VA_MACRO 1 192*7b1019a6SJerry Jelinek #else 193*7b1019a6SJerry Jelinek #endif 194*7b1019a6SJerry Jelinek 1957c478bd9Sstevel@tonic-gate #endif /* __ACMSVC_H__ */ 196