]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskDriver.c
ArmPkg/DefaultExceptionHandlerLib: fix typo
[mirror_edk2.git] / MdeModulePkg / Universal / Disk / RamDiskDxe / RamDiskDriver.c
CommitLineData
20752cb8
HW
1/** @file\r
2 The driver entry point for RamDiskDxe driver.\r
3\r
4 Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>\r
5 This program and the accompanying materials\r
6 are licensed and made available under the terms and conditions of the BSD License\r
7 which accompanies this distribution. The full text of the license may be found at\r
8 http://opensource.org/licenses/bsd-license.php\r
9\r
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12\r
13**/\r
14\r
15#include "RamDiskImpl.h"\r
16\r
17//\r
18// Handle for the EFI_RAM_DISK_PROTOCOL instance\r
19//\r
20EFI_HANDLE mRamDiskHandle = NULL;\r
21\r
22//\r
23// The EFI_RAM_DISK_PROTOCOL instances that is installed onto the driver\r
24// handle\r
25//\r
26EFI_RAM_DISK_PROTOCOL mRamDiskProtocol = {\r
27 RamDiskRegister,\r
28 RamDiskUnregister\r
29};\r
30\r
31//\r
32// RamDiskDxe driver maintains a list of registered RAM disks.\r
33//\r
34LIST_ENTRY RegisteredRamDisks;\r
35UINTN ListEntryNum;\r
36\r
37\r
38/**\r
39 The entry point for RamDiskDxe driver.\r
40\r
41 @param[in] ImageHandle The image handle of the driver.\r
42 @param[in] SystemTable The system table.\r
43\r
44 @retval EFI_ALREADY_STARTED The driver already exists in system.\r
45 @retval EFI_OUT_OF_RESOURCES Fail to execute entry point due to lack of\r
46 resources.\r
47 @retval EFI_SUCCES All the related protocols are installed on\r
48 the driver.\r
49\r
50**/\r
51EFI_STATUS\r
52EFIAPI\r
53RamDiskDxeEntryPoint (\r
54 IN EFI_HANDLE ImageHandle,\r
55 IN EFI_SYSTEM_TABLE *SystemTable\r
56 )\r
57{\r
58 EFI_STATUS Status;\r
59 RAM_DISK_CONFIG_PRIVATE_DATA *ConfigPrivate;\r
60 VOID *DummyInterface;\r
61\r
62 //\r
63 // If already started, return.\r
64 //\r
65 Status = gBS->LocateProtocol (\r
66 &gEfiRamDiskProtocolGuid,\r
67 NULL,\r
68 &DummyInterface\r
69 );\r
70 if (!EFI_ERROR (Status)) {\r
71 DEBUG ((EFI_D_INFO, "Driver already started!\n"));\r
72 return EFI_ALREADY_STARTED;\r
73 }\r
74\r
75 //\r
76 // Create a private data structure.\r
77 //\r
78 ConfigPrivate = AllocateCopyPool (sizeof (RAM_DISK_CONFIG_PRIVATE_DATA), &mRamDiskConfigPrivateDataTemplate);\r
79 if (ConfigPrivate == NULL) {\r
80 return EFI_OUT_OF_RESOURCES;\r
81 }\r
82\r
83 //\r
84 // Install RAM disk configuration form\r
85 //\r
86 Status = InstallRamDiskConfigForm (ConfigPrivate);\r
87 if (EFI_ERROR (Status)) {\r
88 goto ErrorExit;\r
89 }\r
90\r
91 //\r
92 // Install the EFI_RAM_DISK_PROTOCOL and RAM disk private data onto a\r
93 // new handle\r
94 //\r
95 Status = gBS->InstallMultipleProtocolInterfaces (\r
96 &mRamDiskHandle,\r
97 &gEfiRamDiskProtocolGuid,\r
98 &mRamDiskProtocol,\r
99 &gEfiCallerIdGuid,\r
100 ConfigPrivate,\r
101 NULL\r
102 );\r
103 if (EFI_ERROR (Status)) {\r
104 goto ErrorExit;\r
105 }\r
106\r
107 //\r
108 // Initialize the list of registered RAM disks maintained by the driver\r
109 //\r
110 InitializeListHead (&RegisteredRamDisks);\r
111\r
112 return EFI_SUCCESS;\r
113\r
114ErrorExit:\r
115 if (ConfigPrivate != NULL) {\r
116 UninstallRamDiskConfigForm (ConfigPrivate);\r
117 }\r
118\r
119 return Status;\r
120}\r
121\r
122\r
123/**\r
124 Unload the RamDiskDxe driver and its configuration form.\r
125\r
126 @param[in] ImageHandle The driver's image handle.\r
127\r
128 @retval EFI_SUCCESS The RamDiskDxe driver and its configuration\r
129 form is unloaded.\r
130 @retval Others Failed to unload the form.\r
131\r
132**/\r
133EFI_STATUS\r
134EFIAPI\r
135RamDiskDxeUnload (\r
136 IN EFI_HANDLE ImageHandle\r
137 )\r
138{\r
139 EFI_STATUS Status;\r
140 RAM_DISK_CONFIG_PRIVATE_DATA *ConfigPrivate;\r
141\r
142 Status = gBS->HandleProtocol (\r
143 mRamDiskHandle,\r
144 &gEfiCallerIdGuid,\r
145 (VOID **) &ConfigPrivate\r
146 );\r
147 if (EFI_ERROR (Status)) {\r
148 return Status;\r
149 }\r
150\r
151 ASSERT (ConfigPrivate->Signature == RAM_DISK_CONFIG_PRIVATE_DATA_SIGNATURE);\r
152\r
153 //\r
154 // Unregister all registered RAM disks\r
155 //\r
156 UnregisterAllRamDisks ();\r
157\r
158 gBS->UninstallMultipleProtocolInterfaces (\r
159 mRamDiskHandle,\r
160 &gEfiRamDiskProtocolGuid,\r
161 &mRamDiskProtocol,\r
162 &gEfiCallerIdGuid,\r
163 ConfigPrivate,\r
164 NULL\r
165 );\r
166\r
167 UninstallRamDiskConfigForm (ConfigPrivate);\r
168\r
169 return EFI_SUCCESS;\r
170}\r