@@ -212,10 +212,6 @@ Return Value:
212212 WdfRequestSetInformation (Request, sizeof (struct KMDF_IOCTL_Response ));
213213 break ;
214214
215- case IOCTL_DVSERVER_GENERAL:
216- // << TODO>>
217- break ;
218-
219215 case IOCTL_DVSERVER_TEST_IMAGE:
220216 status = IoctlRequestPresentFb (pDeviceContext, InputBufferLength, OutputBufferLength, Request, &bytesReturned);
221217 if (status != STATUS_SUCCESS)
@@ -236,6 +232,11 @@ Return Value:
236232 if (status != STATUS_SUCCESS)
237233 return ;
238234 break ;
235+ case IOCTL_DVSERVER_HP_EVENT:
236+ status = IoctlRequestHPEventInfo (pDeviceContext, InputBufferLength, OutputBufferLength, Request, &bytesReturned);
237+ if (status != STATUS_SUCCESS)
238+ return ;
239+ break ;
239240 }
240241
241242 WdfRequestComplete (Request, STATUS_SUCCESS);
@@ -516,7 +517,6 @@ static NTSTATUS IoctlRequestTotalScreens(
516517 const WDFREQUEST Request,
517518 size_t * BytesReturned)
518519{
519- UNREFERENCED_PARAMETER (DeviceContext);
520520 UNREFERENCED_PARAMETER (InputBufferLength);
521521 UNREFERENCED_PARAMETER (OutputBufferLength);
522522 UNREFERENCED_PARAMETER (BytesReturned);
@@ -529,19 +529,61 @@ static NTSTATUS IoctlRequestTotalScreens(
529529 (VioGpuAdapterLite*)(DeviceContext ? DeviceContext->pvDeviceExtension : 0 );
530530
531531 if (!pAdapter) {
532- ERR (" Coudlnt' find adapter\n " );
532+ ERR (" Couldn't find adapter\n " );
533533 return status;
534534 }
535535
536536 status = WdfRequestRetrieveOutputBuffer (Request, 0 , (PVOID*)&mdata, &bufSize);
537537 if (!NT_SUCCESS (status)) {
538538 WdfRequestComplete (Request, STATUS_INSUFFICIENT_RESOURCES);
539539 return status;
540-
541540 }
542541
543542 mdata->total_screens = pAdapter->GetNumScreens ();
544543 WdfRequestSetInformation (Request, sizeof (struct screen_info ));
545544
545+ return STATUS_SUCCESS;
546+ }
547+
548+ static NTSTATUS IoctlRequestHPEventInfo (
549+ const PDEVICE_CONTEXT DeviceContext,
550+ const size_t InputBufferLength,
551+ const size_t OutputBufferLength,
552+ const WDFREQUEST Request,
553+ size_t * BytesReturned)
554+ {
555+ UNREFERENCED_PARAMETER (DeviceContext);
556+ UNREFERENCED_PARAMETER (InputBufferLength);
557+ UNREFERENCED_PARAMETER (OutputBufferLength);
558+ UNREFERENCED_PARAMETER (Request);
559+ UNREFERENCED_PARAMETER (BytesReturned);
560+
561+ NTSTATUS status = STATUS_UNSUCCESSFUL;
562+ struct hp_info * info = NULL ;
563+ size_t bufSize;
564+
565+ status = WdfRequestRetrieveInputBuffer (Request, 0 , (PVOID*)&info, &bufSize);
566+ if (!NT_SUCCESS (status)) {
567+ ERR (" Couldn't retrieve Input buffer\n " );
568+ WdfRequestComplete (Request, STATUS_INSUFFICIENT_RESOURCES);
569+ return status;
570+ }
571+
572+ VioGpuAdapterLite* pAdapter =
573+ (VioGpuAdapterLite*)(DeviceContext ? DeviceContext->pvDeviceExtension : 0 );
574+
575+ if (!pAdapter) {
576+ ERR (" Couldn't find adapter\n " );
577+ return status;
578+ }
579+ status = WdfRequestRetrieveOutputBuffer (Request, 0 , (PVOID*)&info, &bufSize);
580+ if (!NT_SUCCESS (status)) {
581+ WdfRequestComplete (Request, STATUS_INSUFFICIENT_RESOURCES);
582+ return status;
583+ }
584+ pAdapter->SetEvent (info->event );
585+ pAdapter->FillPresentStatus (info);
586+ WdfRequestSetInformation (Request, sizeof (struct hp_info ));
587+
546588 return STATUS_SUCCESS;
547589}
0 commit comments