Message ID | 20150617122840.8744.38451.stgit@phlsvslse11.ph.intel.com (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
On 6/17/2015 8:28 AM, Mike Marciniszyn wrote: > From: Ira Weiny <ira.weiny@intel.com> > > Add common OPA header definitions for driver > build: > - opa_port_info.h > - opa_smi.h > - hfi1_user.sh > > Additionally, ib_mad.h, has additional definitions > that are common to ib_drivers including: > - trap support > - cca support > > The qib driver has the duplication removed in favor > those in ib_mad.h > > Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com> > Reviewed-by: John, Jubin <jubin.john@intel.com> > Signed-off-by: Ira Weiny <ira.weiny@intel.com> > --- > drivers/infiniband/hw/qib/qib_mad.h | 147 +----------- > include/rdma/ib_mad.h | 138 +++++++++++ > include/rdma/opa_port_info.h | 433 +++++++++++++++++++++++++++++++++++ Should opa_port_info.h be in include/rdma or in drivers/infiniband/hw/hfi1 ? > include/rdma/opa_smi.h | 47 ++++ > include/uapi/rdma/hfi/hfi1_user.h | 427 +++++++++++++++++++++++++++++++++++ > 5 files changed, 1053 insertions(+), 139 deletions(-) > create mode 100644 include/rdma/opa_port_info.h > create mode 100644 include/uapi/rdma/hfi/hfi1_user.h > > diff --git a/drivers/infiniband/hw/qib/qib_mad.h b/drivers/infiniband/hw/qib/qib_mad.h > index 941d4d5..57e99dc 100644 > --- a/drivers/infiniband/hw/qib/qib_mad.h > +++ b/drivers/infiniband/hw/qib/qib_mad.h > @@ -36,148 +36,17 @@ > > #include <rdma/ib_pma.h> > > -#define IB_SMP_UNSUP_VERSION cpu_to_be16(0x0004) > -#define IB_SMP_UNSUP_METHOD cpu_to_be16(0x0008) > -#define IB_SMP_UNSUP_METH_ATTR cpu_to_be16(0x000C) > -#define IB_SMP_INVALID_FIELD cpu_to_be16(0x001C) > +#define IB_SMP_UNSUP_VERSION \ > +cpu_to_be16(IB_MGMT_MAD_STATUS_BAD_VERSION) > > -struct ib_node_info { > - u8 base_version; > - u8 class_version; > - u8 node_type; > - u8 num_ports; > - __be64 sys_guid; > - __be64 node_guid; > - __be64 port_guid; > - __be16 partition_cap; > - __be16 device_id; > - __be32 revision; > - u8 local_port_num; > - u8 vendor_id[3]; > -} __packed; > - > -struct ib_mad_notice_attr { > - u8 generic_type; > - u8 prod_type_msb; > - __be16 prod_type_lsb; > - __be16 trap_num; > - __be16 issuer_lid; > - __be16 toggle_count; > - > - union { > - struct { > - u8 details[54]; > - } raw_data; > - > - struct { > - __be16 reserved; > - __be16 lid; /* where violation happened */ > - u8 port_num; /* where violation happened */ > - } __packed ntc_129_131; > - > - struct { > - __be16 reserved; > - __be16 lid; /* LID where change occurred */ > - u8 reserved2; > - u8 local_changes; /* low bit - local changes */ > - __be32 new_cap_mask; /* new capability mask */ > - u8 reserved3; > - u8 change_flags; /* low 3 bits only */ > - } __packed ntc_144; > - > - struct { > - __be16 reserved; > - __be16 lid; /* lid where sys guid changed */ > - __be16 reserved2; > - __be64 new_sys_guid; > - } __packed ntc_145; > - > - struct { > - __be16 reserved; > - __be16 lid; > - __be16 dr_slid; > - u8 method; > - u8 reserved2; > - __be16 attr_id; > - __be32 attr_mod; > - __be64 mkey; > - u8 reserved3; > - u8 dr_trunc_hop; > - u8 dr_rtn_path[30]; > - } __packed ntc_256; > - > - struct { > - __be16 reserved; > - __be16 lid1; > - __be16 lid2; > - __be32 key; > - __be32 sl_qp1; /* SL: high 4 bits */ > - __be32 qp2; /* high 8 bits reserved */ > - union ib_gid gid1; > - union ib_gid gid2; > - } __packed ntc_257_258; > - > - } details; > -}; > - > -/* > - * Generic trap/notice types > - */ > -#define IB_NOTICE_TYPE_FATAL 0x80 > -#define IB_NOTICE_TYPE_URGENT 0x81 > -#define IB_NOTICE_TYPE_SECURITY 0x82 > -#define IB_NOTICE_TYPE_SM 0x83 > -#define IB_NOTICE_TYPE_INFO 0x84 > +#define IB_SMP_UNSUP_METHOD \ > +cpu_to_be16(IB_MGMT_MAD_STATUS_UNSUPPORTED_METHOD) > > -/* > - * Generic trap/notice producers > - */ > -#define IB_NOTICE_PROD_CA cpu_to_be16(1) > -#define IB_NOTICE_PROD_SWITCH cpu_to_be16(2) > -#define IB_NOTICE_PROD_ROUTER cpu_to_be16(3) > -#define IB_NOTICE_PROD_CLASS_MGR cpu_to_be16(4) > +#define IB_SMP_UNSUP_METH_ATTR \ > +cpu_to_be16(IB_MGMT_MAD_STATUS_UNSUPPORTED_METHOD_ATTRIB) > > -/* > - * Generic trap/notice numbers > - */ > -#define IB_NOTICE_TRAP_LLI_THRESH cpu_to_be16(129) > -#define IB_NOTICE_TRAP_EBO_THRESH cpu_to_be16(130) > -#define IB_NOTICE_TRAP_FLOW_UPDATE cpu_to_be16(131) > -#define IB_NOTICE_TRAP_CAP_MASK_CHG cpu_to_be16(144) > -#define IB_NOTICE_TRAP_SYS_GUID_CHG cpu_to_be16(145) > -#define IB_NOTICE_TRAP_BAD_MKEY cpu_to_be16(256) > -#define IB_NOTICE_TRAP_BAD_PKEY cpu_to_be16(257) > -#define IB_NOTICE_TRAP_BAD_QKEY cpu_to_be16(258) > - > -/* > - * Repress trap/notice flags > - */ > -#define IB_NOTICE_REPRESS_LLI_THRESH (1 << 0) > -#define IB_NOTICE_REPRESS_EBO_THRESH (1 << 1) > -#define IB_NOTICE_REPRESS_FLOW_UPDATE (1 << 2) > -#define IB_NOTICE_REPRESS_CAP_MASK_CHG (1 << 3) > -#define IB_NOTICE_REPRESS_SYS_GUID_CHG (1 << 4) > -#define IB_NOTICE_REPRESS_BAD_MKEY (1 << 5) > -#define IB_NOTICE_REPRESS_BAD_PKEY (1 << 6) > -#define IB_NOTICE_REPRESS_BAD_QKEY (1 << 7) > - > -/* > - * Generic trap/notice other local changes flags (trap 144). > - */ > -#define IB_NOTICE_TRAP_LSE_CHG 0x04 /* Link Speed Enable changed */ > -#define IB_NOTICE_TRAP_LWE_CHG 0x02 /* Link Width Enable changed */ > -#define IB_NOTICE_TRAP_NODE_DESC_CHG 0x01 > - > -/* > - * Generic trap/notice M_Key volation flags in dr_trunc_hop (trap 256). > - */ > -#define IB_NOTICE_TRAP_DR_NOTICE 0x80 > -#define IB_NOTICE_TRAP_DR_TRUNC 0x40 > - > -struct ib_vl_weight_elem { > - u8 vl; /* Only low 4 bits, upper 4 bits reserved */ > - u8 weight; > -}; > +#define IB_SMP_INVALID_FIELD \ > +cpu_to_be16(IB_MGMT_MAD_STATUS_INVALID_ATTRIB_VALUE) > > #define IB_VLARB_LOWPRI_0_31 1 > #define IB_VLARB_LOWPRI_32_63 2 > diff --git a/include/rdma/ib_mad.h b/include/rdma/ib_mad.h > index c8422d5..d5ac022 100644 > --- a/include/rdma/ib_mad.h > +++ b/include/rdma/ib_mad.h > @@ -127,6 +127,60 @@ > #define IB_DEFAULT_PKEY_PARTIAL 0x7FFF > #define IB_DEFAULT_PKEY_FULL 0xFFFF > > +/* > + * Generic trap/notice types > + */ > +#define IB_NOTICE_TYPE_FATAL 0x80 > +#define IB_NOTICE_TYPE_URGENT 0x81 > +#define IB_NOTICE_TYPE_SECURITY 0x82 > +#define IB_NOTICE_TYPE_SM 0x83 > +#define IB_NOTICE_TYPE_INFO 0x84 > + > +/* > + * Generic trap/notice producers > + */ > +#define IB_NOTICE_PROD_CA cpu_to_be16(1) > +#define IB_NOTICE_PROD_SWITCH cpu_to_be16(2) > +#define IB_NOTICE_PROD_ROUTER cpu_to_be16(3) > +#define IB_NOTICE_PROD_CLASS_MGR cpu_to_be16(4) > + > +/* > + * Generic trap/notice numbers SM Class trap/notice numbers As such, should they be in ib_smi.h rather than ib_mad.h ? > + */ > +#define IB_NOTICE_TRAP_LLI_THRESH cpu_to_be16(129) > +#define IB_NOTICE_TRAP_EBO_THRESH cpu_to_be16(130) > +#define IB_NOTICE_TRAP_FLOW_UPDATE cpu_to_be16(131) > +#define IB_NOTICE_TRAP_CAP_MASK_CHG cpu_to_be16(144) > +#define IB_NOTICE_TRAP_SYS_GUID_CHG cpu_to_be16(145) > +#define IB_NOTICE_TRAP_BAD_MKEY cpu_to_be16(256) > +#define IB_NOTICE_TRAP_BAD_PKEY cpu_to_be16(257) > +#define IB_NOTICE_TRAP_BAD_QKEY cpu_to_be16(258) > + > +/* > + * Repress trap/notice flags > + */ > +#define IB_NOTICE_REPRESS_LLI_THRESH (1 << 0) > +#define IB_NOTICE_REPRESS_EBO_THRESH (1 << 1) > +#define IB_NOTICE_REPRESS_FLOW_UPDATE (1 << 2) > +#define IB_NOTICE_REPRESS_CAP_MASK_CHG (1 << 3) > +#define IB_NOTICE_REPRESS_SYS_GUID_CHG (1 << 4) > +#define IB_NOTICE_REPRESS_BAD_MKEY (1 << 5) > +#define IB_NOTICE_REPRESS_BAD_PKEY (1 << 6) > +#define IB_NOTICE_REPRESS_BAD_QKEY (1 << 7) What does this correspond to ? Is this some standard thing or are these defines driver specific ? > + > +/* > + * Generic trap/notice other local changes flags (trap 144). SM Class trap/notice other local changes flags (trap 144) As such, should they be in ib_smi.h rather than ib_mad.h ? > + */ > +#define IB_NOTICE_TRAP_LSE_CHG 0x04 /* Link Speed Enable changed */ > +#define IB_NOTICE_TRAP_LWE_CHG 0x02 /* Link Width Enable changed */ > +#define IB_NOTICE_TRAP_NODE_DESC_CHG 0x01 > + > +/* > + * Generic trap/notice M_Key volation flags in dr_trunc_hop (trap 256). SM Class trap/notice M_Key violation flags in dr_trunc_hop (trap 256) As such, should they be in ib_smi.h rather than ib_mad.h ? > + */ > +#define IB_NOTICE_TRAP_DR_NOTICE 0x80 > +#define IB_NOTICE_TRAP_DR_TRUNC 0x40 > + > enum { > IB_MGMT_MAD_HDR = 24, > IB_MGMT_MAD_DATA = 232, > @@ -240,6 +294,90 @@ struct ib_class_port_info { > __be32 trap_qkey; > }; > > +struct ib_node_info { > + u8 base_version; > + u8 class_version; > + u8 node_type; > + u8 num_ports; > + __be64 sys_guid; > + __be64 node_guid; > + __be64 port_guid; > + __be16 partition_cap; > + __be16 device_id; > + __be32 revision; > + u8 local_port_num; > + u8 vendor_id[3]; > +} __packed; This is SM attribute. Should it go into ib_smi.h like ib_port_info ? > + > +struct ib_mad_notice_attr { > + u8 generic_type; > + u8 prod_type_msb; > + __be16 prod_type_lsb; > + __be16 trap_num; > + __be16 issuer_lid; > + __be16 toggle_count; > + > + union { > + struct { > + u8 details[54]; > + } raw_data; > + > + struct { > + __be16 reserved; > + __be16 lid; /* where violation happened */ > + u8 port_num; /* where violation happened */ > + } __packed ntc_129_131; > + > + struct { > + __be16 reserved; > + __be16 lid; /* LID where change occurred */ > + u8 reserved2; > + u8 local_changes; /* low bit - local changes */ > + __be32 new_cap_mask; /* new capability mask */ > + u8 reserved3; > + u8 change_flags; /* low 3 bits only */ I think these 2 fields above should be combined to: __be16 change_flags; per IBA 1.3 > + } __packed ntc_144; > + > + struct { > + __be16 reserved; > + __be16 lid; /* lid where sys guid changed */ > + __be16 reserved2; > + __be64 new_sys_guid; > + } __packed ntc_145; > + > + struct { > + __be16 reserved; > + __be16 lid; > + __be16 dr_slid; > + u8 method; > + u8 reserved2; > + __be16 attr_id; > + __be32 attr_mod; > + __be64 mkey; > + u8 reserved3; > + u8 dr_trunc_hop; > + u8 dr_rtn_path[30]; > + } __packed ntc_256; > + > + struct { > + __be16 reserved; > + __be16 lid1; > + __be16 lid2; > + __be32 key; > + __be32 sl_qp1; /* SL: high 4 bits */ > + __be32 qp2; /* high 8 bits reserved */ > + union ib_gid gid1; > + union ib_gid gid2; > + } __packed ntc_257_258; > + > + } details; > +}; > + > +struct ib_vl_weight_elem { > + u8 vl; /* VL is low 5 bits, upper 3 bits reserved */ Comment is appropriate for OPA. IBA is VL is low 4 bits, upper 4 bits reserved. > + u8 weight; > +}; As this is SM class attribute, should it be in ib_smi.h rather than ib_mad.h ? > + > /** > * ib_mad_send_buf - MAD data buffer and work request for sends. > * @next: A pointer used to chain together MADs for posting. > diff --git a/include/rdma/opa_port_info.h b/include/rdma/opa_port_info.h > new file mode 100644 > index 0000000..391dae1 > --- /dev/null > +++ b/include/rdma/opa_port_info.h > @@ -0,0 +1,433 @@ > +/* > + * Copyright (c) 2014 Intel Corporation. All rights reserved. > + * > + * This software is available to you under a choice of one of two > + * licenses. You may choose to be licensed under the terms of the GNU > + * General Public License (GPL) Version 2, available from the file > + * COPYING in the main directory of this source tree, or the > + * OpenIB.org BSD license below: > + * > + * Redistribution and use in source and binary forms, with or > + * without modification, are permitted provided that the following > + * conditions are met: > + * > + * - Redistributions of source code must retain the above > + * copyright notice, this list of conditions and the following > + * disclaimer. > + * > + * - Redistributions in binary form must reproduce the above > + * copyright notice, this list of conditions and the following > + * disclaimer in the documentation and/or other materials > + * provided with the distribution. > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, > + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF > + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND > + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS > + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN > + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN > + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE > + * SOFTWARE. > + */ > + > +#if !defined(OPA_PORT_INFO_H) > +#define OPA_PORT_INFO_H > + > +/* Temporary until HFI driver is updated */ > +#ifndef USE_PI_LED_ENABLE > +#define USE_PI_LED_ENABLE 0 > +#endif > + > +#define OPA_PORT_LINK_MODE_NOP 0 /* No change */ > +#define OPA_PORT_LINK_MODE_OPA 4 /* Port mode is OPA */ > + > +#define OPA_PORT_PACKET_FORMAT_NOP 0 /* No change */ > +#define OPA_PORT_PACKET_FORMAT_8B 1 /* Format 8B */ > +#define OPA_PORT_PACKET_FORMAT_9B 2 /* Format 9B */ > +#define OPA_PORT_PACKET_FORMAT_10B 4 /* Format 10B */ > +#define OPA_PORT_PACKET_FORMAT_16B 8 /* Format 16B */ > + > +#define OPA_PORT_LTP_CRC_MODE_NONE 0 /* No change */ > +#define OPA_PORT_LTP_CRC_MODE_14 1 /* 14-bit LTP CRC mode (optional) */ > +#define OPA_PORT_LTP_CRC_MODE_16 2 /* 16-bit LTP CRC mode */ > +#define OPA_PORT_LTP_CRC_MODE_48 4 /* 48-bit LTP CRC mode (optional) */ > +#define OPA_PORT_LTP_CRC_MODE_PER_LANE 8 /* 12/16-bit per lane LTP CRC mode */ > + > +/* Link Down / Neighbor Link Down Reason; indicated as follows: */ > +#define OPA_LINKDOWN_REASON_NONE 0 /* No specified reason */ > +#define OPA_LINKDOWN_REASON_RCV_ERROR_0 1 > +#define OPA_LINKDOWN_REASON_BAD_PKT_LEN 2 > +#define OPA_LINKDOWN_REASON_PKT_TOO_LONG 3 > +#define OPA_LINKDOWN_REASON_PKT_TOO_SHORT 4 > +#define OPA_LINKDOWN_REASON_BAD_SLID 5 > +#define OPA_LINKDOWN_REASON_BAD_DLID 6 > +#define OPA_LINKDOWN_REASON_BAD_L2 7 > +#define OPA_LINKDOWN_REASON_BAD_SC 8 > +#define OPA_LINKDOWN_REASON_RCV_ERROR_8 9 > +#define OPA_LINKDOWN_REASON_BAD_MID_TAIL 10 > +#define OPA_LINKDOWN_REASON_RCV_ERROR_10 11 > +#define OPA_LINKDOWN_REASON_PREEMPT_ERROR 12 > +#define OPA_LINKDOWN_REASON_PREEMPT_VL15 13 > +#define OPA_LINKDOWN_REASON_BAD_VL_MARKER 14 > +#define OPA_LINKDOWN_REASON_RCV_ERROR_14 15 > +#define OPA_LINKDOWN_REASON_RCV_ERROR_15 16 > +#define OPA_LINKDOWN_REASON_BAD_HEAD_DIST 17 > +#define OPA_LINKDOWN_REASON_BAD_TAIL_DIST 18 > +#define OPA_LINKDOWN_REASON_BAD_CTRL_DIST 19 > +#define OPA_LINKDOWN_REASON_BAD_CREDIT_ACK 20 > +#define OPA_LINKDOWN_REASON_UNSUPPORTED_VL_MARKER 21 > +#define OPA_LINKDOWN_REASON_BAD_PREEMPT 22 > +#define OPA_LINKDOWN_REASON_BAD_CONTROL_FLIT 23 > +#define OPA_LINKDOWN_REASON_EXCEED_MULTICAST_LIMIT 24 > +#define OPA_LINKDOWN_REASON_RCV_ERROR_24 25 > +#define OPA_LINKDOWN_REASON_RCV_ERROR_25 26 > +#define OPA_LINKDOWN_REASON_RCV_ERROR_26 27 > +#define OPA_LINKDOWN_REASON_RCV_ERROR_27 28 > +#define OPA_LINKDOWN_REASON_RCV_ERROR_28 29 > +#define OPA_LINKDOWN_REASON_RCV_ERROR_29 30 > +#define OPA_LINKDOWN_REASON_RCV_ERROR_30 31 > +#define OPA_LINKDOWN_REASON_EXCESSIVE_BUFFER_OVERRUN 32 > +#define OPA_LINKDOWN_REASON_UNKNOWN 33 > +/* 34 -reserved */ > +#define OPA_LINKDOWN_REASON_REBOOT 35 > +#define OPA_LINKDOWN_REASON_NEIGHBOR_UNKNOWN 36 > +/* 37-38 reserved */ > +#define OPA_LINKDOWN_REASON_FM_BOUNCE 39 > +#define OPA_LINKDOWN_REASON_SPEED_POLICY 40 > +#define OPA_LINKDOWN_REASON_WIDTH_POLICY 41 > +/* 42-48 reserved */ > +#define OPA_LINKDOWN_REASON_DISCONNECTED 49 > +#define OPA_LINKDOWN_REASONLOCAL_MEDIA_NOT_INSTALLED 50 > +#define OPA_LINKDOWN_REASON_NOT_INSTALLED 51 > +#define OPA_LINKDOWN_REASON_CHASSIS_CONFIG 52 > +/* 53 reserved */ > +#define OPA_LINKDOWN_REASON_END_TO_END_NOT_INSTALLED 54 > +/* 55 reserved */ > +#define OPA_LINKDOWN_REASON_POWER_POLICY 56 > +#define OPA_LINKDOWN_REASON_LINKSPEED_POLICY 57 > +#define OPA_LINKDOWN_REASON_LINKWIDTH_POLICY 58 > +/* 59 reserved */ > +#define OPA_LINKDOWN_REASON_SWITCH_MGMT 60 > +#define OPA_LINKDOWN_REASON_SMA_DISABLED 61 > +/* 62 reserved */ > +#define OPA_LINKDOWN_REASON_TRANSIENT 63 > +/* 64-255 reserved */ > + > +/* OPA Link Init reason; indicated as follows: */ > +/* 3-7; 11-15 reserved; 8-15 cleared on Polling->LinkUp */ > +#define OPA_LINKINIT_REASON_NOP 0 > +#define OPA_LINKINIT_REASON_LINKUP (1 << 4) > +#define OPA_LINKINIT_REASON_FLAPPING (2 << 4) > +#define OPA_LINKINIT_REASON_CLEAR (8 << 4) > +#define OPA_LINKINIT_OUTSIDE_POLICY (8 << 4) > +#define OPA_LINKINIT_QUARANTINED (9 << 4) > +#define OPA_LINKINIT_INSUFIC_CAPABILITY (10 << 4) > + > +#define OPA_LINK_SPEED_NOP 0x0000 /* Reserved (1-5 Gbps) */ > +#define OPA_LINK_SPEED_12_5G 0x0001 /* 12.5 Gbps */ > +#define OPA_LINK_SPEED_25G 0x0002 /* 25.78125? Gbps (EDR) */ > + > +#define OPA_LINK_WIDTH_1X 0x0001 > +#define OPA_LINK_WIDTH_2X 0x0002 > +#define OPA_LINK_WIDTH_3X 0x0004 > +#define OPA_LINK_WIDTH_4X 0x0008 > + > +#define OPA_CAP_MASK3_IsSnoopSupported (1 << 7) > +#define OPA_CAP_MASK3_IsAsyncSC2VLSupported (1 << 6) > +#define OPA_CAP_MASK3_IsAddrRangeConfigSupported (1 << 5) > +#define OPA_CAP_MASK3_IsPassThroughSupported (1 << 4) > +#define OPA_CAP_MASK3_IsSharedSpaceSupported (1 << 3) > +/* reserved (1 << 2) */ > +#define OPA_CAP_MASK3_IsVLMarkerSupported (1 << 1) > +#define OPA_CAP_MASK3_IsVLrSupported (1 << 0) > + > +/** > + * new MTU values > + */ > +enum { > + OPA_MTU_8192 = 6, > + OPA_MTU_10240 = 7, > +}; > + > +enum { > + OPA_PORT_PHYS_CONF_DISCONNECTED = 0, > + OPA_PORT_PHYS_CONF_STANDARD = 1, > + OPA_PORT_PHYS_CONF_FIXED = 2, > + OPA_PORT_PHYS_CONF_VARIABLE = 3, > + OPA_PORT_PHYS_CONF_SI_PHOTO = 4 > +}; > + > +enum port_info_field_masks { > + /* vl.cap */ > + OPA_PI_MASK_VL_CAP = 0x1F, > + /* port_states.ledenable_offlinereason */ > + OPA_PI_MASK_OFFLINE_REASON = 0x0F, > + OPA_PI_MASK_LED_ENABLE = 0x40, > + /* port_states.unsleepstate_downdefstate */ > + OPA_PI_MASK_UNSLEEP_STATE = 0xF0, > + OPA_PI_MASK_DOWNDEF_STATE = 0x0F, > + /* port_states.portphysstate_portstate */ > + OPA_PI_MASK_PORT_PHYSICAL_STATE = 0xF0, > + OPA_PI_MASK_PORT_STATE = 0x0F, > + /* port_phys_conf */ > + OPA_PI_MASK_PORT_PHYSICAL_CONF = 0x0F, > + /* collectivemask_multicastmask */ > + OPA_PI_MASK_COLLECT_MASK = 0x38, > + OPA_PI_MASK_MULTICAST_MASK = 0x07, > + /* mkeyprotect_lmc */ > + OPA_PI_MASK_MKEY_PROT_BIT = 0xC0, > + OPA_PI_MASK_LMC = 0x0F, > + /* smsl */ > + OPA_PI_MASK_SMSL = 0x1F, > + /* partenforce_filterraw */ > + /* Filter Raw In/Out bits 1 and 2 were removed */ > + OPA_PI_MASK_LINKINIT_REASON = 0xF0, > + OPA_PI_MASK_PARTITION_ENFORCE_IN = 0x08, > + OPA_PI_MASK_PARTITION_ENFORCE_OUT = 0x04, > + /* operational_vls */ > + OPA_PI_MASK_OPERATIONAL_VL = 0x1F, > + /* sa_qp */ > + OPA_PI_MASK_SA_QP = 0x00FFFFFF, > + /* sm_trap_qp */ > + OPA_PI_MASK_SM_TRAP_QP = 0x00FFFFFF, > + /* localphy_overrun_errors */ > + OPA_PI_MASK_LOCAL_PHY_ERRORS = 0xF0, > + OPA_PI_MASK_OVERRUN_ERRORS = 0x0F, > + /* clientrereg_subnettimeout */ > + OPA_PI_MASK_CLIENT_REREGISTER = 0x80, > + OPA_PI_MASK_SUBNET_TIMEOUT = 0x1F, > + /* port_link_mode */ > + OPA_PI_MASK_PORT_LINK_SUPPORTED = (0x001F << 10), > + OPA_PI_MASK_PORT_LINK_ENABLED = (0x001F << 5), > + OPA_PI_MASK_PORT_LINK_ACTIVE = (0x001F << 0), > + /* port_link_crc_mode */ > + OPA_PI_MASK_PORT_LINK_CRC_SUPPORTED = 0x0F00, > + OPA_PI_MASK_PORT_LINK_CRC_ENABLED = 0x00F0, > + OPA_PI_MASK_PORT_LINK_CRC_ACTIVE = 0x000F, > + /* port_mode */ > + OPA_PI_MASK_PORT_MODE_SECURITY_CHECK = 0x0001, > + OPA_PI_MASK_PORT_MODE_16B_TRAP_QUERY = 0x0002, > + OPA_PI_MASK_PORT_MODE_PKEY_CONVERT = 0x0004, > + OPA_PI_MASK_PORT_MODE_SC2SC_MAPPING = 0x0008, > + OPA_PI_MASK_PORT_MODE_VL_MARKER = 0x0010, > + OPA_PI_MASK_PORT_PASS_THROUGH = 0x0020, > + OPA_PI_MASK_PORT_ACTIVE_OPTOMIZE = 0x0040, > + /* flit_control.interleave */ > + OPA_PI_MASK_INTERLEAVE_DIST_SUP = (0x0003 << 12), > + OPA_PI_MASK_INTERLEAVE_DIST_ENABLE = (0x0003 << 10), > + OPA_PI_MASK_INTERLEAVE_MAX_NEST_TX = (0x001F << 5), > + OPA_PI_MASK_INTERLEAVE_MAX_NEST_RX = (0x001F << 0), > + > + /* port_error_action */ > + OPA_PI_MASK_EX_BUFFER_OVERRUN = 0x80000000, > + /* 7 bits reserved */ > + OPA_PI_MASK_FM_CFG_ERR_EXCEED_MULTICAST_LIMIT = 0x00800000, > + OPA_PI_MASK_FM_CFG_BAD_CONTROL_FLIT = 0x00400000, > + OPA_PI_MASK_FM_CFG_BAD_PREEMPT = 0x00200000, > + OPA_PI_MASK_FM_CFG_UNSUPPORTED_VL_MARKER = 0x00100000, > + OPA_PI_MASK_FM_CFG_BAD_CRDT_ACK = 0x00080000, > + OPA_PI_MASK_FM_CFG_BAD_CTRL_DIST = 0x00040000, > + OPA_PI_MASK_FM_CFG_BAD_TAIL_DIST = 0x00020000, > + OPA_PI_MASK_FM_CFG_BAD_HEAD_DIST = 0x00010000, > + /* 2 bits reserved */ > + OPA_PI_MASK_PORT_RCV_BAD_VL_MARKER = 0x00002000, > + OPA_PI_MASK_PORT_RCV_PREEMPT_VL15 = 0x00001000, > + OPA_PI_MASK_PORT_RCV_PREEMPT_ERROR = 0x00000800, > + /* 1 bit reserved */ > + OPA_PI_MASK_PORT_RCV_BAD_MidTail = 0x00000200, > + /* 1 bit reserved */ > + OPA_PI_MASK_PORT_RCV_BAD_SC = 0x00000080, > + OPA_PI_MASK_PORT_RCV_BAD_L2 = 0x00000040, > + OPA_PI_MASK_PORT_RCV_BAD_DLID = 0x00000020, > + OPA_PI_MASK_PORT_RCV_BAD_SLID = 0x00000010, > + OPA_PI_MASK_PORT_RCV_PKTLEN_TOOSHORT = 0x00000008, > + OPA_PI_MASK_PORT_RCV_PKTLEN_TOOLONG = 0x00000004, > + OPA_PI_MASK_PORT_RCV_BAD_PKTLEN = 0x00000002, > + OPA_PI_MASK_PORT_RCV_BAD_LT = 0x00000001, > + > + /* pass_through.res_drctl */ > + OPA_PI_MASK_PASS_THROUGH_DR_CONTROL = 0x01, > + > + /* buffer_units */ > + OPA_PI_MASK_BUF_UNIT_VL15_INIT = (0x00000FFF << 11), > + OPA_PI_MASK_BUF_UNIT_VL15_CREDIT_RATE = (0x0000001F << 6), > + OPA_PI_MASK_BUF_UNIT_CREDIT_ACK = (0x00000003 << 3), > + OPA_PI_MASK_BUF_UNIT_BUF_ALLOC = (0x00000003 << 0), > + > + /* neigh_mtu.pvlx_to_mtu */ > + OPA_PI_MASK_NEIGH_MTU_PVL0 = 0xF0, > + OPA_PI_MASK_NEIGH_MTU_PVL1 = 0x0F, > + > + /* neigh_mtu.vlstall_hoq_life */ > + OPA_PI_MASK_VL_STALL = (0x03 << 5), > + OPA_PI_MASK_HOQ_LIFE = (0x1F << 0), > + > + /* port_neigh_mode */ > + OPA_PI_MASK_NEIGH_MGMT_ALLOWED = (0x01 << 3), > + OPA_PI_MASK_NEIGH_FW_AUTH_BYPASS = (0x01 << 2), > + OPA_PI_MASK_NEIGH_NODE_TYPE = (0x03 << 0), > + > + /* resptime_value */ > + OPA_PI_MASK_RESPONSE_TIME_VALUE = 0x1F, > + > + /* mtucap */ > + OPA_PI_MASK_MTU_CAP = 0x0F, > +}; > + > +#if USE_PI_LED_ENABLE > +struct opa_port_states { > + u8 reserved; > + u8 ledenable_offlinereason; /* 1 res, 1 bit, 6 bits */ > + u8 reserved2; > + u8 portphysstate_portstate; /* 4 bits, 4 bits */ > +}; > +#define PI_LED_ENABLE_SUP 1 > +#else > +struct opa_port_states { > + u8 reserved; > + u8 offline_reason; /* 2 res, 6 bits */ > + u8 reserved2; > + u8 portphysstate_portstate; /* 4 bits, 4 bits */ > +}; > +#define PI_LED_ENABLE_SUP 0 > +#endif > + > +struct opa_port_state_info { > + struct opa_port_states port_states; > + u16 link_width_downgrade_tx_active; > + u16 link_width_downgrade_rx_active; > +}; > + > +struct opa_port_info { > + __be32 lid; > + __be32 flow_control_mask; > + > + struct { > + u8 res; /* was inittype */ > + u8 cap; /* 3 res, 5 bits */ > + __be16 high_limit; > + __be16 preempt_limit; > + u8 arb_high_cap; > + u8 arb_low_cap; > + } vl; > + > + struct opa_port_states port_states; > + u8 port_phys_conf; /* 4 res, 4 bits */ > + u8 collectivemask_multicastmask; /* 2 res, 3, 3 */ > + u8 mkeyprotect_lmc; /* 2 bits, 2 res, 4 bits */ > + u8 smsl; /* 3 res, 5 bits */ > + > + u8 partenforce_filterraw; /* bit fields */ > + u8 operational_vls; /* 3 res, 5 bits */ > + __be16 pkey_8b; > + __be16 pkey_10b; > + __be16 mkey_violations; > + > + __be16 pkey_violations; > + __be16 qkey_violations; > + __be32 sm_trap_qp; /* 8 bits, 24 bits */ > + > + __be32 sa_qp; /* 8 bits, 24 bits */ > + u8 neigh_port_num; > + u8 link_down_reason; > + u8 neigh_link_down_reason; > + u8 clientrereg_subnettimeout; /* 1 bit, 2 bits, 5 */ > + > + struct { > + __be16 supported; > + __be16 enabled; > + __be16 active; > + } link_speed; > + struct { > + __be16 supported; > + __be16 enabled; > + __be16 active; > + } link_width; > + struct { > + __be16 supported; > + __be16 enabled; > + __be16 tx_active; > + __be16 rx_active; > + } link_width_downgrade; > + __be16 port_link_mode; /* 1 res, 5 bits, 5 bits, 5 bits */ > + __be16 port_ltp_crc_mode; /* 4 res, 4 bits, 4 bits, 4 bits */ > + > + __be16 port_mode; /* 9 res, bit fields */ > + struct { > + __be16 supported; > + __be16 enabled; > + } port_packet_format; > + struct { > + __be16 interleave; /* 2 res, 2,2,5,5 */ > + struct { > + __be16 min_initial; > + __be16 min_tail; > + u8 large_pkt_limit; > + u8 small_pkt_limit; > + u8 max_small_pkt_limit; > + u8 preemption_limit; > + } preemption; > + } flit_control; > + > + __be32 reserved4; > + __be32 port_error_action; /* bit field */ > + > + struct { > + u8 egress_port; > + u8 res_drctl; /* 7 res, 1 */ > + } pass_through; > + __be16 mkey_lease_period; > + __be32 buffer_units; /* 9 res, 12, 5, 3, 3 */ > + > + __be32 reserved5; > + __be32 sm_lid; > + > + __be64 mkey; > + > + __be64 subnet_prefix; > + > + struct { > + u8 pvlx_to_mtu[OPA_MAX_VLS/2]; /* 4 bits, 4 bits */ > + } neigh_mtu; > + > + struct { > + u8 vlstall_hoqlife; /* 3 bits, 5 bits */ > + } xmit_q[OPA_MAX_VLS]; > + > + struct { > + u8 addr[16]; > + } ipaddr_ipv6; > + > + struct { > + u8 addr[4]; > + } ipaddr_ipv4; > + > + u32 reserved6; > + u32 reserved7; > + u32 reserved8; > + > + __be64 neigh_node_guid; > + > + __be32 ib_cap_mask; > + __be16 reserved9; /* was ib_cap_mask2 */ > + __be16 opa_cap_mask; > + > + __be32 reserved10; /* was link_roundtrip_latency */ > + __be16 overall_buffer_space; > + __be16 reserved11; /* was max_credit_hint */ > + > + __be16 diag_code; > + struct { > + u8 buffer; > + u8 wire; > + } replay_depth; > + u8 port_neigh_mode; > + u8 mtucap; /* 4 res, 4 bits */ > + > + u8 resptimevalue; /* 3 res, 5 bits */ > + u8 local_port_num; > + u8 reserved12; > + u8 reserved13; /* was guid_cap */ > +} __attribute__ ((packed)); > + > +#endif /* OPA_PORT_INFO_H */ > diff --git a/include/rdma/opa_smi.h b/include/rdma/opa_smi.h > index 29063e8..4a529ef 100644 > --- a/include/rdma/opa_smi.h > +++ b/include/rdma/opa_smi.h > @@ -40,6 +40,10 @@ > #define OPA_SMP_DR_DATA_SIZE 1872 > #define OPA_SMP_MAX_PATH_HOPS 64 > > +#define OPA_MAX_VLS 32 > +#define OPA_MAX_SLS 32 > +#define OPA_MAX_SCS 32 > + > #define OPA_SMI_CLASS_VERSION 0x80 > > #define OPA_LID_PERMISSIVE cpu_to_be32(0xFFFFFFFF) > @@ -73,6 +77,49 @@ struct opa_smp { > } __packed; > > > +/* Subnet management attributes */ > +/* ... */ > +#define OPA_ATTRIB_ID_NODE_DESCRIPTION cpu_to_be16(0x0010) > +#define OPA_ATTRIB_ID_NODE_INFO cpu_to_be16(0x0011) > +#define OPA_ATTRIB_ID_PORT_INFO cpu_to_be16(0x0015) > +#define OPA_ATTRIB_ID_PARTITION_TABLE cpu_to_be16(0x0016) > +#define OPA_ATTRIB_ID_SL_TO_SC_MAP cpu_to_be16(0x0017) Is this really SL_TO_SC or SL_TO_VL ? The IDs < 0x8000 appear to map to IB standard attributes. > +#define OPA_ATTRIB_ID_VL_ARBITRATION cpu_to_be16(0x0018) > +#define OPA_ATTRIB_ID_SM_INFO cpu_to_be16(0x0020) > +#define OPA_ATTRIB_ID_CABLE_INFO cpu_to_be16(0x0032) > +#define OPA_ATTRIB_ID_AGGREGATE cpu_to_be16(0x0080) > +#define OPA_ATTRIB_ID_SC_TO_SL_MAP cpu_to_be16(0x0082) > +#define OPA_ATTRIB_ID_SC_TO_VLR_MAP cpu_to_be16(0x0083) > +#define OPA_ATTRIB_ID_SC_TO_VLT_MAP cpu_to_be16(0x0084) > +#define OPA_ATTRIB_ID_SC_TO_VLNT_MAP cpu_to_be16(0x0085) > +/* ... */ > +#define OPA_ATTRIB_ID_PORT_STATE_INFO cpu_to_be16(0x0087) > +/* ... */ > +#define OPA_ATTRIB_ID_BUFFER_CONTROL_TABLE cpu_to_be16(0x008A) > +/* ... */ > + > +struct opa_node_description { > + u8 data[64]; > +} __attribute__ ((packed)); > + > +struct opa_node_info { > + u8 base_version; > + u8 class_version; > + u8 node_type; > + u8 num_ports; > + __be32 reserved; > + __be64 system_image_guid; > + __be64 node_guid; > + __be64 port_guid; > + __be16 partition_cap; > + __be16 device_id; > + __be32 revision; > + u8 local_port_num; > + u8 vendor_id[3]; /* network byte order */ > +} __attribute__ ((packed)); > + > +#define OPA_PARTITION_TABLE_BLK_SIZE 32 > + > static inline u8 > opa_get_smp_direction(struct opa_smp *smp) > { <snip...> -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
SGFsLA0KDQpJIG1pc3NlZCB0aGlzIGVtYWlsLiAgIElyYSBhbmQgSSBhZ3JlZSB3aXRoIHRoZSBj b21tZW50cy4NCg0KV2Ugd2lsbCBhZGRyZXNzIHRoaXMgcXVpY2tseSB3aXRoIGEgZm9sbG93IHVw IHBhdGNoLg0KDQpTb3JyeSwNCk1pa2UNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0K PiBGcm9tOiBIYWwgUm9zZW5zdG9jayBbbWFpbHRvOmhhbEBkZXYubWVsbGFub3guY28uaWxdDQo+ IFNlbnQ6IFdlZG5lc2RheSwgSnVuZSAxNywgMjAxNSAxMDoxMyBBTQ0KPiBUbzogTWFyY2luaXN6 eW4sIE1pa2UNCj4gQ2M6IGRsZWRmb3JkQHJlZGhhdC5jb207IGxpbnV4LXJkbWFAdmdlci5rZXJu ZWwub3JnOyBXZWlueSwgSXJhDQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjMgMDEvNDldIElCL2Nv cmU6IEFkZCBoZWFkZXIgZGVmaW5pdGlvbnMNCj4gDQo+IE9uIDYvMTcvMjAxNSA4OjI4IEFNLCBN aWtlIE1hcmNpbmlzenluIHdyb3RlOg0KPiA+IEZyb206IElyYSBXZWlueSA8aXJhLndlaW55QGlu dGVsLmNvbT4NCj4gPg0KPiA+IEFkZCBjb21tb24gT1BBIGhlYWRlciBkZWZpbml0aW9ucyBmb3Ig ZHJpdmVyDQo+ID4gYnVpbGQ6DQo+ID4gLSBvcGFfcG9ydF9pbmZvLmgNCj4gPiAtIG9wYV9zbWku aA0KPiA+IC0gaGZpMV91c2VyLnNoDQo+ID4NCj4gPiBBZGRpdGlvbmFsbHksIGliX21hZC5oLCBo YXMgYWRkaXRpb25hbCBkZWZpbml0aW9ucyB0aGF0IGFyZSBjb21tb24gdG8NCj4gPiBpYl9kcml2 ZXJzIGluY2x1ZGluZzoNCj4gPiAtIHRyYXAgc3VwcG9ydA0KPiA+IC0gY2NhIHN1cHBvcnQNCj4g Pg0KPiA+IFRoZSBxaWIgZHJpdmVyIGhhcyB0aGUgZHVwbGljYXRpb24gcmVtb3ZlZCBpbiBmYXZv ciB0aG9zZSBpbiBpYl9tYWQuaA0KPiA+DQo+ID4gUmV2aWV3ZWQtYnk6IE1pa2UgTWFyY2luaXN6 eW4gPG1pa2UubWFyY2luaXN6eW5AaW50ZWwuY29tPg0KPiA+IFJldmlld2VkLWJ5OiBKb2huLCBK dWJpbiA8anViaW4uam9obkBpbnRlbC5jb20+DQo+ID4gU2lnbmVkLW9mZi1ieTogSXJhIFdlaW55 IDxpcmEud2VpbnlAaW50ZWwuY29tPg0KPiA+IC0tLQ0KPiA+ICBkcml2ZXJzL2luZmluaWJhbmQv aHcvcWliL3FpYl9tYWQuaCB8ICAxNDcgKy0tLS0tLS0tLS0tDQo+ID4gIGluY2x1ZGUvcmRtYS9p Yl9tYWQuaCAgICAgICAgICAgICAgIHwgIDEzOCArKysrKysrKysrKw0KPiA+ICBpbmNsdWRlL3Jk bWEvb3BhX3BvcnRfaW5mby5oICAgICAgICB8ICA0MzMNCj4gKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysNCj4gDQo+IFNob3VsZCBvcGFfcG9ydF9pbmZvLmggYmUgaW4gaW5jbHVk ZS9yZG1hIG9yIGluIGRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxDQo+ID8NCj4gDQo+ID4gIGlu Y2x1ZGUvcmRtYS9vcGFfc21pLmggICAgICAgICAgICAgIHwgICA0NyArKysrDQo+ID4gIGluY2x1 ZGUvdWFwaS9yZG1hL2hmaS9oZmkxX3VzZXIuaCAgIHwgIDQyNw0KPiArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKw0KPiA+ICA1IGZpbGVzIGNoYW5nZWQsIDEwNTMgaW5zZXJ0aW9u cygrKSwgMTM5IGRlbGV0aW9ucygtKSAgY3JlYXRlIG1vZGUNCj4gPiAxMDA2NDQgaW5jbHVkZS9y ZG1hL29wYV9wb3J0X2luZm8uaCAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4gaW5jbHVkZS91YXBp L3JkbWEvaGZpL2hmaTFfdXNlci5oDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZp bmliYW5kL2h3L3FpYi9xaWJfbWFkLmgNCj4gPiBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIv cWliX21hZC5oDQo+ID4gaW5kZXggOTQxZDRkNS4uNTdlOTlkYyAxMDA2NDQNCj4gPiAtLS0gYS9k cml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9tYWQuaA0KPiA+ICsrKyBiL2RyaXZlcnMvaW5m aW5pYmFuZC9ody9xaWIvcWliX21hZC5oDQo+ID4gQEAgLTM2LDE0OCArMzYsMTcgQEANCj4gPg0K PiA+ICAjaW5jbHVkZSA8cmRtYS9pYl9wbWEuaD4NCj4gPg0KPiA+IC0jZGVmaW5lIElCX1NNUF9V TlNVUF9WRVJTSU9OICAgIGNwdV90b19iZTE2KDB4MDAwNCkNCj4gPiAtI2RlZmluZSBJQl9TTVBf VU5TVVBfTUVUSE9EICAgICBjcHVfdG9fYmUxNigweDAwMDgpDQo+ID4gLSNkZWZpbmUgSUJfU01Q X1VOU1VQX01FVEhfQVRUUiAgY3B1X3RvX2JlMTYoMHgwMDBDKQ0KPiA+IC0jZGVmaW5lIElCX1NN UF9JTlZBTElEX0ZJRUxEICAgIGNwdV90b19iZTE2KDB4MDAxQykNCj4gPiArI2RlZmluZSBJQl9T TVBfVU5TVVBfVkVSU0lPTiBcDQo+ID4gK2NwdV90b19iZTE2KElCX01HTVRfTUFEX1NUQVRVU19C QURfVkVSU0lPTikNCj4gPg0KPiA+IC1zdHJ1Y3QgaWJfbm9kZV9pbmZvIHsNCj4gPiAtCXU4IGJh c2VfdmVyc2lvbjsNCj4gPiAtCXU4IGNsYXNzX3ZlcnNpb247DQo+ID4gLQl1OCBub2RlX3R5cGU7 DQo+ID4gLQl1OCBudW1fcG9ydHM7DQo+ID4gLQlfX2JlNjQgc3lzX2d1aWQ7DQo+ID4gLQlfX2Jl NjQgbm9kZV9ndWlkOw0KPiA+IC0JX19iZTY0IHBvcnRfZ3VpZDsNCj4gPiAtCV9fYmUxNiBwYXJ0 aXRpb25fY2FwOw0KPiA+IC0JX19iZTE2IGRldmljZV9pZDsNCj4gPiAtCV9fYmUzMiByZXZpc2lv bjsNCj4gPiAtCXU4IGxvY2FsX3BvcnRfbnVtOw0KPiA+IC0JdTggdmVuZG9yX2lkWzNdOw0KPiA+ IC19IF9fcGFja2VkOw0KPiA+IC0NCj4gPiAtc3RydWN0IGliX21hZF9ub3RpY2VfYXR0ciB7DQo+ ID4gLQl1OCBnZW5lcmljX3R5cGU7DQo+ID4gLQl1OCBwcm9kX3R5cGVfbXNiOw0KPiA+IC0JX19i ZTE2IHByb2RfdHlwZV9sc2I7DQo+ID4gLQlfX2JlMTYgdHJhcF9udW07DQo+ID4gLQlfX2JlMTYg aXNzdWVyX2xpZDsNCj4gPiAtCV9fYmUxNiB0b2dnbGVfY291bnQ7DQo+ID4gLQ0KPiA+IC0JdW5p b24gew0KPiA+IC0JCXN0cnVjdCB7DQo+ID4gLQkJCXU4CWRldGFpbHNbNTRdOw0KPiA+IC0JCX0g cmF3X2RhdGE7DQo+ID4gLQ0KPiA+IC0JCXN0cnVjdCB7DQo+ID4gLQkJCV9fYmUxNglyZXNlcnZl ZDsNCj4gPiAtCQkJX19iZTE2CWxpZDsJCS8qIHdoZXJlIHZpb2xhdGlvbiBoYXBwZW5lZA0KPiAq Lw0KPiA+IC0JCQl1OAlwb3J0X251bTsJLyogd2hlcmUgdmlvbGF0aW9uIGhhcHBlbmVkDQo+ICov DQo+ID4gLQkJfSBfX3BhY2tlZCBudGNfMTI5XzEzMTsNCj4gPiAtDQo+ID4gLQkJc3RydWN0IHsN Cj4gPiAtCQkJX19iZTE2CXJlc2VydmVkOw0KPiA+IC0JCQlfX2JlMTYJbGlkOwkJLyogTElEIHdo ZXJlIGNoYW5nZSBvY2N1cnJlZA0KPiAqLw0KPiA+IC0JCQl1OAlyZXNlcnZlZDI7DQo+ID4gLQkJ CXU4CWxvY2FsX2NoYW5nZXM7CS8qIGxvdyBiaXQgLSBsb2NhbCBjaGFuZ2VzICovDQo+ID4gLQkJ CV9fYmUzMgluZXdfY2FwX21hc2s7CS8qIG5ldyBjYXBhYmlsaXR5DQo+IG1hc2sgKi8NCj4gPiAt CQkJdTgJcmVzZXJ2ZWQzOw0KPiA+IC0JCQl1OAljaGFuZ2VfZmxhZ3M7CS8qIGxvdyAzIGJpdHMg b25seSAqLw0KPiA+IC0JCX0gX19wYWNrZWQgbnRjXzE0NDsNCj4gPiAtDQo+ID4gLQkJc3RydWN0 IHsNCj4gPiAtCQkJX19iZTE2CXJlc2VydmVkOw0KPiA+IC0JCQlfX2JlMTYJbGlkOwkJLyogbGlk IHdoZXJlIHN5cyBndWlkIGNoYW5nZWQNCj4gKi8NCj4gPiAtCQkJX19iZTE2CXJlc2VydmVkMjsN Cj4gPiAtCQkJX19iZTY0CW5ld19zeXNfZ3VpZDsNCj4gPiAtCQl9IF9fcGFja2VkIG50Y18xNDU7 DQo+ID4gLQ0KPiA+IC0JCXN0cnVjdCB7DQo+ID4gLQkJCV9fYmUxNglyZXNlcnZlZDsNCj4gPiAt CQkJX19iZTE2CWxpZDsNCj4gPiAtCQkJX19iZTE2CWRyX3NsaWQ7DQo+ID4gLQkJCXU4CW1ldGhv ZDsNCj4gPiAtCQkJdTgJcmVzZXJ2ZWQyOw0KPiA+IC0JCQlfX2JlMTYJYXR0cl9pZDsNCj4gPiAt CQkJX19iZTMyCWF0dHJfbW9kOw0KPiA+IC0JCQlfX2JlNjQJbWtleTsNCj4gPiAtCQkJdTgJcmVz ZXJ2ZWQzOw0KPiA+IC0JCQl1OAlkcl90cnVuY19ob3A7DQo+ID4gLQkJCXU4CWRyX3J0bl9wYXRo WzMwXTsNCj4gPiAtCQl9IF9fcGFja2VkIG50Y18yNTY7DQo+ID4gLQ0KPiA+IC0JCXN0cnVjdCB7 DQo+ID4gLQkJCV9fYmUxNgkJcmVzZXJ2ZWQ7DQo+ID4gLQkJCV9fYmUxNgkJbGlkMTsNCj4gPiAt CQkJX19iZTE2CQlsaWQyOw0KPiA+IC0JCQlfX2JlMzIJCWtleTsNCj4gPiAtCQkJX19iZTMyCQlz bF9xcDE7CS8qIFNMOiBoaWdoIDQgYml0cyAqLw0KPiA+IC0JCQlfX2JlMzIJCXFwMjsJLyogaGln aCA4IGJpdHMgcmVzZXJ2ZWQgKi8NCj4gPiAtCQkJdW5pb24gaWJfZ2lkCWdpZDE7DQo+ID4gLQkJ CXVuaW9uIGliX2dpZAlnaWQyOw0KPiA+IC0JCX0gX19wYWNrZWQgbnRjXzI1N18yNTg7DQo+ID4g LQ0KPiA+IC0JfSBkZXRhaWxzOw0KPiA+IC19Ow0KPiA+IC0NCj4gPiAtLyoNCj4gPiAtICogR2Vu ZXJpYyB0cmFwL25vdGljZSB0eXBlcw0KPiA+IC0gKi8NCj4gPiAtI2RlZmluZSBJQl9OT1RJQ0Vf VFlQRV9GQVRBTAkweDgwDQo+ID4gLSNkZWZpbmUgSUJfTk9USUNFX1RZUEVfVVJHRU5UCTB4ODEN Cj4gPiAtI2RlZmluZSBJQl9OT1RJQ0VfVFlQRV9TRUNVUklUWQkweDgyDQo+ID4gLSNkZWZpbmUg SUJfTk9USUNFX1RZUEVfU00JMHg4Mw0KPiA+IC0jZGVmaW5lIElCX05PVElDRV9UWVBFX0lORk8J MHg4NA0KPiA+ICsjZGVmaW5lIElCX1NNUF9VTlNVUF9NRVRIT0QgXA0KPiA+ICtjcHVfdG9fYmUx NihJQl9NR01UX01BRF9TVEFUVVNfVU5TVVBQT1JURURfTUVUSE9EKQ0KPiA+DQo+ID4gLS8qDQo+ ID4gLSAqIEdlbmVyaWMgdHJhcC9ub3RpY2UgcHJvZHVjZXJzDQo+ID4gLSAqLw0KPiA+IC0jZGVm aW5lIElCX05PVElDRV9QUk9EX0NBCQljcHVfdG9fYmUxNigxKQ0KPiA+IC0jZGVmaW5lIElCX05P VElDRV9QUk9EX1NXSVRDSAkJY3B1X3RvX2JlMTYoMikNCj4gPiAtI2RlZmluZSBJQl9OT1RJQ0Vf UFJPRF9ST1VURVIJCWNwdV90b19iZTE2KDMpDQo+ID4gLSNkZWZpbmUgSUJfTk9USUNFX1BST0Rf Q0xBU1NfTUdSCWNwdV90b19iZTE2KDQpDQo+ID4gKyNkZWZpbmUgSUJfU01QX1VOU1VQX01FVEhf QVRUUiBcDQo+ID4gK2NwdV90b19iZTE2KElCX01HTVRfTUFEX1NUQVRVU19VTlNVUFBPUlRFRF9N RVRIT0RfQVRUUklCKQ0KPiA+DQo+ID4gLS8qDQo+ID4gLSAqIEdlbmVyaWMgdHJhcC9ub3RpY2Ug bnVtYmVycw0KPiA+IC0gKi8NCj4gPiAtI2RlZmluZSBJQl9OT1RJQ0VfVFJBUF9MTElfVEhSRVNI CWNwdV90b19iZTE2KDEyOSkNCj4gPiAtI2RlZmluZSBJQl9OT1RJQ0VfVFJBUF9FQk9fVEhSRVNI CWNwdV90b19iZTE2KDEzMCkNCj4gPiAtI2RlZmluZSBJQl9OT1RJQ0VfVFJBUF9GTE9XX1VQREFU RQljcHVfdG9fYmUxNigxMzEpDQo+ID4gLSNkZWZpbmUgSUJfTk9USUNFX1RSQVBfQ0FQX01BU0tf Q0hHCWNwdV90b19iZTE2KDE0NCkNCj4gPiAtI2RlZmluZSBJQl9OT1RJQ0VfVFJBUF9TWVNfR1VJ RF9DSEcJY3B1X3RvX2JlMTYoMTQ1KQ0KPiA+IC0jZGVmaW5lIElCX05PVElDRV9UUkFQX0JBRF9N S0VZCQljcHVfdG9fYmUxNigyNTYpDQo+ID4gLSNkZWZpbmUgSUJfTk9USUNFX1RSQVBfQkFEX1BL RVkJCWNwdV90b19iZTE2KDI1NykNCj4gPiAtI2RlZmluZSBJQl9OT1RJQ0VfVFJBUF9CQURfUUtF WQkJY3B1X3RvX2JlMTYoMjU4KQ0KPiA+IC0NCj4gPiAtLyoNCj4gPiAtICogUmVwcmVzcyB0cmFw L25vdGljZSBmbGFncw0KPiA+IC0gKi8NCj4gPiAtI2RlZmluZSBJQl9OT1RJQ0VfUkVQUkVTU19M TElfVEhSRVNICSgxIDw8IDApDQo+ID4gLSNkZWZpbmUgSUJfTk9USUNFX1JFUFJFU1NfRUJPX1RI UkVTSAkoMSA8PCAxKQ0KPiA+IC0jZGVmaW5lIElCX05PVElDRV9SRVBSRVNTX0ZMT1dfVVBEQVRF CSgxIDw8IDIpDQo+ID4gLSNkZWZpbmUgSUJfTk9USUNFX1JFUFJFU1NfQ0FQX01BU0tfQ0hHCSgx IDw8IDMpDQo+ID4gLSNkZWZpbmUgSUJfTk9USUNFX1JFUFJFU1NfU1lTX0dVSURfQ0hHCSgxIDw8 IDQpDQo+ID4gLSNkZWZpbmUgSUJfTk9USUNFX1JFUFJFU1NfQkFEX01LRVkJKDEgPDwgNSkNCj4g PiAtI2RlZmluZSBJQl9OT1RJQ0VfUkVQUkVTU19CQURfUEtFWQkoMSA8PCA2KQ0KPiA+IC0jZGVm aW5lIElCX05PVElDRV9SRVBSRVNTX0JBRF9RS0VZCSgxIDw8IDcpDQo+ID4gLQ0KPiA+IC0vKg0K PiA+IC0gKiBHZW5lcmljIHRyYXAvbm90aWNlIG90aGVyIGxvY2FsIGNoYW5nZXMgZmxhZ3MgKHRy YXAgMTQ0KS4NCj4gPiAtICovDQo+ID4gLSNkZWZpbmUgSUJfTk9USUNFX1RSQVBfTFNFX0NIRwkJ MHgwNAkvKiBMaW5rIFNwZWVkIEVuYWJsZQ0KPiBjaGFuZ2VkICovDQo+ID4gLSNkZWZpbmUgSUJf Tk9USUNFX1RSQVBfTFdFX0NIRwkJMHgwMgkvKiBMaW5rIFdpZHRoIEVuYWJsZQ0KPiBjaGFuZ2Vk ICovDQo+ID4gLSNkZWZpbmUgSUJfTk9USUNFX1RSQVBfTk9ERV9ERVNDX0NIRwkweDAxDQo+ID4g LQ0KPiA+IC0vKg0KPiA+IC0gKiBHZW5lcmljIHRyYXAvbm90aWNlIE1fS2V5IHZvbGF0aW9uIGZs YWdzIGluIGRyX3RydW5jX2hvcCAodHJhcCAyNTYpLg0KPiA+IC0gKi8NCj4gPiAtI2RlZmluZSBJ Ql9OT1RJQ0VfVFJBUF9EUl9OT1RJQ0UJMHg4MA0KPiA+IC0jZGVmaW5lIElCX05PVElDRV9UUkFQ X0RSX1RSVU5DCQkweDQwDQo+ID4gLQ0KPiA+IC1zdHJ1Y3QgaWJfdmxfd2VpZ2h0X2VsZW0gew0K PiA+IC0JdTggICAgICB2bDsgICAgIC8qIE9ubHkgbG93IDQgYml0cywgdXBwZXIgNCBiaXRzIHJl c2VydmVkICovDQo+ID4gLQl1OCAgICAgIHdlaWdodDsNCj4gPiAtfTsNCj4gPiArI2RlZmluZSBJ Ql9TTVBfSU5WQUxJRF9GSUVMRCBcDQo+ID4gK2NwdV90b19iZTE2KElCX01HTVRfTUFEX1NUQVRV U19JTlZBTElEX0FUVFJJQl9WQUxVRSkNCj4gPg0KPiA+ICAjZGVmaW5lIElCX1ZMQVJCX0xPV1BS SV8wXzMxICAgIDENCj4gPiAgI2RlZmluZSBJQl9WTEFSQl9MT1dQUklfMzJfNjMgICAyDQo+ID4g ZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl9tYWQuaCBiL2luY2x1ZGUvcmRtYS9pYl9tYWQu aCBpbmRleA0KPiA+IGM4NDIyZDUuLmQ1YWMwMjIgMTAwNjQ0DQo+ID4gLS0tIGEvaW5jbHVkZS9y ZG1hL2liX21hZC5oDQo+ID4gKysrIGIvaW5jbHVkZS9yZG1hL2liX21hZC5oDQo+ID4gQEAgLTEy Nyw2ICsxMjcsNjAgQEANCj4gPiAgI2RlZmluZSBJQl9ERUZBVUxUX1BLRVlfUEFSVElBTCAweDdG RkYNCj4gPiAgI2RlZmluZSBJQl9ERUZBVUxUX1BLRVlfRlVMTAkweEZGRkYNCj4gPg0KPiA+ICsv Kg0KPiA+ICsgKiBHZW5lcmljIHRyYXAvbm90aWNlIHR5cGVzDQo+ID4gKyAqLw0KPiA+ICsjZGVm aW5lIElCX05PVElDRV9UWVBFX0ZBVEFMCTB4ODANCj4gPiArI2RlZmluZSBJQl9OT1RJQ0VfVFlQ RV9VUkdFTlQJMHg4MQ0KPiA+ICsjZGVmaW5lIElCX05PVElDRV9UWVBFX1NFQ1VSSVRZCTB4ODIN Cj4gPiArI2RlZmluZSBJQl9OT1RJQ0VfVFlQRV9TTQkweDgzDQo+ID4gKyNkZWZpbmUgSUJfTk9U SUNFX1RZUEVfSU5GTwkweDg0DQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBHZW5lcmljIHRyYXAv bm90aWNlIHByb2R1Y2Vycw0KPiA+ICsgKi8NCj4gPiArI2RlZmluZSBJQl9OT1RJQ0VfUFJPRF9D QQkJY3B1X3RvX2JlMTYoMSkNCj4gPiArI2RlZmluZSBJQl9OT1RJQ0VfUFJPRF9TV0lUQ0gJCWNw dV90b19iZTE2KDIpDQo+ID4gKyNkZWZpbmUgSUJfTk9USUNFX1BST0RfUk9VVEVSCQljcHVfdG9f YmUxNigzKQ0KPiA+ICsjZGVmaW5lIElCX05PVElDRV9QUk9EX0NMQVNTX01HUgljcHVfdG9fYmUx Nig0KQ0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogR2VuZXJpYyB0cmFwL25vdGljZSBudW1iZXJz DQo+IA0KPiBTTSBDbGFzcyB0cmFwL25vdGljZSBudW1iZXJzDQo+IA0KPiBBcyBzdWNoLCBzaG91 bGQgdGhleSBiZSBpbiBpYl9zbWkuaCByYXRoZXIgdGhhbiBpYl9tYWQuaCA/DQo+IA0KPiA+ICsg Ki8NCj4gPiArI2RlZmluZSBJQl9OT1RJQ0VfVFJBUF9MTElfVEhSRVNICWNwdV90b19iZTE2KDEy OSkNCj4gPiArI2RlZmluZSBJQl9OT1RJQ0VfVFJBUF9FQk9fVEhSRVNICWNwdV90b19iZTE2KDEz MCkNCj4gPiArI2RlZmluZSBJQl9OT1RJQ0VfVFJBUF9GTE9XX1VQREFURQljcHVfdG9fYmUxNigx MzEpDQo+ID4gKyNkZWZpbmUgSUJfTk9USUNFX1RSQVBfQ0FQX01BU0tfQ0hHCWNwdV90b19iZTE2 KDE0NCkNCj4gPiArI2RlZmluZSBJQl9OT1RJQ0VfVFJBUF9TWVNfR1VJRF9DSEcJY3B1X3RvX2Jl MTYoMTQ1KQ0KPiA+ICsjZGVmaW5lIElCX05PVElDRV9UUkFQX0JBRF9NS0VZCQljcHVfdG9fYmUx NigyNTYpDQo+ID4gKyNkZWZpbmUgSUJfTk9USUNFX1RSQVBfQkFEX1BLRVkJCWNwdV90b19iZTE2 KDI1NykNCj4gPiArI2RlZmluZSBJQl9OT1RJQ0VfVFJBUF9CQURfUUtFWQkJY3B1X3RvX2JlMTYo MjU4KQ0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogUmVwcmVzcyB0cmFwL25vdGljZSBmbGFncw0K PiA+ICsgKi8NCj4gPiArI2RlZmluZSBJQl9OT1RJQ0VfUkVQUkVTU19MTElfVEhSRVNICSgxIDw8 IDApDQo+ID4gKyNkZWZpbmUgSUJfTk9USUNFX1JFUFJFU1NfRUJPX1RIUkVTSAkoMSA8PCAxKQ0K PiA+ICsjZGVmaW5lIElCX05PVElDRV9SRVBSRVNTX0ZMT1dfVVBEQVRFCSgxIDw8IDIpDQo+ID4g KyNkZWZpbmUgSUJfTk9USUNFX1JFUFJFU1NfQ0FQX01BU0tfQ0hHCSgxIDw8IDMpDQo+ID4gKyNk ZWZpbmUgSUJfTk9USUNFX1JFUFJFU1NfU1lTX0dVSURfQ0hHCSgxIDw8IDQpDQo+ID4gKyNkZWZp bmUgSUJfTk9USUNFX1JFUFJFU1NfQkFEX01LRVkJKDEgPDwgNSkNCj4gPiArI2RlZmluZSBJQl9O T1RJQ0VfUkVQUkVTU19CQURfUEtFWQkoMSA8PCA2KQ0KPiA+ICsjZGVmaW5lIElCX05PVElDRV9S RVBSRVNTX0JBRF9RS0VZCSgxIDw8IDcpDQo+IA0KPiBXaGF0IGRvZXMgdGhpcyBjb3JyZXNwb25k IHRvID8gSXMgdGhpcyBzb21lIHN0YW5kYXJkIHRoaW5nIG9yIGFyZSB0aGVzZQ0KPiBkZWZpbmVz IGRyaXZlciBzcGVjaWZpYyA/DQo+IA0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogR2VuZXJpYyB0 cmFwL25vdGljZSBvdGhlciBsb2NhbCBjaGFuZ2VzIGZsYWdzICh0cmFwIDE0NCkuDQo+IA0KPiBT TSBDbGFzcyB0cmFwL25vdGljZSBvdGhlciBsb2NhbCBjaGFuZ2VzIGZsYWdzICh0cmFwIDE0NCkN Cj4gDQo+IEFzIHN1Y2gsIHNob3VsZCB0aGV5IGJlIGluIGliX3NtaS5oIHJhdGhlciB0aGFuIGli X21hZC5oID8NCj4gDQo+ID4gKyAqLw0KPiA+ICsjZGVmaW5lIElCX05PVElDRV9UUkFQX0xTRV9D SEcJCTB4MDQJLyogTGluayBTcGVlZCBFbmFibGUNCj4gY2hhbmdlZCAqLw0KPiA+ICsjZGVmaW5l IElCX05PVElDRV9UUkFQX0xXRV9DSEcJCTB4MDIJLyogTGluayBXaWR0aCBFbmFibGUNCj4gY2hh bmdlZCAqLw0KPiA+ICsjZGVmaW5lIElCX05PVElDRV9UUkFQX05PREVfREVTQ19DSEcJMHgwMQ0K PiA+ICsNCj4gPiArLyoNCj4gPiArICogR2VuZXJpYyB0cmFwL25vdGljZSBNX0tleSB2b2xhdGlv biBmbGFncyBpbiBkcl90cnVuY19ob3AgKHRyYXAgMjU2KS4NCj4gDQo+IFNNIENsYXNzIHRyYXAv bm90aWNlIE1fS2V5IHZpb2xhdGlvbiBmbGFncyBpbiBkcl90cnVuY19ob3AgKHRyYXAgMjU2KQ0K PiANCj4gQXMgc3VjaCwgc2hvdWxkIHRoZXkgYmUgaW4gaWJfc21pLmggcmF0aGVyIHRoYW4gaWJf bWFkLmggPw0KPiANCj4gPiArICovDQo+ID4gKyNkZWZpbmUgSUJfTk9USUNFX1RSQVBfRFJfTk9U SUNFCTB4ODANCj4gPiArI2RlZmluZSBJQl9OT1RJQ0VfVFJBUF9EUl9UUlVOQwkJMHg0MA0KPiA+ ICsNCj4gPiAgZW51bSB7DQo+ID4gIAlJQl9NR01UX01BRF9IRFIgPSAyNCwNCj4gPiAgCUlCX01H TVRfTUFEX0RBVEEgPSAyMzIsDQo+ID4gQEAgLTI0MCw2ICsyOTQsOTAgQEAgc3RydWN0IGliX2Ns YXNzX3BvcnRfaW5mbyB7DQo+ID4gIAlfX2JlMzIJCQl0cmFwX3FrZXk7DQo+ID4gIH07DQo+ID4N Cj4gPiArc3RydWN0IGliX25vZGVfaW5mbyB7DQo+ID4gKwl1OCBiYXNlX3ZlcnNpb247DQo+ID4g Kwl1OCBjbGFzc192ZXJzaW9uOw0KPiA+ICsJdTggbm9kZV90eXBlOw0KPiA+ICsJdTggbnVtX3Bv cnRzOw0KPiA+ICsJX19iZTY0IHN5c19ndWlkOw0KPiA+ICsJX19iZTY0IG5vZGVfZ3VpZDsNCj4g PiArCV9fYmU2NCBwb3J0X2d1aWQ7DQo+ID4gKwlfX2JlMTYgcGFydGl0aW9uX2NhcDsNCj4gPiAr CV9fYmUxNiBkZXZpY2VfaWQ7DQo+ID4gKwlfX2JlMzIgcmV2aXNpb247DQo+ID4gKwl1OCBsb2Nh bF9wb3J0X251bTsNCj4gPiArCXU4IHZlbmRvcl9pZFszXTsNCj4gPiArfSBfX3BhY2tlZDsNCj4g DQo+IFRoaXMgaXMgU00gYXR0cmlidXRlLiBTaG91bGQgaXQgZ28gaW50byBpYl9zbWkuaCBsaWtl IGliX3BvcnRfaW5mbyA/DQo+IA0KPiA+ICsNCj4gPiArc3RydWN0IGliX21hZF9ub3RpY2VfYXR0 ciB7DQo+ID4gKwl1OCBnZW5lcmljX3R5cGU7DQo+ID4gKwl1OCBwcm9kX3R5cGVfbXNiOw0KPiA+ ICsJX19iZTE2IHByb2RfdHlwZV9sc2I7DQo+ID4gKwlfX2JlMTYgdHJhcF9udW07DQo+ID4gKwlf X2JlMTYgaXNzdWVyX2xpZDsNCj4gPiArCV9fYmUxNiB0b2dnbGVfY291bnQ7DQo+ID4gKw0KPiA+ ICsJdW5pb24gew0KPiA+ICsJCXN0cnVjdCB7DQo+ID4gKwkJCXU4CWRldGFpbHNbNTRdOw0KPiA+ ICsJCX0gcmF3X2RhdGE7DQo+ID4gKw0KPiA+ICsJCXN0cnVjdCB7DQo+ID4gKwkJCV9fYmUxNgly ZXNlcnZlZDsNCj4gPiArCQkJX19iZTE2CWxpZDsJCS8qIHdoZXJlIHZpb2xhdGlvbiBoYXBwZW5l ZA0KPiAqLw0KPiA+ICsJCQl1OAlwb3J0X251bTsJLyogd2hlcmUgdmlvbGF0aW9uIGhhcHBlbmVk DQo+ICovDQo+ID4gKwkJfSBfX3BhY2tlZCBudGNfMTI5XzEzMTsNCj4gPiArDQo+ID4gKwkJc3Ry dWN0IHsNCj4gPiArCQkJX19iZTE2CXJlc2VydmVkOw0KPiA+ICsJCQlfX2JlMTYJbGlkOwkJLyog TElEIHdoZXJlIGNoYW5nZSBvY2N1cnJlZA0KPiAqLw0KPiA+ICsJCQl1OAlyZXNlcnZlZDI7DQo+ ID4gKwkJCXU4CWxvY2FsX2NoYW5nZXM7CS8qIGxvdyBiaXQgLSBsb2NhbCBjaGFuZ2VzICovDQo+ ID4gKwkJCV9fYmUzMgluZXdfY2FwX21hc2s7CS8qIG5ldyBjYXBhYmlsaXR5DQo+IG1hc2sgKi8N Cj4gPiArCQkJdTgJcmVzZXJ2ZWQzOw0KPiA+ICsJCQl1OAljaGFuZ2VfZmxhZ3M7CS8qIGxvdyAz IGJpdHMgb25seSAqLw0KPiANCj4gSSB0aGluayB0aGVzZSAyIGZpZWxkcyBhYm92ZSBzaG91bGQg YmUgY29tYmluZWQgdG86DQo+IAkJCV9fYmUxNgljaGFuZ2VfZmxhZ3M7DQo+IHBlciBJQkEgMS4z DQo+IA0KPiA+ICsJCX0gX19wYWNrZWQgbnRjXzE0NDsNCj4gPiArDQo+ID4gKwkJc3RydWN0IHsN Cj4gPiArCQkJX19iZTE2CXJlc2VydmVkOw0KPiA+ICsJCQlfX2JlMTYJbGlkOwkJLyogbGlkIHdo ZXJlIHN5cyBndWlkIGNoYW5nZWQNCj4gKi8NCj4gPiArCQkJX19iZTE2CXJlc2VydmVkMjsNCj4g PiArCQkJX19iZTY0CW5ld19zeXNfZ3VpZDsNCj4gPiArCQl9IF9fcGFja2VkIG50Y18xNDU7DQo+ ID4gKw0KPiA+ICsJCXN0cnVjdCB7DQo+ID4gKwkJCV9fYmUxNglyZXNlcnZlZDsNCj4gPiArCQkJ X19iZTE2CWxpZDsNCj4gPiArCQkJX19iZTE2CWRyX3NsaWQ7DQo+ID4gKwkJCXU4CW1ldGhvZDsN Cj4gPiArCQkJdTgJcmVzZXJ2ZWQyOw0KPiA+ICsJCQlfX2JlMTYJYXR0cl9pZDsNCj4gPiArCQkJ X19iZTMyCWF0dHJfbW9kOw0KPiA+ICsJCQlfX2JlNjQJbWtleTsNCj4gPiArCQkJdTgJcmVzZXJ2 ZWQzOw0KPiA+ICsJCQl1OAlkcl90cnVuY19ob3A7DQo+ID4gKwkJCXU4CWRyX3J0bl9wYXRoWzMw XTsNCj4gPiArCQl9IF9fcGFja2VkIG50Y18yNTY7DQo+ID4gKw0KPiA+ICsJCXN0cnVjdCB7DQo+ ID4gKwkJCV9fYmUxNgkJcmVzZXJ2ZWQ7DQo+ID4gKwkJCV9fYmUxNgkJbGlkMTsNCj4gPiArCQkJ X19iZTE2CQlsaWQyOw0KPiA+ICsJCQlfX2JlMzIJCWtleTsNCj4gPiArCQkJX19iZTMyCQlzbF9x cDE7CS8qIFNMOiBoaWdoIDQgYml0cyAqLw0KPiA+ICsJCQlfX2JlMzIJCXFwMjsJLyogaGlnaCA4 IGJpdHMgcmVzZXJ2ZWQgKi8NCj4gPiArCQkJdW5pb24gaWJfZ2lkCWdpZDE7DQo+ID4gKwkJCXVu aW9uIGliX2dpZAlnaWQyOw0KPiA+ICsJCX0gX19wYWNrZWQgbnRjXzI1N18yNTg7DQo+ID4gKw0K PiA+ICsJfSBkZXRhaWxzOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IGliX3ZsX3dlaWdo dF9lbGVtIHsNCj4gPiArCXU4ICAgICAgdmw7ICAgICAvKiBWTCBpcyBsb3cgNSBiaXRzLCB1cHBl ciAzIGJpdHMgcmVzZXJ2ZWQgKi8NCj4gDQo+IENvbW1lbnQgaXMgYXBwcm9wcmlhdGUgZm9yIE9Q QS4gSUJBIGlzIFZMIGlzIGxvdyA0IGJpdHMsIHVwcGVyIDQgYml0cw0KPiByZXNlcnZlZC4NCj4g DQo+ID4gKwl1OCAgICAgIHdlaWdodDsNCj4gPiArfTsNCj4gDQo+IEFzIHRoaXMgaXMgU00gY2xh c3MgYXR0cmlidXRlLCBzaG91bGQgaXQgYmUgaW4gaWJfc21pLmggcmF0aGVyIHRoYW4gaWJfbWFk LmggPw0KPiANCj4gPiArDQo+ID4gIC8qKg0KPiA+ICAgKiBpYl9tYWRfc2VuZF9idWYgLSBNQUQg ZGF0YSBidWZmZXIgYW5kIHdvcmsgcmVxdWVzdCBmb3Igc2VuZHMuDQo+ID4gICAqIEBuZXh0OiBB IHBvaW50ZXIgdXNlZCB0byBjaGFpbiB0b2dldGhlciBNQURzIGZvciBwb3N0aW5nLg0KPiA+IGRp ZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvb3BhX3BvcnRfaW5mby5oDQo+ID4gYi9pbmNsdWRlL3Jk bWEvb3BhX3BvcnRfaW5mby5oIG5ldyBmaWxlIG1vZGUgMTAwNjQ0IGluZGV4DQo+ID4gMDAwMDAw MC4uMzkxZGFlMQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9pbmNsdWRlL3JkbWEvb3Bh X3BvcnRfaW5mby5oDQo+ID4gQEAgLTAsMCArMSw0MzMgQEANCj4gPiArLyoNCj4gPiArICogQ29w eXJpZ2h0IChjKSAyMDE0IEludGVsIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4N Cj4gPiArICoNCj4gPiArICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVy IGEgY2hvaWNlIG9mIG9uZSBvZiB0d28NCj4gPiArICogbGljZW5zZXMuICBZb3UgbWF5IGNob29z ZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlDQo+ID4gK0dOVQ0KPiA+ICsg KiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20g dGhlIGZpbGUNCj4gPiArICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBz b3VyY2UgdHJlZSwgb3IgdGhlDQo+ID4gKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6 DQo+ID4gKyAqDQo+ID4gKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yDQo+ID4gKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcNCj4gPiArICogICAg IGNvbmRpdGlvbnMgYXJlIG1ldDoNCj4gPiArICoNCj4gPiArICogICAgICAtIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUNCj4gPiArICogICAgICAg IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nDQo+ID4gKyAqICAgICAgICBkaXNjbGFpbWVyLg0KPiA+ICsgKg0KPiA+ICsgKiAgICAgIC0g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQ0K PiA+ICsgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcNCj4gPiArICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscw0KPiA+ICsgKiAgICAgICAgcHJvdmlkZWQg d2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KPiA+ICsgKg0KPiA+ICsgKiBUSEUgU09GVFdBUkUgSVMg UFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkNCj4gS0lORCwNCj4gPiAr ICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRQ0K PiBXQVJSQU5USUVTIE9GDQo+ID4gKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EDQo+ID4gKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZF TlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUDQo+ID4gK0hPTERFUlMNCj4gPiArICog QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVU SEVSIElODQo+IEFODQo+ID4gKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ U0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GDQo+IE9SIElODQo+ID4gKyAqIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUw0KPiBJTiBUSEUNCj4g PiArICogU09GVFdBUkUuDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2lmICFkZWZpbmVkKE9QQV9Q T1JUX0lORk9fSCkNCj4gPiArI2RlZmluZSBPUEFfUE9SVF9JTkZPX0gNCj4gPiArDQo+ID4gKy8q IFRlbXBvcmFyeSB1bnRpbCBIRkkgZHJpdmVyIGlzIHVwZGF0ZWQgKi8gI2lmbmRlZiBVU0VfUElf TEVEX0VOQUJMRQ0KPiA+ICsjZGVmaW5lIFVTRV9QSV9MRURfRU5BQkxFIDAgI2VuZGlmDQo+ID4g Kw0KPiA+ICsjZGVmaW5lIE9QQV9QT1JUX0xJTktfTU9ERV9OT1AJMAkJLyogTm8gY2hhbmdlDQo+ ICovDQo+ID4gKyNkZWZpbmUgT1BBX1BPUlRfTElOS19NT0RFX09QQQk0CQkvKiBQb3J0IG1vZGUN Cj4gaXMgT1BBICovDQo+ID4gKw0KPiA+ICsjZGVmaW5lIE9QQV9QT1JUX1BBQ0tFVF9GT1JNQVRf Tk9QCTAJCS8qIE5vIGNoYW5nZQ0KPiAqLw0KPiA+ICsjZGVmaW5lIE9QQV9QT1JUX1BBQ0tFVF9G T1JNQVRfOEIJMQkJLyogRm9ybWF0IDhCDQo+ICovDQo+ID4gKyNkZWZpbmUgT1BBX1BPUlRfUEFD S0VUX0ZPUk1BVF85QgkyCQkvKiBGb3JtYXQgOUINCj4gKi8NCj4gPiArI2RlZmluZSBPUEFfUE9S VF9QQUNLRVRfRk9STUFUXzEwQgk0CQkvKiBGb3JtYXQNCj4gMTBCICovDQo+ID4gKyNkZWZpbmUg T1BBX1BPUlRfUEFDS0VUX0ZPUk1BVF8xNkIJOAkJLyogRm9ybWF0DQo+IDE2QiAqLw0KPiA+ICsN Cj4gPiArI2RlZmluZSBPUEFfUE9SVF9MVFBfQ1JDX01PREVfTk9ORQkwCS8qIE5vIGNoYW5nZSAq Lw0KPiA+ICsjZGVmaW5lIE9QQV9QT1JUX0xUUF9DUkNfTU9ERV8xNAkxCS8qIDE0LWJpdCBMVFAg Q1JDDQo+IG1vZGUgKG9wdGlvbmFsKSAqLw0KPiA+ICsjZGVmaW5lIE9QQV9QT1JUX0xUUF9DUkNf TU9ERV8xNgkyCS8qIDE2LWJpdCBMVFAgQ1JDDQo+IG1vZGUgKi8NCj4gPiArI2RlZmluZSBPUEFf UE9SVF9MVFBfQ1JDX01PREVfNDgJNAkvKiA0OC1iaXQgTFRQIENSQw0KPiBtb2RlIChvcHRpb25h bCkgKi8NCj4gPiArI2RlZmluZSBPUEFfUE9SVF9MVFBfQ1JDX01PREVfUEVSX0xBTkUgIDgJLyog MTIvMTYtYml0IHBlciBsYW5lDQo+IExUUCBDUkMgbW9kZSAqLw0KPiA+ICsNCj4gPiArLyogTGlu ayBEb3duIC8gTmVpZ2hib3IgTGluayBEb3duIFJlYXNvbjsgaW5kaWNhdGVkIGFzIGZvbGxvd3M6 ICovDQo+ID4gKyNkZWZpbmUgT1BBX0xJTktET1dOX1JFQVNPTl9OT05FCQkJCTANCj4gCS8qIE5v IHNwZWNpZmllZCByZWFzb24gKi8NCj4gPiArI2RlZmluZSBPUEFfTElOS0RPV05fUkVBU09OX1JD Vl9FUlJPUl8wDQo+IAkxDQo+ID4gKyNkZWZpbmUgT1BBX0xJTktET1dOX1JFQVNPTl9CQURfUEtU X0xFTg0KPiAJMg0KPiA+ICsjZGVmaW5lIE9QQV9MSU5LRE9XTl9SRUFTT05fUEtUX1RPT19MT05H CQkJMw0KPiA+ICsjZGVmaW5lIE9QQV9MSU5LRE9XTl9SRUFTT05fUEtUX1RPT19TSE9SVAkJCTQN Cj4gPiArI2RlZmluZSBPUEFfTElOS0RPV05fUkVBU09OX0JBRF9TTElEDQo+IAk1DQo+ID4gKyNk ZWZpbmUgT1BBX0xJTktET1dOX1JFQVNPTl9CQURfRExJRA0KPiAJNg0KPiA+ICsjZGVmaW5lIE9Q QV9MSU5LRE9XTl9SRUFTT05fQkFEX0wyCQkJCTcNCj4gPiArI2RlZmluZSBPUEFfTElOS0RPV05f UkVBU09OX0JBRF9TQwkJCQk4DQo+ID4gKyNkZWZpbmUgT1BBX0xJTktET1dOX1JFQVNPTl9SQ1Zf RVJST1JfOA0KPiAJOQ0KPiA+ICsjZGVmaW5lIE9QQV9MSU5LRE9XTl9SRUFTT05fQkFEX01JRF9U QUlMCQkJMTANCj4gPiArI2RlZmluZSBPUEFfTElOS0RPV05fUkVBU09OX1JDVl9FUlJPUl8xMAkJ CTExDQo+ID4gKyNkZWZpbmUgT1BBX0xJTktET1dOX1JFQVNPTl9QUkVFTVBUX0VSUk9SDQo+IAkx Mg0KPiA+ICsjZGVmaW5lIE9QQV9MSU5LRE9XTl9SRUFTT05fUFJFRU1QVF9WTDE1CQkJMTMNCj4g PiArI2RlZmluZSBPUEFfTElOS0RPV05fUkVBU09OX0JBRF9WTF9NQVJLRVINCj4gCTE0DQo+ID4g KyNkZWZpbmUgT1BBX0xJTktET1dOX1JFQVNPTl9SQ1ZfRVJST1JfMTQJCQkxNQ0KPiA+ICsjZGVm aW5lIE9QQV9MSU5LRE9XTl9SRUFTT05fUkNWX0VSUk9SXzE1CQkJMTYNCj4gPiArI2RlZmluZSBP UEFfTElOS0RPV05fUkVBU09OX0JBRF9IRUFEX0RJU1QJCQkxNw0KPiA+ICsjZGVmaW5lIE9QQV9M SU5LRE9XTl9SRUFTT05fQkFEX1RBSUxfRElTVAkJCTE4DQo+ID4gKyNkZWZpbmUgT1BBX0xJTktE T1dOX1JFQVNPTl9CQURfQ1RSTF9ESVNUCQkJMTkNCj4gPiArI2RlZmluZSBPUEFfTElOS0RPV05f UkVBU09OX0JBRF9DUkVESVRfQUNLDQo+IAkyMA0KPiA+ICsjZGVmaW5lIE9QQV9MSU5LRE9XTl9S RUFTT05fVU5TVVBQT1JURURfVkxfTUFSS0VSDQo+IAkyMQ0KPiA+ICsjZGVmaW5lIE9QQV9MSU5L RE9XTl9SRUFTT05fQkFEX1BSRUVNUFQNCj4gCTIyDQo+ID4gKyNkZWZpbmUgT1BBX0xJTktET1dO X1JFQVNPTl9CQURfQ09OVFJPTF9GTElUDQo+IAkyMw0KPiA+ICsjZGVmaW5lIE9QQV9MSU5LRE9X Tl9SRUFTT05fRVhDRUVEX01VTFRJQ0FTVF9MSU1JVA0KPiAJMjQNCj4gPiArI2RlZmluZSBPUEFf TElOS0RPV05fUkVBU09OX1JDVl9FUlJPUl8yNAkJCTI1DQo+ID4gKyNkZWZpbmUgT1BBX0xJTktE T1dOX1JFQVNPTl9SQ1ZfRVJST1JfMjUJCQkyNg0KPiA+ICsjZGVmaW5lIE9QQV9MSU5LRE9XTl9S RUFTT05fUkNWX0VSUk9SXzI2CQkJMjcNCj4gPiArI2RlZmluZSBPUEFfTElOS0RPV05fUkVBU09O X1JDVl9FUlJPUl8yNwkJCTI4DQo+ID4gKyNkZWZpbmUgT1BBX0xJTktET1dOX1JFQVNPTl9SQ1Zf RVJST1JfMjgJCQkyOQ0KPiA+ICsjZGVmaW5lIE9QQV9MSU5LRE9XTl9SRUFTT05fUkNWX0VSUk9S XzI5CQkJMzANCj4gPiArI2RlZmluZSBPUEFfTElOS0RPV05fUkVBU09OX1JDVl9FUlJPUl8zMAkJ CTMxDQo+ID4gKyNkZWZpbmUgT1BBX0xJTktET1dOX1JFQVNPTl9FWENFU1NJVkVfQlVGRkVSX09W RVJSVU4NCj4gCTMyDQo+ID4gKyNkZWZpbmUgT1BBX0xJTktET1dOX1JFQVNPTl9VTktOT1dODQo+ IAkzMw0KPiA+ICsvKiAzNCAtcmVzZXJ2ZWQgKi8NCj4gPiArI2RlZmluZSBPUEFfTElOS0RPV05f UkVBU09OX1JFQk9PVAkJCQkzNQ0KPiA+ICsjZGVmaW5lIE9QQV9MSU5LRE9XTl9SRUFTT05fTkVJ R0hCT1JfVU5LTk9XTg0KPiAJMzYNCj4gPiArLyogMzctMzggcmVzZXJ2ZWQgKi8NCj4gPiArI2Rl ZmluZSBPUEFfTElOS0RPV05fUkVBU09OX0ZNX0JPVU5DRQ0KPiAJMzkNCj4gPiArI2RlZmluZSBP UEFfTElOS0RPV05fUkVBU09OX1NQRUVEX1BPTElDWQkJCTQwDQo+ID4gKyNkZWZpbmUgT1BBX0xJ TktET1dOX1JFQVNPTl9XSURUSF9QT0xJQ1kJCQk0MQ0KPiA+ICsvKiA0Mi00OCByZXNlcnZlZCAq Lw0KPiA+ICsjZGVmaW5lIE9QQV9MSU5LRE9XTl9SRUFTT05fRElTQ09OTkVDVEVECQkJNDkNCj4g PiArI2RlZmluZSBPUEFfTElOS0RPV05fUkVBU09OTE9DQUxfTUVESUFfTk9UX0lOU1RBTExFRA0K PiAJNTANCj4gPiArI2RlZmluZSBPUEFfTElOS0RPV05fUkVBU09OX05PVF9JTlNUQUxMRUQJCQk1 MQ0KPiA+ICsjZGVmaW5lIE9QQV9MSU5LRE9XTl9SRUFTT05fQ0hBU1NJU19DT05GSUcJCQk1Mg0K PiA+ICsvKiA1MyByZXNlcnZlZCAqLw0KPiA+ICsjZGVmaW5lIE9QQV9MSU5LRE9XTl9SRUFTT05f RU5EX1RPX0VORF9OT1RfSU5TVEFMTEVEDQo+IAk1NA0KPiA+ICsvKiA1NSByZXNlcnZlZCAqLw0K PiA+ICsjZGVmaW5lIE9QQV9MSU5LRE9XTl9SRUFTT05fUE9XRVJfUE9MSUNZCQkJNTYNCj4gPiAr I2RlZmluZSBPUEFfTElOS0RPV05fUkVBU09OX0xJTktTUEVFRF9QT0xJQ1kNCj4gCTU3DQo+ID4g KyNkZWZpbmUgT1BBX0xJTktET1dOX1JFQVNPTl9MSU5LV0lEVEhfUE9MSUNZDQo+IAk1OA0KPiA+ ICsvKiA1OSByZXNlcnZlZCAqLw0KPiA+ICsjZGVmaW5lIE9QQV9MSU5LRE9XTl9SRUFTT05fU1dJ VENIX01HTVQNCj4gCTYwDQo+ID4gKyNkZWZpbmUgT1BBX0xJTktET1dOX1JFQVNPTl9TTUFfRElT QUJMRUQJCQk2MQ0KPiA+ICsvKiA2MiByZXNlcnZlZCAqLw0KPiA+ICsjZGVmaW5lIE9QQV9MSU5L RE9XTl9SRUFTT05fVFJBTlNJRU5UDQo+IAk2Mw0KPiA+ICsvKiA2NC0yNTUgcmVzZXJ2ZWQgKi8N Cj4gPiArDQo+ID4gKy8qIE9QQSBMaW5rIEluaXQgcmVhc29uOyBpbmRpY2F0ZWQgYXMgZm9sbG93 czogKi8NCj4gPiArLyogMy03OyAxMS0xNSByZXNlcnZlZDsgOC0xNSBjbGVhcmVkIG9uIFBvbGxp bmctPkxpbmtVcCAqLw0KPiA+ICsjZGVmaW5lIE9QQV9MSU5LSU5JVF9SRUFTT05fTk9QICAgICAg ICAgICAgICAgICAwDQo+ID4gKyNkZWZpbmUgT1BBX0xJTktJTklUX1JFQVNPTl9MSU5LVVAgICAg ICAgICAgICAgICgxIDw8IDQpDQo+ID4gKyNkZWZpbmUgT1BBX0xJTktJTklUX1JFQVNPTl9GTEFQ UElORyAgICAgICAgICAgICgyIDw8IDQpDQo+ID4gKyNkZWZpbmUgT1BBX0xJTktJTklUX1JFQVNP Tl9DTEVBUiAgICAgICAgICAgICAgICg4IDw8IDQpDQo+ID4gKyNkZWZpbmUgT1BBX0xJTktJTklU X09VVFNJREVfUE9MSUNZICAgICAgICAgICAgICg4IDw8IDQpDQo+ID4gKyNkZWZpbmUgT1BBX0xJ TktJTklUX1FVQVJBTlRJTkVEICAgICAgICAgICAgICAgICg5IDw8IDQpDQo+ID4gKyNkZWZpbmUg T1BBX0xJTktJTklUX0lOU1VGSUNfQ0FQQUJJTElUWSAgICAgICAgICgxMCA8PCA0KQ0KPiA+ICsN Cj4gPiArI2RlZmluZSBPUEFfTElOS19TUEVFRF9OT1AgICAgICAgICAgICAgIDB4MDAwMCAgLyog IFJlc2VydmVkICgxLTUgR2JwcykgKi8NCj4gPiArI2RlZmluZSBPUEFfTElOS19TUEVFRF8xMl81 RyAgICAgICAgICAgIDB4MDAwMSAgLyogIDEyLjUgR2JwcyAqLw0KPiA+ICsjZGVmaW5lIE9QQV9M SU5LX1NQRUVEXzI1RyAgICAgICAgICAgICAgMHgwMDAyICAvKiAgMjUuNzgxMjU/ICBHYnBzIChF RFIpDQo+ICovDQo+ID4gKw0KPiA+ICsjZGVmaW5lIE9QQV9MSU5LX1dJRFRIXzFYICAgICAgICAg ICAgMHgwMDAxDQo+ID4gKyNkZWZpbmUgT1BBX0xJTktfV0lEVEhfMlggICAgICAgICAgICAweDAw MDINCj4gPiArI2RlZmluZSBPUEFfTElOS19XSURUSF8zWCAgICAgICAgICAgIDB4MDAwNA0KPiA+ ICsjZGVmaW5lIE9QQV9MSU5LX1dJRFRIXzRYICAgICAgICAgICAgMHgwMDA4DQo+ID4gKw0KPiA+ ICsjZGVmaW5lIE9QQV9DQVBfTUFTSzNfSXNTbm9vcFN1cHBvcnRlZCAgICAgICAgICAgICgxIDw8 IDcpDQo+ID4gKyNkZWZpbmUgT1BBX0NBUF9NQVNLM19Jc0FzeW5jU0MyVkxTdXBwb3J0ZWQgICAg ICAgKDEgPDwgNikNCj4gPiArI2RlZmluZSBPUEFfQ0FQX01BU0szX0lzQWRkclJhbmdlQ29uZmln U3VwcG9ydGVkICAoMSA8PCA1KQ0KPiA+ICsjZGVmaW5lIE9QQV9DQVBfTUFTSzNfSXNQYXNzVGhy b3VnaFN1cHBvcnRlZCAgICAgICgxIDw8IDQpDQo+ID4gKyNkZWZpbmUgT1BBX0NBUF9NQVNLM19J c1NoYXJlZFNwYWNlU3VwcG9ydGVkICAgICAgKDEgPDwgMykNCj4gPiArLyogcmVzZXJ2ZWQgKDEg PDwgMikgKi8NCj4gPiArI2RlZmluZSBPUEFfQ0FQX01BU0szX0lzVkxNYXJrZXJTdXBwb3J0ZWQg ICAgICAgICAoMSA8PCAxKQ0KPiA+ICsjZGVmaW5lIE9QQV9DQVBfTUFTSzNfSXNWTHJTdXBwb3J0 ZWQgICAgICAgICAgICAgICgxIDw8IDApDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogbmV3IE1U VSB2YWx1ZXMNCj4gPiArICovDQo+ID4gK2VudW0gew0KPiA+ICsJT1BBX01UVV84MTkyICA9IDYs DQo+ID4gKwlPUEFfTVRVXzEwMjQwID0gNywNCj4gPiArfTsNCj4gPiArDQo+ID4gK2VudW0gew0K PiA+ICsJT1BBX1BPUlRfUEhZU19DT05GX0RJU0NPTk5FQ1RFRCA9IDAsDQo+ID4gKwlPUEFfUE9S VF9QSFlTX0NPTkZfU1RBTkRBUkQgICAgID0gMSwNCj4gPiArCU9QQV9QT1JUX1BIWVNfQ09ORl9G SVhFRCAgICAgICAgPSAyLA0KPiA+ICsJT1BBX1BPUlRfUEhZU19DT05GX1ZBUklBQkxFICAgICA9 IDMsDQo+ID4gKwlPUEFfUE9SVF9QSFlTX0NPTkZfU0lfUEhPVE8gICAgID0gNA0KPiA+ICt9Ow0K PiA+ICsNCj4gPiArZW51bSBwb3J0X2luZm9fZmllbGRfbWFza3Mgew0KPiA+ICsJLyogdmwuY2Fw ICovDQo+ID4gKwlPUEFfUElfTUFTS19WTF9DQVAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4 MUYsDQo+ID4gKwkvKiBwb3J0X3N0YXRlcy5sZWRlbmFibGVfb2ZmbGluZXJlYXNvbiAqLw0KPiA+ ICsJT1BBX1BJX01BU0tfT0ZGTElORV9SRUFTT04gICAgICAgICAgICAgICAgPSAweDBGLA0KPiA+ ICsJT1BBX1BJX01BU0tfTEVEX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgPSAweDQwLA0KPiA+ ICsJLyogcG9ydF9zdGF0ZXMudW5zbGVlcHN0YXRlX2Rvd25kZWZzdGF0ZSAqLw0KPiA+ICsJT1BB X1BJX01BU0tfVU5TTEVFUF9TVEFURSAgICAgICAgICAgICAgICAgPSAweEYwLA0KPiA+ICsJT1BB X1BJX01BU0tfRE9XTkRFRl9TVEFURSAgICAgICAgICAgICAgICAgPSAweDBGLA0KPiA+ICsJLyog cG9ydF9zdGF0ZXMucG9ydHBoeXNzdGF0ZV9wb3J0c3RhdGUgKi8NCj4gPiArCU9QQV9QSV9NQVNL X1BPUlRfUEhZU0lDQUxfU1RBVEUgICAgICAgICAgID0gMHhGMCwNCj4gPiArCU9QQV9QSV9NQVNL X1BPUlRfU1RBVEUgICAgICAgICAgICAgICAgICAgID0gMHgwRiwNCj4gPiArCS8qIHBvcnRfcGh5 c19jb25mICovDQo+ID4gKwlPUEFfUElfTUFTS19QT1JUX1BIWVNJQ0FMX0NPTkYgICAgICAgICAg ICA9IDB4MEYsDQo+ID4gKwkvKiBjb2xsZWN0aXZlbWFza19tdWx0aWNhc3RtYXNrICovDQo+ID4g KwlPUEFfUElfTUFTS19DT0xMRUNUX01BU0sgICAgICAgICAgICAgICAgICA9IDB4MzgsDQo+ID4g KwlPUEFfUElfTUFTS19NVUxUSUNBU1RfTUFTSyAgICAgICAgICAgICAgICA9IDB4MDcsDQo+ID4g KwkvKiBta2V5cHJvdGVjdF9sbWMgKi8NCj4gPiArCU9QQV9QSV9NQVNLX01LRVlfUFJPVF9CSVQg ICAgICAgICAgICAgICAgID0gMHhDMCwNCj4gPiArCU9QQV9QSV9NQVNLX0xNQyAgICAgICAgICAg ICAgICAgICAgICAgICAgID0gMHgwRiwNCj4gPiArCS8qIHNtc2wgKi8NCj4gPiArCU9QQV9QSV9N QVNLX1NNU0wgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRiwNCj4gPiArCS8qIHBhcnRl bmZvcmNlX2ZpbHRlcnJhdyAqLw0KPiA+ICsJLyogRmlsdGVyIFJhdyBJbi9PdXQgYml0cyAxIGFu ZCAyIHdlcmUgcmVtb3ZlZCAqLw0KPiA+ICsJT1BBX1BJX01BU0tfTElOS0lOSVRfUkVBU09OICAg ICAgICAgICAgICAgPSAweEYwLA0KPiA+ICsJT1BBX1BJX01BU0tfUEFSVElUSU9OX0VORk9SQ0Vf SU4gICAgICAgICAgPSAweDA4LA0KPiA+ICsJT1BBX1BJX01BU0tfUEFSVElUSU9OX0VORk9SQ0Vf T1VUICAgICAgICAgPSAweDA0LA0KPiA+ICsJLyogb3BlcmF0aW9uYWxfdmxzICovDQo+ID4gKwlP UEFfUElfTUFTS19PUEVSQVRJT05BTF9WTCAgICAgICAgICAgICAgICA9IDB4MUYsDQo+ID4gKwkv KiBzYV9xcCAqLw0KPiA+ICsJT1BBX1BJX01BU0tfU0FfUVAgICAgICAgICAgICAgICAgICAgICAg ICAgPSAweDAwRkZGRkZGLA0KPiA+ICsJLyogc21fdHJhcF9xcCAqLw0KPiA+ICsJT1BBX1BJX01B U0tfU01fVFJBUF9RUCAgICAgICAgICAgICAgICAgICAgPSAweDAwRkZGRkZGLA0KPiA+ICsJLyog bG9jYWxwaHlfb3ZlcnJ1bl9lcnJvcnMgKi8NCj4gPiArCU9QQV9QSV9NQVNLX0xPQ0FMX1BIWV9F UlJPUlMgICAgICAgICAgICAgID0gMHhGMCwNCj4gPiArCU9QQV9QSV9NQVNLX09WRVJSVU5fRVJS T1JTICAgICAgICAgICAgICAgID0gMHgwRiwNCj4gPiArCS8qIGNsaWVudHJlcmVnX3N1Ym5ldHRp bWVvdXQgKi8NCj4gPiArCU9QQV9QSV9NQVNLX0NMSUVOVF9SRVJFR0lTVEVSICAgICAgICAgICAg ID0gMHg4MCwNCj4gPiArCU9QQV9QSV9NQVNLX1NVQk5FVF9USU1FT1VUICAgICAgICAgICAgICAg ID0gMHgxRiwNCj4gPiArCS8qIHBvcnRfbGlua19tb2RlICovDQo+ID4gKwlPUEFfUElfTUFTS19Q T1JUX0xJTktfU1VQUE9SVEVEICAgICAgICAgICA9ICgweDAwMUYgPDwgMTApLA0KPiA+ICsJT1BB X1BJX01BU0tfUE9SVF9MSU5LX0VOQUJMRUQgICAgICAgICAgICAgPSAoMHgwMDFGIDw8ICA1KSwN Cj4gPiArCU9QQV9QSV9NQVNLX1BPUlRfTElOS19BQ1RJVkUgICAgICAgICAgICAgID0gKDB4MDAx RiA8PCAgMCksDQo+ID4gKwkvKiBwb3J0X2xpbmtfY3JjX21vZGUgKi8NCj4gPiArCU9QQV9QSV9N QVNLX1BPUlRfTElOS19DUkNfU1VQUE9SVEVEICAgICAgID0gMHgwRjAwLA0KPiA+ICsJT1BBX1BJ X01BU0tfUE9SVF9MSU5LX0NSQ19FTkFCTEVEICAgICAgICAgPSAweDAwRjAsDQo+ID4gKwlPUEFf UElfTUFTS19QT1JUX0xJTktfQ1JDX0FDVElWRSAgICAgICAgICA9IDB4MDAwRiwNCj4gPiArCS8q IHBvcnRfbW9kZSAqLw0KPiA+ICsJT1BBX1BJX01BU0tfUE9SVF9NT0RFX1NFQ1VSSVRZX0NIRUNL ICAgICAgPSAweDAwMDEsDQo+ID4gKwlPUEFfUElfTUFTS19QT1JUX01PREVfMTZCX1RSQVBfUVVF UlkgICAgICA9IDB4MDAwMiwNCj4gPiArCU9QQV9QSV9NQVNLX1BPUlRfTU9ERV9QS0VZX0NPTlZF UlQgICAgICAgID0gMHgwMDA0LA0KPiA+ICsJT1BBX1BJX01BU0tfUE9SVF9NT0RFX1NDMlNDX01B UFBJTkcgICAgICAgPSAweDAwMDgsDQo+ID4gKwlPUEFfUElfTUFTS19QT1JUX01PREVfVkxfTUFS S0VSICAgICAgICAgICA9IDB4MDAxMCwNCj4gPiArCU9QQV9QSV9NQVNLX1BPUlRfUEFTU19USFJP VUdIICAgICAgICAgICAgID0gMHgwMDIwLA0KPiA+ICsJT1BBX1BJX01BU0tfUE9SVF9BQ1RJVkVf T1BUT01JWkUgICAgICAgICAgPSAweDAwNDAsDQo+ID4gKwkvKiBmbGl0X2NvbnRyb2wuaW50ZXJs ZWF2ZSAqLw0KPiA+ICsJT1BBX1BJX01BU0tfSU5URVJMRUFWRV9ESVNUX1NVUCAgICAgICAgICAg PSAoMHgwMDAzIDw8IDEyKSwNCj4gPiArCU9QQV9QSV9NQVNLX0lOVEVSTEVBVkVfRElTVF9FTkFC TEUgICAgICAgID0gKDB4MDAwMyA8PCAxMCksDQo+ID4gKwlPUEFfUElfTUFTS19JTlRFUkxFQVZF X01BWF9ORVNUX1RYICAgICAgICA9ICgweDAwMUYgPDwgIDUpLA0KPiA+ICsJT1BBX1BJX01BU0tf SU5URVJMRUFWRV9NQVhfTkVTVF9SWCAgICAgICAgPSAoMHgwMDFGIDw8ICAwKSwNCj4gPiArDQo+ ID4gKwkvKiBwb3J0X2Vycm9yX2FjdGlvbiAqLw0KPiA+ICsJT1BBX1BJX01BU0tfRVhfQlVGRkVS X09WRVJSVU4gICAgICAgICAgICAgICAgICA9IDB4ODAwMDAwMDAsDQo+ID4gKwkJLyogNyBiaXRz IHJlc2VydmVkICovDQo+ID4gKwlPUEFfUElfTUFTS19GTV9DRkdfRVJSX0VYQ0VFRF9NVUxUSUNB U1RfTElNSVQgID0NCj4gMHgwMDgwMDAwMCwNCj4gPiArCU9QQV9QSV9NQVNLX0ZNX0NGR19CQURf Q09OVFJPTF9GTElUICAgICAgICAgICAgPSAweDAwNDAwMDAwLA0KPiA+ICsJT1BBX1BJX01BU0tf Rk1fQ0ZHX0JBRF9QUkVFTVBUICAgICAgICAgICAgICAgICA9IDB4MDAyMDAwMDAsDQo+ID4gKwlP UEFfUElfTUFTS19GTV9DRkdfVU5TVVBQT1JURURfVkxfTUFSS0VSICAgICAgID0NCj4gMHgwMDEw MDAwMCwNCj4gPiArCU9QQV9QSV9NQVNLX0ZNX0NGR19CQURfQ1JEVF9BQ0sgICAgICAgICAgICAg ICAgPSAweDAwMDgwMDAwLA0KPiA+ICsJT1BBX1BJX01BU0tfRk1fQ0ZHX0JBRF9DVFJMX0RJU1Qg ICAgICAgICAgICAgICA9IDB4MDAwNDAwMDAsDQo+ID4gKwlPUEFfUElfTUFTS19GTV9DRkdfQkFE X1RBSUxfRElTVCAgICAgICAgICAgICAgID0gMHgwMDAyMDAwMCwNCj4gPiArCU9QQV9QSV9NQVNL X0ZNX0NGR19CQURfSEVBRF9ESVNUICAgICAgICAgICAgICAgPSAweDAwMDEwMDAwLA0KPiA+ICsJ CS8qIDIgYml0cyByZXNlcnZlZCAqLw0KPiA+ICsJT1BBX1BJX01BU0tfUE9SVF9SQ1ZfQkFEX1ZM X01BUktFUiAgICAgICAgICAgICA9IDB4MDAwMDIwMDAsDQo+ID4gKwlPUEFfUElfTUFTS19QT1JU X1JDVl9QUkVFTVBUX1ZMMTUgICAgICAgICAgICAgID0gMHgwMDAwMTAwMCwNCj4gPiArCU9QQV9Q SV9NQVNLX1BPUlRfUkNWX1BSRUVNUFRfRVJST1IgICAgICAgICAgICAgPSAweDAwMDAwODAwLA0K PiA+ICsJCS8qIDEgYml0IHJlc2VydmVkICovDQo+ID4gKwlPUEFfUElfTUFTS19QT1JUX1JDVl9C QURfTWlkVGFpbCAgICAgICAgICAgICAgID0gMHgwMDAwMDIwMCwNCj4gPiArCQkvKiAxIGJpdCBy ZXNlcnZlZCAqLw0KPiA+ICsJT1BBX1BJX01BU0tfUE9SVF9SQ1ZfQkFEX1NDICAgICAgICAgICAg ICAgICAgICA9IDB4MDAwMDAwODAsDQo+ID4gKwlPUEFfUElfTUFTS19QT1JUX1JDVl9CQURfTDIg ICAgICAgICAgICAgICAgICAgID0gMHgwMDAwMDA0MCwNCj4gPiArCU9QQV9QSV9NQVNLX1BPUlRf UkNWX0JBRF9ETElEICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDIwLA0KPiA+ICsJT1BBX1BJ X01BU0tfUE9SVF9SQ1ZfQkFEX1NMSUQgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMTAsDQo+ ID4gKwlPUEFfUElfTUFTS19QT1JUX1JDVl9QS1RMRU5fVE9PU0hPUlQgICAgICAgICAgID0gMHgw MDAwMDAwOCwNCj4gPiArCU9QQV9QSV9NQVNLX1BPUlRfUkNWX1BLVExFTl9UT09MT05HICAgICAg ICAgICAgPSAweDAwMDAwMDA0LA0KPiA+ICsJT1BBX1BJX01BU0tfUE9SVF9SQ1ZfQkFEX1BLVExF TiAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDIsDQo+ID4gKwlPUEFfUElfTUFTS19QT1JUX1JD Vl9CQURfTFQgICAgICAgICAgICAgICAgICAgID0gMHgwMDAwMDAwMSwNCj4gPiArDQo+ID4gKwkv KiBwYXNzX3Rocm91Z2gucmVzX2RyY3RsICovDQo+ID4gKwlPUEFfUElfTUFTS19QQVNTX1RIUk9V R0hfRFJfQ09OVFJPTCAgICAgICA9IDB4MDEsDQo+ID4gKw0KPiA+ICsJLyogYnVmZmVyX3VuaXRz ICovDQo+ID4gKwlPUEFfUElfTUFTS19CVUZfVU5JVF9WTDE1X0lOSVQgICAgICAgICAgICA9ICgw eDAwMDAwRkZGICA8PCAxMSksDQo+ID4gKwlPUEFfUElfTUFTS19CVUZfVU5JVF9WTDE1X0NSRURJ VF9SQVRFICAgICA9ICgweDAwMDAwMDFGICA8PA0KPiA2KSwNCj4gPiArCU9QQV9QSV9NQVNLX0JV Rl9VTklUX0NSRURJVF9BQ0sgICAgICAgICAgID0gKDB4MDAwMDAwMDMgIDw8ICAzKSwNCj4gPiAr CU9QQV9QSV9NQVNLX0JVRl9VTklUX0JVRl9BTExPQyAgICAgICAgICAgID0gKDB4MDAwMDAwMDMg IDw8ICAwKSwNCj4gPiArDQo+ID4gKwkvKiBuZWlnaF9tdHUucHZseF90b19tdHUgKi8NCj4gPiAr CU9QQV9QSV9NQVNLX05FSUdIX01UVV9QVkwwICAgICAgICAgICAgICAgID0gMHhGMCwNCj4gPiAr CU9QQV9QSV9NQVNLX05FSUdIX01UVV9QVkwxICAgICAgICAgICAgICAgID0gMHgwRiwNCj4gPiAr DQo+ID4gKwkvKiBuZWlnaF9tdHUudmxzdGFsbF9ob3FfbGlmZSAqLw0KPiA+ICsJT1BBX1BJX01B U0tfVkxfU1RBTEwgICAgICAgICAgICAgICAgICAgICAgPSAoMHgwMyA8PCA1KSwNCj4gPiArCU9Q QV9QSV9NQVNLX0hPUV9MSUZFICAgICAgICAgICAgICAgICAgICAgID0gKDB4MUYgPDwgMCksDQo+ ID4gKw0KPiA+ICsJLyogcG9ydF9uZWlnaF9tb2RlICovDQo+ID4gKwlPUEFfUElfTUFTS19ORUlH SF9NR01UX0FMTE9XRUQgICAgICAgICAgICA9ICgweDAxIDw8IDMpLA0KPiA+ICsJT1BBX1BJX01B U0tfTkVJR0hfRldfQVVUSF9CWVBBU1MgICAgICAgICAgPSAoMHgwMSA8PCAyKSwNCj4gPiArCU9Q QV9QSV9NQVNLX05FSUdIX05PREVfVFlQRSAgICAgICAgICAgICAgID0gKDB4MDMgPDwgMCksDQo+ ID4gKw0KPiA+ICsJLyogcmVzcHRpbWVfdmFsdWUgKi8NCj4gPiArCU9QQV9QSV9NQVNLX1JFU1BP TlNFX1RJTUVfVkFMVUUgICAgICAgICAgID0gMHgxRiwNCj4gPiArDQo+ID4gKwkvKiBtdHVjYXAg Ki8NCj4gPiArCU9QQV9QSV9NQVNLX01UVV9DQVAgICAgICAgICAgICAgICAgICAgICAgID0gMHgw RiwNCj4gPiArfTsNCj4gPiArDQo+ID4gKyNpZiBVU0VfUElfTEVEX0VOQUJMRQ0KPiA+ICtzdHJ1 Y3Qgb3BhX3BvcnRfc3RhdGVzIHsNCj4gPiArCXU4ICAgICByZXNlcnZlZDsNCj4gPiArCXU4ICAg ICBsZWRlbmFibGVfb2ZmbGluZXJlYXNvbjsgICAvKiAxIHJlcywgMSBiaXQsIDYgYml0cyAqLw0K PiA+ICsJdTggICAgIHJlc2VydmVkMjsNCj4gPiArCXU4ICAgICBwb3J0cGh5c3N0YXRlX3BvcnRz dGF0ZTsgICAvKiA0IGJpdHMsIDQgYml0cyAqLw0KPiA+ICt9Ow0KPiA+ICsjZGVmaW5lIFBJX0xF RF9FTkFCTEVfU1VQIDENCj4gPiArI2Vsc2UNCj4gPiArc3RydWN0IG9wYV9wb3J0X3N0YXRlcyB7 DQo+ID4gKwl1OCAgICAgcmVzZXJ2ZWQ7DQo+ID4gKwl1OCAgICAgb2ZmbGluZV9yZWFzb247ICAg ICAgICAgICAgLyogMiByZXMsIDYgYml0cyAqLw0KPiA+ICsJdTggICAgIHJlc2VydmVkMjsNCj4g PiArCXU4ICAgICBwb3J0cGh5c3N0YXRlX3BvcnRzdGF0ZTsgICAvKiA0IGJpdHMsIDQgYml0cyAq Lw0KPiA+ICt9Ow0KPiA+ICsjZGVmaW5lIFBJX0xFRF9FTkFCTEVfU1VQIDANCj4gPiArI2VuZGlm DQo+ID4gKw0KPiA+ICtzdHJ1Y3Qgb3BhX3BvcnRfc3RhdGVfaW5mbyB7DQo+ID4gKwlzdHJ1Y3Qg b3BhX3BvcnRfc3RhdGVzIHBvcnRfc3RhdGVzOw0KPiA+ICsJdTE2IGxpbmtfd2lkdGhfZG93bmdy YWRlX3R4X2FjdGl2ZTsNCj4gPiArCXUxNiBsaW5rX3dpZHRoX2Rvd25ncmFkZV9yeF9hY3RpdmU7 DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3Qgb3BhX3BvcnRfaW5mbyB7DQo+ID4gKwlfX2Jl MzIgbGlkOw0KPiA+ICsJX19iZTMyIGZsb3dfY29udHJvbF9tYXNrOw0KPiA+ICsNCj4gPiArCXN0 cnVjdCB7DQo+ID4gKwkJdTggICAgIHJlczsgICAgICAgICAgICAgICAgICAgICAgIC8qIHdhcyBp bml0dHlwZSAqLw0KPiA+ICsJCXU4ICAgICBjYXA7ICAgICAgICAgICAgICAgICAgICAgICAvKiAz IHJlcywgNSBiaXRzICovDQo+ID4gKwkJX19iZTE2IGhpZ2hfbGltaXQ7DQo+ID4gKwkJX19iZTE2 IHByZWVtcHRfbGltaXQ7DQo+ID4gKwkJdTggICAgIGFyYl9oaWdoX2NhcDsNCj4gPiArCQl1OCAg ICAgYXJiX2xvd19jYXA7DQo+ID4gKwl9IHZsOw0KPiA+ICsNCj4gPiArCXN0cnVjdCBvcGFfcG9y dF9zdGF0ZXMgIHBvcnRfc3RhdGVzOw0KPiA+ICsJdTggICAgIHBvcnRfcGh5c19jb25mOyAgICAg ICAgICAgICAgICAgICAgLyogNCByZXMsIDQgYml0cyAqLw0KPiA+ICsJdTggICAgIGNvbGxlY3Rp dmVtYXNrX211bHRpY2FzdG1hc2s7ICAgICAgLyogMiByZXMsIDMsIDMgKi8NCj4gPiArCXU4ICAg ICBta2V5cHJvdGVjdF9sbWM7ICAgICAgICAgICAgICAgICAgIC8qIDIgYml0cywgMiByZXMsIDQg Yml0cyAqLw0KPiA+ICsJdTggICAgIHNtc2w7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogMyByZXMsIDUgYml0cyAqLw0KPiA+ICsNCj4gPiArCXU4ICAgICBwYXJ0ZW5mb3JjZV9maWx0 ZXJyYXc7ICAgICAgICAgICAgIC8qIGJpdCBmaWVsZHMgKi8NCj4gPiArCXU4ICAgICBvcGVyYXRp b25hbF92bHM7ICAgICAgICAgICAgICAgICAgICAvKiAzIHJlcywgNSBiaXRzICovDQo+ID4gKwlf X2JlMTYgcGtleV84YjsNCj4gPiArCV9fYmUxNiBwa2V5XzEwYjsNCj4gPiArCV9fYmUxNiBta2V5 X3Zpb2xhdGlvbnM7DQo+ID4gKw0KPiA+ICsJX19iZTE2IHBrZXlfdmlvbGF0aW9uczsNCj4gPiAr CV9fYmUxNiBxa2V5X3Zpb2xhdGlvbnM7DQo+ID4gKwlfX2JlMzIgc21fdHJhcF9xcDsgICAgICAg ICAgICAgICAgICAgICAgICAvKiA4IGJpdHMsIDI0IGJpdHMgKi8NCj4gPiArDQo+ID4gKwlfX2Jl MzIgc2FfcXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA4IGJpdHMsIDI0IGJpdHMg Ki8NCj4gPiArCXU4ICAgICBuZWlnaF9wb3J0X251bTsNCj4gPiArCXU4ICAgICBsaW5rX2Rvd25f cmVhc29uOw0KPiA+ICsJdTggICAgIG5laWdoX2xpbmtfZG93bl9yZWFzb247DQo+ID4gKwl1OCAg ICAgY2xpZW50cmVyZWdfc3VibmV0dGltZW91dDsJICAvKiAxIGJpdCwgMiBiaXRzLCA1ICovDQo+ ID4gKw0KPiA+ICsJc3RydWN0IHsNCj4gPiArCQlfX2JlMTYgc3VwcG9ydGVkOw0KPiA+ICsJCV9f YmUxNiBlbmFibGVkOw0KPiA+ICsJCV9fYmUxNiBhY3RpdmU7DQo+ID4gKwl9IGxpbmtfc3BlZWQ7 DQo+ID4gKwlzdHJ1Y3Qgew0KPiA+ICsJCV9fYmUxNiBzdXBwb3J0ZWQ7DQo+ID4gKwkJX19iZTE2 IGVuYWJsZWQ7DQo+ID4gKwkJX19iZTE2IGFjdGl2ZTsNCj4gPiArCX0gbGlua193aWR0aDsNCj4g PiArCXN0cnVjdCB7DQo+ID4gKwkJX19iZTE2IHN1cHBvcnRlZDsNCj4gPiArCQlfX2JlMTYgZW5h YmxlZDsNCj4gPiArCQlfX2JlMTYgdHhfYWN0aXZlOw0KPiA+ICsJCV9fYmUxNiByeF9hY3RpdmU7 DQo+ID4gKwl9IGxpbmtfd2lkdGhfZG93bmdyYWRlOw0KPiA+ICsJX19iZTE2IHBvcnRfbGlua19t b2RlOyAgICAgICAgICAgICAgICAgIC8qIDEgcmVzLCA1IGJpdHMsIDUgYml0cywgNSBiaXRzICov DQo+ID4gKwlfX2JlMTYgcG9ydF9sdHBfY3JjX21vZGU7ICAgICAgICAgICAgICAgLyogNCByZXMs IDQgYml0cywgNCBiaXRzLCA0IGJpdHMgKi8NCj4gPiArDQo+ID4gKwlfX2JlMTYgcG9ydF9tb2Rl OyAgICAgICAgICAgICAgICAgICAgICAgLyogOSByZXMsIGJpdCBmaWVsZHMgKi8NCj4gPiArCXN0 cnVjdCB7DQo+ID4gKwkJX19iZTE2IHN1cHBvcnRlZDsNCj4gPiArCQlfX2JlMTYgZW5hYmxlZDsN Cj4gPiArCX0gcG9ydF9wYWNrZXRfZm9ybWF0Ow0KPiA+ICsJc3RydWN0IHsNCj4gPiArCQlfX2Jl MTYgaW50ZXJsZWF2ZTsgIC8qIDIgcmVzLCAyLDIsNSw1ICovDQo+ID4gKwkJc3RydWN0IHsNCj4g PiArCQkJX19iZTE2IG1pbl9pbml0aWFsOw0KPiA+ICsJCQlfX2JlMTYgbWluX3RhaWw7DQo+ID4g KwkJCXU4ICAgICBsYXJnZV9wa3RfbGltaXQ7DQo+ID4gKwkJCXU4ICAgICBzbWFsbF9wa3RfbGlt aXQ7DQo+ID4gKwkJCXU4ICAgICBtYXhfc21hbGxfcGt0X2xpbWl0Ow0KPiA+ICsJCQl1OCAgICAg cHJlZW1wdGlvbl9saW1pdDsNCj4gPiArCQl9IHByZWVtcHRpb247DQo+ID4gKwl9IGZsaXRfY29u dHJvbDsNCj4gPiArDQo+ID4gKwlfX2JlMzIgcmVzZXJ2ZWQ0Ow0KPiA+ICsJX19iZTMyIHBvcnRf ZXJyb3JfYWN0aW9uOyAvKiBiaXQgZmllbGQgKi8NCj4gPiArDQo+ID4gKwlzdHJ1Y3Qgew0KPiA+ ICsJCXU4IGVncmVzc19wb3J0Ow0KPiA+ICsJCXU4IHJlc19kcmN0bDsgICAgICAgICAgICAgICAg ICAgIC8qIDcgcmVzLCAxICovDQo+ID4gKwl9IHBhc3NfdGhyb3VnaDsNCj4gPiArCV9fYmUxNiBt a2V5X2xlYXNlX3BlcmlvZDsNCj4gPiArCV9fYmUzMiBidWZmZXJfdW5pdHM7ICAgICAgICAgICAg ICAgICAgICAgLyogOSByZXMsIDEyLCA1LCAzLCAzICovDQo+ID4gKw0KPiA+ICsJX19iZTMyIHJl c2VydmVkNTsNCj4gPiArCV9fYmUzMiBzbV9saWQ7DQo+ID4gKw0KPiA+ICsJX19iZTY0IG1rZXk7 DQo+ID4gKw0KPiA+ICsJX19iZTY0IHN1Ym5ldF9wcmVmaXg7DQo+ID4gKw0KPiA+ICsJc3RydWN0 IHsNCj4gPiArCQl1OCBwdmx4X3RvX210dVtPUEFfTUFYX1ZMUy8yXTsgLyogNCBiaXRzLCA0IGJp dHMgKi8NCj4gPiArCX0gbmVpZ2hfbXR1Ow0KPiA+ICsNCj4gPiArCXN0cnVjdCB7DQo+ID4gKwkJ dTggdmxzdGFsbF9ob3FsaWZlOyAgICAgICAgICAgICAvKiAzIGJpdHMsIDUgYml0cyAqLw0KPiA+ ICsJfSB4bWl0X3FbT1BBX01BWF9WTFNdOw0KPiA+ICsNCj4gPiArCXN0cnVjdCB7DQo+ID4gKwkJ dTggYWRkclsxNl07DQo+ID4gKwl9IGlwYWRkcl9pcHY2Ow0KPiA+ICsNCj4gPiArCXN0cnVjdCB7 DQo+ID4gKwkJdTggYWRkcls0XTsNCj4gPiArCX0gaXBhZGRyX2lwdjQ7DQo+ID4gKw0KPiA+ICsJ dTMyICAgIHJlc2VydmVkNjsNCj4gPiArCXUzMiAgICByZXNlcnZlZDc7DQo+ID4gKwl1MzIgICAg cmVzZXJ2ZWQ4Ow0KPiA+ICsNCj4gPiArCV9fYmU2NCBuZWlnaF9ub2RlX2d1aWQ7DQo+ID4gKw0K PiA+ICsJX19iZTMyIGliX2NhcF9tYXNrOw0KPiA+ICsJX19iZTE2IHJlc2VydmVkOTsgICAgICAg ICAgICAgICAgICAgIC8qIHdhcyBpYl9jYXBfbWFzazIgKi8NCj4gPiArCV9fYmUxNiBvcGFfY2Fw X21hc2s7DQo+ID4gKw0KPiA+ICsJX19iZTMyIHJlc2VydmVkMTA7ICAgICAgICAgICAgICAgICAg IC8qIHdhcyBsaW5rX3JvdW5kdHJpcF9sYXRlbmN5ICovDQo+ID4gKwlfX2JlMTYgb3ZlcmFsbF9i dWZmZXJfc3BhY2U7DQo+ID4gKwlfX2JlMTYgcmVzZXJ2ZWQxMTsgICAgICAgICAgICAgICAgICAg Lyogd2FzIG1heF9jcmVkaXRfaGludCAqLw0KPiA+ICsNCj4gPiArCV9fYmUxNiBkaWFnX2NvZGU7 DQo+ID4gKwlzdHJ1Y3Qgew0KPiA+ICsJCXU4IGJ1ZmZlcjsNCj4gPiArCQl1OCB3aXJlOw0KPiA+ ICsJfSByZXBsYXlfZGVwdGg7DQo+ID4gKwl1OCAgICAgcG9ydF9uZWlnaF9tb2RlOw0KPiA+ICsJ dTggICAgIG10dWNhcDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQgcmVzLCA0IGJpdHMg Ki8NCj4gPiArDQo+ID4gKwl1OCAgICAgcmVzcHRpbWV2YWx1ZTsJCSAgICAgICAgLyogMyByZXMs IDUgYml0cyAqLw0KPiA+ICsJdTggICAgIGxvY2FsX3BvcnRfbnVtOw0KPiA+ICsJdTggICAgIHJl c2VydmVkMTI7DQo+ID4gKwl1OCAgICAgcmVzZXJ2ZWQxMzsgICAgICAgICAgICAgICAgICAgICAg IC8qIHdhcyBndWlkX2NhcCAqLw0KPiA+ICt9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsNCj4g PiArDQo+ID4gKyNlbmRpZiAvKiBPUEFfUE9SVF9JTkZPX0ggKi8NCj4gPiBkaWZmIC0tZ2l0IGEv aW5jbHVkZS9yZG1hL29wYV9zbWkuaCBiL2luY2x1ZGUvcmRtYS9vcGFfc21pLmggaW5kZXgNCj4g PiAyOTA2M2U4Li40YTUyOWVmIDEwMDY0NA0KPiA+IC0tLSBhL2luY2x1ZGUvcmRtYS9vcGFfc21p LmgNCj4gPiArKysgYi9pbmNsdWRlL3JkbWEvb3BhX3NtaS5oDQo+ID4gQEAgLTQwLDYgKzQwLDEw IEBADQo+ID4gICNkZWZpbmUgT1BBX1NNUF9EUl9EQVRBX1NJWkUJCQkxODcyDQo+ID4gICNkZWZp bmUgT1BBX1NNUF9NQVhfUEFUSF9IT1BTCQkJNjQNCj4gPg0KPiA+ICsjZGVmaW5lIE9QQV9NQVhf VkxTCQkJCTMyDQo+ID4gKyNkZWZpbmUgT1BBX01BWF9TTFMJCQkJMzINCj4gPiArI2RlZmluZSBP UEFfTUFYX1NDUwkJCQkzMg0KPiA+ICsNCj4gPiAgI2RlZmluZSBPUEFfU01JX0NMQVNTX1ZFUlNJ T04JCQkweDgwDQo+ID4NCj4gPiAgI2RlZmluZSBPUEFfTElEX1BFUk1JU1NJVkUNCj4gCWNwdV90 b19iZTMyKDB4RkZGRkZGRkYpDQo+ID4gQEAgLTczLDYgKzc3LDQ5IEBAIHN0cnVjdCBvcGFfc21w IHsNCj4gPiAgfSBfX3BhY2tlZDsNCj4gPg0KPiA+DQo+ID4gKy8qIFN1Ym5ldCBtYW5hZ2VtZW50 IGF0dHJpYnV0ZXMgKi8NCj4gPiArLyogLi4uICovDQo+ID4gKyNkZWZpbmUgT1BBX0FUVFJJQl9J RF9OT0RFX0RFU0NSSVBUSU9ODQo+IAljcHVfdG9fYmUxNigweDAwMTApDQo+ID4gKyNkZWZpbmUg T1BBX0FUVFJJQl9JRF9OT0RFX0lORk8NCj4gCWNwdV90b19iZTE2KDB4MDAxMSkNCj4gPiArI2Rl ZmluZSBPUEFfQVRUUklCX0lEX1BPUlRfSU5GTwkJCWNwdV90b19iZTE2KDB4MDAxNSkNCj4gPiAr I2RlZmluZSBPUEFfQVRUUklCX0lEX1BBUlRJVElPTl9UQUJMRQkJY3B1X3RvX2JlMTYoMHgwMDE2 KQ0KPiA+ICsjZGVmaW5lIE9QQV9BVFRSSUJfSURfU0xfVE9fU0NfTUFQCQljcHVfdG9fYmUxNigw eDAwMTcpDQo+IA0KPiBJcyB0aGlzIHJlYWxseSBTTF9UT19TQyBvciBTTF9UT19WTCA/IFRoZSBJ RHMgPCAweDgwMDAgYXBwZWFyIHRvIG1hcCB0byBJQg0KPiBzdGFuZGFyZCBhdHRyaWJ1dGVzLg0K PiANCj4gPiArI2RlZmluZSBPUEFfQVRUUklCX0lEX1ZMX0FSQklUUkFUSU9OCQljcHVfdG9fYmUx NigweDAwMTgpDQo+ID4gKyNkZWZpbmUgT1BBX0FUVFJJQl9JRF9TTV9JTkZPCQkJY3B1X3RvX2Jl MTYoMHgwMDIwKQ0KPiA+ICsjZGVmaW5lIE9QQV9BVFRSSUJfSURfQ0FCTEVfSU5GTwkJY3B1X3Rv X2JlMTYoMHgwMDMyKQ0KPiA+ICsjZGVmaW5lIE9QQV9BVFRSSUJfSURfQUdHUkVHQVRFDQo+IAlj cHVfdG9fYmUxNigweDAwODApDQo+ID4gKyNkZWZpbmUgT1BBX0FUVFJJQl9JRF9TQ19UT19TTF9N QVAJCWNwdV90b19iZTE2KDB4MDA4MikNCj4gPiArI2RlZmluZSBPUEFfQVRUUklCX0lEX1NDX1RP X1ZMUl9NQVAJCWNwdV90b19iZTE2KDB4MDA4MykNCj4gPiArI2RlZmluZSBPUEFfQVRUUklCX0lE X1NDX1RPX1ZMVF9NQVAJCWNwdV90b19iZTE2KDB4MDA4NCkNCj4gPiArI2RlZmluZSBPUEFfQVRU UklCX0lEX1NDX1RPX1ZMTlRfTUFQCQljcHVfdG9fYmUxNigweDAwODUpDQo+ID4gKy8qIC4uLiAq Lw0KPiA+ICsjZGVmaW5lIE9QQV9BVFRSSUJfSURfUE9SVF9TVEFURV9JTkZPCQljcHVfdG9fYmUx NigweDAwODcpDQo+ID4gKy8qIC4uLiAqLw0KPiA+ICsjZGVmaW5lIE9QQV9BVFRSSUJfSURfQlVG RkVSX0NPTlRST0xfVEFCTEUJY3B1X3RvX2JlMTYoMHgwMDhBKQ0KPiA+ICsvKiAuLi4gKi8NCj4g PiArDQo+ID4gK3N0cnVjdCBvcGFfbm9kZV9kZXNjcmlwdGlvbiB7DQo+ID4gKwl1OCBkYXRhWzY0 XTsNCj4gPiArfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7DQo+ID4gKw0KPiA+ICtzdHJ1Y3Qg b3BhX25vZGVfaW5mbyB7DQo+ID4gKwl1OCAgICAgIGJhc2VfdmVyc2lvbjsNCj4gPiArCXU4ICAg ICAgY2xhc3NfdmVyc2lvbjsNCj4gPiArCXU4ICAgICAgbm9kZV90eXBlOw0KPiA+ICsJdTggICAg ICBudW1fcG9ydHM7DQo+ID4gKwlfX2JlMzIgIHJlc2VydmVkOw0KPiA+ICsJX19iZTY0ICBzeXN0 ZW1faW1hZ2VfZ3VpZDsNCj4gPiArCV9fYmU2NCAgbm9kZV9ndWlkOw0KPiA+ICsJX19iZTY0ICBw b3J0X2d1aWQ7DQo+ID4gKwlfX2JlMTYgIHBhcnRpdGlvbl9jYXA7DQo+ID4gKwlfX2JlMTYgIGRl dmljZV9pZDsNCj4gPiArCV9fYmUzMiAgcmV2aXNpb247DQo+ID4gKwl1OCAgICAgIGxvY2FsX3Bv cnRfbnVtOw0KPiA+ICsJdTggICAgICB2ZW5kb3JfaWRbM107ICAgLyogbmV0d29yayBieXRlIG9y ZGVyICovDQo+ID4gK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOw0KPiA+ICsNCj4gPiArI2Rl ZmluZSBPUEFfUEFSVElUSU9OX1RBQkxFX0JMS19TSVpFIDMyDQo+ID4gKw0KPiA+ICBzdGF0aWMg aW5saW5lIHU4DQo+ID4gIG9wYV9nZXRfc21wX2RpcmVjdGlvbihzdHJ1Y3Qgb3BhX3NtcCAqc21w KSAgew0KPiANCj4gDQo+IDxzbmlwLi4uPg0K -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hal, I'm working on a couple of patches to address these comments. I will be submitting them in the next day or so. On Wed, Jun 17, 2015 at 10:12:41AM -0400, Hal Rosenstock wrote: > On 6/17/2015 8:28 AM, Mike Marciniszyn wrote: > > From: Ira Weiny <ira.weiny@intel.com> > > > > Add common OPA header definitions for driver > > build: > > - opa_port_info.h > > - opa_smi.h > > - hfi1_user.sh > > > > Additionally, ib_mad.h, has additional definitions > > that are common to ib_drivers including: > > - trap support > > - cca support > > > > The qib driver has the duplication removed in favor > > those in ib_mad.h > > > > Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com> > > Reviewed-by: John, Jubin <jubin.john@intel.com> > > Signed-off-by: Ira Weiny <ira.weiny@intel.com> > > --- > > drivers/infiniband/hw/qib/qib_mad.h | 147 +----------- > > include/rdma/ib_mad.h | 138 +++++++++++ > > include/rdma/opa_port_info.h | 433 +++++++++++++++++++++++++++++++++++ > > Should opa_port_info.h be in include/rdma or in drivers/infiniband/hw/hfi1 ? This file and opa_smi.h were placed here following the pattern of the same ib_*.h files. Indeed because there is currently only 1 OPA driver it could be moved to the hfi1 driver directory. However, I prefer to keep them in rdma. If Doug prefers I can send a patch to move them. <snip> > > + > > +/* > > + * Generic trap/notice producers > > + */ > > +#define IB_NOTICE_PROD_CA cpu_to_be16(1) > > +#define IB_NOTICE_PROD_SWITCH cpu_to_be16(2) > > +#define IB_NOTICE_PROD_ROUTER cpu_to_be16(3) > > +#define IB_NOTICE_PROD_CLASS_MGR cpu_to_be16(4) > > + > > +/* > > + * Generic trap/notice numbers > > SM Class trap/notice numbers > > As such, should they be in ib_smi.h rather than ib_mad.h ? Fixed in my patch series. > > > + */ > > +#define IB_NOTICE_TRAP_LLI_THRESH cpu_to_be16(129) > > +#define IB_NOTICE_TRAP_EBO_THRESH cpu_to_be16(130) > > +#define IB_NOTICE_TRAP_FLOW_UPDATE cpu_to_be16(131) > > +#define IB_NOTICE_TRAP_CAP_MASK_CHG cpu_to_be16(144) > > +#define IB_NOTICE_TRAP_SYS_GUID_CHG cpu_to_be16(145) > > +#define IB_NOTICE_TRAP_BAD_MKEY cpu_to_be16(256) > > +#define IB_NOTICE_TRAP_BAD_PKEY cpu_to_be16(257) > > +#define IB_NOTICE_TRAP_BAD_QKEY cpu_to_be16(258) > > + > > +/* > > + * Repress trap/notice flags > > + */ > > +#define IB_NOTICE_REPRESS_LLI_THRESH (1 << 0) > > +#define IB_NOTICE_REPRESS_EBO_THRESH (1 << 1) > > +#define IB_NOTICE_REPRESS_FLOW_UPDATE (1 << 2) > > +#define IB_NOTICE_REPRESS_CAP_MASK_CHG (1 << 3) > > +#define IB_NOTICE_REPRESS_SYS_GUID_CHG (1 << 4) > > +#define IB_NOTICE_REPRESS_BAD_MKEY (1 << 5) > > +#define IB_NOTICE_REPRESS_BAD_PKEY (1 << 6) > > +#define IB_NOTICE_REPRESS_BAD_QKEY (1 << 7) > > What does this correspond to ? Is this some standard thing or are these > defines driver specific ? > Fixed in my patch series. > > > + > > +/* > > + * Generic trap/notice other local changes flags (trap 144). > > SM Class trap/notice other local changes flags (trap 144) > > As such, should they be in ib_smi.h rather than ib_mad.h ? Fixed in my patch series. > > > + */ > > +#define IB_NOTICE_TRAP_LSE_CHG 0x04 /* Link Speed Enable changed */ > > +#define IB_NOTICE_TRAP_LWE_CHG 0x02 /* Link Width Enable changed */ > > +#define IB_NOTICE_TRAP_NODE_DESC_CHG 0x01 > > + > > +/* > > + * Generic trap/notice M_Key volation flags in dr_trunc_hop (trap 256). > > SM Class trap/notice M_Key violation flags in dr_trunc_hop (trap 256) > > As such, should they be in ib_smi.h rather than ib_mad.h ? Fixed in my patch series. > > > + */ > > +#define IB_NOTICE_TRAP_DR_NOTICE 0x80 > > +#define IB_NOTICE_TRAP_DR_TRUNC 0x40 > > + > > enum { > > IB_MGMT_MAD_HDR = 24, > > IB_MGMT_MAD_DATA = 232, > > @@ -240,6 +294,90 @@ struct ib_class_port_info { > > __be32 trap_qkey; > > }; > > > > +struct ib_node_info { > > + u8 base_version; > > + u8 class_version; > > + u8 node_type; > > + u8 num_ports; > > + __be64 sys_guid; > > + __be64 node_guid; > > + __be64 port_guid; > > + __be16 partition_cap; > > + __be16 device_id; > > + __be32 revision; > > + u8 local_port_num; > > + u8 vendor_id[3]; > > +} __packed; > > This is SM attribute. Should it go into ib_smi.h like ib_port_info ? Fixed in my patch series. > > > + > > +struct ib_mad_notice_attr { > > + u8 generic_type; > > + u8 prod_type_msb; > > + __be16 prod_type_lsb; > > + __be16 trap_num; > > + __be16 issuer_lid; > > + __be16 toggle_count; > > + > > + union { > > + struct { > > + u8 details[54]; > > + } raw_data; > > + > > + struct { > > + __be16 reserved; > > + __be16 lid; /* where violation happened */ > > + u8 port_num; /* where violation happened */ > > + } __packed ntc_129_131; > > + > > + struct { > > + __be16 reserved; > > + __be16 lid; /* LID where change occurred */ > > + u8 reserved2; > > + u8 local_changes; /* low bit - local changes */ > > + __be32 new_cap_mask; /* new capability mask */ > > + u8 reserved3; > > + u8 change_flags; /* low 3 bits only */ > > I think these 2 fields above should be combined to: > __be16 change_flags; > per IBA 1.3 Fixed in my patch series, but I want to do some testing so this patch will lag the others. > > > + } __packed ntc_144; > > + > > + struct { > > + __be16 reserved; > > + __be16 lid; /* lid where sys guid changed */ > > + __be16 reserved2; > > + __be64 new_sys_guid; > > + } __packed ntc_145; > > + > > + struct { > > + __be16 reserved; > > + __be16 lid; > > + __be16 dr_slid; > > + u8 method; > > + u8 reserved2; > > + __be16 attr_id; > > + __be32 attr_mod; > > + __be64 mkey; > > + u8 reserved3; > > + u8 dr_trunc_hop; > > + u8 dr_rtn_path[30]; > > + } __packed ntc_256; > > + > > + struct { > > + __be16 reserved; > > + __be16 lid1; > > + __be16 lid2; > > + __be32 key; > > + __be32 sl_qp1; /* SL: high 4 bits */ > > + __be32 qp2; /* high 8 bits reserved */ > > + union ib_gid gid1; > > + union ib_gid gid2; > > + } __packed ntc_257_258; > > + > > + } details; > > +}; > > + > > +struct ib_vl_weight_elem { > > + u8 vl; /* VL is low 5 bits, upper 3 bits reserved */ > > Comment is appropriate for OPA. IBA is VL is low 4 bits, upper 4 bits > reserved. Fixed in my patch series. > > > + u8 weight; > > +}; > > As this is SM class attribute, should it be in ib_smi.h rather than > ib_mad.h ? Fixed in my patch series. <snip> > > > > +/* Subnet management attributes */ > > +/* ... */ > > +#define OPA_ATTRIB_ID_NODE_DESCRIPTION cpu_to_be16(0x0010) > > +#define OPA_ATTRIB_ID_NODE_INFO cpu_to_be16(0x0011) > > +#define OPA_ATTRIB_ID_PORT_INFO cpu_to_be16(0x0015) > > +#define OPA_ATTRIB_ID_PARTITION_TABLE cpu_to_be16(0x0016) > > +#define OPA_ATTRIB_ID_SL_TO_SC_MAP cpu_to_be16(0x0017) > > Is this really SL_TO_SC or SL_TO_VL ? The IDs < 0x8000 appear to map to > IB standard attributes. This is SL to SC. Even though these share the same enumeration value these attributes are only applicable to an OPA device with the OPA Class Version of the MAD. Ira -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/infiniband/hw/qib/qib_mad.h b/drivers/infiniband/hw/qib/qib_mad.h index 941d4d5..57e99dc 100644 --- a/drivers/infiniband/hw/qib/qib_mad.h +++ b/drivers/infiniband/hw/qib/qib_mad.h @@ -36,148 +36,17 @@ #include <rdma/ib_pma.h> -#define IB_SMP_UNSUP_VERSION cpu_to_be16(0x0004) -#define IB_SMP_UNSUP_METHOD cpu_to_be16(0x0008) -#define IB_SMP_UNSUP_METH_ATTR cpu_to_be16(0x000C) -#define IB_SMP_INVALID_FIELD cpu_to_be16(0x001C) +#define IB_SMP_UNSUP_VERSION \ +cpu_to_be16(IB_MGMT_MAD_STATUS_BAD_VERSION) -struct ib_node_info { - u8 base_version; - u8 class_version; - u8 node_type; - u8 num_ports; - __be64 sys_guid; - __be64 node_guid; - __be64 port_guid; - __be16 partition_cap; - __be16 device_id; - __be32 revision; - u8 local_port_num; - u8 vendor_id[3]; -} __packed; - -struct ib_mad_notice_attr { - u8 generic_type; - u8 prod_type_msb; - __be16 prod_type_lsb; - __be16 trap_num; - __be16 issuer_lid; - __be16 toggle_count; - - union { - struct { - u8 details[54]; - } raw_data; - - struct { - __be16 reserved; - __be16 lid; /* where violation happened */ - u8 port_num; /* where violation happened */ - } __packed ntc_129_131; - - struct { - __be16 reserved; - __be16 lid; /* LID where change occurred */ - u8 reserved2; - u8 local_changes; /* low bit - local changes */ - __be32 new_cap_mask; /* new capability mask */ - u8 reserved3; - u8 change_flags; /* low 3 bits only */ - } __packed ntc_144; - - struct { - __be16 reserved; - __be16 lid; /* lid where sys guid changed */ - __be16 reserved2; - __be64 new_sys_guid; - } __packed ntc_145; - - struct { - __be16 reserved; - __be16 lid; - __be16 dr_slid; - u8 method; - u8 reserved2; - __be16 attr_id; - __be32 attr_mod; - __be64 mkey; - u8 reserved3; - u8 dr_trunc_hop; - u8 dr_rtn_path[30]; - } __packed ntc_256; - - struct { - __be16 reserved; - __be16 lid1; - __be16 lid2; - __be32 key; - __be32 sl_qp1; /* SL: high 4 bits */ - __be32 qp2; /* high 8 bits reserved */ - union ib_gid gid1; - union ib_gid gid2; - } __packed ntc_257_258; - - } details; -}; - -/* - * Generic trap/notice types - */ -#define IB_NOTICE_TYPE_FATAL 0x80 -#define IB_NOTICE_TYPE_URGENT 0x81 -#define IB_NOTICE_TYPE_SECURITY 0x82 -#define IB_NOTICE_TYPE_SM 0x83 -#define IB_NOTICE_TYPE_INFO 0x84 +#define IB_SMP_UNSUP_METHOD \ +cpu_to_be16(IB_MGMT_MAD_STATUS_UNSUPPORTED_METHOD) -/* - * Generic trap/notice producers - */ -#define IB_NOTICE_PROD_CA cpu_to_be16(1) -#define IB_NOTICE_PROD_SWITCH cpu_to_be16(2) -#define IB_NOTICE_PROD_ROUTER cpu_to_be16(3) -#define IB_NOTICE_PROD_CLASS_MGR cpu_to_be16(4) +#define IB_SMP_UNSUP_METH_ATTR \ +cpu_to_be16(IB_MGMT_MAD_STATUS_UNSUPPORTED_METHOD_ATTRIB) -/* - * Generic trap/notice numbers - */ -#define IB_NOTICE_TRAP_LLI_THRESH cpu_to_be16(129) -#define IB_NOTICE_TRAP_EBO_THRESH cpu_to_be16(130) -#define IB_NOTICE_TRAP_FLOW_UPDATE cpu_to_be16(131) -#define IB_NOTICE_TRAP_CAP_MASK_CHG cpu_to_be16(144) -#define IB_NOTICE_TRAP_SYS_GUID_CHG cpu_to_be16(145) -#define IB_NOTICE_TRAP_BAD_MKEY cpu_to_be16(256) -#define IB_NOTICE_TRAP_BAD_PKEY cpu_to_be16(257) -#define IB_NOTICE_TRAP_BAD_QKEY cpu_to_be16(258) - -/* - * Repress trap/notice flags - */ -#define IB_NOTICE_REPRESS_LLI_THRESH (1 << 0) -#define IB_NOTICE_REPRESS_EBO_THRESH (1 << 1) -#define IB_NOTICE_REPRESS_FLOW_UPDATE (1 << 2) -#define IB_NOTICE_REPRESS_CAP_MASK_CHG (1 << 3) -#define IB_NOTICE_REPRESS_SYS_GUID_CHG (1 << 4) -#define IB_NOTICE_REPRESS_BAD_MKEY (1 << 5) -#define IB_NOTICE_REPRESS_BAD_PKEY (1 << 6) -#define IB_NOTICE_REPRESS_BAD_QKEY (1 << 7) - -/* - * Generic trap/notice other local changes flags (trap 144). - */ -#define IB_NOTICE_TRAP_LSE_CHG 0x04 /* Link Speed Enable changed */ -#define IB_NOTICE_TRAP_LWE_CHG 0x02 /* Link Width Enable changed */ -#define IB_NOTICE_TRAP_NODE_DESC_CHG 0x01 - -/* - * Generic trap/notice M_Key volation flags in dr_trunc_hop (trap 256). - */ -#define IB_NOTICE_TRAP_DR_NOTICE 0x80 -#define IB_NOTICE_TRAP_DR_TRUNC 0x40 - -struct ib_vl_weight_elem { - u8 vl; /* Only low 4 bits, upper 4 bits reserved */ - u8 weight; -}; +#define IB_SMP_INVALID_FIELD \ +cpu_to_be16(IB_MGMT_MAD_STATUS_INVALID_ATTRIB_VALUE) #define IB_VLARB_LOWPRI_0_31 1 #define IB_VLARB_LOWPRI_32_63 2 diff --git a/include/rdma/ib_mad.h b/include/rdma/ib_mad.h index c8422d5..d5ac022 100644 --- a/include/rdma/ib_mad.h +++ b/include/rdma/ib_mad.h @@ -127,6 +127,60 @@ #define IB_DEFAULT_PKEY_PARTIAL 0x7FFF #define IB_DEFAULT_PKEY_FULL 0xFFFF +/* + * Generic trap/notice types + */ +#define IB_NOTICE_TYPE_FATAL 0x80 +#define IB_NOTICE_TYPE_URGENT 0x81 +#define IB_NOTICE_TYPE_SECURITY 0x82 +#define IB_NOTICE_TYPE_SM 0x83 +#define IB_NOTICE_TYPE_INFO 0x84 + +/* + * Generic trap/notice producers + */ +#define IB_NOTICE_PROD_CA cpu_to_be16(1) +#define IB_NOTICE_PROD_SWITCH cpu_to_be16(2) +#define IB_NOTICE_PROD_ROUTER cpu_to_be16(3) +#define IB_NOTICE_PROD_CLASS_MGR cpu_to_be16(4) + +/* + * Generic trap/notice numbers + */ +#define IB_NOTICE_TRAP_LLI_THRESH cpu_to_be16(129) +#define IB_NOTICE_TRAP_EBO_THRESH cpu_to_be16(130) +#define IB_NOTICE_TRAP_FLOW_UPDATE cpu_to_be16(131) +#define IB_NOTICE_TRAP_CAP_MASK_CHG cpu_to_be16(144) +#define IB_NOTICE_TRAP_SYS_GUID_CHG cpu_to_be16(145) +#define IB_NOTICE_TRAP_BAD_MKEY cpu_to_be16(256) +#define IB_NOTICE_TRAP_BAD_PKEY cpu_to_be16(257) +#define IB_NOTICE_TRAP_BAD_QKEY cpu_to_be16(258) + +/* + * Repress trap/notice flags + */ +#define IB_NOTICE_REPRESS_LLI_THRESH (1 << 0) +#define IB_NOTICE_REPRESS_EBO_THRESH (1 << 1) +#define IB_NOTICE_REPRESS_FLOW_UPDATE (1 << 2) +#define IB_NOTICE_REPRESS_CAP_MASK_CHG (1 << 3) +#define IB_NOTICE_REPRESS_SYS_GUID_CHG (1 << 4) +#define IB_NOTICE_REPRESS_BAD_MKEY (1 << 5) +#define IB_NOTICE_REPRESS_BAD_PKEY (1 << 6) +#define IB_NOTICE_REPRESS_BAD_QKEY (1 << 7) + +/* + * Generic trap/notice other local changes flags (trap 144). + */ +#define IB_NOTICE_TRAP_LSE_CHG 0x04 /* Link Speed Enable changed */ +#define IB_NOTICE_TRAP_LWE_CHG 0x02 /* Link Width Enable changed */ +#define IB_NOTICE_TRAP_NODE_DESC_CHG 0x01 + +/* + * Generic trap/notice M_Key volation flags in dr_trunc_hop (trap 256). + */ +#define IB_NOTICE_TRAP_DR_NOTICE 0x80 +#define IB_NOTICE_TRAP_DR_TRUNC 0x40 + enum { IB_MGMT_MAD_HDR = 24, IB_MGMT_MAD_DATA = 232, @@ -240,6 +294,90 @@ struct ib_class_port_info { __be32 trap_qkey; }; +struct ib_node_info { + u8 base_version; + u8 class_version; + u8 node_type; + u8 num_ports; + __be64 sys_guid; + __be64 node_guid; + __be64 port_guid; + __be16 partition_cap; + __be16 device_id; + __be32 revision; + u8 local_port_num; + u8 vendor_id[3]; +} __packed; + +struct ib_mad_notice_attr { + u8 generic_type; + u8 prod_type_msb; + __be16 prod_type_lsb; + __be16 trap_num; + __be16 issuer_lid; + __be16 toggle_count; + + union { + struct { + u8 details[54]; + } raw_data; + + struct { + __be16 reserved; + __be16 lid; /* where violation happened */ + u8 port_num; /* where violation happened */ + } __packed ntc_129_131; + + struct { + __be16 reserved; + __be16 lid; /* LID where change occurred */ + u8 reserved2; + u8 local_changes; /* low bit - local changes */ + __be32 new_cap_mask; /* new capability mask */ + u8 reserved3; + u8 change_flags; /* low 3 bits only */ + } __packed ntc_144; + + struct { + __be16 reserved; + __be16 lid; /* lid where sys guid changed */ + __be16 reserved2; + __be64 new_sys_guid; + } __packed ntc_145; + + struct { + __be16 reserved; + __be16 lid; + __be16 dr_slid; + u8 method; + u8 reserved2; + __be16 attr_id; + __be32 attr_mod; + __be64 mkey; + u8 reserved3; + u8 dr_trunc_hop; + u8 dr_rtn_path[30]; + } __packed ntc_256; + + struct { + __be16 reserved; + __be16 lid1; + __be16 lid2; + __be32 key; + __be32 sl_qp1; /* SL: high 4 bits */ + __be32 qp2; /* high 8 bits reserved */ + union ib_gid gid1; + union ib_gid gid2; + } __packed ntc_257_258; + + } details; +}; + +struct ib_vl_weight_elem { + u8 vl; /* VL is low 5 bits, upper 3 bits reserved */ + u8 weight; +}; + /** * ib_mad_send_buf - MAD data buffer and work request for sends. * @next: A pointer used to chain together MADs for posting. diff --git a/include/rdma/opa_port_info.h b/include/rdma/opa_port_info.h new file mode 100644 index 0000000..391dae1 --- /dev/null +++ b/include/rdma/opa_port_info.h @@ -0,0 +1,433 @@ +/* + * Copyright (c) 2014 Intel Corporation. All rights reserved. + * + * This software is available to you under a choice of one of two + * licenses. You may choose to be licensed under the terms of the GNU + * General Public License (GPL) Version 2, available from the file + * COPYING in the main directory of this source tree, or the + * OpenIB.org BSD license below: + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above + * copyright notice, this list of conditions and the following + * disclaimer. + * + * - Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#if !defined(OPA_PORT_INFO_H) +#define OPA_PORT_INFO_H + +/* Temporary until HFI driver is updated */ +#ifndef USE_PI_LED_ENABLE +#define USE_PI_LED_ENABLE 0 +#endif + +#define OPA_PORT_LINK_MODE_NOP 0 /* No change */ +#define OPA_PORT_LINK_MODE_OPA 4 /* Port mode is OPA */ + +#define OPA_PORT_PACKET_FORMAT_NOP 0 /* No change */ +#define OPA_PORT_PACKET_FORMAT_8B 1 /* Format 8B */ +#define OPA_PORT_PACKET_FORMAT_9B 2 /* Format 9B */ +#define OPA_PORT_PACKET_FORMAT_10B 4 /* Format 10B */ +#define OPA_PORT_PACKET_FORMAT_16B 8 /* Format 16B */ + +#define OPA_PORT_LTP_CRC_MODE_NONE 0 /* No change */ +#define OPA_PORT_LTP_CRC_MODE_14 1 /* 14-bit LTP CRC mode (optional) */ +#define OPA_PORT_LTP_CRC_MODE_16 2 /* 16-bit LTP CRC mode */ +#define OPA_PORT_LTP_CRC_MODE_48 4 /* 48-bit LTP CRC mode (optional) */ +#define OPA_PORT_LTP_CRC_MODE_PER_LANE 8 /* 12/16-bit per lane LTP CRC mode */ + +/* Link Down / Neighbor Link Down Reason; indicated as follows: */ +#define OPA_LINKDOWN_REASON_NONE 0 /* No specified reason */ +#define OPA_LINKDOWN_REASON_RCV_ERROR_0 1 +#define OPA_LINKDOWN_REASON_BAD_PKT_LEN 2 +#define OPA_LINKDOWN_REASON_PKT_TOO_LONG 3 +#define OPA_LINKDOWN_REASON_PKT_TOO_SHORT 4 +#define OPA_LINKDOWN_REASON_BAD_SLID 5 +#define OPA_LINKDOWN_REASON_BAD_DLID 6 +#define OPA_LINKDOWN_REASON_BAD_L2 7 +#define OPA_LINKDOWN_REASON_BAD_SC 8 +#define OPA_LINKDOWN_REASON_RCV_ERROR_8 9 +#define OPA_LINKDOWN_REASON_BAD_MID_TAIL 10 +#define OPA_LINKDOWN_REASON_RCV_ERROR_10 11 +#define OPA_LINKDOWN_REASON_PREEMPT_ERROR 12 +#define OPA_LINKDOWN_REASON_PREEMPT_VL15 13 +#define OPA_LINKDOWN_REASON_BAD_VL_MARKER 14 +#define OPA_LINKDOWN_REASON_RCV_ERROR_14 15 +#define OPA_LINKDOWN_REASON_RCV_ERROR_15 16 +#define OPA_LINKDOWN_REASON_BAD_HEAD_DIST 17 +#define OPA_LINKDOWN_REASON_BAD_TAIL_DIST 18 +#define OPA_LINKDOWN_REASON_BAD_CTRL_DIST 19 +#define OPA_LINKDOWN_REASON_BAD_CREDIT_ACK 20 +#define OPA_LINKDOWN_REASON_UNSUPPORTED_VL_MARKER 21 +#define OPA_LINKDOWN_REASON_BAD_PREEMPT 22 +#define OPA_LINKDOWN_REASON_BAD_CONTROL_FLIT 23 +#define OPA_LINKDOWN_REASON_EXCEED_MULTICAST_LIMIT 24 +#define OPA_LINKDOWN_REASON_RCV_ERROR_24 25 +#define OPA_LINKDOWN_REASON_RCV_ERROR_25 26 +#define OPA_LINKDOWN_REASON_RCV_ERROR_26 27 +#define OPA_LINKDOWN_REASON_RCV_ERROR_27 28 +#define OPA_LINKDOWN_REASON_RCV_ERROR_28 29 +#define OPA_LINKDOWN_REASON_RCV_ERROR_29 30 +#define OPA_LINKDOWN_REASON_RCV_ERROR_30 31 +#define OPA_LINKDOWN_REASON_EXCESSIVE_BUFFER_OVERRUN 32 +#define OPA_LINKDOWN_REASON_UNKNOWN 33 +/* 34 -reserved */ +#define OPA_LINKDOWN_REASON_REBOOT 35 +#define OPA_LINKDOWN_REASON_NEIGHBOR_UNKNOWN 36 +/* 37-38 reserved */ +#define OPA_LINKDOWN_REASON_FM_BOUNCE 39 +#define OPA_LINKDOWN_REASON_SPEED_POLICY 40 +#define OPA_LINKDOWN_REASON_WIDTH_POLICY 41 +/* 42-48 reserved */ +#define OPA_LINKDOWN_REASON_DISCONNECTED 49 +#define OPA_LINKDOWN_REASONLOCAL_MEDIA_NOT_INSTALLED 50 +#define OPA_LINKDOWN_REASON_NOT_INSTALLED 51 +#define OPA_LINKDOWN_REASON_CHASSIS_CONFIG 52 +/* 53 reserved */ +#define OPA_LINKDOWN_REASON_END_TO_END_NOT_INSTALLED 54 +/* 55 reserved */ +#define OPA_LINKDOWN_REASON_POWER_POLICY 56 +#define OPA_LINKDOWN_REASON_LINKSPEED_POLICY 57 +#define OPA_LINKDOWN_REASON_LINKWIDTH_POLICY 58 +/* 59 reserved */ +#define OPA_LINKDOWN_REASON_SWITCH_MGMT 60 +#define OPA_LINKDOWN_REASON_SMA_DISABLED 61 +/* 62 reserved */ +#define OPA_LINKDOWN_REASON_TRANSIENT 63 +/* 64-255 reserved */ + +/* OPA Link Init reason; indicated as follows: */ +/* 3-7; 11-15 reserved; 8-15 cleared on Polling->LinkUp */ +#define OPA_LINKINIT_REASON_NOP 0 +#define OPA_LINKINIT_REASON_LINKUP (1 << 4) +#define OPA_LINKINIT_REASON_FLAPPING (2 << 4) +#define OPA_LINKINIT_REASON_CLEAR (8 << 4) +#define OPA_LINKINIT_OUTSIDE_POLICY (8 << 4) +#define OPA_LINKINIT_QUARANTINED (9 << 4) +#define OPA_LINKINIT_INSUFIC_CAPABILITY (10 << 4) + +#define OPA_LINK_SPEED_NOP 0x0000 /* Reserved (1-5 Gbps) */ +#define OPA_LINK_SPEED_12_5G 0x0001 /* 12.5 Gbps */ +#define OPA_LINK_SPEED_25G 0x0002 /* 25.78125? Gbps (EDR) */ + +#define OPA_LINK_WIDTH_1X 0x0001 +#define OPA_LINK_WIDTH_2X 0x0002 +#define OPA_LINK_WIDTH_3X 0x0004 +#define OPA_LINK_WIDTH_4X 0x0008 + +#define OPA_CAP_MASK3_IsSnoopSupported (1 << 7) +#define OPA_CAP_MASK3_IsAsyncSC2VLSupported (1 << 6) +#define OPA_CAP_MASK3_IsAddrRangeConfigSupported (1 << 5) +#define OPA_CAP_MASK3_IsPassThroughSupported (1 << 4) +#define OPA_CAP_MASK3_IsSharedSpaceSupported (1 << 3) +/* reserved (1 << 2) */ +#define OPA_CAP_MASK3_IsVLMarkerSupported (1 << 1) +#define OPA_CAP_MASK3_IsVLrSupported (1 << 0) + +/** + * new MTU values + */ +enum { + OPA_MTU_8192 = 6, + OPA_MTU_10240 = 7, +}; + +enum { + OPA_PORT_PHYS_CONF_DISCONNECTED = 0, + OPA_PORT_PHYS_CONF_STANDARD = 1, + OPA_PORT_PHYS_CONF_FIXED = 2, + OPA_PORT_PHYS_CONF_VARIABLE = 3, + OPA_PORT_PHYS_CONF_SI_PHOTO = 4 +}; + +enum port_info_field_masks { + /* vl.cap */ + OPA_PI_MASK_VL_CAP = 0x1F, + /* port_states.ledenable_offlinereason */ + OPA_PI_MASK_OFFLINE_REASON = 0x0F, + OPA_PI_MASK_LED_ENABLE = 0x40, + /* port_states.unsleepstate_downdefstate */ + OPA_PI_MASK_UNSLEEP_STATE = 0xF0, + OPA_PI_MASK_DOWNDEF_STATE = 0x0F, + /* port_states.portphysstate_portstate */ + OPA_PI_MASK_PORT_PHYSICAL_STATE = 0xF0, + OPA_PI_MASK_PORT_STATE = 0x0F, + /* port_phys_conf */ + OPA_PI_MASK_PORT_PHYSICAL_CONF = 0x0F, + /* collectivemask_multicastmask */ + OPA_PI_MASK_COLLECT_MASK = 0x38, + OPA_PI_MASK_MULTICAST_MASK = 0x07, + /* mkeyprotect_lmc */ + OPA_PI_MASK_MKEY_PROT_BIT = 0xC0, + OPA_PI_MASK_LMC = 0x0F, + /* smsl */ + OPA_PI_MASK_SMSL = 0x1F, + /* partenforce_filterraw */ + /* Filter Raw In/Out bits 1 and 2 were removed */ + OPA_PI_MASK_LINKINIT_REASON = 0xF0, + OPA_PI_MASK_PARTITION_ENFORCE_IN = 0x08, + OPA_PI_MASK_PARTITION_ENFORCE_OUT = 0x04, + /* operational_vls */ + OPA_PI_MASK_OPERATIONAL_VL = 0x1F, + /* sa_qp */ + OPA_PI_MASK_SA_QP = 0x00FFFFFF, + /* sm_trap_qp */ + OPA_PI_MASK_SM_TRAP_QP = 0x00FFFFFF, + /* localphy_overrun_errors */ + OPA_PI_MASK_LOCAL_PHY_ERRORS = 0xF0, + OPA_PI_MASK_OVERRUN_ERRORS = 0x0F, + /* clientrereg_subnettimeout */ + OPA_PI_MASK_CLIENT_REREGISTER = 0x80, + OPA_PI_MASK_SUBNET_TIMEOUT = 0x1F, + /* port_link_mode */ + OPA_PI_MASK_PORT_LINK_SUPPORTED = (0x001F << 10), + OPA_PI_MASK_PORT_LINK_ENABLED = (0x001F << 5), + OPA_PI_MASK_PORT_LINK_ACTIVE = (0x001F << 0), + /* port_link_crc_mode */ + OPA_PI_MASK_PORT_LINK_CRC_SUPPORTED = 0x0F00, + OPA_PI_MASK_PORT_LINK_CRC_ENABLED = 0x00F0, + OPA_PI_MASK_PORT_LINK_CRC_ACTIVE = 0x000F, + /* port_mode */ + OPA_PI_MASK_PORT_MODE_SECURITY_CHECK = 0x0001, + OPA_PI_MASK_PORT_MODE_16B_TRAP_QUERY = 0x0002, + OPA_PI_MASK_PORT_MODE_PKEY_CONVERT = 0x0004, + OPA_PI_MASK_PORT_MODE_SC2SC_MAPPING = 0x0008, + OPA_PI_MASK_PORT_MODE_VL_MARKER = 0x0010, + OPA_PI_MASK_PORT_PASS_THROUGH = 0x0020, + OPA_PI_MASK_PORT_ACTIVE_OPTOMIZE = 0x0040, + /* flit_control.interleave */ + OPA_PI_MASK_INTERLEAVE_DIST_SUP = (0x0003 << 12), + OPA_PI_MASK_INTERLEAVE_DIST_ENABLE = (0x0003 << 10), + OPA_PI_MASK_INTERLEAVE_MAX_NEST_TX = (0x001F << 5), + OPA_PI_MASK_INTERLEAVE_MAX_NEST_RX = (0x001F << 0), + + /* port_error_action */ + OPA_PI_MASK_EX_BUFFER_OVERRUN = 0x80000000, + /* 7 bits reserved */ + OPA_PI_MASK_FM_CFG_ERR_EXCEED_MULTICAST_LIMIT = 0x00800000, + OPA_PI_MASK_FM_CFG_BAD_CONTROL_FLIT = 0x00400000, + OPA_PI_MASK_FM_CFG_BAD_PREEMPT = 0x00200000, + OPA_PI_MASK_FM_CFG_UNSUPPORTED_VL_MARKER = 0x00100000, + OPA_PI_MASK_FM_CFG_BAD_CRDT_ACK = 0x00080000, + OPA_PI_MASK_FM_CFG_BAD_CTRL_DIST = 0x00040000, + OPA_PI_MASK_FM_CFG_BAD_TAIL_DIST = 0x00020000, + OPA_PI_MASK_FM_CFG_BAD_HEAD_DIST = 0x00010000, + /* 2 bits reserved */ + OPA_PI_MASK_PORT_RCV_BAD_VL_MARKER = 0x00002000, + OPA_PI_MASK_PORT_RCV_PREEMPT_VL15 = 0x00001000, + OPA_PI_MASK_PORT_RCV_PREEMPT_ERROR = 0x00000800, + /* 1 bit reserved */ + OPA_PI_MASK_PORT_RCV_BAD_MidTail = 0x00000200, + /* 1 bit reserved */ + OPA_PI_MASK_PORT_RCV_BAD_SC = 0x00000080, + OPA_PI_MASK_PORT_RCV_BAD_L2 = 0x00000040, + OPA_PI_MASK_PORT_RCV_BAD_DLID = 0x00000020, + OPA_PI_MASK_PORT_RCV_BAD_SLID = 0x00000010, + OPA_PI_MASK_PORT_RCV_PKTLEN_TOOSHORT = 0x00000008, + OPA_PI_MASK_PORT_RCV_PKTLEN_TOOLONG = 0x00000004, + OPA_PI_MASK_PORT_RCV_BAD_PKTLEN = 0x00000002, + OPA_PI_MASK_PORT_RCV_BAD_LT = 0x00000001, + + /* pass_through.res_drctl */ + OPA_PI_MASK_PASS_THROUGH_DR_CONTROL = 0x01, + + /* buffer_units */ + OPA_PI_MASK_BUF_UNIT_VL15_INIT = (0x00000FFF << 11), + OPA_PI_MASK_BUF_UNIT_VL15_CREDIT_RATE = (0x0000001F << 6), + OPA_PI_MASK_BUF_UNIT_CREDIT_ACK = (0x00000003 << 3), + OPA_PI_MASK_BUF_UNIT_BUF_ALLOC = (0x00000003 << 0), + + /* neigh_mtu.pvlx_to_mtu */ + OPA_PI_MASK_NEIGH_MTU_PVL0 = 0xF0, + OPA_PI_MASK_NEIGH_MTU_PVL1 = 0x0F, + + /* neigh_mtu.vlstall_hoq_life */ + OPA_PI_MASK_VL_STALL = (0x03 << 5), + OPA_PI_MASK_HOQ_LIFE = (0x1F << 0), + + /* port_neigh_mode */ + OPA_PI_MASK_NEIGH_MGMT_ALLOWED = (0x01 << 3), + OPA_PI_MASK_NEIGH_FW_AUTH_BYPASS = (0x01 << 2), + OPA_PI_MASK_NEIGH_NODE_TYPE = (0x03 << 0), + + /* resptime_value */ + OPA_PI_MASK_RESPONSE_TIME_VALUE = 0x1F, + + /* mtucap */ + OPA_PI_MASK_MTU_CAP = 0x0F, +}; + +#if USE_PI_LED_ENABLE +struct opa_port_states { + u8 reserved; + u8 ledenable_offlinereason; /* 1 res, 1 bit, 6 bits */ + u8 reserved2; + u8 portphysstate_portstate; /* 4 bits, 4 bits */ +}; +#define PI_LED_ENABLE_SUP 1 +#else +struct opa_port_states { + u8 reserved; + u8 offline_reason; /* 2 res, 6 bits */ + u8 reserved2; + u8 portphysstate_portstate; /* 4 bits, 4 bits */ +}; +#define PI_LED_ENABLE_SUP 0 +#endif + +struct opa_port_state_info { + struct opa_port_states port_states; + u16 link_width_downgrade_tx_active; + u16 link_width_downgrade_rx_active; +}; + +struct opa_port_info { + __be32 lid; + __be32 flow_control_mask; + + struct { + u8 res; /* was inittype */ + u8 cap; /* 3 res, 5 bits */ + __be16 high_limit; + __be16 preempt_limit; + u8 arb_high_cap; + u8 arb_low_cap; + } vl; + + struct opa_port_states port_states; + u8 port_phys_conf; /* 4 res, 4 bits */ + u8 collectivemask_multicastmask; /* 2 res, 3, 3 */ + u8 mkeyprotect_lmc; /* 2 bits, 2 res, 4 bits */ + u8 smsl; /* 3 res, 5 bits */ + + u8 partenforce_filterraw; /* bit fields */ + u8 operational_vls; /* 3 res, 5 bits */ + __be16 pkey_8b; + __be16 pkey_10b; + __be16 mkey_violations; + + __be16 pkey_violations; + __be16 qkey_violations; + __be32 sm_trap_qp; /* 8 bits, 24 bits */ + + __be32 sa_qp; /* 8 bits, 24 bits */ + u8 neigh_port_num; + u8 link_down_reason; + u8 neigh_link_down_reason; + u8 clientrereg_subnettimeout; /* 1 bit, 2 bits, 5 */ + + struct { + __be16 supported; + __be16 enabled; + __be16 active; + } link_speed; + struct { + __be16 supported; + __be16 enabled; + __be16 active; + } link_width; + struct { + __be16 supported; + __be16 enabled; + __be16 tx_active; + __be16 rx_active; + } link_width_downgrade; + __be16 port_link_mode; /* 1 res, 5 bits, 5 bits, 5 bits */ + __be16 port_ltp_crc_mode; /* 4 res, 4 bits, 4 bits, 4 bits */ + + __be16 port_mode; /* 9 res, bit fields */ + struct { + __be16 supported; + __be16 enabled; + } port_packet_format; + struct { + __be16 interleave; /* 2 res, 2,2,5,5 */ + struct { + __be16 min_initial; + __be16 min_tail; + u8 large_pkt_limit; + u8 small_pkt_limit; + u8 max_small_pkt_limit; + u8 preemption_limit; + } preemption; + } flit_control; + + __be32 reserved4; + __be32 port_error_action; /* bit field */ + + struct { + u8 egress_port; + u8 res_drctl; /* 7 res, 1 */ + } pass_through; + __be16 mkey_lease_period; + __be32 buffer_units; /* 9 res, 12, 5, 3, 3 */ + + __be32 reserved5; + __be32 sm_lid; + + __be64 mkey; + + __be64 subnet_prefix; + + struct { + u8 pvlx_to_mtu[OPA_MAX_VLS/2]; /* 4 bits, 4 bits */ + } neigh_mtu; + + struct { + u8 vlstall_hoqlife; /* 3 bits, 5 bits */ + } xmit_q[OPA_MAX_VLS]; + + struct { + u8 addr[16]; + } ipaddr_ipv6; + + struct { + u8 addr[4]; + } ipaddr_ipv4; + + u32 reserved6; + u32 reserved7; + u32 reserved8; + + __be64 neigh_node_guid; + + __be32 ib_cap_mask; + __be16 reserved9; /* was ib_cap_mask2 */ + __be16 opa_cap_mask; + + __be32 reserved10; /* was link_roundtrip_latency */ + __be16 overall_buffer_space; + __be16 reserved11; /* was max_credit_hint */ + + __be16 diag_code; + struct { + u8 buffer; + u8 wire; + } replay_depth; + u8 port_neigh_mode; + u8 mtucap; /* 4 res, 4 bits */ + + u8 resptimevalue; /* 3 res, 5 bits */ + u8 local_port_num; + u8 reserved12; + u8 reserved13; /* was guid_cap */ +} __attribute__ ((packed)); + +#endif /* OPA_PORT_INFO_H */ diff --git a/include/rdma/opa_smi.h b/include/rdma/opa_smi.h index 29063e8..4a529ef 100644 --- a/include/rdma/opa_smi.h +++ b/include/rdma/opa_smi.h @@ -40,6 +40,10 @@ #define OPA_SMP_DR_DATA_SIZE 1872 #define OPA_SMP_MAX_PATH_HOPS 64 +#define OPA_MAX_VLS 32 +#define OPA_MAX_SLS 32 +#define OPA_MAX_SCS 32 + #define OPA_SMI_CLASS_VERSION 0x80 #define OPA_LID_PERMISSIVE cpu_to_be32(0xFFFFFFFF) @@ -73,6 +77,49 @@ struct opa_smp { } __packed; +/* Subnet management attributes */ +/* ... */ +#define OPA_ATTRIB_ID_NODE_DESCRIPTION cpu_to_be16(0x0010) +#define OPA_ATTRIB_ID_NODE_INFO cpu_to_be16(0x0011) +#define OPA_ATTRIB_ID_PORT_INFO cpu_to_be16(0x0015) +#define OPA_ATTRIB_ID_PARTITION_TABLE cpu_to_be16(0x0016) +#define OPA_ATTRIB_ID_SL_TO_SC_MAP cpu_to_be16(0x0017) +#define OPA_ATTRIB_ID_VL_ARBITRATION cpu_to_be16(0x0018) +#define OPA_ATTRIB_ID_SM_INFO cpu_to_be16(0x0020) +#define OPA_ATTRIB_ID_CABLE_INFO cpu_to_be16(0x0032) +#define OPA_ATTRIB_ID_AGGREGATE cpu_to_be16(0x0080) +#define OPA_ATTRIB_ID_SC_TO_SL_MAP cpu_to_be16(0x0082) +#define OPA_ATTRIB_ID_SC_TO_VLR_MAP cpu_to_be16(0x0083) +#define OPA_ATTRIB_ID_SC_TO_VLT_MAP cpu_to_be16(0x0084) +#define OPA_ATTRIB_ID_SC_TO_VLNT_MAP cpu_to_be16(0x0085) +/* ... */ +#define OPA_ATTRIB_ID_PORT_STATE_INFO cpu_to_be16(0x0087) +/* ... */ +#define OPA_ATTRIB_ID_BUFFER_CONTROL_TABLE cpu_to_be16(0x008A) +/* ... */ + +struct opa_node_description { + u8 data[64]; +} __attribute__ ((packed)); + +struct opa_node_info { + u8 base_version; + u8 class_version; + u8 node_type; + u8 num_ports; + __be32 reserved; + __be64 system_image_guid; + __be64 node_guid; + __be64 port_guid; + __be16 partition_cap; + __be16 device_id; + __be32 revision; + u8 local_port_num; + u8 vendor_id[3]; /* network byte order */ +} __attribute__ ((packed)); + +#define OPA_PARTITION_TABLE_BLK_SIZE 32 + static inline u8 opa_get_smp_direction(struct opa_smp *smp) { diff --git a/include/uapi/rdma/hfi/hfi1_user.h b/include/uapi/rdma/hfi/hfi1_user.h new file mode 100644 index 0000000..2ee745a --- /dev/null +++ b/include/uapi/rdma/hfi/hfi1_user.h @@ -0,0 +1,427 @@ +/* + * + * This file is provided under a dual BSD/GPLv2 license. When using or + * redistributing this file, you may do so under either license. + * + * GPL LICENSE SUMMARY + * + * Copyright(c) 2015 Intel Corporation. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of version 2 of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * BSD LICENSE + * + * Copyright(c) 2015 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * - Neither the name of Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* + * This file contains defines, structures, etc. that are used + * to communicate between kernel and user code. + */ + +#ifndef _LINUX__HFI1_USER_H +#define _LINUX__HFI1_USER_H + +#include <linux/types.h> + +/* + * This version number is given to the driver by the user code during + * initialization in the spu_userversion field of hfi1_user_info, so + * the driver can check for compatibility with user code. + * + * The major version changes when data structures change in an incompatible + * way. The driver must be the same for initialization to succeed. + */ +#define HFI1_USER_SWMAJOR 4 + +/* + * Minor version differences are always compatible + * a within a major version, however if user software is larger + * than driver software, some new features and/or structure fields + * may not be implemented; the user code must deal with this if it + * cares, or it must abort after initialization reports the difference. + */ +#define HFI1_USER_SWMINOR 0 + +/* + * Set of HW and driver capability/feature bits. + * These bit values are used to configure enabled/disabled HW and + * driver features. The same set of bits are communicated to user + * space. + */ +#define HFI1_CAP_DMA_RTAIL (1UL << 0) /* Use DMA'ed RTail value */ +#define HFI1_CAP_SDMA (1UL << 1) /* Enable SDMA support */ +#define HFI1_CAP_SDMA_AHG (1UL << 2) /* Enable SDMA AHG support */ +#define HFI1_CAP_EXTENDED_PSN (1UL << 3) /* Enable Extended PSN support */ +#define HFI1_CAP_HDRSUPP (1UL << 4) /* Enable Header Suppression */ +#define HFI1_CAP_ENABLE_SMA (1UL << 5) /* Enable driver SM Agent */ +#define HFI1_CAP_USE_SDMA_HEAD (1UL << 6) /* DMA Hdr Q tail vs. use CSR */ +#define HFI1_CAP_MULTI_PKT_EGR (1UL << 7) /* Enable multi-packet Egr buffs*/ +#define HFI1_CAP_NODROP_RHQ_FULL (1UL << 8) /* Don't drop on Hdr Q full */ +#define HFI1_CAP_NODROP_EGR_FULL (1UL << 9) /* Don't drop on EGR buffs full */ +#define HFI1_CAP_TID_UNMAP (1UL << 10) /* Enable Expected TID caching */ +#define HFI1_CAP_PRINT_UNIMPL (1UL << 11) /* Show for unimplemented feats */ +#define HFI1_CAP_ALLOW_PERM_JKEY (1UL << 12) /* Allow use of permissive JKEY */ +#define HFI1_CAP_NO_INTEGRITY (1UL << 13) /* Enable ctxt integrity checks */ +#define HFI1_CAP_PKEY_CHECK (1UL << 14) /* Enable ctxt PKey checking */ +#define HFI1_CAP_STATIC_RATE_CTRL (1UL << 15) /* Allow PBC.StaticRateControl */ +#define HFI1_CAP_QSFP_ENABLED (1UL << 16) /* Enable QSFP check during LNI */ +#define HFI1_CAP_SDMA_HEAD_CHECK (1UL << 17) /* SDMA head checking */ +#define HFI1_CAP_EARLY_CREDIT_RETURN (1UL << 18) /* early credit return */ + +#define HFI1_RCVHDR_ENTSIZE_2 (1UL << 0) +#define HFI1_RCVHDR_ENTSIZE_16 (1UL << 1) +#define HFI1_RCVDHR_ENTSIZE_32 (1UL << 2) + +/* + * If the unit is specified via open, HCA choice is fixed. If port is + * specified, it's also fixed. Otherwise we try to spread contexts + * across ports and HCAs, using different algorithms. WITHIN is + * the old default, prior to this mechanism. + */ +#define HFI1_ALG_ACROSS 0 /* round robin contexts across HCAs, then + * ports; this is the default */ +#define HFI1_ALG_WITHIN 1 /* use all contexts on an HCA (round robin + * active ports within), then next HCA */ +#define HFI1_ALG_COUNT 2 /* number of algorithm choices */ + + +/* User commands. */ +#define HFI1_CMD_ASSIGN_CTXT 1 /* allocate HCA and context */ +#define HFI1_CMD_CTXT_INFO 2 /* find out what resources we got */ +#define HFI1_CMD_USER_INFO 3 /* set up userspace */ +#define HFI1_CMD_TID_UPDATE 4 /* update expected TID entries */ +#define HFI1_CMD_TID_FREE 5 /* free expected TID entries */ +#define HFI1_CMD_CREDIT_UPD 6 /* force an update of PIO credit */ +#define HFI1_CMD_SDMA_STATUS_UPD 7 /* force update of SDMA status ring */ + +#define HFI1_CMD_RECV_CTRL 8 /* control receipt of packets */ +#define HFI1_CMD_POLL_TYPE 9 /* set the kind of polling we want */ +#define HFI1_CMD_ACK_EVENT 10 /* ack & clear user status bits */ +#define HFI1_CMD_SET_PKEY 11 /* set context's pkey */ +#define HFI1_CMD_CTXT_RESET 12 /* reset context's HW send context */ +/* separate EPROM commands from normal PSM commands */ +#define HFI1_CMD_EP_INFO 64 /* read EPROM device ID */ +#define HFI1_CMD_EP_ERASE_CHIP 65 /* erase whole EPROM */ +#define HFI1_CMD_EP_ERASE_P0 66 /* erase EPROM partition 0 */ +#define HFI1_CMD_EP_ERASE_P1 67 /* erase EPROM partition 1 */ +#define HFI1_CMD_EP_READ_P0 68 /* read EPROM partition 0 */ +#define HFI1_CMD_EP_READ_P1 69 /* read EPROM partition 1 */ +#define HFI1_CMD_EP_WRITE_P0 70 /* write EPROM partition 0 */ +#define HFI1_CMD_EP_WRITE_P1 71 /* write EPROM partition 1 */ + +#define _HFI1_EVENT_FROZEN_BIT 0 +#define _HFI1_EVENT_LINKDOWN_BIT 1 +#define _HFI1_EVENT_LID_CHANGE_BIT 2 +#define _HFI1_EVENT_LMC_CHANGE_BIT 3 +#define _HFI1_EVENT_SL2VL_CHANGE_BIT 4 +#define _HFI1_MAX_EVENT_BIT _HFI1_EVENT_SL2VL_CHANGE_BIT + +#define HFI1_EVENT_FROZEN (1UL << _HFI1_EVENT_FROZEN_BIT) +#define HFI1_EVENT_LINKDOWN_BIT (1UL << _HFI1_EVENT_LINKDOWN_BIT) +#define HFI1_EVENT_LID_CHANGE_BIT (1UL << _HFI1_EVENT_LID_CHANGE_BIT) +#define HFI1_EVENT_LMC_CHANGE_BIT (1UL << _HFI1_EVENT_LMC_CHANGE_BIT) +#define HFI1_EVENT_SL2VL_CHANGE_BIT (1UL << _HFI1_EVENT_SL2VL_CHANGE_BIT) + +/* + * These are the status bits readable (in ASCII form, 64bit value) + * from the "status" sysfs file. For binary compatibility, values + * must remain as is; removed states can be reused for different + * purposes. + */ +#define HFI1_STATUS_INITTED 0x1 /* basic initialization done */ +/* Chip has been found and initialized */ +#define HFI1_STATUS_CHIP_PRESENT 0x20 +/* IB link is at ACTIVE, usable for data traffic */ +#define HFI1_STATUS_IB_READY 0x40 +/* link is configured, LID, MTU, etc. have been set */ +#define HFI1_STATUS_IB_CONF 0x80 +/* A Fatal hardware error has occurred. */ +#define HFI1_STATUS_HWERROR 0x200 + +/* + * Number of supported shared contexts. + * This is the maximum number of software contexts that can share + * a hardware send/receive context. + */ +#define HFI1_MAX_SHARED_CTXTS 8 + +/* + * Poll types + */ +#define HFI1_POLL_TYPE_ANYRCV 0x0 +#define HFI1_POLL_TYPE_URGENT 0x1 + +/* + * This structure is passed to the driver to tell it where + * user code buffers are, sizes, etc. The offsets and sizes of the + * fields must remain unchanged, for binary compatibility. It can + * be extended, if userversion is changed so user code can tell, if needed + */ +struct hfi1_user_info { + /* + * version of user software, to detect compatibility issues. + * Should be set to HFI1_USER_SWVERSION. + */ + __u32 userversion; + __u16 pad; + /* HFI selection algorithm, if unit has not selected */ + __u16 hfi1_alg; + /* + * If two or more processes wish to share a context, each process + * must set the subcontext_cnt and subcontext_id to the same + * values. The only restriction on the subcontext_id is that + * it be unique for a given node. + */ + __u16 subctxt_cnt; + __u16 subctxt_id; + /* 128bit UUID passed in by PSM. */ + __u8 uuid[16]; +}; + +struct hfi1_ctxt_info { + __u64 runtime_flags; /* chip/drv runtime flags (HFI1_CAP_*) */ + __u32 rcvegr_size; /* size of each eager buffer */ + __u16 num_active; /* number of active units */ + __u16 unit; /* unit (chip) assigned to caller */ + __u16 ctxt; /* ctxt on unit assigned to caller */ + __u16 subctxt; /* subctxt on unit assigned to caller */ + __u16 rcvtids; /* number of Rcv TIDs for this context */ + __u16 credits; /* number of PIO credits for this context */ + __u16 numa_node; /* NUMA node of the assigned device */ + __u16 rec_cpu; /* cpu # for affinity (0xffff if none) */ + __u16 send_ctxt; /* send context in use by this user context */ + __u16 egrtids; /* number of RcvArray entries for Eager Rcvs */ + __u16 rcvhdrq_cnt; /* number of RcvHdrQ entries */ + __u16 rcvhdrq_entsize; /* size (in bytes) for each RcvHdrQ entry */ + __u16 sdma_ring_size; /* number of entries in SDMA request ring */ +}; + +struct hfi1_tid_info { + /* virtual address of first page in transfer */ + __u64 vaddr; + /* pointer to tid array. this array is big enough */ + __u64 tidlist; + /* number of tids programmed by this request */ + __u32 tidcnt; + /* length of transfer buffer programmed by this request */ + __u32 length; + /* + * pointer to bitmap of TIDs used for this call; + * checked for being large enough at open + */ + __u64 tidmap; +}; + +struct hfi1_cmd { + __u32 type; /* command type */ + __u32 len; /* length of struct pointed to by add */ + __u64 addr; /* pointer to user structure */ +}; + +enum hfi1_sdma_comp_state { + FREE = 0, + QUEUED, + COMPLETE, + ERROR +}; + +/* + * SDMA completion ring entry + */ +struct hfi1_sdma_comp_entry { + __u32 status; + __u32 errcode; +}; + +/* + * Device status and notifications from driver to user-space. + */ +struct hfi1_status { + __u64 dev; /* device/hw status bits */ + __u64 port; /* port state and status bits */ + char freezemsg[0]; +}; + +/* + * This structure is returned by the driver immediately after + * open to get implementation-specific info, and info specific to this + * instance. + * + * This struct must have explicit pad fields where type sizes + * may result in different alignments between 32 and 64 bit + * programs, since the 64 bit * bit kernel requires the user code + * to have matching offsets + */ +struct hfi1_base_info { + /* version of hardware, for feature checking. */ + __u32 hw_version; + /* version of software, for feature checking. */ + __u32 sw_version; + /* Job key */ + __u16 jkey; + __u16 padding1; + /* + * The special QP (queue pair) value that identifies PSM + * protocol packet from standard IB packets. + */ + __u32 bthqp; + /* PIO credit return address, */ + __u64 sc_credits_addr; + /* + * Base address of write-only pio buffers for this process. + * Each buffer has sendpio_credits*64 bytes. + */ + __u64 pio_bufbase_sop; + /* + * Base address of write-only pio buffers for this process. + * Each buffer has sendpio_credits*64 bytes. + */ + __u64 pio_bufbase; + /* address where receive buffer queue is mapped into */ + __u64 rcvhdr_bufbase; + /* base address of Eager receive buffers. */ + __u64 rcvegr_bufbase; + /* base address of SDMA completion ring */ + __u64 sdma_comp_bufbase; + /* + * User register base for init code, not to be used directly by + * protocol or applications. Always maps real chip register space. + * the register addresses are: + * ur_rcvhdrhead, ur_rcvhdrtail, ur_rcvegrhead, ur_rcvegrtail, + * ur_rcvtidflow + */ + __u64 user_regbase; + /* notification events */ + __u64 events_bufbase; + /* status page */ + __u64 status_bufbase; + /* rcvhdrtail update */ + __u64 rcvhdrtail_base; + /* + * shared memory pages for subctxts if ctxt is shared; these cover + * all the processes in the group sharing a single context. + * all have enough space for the num_subcontexts value on this job. + */ + __u64 subctxt_uregbase; + __u64 subctxt_rcvegrbuf; + __u64 subctxt_rcvhdrbuf; +}; + +enum sdma_req_opcode { + EXPECTED = 0, + EAGER +}; + +#define HFI1_SDMA_REQ_VERSION_MASK 0xF +#define HFI1_SDMA_REQ_VERSION_SHIFT 0x0 +#define HFI1_SDMA_REQ_OPCODE_MASK 0xF +#define HFI1_SDMA_REQ_OPCODE_SHIFT 0x4 +#define HFI1_SDMA_REQ_IOVCNT_MASK 0xFF +#define HFI1_SDMA_REQ_IOVCNT_SHIFT 0x8 + +struct sdma_req_info { + /* + * bits 0-3 - version (currently unused) + * bits 4-7 - opcode (enum sdma_req_opcode) + * bits 8-15 - io vector count + */ + __u16 ctrl; + /* + * Number of fragments contained in this request. + * User-space has already computed how many + * fragment-sized packet the user buffer will be + * split into. + */ + __u16 npkts; + /* + * Size of each fragment the user buffer will be + * split into. + */ + __u16 fragsize; + /* + * Index of the slot in the SDMA completion ring + * this request should be using. User-space is + * in charge of managing its own ring. + */ + __u16 comp_idx; +} __packed; + +/* + * SW KDETH header. + * swdata is SW defined portion. + */ +struct hfi1_kdeth_header { + __le32 ver_tid_offset; + __le16 jkey; + __le16 hcrc; + __le32 swdata[7]; +} __packed; + +/* + * Structure describing the headers that User space uses. The + * structure above is a subset of this one. + */ +struct hfi1_pkt_header { + __le16 pbc[4]; + __be16 lrh[4]; + __be32 bth[3]; + struct hfi1_kdeth_header kdeth; +} __packed; + + +/* + * The list of usermode accessible registers. + */ +enum hfi1_ureg { + /* (RO) DMA RcvHdr to be used next. */ + ur_rcvhdrtail = 0, + /* (RW) RcvHdr entry to be processed next by host. */ + ur_rcvhdrhead = 1, + /* (RO) Index of next Eager index to use. */ + ur_rcvegrindextail = 2, + /* (RW) Eager TID to be processed next */ + ur_rcvegrindexhead = 3, + /* (RO) Receive Eager Offset Tail */ + ur_rcvegroffsettail = 4, + /* For internal use only; max register number. */ + ur_maxreg, + /* (RW) Receive TID flow table */ + ur_rcvtidflowtable = 256 +}; + +#endif /* _LINIUX__HFI1_USER_H */