xref: /illumos-gate/usr/src/boot/efi/include/efidevp.h (revision f334afcf)
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