Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/ntb/ntb_hw/ntb_hw_intel.c
Show All 12 Lines | |||||
struct sysctl_oid_list *globals, *tree_par, *regpar, *statpar, *errpar; | struct sysctl_oid_list *globals, *tree_par, *regpar, *statpar, *errpar; | ||||
struct sysctl_ctx_list *ctx; | struct sysctl_ctx_list *ctx; | ||||
struct sysctl_oid *tree, *tmptree; | struct sysctl_oid *tree, *tmptree; | ||||
ctx = device_get_sysctl_ctx(ntb->device); | ctx = device_get_sysctl_ctx(ntb->device); | ||||
globals = SYSCTL_CHILDREN(device_get_sysctl_tree(ntb->device)); | globals = SYSCTL_CHILDREN(device_get_sysctl_tree(ntb->device)); | ||||
SYSCTL_ADD_PROC(ctx, globals, OID_AUTO, "link_status", | SYSCTL_ADD_PROC(ctx, globals, OID_AUTO, "link_status", | ||||
CTLFLAG_RD | CTLTYPE_STRING, ntb, 0, | CTLFLAG_RD | CTLTYPE_STRING | CTLFLAG_NEEDGIANT, ntb, 0, | ||||
sysctl_handle_link_status_human, "A", | sysctl_handle_link_status_human, "A", | ||||
"Link status (human readable)"); | "Link status (human readable)"); | ||||
SYSCTL_ADD_PROC(ctx, globals, OID_AUTO, "active", | SYSCTL_ADD_PROC(ctx, globals, OID_AUTO, "active", | ||||
CTLFLAG_RD | CTLTYPE_UINT, ntb, 0, sysctl_handle_link_status, | CTLFLAG_RD | CTLTYPE_UINT | CTLFLAG_NEEDGIANT, ntb, 0, | ||||
sysctl_handle_link_status, | |||||
"IU", "Link status (1=active, 0=inactive)"); | "IU", "Link status (1=active, 0=inactive)"); | ||||
SYSCTL_ADD_PROC(ctx, globals, OID_AUTO, "admin_up", | SYSCTL_ADD_PROC(ctx, globals, OID_AUTO, "admin_up", | ||||
CTLFLAG_RW | CTLTYPE_UINT, ntb, 0, sysctl_handle_link_admin, | CTLFLAG_RW | CTLTYPE_UINT | CTLFLAG_NEEDGIANT, ntb, 0, | ||||
sysctl_handle_link_admin, | |||||
"IU", "Set/get interface status (1=UP, 0=DOWN)"); | "IU", "Set/get interface status (1=UP, 0=DOWN)"); | ||||
tree = SYSCTL_ADD_NODE(ctx, globals, OID_AUTO, "debug_info", | tree = SYSCTL_ADD_NODE(ctx, globals, OID_AUTO, "debug_info", | ||||
CTLFLAG_RD, NULL, "Driver state, statistics, and HW registers"); | CTLFLAG_RD, NULL, "Driver state, statistics, and HW registers"); | ||||
tree_par = SYSCTL_CHILDREN(tree); | tree_par = SYSCTL_CHILDREN(tree); | ||||
SYSCTL_ADD_UINT(ctx, tree_par, OID_AUTO, "conn_type", CTLFLAG_RD, | SYSCTL_ADD_UINT(ctx, tree_par, OID_AUTO, "conn_type", CTLFLAG_RD, | ||||
&ntb->conn_type, 0, "0 - Transparent; 1 - B2B; 2 - Root Port"); | &ntb->conn_type, 0, "0 - Transparent; 1 - B2B; 2 - Root Port"); | ||||
SYSCTL_ADD_UINT(ctx, tree_par, OID_AUTO, "dev_type", CTLFLAG_RD, | SYSCTL_ADD_UINT(ctx, tree_par, OID_AUTO, "dev_type", CTLFLAG_RD, | ||||
&ntb->dev_type, 0, "0 - USD; 1 - DSD"); | &ntb->dev_type, 0, "0 - USD; 1 - DSD"); | ||||
SYSCTL_ADD_UINT(ctx, tree_par, OID_AUTO, "ppd", CTLFLAG_RD, | SYSCTL_ADD_UINT(ctx, tree_par, OID_AUTO, "ppd", CTLFLAG_RD, | ||||
&ntb->ppd, 0, "Raw PPD register (cached)"); | &ntb->ppd, 0, "Raw PPD register (cached)"); | ||||
if (ntb->b2b_mw_idx != B2B_MW_DISABLED) { | if (ntb->b2b_mw_idx != B2B_MW_DISABLED) { | ||||
SYSCTL_ADD_U8(ctx, tree_par, OID_AUTO, "b2b_idx", CTLFLAG_RD, | SYSCTL_ADD_U8(ctx, tree_par, OID_AUTO, "b2b_idx", CTLFLAG_RD, | ||||
&ntb->b2b_mw_idx, 0, | &ntb->b2b_mw_idx, 0, | ||||
"Index of the MW used for B2B remote register access"); | "Index of the MW used for B2B remote register access"); | ||||
SYSCTL_ADD_UQUAD(ctx, tree_par, OID_AUTO, "b2b_off", | SYSCTL_ADD_UQUAD(ctx, tree_par, OID_AUTO, "b2b_off", | ||||
CTLFLAG_RD, &ntb->b2b_off, | CTLFLAG_RD, &ntb->b2b_off, | ||||
"If non-zero, offset of B2B register region in shared MW"); | "If non-zero, offset of B2B register region in shared MW"); | ||||
} | } | ||||
SYSCTL_ADD_PROC(ctx, tree_par, OID_AUTO, "features", | SYSCTL_ADD_PROC(ctx, tree_par, OID_AUTO, "features", | ||||
CTLFLAG_RD | CTLTYPE_STRING, ntb, 0, sysctl_handle_features, "A", | CTLFLAG_RD | CTLTYPE_STRING | CTLFLAG_NEEDGIANT, ntb, 0, | ||||
sysctl_handle_features, "A", | |||||
"Features/errata of this NTB device"); | "Features/errata of this NTB device"); | ||||
SYSCTL_ADD_UINT(ctx, tree_par, OID_AUTO, "ntb_ctl", CTLFLAG_RD, | SYSCTL_ADD_UINT(ctx, tree_par, OID_AUTO, "ntb_ctl", CTLFLAG_RD, | ||||
__DEVOLATILE(uint32_t *, &ntb->ntb_ctl), 0, | __DEVOLATILE(uint32_t *, &ntb->ntb_ctl), 0, | ||||
"NTB CTL register (cached)"); | "NTB CTL register (cached)"); | ||||
SYSCTL_ADD_UINT(ctx, tree_par, OID_AUTO, "lnk_sta", CTLFLAG_RD, | SYSCTL_ADD_UINT(ctx, tree_par, OID_AUTO, "lnk_sta", CTLFLAG_RD, | ||||
__DEVOLATILE(uint32_t *, &ntb->lnk_sta), 0, | __DEVOLATILE(uint32_t *, &ntb->lnk_sta), 0, | ||||
"LNK STA register (cached)"); | "LNK STA register (cached)"); | ||||
Show All 16 Lines | |||||
SYSCTL_ADD_UQUAD(ctx, tree_par, OID_AUTO, "db_mask", CTLFLAG_RD, | SYSCTL_ADD_UQUAD(ctx, tree_par, OID_AUTO, "db_mask", CTLFLAG_RD, | ||||
&ntb->db_mask, "Doorbell mask (cached)"); | &ntb->db_mask, "Doorbell mask (cached)"); | ||||
tmptree = SYSCTL_ADD_NODE(ctx, tree_par, OID_AUTO, "registers", | tmptree = SYSCTL_ADD_NODE(ctx, tree_par, OID_AUTO, "registers", | ||||
CTLFLAG_RD, NULL, "Raw HW registers (big-endian)"); | CTLFLAG_RD, NULL, "Raw HW registers (big-endian)"); | ||||
regpar = SYSCTL_CHILDREN(tmptree); | regpar = SYSCTL_CHILDREN(tmptree); | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "ntbcntl", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "ntbcntl", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, NTB_REG_32 | | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
ntb->reg->ntb_ctl, sysctl_handle_register, "IU", | NTB_REG_32 | ntb->reg->ntb_ctl, sysctl_handle_register, "IU", | ||||
"NTB Control register"); | "NTB Control register"); | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "lnkcap", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "lnkcap", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, NTB_REG_32 | | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
0x19c, sysctl_handle_register, "IU", | NTB_REG_32 | 0x19c, sysctl_handle_register, "IU", | ||||
"NTB Link Capabilities"); | "NTB Link Capabilities"); | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "lnkcon", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "lnkcon", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, NTB_REG_32 | | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
0x1a0, sysctl_handle_register, "IU", | NTB_REG_32 | 0x1a0, sysctl_handle_register, "IU", | ||||
"NTB Link Control register"); | "NTB Link Control register"); | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "db_mask", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "db_mask", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_64 | NTB_DB_READ | ntb->self_reg->db_mask, | NTB_REG_64 | NTB_DB_READ | ntb->self_reg->db_mask, | ||||
sysctl_handle_register, "QU", "Doorbell mask register"); | sysctl_handle_register, "QU", "Doorbell mask register"); | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "db_bell", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "db_bell", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_64 | NTB_DB_READ | ntb->self_reg->db_bell, | NTB_REG_64 | NTB_DB_READ | ntb->self_reg->db_bell, | ||||
sysctl_handle_register, "QU", "Doorbell register"); | sysctl_handle_register, "QU", "Doorbell register"); | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "incoming_xlat23", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "incoming_xlat23", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_64 | ntb->xlat_reg->bar2_xlat, | NTB_REG_64 | ntb->xlat_reg->bar2_xlat, | ||||
sysctl_handle_register, "QU", "Incoming XLAT23 register"); | sysctl_handle_register, "QU", "Incoming XLAT23 register"); | ||||
if (HAS_FEATURE(ntb, NTB_SPLIT_BAR)) { | if (HAS_FEATURE(ntb, NTB_SPLIT_BAR)) { | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "incoming_xlat4", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "incoming_xlat4", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_32 | ntb->xlat_reg->bar4_xlat, | NTB_REG_32 | ntb->xlat_reg->bar4_xlat, | ||||
sysctl_handle_register, "IU", "Incoming XLAT4 register"); | sysctl_handle_register, "IU", "Incoming XLAT4 register"); | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "incoming_xlat5", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "incoming_xlat5", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_32 | ntb->xlat_reg->bar5_xlat, | NTB_REG_32 | ntb->xlat_reg->bar5_xlat, | ||||
sysctl_handle_register, "IU", "Incoming XLAT5 register"); | sysctl_handle_register, "IU", "Incoming XLAT5 register"); | ||||
} else { | } else { | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "incoming_xlat45", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "incoming_xlat45", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_64 | ntb->xlat_reg->bar4_xlat, | NTB_REG_64 | ntb->xlat_reg->bar4_xlat, | ||||
sysctl_handle_register, "QU", "Incoming XLAT45 register"); | sysctl_handle_register, "QU", "Incoming XLAT45 register"); | ||||
} | } | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "incoming_lmt23", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "incoming_lmt23", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_64 | ntb->xlat_reg->bar2_limit, | NTB_REG_64 | ntb->xlat_reg->bar2_limit, | ||||
sysctl_handle_register, "QU", "Incoming LMT23 register"); | sysctl_handle_register, "QU", "Incoming LMT23 register"); | ||||
if (HAS_FEATURE(ntb, NTB_SPLIT_BAR)) { | if (HAS_FEATURE(ntb, NTB_SPLIT_BAR)) { | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "incoming_lmt4", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "incoming_lmt4", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_32 | ntb->xlat_reg->bar4_limit, | NTB_REG_32 | ntb->xlat_reg->bar4_limit, | ||||
sysctl_handle_register, "IU", "Incoming LMT4 register"); | sysctl_handle_register, "IU", "Incoming LMT4 register"); | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "incoming_lmt5", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "incoming_lmt5", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_32 | ntb->xlat_reg->bar5_limit, | NTB_REG_32 | ntb->xlat_reg->bar5_limit, | ||||
sysctl_handle_register, "IU", "Incoming LMT5 register"); | sysctl_handle_register, "IU", "Incoming LMT5 register"); | ||||
} else { | } else { | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "incoming_lmt45", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "incoming_lmt45", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_64 | ntb->xlat_reg->bar4_limit, | NTB_REG_64 | ntb->xlat_reg->bar4_limit, | ||||
sysctl_handle_register, "QU", "Incoming LMT45 register"); | sysctl_handle_register, "QU", "Incoming LMT45 register"); | ||||
} | } | ||||
if (ntb->type == NTB_ATOM) | if (ntb->type == NTB_ATOM) | ||||
return; | return; | ||||
tmptree = SYSCTL_ADD_NODE(ctx, regpar, OID_AUTO, "xeon_stats", | tmptree = SYSCTL_ADD_NODE(ctx, regpar, OID_AUTO, "xeon_stats", | ||||
CTLFLAG_RD, NULL, "Xeon HW statistics"); | CTLFLAG_RD, NULL, "Xeon HW statistics"); | ||||
statpar = SYSCTL_CHILDREN(tmptree); | statpar = SYSCTL_CHILDREN(tmptree); | ||||
SYSCTL_ADD_PROC(ctx, statpar, OID_AUTO, "upstream_mem_miss", | SYSCTL_ADD_PROC(ctx, statpar, OID_AUTO, "upstream_mem_miss", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_16 | XEON_USMEMMISS_OFFSET, | NTB_REG_16 | XEON_USMEMMISS_OFFSET, | ||||
sysctl_handle_register, "SU", "Upstream Memory Miss"); | sysctl_handle_register, "SU", "Upstream Memory Miss"); | ||||
tmptree = SYSCTL_ADD_NODE(ctx, regpar, OID_AUTO, "xeon_hw_err", | tmptree = SYSCTL_ADD_NODE(ctx, regpar, OID_AUTO, "xeon_hw_err", | ||||
CTLFLAG_RD, NULL, "Xeon HW errors"); | CTLFLAG_RD, NULL, "Xeon HW errors"); | ||||
errpar = SYSCTL_CHILDREN(tmptree); | errpar = SYSCTL_CHILDREN(tmptree); | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "ppd", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "ppd", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_8 | NTB_PCI_REG | NTB_PPD_OFFSET, | NTB_REG_8 | NTB_PCI_REG | NTB_PPD_OFFSET, | ||||
sysctl_handle_register, "CU", "PPD"); | sysctl_handle_register, "CU", "PPD"); | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "pbar23_sz", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "pbar23_sz", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_8 | NTB_PCI_REG | XEON_PBAR23SZ_OFFSET, | NTB_REG_8 | NTB_PCI_REG | XEON_PBAR23SZ_OFFSET, | ||||
sysctl_handle_register, "CU", "PBAR23 SZ (log2)"); | sysctl_handle_register, "CU", "PBAR23 SZ (log2)"); | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "pbar4_sz", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "pbar4_sz", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_8 | NTB_PCI_REG | XEON_PBAR4SZ_OFFSET, | NTB_REG_8 | NTB_PCI_REG | XEON_PBAR4SZ_OFFSET, | ||||
sysctl_handle_register, "CU", "PBAR4 SZ (log2)"); | sysctl_handle_register, "CU", "PBAR4 SZ (log2)"); | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "pbar5_sz", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "pbar5_sz", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_8 | NTB_PCI_REG | XEON_PBAR5SZ_OFFSET, | NTB_REG_8 | NTB_PCI_REG | XEON_PBAR5SZ_OFFSET, | ||||
sysctl_handle_register, "CU", "PBAR5 SZ (log2)"); | sysctl_handle_register, "CU", "PBAR5 SZ (log2)"); | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "sbar23_sz", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "sbar23_sz", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_8 | NTB_PCI_REG | XEON_SBAR23SZ_OFFSET, | NTB_REG_8 | NTB_PCI_REG | XEON_SBAR23SZ_OFFSET, | ||||
sysctl_handle_register, "CU", "SBAR23 SZ (log2)"); | sysctl_handle_register, "CU", "SBAR23 SZ (log2)"); | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "sbar4_sz", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "sbar4_sz", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_8 | NTB_PCI_REG | XEON_SBAR4SZ_OFFSET, | NTB_REG_8 | NTB_PCI_REG | XEON_SBAR4SZ_OFFSET, | ||||
sysctl_handle_register, "CU", "SBAR4 SZ (log2)"); | sysctl_handle_register, "CU", "SBAR4 SZ (log2)"); | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "sbar5_sz", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "sbar5_sz", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_8 | NTB_PCI_REG | XEON_SBAR5SZ_OFFSET, | NTB_REG_8 | NTB_PCI_REG | XEON_SBAR5SZ_OFFSET, | ||||
sysctl_handle_register, "CU", "SBAR5 SZ (log2)"); | sysctl_handle_register, "CU", "SBAR5 SZ (log2)"); | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "devsts", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "devsts", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_16 | NTB_PCI_REG | XEON_DEVSTS_OFFSET, | NTB_REG_16 | NTB_PCI_REG | XEON_DEVSTS_OFFSET, | ||||
sysctl_handle_register, "SU", "DEVSTS"); | sysctl_handle_register, "SU", "DEVSTS"); | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "lnksts", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "lnksts", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_16 | NTB_PCI_REG | XEON_LINK_STATUS_OFFSET, | NTB_REG_16 | NTB_PCI_REG | XEON_LINK_STATUS_OFFSET, | ||||
sysctl_handle_register, "SU", "LNKSTS"); | sysctl_handle_register, "SU", "LNKSTS"); | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "slnksts", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "slnksts", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_16 | NTB_PCI_REG | XEON_SLINK_STATUS_OFFSET, | NTB_REG_16 | NTB_PCI_REG | XEON_SLINK_STATUS_OFFSET, | ||||
sysctl_handle_register, "SU", "SLNKSTS"); | sysctl_handle_register, "SU", "SLNKSTS"); | ||||
SYSCTL_ADD_PROC(ctx, errpar, OID_AUTO, "uncerrsts", | SYSCTL_ADD_PROC(ctx, errpar, OID_AUTO, "uncerrsts", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_32 | NTB_PCI_REG | XEON_UNCERRSTS_OFFSET, | NTB_REG_32 | NTB_PCI_REG | XEON_UNCERRSTS_OFFSET, | ||||
sysctl_handle_register, "IU", "UNCERRSTS"); | sysctl_handle_register, "IU", "UNCERRSTS"); | ||||
SYSCTL_ADD_PROC(ctx, errpar, OID_AUTO, "corerrsts", | SYSCTL_ADD_PROC(ctx, errpar, OID_AUTO, "corerrsts", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_32 | NTB_PCI_REG | XEON_CORERRSTS_OFFSET, | NTB_REG_32 | NTB_PCI_REG | XEON_CORERRSTS_OFFSET, | ||||
sysctl_handle_register, "IU", "CORERRSTS"); | sysctl_handle_register, "IU", "CORERRSTS"); | ||||
if (ntb->conn_type != NTB_CONN_B2B) | if (ntb->conn_type != NTB_CONN_B2B) | ||||
return; | return; | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "outgoing_xlat01l", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "outgoing_xlat01l", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_32 | XEON_B2B_XLAT_OFFSETL, | NTB_REG_32 | XEON_B2B_XLAT_OFFSETL, | ||||
sysctl_handle_register, "IU", "Outgoing XLAT0L register"); | sysctl_handle_register, "IU", "Outgoing XLAT0L register"); | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "outgoing_xlat01u", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "outgoing_xlat01u", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_32 | XEON_B2B_XLAT_OFFSETU, | NTB_REG_32 | XEON_B2B_XLAT_OFFSETU, | ||||
sysctl_handle_register, "IU", "Outgoing XLAT0U register"); | sysctl_handle_register, "IU", "Outgoing XLAT0U register"); | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "outgoing_xlat23", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "outgoing_xlat23", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_64 | ntb->bar_info[NTB_B2B_BAR_1].pbarxlat_off, | NTB_REG_64 | ntb->bar_info[NTB_B2B_BAR_1].pbarxlat_off, | ||||
sysctl_handle_register, "QU", "Outgoing XLAT23 register"); | sysctl_handle_register, "QU", "Outgoing XLAT23 register"); | ||||
if (HAS_FEATURE(ntb, NTB_SPLIT_BAR)) { | if (HAS_FEATURE(ntb, NTB_SPLIT_BAR)) { | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "outgoing_xlat4", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "outgoing_xlat4", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_32 | ntb->bar_info[NTB_B2B_BAR_2].pbarxlat_off, | NTB_REG_32 | ntb->bar_info[NTB_B2B_BAR_2].pbarxlat_off, | ||||
sysctl_handle_register, "IU", "Outgoing XLAT4 register"); | sysctl_handle_register, "IU", "Outgoing XLAT4 register"); | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "outgoing_xlat5", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "outgoing_xlat5", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_32 | ntb->bar_info[NTB_B2B_BAR_3].pbarxlat_off, | NTB_REG_32 | ntb->bar_info[NTB_B2B_BAR_3].pbarxlat_off, | ||||
sysctl_handle_register, "IU", "Outgoing XLAT5 register"); | sysctl_handle_register, "IU", "Outgoing XLAT5 register"); | ||||
} else { | } else { | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "outgoing_xlat45", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "outgoing_xlat45", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_64 | ntb->bar_info[NTB_B2B_BAR_2].pbarxlat_off, | NTB_REG_64 | ntb->bar_info[NTB_B2B_BAR_2].pbarxlat_off, | ||||
sysctl_handle_register, "QU", "Outgoing XLAT45 register"); | sysctl_handle_register, "QU", "Outgoing XLAT45 register"); | ||||
} | } | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "outgoing_lmt23", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "outgoing_lmt23", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_64 | XEON_PBAR2LMT_OFFSET, | NTB_REG_64 | XEON_PBAR2LMT_OFFSET, | ||||
sysctl_handle_register, "QU", "Outgoing LMT23 register"); | sysctl_handle_register, "QU", "Outgoing LMT23 register"); | ||||
if (HAS_FEATURE(ntb, NTB_SPLIT_BAR)) { | if (HAS_FEATURE(ntb, NTB_SPLIT_BAR)) { | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "outgoing_lmt4", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "outgoing_lmt4", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_32 | XEON_PBAR4LMT_OFFSET, | NTB_REG_32 | XEON_PBAR4LMT_OFFSET, | ||||
sysctl_handle_register, "IU", "Outgoing LMT4 register"); | sysctl_handle_register, "IU", "Outgoing LMT4 register"); | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "outgoing_lmt5", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "outgoing_lmt5", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_32 | XEON_PBAR5LMT_OFFSET, | NTB_REG_32 | XEON_PBAR5LMT_OFFSET, | ||||
sysctl_handle_register, "IU", "Outgoing LMT5 register"); | sysctl_handle_register, "IU", "Outgoing LMT5 register"); | ||||
} else { | } else { | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "outgoing_lmt45", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "outgoing_lmt45", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_64 | XEON_PBAR4LMT_OFFSET, | NTB_REG_64 | XEON_PBAR4LMT_OFFSET, | ||||
sysctl_handle_register, "QU", "Outgoing LMT45 register"); | sysctl_handle_register, "QU", "Outgoing LMT45 register"); | ||||
} | } | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "sbar01_base", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "sbar01_base", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_64 | ntb->xlat_reg->bar0_base, | NTB_REG_64 | ntb->xlat_reg->bar0_base, | ||||
sysctl_handle_register, "QU", "Secondary BAR01 base register"); | sysctl_handle_register, "QU", "Secondary BAR01 base register"); | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "sbar23_base", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "sbar23_base", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_64 | ntb->xlat_reg->bar2_base, | NTB_REG_64 | ntb->xlat_reg->bar2_base, | ||||
sysctl_handle_register, "QU", "Secondary BAR23 base register"); | sysctl_handle_register, "QU", "Secondary BAR23 base register"); | ||||
if (HAS_FEATURE(ntb, NTB_SPLIT_BAR)) { | if (HAS_FEATURE(ntb, NTB_SPLIT_BAR)) { | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "sbar4_base", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "sbar4_base", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_32 | ntb->xlat_reg->bar4_base, | NTB_REG_32 | ntb->xlat_reg->bar4_base, | ||||
sysctl_handle_register, "IU", | sysctl_handle_register, "IU", | ||||
"Secondary BAR4 base register"); | "Secondary BAR4 base register"); | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "sbar5_base", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "sbar5_base", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_32 | ntb->xlat_reg->bar5_base, | NTB_REG_32 | ntb->xlat_reg->bar5_base, | ||||
sysctl_handle_register, "IU", | sysctl_handle_register, "IU", | ||||
"Secondary BAR5 base register"); | "Secondary BAR5 base register"); | ||||
} else { | } else { | ||||
SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "sbar45_base", | SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "sbar45_base", | ||||
CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, ntb, | ||||
NTB_REG_64 | ntb->xlat_reg->bar4_base, | NTB_REG_64 | ntb->xlat_reg->bar4_base, | ||||
sysctl_handle_register, "QU", | sysctl_handle_register, "QU", | ||||
"Secondary BAR45 base register"); | "Secondary BAR45 base register"); | ||||
} | } | ||||
} | } | ||||
static int | static int | ||||
sysctl_handle_features(SYSCTL_HANDLER_ARGS) | sysctl_handle_features(SYSCTL_HANDLER_ARGS) | ||||
Show All 12 Lines |