VirtualBox

Ignore:
Timestamp:
May 19, 2009 11:12:55 PM (16 years ago)
Author:
vboxsync
Message:

HGSMI: post host VBVA commands to display; Video HW Accel: mechanism for passing/processing commands to framebuffer

Location:
trunk/src/VBox/Additions/WINNT/Graphics/Miniport
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideo.cpp

    r19711 r19844  
    18751875            break;
    18761876        }
     1877        case IOCTL_VIDEO_HGSMI_QUERY_CALLBACKS:
     1878        {
     1879            dprintf(("VBoxVideo::VBoxVideoStartIO: IOCTL_VIDEO_HGSMI_QUERY_CALLBACKS\n"));
     1880
     1881            if (RequestPacket->OutputBufferLength < sizeof(HGSMIQUERYCALLBACKS))
     1882            {
     1883                dprintf(("VBoxVideo::VBoxVideoStartIO: Output buffer too small: %d needed: %d!!!\n",
     1884                         RequestPacket->OutputBufferLength, sizeof(HGSMIQUERYCALLBACKS)));
     1885                RequestPacket->StatusBlock->Status = ERROR_INSUFFICIENT_BUFFER;
     1886                return FALSE;
     1887            }
     1888
     1889            if (!pDevExt->pPrimary->u.primary.bHGSMI)
     1890            {
     1891                RequestPacket->StatusBlock->Status = ERROR_INVALID_FUNCTION;
     1892                return FALSE;
     1893            }
     1894
     1895            HGSMIQUERYCALLBACKS *pInfo = (HGSMIQUERYCALLBACKS *)RequestPacket->OutputBuffer;
     1896
     1897            pInfo->hContext = pDevExt->pPrimary;
     1898            pInfo->pfnCompletionHandler = hgsmiHostCmdHandlerComplete;
     1899
     1900            RequestPacket->StatusBlock->Information = sizeof(HGSMIQUERYCALLBACKS);
     1901            Result = TRUE;
     1902            break;
     1903        }
     1904        case IOCTL_VIDEO_HGSMI_HANDLER_REGISTER:
     1905        {
     1906            dprintf(("VBoxVideo::VBoxVideoStartIO: IOCTL_VIDEO_HGSMI_HANDLER_REGISTER\n"));
     1907
     1908            if (RequestPacket->InputBufferLength< sizeof(HGSMIHANDLERREGISTER))
     1909            {
     1910                dprintf(("VBoxVideo::VBoxVideoStartIO: Output buffer too small: %d needed: %d!!!\n",
     1911                         RequestPacket->InputBufferLength, sizeof(HGSMIHANDLERREGISTER)));
     1912                RequestPacket->StatusBlock->Status = ERROR_INSUFFICIENT_BUFFER;
     1913                return FALSE;
     1914            }
     1915
     1916            if (!pDevExt->pPrimary->u.primary.bHGSMI)
     1917            {
     1918                RequestPacket->StatusBlock->Status = ERROR_INVALID_FUNCTION;
     1919                return FALSE;
     1920            }
     1921
     1922            HGSMIHANDLERREGISTER *pInfo = (HGSMIHANDLERREGISTER *)RequestPacket->InputBuffer;
     1923
     1924            int rc = vboxHGSMIChannelDisplayRegister (pDevExt->pPrimary,
     1925                    pDevExt->iDevice, /* negative would mean this is a miniport handler */
     1926                    pInfo->u8Channel,
     1927                    pInfo->pfnHandler,
     1928                    pInfo->pvHandler);
     1929            if(RT_FAILURE(rc))
     1930            {
     1931                RequestPacket->StatusBlock->Status = ERROR_INVALID_NAME;
     1932            }
     1933            Result = TRUE;
     1934            break;
     1935        }
     1936        case IOCTL_VIDEO_HGSMI_HANDLER_DEREGISTER:
     1937        {
     1938            /* TODO: implement */
     1939            if (!pDevExt->pPrimary->u.primary.bHGSMI)
     1940            {
     1941                RequestPacket->StatusBlock->Status = ERROR_INVALID_FUNCTION;
     1942                return FALSE;
     1943            }
     1944            break;
     1945        }
    18771946#endif /* VBOX_WITH_HGSMI */
    18781947
  • trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideo.h

    r19711 r19844  
    2929#include <VBox/HGSMI/HGSMI.h>
    3030#include <VBox/HGSMI/HGSMIChSetup.h>
     31#include "VBoxHGSMI.h"
    3132#endif /* VBOX_WITH_HGSMI */
    3233
     
    256257                                PVIDEO_POINTER_ATTRIBUTES pointerAttr,
    257258                                uint32_t cbLength);
     259
     260DECLCALLBACK(void) hgsmiHostCmdHandlerComplete (HVBOXVIDEOHGSMI hHGSMI, void * pvMem);
     261
     262int vboxHGSMIChannelDisplayRegister (PDEVICE_EXTENSION PrimaryExtension,
     263        int iDisplay, /* negative would mean this is a miniport handler */
     264        uint8_t u8Channel,
     265        PFNHGSMICHANNELHANDLER pfnChannelHandler,
     266        void *pvChannelHandler);
    258267#endif /* VBOX_WITH_HGSMI */
    259268} /* extern "C" */
  • trunk/src/VBox/Additions/WINNT/Graphics/Miniport/vboxioctl.h

    r17704 r19844  
    2727#ifdef VBOX_WITH_HGSMI
    2828#include <VBox/HGSMI/HGSMI.h>
     29#include "VBoxHGSMI.h"
    2930#endif /* VBOX_WITH_HGSMI */
    3031
     
    4849#define IOCTL_VIDEO_QUERY_HGSMI_INFO \
    4950    CTL_CODE(FILE_DEVICE_VIDEO, 0x430, METHOD_BUFFERED, FILE_ANY_ACCESS)
     51
     52#define IOCTL_VIDEO_HGSMI_QUERY_CALLBACKS \
     53    CTL_CODE(FILE_DEVICE_VIDEO, 0x431, METHOD_BUFFERED, FILE_ANY_ACCESS)
     54
     55#define IOCTL_VIDEO_HGSMI_HANDLER_REGISTER \
     56    CTL_CODE(FILE_DEVICE_VIDEO, 0x432, METHOD_BUFFERED, FILE_ANY_ACCESS)
     57
     58#define IOCTL_VIDEO_HGSMI_HANDLER_DEREGISTER \
     59    CTL_CODE(FILE_DEVICE_VIDEO, 0x433, METHOD_BUFFERED, FILE_ANY_ACCESS)
     60
    5061#endif /* VBOX_WITH_HGSMI */
    5162
     
    109120    uint32_t u32MinVBVABufferSize;
    110121} QUERYHGSMIRESULT;
     122
     123/**
     124 * Data returned by IOCTL_VIDEO_HGSMI_QUERY_CALLBACKS.
     125 *
     126 */
     127typedef struct _HGSMIQUERYCALLBACKS
     128{
     129    HVBOXVIDEOHGSMI hContext;
     130    PFNVBOXVIDEOHGSMICOMPLETION pfnCompletionHandler;
     131} HGSMIQUERYCALLBACKS;
     132
     133/**
     134 * Data returned by IOCTL_VIDEO_HGSMI_HANDLER_REGISTER.
     135 *
     136 */
     137typedef struct _HGSMIHANDLERREGISTER
     138{
     139    PFNHGSMICHANNELHANDLER pfnHandler;
     140    void * pvHandler;
     141    uint8_t u8Channel;
     142} HGSMIHANDLERREGISTER;
     143
     144/**
     145 * Data passed by IOCTL_VIDEO_HGSMI_HANDLER_DEREGISTER.
     146 *
     147 */
     148typedef struct _HGSMIHANDLERDEREGISTER
     149{
     150    PFNHGSMICHANNELHANDLER pfnHandler;
     151    uint8_t u8Channel;
     152} HGSMIHANDLERDEREGISTER;
     153
    111154#endif /* VBOX_WITH_HGSMI */
    112155#pragma pack()
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette