]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/EbcDxe/EbcDebugger/EdbCmdMemory.c
MdeModulePkg: Fix some typos of "according"
[mirror_edk2.git] / MdeModulePkg / Universal / EbcDxe / EbcDebugger / EdbCmdMemory.c
CommitLineData
e8a5ac7c 1/** @file\r
748edcd5 2\r
e8a5ac7c
DB
3Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>\r
4This program and the accompanying materials\r
748edcd5
PB
5are licensed and made available under the terms and conditions of the BSD License\r
6which accompanies this distribution. The full text of the license may be found at\r
7http://opensource.org/licenses/bsd-license.php\r
8\r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
11\r
748edcd5 12\r
e8a5ac7c 13**/\r
748edcd5 14\r
e8a5ac7c 15#include "Edb.h"\r
748edcd5
PB
16\r
17\r
e8a5ac7c 18/**\r
748edcd5 19\r
e8a5ac7c
DB
20 Display memory unit.\r
21\r
22 @param Address - Memory Address\r
23 @param Width - Memory Width\r
748edcd5 24\r
e8a5ac7c
DB
25 @return Length of the memory unit\r
26\r
27**/\r
748edcd5
PB
28UINTN\r
29EdbDisplayMemoryUnit (\r
30 IN UINTN Address,\r
31 IN EDB_DATA_WIDTH Width\r
32 )\r
748edcd5
PB
33{\r
34 UINT8 Data8;\r
35 UINT16 Data16;\r
36 UINT32 Data32;\r
37 UINT64 Data64;\r
38\r
39 //\r
24648548 40 // Print according to width\r
748edcd5
PB
41 //\r
42 switch (Width) {\r
43 case EdbWidthUint8:\r
44 CopyMem (&Data8, (VOID *)Address, sizeof(UINT8));\r
45 EDBPrint (L"%02x ", Data8);\r
46 return sizeof(UINT8);\r
47 case EdbWidthUint16:\r
48 CopyMem (&Data16, (VOID *)Address, sizeof(UINT16));\r
49 EDBPrint (L"%04x ", Data16);\r
50 return sizeof(UINT16);\r
51 case EdbWidthUint32:\r
52 CopyMem (&Data32, (VOID *)Address, sizeof(UINT32));\r
53 EDBPrint (L"%08x ", Data32);\r
54 return sizeof(UINT32);\r
55 case EdbWidthUint64:\r
56 CopyMem (&Data64, (VOID *)Address, sizeof(UINT64));\r
57 EDBPrint (L"%016lx ", Data64);\r
58 return sizeof(UINT64);\r
59 default:\r
60 ASSERT (FALSE);\r
61 break;\r
62 }\r
63\r
64 //\r
65 // something wrong\r
66 //\r
67 return 0;\r
68}\r
69\r
e8a5ac7c
DB
70/**\r
71\r
72 Display memory.\r
73\r
74 @param Address - Memory Address\r
75 @param Count - Memory Count\r
76 @param Width - Memory Width\r
77\r
78**/\r
748edcd5
PB
79VOID\r
80EdbDisplayMemory (\r
81 IN UINTN Address,\r
82 IN UINTN Count,\r
83 IN EDB_DATA_WIDTH Width\r
84 )\r
748edcd5
PB
85{\r
86 UINTN LineNumber;\r
87 UINTN ByteNumber;\r
88 UINTN LineIndex;\r
89 UINTN ByteIndex;\r
90 UINTN NumberInLine;\r
91\r
92 if (Count == 0) {\r
93 return ;\r
94 }\r
95\r
96 //\r
97 // Get line number and byte number\r
98 //\r
99 switch (Width) {\r
100 case EdbWidthUint8:\r
101 NumberInLine = 16;\r
102 break;\r
103 case EdbWidthUint16:\r
104 NumberInLine = 8;\r
105 break;\r
106 case EdbWidthUint32:\r
107 NumberInLine = 4;\r
108 break;\r
109 case EdbWidthUint64:\r
110 NumberInLine = 2;\r
111 break;\r
112 default:\r
113 return;\r
114 }\r
115\r
116 LineNumber = Count / NumberInLine;\r
117 ByteNumber = Count % NumberInLine;\r
118 if (ByteNumber == 0) {\r
119 LineNumber -= 1;\r
120 ByteNumber = NumberInLine;\r
121 }\r
122\r
123 //\r
124 // Print each line\r
125 //\r
126 for (LineIndex = 0; LineIndex < LineNumber; LineIndex++) {\r
127\r
128 //\r
129 // Break check\r
130 //\r
131 if (((LineIndex % EFI_DEBUGGER_LINE_NUMBER_IN_PAGE) == 0) &&\r
132 (LineIndex != 0)) {\r
133 if (SetPageBreak ()) {\r
134 break;\r
135 }\r
136 }\r
137\r
138 EDBPrint (EDB_PRINT_ADDRESS_FORMAT, (UINTN)Address);\r
139 for (ByteIndex = 0; ByteIndex < NumberInLine; ByteIndex++) {\r
140 Address += EdbDisplayMemoryUnit (Address, Width);\r
141 }\r
142 EDBPrint (L"\n");\r
143 }\r
144\r
145 //\r
146 // Break check\r
147 //\r
148 if (((LineIndex % EFI_DEBUGGER_LINE_NUMBER_IN_PAGE) == 0) &&\r
149 (LineIndex != 0)) {\r
150 if (SetPageBreak ()) {\r
151 return;\r
152 }\r
153 }\r
154\r
155 //\r
156 // Print last line\r
157 //\r
158 EDBPrint (EDB_PRINT_ADDRESS_FORMAT, (UINTN)Address);\r
159 for (ByteIndex = 0; ByteIndex < ByteNumber; ByteIndex++) {\r
160 Address += EdbDisplayMemoryUnit (Address, Width);\r
161 }\r
162\r
163 return ;\r
164}\r
165\r
e8a5ac7c
DB
166/**\r
167\r
168 Entry memory.\r
169\r
170 @param Address - Memory Address\r
171 @param Value - Memory Value\r
172 @param Width - Memory Width\r
173\r
174**/\r
748edcd5
PB
175VOID\r
176EdbEnterMemory (\r
177 IN UINTN Address,\r
178 IN VOID *Value,\r
179 IN EDB_DATA_WIDTH Width\r
180 )\r
748edcd5
PB
181{\r
182 switch (Width) {\r
183 case EdbWidthUint8:\r
184 CopyMem ((VOID *)Address, Value, sizeof(UINT8));\r
185 break;\r
186 case EdbWidthUint16:\r
187 CopyMem ((VOID *)Address, Value, sizeof(UINT16));\r
188 break;\r
189 case EdbWidthUint32:\r
190 CopyMem ((VOID *)Address, Value, sizeof(UINT32));\r
191 break;\r
192 case EdbWidthUint64:\r
193 CopyMem ((VOID *)Address, Value, sizeof(UINT64));\r
194 break;\r
195 default:\r
196 break;\r
197 }\r
198\r
199 return ;\r
200}\r
201\r
e8a5ac7c
DB
202/**\r
203\r
204 Get memory address and count.\r
205\r
206 @param CommandArg - The argument for this command\r
207 @param Address - Memory Address\r
208 @param Count - Memory Count\r
209\r
210 @retval EFI_SUCCESS - memory address and count are got\r
211 @retval EFI_INVALID_PARAMETER - something wrong\r
212\r
213**/\r
748edcd5
PB
214EFI_STATUS\r
215EdbGetMemoryAddressCount (\r
216 IN CHAR16 *CommandArg,\r
217 IN UINTN *Address,\r
218 IN UINTN *Count\r
219 )\r
748edcd5
PB
220{\r
221 CHAR16 *CommandStr;\r
222 UINTN MemAddress;\r
223 EFI_STATUS Status;\r
224\r
225 //\r
226 // Get Address\r
227 //\r
228 CommandStr = CommandArg;\r
229 if (CommandStr == NULL) {\r
230 EDBPrint (L"Memory: Address error!\n");\r
231 return EFI_INVALID_PARAMETER;\r
232 }\r
233 Status = Symboltoi (CommandStr, &MemAddress);\r
234 if (EFI_ERROR (Status)) {\r
235 if (Status == EFI_NOT_FOUND) {\r
236 MemAddress = Xtoi(CommandStr);\r
237 } else {\r
238 //\r
239 // Something wrong, let Symboltoi print error info.\r
240 //\r
241 EDBPrint (L"Command Argument error!\n");\r
242 return EFI_INVALID_PARAMETER;\r
243 }\r
244 }\r
245 *Address = MemAddress;\r
246\r
247 //\r
248 // Get Count\r
249 //\r
250 CommandStr = StrGetNextTokenLine (L" ");\r
251 if (CommandStr == NULL) {\r
252 *Count = 1;\r
253 } else {\r
254 *Count = Xtoi(CommandStr);\r
255 }\r
256\r
257 //\r
258 // Done\r
259 //\r
260 return EFI_SUCCESS;\r
261}\r
262\r
e8a5ac7c
DB
263/**\r
264\r
265 Get memory address and value.\r
266\r
267 @param CommandArg - The argument for this command\r
268 @param Address - Memory Address\r
269 @param Value - Memory Value\r
270\r
271 @retval EFI_SUCCESS - memory address and value are got\r
272 @retval EFI_INVALID_PARAMETER - something wrong\r
273\r
274**/\r
748edcd5
PB
275EFI_STATUS\r
276EdbGetMemoryAddressValue (\r
277 IN CHAR16 *CommandArg,\r
278 IN UINTN *Address,\r
279 IN UINT64 *Value\r
280 )\r
748edcd5
PB
281{\r
282 CHAR16 *CommandStr;\r
283 UINTN MemAddress;\r
284 EFI_STATUS Status;\r
285\r
286 //\r
287 // Get Address\r
288 //\r
289 CommandStr = CommandArg;\r
290 if (CommandStr == NULL) {\r
291 EDBPrint (L"Memory: Address error!\n");\r
292 return EFI_INVALID_PARAMETER;\r
293 }\r
294 Status = Symboltoi (CommandStr, &MemAddress);\r
295 if (EFI_ERROR (Status)) {\r
296 if (Status == EFI_NOT_FOUND) {\r
297 MemAddress = Xtoi(CommandStr);\r
298 } else {\r
299 //\r
300 // Something wrong, let Symboltoi print error info.\r
301 //\r
302 EDBPrint (L"Command Argument error!\n");\r
303 return EFI_INVALID_PARAMETER;\r
304 }\r
305 }\r
306 *Address = MemAddress;\r
307\r
308 //\r
309 // Get Value\r
310 //\r
311 CommandStr = StrGetNextTokenLine (L" ");\r
312 if (CommandStr == NULL) {\r
313 EDBPrint (L"Memory: Value error!\n");\r
314 return EFI_INVALID_PARAMETER;\r
315 }\r
316 *Value = LXtoi(CommandStr);\r
317\r
318 //\r
319 // Done\r
320 //\r
321 return EFI_SUCCESS;\r
322}\r
323\r
e8a5ac7c
DB
324/**\r
325\r
326 Display memory.\r
327\r
328 @param CommandArg - The argument for this command\r
329 @param Width - Memory Width\r
330\r
331 @retval EFI_DEBUG_RETURN - formal return value\r
332\r
333**/\r
748edcd5
PB
334EFI_DEBUG_STATUS\r
335DebuggerMemoryDisplay (\r
336 IN CHAR16 *CommandArg,\r
337 IN EDB_DATA_WIDTH Width\r
338 )\r
748edcd5
PB
339{\r
340 EFI_STATUS Status;\r
341 UINTN Address;\r
342 UINTN Count;\r
343\r
344 //\r
345 // Get memory address and count\r
346 //\r
347 Status = EdbGetMemoryAddressCount (CommandArg, &Address, &Count);\r
348 if (EFI_ERROR(Status)) {\r
349 return EFI_DEBUG_CONTINUE;\r
350 }\r
351\r
352 //\r
353 // Display memory\r
354 //\r
355 EdbDisplayMemory (Address, Count, Width);\r
356\r
357 //\r
358 // Done\r
359 //\r
360 return EFI_DEBUG_CONTINUE;\r
361}\r
362\r
e8a5ac7c
DB
363/**\r
364\r
365 Enter memory.\r
366\r
367 @param CommandArg - The argument for this command\r
368 @param Width - Memory Width\r
369\r
370 @retval EFI_DEBUG_RETURN - formal return value\r
371\r
372**/\r
748edcd5
PB
373EFI_DEBUG_STATUS\r
374DebuggerMemoryEnter (\r
375 IN CHAR16 *CommandArg,\r
376 IN EDB_DATA_WIDTH Width\r
377 )\r
748edcd5
PB
378{\r
379 EFI_STATUS Status;\r
380 UINTN Address;\r
381 UINT64 Value;\r
382\r
383 //\r
384 // Get memory address and value\r
385 //\r
386 Status = EdbGetMemoryAddressValue (CommandArg, &Address, &Value);\r
387 if (EFI_ERROR(Status)) {\r
388 return EFI_DEBUG_CONTINUE;\r
389 }\r
390\r
391 //\r
392 // Enter memory\r
393 //\r
394 EdbEnterMemory (Address, &Value, Width);\r
395\r
396 //\r
397 // Done\r
398 //\r
399 return EFI_DEBUG_CONTINUE;\r
400}\r
401\r
e8a5ac7c
DB
402/**\r
403\r
404 DebuggerCommand - DB.\r
405\r
406 @param CommandArg - The argument for this command\r
407 @param DebuggerPrivate - EBC Debugger private data structure\r
408 @param ExceptionType - Interrupt type.\r
409 @param SystemContext - EBC system context.\r
410\r
411 @retval EFI_DEBUG_RETURN - formal return value\r
412\r
413**/\r
748edcd5
PB
414EFI_DEBUG_STATUS\r
415DebuggerMemoryDB (\r
416 IN CHAR16 *CommandArg,\r
417 IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
418 IN EFI_EXCEPTION_TYPE ExceptionType,\r
419 IN OUT EFI_SYSTEM_CONTEXT SystemContext\r
420 )\r
e8a5ac7c
DB
421{\r
422 return DebuggerMemoryDisplay (CommandArg, EdbWidthUint8);\r
423}\r
748edcd5 424\r
e8a5ac7c 425/**\r
748edcd5 426\r
e8a5ac7c 427 DebuggerCommand - DW.\r
748edcd5 428\r
e8a5ac7c
DB
429 @param CommandArg - The argument for this command\r
430 @param DebuggerPrivate - EBC Debugger private data structure\r
431 @param ExceptionType - Interrupt type.\r
432 @param SystemContext - EBC system context.\r
748edcd5 433\r
e8a5ac7c 434 @retval EFI_DEBUG_RETURN - formal return value\r
748edcd5 435\r
e8a5ac7c 436**/\r
748edcd5
PB
437EFI_DEBUG_STATUS\r
438DebuggerMemoryDW (\r
439 IN CHAR16 *CommandArg,\r
440 IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
441 IN EFI_EXCEPTION_TYPE ExceptionType,\r
442 IN OUT EFI_SYSTEM_CONTEXT SystemContext\r
443 )\r
e8a5ac7c
DB
444{\r
445 return DebuggerMemoryDisplay (CommandArg, EdbWidthUint16);\r
446}\r
748edcd5 447\r
e8a5ac7c 448/**\r
748edcd5 449\r
e8a5ac7c 450 DebuggerCommand - DD.\r
748edcd5 451\r
e8a5ac7c
DB
452 @param CommandArg - The argument for this command\r
453 @param DebuggerPrivate - EBC Debugger private data structure\r
454 @param ExceptionType - Interrupt type.\r
455 @param SystemContext - EBC system context.\r
748edcd5 456\r
e8a5ac7c 457 @retval EFI_DEBUG_RETURN - formal return value\r
748edcd5 458\r
e8a5ac7c 459**/\r
748edcd5
PB
460EFI_DEBUG_STATUS\r
461DebuggerMemoryDD (\r
462 IN CHAR16 *CommandArg,\r
463 IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
464 IN EFI_EXCEPTION_TYPE ExceptionType,\r
465 IN OUT EFI_SYSTEM_CONTEXT SystemContext\r
466 )\r
e8a5ac7c
DB
467{\r
468 return DebuggerMemoryDisplay (CommandArg, EdbWidthUint32);\r
469}\r
748edcd5 470\r
e8a5ac7c 471/**\r
748edcd5 472\r
e8a5ac7c 473 DebuggerCommand - DQ.\r
748edcd5 474\r
e8a5ac7c
DB
475 @param CommandArg - The argument for this command\r
476 @param DebuggerPrivate - EBC Debugger private data structure\r
477 @param ExceptionType - Exception type.\r
478 @param SystemContext - EBC system context.\r
748edcd5 479\r
e8a5ac7c 480 @retval EFI_DEBUG_RETURN - formal return value\r
748edcd5 481\r
e8a5ac7c 482**/\r
748edcd5
PB
483EFI_DEBUG_STATUS\r
484DebuggerMemoryDQ (\r
485 IN CHAR16 *CommandArg,\r
486 IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
487 IN EFI_EXCEPTION_TYPE ExceptionType,\r
488 IN OUT EFI_SYSTEM_CONTEXT SystemContext\r
489 )\r
e8a5ac7c
DB
490{\r
491 return DebuggerMemoryDisplay (CommandArg, EdbWidthUint64);\r
492}\r
748edcd5 493\r
e8a5ac7c 494/**\r
748edcd5 495\r
e8a5ac7c 496 DebuggerCommand - EB.\r
748edcd5 497\r
e8a5ac7c
DB
498 @param CommandArg - The argument for this command\r
499 @param DebuggerPrivate - EBC Debugger private data structure\r
500 @param ExceptionType - Exception type.\r
501 @param SystemContext - EBC system context.\r
748edcd5 502\r
e8a5ac7c 503 @retval EFI_DEBUG_RETURN - formal return value\r
748edcd5 504\r
e8a5ac7c 505**/\r
748edcd5
PB
506EFI_DEBUG_STATUS\r
507DebuggerMemoryEB (\r
508 IN CHAR16 *CommandArg,\r
509 IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
510 IN EFI_EXCEPTION_TYPE ExceptionType,\r
511 IN OUT EFI_SYSTEM_CONTEXT SystemContext\r
512 )\r
e8a5ac7c
DB
513{\r
514 return DebuggerMemoryEnter (CommandArg, EdbWidthUint8);\r
515}\r
748edcd5 516\r
e8a5ac7c 517/**\r
748edcd5 518\r
e8a5ac7c 519 DebuggerCommand - EW.\r
748edcd5 520\r
e8a5ac7c
DB
521 @param CommandArg - The argument for this command\r
522 @param DebuggerPrivate - EBC Debugger private data structure\r
523 @param ExceptionType - Interrupt type.\r
524 @param SystemContext - EBC system context.\r
748edcd5 525\r
e8a5ac7c 526 @retval EFI_DEBUG_RETURN - formal return value\r
748edcd5 527\r
e8a5ac7c 528**/\r
748edcd5
PB
529EFI_DEBUG_STATUS\r
530DebuggerMemoryEW (\r
531 IN CHAR16 *CommandArg,\r
532 IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
533 IN EFI_EXCEPTION_TYPE ExceptionType,\r
534 IN OUT EFI_SYSTEM_CONTEXT SystemContext\r
535 )\r
e8a5ac7c
DB
536{\r
537 return DebuggerMemoryEnter (CommandArg, EdbWidthUint16);\r
538}\r
748edcd5 539\r
e8a5ac7c 540/**\r
748edcd5 541\r
e8a5ac7c 542 DebuggerCommand - ED.\r
748edcd5 543\r
e8a5ac7c
DB
544 @param CommandArg - The argument for this command\r
545 @param DebuggerPrivate - EBC Debugger private data structure\r
546 @param ExceptionType - Exception type.\r
547 @param SystemContext - EBC system context.\r
748edcd5 548\r
e8a5ac7c 549 @retval EFI_DEBUG_RETURN - formal return value\r
748edcd5 550\r
e8a5ac7c 551**/\r
748edcd5
PB
552EFI_DEBUG_STATUS\r
553DebuggerMemoryED (\r
554 IN CHAR16 *CommandArg,\r
555 IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
556 IN EFI_EXCEPTION_TYPE ExceptionType,\r
557 IN OUT EFI_SYSTEM_CONTEXT SystemContext\r
558 )\r
e8a5ac7c
DB
559{\r
560 return DebuggerMemoryEnter (CommandArg, EdbWidthUint32);\r
561}\r
748edcd5 562\r
e8a5ac7c 563/**\r
748edcd5 564\r
e8a5ac7c 565 DebuggerCommand - EQ.\r
748edcd5 566\r
e8a5ac7c
DB
567 @param CommandArg - The argument for this command\r
568 @param DebuggerPrivate - EBC Debugger private data structure\r
569 @param ExceptionType - Exception type.\r
570 @param SystemContext - EBC system context.\r
748edcd5 571\r
e8a5ac7c 572 @retval EFI_DEBUG_RETURN - formal return value\r
748edcd5 573\r
e8a5ac7c 574**/\r
748edcd5
PB
575EFI_DEBUG_STATUS\r
576DebuggerMemoryEQ (\r
577 IN CHAR16 *CommandArg,\r
578 IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
579 IN EFI_EXCEPTION_TYPE ExceptionType,\r
580 IN OUT EFI_SYSTEM_CONTEXT SystemContext\r
581 )\r
748edcd5
PB
582{\r
583 return DebuggerMemoryEnter (CommandArg, EdbWidthUint64);\r
584}\r