REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the MdePkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
		
			
				
	
	
		
			319 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			319 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   The UEFI Smart Card Reader Protocol provides an abstraction for device to provide
 | |
|   smart card reader support. This protocol is very close to Part 5 of PC/SC workgroup
 | |
|   specifications and provides an API to applications willing to communicate with a
 | |
|   smart card or a smart card reader.
 | |
| 
 | |
|   Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
 | |
|   SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef __SMART_CARD_READER_H__
 | |
| #define __SMART_CARD_READER_H__
 | |
| 
 | |
| #define EFI_SMART_CARD_READER_PROTOCOL_GUID \
 | |
|     { \
 | |
|       0x2a4d1adf, 0x21dc, 0x4b81, {0xa4, 0x2f, 0x8b, 0x8e, 0xe2, 0x38, 0x00, 0x60} \
 | |
|     }
 | |
| 
 | |
| typedef struct _EFI_SMART_CARD_READER_PROTOCOL EFI_SMART_CARD_READER_PROTOCOL;
 | |
| 
 | |
| //
 | |
| // Codes for access mode
 | |
| //
 | |
| #define SCARD_AM_READER  0x0001             // Exclusive access to reader
 | |
| #define SCARD_AM_CARD    0x0002             // Exclusive access to card
 | |
| //
 | |
| // Codes for card action
 | |
| //
 | |
| #define SCARD_CA_NORESET    0x0000          // Don't reset card
 | |
| #define SCARD_CA_COLDRESET  0x0001          // Perform a cold reset
 | |
| #define SCARD_CA_WARMRESET  0x0002          // Perform a warm reset
 | |
| #define SCARD_CA_UNPOWER    0x0003          // Power off the card
 | |
| #define SCARD_CA_EJECT      0x0004          // Eject the card
 | |
| //
 | |
| // Protocol types
 | |
| //
 | |
| #define SCARD_PROTOCOL_UNDEFINED  0x0000
 | |
| #define SCARD_PROTOCOL_T0         0x0001
 | |
| #define SCARD_PROTOCOL_T1         0x0002
 | |
| #define SCARD_PROTOCOL_RAW        0x0004
 | |
| //
 | |
| // Codes for state type
 | |
| //
 | |
| #define SCARD_UNKNOWN   0x0000              /* state is unknown */
 | |
| #define SCARD_ABSENT    0x0001              /* Card is absent */
 | |
| #define SCARD_INACTIVE  0x0002              /* Card is present and not powered*/
 | |
| #define SCARD_ACTIVE    0x0003              /* Card is present and powered */
 | |
| //
 | |
| // Macro to generate a ControlCode & PC/SC part 10 control code
 | |
| //
 | |
| #define SCARD_CTL_CODE(code)  (0x42000000 + (code))
 | |
| #define CM_IOCTL_GET_FEATURE_REQUEST  SCARD_CTL_CODE(3400)
 | |
| 
 | |
| /**
 | |
|   This function requests connection to the smart card or the reader, using the
 | |
|   appropriate reset type and protocol.
 | |
| 
 | |
|   The SCardConnectfunction requests access to the smart card or the reader. Upon
 | |
|   success, it is then possible to call SCardTransmit.
 | |
| 
 | |
|   If AccessMode is set to SCARD_AM_READER, PreferredProtocols must be set to
 | |
|   SCARD_PROTOCOL_UNDEFINED and CardAction to SCARD_CA_NORESET else function
 | |
|   fails with EFI_INVALID_PARAMETER.
 | |
| 
 | |
|   @param[in]  This               Indicates a pointer to the calling context.
 | |
|   @param[in]  AccessMode         Codes of access mode.
 | |
|   @param[in]  CardAction         SCARD_CA_NORESET, SCARD_CA_COLDRESET or
 | |
|                                  SCARD_CA_WARMRESET.
 | |
|   @param[in]  PreferredProtocols Bitmask of acceptable protocols.
 | |
|   @param[out] ActiveProtocol     A flag that indicates the active protocol.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The requested command completed successfully.
 | |
|   @retval EFI_INVALID_PARAMETER  This is NULL
 | |
|   @retval EFI_INVALID_PARAMETER  AccessMode is not valid.
 | |
|   @retval EFI_INVALID_PARAMETER  CardAction is not valid.
 | |
|   @retval EFI_INVALID_PARAMETER  Invalid combination of AccessMode/CardAction/
 | |
|                                  PreferredProtocols.
 | |
|   @retval EFI_NOT_READY          A smart card is inserted but failed to return an ATR.
 | |
|   @retval EFI_UNSUPPORTED        PreferredProtocols does not contain an available
 | |
|                                  protocol to use.
 | |
|   @retval EFI_NO_MEDIA           AccessMode is set to SCARD_AM_CARD but there is
 | |
|                                  no smart card inserted.
 | |
|   @retval EFI_ACCESS_DENIED      Access is already locked by a previous SCardConnectcall.
 | |
|   @retval EFI_DEVICE_ERROR       Any other error condition, typically a reader removal.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_SMART_CARD_READER_CONNECT)(
 | |
|   IN     EFI_SMART_CARD_READER_PROTOCOL    *This,
 | |
|   IN     UINT32                            AccessMode,
 | |
|   IN     UINT32                            CardAction,
 | |
|   IN     UINT32                            PreferredProtocols,
 | |
|   OUT UINT32                            *ActiveProtocol
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function releases a connection previously taken by SCardConnect.
 | |
| 
 | |
|   The SCardDisconnect function releases the lock previously taken by SCardConnect.
 | |
|   In case the smart card has been removed before this call, thisfunction
 | |
|   returns EFI_SUCCESS. If there is no previous call to SCardConnect, this
 | |
|   function returns EFI_SUCCESS.
 | |
| 
 | |
|   @param[in]  This               Indicates a pointer to the calling context.
 | |
|   @param[in]  CardAction         Codes for card action.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The requested command completed successfully.
 | |
|   @retval EFI_INVALID_PARAMETER  This is NULL
 | |
|   @retval EFI_INVALID_PARAMETER  CardAction value is unknown.
 | |
|   @retval EFI_UNSUPPORTED        Reader does not support Eject card feature
 | |
|                                  (disconnect was not performed).
 | |
|   @retval EFI_DEVICE_ERROR       Any other error condition, typically a reader removal.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_SMART_CARD_READER_DISCONNECT)(
 | |
|   IN  EFI_SMART_CARD_READER_PROTOCOL    *This,
 | |
|   IN  UINT32                            CardAction
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function retrieves some basic information about the smart card and reader.
 | |
| 
 | |
|   The SCardStatusfunction retrieves basic reader and card information.
 | |
| 
 | |
|   If ReaderName, State, CardProtocolor Atris NULL, the function does not fail but
 | |
|   does not fill in such variables.
 | |
| 
 | |
|   If EFI_SUCCESS is not returned, ReaderName and Atr contents shall not be considered
 | |
|   as valid.
 | |
| 
 | |
|   @param[in]      This             Indicates a pointer to the calling context.
 | |
|   @param[out]     ReaderName       A pointer to a NULL terminated string that will
 | |
|                                    contain the reader name.
 | |
|   @param[in, out] ReaderNameLength On input, a pointer to the variablethat holds the
 | |
|                                    maximal size, in bytes,of ReaderName.
 | |
|                                    On output, the required size, in bytes, for ReaderName.
 | |
|   @param[out]     State            Current state of the smart card reader.
 | |
|   @param[out]     CardProtocol     Current protocol used to communicate with the smart card.
 | |
|   @param[out]     Atr              A pointer to retrieve the ATR of the smart card.
 | |
|   @param[in, out] AtrLength        On input, a pointer to hold the maximum size, in bytes,
 | |
|                                    of Atr(usually 33).
 | |
|                                    On output, the required size, inbytes, for the smart
 | |
|                                    card ATR.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The requested command completed successfully.
 | |
|   @retval EFI_INVALID_PARAMETER  This is NULL
 | |
|   @retval EFI_INVALID_PARAMETER  ReaderName is not NULL but ReaderNameLength is NULL
 | |
|   @retval EFI_INVALID_PARAMETER  Atr is not NULL but AtrLength is NULL
 | |
|   @retval EFI_BUFFER_TOO_SMALL   ReaderNameLength is not big enough to hold the reader name.
 | |
|                                  ReaderNameLength has been updated to the required value.
 | |
|   @retval EFI_BUFFER_TOO_SMALL   AtrLength is not big enough to hold the ATR.
 | |
|                                  AtrLength has been updated to the required value.
 | |
|   @retval EFI_DEVICE_ERROR       Any other error condition, typically a reader removal.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_SMART_CARD_READER_STATUS)(
 | |
|   IN     EFI_SMART_CARD_READER_PROTOCOL    *This,
 | |
|   OUT CHAR16                            *ReaderName OPTIONAL,
 | |
|   IN OUT UINTN                             *ReaderNameLength OPTIONAL,
 | |
|   OUT UINT32                            *State OPTIONAL,
 | |
|   OUT UINT32                            *CardProtocol OPTIONAL,
 | |
|   OUT UINT8                             *Atr OPTIONAL,
 | |
|   IN OUT UINTN                             *AtrLength OPTIONAL
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function sends a command to the card or reader and returns its response.
 | |
| 
 | |
|   The protocol to use to communicate with the smart card has been selected through
 | |
|   SCardConnectcall.
 | |
| 
 | |
|   In case RAPDULength indicates a buffer too small to holdthe response APDU, the
 | |
|   function fails with EFI_BUFFER_TOO_SMALL.
 | |
| 
 | |
|   @param[in]      This          A pointer to the EFI_USBFN_IO_PROTOCOLinstance.
 | |
|   @param[in]      CAPDU         A pointer to a byte array thatcontains the Command
 | |
|                                 APDU to send to the smart card or reader.
 | |
|   @param[in]      CAPDULength   Command APDU size, in bytes.
 | |
|   @param[out]     RAPDU         A pointer to a byte array that will contain the
 | |
|                                 Response APDU.
 | |
|   @param[in, out] RAPDULength   On input, the maximum size, inbytes, of the Response
 | |
|                                 APDU.
 | |
|                                 On output, the size, in bytes, of the Response APDU.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The requested command completed successfully.
 | |
|   @retval EFI_INVALID_PARAMETER This is NULL.
 | |
|   @retval EFI_INVALID_PARAMETER CAPDU is NULL or CAPDULength is 0.
 | |
|   @retval EFI_BUFFER_TOO_SMALL  RAPDULength is not big enough to hold the response APDU.
 | |
|                                 RAPDULength has been updated to the required value.
 | |
|   @retval EFI_NO_MEDIA          There is no card in the reader.
 | |
|   @retval EFI_NOT_READY         Card is not powered.
 | |
|   @retval EFI_PROTOCOL_ERROR    A protocol error has occurred.
 | |
|   @retval EFI_TIMEOUT           The reader did not respond.
 | |
|   @retval EFI_ACCESS_DENIED     A communication with the reader/card is already pending.
 | |
|   @retval EFI_DEVICE_ERROR      Any other error condition, typically a reader removal.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_SMART_CARD_READER_TRANSMIT)(
 | |
|   IN     EFI_SMART_CARD_READER_PROTOCOL    *This,
 | |
|   IN     UINT8                             *CAPDU,
 | |
|   IN     UINTN                             CAPDULength,
 | |
|   OUT UINT8                             *RAPDU,
 | |
|   IN OUT UINTN                             *RAPDULength
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function provides direct access to the reader.
 | |
| 
 | |
|   This function gives direct control to send commands to the driver or the reader.
 | |
|   The ControlCode to use is vendor dependant; the only standard code defined is
 | |
|   the one to get PC/SC part 10 features.
 | |
| 
 | |
|   InBuffer and Outbuffer may be NULL when ControlCode operation does not require
 | |
|   them.
 | |
| 
 | |
|   @param[in]      This             Indicates a pointer to the calling context.
 | |
|   @param[in]      ControlCode      The control code for the operation to perform.
 | |
|   @param[in]      InBuffer         A pointer to the input parameters.
 | |
|   @param[in]      InBufferLength   Size, in bytes, of input parameters.
 | |
|   @param[out]     OutBuffer        A pointer to the output parameters.
 | |
|   @param[in, out] OutBufferLength  On input, maximal size, in bytes, to store output
 | |
|                                    parameters.
 | |
|                                    On output, the size, in bytes, of output parameters.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The requested command completed successfully.
 | |
|   @retval EFI_INVALID_PARAMETER This is NULL.
 | |
|   @retval EFI_INVALID_PARAMETER ControlCode requires input parameters but:
 | |
|                                   InBuffer is NULL or InBufferLenth is NULL or
 | |
|                                   InBuffer is not NULL but InBufferLenth is less than
 | |
|                                   expected.
 | |
|   @retval EFI_INVALID_PARAMETER OutBuffer is not NULL but OutBufferLength is NULL.
 | |
|   @retval EFI_UNSUPPORTED       ControlCode is not supported.
 | |
|   @retval EFI_BUFFER_TOO_SMALL  OutBufferLength is not big enough to hold the output
 | |
|                                 parameters.
 | |
|                                 OutBufferLength has been updated to the required value.
 | |
|   @retval EFI_NO_MEDIA          There is no card in the reader and the control code
 | |
|                                 specified requires one.
 | |
|   @retval EFI_NOT_READY         ControlCode requires a powered card to operate.
 | |
|   @retval EFI_PROTOCOL_ERROR    A protocol error has occurred.
 | |
|   @retval EFI_TIMEOUT           The reader did not respond.
 | |
|   @retval EFI_ACCESS_DENIED     A communication with the reader/card is already pending.
 | |
|   @retval EFI_DEVICE_ERROR      Any other error condition, typically a reader removal.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_SMART_CARD_READER_CONTROL)(
 | |
|   IN     EFI_SMART_CARD_READER_PROTOCOL    *This,
 | |
|   IN     UINT32                            ControlCode,
 | |
|   IN     UINT8                             *InBuffer OPTIONAL,
 | |
|   IN     UINTN                             InBufferLength OPTIONAL,
 | |
|   OUT UINT8                             *OutBuffer OPTIONAL,
 | |
|   IN OUT UINTN                             *OutBufferLength OPTIONAL
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function retrieves a reader or smart card attribute.
 | |
| 
 | |
|   Possibly supported attrib values are listed in "PC/SC specification, Part 3:
 | |
|   Requirements for PC-Connected Interface Devices".
 | |
| 
 | |
|   @param[in]      This             Indicates a pointer to the calling context.
 | |
|   @param[in]      Attrib           Identifier for the attribute to retrieve.
 | |
|   @param[out]     OutBuffer        A pointer to a buffer that will contain
 | |
|                                    attribute data.
 | |
|   @param[in, out] OutBufferLength  On input, maximal size, in bytes, to store
 | |
|                                    attribute data.
 | |
|                                    On output, the size, in bytes, of attribute
 | |
|                                    data.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The requested command completed successfully.
 | |
|   @retval EFI_INVALID_PARAMETER This is NULL.
 | |
|   @retval EFI_INVALID_PARAMETER OutBuffer is NULL or OutBufferLength is 0.
 | |
|   @retval EFI_BUFFER_TOO_SMALL  OutBufferLength is not big enough to hold the output
 | |
|                                 parameters.
 | |
|                                 OutBufferLength has been updated to the required value.
 | |
|   @retval EFI_UNSUPPORTED       Attribis not supported
 | |
|   @retval EFI_NO_MEDIA          There is no card in the reader and Attrib value
 | |
|                                 requires one.
 | |
|   @retval EFI_NOT_READY         Attrib requires a powered card to operate.
 | |
|   @retval EFI_PROTOCOL_ERROR    A protocol error has occurred.
 | |
|   @retval EFI_TIMEOUT           The reader did not respond.
 | |
|   @retval EFI_DEVICE_ERROR      Any other error condition, typically a reader removal.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_SMART_CARD_READER_GET_ATTRIB)(
 | |
|   IN     EFI_SMART_CARD_READER_PROTOCOL    *This,
 | |
|   IN     UINT32                            Attrib,
 | |
|   OUT UINT8                             *OutBuffer,
 | |
|   IN OUT UINTN                             *OutBufferLength
 | |
|   );
 | |
| 
 | |
| ///
 | |
| /// Smart card aware application invokes this protocol to get access to an inserted
 | |
| /// smart card in the reader or to the reader itself.
 | |
| ///
 | |
| struct _EFI_SMART_CARD_READER_PROTOCOL {
 | |
|   EFI_SMART_CARD_READER_CONNECT       SCardConnect;
 | |
|   EFI_SMART_CARD_READER_DISCONNECT    SCardDisconnect;
 | |
|   EFI_SMART_CARD_READER_STATUS        SCardStatus;
 | |
|   EFI_SMART_CARD_READER_TRANSMIT      SCardTransmit;
 | |
|   EFI_SMART_CARD_READER_CONTROL       SCardControl;
 | |
|   EFI_SMART_CARD_READER_GET_ATTRIB    SCardGetAttrib;
 | |
| };
 | |
| 
 | |
| extern EFI_GUID  gEfiSmartCardReaderProtocolGuid;
 | |
| 
 | |
| #endif
 |