Path: blob/main/sys/contrib/dev/acpica/include/acpiosxf.h
48286 views
/******************************************************************************1*2* Name: acpiosxf.h - All interfaces to the OS Services Layer (OSL). These3* interfaces must be implemented by OSL to interface the4* ACPI components to the host operating system.5*6*****************************************************************************/78/******************************************************************************9*10* 1. Copyright Notice11*12* Some or all of this work - Copyright (c) 1999 - 2025, Intel Corp.13* All rights reserved.14*15* 2. License16*17* 2.1. This is your license from Intel Corp. under its intellectual property18* rights. You may have additional license terms from the party that provided19* you this software, covering your right to use that party's intellectual20* property rights.21*22* 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a23* copy of the source code appearing in this file ("Covered Code") an24* irrevocable, perpetual, worldwide license under Intel's copyrights in the25* base code distributed originally by Intel ("Original Intel Code") to copy,26* make derivatives, distribute, use and display any portion of the Covered27* Code in any form, with the right to sublicense such rights; and28*29* 2.3. Intel grants Licensee a non-exclusive and non-transferable patent30* license (with the right to sublicense), under only those claims of Intel31* patents that are infringed by the Original Intel Code, to make, use, sell,32* offer to sell, and import the Covered Code and derivative works thereof33* solely to the minimum extent necessary to exercise the above copyright34* license, and in no event shall the patent license extend to any additions35* to or modifications of the Original Intel Code. No other license or right36* is granted directly or by implication, estoppel or otherwise;37*38* The above copyright and patent license is granted only if the following39* conditions are met:40*41* 3. Conditions42*43* 3.1. Redistribution of Source with Rights to Further Distribute Source.44* Redistribution of source code of any substantial portion of the Covered45* Code or modification with rights to further distribute source must include46* the above Copyright Notice, the above License, this list of Conditions,47* and the following Disclaimer and Export Compliance provision. In addition,48* Licensee must cause all Covered Code to which Licensee contributes to49* contain a file documenting the changes Licensee made to create that Covered50* Code and the date of any change. Licensee must include in that file the51* documentation of any changes made by any predecessor Licensee. Licensee52* must include a prominent statement that the modification is derived,53* directly or indirectly, from Original Intel Code.54*55* 3.2. Redistribution of Source with no Rights to Further Distribute Source.56* Redistribution of source code of any substantial portion of the Covered57* Code or modification without rights to further distribute source must58* include the following Disclaimer and Export Compliance provision in the59* documentation and/or other materials provided with distribution. In60* addition, Licensee may not authorize further sublicense of source of any61* portion of the Covered Code, and must include terms to the effect that the62* license from Licensee to its licensee is limited to the intellectual63* property embodied in the software Licensee provides to its licensee, and64* not to intellectual property embodied in modifications its licensee may65* make.66*67* 3.3. Redistribution of Executable. Redistribution in executable form of any68* substantial portion of the Covered Code or modification must reproduce the69* above Copyright Notice, and the following Disclaimer and Export Compliance70* provision in the documentation and/or other materials provided with the71* distribution.72*73* 3.4. Intel retains all right, title, and interest in and to the Original74* Intel Code.75*76* 3.5. Neither the name Intel nor any other trademark owned or controlled by77* Intel shall be used in advertising or otherwise to promote the sale, use or78* other dealings in products derived from or relating to the Covered Code79* without prior written authorization from Intel.80*81* 4. Disclaimer and Export Compliance82*83* 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED84* HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE85* IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,86* INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY87* UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY88* IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A89* PARTICULAR PURPOSE.90*91* 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES92* OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR93* COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,94* SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY95* CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL96* HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS97* SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY98* LIMITED REMEDY.99*100* 4.3. Licensee shall not export, either directly or indirectly, any of this101* software or system incorporating such software without first obtaining any102* required license or other approval from the U. S. Department of Commerce or103* any other agency or department of the United States Government. In the104* event Licensee exports any such software from the United States or105* re-exports any such software from a foreign destination, Licensee shall106* ensure that the distribution and export/re-export of the software is in107* compliance with all laws, regulations, orders, or other restrictions of the108* U.S. Export Administration Regulations. Licensee agrees that neither it nor109* any of its subsidiaries will export/re-export any technical data, process,110* software, or service, directly or indirectly, to any country for which the111* United States government or any agency thereof requires an export license,112* other governmental approval, or letter of assurance, without first obtaining113* such license, approval or letter.114*115*****************************************************************************116*117* Alternatively, you may choose to be licensed under the terms of the118* following license:119*120* Redistribution and use in source and binary forms, with or without121* modification, are permitted provided that the following conditions122* are met:123* 1. Redistributions of source code must retain the above copyright124* notice, this list of conditions, and the following disclaimer,125* without modification.126* 2. Redistributions in binary form must reproduce at minimum a disclaimer127* substantially similar to the "NO WARRANTY" disclaimer below128* ("Disclaimer") and any redistribution must be conditioned upon129* including a substantially similar Disclaimer requirement for further130* binary redistribution.131* 3. Neither the names of the above-listed copyright holders nor the names132* of any contributors may be used to endorse or promote products derived133* from this software without specific prior written permission.134*135* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS136* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT137* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR138* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT139* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,140* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT141* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,142* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY143* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT144* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE145* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.146*147* Alternatively, you may choose to be licensed under the terms of the148* GNU General Public License ("GPL") version 2 as published by the Free149* Software Foundation.150*151*****************************************************************************/152153#ifndef __ACPIOSXF_H__154#define __ACPIOSXF_H__155156#include <contrib/dev/acpica/include/platform/acenv.h>157#include <contrib/dev/acpica/include/actypes.h>158159160/* Types for AcpiOsExecute */161162typedef enum163{164OSL_GLOBAL_LOCK_HANDLER,165OSL_NOTIFY_HANDLER,166OSL_GPE_HANDLER,167OSL_DEBUGGER_MAIN_THREAD,168OSL_DEBUGGER_EXEC_THREAD,169OSL_EC_POLL_HANDLER,170OSL_EC_BURST_HANDLER171172} ACPI_EXECUTE_TYPE;173174#define ACPI_NO_UNIT_LIMIT ((UINT32) -1)175#define ACPI_MUTEX_SEM 1176177178/* Functions for AcpiOsSignal */179180#define ACPI_SIGNAL_FATAL 0181#define ACPI_SIGNAL_BREAKPOINT 1182183typedef struct acpi_signal_fatal_info184{185UINT32 Type;186UINT32 Code;187UINT32 Argument;188189} ACPI_SIGNAL_FATAL_INFO;190191192/*193* OSL Initialization and shutdown primitives194*/195#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInitialize196ACPI_STATUS197AcpiOsInitialize (198void);199#endif200201#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTerminate202ACPI_STATUS203AcpiOsTerminate (204void);205#endif206207208/*209* ACPI Table interfaces210*/211#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetRootPointer212ACPI_PHYSICAL_ADDRESS213AcpiOsGetRootPointer (214void);215#endif216217#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPredefinedOverride218ACPI_STATUS219AcpiOsPredefinedOverride (220const ACPI_PREDEFINED_NAMES *InitVal,221ACPI_STRING *NewVal);222#endif223224#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTableOverride225ACPI_STATUS226AcpiOsTableOverride (227ACPI_TABLE_HEADER *ExistingTable,228ACPI_TABLE_HEADER **NewTable);229#endif230231#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPhysicalTableOverride232ACPI_STATUS233AcpiOsPhysicalTableOverride (234ACPI_TABLE_HEADER *ExistingTable,235ACPI_PHYSICAL_ADDRESS *NewAddress,236UINT32 *NewTableLength);237#endif238239240/*241* Spinlock primitives242*/243#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateLock244ACPI_STATUS245AcpiOsCreateLock (246ACPI_SPINLOCK *OutHandle);247#endif248249#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteLock250void251AcpiOsDeleteLock (252ACPI_SPINLOCK Handle);253#endif254255#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireLock256ACPI_CPU_FLAGS257AcpiOsAcquireLock (258ACPI_SPINLOCK Handle);259#endif260261#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseLock262void263AcpiOsReleaseLock (264ACPI_SPINLOCK Handle,265ACPI_CPU_FLAGS Flags);266#endif267268269/*270* Semaphore primitives271*/272#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateSemaphore273ACPI_STATUS274AcpiOsCreateSemaphore (275UINT32 MaxUnits,276UINT32 InitialUnits,277ACPI_SEMAPHORE *OutHandle);278#endif279280#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteSemaphore281ACPI_STATUS282AcpiOsDeleteSemaphore (283ACPI_SEMAPHORE Handle);284#endif285286#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWaitSemaphore287ACPI_STATUS288AcpiOsWaitSemaphore (289ACPI_SEMAPHORE Handle,290UINT32 Units,291UINT16 Timeout);292#endif293294#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSignalSemaphore295ACPI_STATUS296AcpiOsSignalSemaphore (297ACPI_SEMAPHORE Handle,298UINT32 Units);299#endif300301302/*303* Mutex primitives. May be configured to use semaphores instead via304* ACPI_MUTEX_TYPE (see platform/acenv.h)305*/306#if (ACPI_MUTEX_TYPE != ACPI_BINARY_SEMAPHORE)307308#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateMutex309ACPI_STATUS310AcpiOsCreateMutex (311ACPI_MUTEX *OutHandle);312#endif313314#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteMutex315void316AcpiOsDeleteMutex (317ACPI_MUTEX Handle);318#endif319320#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireMutex321ACPI_STATUS322AcpiOsAcquireMutex (323ACPI_MUTEX Handle,324UINT16 Timeout);325#endif326327#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseMutex328void329AcpiOsReleaseMutex (330ACPI_MUTEX Handle);331#endif332333#endif334335336/*337* Memory allocation and mapping338*/339#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocate340void *341AcpiOsAllocate (342ACPI_SIZE Size);343#endif344345#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocateZeroed346void *347AcpiOsAllocateZeroed (348ACPI_SIZE Size);349#endif350351#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsFree352void353AcpiOsFree (354void * Memory);355#endif356357#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsMapMemory358void *359AcpiOsMapMemory (360ACPI_PHYSICAL_ADDRESS Where,361ACPI_SIZE Length);362#endif363364#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsUnmapMemory365void366AcpiOsUnmapMemory (367void *LogicalAddress,368ACPI_SIZE Size);369#endif370371#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetPhysicalAddress372ACPI_STATUS373AcpiOsGetPhysicalAddress (374void *LogicalAddress,375ACPI_PHYSICAL_ADDRESS *PhysicalAddress);376#endif377378379/*380* Memory/Object Cache381*/382#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateCache383ACPI_STATUS384AcpiOsCreateCache (385char *CacheName,386UINT16 ObjectSize,387UINT16 MaxDepth,388ACPI_CACHE_T **ReturnCache);389#endif390391#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteCache392ACPI_STATUS393AcpiOsDeleteCache (394ACPI_CACHE_T *Cache);395#endif396397#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPurgeCache398ACPI_STATUS399AcpiOsPurgeCache (400ACPI_CACHE_T *Cache);401#endif402403#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireObject404void *405AcpiOsAcquireObject (406ACPI_CACHE_T *Cache);407#endif408409#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseObject410ACPI_STATUS411AcpiOsReleaseObject (412ACPI_CACHE_T *Cache,413void *Object);414#endif415416417/*418* Interrupt handlers419*/420#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInstallInterruptHandler421ACPI_STATUS422AcpiOsInstallInterruptHandler (423UINT32 InterruptNumber,424ACPI_OSD_HANDLER ServiceRoutine,425void *Context);426#endif427428#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsRemoveInterruptHandler429ACPI_STATUS430AcpiOsRemoveInterruptHandler (431UINT32 InterruptNumber,432ACPI_OSD_HANDLER ServiceRoutine);433#endif434435436/*437* Threads and Scheduling438*/439#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetThreadId440ACPI_THREAD_ID441AcpiOsGetThreadId (442void);443#endif444445#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsExecute446ACPI_STATUS447AcpiOsExecute (448ACPI_EXECUTE_TYPE Type,449ACPI_OSD_EXEC_CALLBACK Function,450void *Context);451#endif452453#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWaitEventsComplete454void455AcpiOsWaitEventsComplete (456void);457#endif458459#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSleep460void461AcpiOsSleep (462UINT64 Milliseconds);463#endif464465#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsStall466void467AcpiOsStall (468UINT32 Microseconds);469#endif470471472/*473* Platform and hardware-independent I/O interfaces474*/475#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadPort476ACPI_STATUS477AcpiOsReadPort (478ACPI_IO_ADDRESS Address,479UINT32 *Value,480UINT32 Width);481#endif482483#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritePort484ACPI_STATUS485AcpiOsWritePort (486ACPI_IO_ADDRESS Address,487UINT32 Value,488UINT32 Width);489#endif490491492/*493* Platform and hardware-independent physical memory interfaces494*/495#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadMemory496ACPI_STATUS497AcpiOsReadMemory (498ACPI_PHYSICAL_ADDRESS Address,499UINT64 *Value,500UINT32 Width);501#endif502503#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWriteMemory504ACPI_STATUS505AcpiOsWriteMemory (506ACPI_PHYSICAL_ADDRESS Address,507UINT64 Value,508UINT32 Width);509#endif510511512/*513* Platform and hardware-independent PCI configuration space access514* Note: Can't use "Register" as a parameter, changed to "Reg" --515* certain compilers complain.516*/517#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadPciConfiguration518ACPI_STATUS519AcpiOsReadPciConfiguration (520ACPI_PCI_ID *PciId,521UINT32 Reg,522UINT64 *Value,523UINT32 Width);524#endif525526#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritePciConfiguration527ACPI_STATUS528AcpiOsWritePciConfiguration (529ACPI_PCI_ID *PciId,530UINT32 Reg,531UINT64 Value,532UINT32 Width);533#endif534535536/*537* Miscellaneous538*/539#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadable540BOOLEAN541AcpiOsReadable (542void *Pointer,543ACPI_SIZE Length);544#endif545546#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritable547BOOLEAN548AcpiOsWritable (549void *Pointer,550ACPI_SIZE Length);551#endif552553#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTimer554UINT64555AcpiOsGetTimer (556void);557#endif558559#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSignal560ACPI_STATUS561AcpiOsSignal (562UINT32 Function,563void *Info);564#endif565566#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsEnterSleep567ACPI_STATUS568AcpiOsEnterSleep (569UINT8 SleepState,570UINT32 RegaValue,571UINT32 RegbValue);572#endif573574575/*576* Debug print routines577*/578#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPrintf579ACPI_PRINTF_LIKE (1)580void ACPI_INTERNAL_VAR_XFACE581AcpiOsPrintf (582const char *Format,583...);584#endif585586#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsVprintf587void588AcpiOsVprintf (589const char *Format,590va_list Args);591#endif592593#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsRedirectOutput594void595AcpiOsRedirectOutput (596void *Destination);597#endif598599600/*601* Debug IO602*/603#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetLine604ACPI_STATUS605AcpiOsGetLine (606char *Buffer,607UINT32 BufferLength,608UINT32 *BytesRead);609#endif610611#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInitializeDebugger612ACPI_STATUS613AcpiOsInitializeDebugger (614void);615#endif616617#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTerminateDebugger618void619AcpiOsTerminateDebugger (620void);621#endif622623#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWaitCommandReady624ACPI_STATUS625AcpiOsWaitCommandReady (626void);627#endif628629#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsNotifyCommandComplete630ACPI_STATUS631AcpiOsNotifyCommandComplete (632void);633#endif634635#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTracePoint636void637AcpiOsTracePoint (638ACPI_TRACE_EVENT_TYPE Type,639BOOLEAN Begin,640UINT8 *Aml,641char *Pathname);642#endif643644645/*646* Obtain ACPI table(s)647*/648#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByName649ACPI_STATUS650AcpiOsGetTableByName (651char *Signature,652UINT32 Instance,653ACPI_TABLE_HEADER **Table,654ACPI_PHYSICAL_ADDRESS *Address);655#endif656657#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByIndex658ACPI_STATUS659AcpiOsGetTableByIndex (660UINT32 Index,661ACPI_TABLE_HEADER **Table,662UINT32 *Instance,663ACPI_PHYSICAL_ADDRESS *Address);664#endif665666#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByAddress667ACPI_STATUS668AcpiOsGetTableByAddress (669ACPI_PHYSICAL_ADDRESS Address,670ACPI_TABLE_HEADER **Table);671#endif672673674/*675* Directory manipulation676*/677#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsOpenDirectory678void *679AcpiOsOpenDirectory (680char *Pathname,681char *WildcardSpec,682char RequestedFileType);683#endif684685/* RequesteFileType values */686687#define REQUEST_FILE_ONLY 0688#define REQUEST_DIR_ONLY 1689690691#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetNextFilename692char *693AcpiOsGetNextFilename (694void *DirHandle);695#endif696697#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCloseDirectory698void699AcpiOsCloseDirectory (700void *DirHandle);701#endif702703704#endif /* __ACPIOSXF_H__ */705706707