/*** nsmod.c - Parse name space modifier instructions * * Copyright (c) 1996,1997 Microsoft Corporation * Author: Michael Tsang (MikeTs) * Created 11/12/96 * * MODIFICATION HISTORY */ #include "pch.h" #ifdef LOCKABLE_PRAGMA #pragma ACPI_LOCKABLE_DATA #pragma ACPI_LOCKABLE_CODE #endif /***LP Alias - Parse and execute the Alias instruction * * ENTRY * pctxt -> CTXT * pterm -> TERM * * EXIT-SUCCESS * returns STATUS_SUCCESS * EXIT-FAILURE * returns AMLIERR_ code */ NTSTATUS LOCAL Alias(PCTXT pctxt, PTERM pterm) { TRACENAME("ALIAS") NTSTATUS rc = STATUS_SUCCESS; PNSOBJ pnsSrc; ENTER(2, ("Alias(pctxt=%x,pbOp=%x,pterm=%x)\n", pctxt, pctxt->pbOp, pterm)); ASSERT(pterm->pdataArgs[0].dwDataType == OBJTYPE_STRDATA); ASSERT(pterm->pdataArgs[1].dwDataType == OBJTYPE_STRDATA); if (((rc = GetNameSpaceObject((PSZ)pterm->pdataArgs[0].pbDataBuff, pctxt->pnsScope, &pnsSrc, NSF_WARN_NOTFOUND)) == STATUS_SUCCESS) && ((rc = CreateNameSpaceObject(pctxt->pheapCurrent, (PSZ)pterm->pdataArgs[1].pbDataBuff, pctxt->pnsScope, pctxt->powner, &pterm->pnsObj, 0)) == STATUS_SUCCESS)) { pterm->pnsObj->ObjData.dwDataType = OBJTYPE_OBJALIAS; pterm->pnsObj->ObjData.uipDataValue = (ULONG_PTR)pnsSrc; } EXIT(2, ("Alias=%x (pnsObj=%x)\n", rc, pterm->pnsObj)); return rc; } //Alias /***LP Name - Parse and execute the Name instruction * * ENTRY * pctxt -> CTXT * pterm -> TERM * * EXIT-SUCCESS * returns STATUS_SUCCESS * EXIT-FAILURE * returns AMLIERR_ code */ NTSTATUS LOCAL Name(PCTXT pctxt, PTERM pterm) { TRACENAME("NAME") NTSTATUS rc = STATUS_SUCCESS; ENTER(2, ("Name(pctxt=%x,pbOp=%x,pterm=%x)\n", pctxt, pctxt->pbOp, pterm)); ASSERT(pterm->pdataArgs[0].dwDataType == OBJTYPE_STRDATA); if ((rc = CreateNameSpaceObject(pctxt->pheapCurrent, (PSZ)pterm->pdataArgs[0].pbDataBuff, pctxt->pnsScope, pctxt->powner, &pterm->pnsObj, 0)) == STATUS_SUCCESS) { MoveObjData(&pterm->pnsObj->ObjData, &pterm->pdataArgs[1]); } EXIT(2, ("Name=%x (pnsObj=%x)\n", rc, pterm->pnsObj)); return rc; } //Name /***LP Scope - Parse and execute the Scope instruction * * ENTRY * pctxt -> CTXT * pterm -> TERM * * EXIT-SUCCESS * returns STATUS_SUCCESS * EXIT-FAILURE * returns AMLIERR_ code */ NTSTATUS LOCAL Scope(PCTXT pctxt, PTERM pterm) { TRACENAME("SCOPE") NTSTATUS rc = STATUS_SUCCESS; ENTER(2, ("Scope(pctxt=%x,pbOp=%x,pterm=%x)\n", pctxt, pctxt->pbOp, pterm)); ASSERT(pterm->pdataArgs[0].dwDataType == OBJTYPE_STRDATA); if ((rc = GetNameSpaceObject((PSZ)pterm->pdataArgs[0].pbDataBuff, pctxt->pnsScope, &pterm->pnsObj, NSF_WARN_NOTFOUND)) == STATUS_SUCCESS) { rc = PushScope(pctxt, pctxt->pbOp, pterm->pbOpEnd, NULL, pterm->pnsObj, pctxt->powner, pctxt->pheapCurrent, pterm->pdataResult); } EXIT(2, ("Scope=%x\n", rc)); return rc; } //Scope