1199767f8SToomas Soome /* 2*f334afcfSToomas Soome * Copyright (c) 1999 - 2002 Intel Corporation. All rights reserved 3*f334afcfSToomas Soome * This software and associated documentation (if any) is furnished 4*f334afcfSToomas Soome * under a license and may only be used or copied in accordance 5*f334afcfSToomas Soome * with the terms of the license. Except as permitted by such 6*f334afcfSToomas Soome * license, no part of this software or documentation may be 7*f334afcfSToomas Soome * reproduced, stored in a retrieval system, or transmitted in any 8*f334afcfSToomas Soome * form or by any means without the express written consent of 9*f334afcfSToomas Soome * Intel Corporation. 10199767f8SToomas Soome * 11*f334afcfSToomas Soome * Module Name: 12199767f8SToomas Soome * 13*f334afcfSToomas Soome * devpath.h 14*f334afcfSToomas Soome * 15*f334afcfSToomas Soome * Abstract: 16*f334afcfSToomas Soome * 17*f334afcfSToomas Soome * Defines for parsing the EFI Device Path structures 18*f334afcfSToomas Soome * 19*f334afcfSToomas Soome * Revision History 20199767f8SToomas Soome */ 21199767f8SToomas Soome 22*f334afcfSToomas Soome #ifndef _DEVPATH_H 23*f334afcfSToomas Soome #define _DEVPATH_H 24*f334afcfSToomas Soome 25*f334afcfSToomas Soome #include <Protocol/DevicePath.h> 26*f334afcfSToomas Soome 27*f334afcfSToomas Soome #define EFI_DP_TYPE_MASK 0x7F 28*f334afcfSToomas Soome #define EFI_DP_TYPE_UNPACKED 0x80 29*f334afcfSToomas Soome 30*f334afcfSToomas Soome #define END_DEVICE_PATH_LENGTH (sizeof (EFI_DEVICE_PATH)) 31*f334afcfSToomas Soome 32*f334afcfSToomas Soome #define DP_IS_END_TYPE(a) 33*f334afcfSToomas Soome #define DP_IS_END_SUBTYPE(a) \ 34*f334afcfSToomas Soome (((a)->SubType == END_ENTIRE_DEVICE_PATH_SUBTYPE) 35*f334afcfSToomas Soome 36*f334afcfSToomas Soome #define DevicePathType(a) (((a)->Type) & EFI_DP_TYPE_MASK) 37*f334afcfSToomas Soome #define DevicePathSubType(a) ((a)->SubType) 38*f334afcfSToomas Soome #define DevicePathNodeLength(a) \ 39*f334afcfSToomas Soome ((size_t)(((a)->Length[0]) |((a)->Length[1] << 8))) 40*f334afcfSToomas Soome #define NextDevicePathNode(a) \ 41*f334afcfSToomas Soome ((EFI_DEVICE_PATH *)(((UINT8 *)(a)) + DevicePathNodeLength(a))) 42*f334afcfSToomas Soome #define IsDevicePathType(a, t) (DevicePathType(a) == t) 43*f334afcfSToomas Soome #define IsDevicePathEndType(a) IsDevicePathType(a, END_DEVICE_PATH_TYPE) 44*f334afcfSToomas Soome #define IsDevicePathEndSubType(a) \ 45*f334afcfSToomas Soome ((a)->SubType == END_ENTIRE_DEVICE_PATH_SUBTYPE) 46*f334afcfSToomas Soome #define IsDevicePathEnd(a) \ 47*f334afcfSToomas Soome (IsDevicePathEndType(a) && IsDevicePathEndSubType(a)) 48*f334afcfSToomas Soome #define IsDevicePathUnpacked(a) ((a)->Type & EFI_DP_TYPE_UNPACKED) 49*f334afcfSToomas Soome 50*f334afcfSToomas Soome #define SetDevicePathNodeLength(a, l) { \ 51*f334afcfSToomas Soome (a)->Length[0] = (UINT8)(l); \ 52*f334afcfSToomas Soome (a)->Length[1] = (UINT8)((l) >> 8); \ 53*f334afcfSToomas Soome } 54*f334afcfSToomas Soome 55*f334afcfSToomas Soome #define SetDevicePathEndNode(a) { \ 56*f334afcfSToomas Soome (a)->Type = END_DEVICE_PATH_TYPE; \ 57*f334afcfSToomas Soome (a)->SubType = END_ENTIRE_DEVICE_PATH_SUBTYPE; \ 58*f334afcfSToomas Soome (a)->Length[0] = sizeof (EFI_DEVICE_PATH); \ 59*f334afcfSToomas Soome (a)->Length[1] = 0; \ 60*f334afcfSToomas Soome } 61*f334afcfSToomas Soome 62*f334afcfSToomas Soome #endif /* _DEVPATH_H */ 63