TianoCore EDK2 master
Loading...
Searching...
No Matches
SpiIo.h File Reference

Go to the source code of this file.

Data Structures

struct  _EFI_SPI_BUS_TRANSACTION
 
struct  _EFI_SPI_IO_PROTOCOL
 

Macros

#define SPI_IO_SUPPORTS_2_BIT_DATA_BUS_WIDTH   BIT0
 
#define SPI_IO_SUPPORTS_4_BIT_DATA_BUS_WIDTH   BIT1
 
#define SPI_IO_SUPPORTS_8_BIT_DATA_BUS_WIDTH   BIT2
 
#define SPI_IO_TRANSFER_SIZE_INCLUDES_OPCODE   BIT3
 
#define SPI_IO_TRANSFER_SIZE_INCLUDES_ADDRESS   BIT4
 

Typedefs

typedef struct _EFI_SPI_IO_PROTOCOL EFI_SPI_IO_PROTOCOL
 
typedef EFI_STATUS(EFIAPI * EFI_SPI_IO_PROTOCOL_TRANSACTION) (IN CONST EFI_SPI_IO_PROTOCOL *This, IN EFI_SPI_TRANSACTION_TYPE TransactionType, IN BOOLEAN DebugTransaction, IN UINT32 ClockHz OPTIONAL, IN UINT32 BusWidth, IN UINT32 FrameSize, IN UINT32 WriteBytes, IN UINT8 *WriteBuffer, IN UINT32 ReadBytes, OUT UINT8 *ReadBuffer)
 
typedef EFI_STATUS(EFIAPI * EFI_SPI_IO_PROTOCOL_UPDATE_SPI_PERIPHERAL) (IN CONST EFI_SPI_IO_PROTOCOL *This, IN CONST EFI_SPI_PERIPHERAL *SpiPeripheral)
 
typedef struct _EFI_SPI_BUS_TRANSACTION EFI_SPI_BUS_TRANSACTION
 

Enumerations

enum  EFI_SPI_TRANSACTION_TYPE { SPI_TRANSACTION_FULL_DUPLEX , SPI_TRANSACTION_WRITE_ONLY , SPI_TRANSACTION_READ_ONLY , SPI_TRANSACTION_WRITE_THEN_READ }
 

Detailed Description

This file defines the SPI I/O Protocol.

Copyright (c) 2017, Intel Corporation. All rights reserved.
Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved. SPDX-License-Identifier: BSD-2-Clause-Patent

Revision Reference:
This Protocol was introduced in UEFI PI Specification 1.8 A.

Definition in file SpiIo.h.

Macro Definition Documentation

◆ SPI_IO_SUPPORTS_2_BIT_DATA_BUS_WIDTH

#define SPI_IO_SUPPORTS_2_BIT_DATA_BUS_WIDTH   BIT0

Definitions of SPI I/O Attributes.

Definition at line 230 of file SpiIo.h.

◆ SPI_IO_SUPPORTS_4_BIT_DATA_BUS_WIDTH

#define SPI_IO_SUPPORTS_4_BIT_DATA_BUS_WIDTH   BIT1

Definition at line 231 of file SpiIo.h.

◆ SPI_IO_SUPPORTS_8_BIT_DATA_BUS_WIDTH

#define SPI_IO_SUPPORTS_8_BIT_DATA_BUS_WIDTH   BIT2

Definition at line 232 of file SpiIo.h.

◆ SPI_IO_TRANSFER_SIZE_INCLUDES_ADDRESS

#define SPI_IO_TRANSFER_SIZE_INCLUDES_ADDRESS   BIT4

Definition at line 234 of file SpiIo.h.

◆ SPI_IO_TRANSFER_SIZE_INCLUDES_OPCODE

#define SPI_IO_TRANSFER_SIZE_INCLUDES_OPCODE   BIT3

Definition at line 233 of file SpiIo.h.

Typedef Documentation

◆ EFI_SPI_BUS_TRANSACTION

The EFI_SPI_BUS_ TRANSACTION data structure contains the description of the SPI transaction to perform on the host controller.

◆ EFI_SPI_IO_PROTOCOL

Definition at line 19 of file SpiIo.h.

◆ EFI_SPI_IO_PROTOCOL_TRANSACTION

typedef EFI_STATUS(EFIAPI * EFI_SPI_IO_PROTOCOL_TRANSACTION) (IN CONST EFI_SPI_IO_PROTOCOL *This, IN EFI_SPI_TRANSACTION_TYPE TransactionType, IN BOOLEAN DebugTransaction, IN UINT32 ClockHz OPTIONAL, IN UINT32 BusWidth, IN UINT32 FrameSize, IN UINT32 WriteBytes, IN UINT8 *WriteBuffer, IN UINT32 ReadBytes, OUT UINT8 *ReadBuffer)

Initiate a SPI transaction between the host and a SPI peripheral.

This routine must be called at or below TPL_NOTIFY. This routine works with the SPI bus layer to pass the SPI transaction to the SPI controller for execution on the SPI bus. There are four types of supported transactions supported by this routine: Full Duplex: WriteBuffer and ReadBuffer are the same size. Write Only: WriteBuffer contains data for SPI peripheral, ReadBytes = 0 Read Only: ReadBuffer to receive data from SPI peripheral, WriteBytes = 0 Write Then Read: WriteBuffer contains control data to write to SPI peripheral before data is placed into the ReadBuffer. Both WriteBytes and ReadBytes must be non-zero.

Parameters
[in]ThisPointer to an EFI_SPI_IO_PROTOCOL structure.
[in]TransactionTypeType of SPI transaction.
[in]DebugTransactionSet TRUE only when debugging is desired. Debugging may be turned on for a single SPI transaction. Only this transaction will display debugging messages. All other transactions with this value set to FALSE will not display any debugging messages.
[in]ClockHzSpecify the ClockHz value as zero (0) to use the maximum clock frequency supported by the SPI controller and part. Specify a non-zero value only when a specific SPI transaction requires a reduced clock rate.
[in]BusWidthWidth of the SPI bus in bits: 1, 2, 4
[in]FrameSizeFrame size in bits, range: 1 - 32
[in]WriteBytesThe length of the WriteBuffer in bytes. Specify zero for read-only operations.
[in]WriteBufferThe buffer containing data to be sent from the host to the SPI chip. Specify NULL for read only operations. Frame sizes 1-8 bits: UINT8 (one byte) per frame Frame sizes 7-16 bits: UINT16 (two bytes) per frame Frame sizes 17-32 bits: UINT32 (four bytes) per frame The transmit frame is in the least significant N bits.
[in]ReadBytesThe length of the ReadBuffer in bytes. Specify zero for write-only operations.
[out]ReadBufferThe buffer to receeive data from the SPI chip during the transaction. Specify NULL for write only operations. Frame sizes 1-8 bits: UINT8 (one byte) per frame Frame sizes 7-16 bits: UINT16 (two bytes) per frame Frame sizes 17-32 bits: UINT32 (four bytes) per frame The received frame is in the least significant N bits.
Return values
EFI_SUCCESSThe SPI transaction completed successfully
EFI_BAD_BUFFER_SIZEThe writeBytes value was invalid
EFI_BAD_BUFFER_SIZEThe ReadBytes value was invalid
EFI_INVALID_PARAMETERTransactionType is not valid, or BusWidth not supported by SPI peripheral or SPI host controller, or WriteBytes non-zero and WriteBuffer is NULL, or ReadBytes non-zero and ReadBuffer is NULL, or ReadBuffer != WriteBuffer for full-duplex type, or WriteBuffer was NULL, or TPL is too high
EFI_OUT_OF_RESOURCESInsufficient memory for SPI transaction
EFI_UNSUPPORTEDThe FrameSize is not supported by the SPI bus layer or the SPI host controller
EFI_UNSUPPORTEDThe SPI controller was not able to support

Definition at line 128 of file SpiIo.h.

◆ EFI_SPI_IO_PROTOCOL_UPDATE_SPI_PERIPHERAL

typedef EFI_STATUS(EFIAPI * EFI_SPI_IO_PROTOCOL_UPDATE_SPI_PERIPHERAL) (IN CONST EFI_SPI_IO_PROTOCOL *This, IN CONST EFI_SPI_PERIPHERAL *SpiPeripheral)

Update the SPI peripheral associated with this SPI 10 instance.

Support socketed SPI parts by allowing the SPI peripheral driver to replace the SPI peripheral after the connection is made. An example use is socketed SPI NOR flash parts, where the size and parameters change depending upon device is in the socket.

Parameters
[in]ThisPointer to an EFI_SPI_IO_PROTOCOL structure.
[in]SpiPeripheralPointer to an EFI_SPI_PERIPHERAL structure.
Return values
EFI_SUCCESSThe SPI peripheral was updated successfully
EFI_INVALID_PARAMETERThe SpiPeripheral value is NULL, or the SpiPeripheral->SpiBus is NULL, or the SpiP eripheral - >SpiBus pointing at wrong bus, or the SpiP eripheral - >SpiPart is NULL

Definition at line 161 of file SpiIo.h.

Enumeration Type Documentation

◆ EFI_SPI_TRANSACTION_TYPE

Note: The UEFI PI 1.6 specification does not specify values for the members below. The order matches the specification.

Enumerator
SPI_TRANSACTION_FULL_DUPLEX 

Data flowing in both direction between the host and SPI peripheral.ReadBytes must equal WriteBytes and both ReadBuffer and WriteBuffer must be provided.

SPI_TRANSACTION_WRITE_ONLY 

Data flowing from the host to the SPI peripheral.ReadBytes must be zero.WriteBytes must be non - zero and WriteBuffer must be provided.

SPI_TRANSACTION_READ_ONLY 

Data flowing from the SPI peripheral to the host.WriteBytes must be zero.ReadBytes must be non - zero and ReadBuffer must be provided.

SPI_TRANSACTION_WRITE_THEN_READ 

Data first flowing from the host to the SPI peripheral and then data flows from the SPI peripheral to the host.These types of operations get used for SPI flash devices when control data (opcode, address) must be passed to the SPI peripheral to specify the data to be read.

Definition at line 25 of file SpiIo.h.