MCPcopy Create free account
hub / github.com/CloverHackyColor/CloverBootloader / FatQueueTask

Function FatQueueTask

FileSystems/FatPkg/EnhancedFatDxe/Misc.c:136–235  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

134}
135
136EFI_STATUS
137FatQueueTask (
138 IN FAT_IFILE *IFile,
139 IN FAT_TASK *Task
140 )
141/*++
142
143Routine Description:
144
145 Execute the task
146
147Arguments:
148
149 IFile - The instance of the open file.
150 Task - The task to be executed.
151
152Returns:
153
154 EFI_SUCCESS - The task was executed sucessfully.
155 other - An error occurred when executing the task.
156
157--*/
158{
159 EFI_STATUS Status;
160 LIST_ENTRY *Link;
161 FAT_SUBTASK *Subtask;
162
163 //
164 // Sometimes the Task doesn't contain any subtasks, signal the event directly.
165 //
166 if (IsListEmpty (&Task->Subtasks)) {
167 Task->FileIoToken->Status = EFI_SUCCESS;
168 gBS->SignalEvent (Task->FileIoToken->Event);
169 FreePool(Task);
170 return EFI_SUCCESS;
171 }
172
173 EfiAcquireLock (&FatTaskLock);
174 InsertTailList (&IFile->Tasks, &Task->Link);
175 EfiReleaseLock (&FatTaskLock);
176
177 Status = EFI_SUCCESS;
178 for ( Link = GetFirstNode (&Task->Subtasks)
179 ; !IsNull (&Task->Subtasks, Link)
180 ; Link = GetNextNode (&Task->Subtasks, Link)
181 ) {
182 Subtask = CR (Link, FAT_SUBTASK, Link, FAT_SUBTASK_SIGNATURE);
183 if (Subtask->Write) {
184
185 Status = IFile->OFile->Volume->DiskIo2->WriteDiskEx (
186 IFile->OFile->Volume->DiskIo2,
187 IFile->OFile->Volume->MediaId,
188 Subtask->Offset,
189 &Subtask->DiskIo2Token,
190 Subtask->BufferSize,
191 Subtask->Buffer
192 );
193 } else {

Callers 3

FatIFileAccessFunction · 0.85
FatOpenExFunction · 0.85
FatFlushExFunction · 0.85

Calls 6

IsListEmptyFunction · 0.85
EfiAcquireLockFunction · 0.85
EfiReleaseLockFunction · 0.85
IsNullFunction · 0.85
FatDestroySubtaskFunction · 0.85
FreePoolFunction · 0.50

Tested by

no test coverage detected