mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 16:30:52 +07:00
IB/core: Introduce capabilitymask2 field in ClassPortInfo mad
Change struct ib_class_port_info to conform to IB Spec 1.3 That in order to get specific capability mask from ClassPortInfo mad. >From the IB Spec, ClassPortInfo section: "CapabilityMask2 Bits 0-26: Additional class-specific capabilities... RespTimeValue the rest 5 bits" The new struct now has one field for capabilitymask2 (previously was the reserved field) and the resp_time field. And it fixes up qib and srpt, use of the field repurposed to be used as capabilitymask2: IB/qib: Change pma_get_classportinfo IB/srpt: Adjust the use of ib_class_port_info Signed-off-by: Erez Shitrit <erezsh@mellanox.com> Reviewed-by: Leon Romanovsky <leonro@mellanox.com> Reviewed-by: Hal Rosenstock <hal@mellanox.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
c16d2750a0
commit
507f6afa3a
@ -1172,11 +1172,13 @@ static int pma_get_classportinfo(struct ib_pma_mad *pmp,
|
||||
* Set the most significant bit of CM2 to indicate support for
|
||||
* congestion statistics
|
||||
*/
|
||||
p->reserved[0] = dd->psxmitwait_supported << 7;
|
||||
ib_set_cpi_capmask2(p,
|
||||
dd->psxmitwait_supported <<
|
||||
(31 - IB_CLASS_PORT_INFO_RESP_TIME_FIELD_SIZE));
|
||||
/*
|
||||
* Expected response time is 4.096 usec. * 2^18 == 1.073741824 sec.
|
||||
*/
|
||||
p->resp_time_value = 18;
|
||||
ib_set_cpi_resp_time(p, 18);
|
||||
|
||||
return reply((struct ib_smp *) pmp);
|
||||
}
|
||||
|
@ -254,8 +254,8 @@ static void srpt_get_class_port_info(struct ib_dm_mad *mad)
|
||||
memset(cif, 0, sizeof(*cif));
|
||||
cif->base_version = 1;
|
||||
cif->class_version = 1;
|
||||
cif->resp_time_value = 20;
|
||||
|
||||
ib_set_cpi_resp_time(cif, 20);
|
||||
mad->mad_hdr.status = 0;
|
||||
}
|
||||
|
||||
|
@ -239,12 +239,15 @@ struct ib_vendor_mad {
|
||||
|
||||
#define IB_MGMT_CLASSPORTINFO_ATTR_ID cpu_to_be16(0x0001)
|
||||
|
||||
#define IB_CLASS_PORT_INFO_RESP_TIME_MASK 0x1F
|
||||
#define IB_CLASS_PORT_INFO_RESP_TIME_FIELD_SIZE 5
|
||||
|
||||
struct ib_class_port_info {
|
||||
u8 base_version;
|
||||
u8 class_version;
|
||||
__be16 capability_mask;
|
||||
u8 reserved[3];
|
||||
u8 resp_time_value;
|
||||
/* 27 bits for cap_mask2, 5 bits for resp_time */
|
||||
__be32 cap_mask2_resp_time;
|
||||
u8 redirect_gid[16];
|
||||
__be32 redirect_tcslfl;
|
||||
__be16 redirect_lid;
|
||||
@ -259,6 +262,59 @@ struct ib_class_port_info {
|
||||
__be32 trap_qkey;
|
||||
};
|
||||
|
||||
/**
|
||||
* ib_get_cpi_resp_time - Returns the resp_time value from
|
||||
* cap_mask2_resp_time in ib_class_port_info.
|
||||
* @cpi: A struct ib_class_port_info mad.
|
||||
*/
|
||||
static inline u8 ib_get_cpi_resp_time(struct ib_class_port_info *cpi)
|
||||
{
|
||||
return (u8)(be32_to_cpu(cpi->cap_mask2_resp_time) &
|
||||
IB_CLASS_PORT_INFO_RESP_TIME_MASK);
|
||||
}
|
||||
|
||||
/**
|
||||
* ib_set_cpi_resptime - Sets the response time in an
|
||||
* ib_class_port_info mad.
|
||||
* @cpi: A struct ib_class_port_info.
|
||||
* @rtime: The response time to set.
|
||||
*/
|
||||
static inline void ib_set_cpi_resp_time(struct ib_class_port_info *cpi,
|
||||
u8 rtime)
|
||||
{
|
||||
cpi->cap_mask2_resp_time =
|
||||
(cpi->cap_mask2_resp_time &
|
||||
cpu_to_be32(~IB_CLASS_PORT_INFO_RESP_TIME_MASK)) |
|
||||
cpu_to_be32(rtime & IB_CLASS_PORT_INFO_RESP_TIME_MASK);
|
||||
}
|
||||
|
||||
/**
|
||||
* ib_get_cpi_capmask2 - Returns the capmask2 value from
|
||||
* cap_mask2_resp_time in ib_class_port_info.
|
||||
* @cpi: A struct ib_class_port_info mad.
|
||||
*/
|
||||
static inline u32 ib_get_cpi_capmask2(struct ib_class_port_info *cpi)
|
||||
{
|
||||
return (be32_to_cpu(cpi->cap_mask2_resp_time) >>
|
||||
IB_CLASS_PORT_INFO_RESP_TIME_FIELD_SIZE);
|
||||
}
|
||||
|
||||
/**
|
||||
* ib_set_cpi_capmask2 - Sets the capmask2 in an
|
||||
* ib_class_port_info mad.
|
||||
* @cpi: A struct ib_class_port_info.
|
||||
* @capmask2: The capmask2 to set.
|
||||
*/
|
||||
static inline void ib_set_cpi_capmask2(struct ib_class_port_info *cpi,
|
||||
u32 capmask2)
|
||||
{
|
||||
cpi->cap_mask2_resp_time =
|
||||
(cpi->cap_mask2_resp_time &
|
||||
cpu_to_be32(IB_CLASS_PORT_INFO_RESP_TIME_MASK)) |
|
||||
cpu_to_be32(capmask2 <<
|
||||
IB_CLASS_PORT_INFO_RESP_TIME_FIELD_SIZE);
|
||||
}
|
||||
|
||||
struct ib_mad_notice_attr {
|
||||
u8 generic_type;
|
||||
u8 prod_type_msb;
|
||||
|
Loading…
Reference in New Issue
Block a user