ed095d76c82255f2a45fc28dc64bae8053326435vboxsync/* $Id$ */
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync/** @file
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync * cardreaderinfs - interface between Usb Card Reader device and its driver.
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync */
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync/*
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync * Copyright (C) 2011-2012 Oracle Corporation
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync *
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync * available from http://www.virtualbox.org. This file is free software;
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync * you can redistribute it and/or modify it under the terms of the GNU
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync * General Public License (GPL) as published by the Free Software
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync *
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync * The contents of this file may alternatively be used under the terms
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync * of the Common Development and Distribution License Version 1.0
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync * VirtualBox OSE distribution, in which case the provisions of the
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync * CDDL are applicable instead of those of the GPL.
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync *
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync * You may elect to license modified versions of this file under the
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync * terms and conditions of either the GPL or the CDDL or both.
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync */
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync#ifndef ___VBox_vmm_pdmcardreaderinfs_h
af861b6ee6dd4a5d3dd0a6dea92ebd9b4af07b0fvboxsync#define ___VBox_vmm_pdmcardreaderinfs_h
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync#include <VBox/types.h>
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync
ed095d76c82255f2a45fc28dc64bae8053326435vboxsynctypedef struct PDMICARDREADER_IO_REQUEST
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync{
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync uint32_t u32Protocol; /* Protocol identifier */
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync uint32_t cbPciLength; /* Protocol Control Information Length */
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync /* 'cbPciLength - 8' bytes of control info may follow. */
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync} PDMICARDREADER_IO_REQUEST;
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync
ed095d76c82255f2a45fc28dc64bae8053326435vboxsynctypedef struct PDMICARDREADER_READERSTATE
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync{
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync char *pszReaderName;
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync uint32_t u32CurrentState; /* Current state of reader at time of call. */
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync uint32_t u32EventState; /* State of reader after state change */
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync uint32_t cbAtr; /* Number of bytes in the returned ATR. */
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync uint8_t au8Atr[36]; /* Atr of inserted card, (extra alignment bytes) */
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync} PDMICARDREADER_READERSTATE;
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync
af861b6ee6dd4a5d3dd0a6dea92ebd9b4af07b0fvboxsync#define PDMICARDREADERDOWN_IID "78d65378-889c-4418-8bc2-7a89a5af2817"
ed095d76c82255f2a45fc28dc64bae8053326435vboxsynctypedef struct PDMICARDREADERDOWN PDMICARDREADERDOWN;
ed095d76c82255f2a45fc28dc64bae8053326435vboxsynctypedef PDMICARDREADERDOWN *PPDMICARDREADERDOWN;
ed095d76c82255f2a45fc28dc64bae8053326435vboxsyncstruct PDMICARDREADERDOWN
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync{
36ef3a8e01635678de349f95c40ec6bdf4ff9a6cvboxsync DECLR3CALLBACKMEMBER(int, pfnEstablishContext,(PPDMICARDREADERDOWN pInterface));
36ef3a8e01635678de349f95c40ec6bdf4ff9a6cvboxsync DECLR3CALLBACKMEMBER(int, pfnConnect,(PPDMICARDREADERDOWN pInterface, void *pvUser, const char *pszCardReaderName,
36ef3a8e01635678de349f95c40ec6bdf4ff9a6cvboxsync uint32_t u32ShareMode, uint32_t u32PreferredProtocols));
36ef3a8e01635678de349f95c40ec6bdf4ff9a6cvboxsync DECLR3CALLBACKMEMBER(int, pfnDisconnect,(PPDMICARDREADERDOWN pInterface, void *pvUser, uint32_t u32Disposition));
36ef3a8e01635678de349f95c40ec6bdf4ff9a6cvboxsync DECLR3CALLBACKMEMBER(int, pfnStatus,(PPDMICARDREADERDOWN pInterface, void *pvUser, uint32_t cchReaderName, uint32_t cbAtrLen));
36ef3a8e01635678de349f95c40ec6bdf4ff9a6cvboxsync DECLR3CALLBACKMEMBER(int, pfnReleaseContext,(PPDMICARDREADERDOWN pInterface, void *pvUser));
36ef3a8e01635678de349f95c40ec6bdf4ff9a6cvboxsync DECLR3CALLBACKMEMBER(int, pfnGetStatusChange,(PPDMICARDREADERDOWN pInterface, void *pvUser, uint32_t u32Timeout,
36ef3a8e01635678de349f95c40ec6bdf4ff9a6cvboxsync PDMICARDREADER_READERSTATE *paReaderStats, uint32_t cReaderStats));
36ef3a8e01635678de349f95c40ec6bdf4ff9a6cvboxsync DECLR3CALLBACKMEMBER(int, pfnBeginTransaction,(PPDMICARDREADERDOWN pInterface, void *pvUser));
636ffa46f2d7dc5fe152170b891ad5cbcbbc9cf5vboxsync DECLR3CALLBACKMEMBER(int, pfnEndTransaction,(PPDMICARDREADERDOWN pInterface, void *pvUser, uint32_t u32Disposition));
36ef3a8e01635678de349f95c40ec6bdf4ff9a6cvboxsync DECLR3CALLBACKMEMBER(int, pfnTransmit,(PPDMICARDREADERDOWN pInterface, void *pvUser,
36ef3a8e01635678de349f95c40ec6bdf4ff9a6cvboxsync const PDMICARDREADER_IO_REQUEST *pioSendRequest,
36ef3a8e01635678de349f95c40ec6bdf4ff9a6cvboxsync const uint8_t *pu8SendBuffer, uint32_t cbSendBuffer, uint32_t cbRecvBuffer));
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync /**
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync * Up level provides pvInBuffer of cbInBuffer bytes to call SCardControl, also it specify bytes it expects to receive
af861b6ee6dd4a5d3dd0a6dea92ebd9b4af07b0fvboxsync * @note Device/driver implementation should copy buffers before execution in
af861b6ee6dd4a5d3dd0a6dea92ebd9b4af07b0fvboxsync * async mode, and both layers shouldn't expect permanent storage for the
af861b6ee6dd4a5d3dd0a6dea92ebd9b4af07b0fvboxsync * buffer.
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync */
36ef3a8e01635678de349f95c40ec6bdf4ff9a6cvboxsync DECLR3CALLBACKMEMBER(int, pfnControl,(PPDMICARDREADERDOWN pInterface, void *pvUser,
636ffa46f2d7dc5fe152170b891ad5cbcbbc9cf5vboxsync uint32_t u32ControlCode, const void *pvInBuffer,
636ffa46f2d7dc5fe152170b891ad5cbcbbc9cf5vboxsync uint32_t cbInBuffer, uint32_t cbOutBuffer));
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync /**
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync * This function ask driver to provide attribute (dwAttribId) and provide limit (cbAttrib) of buffer size for attribute value,
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync * Callback UpGetAttrib returns buffer containing the value and altered size of the buffer.
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync */
36ef3a8e01635678de349f95c40ec6bdf4ff9a6cvboxsync DECLR3CALLBACKMEMBER(int, pfnGetAttr,(PPDMICARDREADERDOWN pInterface, void *pvUser,
36ef3a8e01635678de349f95c40ec6bdf4ff9a6cvboxsync uint32_t u32AttribId, uint32_t cbAttrib));
36ef3a8e01635678de349f95c40ec6bdf4ff9a6cvboxsync DECLR3CALLBACKMEMBER(int, pfnSetAttr,(PPDMICARDREADERDOWN pInterface, void *pvUser,
36ef3a8e01635678de349f95c40ec6bdf4ff9a6cvboxsync uint32_t u32AttribId, const void *pvAttrib, uint32_t cbAttrib));
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync};
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync#define PDMICARDREADERUP_IID "c0d7498e-0635-48ca-aab1-b11b6a55cf7d"
ed095d76c82255f2a45fc28dc64bae8053326435vboxsynctypedef struct PDMICARDREADERUP PDMICARDREADERUP;
ed095d76c82255f2a45fc28dc64bae8053326435vboxsynctypedef PDMICARDREADERUP *PPDMICARDREADERUP;
ed095d76c82255f2a45fc28dc64bae8053326435vboxsyncstruct PDMICARDREADERUP
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync{
636ffa46f2d7dc5fe152170b891ad5cbcbbc9cf5vboxsync DECLR3CALLBACKMEMBER(int, pfnEstablishContext,(PPDMICARDREADERUP pInterface, int32_t lSCardRc));
636ffa46f2d7dc5fe152170b891ad5cbcbbc9cf5vboxsync DECLR3CALLBACKMEMBER(int, pfnStatus,(PPDMICARDREADERUP pInterface, void *pvUser, int32_t lSCardRc,
636ffa46f2d7dc5fe152170b891ad5cbcbbc9cf5vboxsync char *pszReaderName, uint32_t cchReaderName, uint32_t u32CardState,
636ffa46f2d7dc5fe152170b891ad5cbcbbc9cf5vboxsync uint32_t u32Protocol, uint8_t *pu8Atr, uint32_t cbAtr));
636ffa46f2d7dc5fe152170b891ad5cbcbbc9cf5vboxsync DECLR3CALLBACKMEMBER(int, pfnConnect,(PPDMICARDREADERUP pInterface, void *pvUser, int32_t lSCardRc,
636ffa46f2d7dc5fe152170b891ad5cbcbbc9cf5vboxsync uint32_t u32ActiveProtocol));
636ffa46f2d7dc5fe152170b891ad5cbcbbc9cf5vboxsync DECLR3CALLBACKMEMBER(int, pfnDisconnect,(PPDMICARDREADERUP pInterface, void *pvUser, int32_t lSCardRc));
636ffa46f2d7dc5fe152170b891ad5cbcbbc9cf5vboxsync DECLR3CALLBACKMEMBER(int, pfnSetStatusChange,(PPDMICARDREADERUP pInterface, void *pvUser, int32_t lSCardRc,
636ffa46f2d7dc5fe152170b891ad5cbcbbc9cf5vboxsync PDMICARDREADER_READERSTATE *paReaderStats, uint32_t cReaderStats));
636ffa46f2d7dc5fe152170b891ad5cbcbbc9cf5vboxsync DECLR3CALLBACKMEMBER(int, pfnBeginTransaction,(PPDMICARDREADERUP pInterface, void *pvUser, int32_t lSCardRc));
636ffa46f2d7dc5fe152170b891ad5cbcbbc9cf5vboxsync DECLR3CALLBACKMEMBER(int, pfnEndTransaction,(PPDMICARDREADERUP pInterface, void *pvUser, int32_t lSCardRc));
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync /* Note: pioRecvPci stack variable */
636ffa46f2d7dc5fe152170b891ad5cbcbbc9cf5vboxsync DECLR3CALLBACKMEMBER(int, pfnTransmit,(PPDMICARDREADERUP pInterface, void *pvUser, int32_t lSCardRc,
636ffa46f2d7dc5fe152170b891ad5cbcbbc9cf5vboxsync const PDMICARDREADER_IO_REQUEST *pioRecvPci,
636ffa46f2d7dc5fe152170b891ad5cbcbbc9cf5vboxsync uint8_t *pu8RecvBuffer, uint32_t cbRecvBuffer));
636ffa46f2d7dc5fe152170b891ad5cbcbbc9cf5vboxsync DECLR3CALLBACKMEMBER(int, pfnControl,(PPDMICARDREADERUP pInterface, void *pvUser, int32_t lSCardRc,
636ffa46f2d7dc5fe152170b891ad5cbcbbc9cf5vboxsync uint32_t u32ControlCode, void *pvOutBuffer, uint32_t cbOutBuffer));
636ffa46f2d7dc5fe152170b891ad5cbcbbc9cf5vboxsync DECLR3CALLBACKMEMBER(int, pfnGetAttrib,(PPDMICARDREADERUP pInterface, void *pvUser, int32_t lSCardRc,
636ffa46f2d7dc5fe152170b891ad5cbcbbc9cf5vboxsync uint32_t u32AttribId, void *pvAttrib, uint32_t cbAttrib));
636ffa46f2d7dc5fe152170b891ad5cbcbbc9cf5vboxsync DECLR3CALLBACKMEMBER(int, pfnSetAttrib,(PPDMICARDREADERUP pInterface, void *pvUser, int32_t lSCardRc, uint32_t u32AttribId));
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync};
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync
ed095d76c82255f2a45fc28dc64bae8053326435vboxsync#endif
af861b6ee6dd4a5d3dd0a6dea92ebd9b4af07b0fvboxsync