1 /** @file
2   This file defines the EFI UFS Device Config Protocol.
3 
4   Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
5   SPDX-License-Identifier: BSD-2-Clause-Patent
6 
7   @par Revision Reference:
8   This Protocol is introduced in UEFI Specification 2.7
9 
10 **/
11 
12 #ifndef __UFS_DEVICE_CONFIG_PROTOCOL_H__
13 #define __UFS_DEVICE_CONFIG_PROTOCOL_H__
14 
15 //
16 // EFI UFS Device Config Protocol GUID value
17 //
18 #define EFI_UFS_DEVICE_CONFIG_GUID \
19   { 0xb81bfab0, 0xeb3, 0x4cf9, { 0x84, 0x65, 0x7f, 0xa9, 0x86, 0x36, 0x16, 0x64 }};
20 
21 //
22 // Forward reference for pure ANSI compatability
23 //
24 typedef struct _EFI_UFS_DEVICE_CONFIG_PROTOCOL  EFI_UFS_DEVICE_CONFIG_PROTOCOL;
25 
26 /**
27   Read or write specified device descriptor of a UFS device.
28 
29   The service is used to read/write UFS device descriptors. The consumer of this API is responsible
30   for allocating the data buffer pointed by Descriptor.
31 
32   @param[in]      This          The pointer to the EFI_UFS_DEVICE_CONFIG_PROTOCOL instance.
33   @param[in]      Read          The boolean variable to show r/w direction.
34   @param[in]      DescId        The ID of device descriptor.
35   @param[in]      Index         The Index of device descriptor.
36   @param[in]      Selector      The Selector of device descriptor.
37   @param[in, out] Descriptor    The buffer of device descriptor to be read or written.
38   @param[in, out] DescSize      The size of device descriptor buffer. On input, the size, in bytes,
39                                 of the data buffer specified by Descriptor. On output, the number
40                                 of bytes that were actually transferred.
41 
42   @retval EFI_SUCCESS           The device descriptor is read/written successfully.
43   @retval EFI_INVALID_PARAMETER This is NULL or Descriptor is NULL or DescSize is NULL.
44                                 DescId, Index and Selector are invalid combination to point to a
45                                 type of UFS device descriptor.
46   @retval EFI_DEVICE_ERROR      The device descriptor is not read/written successfully.
47 
48 **/
49 typedef
50 EFI_STATUS
51 (EFIAPI *EFI_UFS_DEVICE_CONFIG_RW_DESCRIPTOR) (
52   IN EFI_UFS_DEVICE_CONFIG_PROTOCOL    *This,
53   IN BOOLEAN                           Read,
54   IN UINT8                             DescId,
55   IN UINT8                             Index,
56   IN UINT8                             Selector,
57   IN OUT UINT8                         *Descriptor,
58   IN OUT UINT32                        *DescSize
59   );
60 
61 /**
62   Read or write specified flag of a UFS device.
63 
64   The service is used to read/write UFS flag descriptors. The consumer of this API is responsible
65   for allocating the buffer pointed by Flag. The buffer size is 1 byte as UFS flag descriptor is
66   just a single Boolean value that represents a TRUE or FALSE, '0' or '1', ON or OFF type of value.
67 
68   @param[in]      This          The pointer to the EFI_UFS_DEVICE_CONFIG_PROTOCOL instance.
69   @param[in]      Read          The boolean variable to show r/w direction.
70   @param[in]      FlagId        The ID of flag to be read or written.
71   @param[in, out] Flag          The buffer to set or clear flag.
72 
73   @retval EFI_SUCCESS           The flag descriptor is set/clear successfully.
74   @retval EFI_INVALID_PARAMETER This is NULL or Flag is NULL.
75                                 FlagId is an invalid UFS flag ID.
76   @retval EFI_DEVICE_ERROR      The flag is not set/clear successfully.
77 
78 **/
79 typedef
80 EFI_STATUS
81 (EFIAPI *EFI_UFS_DEVICE_CONFIG_RW_FLAG) (
82   IN EFI_UFS_DEVICE_CONFIG_PROTOCOL    *This,
83   IN BOOLEAN                           Read,
84   IN UINT8                             FlagId,
85   IN OUT UINT8                         *Flag
86   );
87 
88 /**
89   Read or write specified attribute of a UFS device.
90 
91   The service is used to read/write UFS attributes. The consumer of this API is responsible for
92   allocating the data buffer pointed by Attribute.
93 
94   @param[in]      This          The pointer to the EFI_UFS_DEVICE_CONFIG_PROTOCOL instance.
95   @param[in]      Read          The boolean variable to show r/w direction.
96   @param[in]      AttrId        The ID of Attribute.
97   @param[in]      Index         The Index of Attribute.
98   @param[in]      Selector      The Selector of Attribute.
99   @param[in, out] Attribute     The buffer of Attribute to be read or written.
100   @param[in, out] AttrSize      The size of Attribute buffer. On input, the size, in bytes, of the
101                                 data buffer specified by Attribute. On output, the number of bytes
102                                 that were actually transferred.
103 
104   @retval EFI_SUCCESS           The attribute is read/written successfully.
105   @retval EFI_INVALID_PARAMETER This is NULL or Attribute is NULL or AttrSize is NULL.
106                                 AttrId, Index and Selector are invalid combination to point to a
107                                 type of UFS attribute.
108   @retval EFI_DEVICE_ERROR      The attribute is not read/written successfully.
109 
110 **/
111 typedef
112 EFI_STATUS
113 (EFIAPI *EFI_UFS_DEVICE_CONFIG_RW_ATTRIBUTE) (
114   IN EFI_UFS_DEVICE_CONFIG_PROTOCOL    *This,
115   IN BOOLEAN                           Read,
116   IN UINT8                             AttrId,
117   IN UINT8                             Index,
118   IN UINT8                             Selector,
119   IN OUT UINT8                         *Attribute,
120   IN OUT UINT32                        *AttrSize
121   );
122 
123 ///
124 /// UFS Device Config Protocol structure.
125 ///
126 struct _EFI_UFS_DEVICE_CONFIG_PROTOCOL {
127   EFI_UFS_DEVICE_CONFIG_RW_DESCRIPTOR    RwUfsDescriptor;
128   EFI_UFS_DEVICE_CONFIG_RW_FLAG          RwUfsFlag;
129   EFI_UFS_DEVICE_CONFIG_RW_ATTRIBUTE     RwUfsAttribute;
130 };
131 
132 ///
133 /// UFS Device Config Protocol GUID variable.
134 ///
135 extern EFI_GUID gEfiUfsDeviceConfigProtocolGuid;
136 
137 #endif
138