Add pci_get_max_payload() to fetch the PCI-express maximum payload size.
Approved by: re (gjb) MFC after: 2 weeks Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D6951
This commit is contained in:
parent
4dad99bf48
commit
2ab0398d94
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=302175
@ -25,7 +25,7 @@
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd May 16, 2016
|
||||
.Dd June 24, 2016
|
||||
.Dt PCI 9
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -44,6 +44,7 @@
|
||||
.Nm pci_find_htcap ,
|
||||
.Nm pci_find_pcie_root_port ,
|
||||
.Nm pci_get_id ,
|
||||
.Nm pci_get_max_payload ,
|
||||
.Nm pci_get_max_read_req ,
|
||||
.Nm pci_get_powerstate ,
|
||||
.Nm pci_get_vpd_ident ,
|
||||
@ -100,6 +101,8 @@
|
||||
.Ft int
|
||||
.Fn pci_get_id "device_t dev" "enum pci_id_type type" "uintptr_t *id"
|
||||
.Ft int
|
||||
.Fn pci_get_max_payload "device_t dev"
|
||||
.Ft int
|
||||
.Fn pci_get_max_read_req "device_t dev"
|
||||
.Ft int
|
||||
.Fn pci_get_powerstate "device_t dev"
|
||||
@ -461,6 +464,16 @@ or
|
||||
.Xr bus_activate_resource 9 .
|
||||
.Pp
|
||||
The
|
||||
.Fn pci_get_max_payload
|
||||
function returns the current maximum TLP payload size in bytes for a
|
||||
PCI-express device.
|
||||
If the
|
||||
.Fa dev
|
||||
device is not a PCI-express device,
|
||||
.Fn pci_get_max_payload
|
||||
returns zero.
|
||||
.Pp
|
||||
The
|
||||
.Fn pci_get_max_read_req
|
||||
function returns the current maximum read request size in bytes for a
|
||||
PCI-express device.
|
||||
|
@ -1992,6 +1992,22 @@ pci_ht_map_msi(device_t dev, uint64_t addr)
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
pci_get_max_payload(device_t dev)
|
||||
{
|
||||
struct pci_devinfo *dinfo = device_get_ivars(dev);
|
||||
int cap;
|
||||
uint16_t val;
|
||||
|
||||
cap = dinfo->cfg.pcie.pcie_location;
|
||||
if (cap == 0)
|
||||
return (0);
|
||||
val = pci_read_config(dev, cap + PCIER_DEVICE_CTL, 2);
|
||||
val &= PCIEM_CTL_MAX_PAYLOAD;
|
||||
val >>= 5;
|
||||
return (1 << (val + 7));
|
||||
}
|
||||
|
||||
int
|
||||
pci_get_max_read_req(device_t dev)
|
||||
{
|
||||
|
@ -585,6 +585,7 @@ int pci_msix_device_blacklisted(device_t dev);
|
||||
void pci_ht_map_msi(device_t dev, uint64_t addr);
|
||||
|
||||
device_t pci_find_pcie_root_port(device_t dev);
|
||||
int pci_get_max_payload(device_t dev);
|
||||
int pci_get_max_read_req(device_t dev);
|
||||
void pci_restore_state(device_t dev);
|
||||
void pci_save_state(device_t dev);
|
||||
|
Loading…
Reference in New Issue
Block a user