This repository has been archived by the owner on Jan 31, 2024. It is now read-only.
forked from ARM-software/arm-trusted-firmware
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
SMCCC/PCI: Add initial PCI conduit definitions
Add constants, structures and build definition for the new standard SMCCC PCI conduit. These are documented in DEN0115A. https://developer.arm.com/documentation/den0115/latest Signed-off-by: Jeremy Linton <jeremy.linton@arm.com> Change-Id: If667800a26b9ae88626e8d895674c9c2e8c09658
- Loading branch information
1 parent
475333c
commit c7a28aa
Showing
2 changed files
with
62 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
/* | ||
* Copyright (c) 2021, ARM Limited and Contributors. All rights reserved. | ||
* | ||
* SPDX-License-Identifier: BSD-3-Clause | ||
*/ | ||
|
||
#ifndef PCI_SVC_H | ||
#define PCI_SVC_H | ||
|
||
#include <lib/utils_def.h> | ||
|
||
/* SMCCC PCI platform functions */ | ||
#define SMC_PCI_VERSION U(0x84000130) | ||
#define SMC_PCI_FEATURES U(0x84000131) | ||
#define SMC_PCI_READ U(0x84000132) | ||
#define SMC_PCI_WRITE U(0x84000133) | ||
#define SMC_PCI_SEG_INFO U(0x84000134) | ||
|
||
#define is_pci_fid(_fid) (((_fid) >= SMC_PCI_VERSION) && \ | ||
((_fid) <= SMC_PCI_SEG_INFO)) | ||
|
||
uint64_t pci_smc_handler(uint32_t smc_fid, u_register_t x1, u_register_t x2, | ||
u_register_t x3, u_register_t x4, void *cookie, | ||
void *handle, u_register_t flags); | ||
|
||
#define PCI_ADDR_FUN(dev) ((dev) & U(0x7)) | ||
#define PCI_ADDR_DEV(dev) (((dev) >> U(3)) & U(0x001F)) | ||
#define PCI_ADDR_BUS(dev) (((dev) >> U(8)) & U(0x00FF)) | ||
#define PCI_ADDR_SEG(dev) (((dev) >> U(16)) & U(0xFFFF)) | ||
#define PCI_OFFSET_MASK U(0xFFF) | ||
typedef union { | ||
struct { | ||
uint16_t minor; | ||
uint16_t major; | ||
} __packed; | ||
uint32_t val; | ||
} pcie_version; | ||
|
||
/* | ||
* platforms are responsible for providing implementations of these | ||
* three functions in a manner which conforms to the Arm PCI Configuration | ||
* Space Access Firmware Interface (DEN0115) and the PCIe specification's | ||
* sections on PCI configuration access. See the rpi4_pci_svc.c example. | ||
*/ | ||
uint32_t pci_read_config(uint32_t addr, uint32_t off, uint32_t sz, uint32_t *val); | ||
uint32_t pci_write_config(uint32_t addr, uint32_t off, uint32_t sz, uint32_t val); | ||
uint32_t pci_get_bus_for_seg(uint32_t seg, uint32_t *bus_range, uint32_t *nseg); | ||
|
||
/* Return codes for Arm PCI Config Space Access Firmware SMC calls */ | ||
#define SMC_PCI_CALL_SUCCESS U(0) | ||
#define SMC_PCI_CALL_NOT_SUPPORTED -1 | ||
#define SMC_PCI_CALL_INVAL_PARAM -2 | ||
#define SMC_PCI_CALL_NOT_IMPL -3 | ||
|
||
#define SMC_PCI_SZ_8BIT U(1) | ||
#define SMC_PCI_SZ_16BIT U(2) | ||
#define SMC_PCI_SZ_32BIT U(4) | ||
|
||
#endif /* PCI_SVC_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters