MdeModulePkg: SpiHc: SpiHc Drivers
Added SpiHc DXE and SMM drivers. This code receives bus transactions from the SpiBus layer and passes them onto the SpiHcPlatformLib Platform Initialization Spec 1.7 volume 5 section 18.1.7 Bugzilla #4753 Cc: Abner Chang <abner.chang@amd.com> Cc: Abdul Lateef Attar <AbdulLateef.Attar@amd.com> Signed-off-by: Brit Chesley <brit.chesley@amd.com> Reviewed-by: Abner Chang <abner.chang@amd.com>
This commit is contained in:
committed by
mergify[bot]
parent
5590cefe93
commit
82b0358e3f
117
MdeModulePkg/Bus/Spi/SpiHc/SpiHc.h
Normal file
117
MdeModulePkg/Bus/Spi/SpiHc/SpiHc.h
Normal file
@@ -0,0 +1,117 @@
|
||||
/** @file
|
||||
|
||||
SPI Host Controller function declarations
|
||||
|
||||
Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#ifndef SPI_HC_H_
|
||||
#define SPI_HC_H_
|
||||
|
||||
#include <PiDxe.h>
|
||||
#include <Library/BaseLib.h>
|
||||
#include <Library/BaseMemoryLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/IoLib.h>
|
||||
#include <Protocol/SpiHc.h>
|
||||
#include <Library/SpiHcPlatformLib.h>
|
||||
|
||||
/**
|
||||
Assert or deassert the SPI chip select.
|
||||
|
||||
This routine is called at TPL_NOTIFY.
|
||||
Update the value of the chip select line for a SPI peripheral. The SPI bus
|
||||
layer calls this routine either in the board layer or in the SPI controller
|
||||
to manipulate the chip select pin at the start and end of a SPI transaction.
|
||||
|
||||
@param[in] This Pointer to an EFI_SPI_HC_PROTOCOL structure.
|
||||
@param[in] SpiPeripheral The address of an EFI_SPI_PERIPHERAL data structure
|
||||
describing the SPI peripheral whose chip select pin
|
||||
is to be manipulated. The routine may access the
|
||||
ChipSelectParameter field to gain sufficient
|
||||
context to complete the operati on.
|
||||
@param[in] PinValue The value to be applied to the chip select line of
|
||||
the SPI peripheral.
|
||||
|
||||
@retval EFI_SUCCESS The chip select was set as requested
|
||||
@retval EFI_NOT_READY Support for the chip select is not properly
|
||||
initialized
|
||||
@retval EFI_INVALID_PARAMETER The ChipSeLect value or its contents are
|
||||
invalid
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
ChipSelect (
|
||||
IN CONST EFI_SPI_HC_PROTOCOL *This,
|
||||
IN CONST EFI_SPI_PERIPHERAL *SpiPeripheral,
|
||||
IN BOOLEAN PinValue
|
||||
);
|
||||
|
||||
/**
|
||||
Set up the clock generator to produce the correct clock frequency, phase and
|
||||
polarity for a SPI chip.
|
||||
|
||||
This routine is called at TPL_NOTIFY.
|
||||
This routine updates the clock generator to generate the correct frequency
|
||||
and polarity for the SPI clock.
|
||||
|
||||
@param[in] This Pointer to an EFI_SPI_HC_PROTOCOL structure.
|
||||
@param[in] SpiPeripheral Pointer to a EFI_SPI_PERIPHERAL data structure from
|
||||
which the routine can access the ClockParameter,
|
||||
ClockPhase and ClockPolarity fields. The routine
|
||||
also has access to the names for the SPI bus and
|
||||
chip which can be used during debugging.
|
||||
@param[in] ClockHz Pointer to the requested clock frequency. The SPI
|
||||
host controller will choose a supported clock
|
||||
frequency which is less then or equal to this
|
||||
value. Specify zero to turn the clock generator
|
||||
off. The actual clock frequency supported by the
|
||||
SPI host controller will be returned.
|
||||
|
||||
@retval EFI_SUCCESS The clock was set up successfully
|
||||
@retval EFI_UNSUPPORTED The SPI controller was not able to support the
|
||||
frequency requested by ClockHz
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
Clock (
|
||||
IN CONST EFI_SPI_HC_PROTOCOL *This,
|
||||
IN CONST EFI_SPI_PERIPHERAL *SpiPeripheral,
|
||||
IN UINT32 *ClockHz
|
||||
);
|
||||
|
||||
/**
|
||||
Perform the SPI transaction on the SPI peripheral using the SPI host
|
||||
controller.
|
||||
|
||||
This routine is called at TPL_NOTIFY.
|
||||
This routine synchronously returns EFI_SUCCESS indicating that the
|
||||
asynchronous SPI transaction was started. The routine then waits for
|
||||
completion of the SPI transaction prior to returning the final transaction
|
||||
status.
|
||||
|
||||
@param[in] This Pointer to an EFI_SPI_HC_PROTOCOL structure.
|
||||
@param[in] BusTransaction Pointer to a EFI_SPI_BUS_ TRANSACTION containing
|
||||
the description of the SPI transaction to perform.
|
||||
|
||||
@retval EFI_SUCCESS The transaction completed successfully
|
||||
@retval EFI_BAD_BUFFER_SIZE The BusTransaction->WriteBytes value is invalid,
|
||||
or the BusTransaction->ReadinBytes value is
|
||||
invalid
|
||||
@retval EFI_UNSUPPORTED The BusTransaction-> Transaction Type is
|
||||
unsupported
|
||||
@retval EFI_DEVICE_ERROR SPI Host Controller failed transaction
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
Transaction (
|
||||
IN CONST EFI_SPI_HC_PROTOCOL *This,
|
||||
IN EFI_SPI_BUS_TRANSACTION *BusTransaction
|
||||
);
|
||||
|
||||
#endif //SPI_HC_H_
|
Reference in New Issue
Block a user