]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Bus/Ufs/UfsBlockIoPei/UfsHcMem.h
MdeModulePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / MdeModulePkg / Bus / Ufs / UfsBlockIoPei / UfsHcMem.h
1 /** @file
2
3 Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR>
4
5 SPDX-License-Identifier: BSD-2-Clause-Patent
6
7 **/
8
9 #ifndef _UFS_PEIM_MEM_H_
10 #define _UFS_PEIM_MEM_H_
11
12 #define UFS_PEIM_MEM_BIT(a) ((UINTN)(1 << (a)))
13
14 #define UFS_PEIM_MEM_BIT_IS_SET(Data, Bit) \
15 ((BOOLEAN)(((Data) & UFS_PEIM_MEM_BIT(Bit)) == UFS_PEIM_MEM_BIT(Bit)))
16
17 typedef struct _UFS_PEIM_MEM_BLOCK UFS_PEIM_MEM_BLOCK;
18
19 struct _UFS_PEIM_MEM_BLOCK {
20 UINT8 *Bits; // Bit array to record which unit is allocated
21 UINTN BitsLen;
22 UINT8 *Buf;
23 UINT8 *BufHost;
24 UINTN BufLen; // Memory size in bytes
25 VOID *Mapping;
26 UFS_PEIM_MEM_BLOCK *Next;
27 };
28
29 typedef struct _UFS_PEIM_MEM_POOL {
30 UFS_PEIM_MEM_BLOCK *Head;
31 } UFS_PEIM_MEM_POOL;
32
33 //
34 // Memory allocation unit, note that the value must meet UFS spec alignment requirement.
35 //
36 #define UFS_PEIM_MEM_UNIT 128
37
38 #define UFS_PEIM_MEM_UNIT_MASK (UFS_PEIM_MEM_UNIT - 1)
39 #define UFS_PEIM_MEM_DEFAULT_PAGES 16
40
41 #define UFS_PEIM_MEM_ROUND(Len) (((Len) + UFS_PEIM_MEM_UNIT_MASK) & (~UFS_PEIM_MEM_UNIT_MASK))
42
43 //
44 // Advance the byte and bit to the next bit, adjust byte accordingly.
45 //
46 #define UFS_PEIM_NEXT_BIT(Byte, Bit) \
47 do { \
48 (Bit)++; \
49 if ((Bit) > 7) { \
50 (Byte)++; \
51 (Bit) = 0; \
52 } \
53 } while (0)
54
55 #endif
56