summaryrefslogtreecommitdiffstats
path: root/share/man
diff options
context:
space:
mode:
Diffstat (limited to 'share/man')
-rw-r--r--share/man/man4/Makefile15
-rw-r--r--share/man/man4/cxgbe.4133
-rw-r--r--share/man/man4/cxgbev.4101
-rw-r--r--share/man/man4/hv_vss.4366
-rw-r--r--share/man/man4/isp.442
-rw-r--r--share/man/man5/src.conf.520
6 files changed, 583 insertions, 94 deletions
diff --git a/share/man/man4/Makefile b/share/man/man4/Makefile
index 74f5e70..05c249a 100644
--- a/share/man/man4/Makefile
+++ b/share/man/man4/Makefile
@@ -180,6 +180,7 @@ MAN= aac.4 \
${_hv_storvsc.4} \
${_hv_utils.4} \
${_hv_vmbus.4} \
+ hv_vss.4 \
hwpmc.4 \
ichsmb.4 \
${_ichwd.4} \
@@ -584,11 +585,21 @@ MLINKS+=crypto.4 cryptodev.4
MLINKS+=cue.4 if_cue.4
MLINKS+=cxgb.4 if_cxgb.4
MLINKS+=cxgbe.4 if_cxgbe.4 \
+ cxgbe.4 vcxgbe.4 \
+ cxgbe.4 if_vcxgbe.4 \
cxgbe.4 cxl.4 \
- cxgbe.4 if_cxl.4
+ cxgbe.4 if_cxl.4 \
+ cxgbe.4 vcxl.4 \
+ cxgbe.4 if_vcxl.4 \
+ cxgbe.4 cc.4 \
+ cxgbe.4 if_cc.4 \
+ cxgbe.4 vcc.4 \
+ cxgbe.4 if_vcc.4
MLINKS+=cxgbev.4 if_cxgbev.4 \
cxgbev.4 cxlv.4 \
- cxgbev.4 if_cxlv.4
+ cxgbev.4 if_cxlv.4 \
+ cxgbev.4 ccv.4 \
+ cxgbev.4 if_ccv.4
MLINKS+=dc.4 if_dc.4
MLINKS+=de.4 if_de.4
MLINKS+=disc.4 if_disc.4
diff --git a/share/man/man4/cxgbe.4 b/share/man/man4/cxgbe.4
index c9d1de0..a4800e1 100644
--- a/share/man/man4/cxgbe.4
+++ b/share/man/man4/cxgbe.4
@@ -1,4 +1,4 @@
-.\" Copyright (c) 2011-2014, Chelsio Inc
+.\" Copyright (c) 2011-2016, Chelsio Inc
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
@@ -31,12 +31,12 @@
.\"
.\" $FreeBSD$
.\"
-.Dd December 2, 2015
+.Dd December 22, 2016
.Dt CXGBE 4
.Os
.Sh NAME
.Nm cxgbe
-.Nd "Chelsio T4 and T5 based 40Gb, 10Gb, and 1Gb Ethernet adapter driver"
+.Nd "Chelsio T4-, T5-, and T6-based 100Gb, 40Gb, 25Gb, 10Gb, and 1Gb Ethernet adapter driver"
.Sh SYNOPSIS
To compile this driver into the kernel,
place the following lines in your
@@ -51,13 +51,14 @@ module at boot time, place the following lines in
.Bd -literal -offset indent
t4fw_cfg_load="YES"
t5fw_cfg_load="YES"
+t6fw_cfg_load="YES"
if_cxgbe_load="YES"
.Ed
.Sh DESCRIPTION
The
.Nm
driver provides support for PCI Express Ethernet adapters based on
-the Chelsio Terminator 4 and Terminator 5 ASICs (T4 and T5).
+the Chelsio Terminator 4, Terminator 5, and Terminator 6 ASICs (T4, T5, and T6).
The driver supports Jumbo Frames, Transmit/Receive checksum offload,
TCP segmentation offload (TSO), Large Receive Offload (LRO), VLAN
tag insertion/extraction, VLAN checksum offload, VLAN TSO, and
@@ -66,18 +67,47 @@ For further hardware information and questions related to hardware
requirements, see
.Pa http://www.chelsio.com/ .
.Pp
-Note that ports of T5 cards are named cxl and attach to a t5nex parent device
-(in contrast to ports named cxgbe that attach to a t4nex parent for a T4 card).
-Loader tunables with the hw.cxgbe prefix apply to both T4 and T5 cards.
-The sysctl MIBs are at dev.t5nex and dev.cxl for T5 cards and at dev.t4nex and
-dev.cxgbe for T4 cards.
+The
+.Nm
+driver uses different names for devices based on the associated ASIC:
+.Bl -column -offset indent "ASIC" "Port Name" "Parent Device"
+.It Sy ASIC Ta Sy Port Name Ta Sy Parent Device Ta Sy Virtual Interface
+.It T4 Ta cxgbe Ta t4nex Ta vcxgbe
+.It T5 Ta cxl Ta t5nex Ta vcxl
+.It T6 Ta cc Ta t6nex Ta vcc
+.El
.Pp
+Loader tunables with the hw.cxgbe prefix apply to all cards.
+The driver provides sysctl MIBs for both ports and parent devices using
+the names above.
+For example, a T5 adapter provides port MIBs under dev.cxl and
+adapter-wide MIBs under dev.t5nex.
+References to sysctl MIBs in the remainder of this page use
+dev.<port> for port MIBs and dev.<nexus> for adapter-wide MIBs.
+.Pp
For more information on configuring this device, see
.Xr ifconfig 8 .
.Sh HARDWARE
The
.Nm
+driver supports 100Gb and 25Gb Ethernet adapters based on the T6 ASIC:
+.Pp
+.Bl -bullet -compact
+.It
+Chelsio T6225-CR
+.It
+Chelsio T6225-SO-CR
+.It
+Chelsio T62100-LP-CR
+.It
+Chelsio T62100-SO-CR
+.It
+Chelsio T62100-CR
+.El
+.Pp
+The
+.Nm
driver supports 40Gb, 10Gb and 1Gb Ethernet adapters based on the T5 ASIC:
.Pp
.Bl -bullet -compact
@@ -140,92 +170,89 @@ prompt before booting the kernel or stored in
.Xr loader.conf 5 .
.Bl -tag -width indent
.It Va hw.cxgbe.ntxq10g
-The number of tx queues to use for a 10Gb or 40Gb port.
+Number of tx queues used for a 10Gb or higher-speed port.
The default is 16 or the number
of CPU cores in the system, whichever is less.
.It Va hw.cxgbe.nrxq10g
-The number of rx queues to use for a 10Gb or 40Gb port.
+Number of rx queues used for a 10Gb or higher-speed port.
The default is 8 or the number
of CPU cores in the system, whichever is less.
.It Va hw.cxgbe.ntxq1g
-The number of tx queues to use for a 1Gb port.
+Number of tx queues used for a 1Gb port.
The default is 4 or the number
of CPU cores in the system, whichever is less.
.It Va hw.cxgbe.nrxq1g
-The number of rx queues to use for a 1Gb port.
+Number of rx queues used for a 1Gb port.
The default is 2 or the number
of CPU cores in the system, whichever is less.
.It Va hw.cxgbe.nofldtxq10g
-The number of TOE tx queues to use for a 10Gb or 40Gb port.
+Number of TOE tx queues used for a 10Gb or higher-speed port.
The default is 8 or the
number of CPU cores in the system, whichever is less.
.It Va hw.cxgbe.nofldrxq10g
-The number of TOE rx queues to use for a 10Gb or 40Gb port.
+Number of TOE rx queues used for a 10Gb or higher-speed port.
The default is 2 or the
number of CPU cores in the system, whichever is less.
.It Va hw.cxgbe.nofldtxq1g
-The number of TOE tx queues to use for a 1Gb port.
+Number of TOE tx queues used for a 1Gb port.
The default is 2 or the
number of CPU cores in the system, whichever is less.
.It Va hw.cxgbe.nofldrxq1g
-The number of TOE rx queues to use for a 1Gb port.
+Number of TOE rx queues used for a 1Gb port.
The default is 1.
.It Va hw.cxgbe.num_vis
-The number of virtual interfaces (VIs) created for each port.
+Number of virtual interfaces (VIs) created for each port.
Each virtual interface creates a separate network interface.
The first virtual interface on each port is required and represents
the primary network interface on the port.
-Additional virtual interfaces on a port are named vcxgbe (T4) or
-vcxl (T5) and only use a single rx and tx queue.
+Additional virtual interfaces on a port are named using the Virtual Interface
+name from the table above.
Additional virtual interfaces use a single pair of queues
for rx and tx as well an additional pair of queues for TOE rx and tx.
The default is 1.
.It Va hw.cxgbe.holdoff_timer_idx_10G
.It Va hw.cxgbe.holdoff_timer_idx_1G
-The timer index value to use to delay interrupts.
+Timer index value used to delay interrupts.
The holdoff timer list has the values 1, 5, 10, 50, 100, and 200
by default (all values are in microseconds) and the index selects a
value from this list.
The default value is 1 which means the timer value is 5us.
Different interfaces can be assigned different values at any time via the
-dev.cxgbe.X.holdoff_tmr_idx or dev.cxl.X.holdoff_tmr_idx sysctl.
+dev.<port>.X.holdoff_tmr_idx sysctl.
.It Va hw.cxgbe.holdoff_pktc_idx_10G
.It Va hw.cxgbe.holdoff_pktc_idx_1G
-The packet-count index value to use to delay interrupts.
-The packet-count list has the values 1, 8, 16, and 32 by default
+Packet-count index value used to delay interrupts.
+The packet-count list has the values 1, 8, 16, and 32 by default,
and the index selects a value from this list.
The default value is -1 which means packet counting is disabled and interrupts
are generated based solely on the holdoff timer value.
Different interfaces can be assigned different values via the
-dev.cxgbe.X.holdoff_pktc_idx or dev.cxl.X.holdoff_pktc_idx sysctl.
+dev.<port>.X.holdoff_pktc_idx sysctl.
This sysctl works only when the interface has never been marked up (as done by
ifconfig up).
.It Va hw.cxgbe.qsize_txq
-The size, in number of entries, of the descriptor ring used for a tx
-queue.
+Number of entries in a transmit queue's descriptor ring.
A buf_ring of the same size is also allocated for additional
software queuing.
See
.Xr ifnet 9 .
The default value is 1024.
Different interfaces can be assigned different values via the
-dev.cxgbe.X.qsize_txq sysctl or dev.cxl.X.qsize_txq sysctl.
+dev.<port>.X.qsize_txq sysctl.
This sysctl works only when the interface has never been marked up (as done by
ifconfig up).
.It Va hw.cxgbe.qsize_rxq
-The size, in number of entries, of the descriptor ring used for an
-rx queue.
+Number of entries in a receive queue's descriptor ring.
The default value is 1024.
Different interfaces can be assigned different values via the
-dev.cxgbe.X.qsize_rxq or dev.cxl.X.qsize_rxq sysctl.
+dev.<port>.X.qsize_rxq sysctl.
This sysctl works only when the interface has never been marked up (as done by
ifconfig up).
.It Va hw.cxgbe.interrupt_types
-The interrupt types that the driver is allowed to use.
-Bit 0 represents INTx (line interrupts), bit 1 MSI, bit 2 MSI-X.
+Permitted interrupt types.
+Bit 0 represents INTx (line interrupts), bit 1 MSI, and bit 2 MSI-X.
The default is 7 (all allowed).
-The driver will select the best possible type out of the allowed types by
-itself.
+The driver selects the best possible type out of the allowed types.
.It Va hw.cxgbe.fw_install
0 prohibits the driver from installing a firmware on the card.
1 allows the driver to install a new firmware if internal driver
@@ -236,7 +263,7 @@ long as it is compatible with the driver and is a different version than
the one already on the card.
The default is 1.
.It Va hw.cxgbe.fl_pktshift
-The number of bytes of padding inserted before the beginning of an Ethernet
+Number of padding bytes inserted before the beginning of an Ethernet
frame in the receive buffer.
The default value of 2 ensures that the Ethernet payload (usually the IP header)
is at a 4 byte aligned address.
@@ -262,7 +289,25 @@ reaches a high threshold, 0 prohibits the hardware from emitting PAUSE frames.
The default is 3 (both rx_pause and tx_pause = 1).
This tunable establishes the default PAUSE settings for all ports.
Settings can be displayed and controlled on a per-port basis via the
-dev.cxgbe.X.pause_settings (dev.cxl.X.pause_settings for T5 cards) sysctl.
+dev.<port>.X.pause_settings sysctl.
+.It Va hw.cxgbe.fec
+FEC (Forward Error Correction) settings.
+0 diables FEC.
+Bit 0 enables RS FEC, bit 1 enables BASE-R RS, bit 3 is reserved.
+The default is -1 which lets the driver pick a value.
+This tunable establishes the default FEC settings for all ports.
+Settings can be displayed and controlled on a per-port basis via the
+dev.<port>.X.fec sysctl.
+.It Va hw.cxgbe.autoneg
+Link autonegotiation settings.
+This tunable establishes the default autonegotiation settings for all ports.
+Settings can be displayed and controlled on a per-port basis via the
+dev.<port>.X.autoneg sysctl.
+0 disables autonegotiation.
+1 enables autonegotiation.
+The default is -1 which lets the driver pick a value.
+dev.<port>.X.autoneg is -1 for port and module combinations that do not support
+autonegotiation.
.It Va hw.cxgbe.buffer_packing
Allow the hardware to deliver multiple frames in the same receive buffer
opportunistically.
@@ -278,8 +323,8 @@ Sizes of rx clusters. Each of these must be set to one of the sizes available
(usually 2048, 4096, 9216, and 16384) and largest_rx_cluster must be greater
than or equal to safest_rx_cluster.
The defaults are 16384 and 4096 respectively.
-The driver will never attempt to allocate a receive buffer larger than
-largest_rx_cluster and will fall back to allocating buffers of
+The driver never attempts to allocate a receive buffer larger than
+largest_rx_cluster and falls back to allocating buffers of
safest_rx_cluster size if an allocation larger than safest_rx_cluster fails.
Note that largest_rx_cluster merely establishes a ceiling -- the driver is
allowed to allocate buffers of smaller sizes.
@@ -289,8 +334,8 @@ A configuration file contains a recipe for partitioning and configuring the
hardware resources on the card.
This tunable is for specialized applications only and should not be used in
normal operation.
-The configuration profile currently in use is available in the dev.t4nex.X.cf
-and dev.t4nex.X.cfcsum (dev.t5nex for T5 cards) sysctls.
+The configuration profile currently in use is available in the dev.<nexus>.X.cf
+and dev.<nexus>.X.cfcsum sysctls.
.It Va hw.cxgbe.linkcaps_allowed
.It Va hw.cxgbe.niccaps_allowed
.It Va hw.cxgbe.toecaps_allowed
@@ -304,7 +349,7 @@ capability.
This tunable is for specialized applications only and should not be used in
normal operation.
The capabilities for which hardware resources have been reserved are listed in
-dev.t4nex.X.*caps or dev.t5nex.X.*caps sysctls.
+dev.<nexus>.X.*caps sysctls.
.El
.Sh SUPPORT
For general information and support,
@@ -331,6 +376,10 @@ Support for T5 cards first appeared in
.Fx 9.2
and
.Fx 10.0 .
+Support for T6 cards first appeared in
+.Fx 11.1
+and
+.Fx 12.0 .
.Sh AUTHORS
.An -nosplit
The
diff --git a/share/man/man4/cxgbev.4 b/share/man/man4/cxgbev.4
index f4e3dc5..a442d14 100644
--- a/share/man/man4/cxgbev.4
+++ b/share/man/man4/cxgbev.4
@@ -31,12 +31,12 @@
.\"
.\" $FreeBSD$
.\"
-.Dd August 22, 2016
+.Dd December 22, 2016
.Dt CXGBEV 4
.Os
.Sh NAME
.Nm cxgbev
-.Nd "Chelsio T4 and T5 based 40Gb, 10Gb, and 1Gb Ethernet VF driver"
+.Nd "Chelsio T4-, T5-, and T6-based 100Gb, 40Gb, 25Gb, 10Gb, and 1Gb Ethernet VF driver"
.Sh SYNOPSIS
To compile this driver into the kernel,
place the following lines in your
@@ -56,7 +56,8 @@ if_cxgbev_load="YES"
The
.Nm
driver provides support for Virtual Functions on PCI Express Ethernet adapters
-based on the Chelsio Terminator 4 and Terminator 5 ASICs (T4 and T5).
+based on the Chelsio Terminator 4, Terminator 5, and Terminator 6 ASICs
+(T4, T5, and T6).
The driver supports Jumbo Frames, Transmit/Receive checksum offload,
TCP segmentation offload (TSO), Large Receive Offload (LRO), VLAN
tag insertion/extraction, VLAN checksum offload, VLAN TSO, and
@@ -65,18 +66,49 @@ For further hardware information and questions related to hardware
requirements, see
.Pa http://www.chelsio.com/ .
.Pp
-Note that ports of T5 VFs are named cxlv and attach to a t5vf parent device
-(in contrast to ports named cxgbev that attach to a t4vf parent for a T4 VF).
-Loader tunables with the hw.cxgbe prefix apply to both T4 and T5 VFs.
-The Physical Function driver for T4 and T5 adapters shares these tunables.
-The sysctl MIBs are at dev.t5vf and dev.cxlv for T5 cards and at dev.t4vf and
-dev.cxgbev for T4 cards.
+The
+.Nm
+driver uses different names for devices based on the associated ASIC:
+.Bl -column -offset indent "ASIC" "Port Name"
+.It Sy ASIC Ta Sy Port Name Ta Sy Parent Device
+.It T4 Ta cxgbev Ta t4vf
+.It T5 Ta cxlv Ta t5vf
+.It T6 Ta ccv Ta t6vf
+.El
+.Pp
+Loader tunables with the hw.cxgbe prefix apply to VFs from all cards.
+The Physical Function driver for Chelsio Terminator adapters shares these
+tunables.
+The driver provides sysctl MIBs for both ports and parent devices using
+the names above.
+For example, a T5 VF provides port MIBs under dev.cxlv and
+parent device MIBs under dev.t5vf.
+References to sysctl MIBs in the remainder of this page use
+dev.<port> for port MIBs and dev.<nexus> for parent device MIBs.
.Pp
For more information on configuring this device, see
.Xr ifconfig 8 .
.Sh HARDWARE
The
.Nm
+driver supports Virtual Functions on 100Gb and 25Gb Ethernet adapters
+based on the T6 ASIC:
+.Pp
+.Bl -bullet -compact
+.It
+Chelsio T6225-CR
+.It
+Chelsio T6225-SO-CR
+.It
+Chelsio T62100-LP-CR
+.It
+Chelsio T62100-SO-CR
+.It
+Chelsio T62100-CR
+.El
+.Pp
+The
+.Nm
driver supports Virtual Functions on 40Gb, 10Gb and 1Gb Ethernet adapters
based on the T5 ASIC:
.Pp
@@ -141,69 +173,68 @@ prompt before booting the kernel or stored in
.Xr loader.conf 5 .
.Bl -tag -width indent
.It Va hw.cxgbe.ntxq10g
-The number of tx queues to use for a 10Gb or 40Gb port.
+Number of tx queues used for a 10Gb or higher-speed port.
The default is 16 or the number
of CPU cores in the system, whichever is less.
.It Va hw.cxgbe.nrxq10g
-The number of rx queues to use for a 10Gb or 40Gb port.
+Number of rx queues used for a 10Gb or higher-speed port.
The default is 8 or the number
of CPU cores in the system, whichever is less.
.It Va hw.cxgbe.ntxq1g
-The number of tx queues to use for a 1Gb port.
+Number of tx queues used for a 1Gb port.
The default is 4 or the number
of CPU cores in the system, whichever is less.
.It Va hw.cxgbe.nrxq1g
-The number of rx queues to use for a 1Gb port.
+Number of rx queues used for a 1Gb port.
The default is 2 or the number
of CPU cores in the system, whichever is less.
.It Va hw.cxgbe.holdoff_timer_idx_10G
.It Va hw.cxgbe.holdoff_timer_idx_1G
-The timer index value to use to delay interrupts.
+Timer index value used to delay interrupts.
The holdoff timer list has the values 1, 5, 10, 50, 100, and 200
by default (all values are in microseconds) and the index selects a
value from this list.
The default value is 1 which means the timer value is 5us.
Different interfaces can be assigned different values at any time via the
-dev.cxgbev.X.holdoff_tmr_idx or dev.cxlv.X.holdoff_tmr_idx sysctl.
+dev.<port>.X.holdoff_tmr_idx sysctl.
.It Va hw.cxgbe.holdoff_pktc_idx_10G
.It Va hw.cxgbe.holdoff_pktc_idx_1G
-The packet-count index value to use to delay interrupts.
-The packet-count list has the values 1, 8, 16, and 32 by default
+Packet-count index value used to delay interrupts.
+The packet-count list has the values 1, 8, 16, and 32 by default,
and the index selects a value from this list.
The default value is -1 which means packet counting is disabled and interrupts
are generated based solely on the holdoff timer value.
Different interfaces can be assigned different values via the
-dev.cxgbev.X.holdoff_pktc_idx or dev.cxlv.X.holdoff_pktc_idx sysctl.
+dev.<port>.X.holdoff_pktc_idx sysctl.
This sysctl works only when the interface has never been marked up (as done by
ifconfig up).
.It Va hw.cxgbe.qsize_txq
-The size, in number of entries, of the descriptor ring used for a tx
-queue.
+Number of entries in a transmit queue's descriptor ring.
A buf_ring of the same size is also allocated for additional
software queuing.
See
.Xr ifnet 9 .
The default value is 1024.
Different interfaces can be assigned different values via the
-dev.cxgbev.X.qsize_txq sysctl or dev.cxlv.X.qsize_txq sysctl.
+dev.<port>.X.qsize_txq sysctl.
This sysctl works only when the interface has never been marked up (as done by
ifconfig up).
.It Va hw.cxgbe.qsize_rxq
-The size, in number of entries, of the descriptor ring used for an
-rx queue.
+Number of entries in a receive queue's descriptor ring.
The default value is 1024.
Different interfaces can be assigned different values via the
-dev.cxgbev.X.qsize_rxq or dev.cxlv.X.qsize_rxq sysctl.
+dev.<port>.X.qsize_rxq sysctl.
This sysctl works only when the interface has never been marked up (as done by
ifconfig up).
.It Va hw.cxgbe.interrupt_types
-The interrupt types that the driver is allowed to use.
-Bit 0 represents INTx (line interrupts), bit 1 MSI, bit 2 MSI-X.
+Permitted interrupt types.
+Bit 0 represents INTx (line interrupts), bit 1 MSI, and bit 2 MSI-X.
The default is 7 (all allowed).
-The driver will select the best possible type out of the allowed types by
-itself.
+The driver selects the best possible type out of the allowed types.
+Note that Virtual Functions do not support INTx interrupts and fail
+to attach if neither MSI nor MSI-X are enabled.
.It Va hw.cxgbe.fl_pktshift
-The number of bytes of padding inserted before the beginning of an Ethernet
+Number of padding bytes inserted before the beginning of an Ethernet
frame in the receive buffer.
The default value of 2 ensures that the Ethernet payload (usually the IP header)
is at a 4 byte aligned address.
@@ -230,8 +261,8 @@ Each of these must be set to one of the sizes available
(usually 2048, 4096, 9216, and 16384) and largest_rx_cluster must be greater
than or equal to safest_rx_cluster.
The defaults are 16384 and 4096 respectively.
-The driver will never attempt to allocate a receive buffer larger than
-largest_rx_cluster and will fall back to allocating buffers of
+The driver never attempts to allocate a receive buffer larger than
+largest_rx_cluster and falls back to allocating buffers of
safest_rx_cluster size if an allocation larger than safest_rx_cluster fails.
Note that largest_rx_cluster merely establishes a ceiling -- the driver is
allowed to allocate buffers of smaller sizes.
@@ -239,8 +270,8 @@ allowed to allocate buffers of smaller sizes.
.Pp
Certain settings and resources for Virtual Functions are dictated
by the parent Physical Function driver.
-For example, the Physical Function driver limits the number of queues a
-Virtual Function is permitted to use.
+For example, the Physical Function driver limits the number of queues
+available to a Virtual Function.
Some of these limits can be adjusted in the firmware configuration file
used with the Physical Function driver.
.Pp
@@ -258,7 +289,7 @@ to 1
.Pc .
.Pp
The VF driver currently depends on the PF driver.
-As a result, loading the VF driver will also load the PF driver as a
+As a result, loading the VF driver also loads the PF driver as a
dependency.
.Sh SUPPORT
For general information and support,
@@ -279,6 +310,8 @@ email all the specific information related to the issue to
The
.Nm
device driver first appeared in
+.Fx 11.1
+and
.Fx 12.0 .
.Sh AUTHORS
.An -nosplit
diff --git a/share/man/man4/hv_vss.4 b/share/man/man4/hv_vss.4
new file mode 100644
index 0000000..4db54e3
--- /dev/null
+++ b/share/man/man4/hv_vss.4
@@ -0,0 +1,366 @@
+.\" Copyright (c) 2016 Microsoft Corp.
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. 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.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+.\"
+.\" $FreeBSD$
+.Dd October 12, 2016
+.Dt HV_VSS 4
+.Os
+.Sh NAME
+.Nm hv_vss
+.Nd Hyper-V Volume Shadow Copy Service API
+.Sh SYNOPSIS
+.In dev/hyperv/hv_snapshot.h
+.Bd -literal
+#define VSS_SUCCESS 0x00000000
+#define VSS_FAIL 0x00000001
+
+enum hv_vss_op_t {
+ HV_VSS_NONE = 0,
+ HV_VSS_CHECK,
+ HV_VSS_FREEZE,
+ HV_VSS_THAW,
+ HV_VSS_COUNT
+};
+
+struct hv_vss_opt_msg {
+ uint32_t opt; /* operation */
+ uint32_t status; /* 0 for success, 1 for error */
+ uint64_t msgid; /* an ID used to identify the transaction */
+ uint8_t reserved[48]; /* reserved values are all zeroes */
+};
+.Ed
+.Sh DESCRIPTION
+The freeze or thaw functionality of application is important to guarantee
+the application consistent backup. On windows platform, VSS is defined to do
+live backup. But for VM guest running on Hyper-V, the corresponding VSS is
+not defined yet. For example, a running database server instance, it knows when the
+applications' freeze/thaw should start or finish. But it is not aware of
+the freeze/thaw notification from Hyper-V host. The
+.Nm
+is designed to notify application freeze/thaw request.
+Thus, it plays a role of broker to forward the freeze/thaw command from Hyper-V host
+to userland application if it registered VSS service on
+.Fx
+VM, and sends the result back to Hyper-V host.
+.Pp
+Generally,
+.Xr hv_vss_daemon 8
+takes the responsiblity to freeze/thaw UFS file system,
+and it is automatically launched after system boots. When Hyper-V host wants to
+take a snapshot of the
+.Fx
+VM, it will first send VSS capability check to
+.Fx
+VM. The
+.Nm
+received the request and forward the request to userland application if it is
+registered. Only after
+.Nm
+received the VSS_SUCCESS response from application, the
+.Xr hv_vss_daemon 8
+will be informed to check whether file system freeze/thaw is supported. Any error
+occurs during this period,
+.Nm
+will inform Hyper-V host that VSS is not supported. In addition, there is a default
+timeout limit before sending response to Hyper-V host.
+If the total response time from application and
+.Xr hv_vss_daemon 8
+exceeds this value, timeout
+will occurs and VSS unsupported is responsed to Hyper-V host.
+.Pp
+After Hyper-V host confirmed the
+.Fx
+VM supports VSS, it will send freeze request to VM, and
+.Nm
+will first forward it to application. After application finished freezing, it should
+inform
+.Nm
+and file system level freezing will be triggered by
+.Xr hv_vss_daemon 8 . After all freezing
+on both application and
+.Xr hv_vss_daemon 8
+were finished, the
+.Nm
+will inform Hyper-V host that freezing is done. Of course, there is a timeout limit as
+same as VSS capability is set to make sure freezing on
+.Fx
+VM is not hang. If there is any error occurs or timeout happened, the freezing is failed
+on Hyper-V side.
+.Pp
+Hyper-V host will send thaw request after taking the snapshot, typically, this period is
+very short in order not to block the running application.
+.Nm
+firstly thaw the file system by notifying
+.Xr hv_vss_daemon 8 ,
+then notifies user registered
+application. There is also a timeout check before sending response to Hyper-V host.
+.Pp
+All the default timeout limit used in VSS capability check, freeze or thaw is the same.
+It is 15 seconds currently.
+.Sh NOTES
+.Nm
+only support UFS currently. If any of file system partition is non UFS, the VSS capability
+check will fail. If application does not register VSS,
+.Nm
+only support backup for file system level consistent. The device should be closed before it
+was opened again. If you want to simultaneously open "/dev/hv_appvss_dev" two or more times,
+an error (-1) will be returned, and errno was set.
+.Pp
+If
+.Xr hv_vss_daemon 8
+was killed after system boots, the VSS functionality will not work.
+.Sh EXAMPLES
+The following is a complete example which does nothing except for waiting 2 seconds when
+receiving those notifications from
+.Nm
+.Bd -literal
+#include <string.h>
+#include <stdio.h>
+#include <sys/ioctl.h>
+#include <sys/param.h>
+#include <sys/ucred.h>
+#include <sys/mount.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <poll.h>
+#include <stdint.h>
+#include <syslog.h>
+#include <errno.h>
+#include <err.h>
+#include <fcntl.h>
+#include <ufs/ffs/fs.h>
+#include <paths.h>
+#include <sys/ioccom.h>
+#include <dev/hyperv/hv_snapshot.h>
+
+#define UNDEF_FREEZE_THAW (0)
+#define FREEZE (1)
+#define THAW (2)
+#define CHECK (3)
+
+#define VSS_LOG(priority, format, args...) do { \\
+ if (is_debugging == 1) { \\
+ if (is_daemon == 1) \\
+ syslog(priority, format, ## args); \\
+ else \\
+ printf(format, ## args); \\
+ } else { \\
+ if (priority < LOG_DEBUG) { \\
+ if (is_daemon == 1) \\
+ syslog(priority, format, ## args); \\
+ else \\
+ printf(format, ## args); \\
+ } \\
+ } \\
+ } while(0)
+
+#define CHECK_TIMEOUT 1
+#define CHECK_FAIL 2
+#define FREEZE_TIMEOUT 1
+#define FREEZE_FAIL 2
+#define THAW_TIMEOUT 1
+#define THAW_FAIL 2
+
+static int is_daemon = 1;
+static int is_debugging = 0;
+static int simu_opt_waiting = 2; // seconds
+
+#define GENERIC_OPT(TIMEOUT, FAIL) \\
+ do { \\
+ sleep(simu_opt_waiting); \\
+ if (opt == CHECK_TIMEOUT) { \\
+ sleep(simu_opt_waiting * 10); \\
+ VSS_LOG(LOG_INFO, "%s timeout simulation\\n", \\
+ __func__); \\
+ return (0); \\
+ } else if (opt == CHECK_FAIL) { \\
+ VSS_LOG(LOG_INFO, "%s failure simulation\\n", \\
+ __func__); \\
+ return (CHECK_FAIL); \\
+ } else { \\
+ VSS_LOG(LOG_INFO, "%s success simulation\\n", \\
+ __func__); \\
+ return (0); \\
+ } \\
+ } while (0)
+
+static int
+check(int opt)
+{
+ GENERIC_OPT(CHECK_TIMEOUT, CHECK_FAIL);
+}
+
+static int
+freeze(int opt)
+{
+ GENERIC_OPT(FREEZE_TIMEOUT, FREEZE_FAIL);
+}
+
+static int
+thaw(int opt)
+{
+ GENERIC_OPT(THAW_TIMEOUT, THAW_FAIL);
+}
+
+static void usage(const char* cmd) {
+ fprintf(stderr,
+ "%s -f <0|1|2>: simulate app freeze."
+ " 0: successful, 1: freeze timeout, 2: freeze failed\\n"
+ " -c <0|1|2>: simulate vss feature check"
+ " -t <0|1|2>: simulate app thaw."
+ " 0: successful, 1: freeze timeout, 2: freeze failed\\n"
+ " -d : enable debug mode\\n"
+ " -n : run this tool under non-daemon mode\\n", cmd);
+}
+
+int
+main(int argc, char* argv[]) {
+ int ch, freezesimuop = 0, thawsimuop = 0, checksimuop = 0, fd, r, error;
+ uint32_t op;
+ struct pollfd app_vss_fd[1];
+ struct hv_vss_opt_msg userdata;
+
+ while ((ch = getopt(argc, argv, "f:c:t:dnh")) != -1) {
+ switch (ch) {
+ case 'f':
+ /* Run as regular process for debugging purpose. */
+ freezesimuop = (int)strtol(optarg, NULL, 10);
+ break;
+ case 't':
+ thawsimuop = (int)strtol(optarg, NULL, 10);
+ break;
+ case 'c':
+ checksimuop = (int)strtol(optarg, NULL, 10);
+ break;
+ case 'd':
+ is_debugging = 1;
+ break;
+ case 'n':
+ is_daemon = 0;
+ break;
+ case 'h':
+ default:
+ usage(argv[0]);
+ exit(0);
+ }
+ }
+
+ openlog("APPVSS", 0, LOG_USER);
+ /* Become daemon first. */
+ if (is_daemon == 1)
+ daemon(1, 0);
+ else
+ VSS_LOG(LOG_DEBUG, "Run as regular process.\\n");
+
+ VSS_LOG(LOG_INFO, "HV_VSS starting; pid is: %d\\n", getpid());
+
+ fd = open(VSS_DEV(APP_VSS_DEV_NAME), O_RDWR);
+ if (fd < 0) {
+ VSS_LOG(LOG_ERR, "Fail to open %s, error: %d %s\\n",
+ VSS_DEV(APP_VSS_DEV_NAME), errno, strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ app_vss_fd[0].fd = fd;
+ app_vss_fd[0].events = POLLIN | POLLRDNORM;
+
+ while (1) {
+ r = poll(app_vss_fd, 1, INFTIM);
+
+ VSS_LOG(LOG_DEBUG, "poll returned r = %d, revent = 0x%x\\n",
+ r, app_vss_fd[0].revents);
+
+ if (r == 0 || (r < 0 && errno == EAGAIN) ||
+ (r < 0 && errno == EINTR)) {
+ /* Nothing to read */
+ continue;
+ }
+
+ if (r < 0) {
+ /*
+ * For poll return failure other than EAGAIN,
+ * we want to exit.
+ */
+ VSS_LOG(LOG_ERR, "Poll failed.\\n");
+ perror("poll");
+ exit(EIO);
+ }
+
+ /* Read from character device */
+ error = ioctl(fd, IOCHVVSSREAD, &userdata);
+ if (error < 0) {
+ VSS_LOG(LOG_ERR, "Read failed.\\n");
+ perror("pread");
+ exit(EIO);
+ }
+
+ if (userdata.status != 0) {
+ VSS_LOG(LOG_ERR, "data read error\\n");
+ continue;
+ }
+
+ op = userdata.opt;
+
+ switch (op) {
+ case HV_VSS_CHECK:
+ error = check(checksimuop);
+ break;
+ case HV_VSS_FREEZE:
+ error = freeze(freezesimuop);
+ break;
+ case HV_VSS_THAW:
+ error = thaw(thawsimuop);
+ break;
+ default:
+ VSS_LOG(LOG_ERR, "Illegal operation: %d\\n", op);
+ error = VSS_FAIL;
+ }
+ if (error)
+ userdata.status = VSS_FAIL;
+ else
+ userdata.status = VSS_SUCCESS;
+ error = ioctl(fd, IOCHVVSSWRITE, &userdata);
+ if (error != 0) {
+ VSS_LOG(LOG_ERR, "Fail to write to device\\n");
+ exit(EXIT_FAILURE);
+ } else {
+ VSS_LOG(LOG_INFO, "Send response %d for %s to kernel\\n",
+ userdata.status, op == HV_VSS_FREEZE ? "Freeze" :
+ (op == HV_VSS_THAW ? "Thaw" : "Check"));
+ }
+ }
+ return 0;
+}
+.Sh SEE ALSO
+.Xr hv_vss_daemon 8 ,
+.Xr hv_utils 4
+.Sh HISTORY
+The daemon was introduced in October 2016 and developed by Microsoft Corp.
+.Sh AUTHORS
+.An -nosplit
+.Fx
+support for
+.Nm
+was first added by
+.An Microsoft BSD Integration Services Team Aq Mt bsdic@microsoft.com .
diff --git a/share/man/man4/isp.4 b/share/man/man4/isp.4
index da6b776..f48dc80 100644
--- a/share/man/man4/isp.4
+++ b/share/man/man4/isp.4
@@ -26,7 +26,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd December 9, 2015
+.Dd December 20, 2016
.Dt ISP 4
.Os
.Sh NAME
@@ -39,13 +39,15 @@ kernel configuration file:
.Bd -ragged -offset indent
.Cd "device scbus"
.Cd "device isp"
+.Cd "device ispfw"
.Ed
.Pp
Alternatively, to load the driver as a
-module at boot time, place the following line in
+module at boot time, place the following lines in
.Xr loader.conf 5 :
.Bd -literal -offset indent
isp_load="YES"
+ispfw_load="YES"
.Ed
.Sh DESCRIPTION
This driver provides access to
@@ -62,6 +64,30 @@ Fibre Channel supports initiator and target modes of FCP SCSI profile,
utilizing Class 3 and Class 2 (2200 and later) connections.
Support is available for Public and Private loops, Point-to-Point
and Fabric connections.
+.Pp
+FC-Tape is supported on 4Gb (2400) and newer controllers.
+FC-Tape is highly recommended for connections to tape drives that support
+it.
+It encompasses four elements from the the T-10 FCP-4 specification:
+.Bl -bullet -offset indent
+.It
+Precise Delivery of Commands
+.It
+Confirmed Completion of FCP I/O Operations
+.It
+Retransmission of Unsuccessfully Transmitted IUs
+.It
+Task Retry Identification
+.El
+.Pp
+Together these features allow for link level error recovery with tape
+devices.
+Without it, an initiator cannot, for instance, tell whether a tape write
+command that has timed out resulted in all, part or none of the data going to
+the tape drive.
+FC-Tape is automatically enabled when connecting controller that supports
+it to a target that supports it.
+It may be disabled using configuration and hint options described below.
.Sh FIRMWARE
Firmware loading is supported if the
.Xr ispfw 4
@@ -120,6 +146,13 @@ Target mode support for Fibre Channel adapters may be enabled with the
.Cd options ISP_TARGET_MODE
.Pp
option.
+.Pp
+To disable FC-Tape, use the following configuration option:
+.Pp
+.Cd options ISP_FCTAPE_OFF
+.Pp
+Note that even if the ISP_FCTAPE_OFF option is used, it may be overridden
+by the fctape hint described below.
.Sh BOOT OPTIONS
The following options are switchable by setting values in
.Pa /boot/device.hints .
@@ -169,6 +202,11 @@ A hint value for a driver debug level (see the file
for the values.
.It Va hint.isp.0.vports
A hint to create specified number of additional virtual ports.
+.It Va hint.isp.0.nofctape
+Set this to 1 to disable FC-Tape operation on the given isp instance.
+.It Va hint.isp.0.fctape
+Set this to 1 to enable FC-Tape operation on the given isp instance for
+targets that support it.
.El
.Sh SYSCTL OPTIONS
.Bl -tag -width indent
diff --git a/share/man/man5/src.conf.5 b/share/man/man5/src.conf.5
index 61a7c44..ba04a6e 100644
--- a/share/man/man5/src.conf.5
+++ b/share/man/man5/src.conf.5
@@ -1,7 +1,7 @@
.\" DO NOT EDIT-- this file is automatically generated.
-.\" from FreeBSD: stable/10/tools/build/options/makeman 288396 2015-09-29 21:45:23Z bdrewery
+.\" from FreeBSD: stable/10/tools/build/options/makeman 291805 2015-12-04 18:32:39Z bdrewery
.\" $FreeBSD$
-.Dd October 25, 2015
+.Dd January 6, 2017
.Dt SRC.CONF 5
.Os
.Sh NAME
@@ -872,16 +872,6 @@ Infiniband software stack.
.It Va WITHOUT_OPENSSH
.\" from FreeBSD: stable/10/tools/build/options/WITHOUT_OPENSSH 156932 2006-03-21 07:50:50Z ru
Set to not build OpenSSH.
-.It Va WITH_OPENSSH_NONE_CIPHER
-.\" from FreeBSD: stable/10/tools/build/options/WITH_OPENSSH_NONE_CIPHER 245527 2013-01-17 01:51:04Z bz
-Set to include the "None" cipher support in OpenSSH and its libraries.
-Additional adjustments may need to be done to system configuration
-files, such as
-.Xr sshd_config 5 ,
-to enable this cipher.
-Please see
-.Pa /usr/src/crypto/openssh/README.hpn
-for full details.
.It Va WITHOUT_OPENSSL
.\" from FreeBSD: stable/10/tools/build/options/WITHOUT_OPENSSL 156932 2006-03-21 07:50:50Z ru
Set to not build OpenSSL.
@@ -989,10 +979,12 @@ This includes
.Xr rsh 1 ,
etc.
.It Va WITHOUT_RCS
-.\" from FreeBSD: stable/10/tools/build/options/WITHOUT_RCS 256198 2013-10-09 17:07:20Z gjb
+.\" from FreeBSD: stable/10/tools/build/options/WITHOUT_RCS 292280 2015-12-15 18:01:05Z ngie
Set to not build
.Xr rcs 1
-and related utilities.
+,
+.Xr etcupdate 8
+, and related utilities.
.It Va WITHOUT_RESCUE
.\" from FreeBSD: stable/10/tools/build/options/WITHOUT_RESCUE 156932 2006-03-21 07:50:50Z ru
Set to not build
OpenPOWER on IntegriCloud