]> git.proxmox.com Git - mirror_edk2.git/blame - QuarkSocPkg/QuarkNorthCluster/Smm/DxeSmm/QncSmmDispatcher/QNCSmm.h
QuarkSocPkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / QuarkSocPkg / QuarkNorthCluster / Smm / DxeSmm / QncSmmDispatcher / QNCSmm.h
CommitLineData
9b6bbcdb
MK
1/** @file\r
2Prototypes and defines for the QNC SMM Dispatcher.\r
3\r
29f169d1 4Copyright (c) 2013-2016 Intel Corporation.\r
9b6bbcdb 5\r
c9f231d0 6SPDX-License-Identifier: BSD-2-Clause-Patent\r
9b6bbcdb
MK
7\r
8**/\r
9\r
10#ifndef QNC_SMM_H\r
11#define QNC_SMM_H\r
12\r
13//\r
14// Include common header file for this module.\r
15//\r
16#include "CommonHeader.h"\r
17\r
18#include "QNCSmmRegisters.h"\r
19\r
20extern EFI_HANDLE mQNCSmmDispatcherImageHandle;\r
21\r
22\r
23//\r
24// /////////////////////////////////////////////////////////////////////////////\r
25// SUPPORTED PROTOCOLS\r
26//\r
27\r
28//\r
29// Define an enumeration for all the supported protocols\r
30//\r
31typedef enum {\r
32 // UsbType, DELETE:on QuarkNcSocId, there is no usb smi supported\r
33 SxType,\r
34 SwType,\r
35 GpiType,\r
36 QNCnType,\r
37 PowerButtonType,\r
38 PeriodicTimerType,\r
39 NUM_PROTOCOLS\r
40} QNC_SMM_PROTOCOL_TYPE;\r
41\r
42//\r
43// /////////////////////////////////////////////////////////////////////////////\r
44// SPECIFYING A REGISTER\r
45// We want a general way of referring to addresses. For this case, we'll only\r
46// need addresses in the ACPI table (and the TCO entries within the ACPI table).\r
47// However, it's interesting to consider what it would take to support other types\r
48// of addresses. To address Will's concern, I think it prudent to accommodate it\r
49// early on in the design.\r
50//\r
51// Addresses we need to consider:\r
52//\r
53// Type: Required:\r
54// I/O Yes\r
55// ACPI (special case of I/O) Only if we want to\r
56// TCO (special case of ACPI) Only if we want to\r
57// Memory (or Memory Mapped I/O) Only if we want to\r
58// PCI Yes, for BiosWp\r
59//\r
60typedef enum {\r
61 //\r
62 // IO_ADDR_TYPE, // unimplemented\r
63 //\r
64 ACPI_ADDR_TYPE,\r
65 GPE_ADDR_TYPE,\r
66 //\r
67 // MEMORY_ADDR_TYPE, // unimplemented\r
68 //\r
69 MEMORY_MAPPED_IO_ADDRESS_TYPE,\r
70 PCI_ADDR_TYPE,\r
71 NUM_ADDR_TYPES, // count of items in this enum\r
72 QNC_SMM_ADDR_TYPE_NULL = -1 // sentinel to indicate NULL or to signal end of arrays\r
73} ADDR_TYPE;\r
74\r
75//\r
76// Assumption: 32-bits -- enum's evaluate to integer\r
77// Assumption: This code will only run on IA-32. Justification: IA-64 doesn't have SMIs.\r
78// We don't have to worry about 64-bit addresses.\r
79// Typedef the size of addresses in case the numbers I'm using are wrong or in case\r
80// this changes. This is a good idea because PCI_ADDR will change, for example, when\r
81// we add support for PciExpress.\r
82//\r
83typedef UINT16 IO_ADDR;\r
84typedef IO_ADDR ACPI_ADDR; // can omit\r
85typedef IO_ADDR GPE_ADDR; // can omit\r
86typedef IO_ADDR TCO_ADDR; // can omit\r
87typedef VOID *MEM_ADDR;\r
88typedef MEM_ADDR MEMORY_MAPPED_IO_ADDRESS;\r
89typedef union {\r
90 UINT32 Raw;\r
91 struct {\r
92 UINT8 Reg;\r
93 UINT8 Fnc;\r
94 UINT8 Dev;\r
95 UINT8 Bus;\r
96 } Fields;\r
97} PCI_ADDR;\r
98\r
99typedef struct {\r
100 ADDR_TYPE Type;\r
101 union {\r
102 //\r
103 // used to initialize during declaration/definition\r
104 //\r
105 UINTN raw;\r
106\r
107 //\r
108 // used to access useful data\r
109 //\r
110 IO_ADDR io;\r
111 ACPI_ADDR acpi;\r
112 GPE_ADDR gpe;\r
113 TCO_ADDR tco;\r
114 MEM_ADDR mem;\r
115 MEMORY_MAPPED_IO_ADDRESS Mmio;\r
116 PCI_ADDR pci;\r
117\r
118 } Data;\r
119\r
120} QNC_SMM_ADDRESS;\r
121//\r
122// Assumption: total size is 64 bits (32 for type and 32 for data) or 8 bytes\r
123//\r
124#define EFI_PCI_ADDRESS_PORT 0xcf8\r
125#define EFI_PCI_DATA_PORT 0xcfc\r
126\r
127//\r
128// /////////////////////////////////////////////////////////////////////////////\r
129// SPECIFYING BITS WITHIN A REGISTER\r
130// Here's a struct that helps us specify a source or enable bit.\r
131//\r
132typedef struct {\r
133 QNC_SMM_ADDRESS Reg;\r
134 UINT8 SizeInBytes; // of the register\r
135 UINT8 Bit;\r
136} QNC_SMM_BIT_DESC;\r
137\r
138//\r
139// Sometimes, we'll have bit descriptions that are unused. It'd be great to have a\r
140// way to easily identify them:\r
141//\r
142#define IS_BIT_DESC_NULL(BitDesc) ((BitDesc).Reg.Type == QNC_SMM_ADDR_TYPE_NULL) // "returns" true when BitDesc is NULL\r
143#define NULL_THIS_BIT_DESC(BitDesc) ((BitDesc).Reg.Type = QNC_SMM_ADDR_TYPE_NULL) // will "return" an integer w/ value of 0\r
144#define NULL_BIT_DESC_INITIALIZER \\r
145 { \\r
146 { \\r
147 QNC_SMM_ADDR_TYPE_NULL, \\r
148 { \\r
149 0 \\r
150 } \\r
151 }, \\r
152 0, 0 \\r
153 }\r
154//\r
155// I'd like a type to specify the callback's Sts & En bits because they'll\r
156// be commonly used together:\r
157//\r
158#define NUM_EN_BITS 2\r
159#define NUM_STS_BITS 1\r
160\r
161//\r
162// Flags\r
163//\r
164typedef UINT8 QNC_SMM_SOURCE_FLAGS;\r
165\r
166//\r
167// Flags required today\r
168//\r
169#define QNC_SMM_NO_FLAGS 0\r
170#define QNC_SMM_SCI_EN_DEPENDENT (BIT0)\r
171#define QNC_SMM_CLEAR_WITH_ZERO (BIT6)\r
172\r
173//\r
174// Flags that might be required tomorrow\r
175// #define QNC_SMM_CLEAR_WITH_ONE 2 // may need to support bits that clear by writing 0\r
176// #define QNC_SMM_MULTIBIT_FIELD 3 // may need to support status/enable fields 2 bits wide\r
177//\r
178typedef struct {\r
179 QNC_SMM_SOURCE_FLAGS Flags;\r
180 QNC_SMM_BIT_DESC En[NUM_EN_BITS];\r
181 QNC_SMM_BIT_DESC Sts[NUM_STS_BITS];\r
182} QNC_SMM_SOURCE_DESC;\r
183//\r
184// 31 bytes, I think\r
185//\r
186#define NULL_SOURCE_DESC_INITIALIZER \\r
187 { \\r
188 QNC_SMM_NO_FLAGS, \\r
189 { \\r
190 NULL_BIT_DESC_INITIALIZER, NULL_BIT_DESC_INITIALIZER \\r
191 }, \\r
192 { \\r
193 NULL_BIT_DESC_INITIALIZER \\r
194 } \\r
195 }\r
196\r
197//\r
198// /////////////////////////////////////////////////////////////////////////////\r
199// CHILD CONTEXTS\r
200// To keep consistent w/ the architecture, we'll need to provide the context\r
201// to the child when we call its callback function. After talking with Will,\r
202// we agreed that we'll need functions to "dig" the context out of the hardware\r
203// in many cases (Sx, Trap, Gpi, etc), and we'll need a function to compare those\r
204// contexts to prevent unnecessary dispatches. I'd like a general type for these\r
205// "GetContext" functions, so I'll need a union of all the protocol contexts for\r
206// our internal use:\r
207//\r
208typedef union {\r
209 //\r
210 // (in no particular order)\r
211 //\r
212 EFI_SMM_ICHN_REGISTER_CONTEXT QNCn;\r
213 EFI_SMM_SX_REGISTER_CONTEXT Sx;\r
214 EFI_SMM_PERIODIC_TIMER_REGISTER_CONTEXT PeriodicTimer;\r
215 EFI_SMM_SW_REGISTER_CONTEXT Sw;\r
216 EFI_SMM_POWER_BUTTON_REGISTER_CONTEXT PowerButton;\r
217 // EFI_SMM_USB_REGISTER_CONTEXT Usb; DELETE:on QuarkNcSocId, there is no usb smi supported\r
218 EFI_SMM_GPI_REGISTER_CONTEXT Gpi;\r
219} QNC_SMM_CONTEXT;\r
220\r
221typedef union {\r
222 //\r
223 // (in no particular order)\r
224 //\r
225 EFI_SMM_SW_CONTEXT Sw;\r
226 EFI_SMM_PERIODIC_TIMER_CONTEXT PeriodicTimer;\r
227} QNC_SMM_BUFFER;\r
228\r
229//\r
230// Assumption: PeriodicTimer largest at 3x64-bits or 24 bytes\r
231//\r
232typedef struct _DATABASE_RECORD DATABASE_RECORD;\r
233\r
234typedef\r
235VOID\r
236(EFIAPI *GET_CONTEXT) (\r
237 IN DATABASE_RECORD * Record,\r
238 OUT QNC_SMM_CONTEXT * Context\r
239 );\r
240//\r
241// Assumption: the GET_CONTEXT function will be as small and simple as possible.\r
242// Assumption: We don't need to pass in an enumeration for the protocol because each\r
243// GET_CONTEXT function is written for only one protocol.\r
244// We also need a function to compare contexts to see if the child should be dispatched\r
245//\r
246typedef\r
247BOOLEAN\r
248(EFIAPI *CMP_CONTEXT) (\r
249 IN QNC_SMM_CONTEXT * Context1,\r
250 IN QNC_SMM_CONTEXT * Context2\r
251 );\r
252\r
253/*\r
254 Returns: True when contexts are equivalent; False otherwise\r
255*/\r
256\r
257//\r
258// This function is used to get the content of CommBuffer that will be passed\r
259// to Callback function\r
260//\r
261typedef\r
262VOID\r
263(EFIAPI *GET_BUFFER) (\r
264 IN DATABASE_RECORD * Record\r
265 );\r
266\r
267//\r
268// Finally, every protocol will require a "Get Context", "Compare Context"\r
269// and "Get CommBuffer" call, so we may as well wrap that up in a table, too.\r
270//\r
271typedef struct {\r
272 GET_CONTEXT GetContext;\r
273 CMP_CONTEXT CmpContext;\r
274 GET_BUFFER GetBuffer;\r
275} CONTEXT_FUNCTIONS;\r
276\r
277extern CONTEXT_FUNCTIONS ContextFunctions[NUM_PROTOCOLS];\r
278\r
279//\r
280// /////////////////////////////////////////////////////////////////////////////\r
281// MAPPING CONTEXT TO BIT DESCRIPTIONS\r
282// I'd like to have a general approach to mapping contexts to bit descriptions.\r
283// Sometimes, we'll find that we can use table lookups or CONSTant assignments;\r
284// other times, we'll find that we'll need to use a function to perform the mapping.\r
285// If we define a macro to mask that process, we'll never have to change the code.\r
286// I don't know if this is desirable or not -- if it isn't, then we can get rid\r
287// of the macros and just use function calls or variable assignments. Doesn't matter\r
288// to me.\r
289// Mapping complex contexts requires a function\r
290//\r
291// DELETE:on QuarkNcSocId, there is no usb smi supported\r
292//EFI_STATUS\r
293//EFIAPI\r
294//MapUsbToSrcDesc (\r
295// IN QNC_SMM_CONTEXT *RegisterContext,\r
296// OUT QNC_SMM_SOURCE_DESC *SrcDesc\r
297// )\r
298/*++\r
299\r
300Routine Description:\r
301\r
302 GC_TODO: Add function description\r
303\r
304Arguments:\r
305\r
306 RegisterContext - GC_TODO: add argument description\r
307 SrcDesc - GC_TODO: add argument description\r
308\r
309Returns:\r
310\r
311 GC_TODO: add return values\r
312\r
313--*/\r
314;\r
315\r
316EFI_STATUS\r
317MapPeriodicTimerToSrcDesc (\r
318 IN QNC_SMM_CONTEXT *RegisterContext,\r
319 OUT QNC_SMM_SOURCE_DESC *SrcDesc\r
320 )\r
321/*++\r
322\r
323Routine Description:\r
324\r
325 GC_TODO: Add function description\r
326\r
327Arguments:\r
328\r
329 RegisterContext - GC_TODO: add argument description\r
330 SrcDesc - GC_TODO: add argument description\r
331\r
332Returns:\r
333\r
334 GC_TODO: add return values\r
335\r
336--*/\r
337;\r
338\r
339//\r
340// Mapping simple contexts can be done by assignment or lookup table\r
341//\r
342extern CONST QNC_SMM_SOURCE_DESC SW_SOURCE_DESC;\r
343extern CONST QNC_SMM_SOURCE_DESC SX_SOURCE_DESC;\r
344\r
345//\r
346// With the changes we've made to the protocols, we can now use table\r
347// lookups for the following protocols:\r
348//\r
349extern CONST QNC_SMM_SOURCE_DESC GPI_SOURCE_DESC;\r
350\r
351extern QNC_SMM_SOURCE_DESC QNCN_SOURCE_DESCS[NUM_ICHN_TYPES];\r
352\r
353\r
354//\r
355// For QNCx, APMC is UINT8 port, so the MAX SWI Value is 0xFF.\r
356//\r
357#define MAXIMUM_SWI_VALUE 0xFF\r
358\r
359\r
360//\r
361// Open: Need to make sure this kind of type cast will actually work.\r
362// May need an intermediate form w/ two VOID* arguments. I'll figure\r
363// that out when I start compiling.\r
364\r
365///////////////////////////////////////////////////////////////////////////////\r
366//\r
367typedef\r
368VOID\r
369(EFIAPI *QNC_SMM_CLEAR_SOURCE) (\r
370 QNC_SMM_SOURCE_DESC * SrcDesc\r
371 );\r
372\r
373//\r
374// /////////////////////////////////////////////////////////////////////////////\r
375// "DATABASE" RECORD\r
376// Linked list data structures\r
377//\r
378#define DATABASE_RECORD_SIGNATURE SIGNATURE_32 ('D', 'B', 'R', 'C')\r
379\r
380struct _DATABASE_RECORD {\r
381 UINT32 Signature;\r
382 LIST_ENTRY Link;\r
383\r
5f82e02a
MK
384 BOOLEAN Processed;\r
385\r
9b6bbcdb
MK
386 //\r
387 // Status and Enable bit description\r
388 //\r
389 QNC_SMM_SOURCE_DESC SrcDesc;\r
390\r
391 //\r
392 // Callback function\r
393 //\r
394 EFI_SMM_HANDLER_ENTRY_POINT2 Callback;\r
29f169d1
MK
395 QNC_SMM_CONTEXT ChildContext;\r
396 VOID *CallbackContext;\r
397 QNC_SMM_BUFFER CommBuffer;\r
9b6bbcdb
MK
398 UINTN BufferSize;\r
399\r
400 //\r
401 // Special handling hooks -- init them to NULL if unused/unneeded\r
402 //\r
403 QNC_SMM_CLEAR_SOURCE ClearSource; // needed for SWSMI timer\r
404 // Functions required to make callback code general\r
405 //\r
406 CONTEXT_FUNCTIONS ContextFunctions;\r
407\r
408 //\r
409 // The protocol that this record dispatches\r
410 //\r
411 QNC_SMM_PROTOCOL_TYPE ProtocolType;\r
412\r
413};\r
414\r
415#define DATABASE_RECORD_FROM_LINK(_record) CR (_record, DATABASE_RECORD, Link, DATABASE_RECORD_SIGNATURE)\r
416#define DATABASE_RECORD_FROM_CONTEXT(_record) CR (_record, DATABASE_RECORD, ChildContext, DATABASE_RECORD_SIGNATURE)\r
417\r
418//\r
419// /////////////////////////////////////////////////////////////////////////////\r
420// HOOKING INTO THE ARCHITECTURE\r
421//\r
422typedef\r
423EFI_STATUS\r
424(EFIAPI *QNC_SMM_GENERIC_REGISTER) (\r
425 IN VOID **This,\r
426 IN VOID *DispatchFunction,\r
427 IN VOID *RegisterContext,\r
428 OUT EFI_HANDLE * DispatchHandle\r
429 );\r
430typedef\r
431EFI_STATUS\r
432(EFIAPI *QNC_SMM_GENERIC_UNREGISTER) (\r
433 IN VOID **This,\r
434 IN EFI_HANDLE DispatchHandle\r
435 );\r
436\r
437//\r
438// Define a memory "stamp" equivalent in size and function to most of the protocols\r
439//\r
440typedef struct {\r
441 QNC_SMM_GENERIC_REGISTER Register;\r
442 QNC_SMM_GENERIC_UNREGISTER Unregister;\r
443 UINTN Extra1;\r
444 UINTN Extra2; // may not need this one\r
445} QNC_SMM_GENERIC_PROTOCOL;\r
446\r
447EFI_STATUS\r
448QNCSmmCoreRegister (\r
449 IN QNC_SMM_GENERIC_PROTOCOL *This,\r
450 IN EFI_SMM_HANDLER_ENTRY_POINT2 DispatchFunction,\r
451 IN QNC_SMM_CONTEXT *RegisterContext,\r
452 OUT EFI_HANDLE *DispatchHandle\r
453 )\r
454/*++\r
455\r
456Routine Description:\r
457\r
458 GC_TODO: Add function description\r
459\r
460Arguments:\r
461\r
462 This - GC_TODO: add argument description\r
463 DispatchFunction - GC_TODO: add argument description\r
464 RegisterContext - GC_TODO: add argument description\r
465 DispatchHandle - GC_TODO: add argument description\r
466\r
467Returns:\r
468\r
469 GC_TODO: add return values\r
470\r
471--*/\r
472;\r
473EFI_STATUS\r
474QNCSmmCoreUnRegister (\r
475 IN QNC_SMM_GENERIC_PROTOCOL *This,\r
476 IN EFI_HANDLE DispatchHandle\r
477 )\r
478/*++\r
479\r
480Routine Description:\r
481\r
482 GC_TODO: Add function description\r
483\r
484Arguments:\r
485\r
486 This - GC_TODO: add argument description\r
487 DispatchHandle - GC_TODO: add argument description\r
488\r
489Returns:\r
490\r
491 GC_TODO: add return values\r
492\r
493--*/\r
494;\r
495\r
496typedef union {\r
497 QNC_SMM_GENERIC_PROTOCOL Generic;\r
498\r
499 // EFI_SMM_USB_DISPATCH2_PROTOCOL Usb; DELETE:on QuarkNcSocId, there is no usb smi supported\r
500 EFI_SMM_SX_DISPATCH2_PROTOCOL Sx;\r
501 EFI_SMM_SW_DISPATCH2_PROTOCOL Sw;\r
502 EFI_SMM_GPI_DISPATCH2_PROTOCOL Gpi;\r
503 EFI_SMM_ICHN_DISPATCH2_PROTOCOL QNCn;\r
504 EFI_SMM_POWER_BUTTON_DISPATCH2_PROTOCOL PowerButton;\r
505 EFI_SMM_PERIODIC_TIMER_DISPATCH2_PROTOCOL PeriodicTimer;\r
506} QNC_SMM_PROTOCOL;\r
507\r
508//\r
509// Define a structure to help us identify the generic protocol\r
510//\r
511#define PROTOCOL_SIGNATURE SIGNATURE_32 ('P', 'R', 'O', 'T')\r
512\r
513typedef struct {\r
514 UINTN Signature;\r
515\r
516 QNC_SMM_PROTOCOL_TYPE Type;\r
517 EFI_GUID *Guid;\r
518 QNC_SMM_PROTOCOL Protocols;\r
519} QNC_SMM_QUALIFIED_PROTOCOL;\r
520\r
521#define QUALIFIED_PROTOCOL_FROM_GENERIC(_generic) \\r
522 CR (_generic, \\r
523 QNC_SMM_QUALIFIED_PROTOCOL, \\r
524 Protocols, \\r
525 PROTOCOL_SIGNATURE \\r
526 )\r
527\r
528//\r
529// Create private data for the protocols that we'll publish\r
530//\r
531typedef struct {\r
532 LIST_ENTRY CallbackDataBase;\r
533 EFI_HANDLE SmiHandle;\r
534 EFI_HANDLE InstallMultProtHandle;\r
535 QNC_SMM_QUALIFIED_PROTOCOL Protocols[NUM_PROTOCOLS];\r
536} PRIVATE_DATA;\r
537\r
538extern PRIVATE_DATA mPrivateData;\r
539\r
540//\r
541// /////////////////////////////////////////////////////////////////////////////\r
542//\r
543VOID\r
544EFIAPI\r
545SwGetContext (\r
546 IN DATABASE_RECORD *Record,\r
547 OUT QNC_SMM_CONTEXT *Context\r
548 )\r
549/*++\r
550\r
551Routine Description:\r
552\r
553 GC_TODO: Add function description\r
554\r
555Arguments:\r
556\r
557 Record - GC_TODO: add argument description\r
558 Context - GC_TODO: add argument description\r
559\r
560Returns:\r
561\r
562 GC_TODO: add return values\r
563\r
564--*/\r
565;\r
566\r
567BOOLEAN\r
568EFIAPI\r
569SwCmpContext (\r
570 IN QNC_SMM_CONTEXT *Context1,\r
571 IN QNC_SMM_CONTEXT *Context2\r
572 )\r
573/*++\r
574\r
575Routine Description:\r
576\r
577 GC_TODO: Add function description\r
578\r
579Arguments:\r
580\r
581 Context1 - GC_TODO: add argument description\r
582 Context2 - GC_TODO: add argument description\r
583\r
584Returns:\r
585\r
586 GC_TODO: add return values\r
587\r
588--*/\r
589;\r
590\r
591VOID\r
592SwGetBuffer (\r
593 IN DATABASE_RECORD * Record\r
594 )\r
595/*++\r
596\r
597Routine Description:\r
598\r
599 GC_TODO: Add function description\r
600\r
601Arguments:\r
602\r
603 Record - GC_TODO: add argument description\r
604\r
605Returns:\r
606\r
607 GC_TODO: add return values\r
608\r
609--*/\r
610;\r
611\r
612VOID\r
613EFIAPI\r
614SxGetContext (\r
615 IN DATABASE_RECORD *Record,\r
616 OUT QNC_SMM_CONTEXT *Context\r
617 )\r
618/*++\r
619\r
620Routine Description:\r
621\r
622 GC_TODO: Add function description\r
623\r
624Arguments:\r
625\r
626 Record - GC_TODO: add argument description\r
627 Context - GC_TODO: add argument description\r
628\r
629Returns:\r
630\r
631 GC_TODO: add return values\r
632\r
633--*/\r
634;\r
635\r
636BOOLEAN\r
637EFIAPI\r
638SxCmpContext (\r
639 IN QNC_SMM_CONTEXT *Context1,\r
640 IN QNC_SMM_CONTEXT *Context2\r
641 )\r
642/*++\r
643\r
644Routine Description:\r
645\r
646 GC_TODO: Add function description\r
647\r
648Arguments:\r
649\r
650 Context1 - GC_TODO: add argument description\r
651 Context2 - GC_TODO: add argument description\r
652\r
653Returns:\r
654\r
655 GC_TODO: add return values\r
656\r
657--*/\r
658;\r
659\r
660VOID\r
661EFIAPI\r
662PeriodicTimerGetContext (\r
663 IN DATABASE_RECORD *Record,\r
664 OUT QNC_SMM_CONTEXT *Context\r
665 )\r
666/*++\r
667\r
668Routine Description:\r
669\r
670 GC_TODO: Add function description\r
671\r
672Arguments:\r
673\r
674 Record - GC_TODO: add argument description\r
675 Context - GC_TODO: add argument description\r
676\r
677Returns:\r
678\r
679 GC_TODO: add return values\r
680\r
681--*/\r
682;\r
683\r
684BOOLEAN\r
685EFIAPI\r
686PeriodicTimerCmpContext (\r
687 IN QNC_SMM_CONTEXT *Context1,\r
688 IN QNC_SMM_CONTEXT *Context2\r
689 )\r
690/*++\r
691\r
692Routine Description:\r
693\r
694 GC_TODO: Add function description\r
695\r
696Arguments:\r
697\r
698 Context1 - GC_TODO: add argument description\r
699 Context2 - GC_TODO: add argument description\r
700\r
701Returns:\r
702\r
703 GC_TODO: add return values\r
704\r
705--*/\r
706;\r
707\r
708VOID\r
709PeriodicTimerGetBuffer (\r
710 IN DATABASE_RECORD * Record\r
711 )\r
712/*++\r
713\r
714Routine Description:\r
715\r
716 GC_TODO: Add function description\r
717\r
718Arguments:\r
719\r
720 Record - GC_TODO: add argument description\r
721\r
722Returns:\r
723\r
724 GC_TODO: add return values\r
725\r
726--*/\r
727;\r
728\r
729VOID\r
730EFIAPI\r
731PowerButtonGetContext (\r
732 IN DATABASE_RECORD *Record,\r
733 OUT QNC_SMM_CONTEXT *Context\r
734 )\r
735/*++\r
736\r
737Routine Description:\r
738\r
739 GC_TODO: Add function description\r
740\r
741Arguments:\r
742\r
743 Record - GC_TODO: add argument description\r
744 Context - GC_TODO: add argument description\r
745\r
746Returns:\r
747\r
748 GC_TODO: add return values\r
749\r
750--*/\r
751;\r
752\r
753BOOLEAN\r
754EFIAPI\r
755PowerButtonCmpContext (\r
756 IN QNC_SMM_CONTEXT *Context1,\r
757 IN QNC_SMM_CONTEXT *Context2\r
758 )\r
759/*++\r
760\r
761Routine Description:\r
762\r
763 GC_TODO: Add function description\r
764\r
765Arguments:\r
766\r
767 Context1 - GC_TODO: add argument description\r
768 Context2 - GC_TODO: add argument description\r
769\r
770Returns:\r
771\r
772 GC_TODO: add return values\r
773\r
774--*/\r
775;\r
776\r
777//\r
778// /////////////////////////////////////////////////////////////////////////////\r
779//\r
780VOID\r
781EFIAPI\r
782QNCSmmPeriodicTimerClearSource (\r
783 QNC_SMM_SOURCE_DESC *SrcDesc\r
784 )\r
785/*++\r
786\r
787Routine Description:\r
788\r
789 GC_TODO: Add function description\r
790\r
791Arguments:\r
792\r
793 SrcDesc - GC_TODO: add argument description\r
794\r
795Returns:\r
796\r
797 GC_TODO: add return values\r
798\r
799--*/\r
800;\r
801\r
802EFI_STATUS\r
803QNCSmmPeriodicTimerDispatchGetNextShorterInterval (\r
804 IN CONST EFI_SMM_PERIODIC_TIMER_DISPATCH2_PROTOCOL *This,\r
805 IN OUT UINT64 **SmiTickInterval\r
806 )\r
807/*++\r
808\r
809Routine Description:\r
810\r
811 GC_TODO: Add function description\r
812\r
813Arguments:\r
814\r
815 This - GC_TODO: add argument description\r
816 SmiTickInterval - GC_TODO: add argument description\r
817\r
818Returns:\r
819\r
820 GC_TODO: add return values\r
821\r
822--*/\r
823;\r
824\r
825VOID\r
826QNCSmmSxGoToSleep (\r
827 VOID\r
828 )\r
829/*++\r
830\r
831Routine Description:\r
832\r
833 GC_TODO: Add function description\r
834\r
835Arguments:\r
836\r
837 None\r
838\r
839Returns:\r
840\r
841 GC_TODO: add return values\r
842\r
843--*/\r
844;\r
845\r
846VOID\r
847EFIAPI\r
848QNCSmmQNCnClearSource (\r
849 QNC_SMM_SOURCE_DESC *SrcDesc\r
850 )\r
851/*++\r
852\r
853Routine Description:\r
854\r
855 GC_TODO: Add function description\r
856\r
857Arguments:\r
858\r
859 SrcDesc - GC_TODO: add argument description\r
860\r
861Returns:\r
862\r
863 GC_TODO: add return values\r
864\r
865--*/\r
866;\r
867\r
868#endif\r