Add vmx(4), a VMware VMXNET3 ethernet driver ported from OpenBSD
This commit is contained in:
parent
b1397508be
commit
e3c97c2cc2
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=254738
@ -539,6 +539,7 @@ MAN= aac.4 \
|
||||
${_virtio_scsi.4} \
|
||||
vkbd.4 \
|
||||
vlan.4 \
|
||||
${_vmx.4} \
|
||||
vpo.4 \
|
||||
vr.4 \
|
||||
vte.4 \
|
||||
@ -706,6 +707,7 @@ MLINKS+=ural.4 if_ural.4
|
||||
MLINKS+=${_urtw.4} ${_if_urtw.4}
|
||||
MLINKS+=vge.4 if_vge.4
|
||||
MLINKS+=vlan.4 if_vlan.4
|
||||
MLINKS+=${_vmx.4} ${_if_vmx.4}
|
||||
MLINKS+=vpo.4 imm.4
|
||||
MLINKS+=vr.4 if_vr.4
|
||||
MLINKS+=vte.4 if_vte.4
|
||||
@ -758,6 +760,7 @@ _if_nfe.4= if_nfe.4
|
||||
_if_nve.4= if_nve.4
|
||||
_if_nxge.4= if_nxge.4
|
||||
_if_urtw.4= if_urtw.4
|
||||
_if_vmx.4= if_vmx.4
|
||||
_if_vtnet.4= if_vtnet.4
|
||||
_if_vxge.4= if_vxge.4
|
||||
_if_wpi.4= if_wpi.4
|
||||
@ -777,6 +780,7 @@ _virtio.4= virtio.4
|
||||
_virtio_balloon.4=virtio_balloon.4
|
||||
_virtio_blk.4= virtio_blk.4
|
||||
_virtio_scsi.4= virtio_scsi.4
|
||||
_vmx.4= vmx.4
|
||||
_vtnet.4= vtnet.4
|
||||
_vxge.4= vxge.4
|
||||
_padlock.4= padlock.4
|
||||
|
224
share/man/man4/vmx.4
Normal file
224
share/man/man4/vmx.4
Normal file
@ -0,0 +1,224 @@
|
||||
.\"
|
||||
.\" Copyright (c) 2006,2013 Reyk Floeter <reyk@openbsd.org>
|
||||
.\"
|
||||
.\" Permission to use, copy, modify, and distribute this software for any
|
||||
.\" purpose with or without fee is hereby granted, provided that the above
|
||||
.\" copyright notice and this permission notice appear in all copies.
|
||||
.\"
|
||||
.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
.\"
|
||||
.\" $OpenBSD: src/share/man/man4/vmx.4,v 1.1 2013/05/31 20:18:44 reyk Exp $
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd August 4, 2013
|
||||
.Dt VMX 4
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm vmx
|
||||
.Nd VMware VMXNET3 Virtual Interface Controller device
|
||||
.Sh SYNOPSIS
|
||||
To compile this driver into the kernel,
|
||||
place the following line in your
|
||||
kernel configuration file:
|
||||
.Bd -ragged -offset indent
|
||||
.Cd "device vmx"
|
||||
.Ed
|
||||
.Pp
|
||||
Alternatively, to load the driver as a
|
||||
module at boot time, place the following line in
|
||||
.Xr loader.conf 5 :
|
||||
.Bd -literal -offset indent
|
||||
if_vmx_load="YES"
|
||||
.Ed
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm
|
||||
driver provides support for the VMXNET3 virtual NIC available in virtual
|
||||
machines by VMware.
|
||||
It appears as a simple Ethernet device but is actually a virtual network
|
||||
interface to the underlying host operating system.
|
||||
.Pp
|
||||
This driver supports the
|
||||
.Ic VMXNET3
|
||||
driver protocol, as an alternative to the emulated
|
||||
.Xr pcn 4 ,
|
||||
.Xr em 4
|
||||
interfaces also available in the VMware environment.
|
||||
The
|
||||
.Nm
|
||||
driver is optimized for the virtual machine, it can provide advanced
|
||||
capabilities depending on the underlying host operating system and
|
||||
the physical network interface controller of the host.
|
||||
The
|
||||
.Nm
|
||||
driver supports features like multiqueue support, IPv6
|
||||
checksum offloading, MSI/MSI-X support and hardware VLAN tagging in
|
||||
VMware's VLAN Guest Tagging (VGT) mode.
|
||||
.Pp
|
||||
The
|
||||
.Nm
|
||||
driver supports VMXNET3 VMware virtual NICs provided by the virtual
|
||||
machine hardware version 7 or newer, as provided by the following
|
||||
products:
|
||||
.Pp
|
||||
.Bl -bullet -compact -offset indent
|
||||
.It
|
||||
VMware ESX/ESXi 4.0 and newer
|
||||
.It
|
||||
VMware Server 2.0 and newer
|
||||
.It
|
||||
VMware Workstation 6.5 and newer
|
||||
.It
|
||||
VMware Fusion 2.0 and newer
|
||||
.El
|
||||
.Pp
|
||||
For more information on configuring this device, see
|
||||
.Xr ifconfig 8 .
|
||||
.Sh EXAMPLES
|
||||
The following entry must be added to the VMware configuration file
|
||||
to provide the
|
||||
.Nm
|
||||
device:
|
||||
.Bd -literal -offset indent
|
||||
ethernet0.virtualDev = "vmxnet3"
|
||||
.Ed
|
||||
.Sh SEE ALSO
|
||||
.Xr altq 4 ,
|
||||
.Xr arp 4 ,
|
||||
.Xr em 4 ,
|
||||
.Xr netintro 4 ,
|
||||
.Xr ng_ether 4 ,
|
||||
.Xr pcn 4 ,
|
||||
.Xr vlan 4 ,
|
||||
.Xr ifconfig 8
|
||||
.Sh AUTHORS
|
||||
.An -nosplit
|
||||
The
|
||||
.Nm
|
||||
driver was ported from
|
||||
.Ox
|
||||
by
|
||||
.An Bryan Venteicher Aq bryanv@freebsd.org .
|
||||
The
|
||||
.Ox
|
||||
driver was written by
|
||||
.An Tsubai Masanari .
|
||||
.\"
|
||||
.\" Copyright (c) 2006,2013 Reyk Floeter <reyk@openbsd.org>
|
||||
.\"
|
||||
.\" Permission to use, copy, modify, and distribute this software for any
|
||||
.\" purpose with or without fee is hereby granted, provided that the above
|
||||
.\" copyright notice and this permission notice appear in all copies.
|
||||
.\"
|
||||
.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
.\"
|
||||
.\" $OpenBSD: src/share/man/man4/vmx.4,v 1.1 2013/05/31 20:18:44 reyk Exp $
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd August 4, 2013
|
||||
.Dt VMX 4
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm vmx
|
||||
.Nd VMware VMXNET3 Virtual Interface Controller device
|
||||
.Sh SYNOPSIS
|
||||
To compile this driver into the kernel,
|
||||
place the following line in your
|
||||
kernel configuration file:
|
||||
.Bd -ragged -offset indent
|
||||
.Cd "device vmx"
|
||||
.Ed
|
||||
.Pp
|
||||
Alternatively, to load the driver as a
|
||||
module at boot time, place the following line in
|
||||
.Xr loader.conf 5 :
|
||||
.Bd -literal -offset indent
|
||||
if_vmx_load="YES"
|
||||
.Ed
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm
|
||||
driver provides support for the VMXNET3 virtual NIC available in virtual
|
||||
machines by VMware.
|
||||
It appears as a simple Ethernet device but is actually a virtual network
|
||||
interface to the underlying host operating system.
|
||||
.Pp
|
||||
This driver supports the
|
||||
.Ic VMXNET3
|
||||
driver protocol, as an alternative to the emulated
|
||||
.Xr pcn 4 ,
|
||||
.Xr em 4
|
||||
interfaces also available in the VMware environment.
|
||||
The
|
||||
.Nm
|
||||
driver is optimized for the virtual machine, it can provide advanced
|
||||
capabilities depending on the underlying host operating system and
|
||||
the physical network interface controller of the host.
|
||||
The
|
||||
.Nm
|
||||
driver supports features like multiqueue support, IPv6
|
||||
checksum offloading, MSI/MSI-X support and hardware VLAN tagging in
|
||||
VMware's VLAN Guest Tagging (VGT) mode.
|
||||
.Pp
|
||||
The
|
||||
.Nm
|
||||
driver supports VMXNET3 VMware virtual NICs provided by the virtual
|
||||
machine hardware version 7 or newer, as provided by the following
|
||||
products:
|
||||
.Pp
|
||||
.Bl -bullet -compact -offset indent
|
||||
.It
|
||||
VMware ESX/ESXi 4.0 and newer
|
||||
.It
|
||||
VMware Server 2.0 and newer
|
||||
.It
|
||||
VMware Workstation 6.5 and newer
|
||||
.It
|
||||
VMware Fusion 2.0 and newer
|
||||
.El
|
||||
.Pp
|
||||
For more information on configuring this device, see
|
||||
.Xr ifconfig 8 .
|
||||
.Sh EXAMPLES
|
||||
The following entry must be added to the VMware configuration file
|
||||
to provide the
|
||||
.Nm
|
||||
device:
|
||||
.Bd -literal -offset indent
|
||||
ethernet0.virtualDev = "vmxnet3"
|
||||
.Ed
|
||||
.Sh SEE ALSO
|
||||
.Xr altq 4 ,
|
||||
.Xr arp 4 ,
|
||||
.Xr em 4 ,
|
||||
.Xr netintro 4 ,
|
||||
.Xr ng_ether 4 ,
|
||||
.Xr pcn 4 ,
|
||||
.Xr vlan 4 ,
|
||||
.Xr ifconfig 8
|
||||
.Sh AUTHORS
|
||||
.An -nosplit
|
||||
The
|
||||
.Nm
|
||||
driver was ported from
|
||||
.Ox
|
||||
by
|
||||
.An Bryan Venteicher Aq bryanv@freebsd.org .
|
||||
The
|
||||
.Ox
|
||||
driver was written by
|
||||
.An Tsubai Masanari .
|
@ -304,6 +304,7 @@ dev/tpm/tpm_acpi.c optional tpm acpi
|
||||
dev/tpm/tpm_isa.c optional tpm isa
|
||||
dev/uart/uart_cpu_x86.c optional uart
|
||||
dev/viawd/viawd.c optional viawd
|
||||
dev/vmware/vmxnet3/if_vmx.c optional vmx
|
||||
dev/wbwd/wbwd.c optional wbwd
|
||||
dev/wpi/if_wpi.c optional wpi
|
||||
dev/isci/isci.c optional isci
|
||||
|
@ -267,6 +267,7 @@ dev/tpm/tpm_acpi.c optional tpm acpi
|
||||
dev/tpm/tpm_isa.c optional tpm isa
|
||||
dev/uart/uart_cpu_x86.c optional uart
|
||||
dev/viawd/viawd.c optional viawd
|
||||
dev/vmware/vmxnet3/if_vmx.c optional vmx
|
||||
dev/acpica/acpi_if.m standard
|
||||
dev/acpi_support/acpi_wmi_if.m standard
|
||||
dev/wbwd/wbwd.c optional wbwd
|
||||
|
3305
sys/dev/vmware/vmxnet3/if_vmx.c
Normal file
3305
sys/dev/vmware/vmxnet3/if_vmx.c
Normal file
File diff suppressed because it is too large
Load Diff
316
sys/dev/vmware/vmxnet3/if_vmxreg.h
Normal file
316
sys/dev/vmware/vmxnet3/if_vmxreg.h
Normal file
@ -0,0 +1,316 @@
|
||||
/*-
|
||||
* Copyright (c) 2013 Tsubai Masanari
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*
|
||||
* $OpenBSD: src/sys/dev/pci/if_vmxreg.h,v 1.2 2013/06/12 01:07:33 uebayasi Exp $
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _IF_VMXREG_H
|
||||
#define _IF_VMXREG_H
|
||||
|
||||
struct UPT1_TxStats {
|
||||
uint64_t TSO_packets;
|
||||
uint64_t TSO_bytes;
|
||||
uint64_t ucast_packets;
|
||||
uint64_t ucast_bytes;
|
||||
uint64_t mcast_packets;
|
||||
uint64_t mcast_bytes;
|
||||
uint64_t bcast_packets;
|
||||
uint64_t bcast_bytes;
|
||||
uint64_t error;
|
||||
uint64_t discard;
|
||||
} __packed;
|
||||
|
||||
struct UPT1_RxStats {
|
||||
uint64_t LRO_packets;
|
||||
uint64_t LRO_bytes;
|
||||
uint64_t ucast_packets;
|
||||
uint64_t ucast_bytes;
|
||||
uint64_t mcast_packets;
|
||||
uint64_t mcast_bytes;
|
||||
uint64_t bcast_packets;
|
||||
uint64_t bcast_bytes;
|
||||
uint64_t nobuffer;
|
||||
uint64_t error;
|
||||
} __packed;
|
||||
|
||||
/* Interrupt moderation levels */
|
||||
#define UPT1_IMOD_NONE 0 /* No moderation */
|
||||
#define UPT1_IMOD_HIGHEST 7 /* Least interrupts */
|
||||
#define UPT1_IMOD_ADAPTIVE 8 /* Adaptive interrupt moderation */
|
||||
|
||||
/* Hardware features */
|
||||
#define UPT1_F_CSUM 0x0001 /* Rx checksum verification */
|
||||
#define UPT1_F_RSS 0x0002 /* Receive side scaling */
|
||||
#define UPT1_F_VLAN 0x0004 /* VLAN tag stripping */
|
||||
#define UPT1_F_LRO 0x0008 /* Large receive offloading */
|
||||
|
||||
#define VMXNET3_BAR0_IMASK(irq) (0x000 + (irq) * 8) /* Interrupt mask */
|
||||
#define VMXNET3_BAR0_TXH(q) (0x600 + (q) * 8) /* Tx head */
|
||||
#define VMXNET3_BAR0_RXH1(q) (0x800 + (q) * 8) /* Ring1 Rx head */
|
||||
#define VMXNET3_BAR0_RXH2(q) (0xA00 + (q) * 8) /* Ring2 Rx head */
|
||||
#define VMXNET3_BAR1_VRRS 0x000 /* VMXNET3 revision report selection */
|
||||
#define VMXNET3_BAR1_UVRS 0x008 /* UPT version report selection */
|
||||
#define VMXNET3_BAR1_DSL 0x010 /* Driver shared address low */
|
||||
#define VMXNET3_BAR1_DSH 0x018 /* Driver shared address high */
|
||||
#define VMXNET3_BAR1_CMD 0x020 /* Command */
|
||||
#define VMXNET3_BAR1_MACL 0x028 /* MAC address low */
|
||||
#define VMXNET3_BAR1_MACH 0x030 /* MAC address high */
|
||||
#define VMXNET3_BAR1_INTR 0x038 /* Interrupt status */
|
||||
#define VMXNET3_BAR1_EVENT 0x040 /* Event status */
|
||||
|
||||
#define VMXNET3_CMD_ENABLE 0xCAFE0000 /* Enable VMXNET3 */
|
||||
#define VMXNET3_CMD_DISABLE 0xCAFE0001 /* Disable VMXNET3 */
|
||||
#define VMXNET3_CMD_RESET 0xCAFE0002 /* Reset device */
|
||||
#define VMXNET3_CMD_SET_RXMODE 0xCAFE0003 /* Set interface flags */
|
||||
#define VMXNET3_CMD_SET_FILTER 0xCAFE0004 /* Set address filter */
|
||||
#define VMXNET3_CMD_VLAN_FILTER 0xCAFE0005 /* Set VLAN filter */
|
||||
#define VMXNET3_CMD_GET_STATUS 0xF00D0000 /* Get queue errors */
|
||||
#define VMXNET3_CMD_GET_STATS 0xF00D0001 /* Get queue statistics */
|
||||
#define VMXNET3_CMD_GET_LINK 0xF00D0002 /* Get link status */
|
||||
#define VMXNET3_CMD_GET_MACL 0xF00D0003 /* Get MAC address low */
|
||||
#define VMXNET3_CMD_GET_MACH 0xF00D0004 /* Get MAC address high */
|
||||
#define VMXNET3_CMD_GET_INTRCFG 0xF00D0008 /* Get interrupt config */
|
||||
|
||||
#define VMXNET3_DMADESC_ALIGN 128
|
||||
#define VMXNET3_INIT_GEN 1
|
||||
|
||||
struct vmxnet3_txdesc {
|
||||
uint64_t addr;
|
||||
|
||||
uint32_t len:14;
|
||||
uint32_t gen:1; /* Generation */
|
||||
uint32_t pad1:1;
|
||||
uint32_t dtype:1; /* Descriptor type */
|
||||
uint32_t pad2:1;
|
||||
uint32_t offload_pos:14; /* Offloading position */
|
||||
|
||||
uint32_t hlen:10; /* Header len */
|
||||
uint32_t offload_mode:2; /* Offloading mode */
|
||||
uint32_t eop:1; /* End of packet */
|
||||
uint32_t compreq:1; /* Completion request */
|
||||
uint32_t pad3:1;
|
||||
uint32_t vtag_mode:1; /* VLAN tag insertion mode */
|
||||
uint32_t vtag:16; /* VLAN tag */
|
||||
} __packed;
|
||||
|
||||
/* Offloading modes */
|
||||
#define VMXNET3_OM_NONE 0
|
||||
#define VMXNET3_OM_CSUM 2
|
||||
#define VMXNET3_OM_TSO 3
|
||||
|
||||
struct vmxnet3_txcompdesc {
|
||||
uint32_t eop_idx:12; /* EOP index in Tx ring */
|
||||
uint32_t pad1:20;
|
||||
|
||||
uint32_t pad2:32;
|
||||
uint32_t pad3:32;
|
||||
|
||||
uint32_t rsvd:24;
|
||||
uint32_t type:7;
|
||||
uint32_t gen:1;
|
||||
} __packed;
|
||||
|
||||
struct vmxnet3_rxdesc {
|
||||
uint64_t addr;
|
||||
|
||||
uint32_t len:14;
|
||||
uint32_t btype:1; /* Buffer type */
|
||||
uint32_t dtype:1; /* Descriptor type */
|
||||
uint32_t rsvd:15;
|
||||
uint32_t gen:1;
|
||||
|
||||
uint32_t pad1:32;
|
||||
} __packed;
|
||||
|
||||
/* Buffer types */
|
||||
#define VMXNET3_BTYPE_HEAD 0 /* Head only */
|
||||
#define VMXNET3_BTYPE_BODY 1 /* Body only */
|
||||
|
||||
struct vmxnet3_rxcompdesc {
|
||||
uint32_t rxd_idx:12; /* Rx descriptor index */
|
||||
uint32_t pad1:2;
|
||||
uint32_t eop:1; /* End of packet */
|
||||
uint32_t sop:1; /* Start of packet */
|
||||
uint32_t qid:10;
|
||||
uint32_t rss_type:4;
|
||||
uint32_t no_csum:1; /* No checksum calculated */
|
||||
uint32_t pad2:1;
|
||||
|
||||
uint32_t rss_hash:32; /* RSS hash value */
|
||||
|
||||
uint32_t len:14;
|
||||
uint32_t error:1;
|
||||
uint32_t vlan:1; /* 802.1Q VLAN frame */
|
||||
uint32_t vtag:16; /* VLAN tag */
|
||||
|
||||
uint32_t csum:16;
|
||||
uint32_t csum_ok:1; /* TCP/UDP checksum ok */
|
||||
uint32_t udp:1;
|
||||
uint32_t tcp:1;
|
||||
uint32_t ipcsum_ok:1; /* IP checksum OK */
|
||||
uint32_t ipv6:1;
|
||||
uint32_t ipv4:1;
|
||||
uint32_t fragment:1; /* IP fragment */
|
||||
uint32_t fcs:1; /* Frame CRC correct */
|
||||
uint32_t type:7;
|
||||
uint32_t gen:1;
|
||||
} __packed;
|
||||
|
||||
#define VMXNET3_REV1_MAGIC 0XBABEFEE1
|
||||
|
||||
#define VMXNET3_GOS_UNKNOWN 0x00
|
||||
#define VMXNET3_GOS_LINUX 0x04
|
||||
#define VMXNET3_GOS_WINDOWS 0x08
|
||||
#define VMXNET3_GOS_SOLARIS 0x0C
|
||||
#define VMXNET3_GOS_FREEBSD 0x10
|
||||
#define VMXNET3_GOS_PXE 0x14
|
||||
|
||||
#define VMXNET3_GOS_32BIT 0x01
|
||||
#define VMXNET3_GOS_64BIT 0x02
|
||||
|
||||
#define VMXNET3_MAX_TX_QUEUES 8
|
||||
#define VMXNET3_MAX_RX_QUEUES 16
|
||||
#define VMXNET3_MAX_INTRS \
|
||||
(VMXNET3_MAX_TX_QUEUES + VMXNET3_MAX_RX_QUEUES + 1)
|
||||
|
||||
#define VMXNET3_ICTRL_DISABLE_ALL 0x01
|
||||
|
||||
#define VMXNET3_RXMODE_UCAST 0x01
|
||||
#define VMXNET3_RXMODE_MCAST 0x02
|
||||
#define VMXNET3_RXMODE_BCAST 0x04
|
||||
#define VMXNET3_RXMODE_ALLMULTI 0x08
|
||||
#define VMXNET3_RXMODE_PROMISC 0x10
|
||||
|
||||
#define VMXNET3_EVENT_RQERROR 0x01
|
||||
#define VMXNET3_EVENT_TQERROR 0x02
|
||||
#define VMXNET3_EVENT_LINK 0x04
|
||||
#define VMXNET3_EVENT_DIC 0x08
|
||||
#define VMXNET3_EVENT_DEBUG 0x10
|
||||
|
||||
#define VMXNET3_MIN_MTU 60
|
||||
#define VMXNET3_MAX_MTU 9000
|
||||
|
||||
/* Interrupt mask mode. */
|
||||
#define VMXNET3_IMM_AUTO 0x00
|
||||
#define VMXNET3_IMM_ACTIVE 0x01
|
||||
#define VMXNET3_IMM_LAZY 0x02
|
||||
|
||||
/* Interrupt type. */
|
||||
#define VMXNET3_IT_AUTO 0x00
|
||||
#define VMXNET3_IT_LEGACY 0x01
|
||||
#define VMXNET3_IT_MSI 0x02
|
||||
#define VMXNET3_IT_MSIX 0x03
|
||||
|
||||
struct vmxnet3_driver_shared {
|
||||
uint32_t magic;
|
||||
uint32_t pad1;
|
||||
|
||||
/* Misc. control */
|
||||
uint32_t version; /* Driver version */
|
||||
uint32_t guest; /* Guest OS */
|
||||
uint32_t vmxnet3_revision; /* Supported VMXNET3 revision */
|
||||
uint32_t upt_version; /* Supported UPT version */
|
||||
uint64_t upt_features;
|
||||
uint64_t driver_data;
|
||||
uint64_t queue_shared;
|
||||
uint32_t driver_data_len;
|
||||
uint32_t queue_shared_len;
|
||||
uint32_t mtu;
|
||||
uint16_t nrxsg_max;
|
||||
uint8_t ntxqueue;
|
||||
uint8_t nrxqueue;
|
||||
uint32_t reserved1[4];
|
||||
|
||||
/* Interrupt control */
|
||||
uint8_t automask;
|
||||
uint8_t nintr;
|
||||
uint8_t evintr;
|
||||
uint8_t modlevel[VMXNET3_MAX_INTRS];
|
||||
uint32_t ictrl;
|
||||
uint32_t reserved2[2];
|
||||
|
||||
/* Receive filter parameters */
|
||||
uint32_t rxmode;
|
||||
uint16_t mcast_tablelen;
|
||||
uint16_t pad2;
|
||||
uint64_t mcast_table;
|
||||
uint32_t vlan_filter[4096 / 32];
|
||||
|
||||
struct {
|
||||
uint32_t version;
|
||||
uint32_t len;
|
||||
uint64_t paddr;
|
||||
} rss, pm, plugin;
|
||||
|
||||
uint32_t event;
|
||||
uint32_t reserved3[5];
|
||||
} __packed;
|
||||
|
||||
struct vmxnet3_txq_shared {
|
||||
/* Control */
|
||||
uint32_t npending;
|
||||
uint32_t intr_threshold;
|
||||
uint64_t reserved1;
|
||||
|
||||
/* Config */
|
||||
uint64_t cmd_ring;
|
||||
uint64_t data_ring;
|
||||
uint64_t comp_ring;
|
||||
uint64_t driver_data;
|
||||
uint64_t reserved2;
|
||||
uint32_t cmd_ring_len;
|
||||
uint32_t data_ring_len;
|
||||
uint32_t comp_ring_len;
|
||||
uint32_t driver_data_len;
|
||||
uint8_t intr_idx;
|
||||
uint8_t pad1[7];
|
||||
|
||||
/* Queue status */
|
||||
uint8_t stopped;
|
||||
uint8_t pad2[3];
|
||||
uint32_t error;
|
||||
|
||||
struct UPT1_TxStats stats;
|
||||
|
||||
uint8_t pad3[88];
|
||||
} __packed;
|
||||
|
||||
struct vmxnet3_rxq_shared {
|
||||
uint8_t update_rxhead;
|
||||
uint8_t pad1[7];
|
||||
uint64_t reserved1;
|
||||
|
||||
uint64_t cmd_ring[2];
|
||||
uint64_t comp_ring;
|
||||
uint64_t driver_data;
|
||||
uint64_t reserved2;
|
||||
uint32_t cmd_ring_len[2];
|
||||
uint32_t comp_ring_len;
|
||||
uint32_t driver_data_len;
|
||||
uint8_t intr_idx;
|
||||
uint8_t pad2[7];
|
||||
|
||||
uint8_t stopped;
|
||||
uint8_t pad3[3];
|
||||
uint32_t error;
|
||||
|
||||
struct UPT1_RxStats stats;
|
||||
|
||||
uint8_t pad4[88];
|
||||
} __packed;
|
||||
|
||||
#endif /* _IF_VMXREG_H */
|
319
sys/dev/vmware/vmxnet3/if_vmxvar.h
Normal file
319
sys/dev/vmware/vmxnet3/if_vmxvar.h
Normal file
@ -0,0 +1,319 @@
|
||||
/*-
|
||||
* Copyright (c) 2013 Tsubai Masanari
|
||||
* Copyright (c) 2013 Bryan Venteicher <bryanv@FreeBSD.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _IF_VMXVAR_H
|
||||
#define _IF_VMXVAR_H
|
||||
|
||||
struct vmxnet3_softc;
|
||||
|
||||
struct vmxnet3_dma_alloc {
|
||||
bus_addr_t dma_paddr;
|
||||
caddr_t dma_vaddr;
|
||||
bus_dma_tag_t dma_tag;
|
||||
bus_dmamap_t dma_map;
|
||||
bus_size_t dma_size;
|
||||
};
|
||||
|
||||
/*
|
||||
* The number of Rx/Tx queues this driver supports.
|
||||
*/
|
||||
#define VMXNET3_RX_QUEUES 1
|
||||
#define VMXNET3_TX_QUEUES 1
|
||||
|
||||
/*
|
||||
* The number of Rx rings in each Rx queue.
|
||||
*/
|
||||
#define VMXNET3_RXRINGS_PERQ 2
|
||||
|
||||
/*
|
||||
* The maximum number of descriptors in each Rx/Tx ring.
|
||||
*/
|
||||
#define VMXNET3_MAX_TX_NDESC 512
|
||||
#define VMXNET3_MAX_RX_NDESC 256
|
||||
#define VMXNET3_MAX_TX_NCOMPDESC VMXNET3_MAX_TX_NDESC
|
||||
#define VMXNET3_MAX_RX_NCOMPDESC \
|
||||
(VMXNET3_MAX_RX_NDESC * VMXNET3_RXRINGS_PERQ)
|
||||
|
||||
/*
|
||||
* The maximum number of Rx segments we accept. When LRO is enabled,
|
||||
* this allows us to receive the maximum sized frame with one MCLBYTES
|
||||
* cluster followed by 16 MJUMPAGESIZE clusters.
|
||||
*/
|
||||
#define VMXNET3_MAX_RX_SEGS 17
|
||||
|
||||
struct vmxnet3_txbuf {
|
||||
bus_dmamap_t vtxb_dmamap;
|
||||
struct mbuf *vtxb_m;
|
||||
};
|
||||
|
||||
struct vmxnet3_txring {
|
||||
struct vmxnet3_txbuf *vxtxr_txbuf;
|
||||
u_int vxtxr_head;
|
||||
u_int vxtxr_next;
|
||||
u_int vxtxr_ndesc;
|
||||
int vxtxr_gen;
|
||||
bus_dma_tag_t vxtxr_txtag;
|
||||
struct vmxnet3_txdesc *vxtxr_txd;
|
||||
struct vmxnet3_dma_alloc vxtxr_dma;
|
||||
};
|
||||
|
||||
static inline int
|
||||
VMXNET3_TXRING_AVAIL(struct vmxnet3_txring *txr)
|
||||
{
|
||||
int avail = txr->vxtxr_next - txr->vxtxr_head - 1;
|
||||
return (avail < 0 ? txr->vxtxr_ndesc + avail : avail);
|
||||
}
|
||||
|
||||
struct vmxnet3_rxbuf {
|
||||
bus_dmamap_t vrxb_dmamap;
|
||||
struct mbuf *vrxb_m;
|
||||
};
|
||||
|
||||
struct vmxnet3_rxring {
|
||||
struct vmxnet3_rxbuf *vxrxr_rxbuf;
|
||||
struct vmxnet3_rxdesc *vxrxr_rxd;
|
||||
u_int vxrxr_fill;
|
||||
u_int vxrxr_ndesc;
|
||||
int vxrxr_gen;
|
||||
int vxrxr_rid;
|
||||
bus_dma_tag_t vxrxr_rxtag;
|
||||
struct vmxnet3_dma_alloc vxrxr_dma;
|
||||
bus_dmamap_t vxrxr_spare_dmap;
|
||||
};
|
||||
|
||||
static inline void
|
||||
vmxnet3_rxr_increment_fill(struct vmxnet3_rxring *rxr)
|
||||
{
|
||||
|
||||
if (++rxr->vxrxr_fill == rxr->vxrxr_ndesc) {
|
||||
rxr->vxrxr_fill = 0;
|
||||
rxr->vxrxr_gen ^= 1;
|
||||
}
|
||||
}
|
||||
|
||||
struct vmxnet3_comp_ring {
|
||||
union {
|
||||
struct vmxnet3_txcompdesc *txcd;
|
||||
struct vmxnet3_rxcompdesc *rxcd;
|
||||
} vxcr_u;
|
||||
u_int vxcr_next;
|
||||
u_int vxcr_ndesc;
|
||||
int vxcr_gen;
|
||||
struct vmxnet3_dma_alloc vxcr_dma;
|
||||
};
|
||||
|
||||
struct vmxnet3_txq_stats {
|
||||
uint64_t vtxrs_full;
|
||||
uint64_t vtxrs_offload_failed;
|
||||
};
|
||||
|
||||
struct vmxnet3_txqueue {
|
||||
struct mtx vxtxq_mtx;
|
||||
struct vmxnet3_softc *vxtxq_sc;
|
||||
int vxtxq_id;
|
||||
int vxtxq_intr_idx;
|
||||
int vxtxq_watchdog;
|
||||
struct vmxnet3_txring vxtxq_cmd_ring;
|
||||
struct vmxnet3_comp_ring vxtxq_comp_ring;
|
||||
struct vmxnet3_txq_stats vxtxq_stats;
|
||||
struct vmxnet3_txq_shared *vxtxq_ts;
|
||||
struct sysctl_oid_list *vxtxq_sysctl;
|
||||
char vxtxq_name[16];
|
||||
};
|
||||
|
||||
#define VMXNET3_TXQ_LOCK(_txq) mtx_lock(&(_txq)->vxtxq_mtx)
|
||||
#define VMXNET3_TXQ_TRYLOCK(_txq) mtx_trylock(&(_txq)->vxtxq_mtx)
|
||||
#define VMXNET3_TXQ_UNLOCK(_txq) mtx_unlock(&(_txq)->vxtxq_mtx)
|
||||
#define VMXNET3_TXQ_LOCK_ASSERT(_txq) \
|
||||
mtx_assert(&(_txq)->vxtxq_mtx, MA_OWNED)
|
||||
#define VMXNET3_TXQ_LOCK_ASSERT_NOTOWNED(_txq) \
|
||||
mtx_assert(&(_txq)->vxtxq_mtx, MA_NOTOWNED)
|
||||
|
||||
struct vmxnet3_rxq_stats {
|
||||
|
||||
};
|
||||
|
||||
struct vmxnet3_rxqueue {
|
||||
struct mtx vxrxq_mtx;
|
||||
struct vmxnet3_softc *vxrxq_sc;
|
||||
int vxrxq_id;
|
||||
int vxrxq_intr_idx;
|
||||
struct vmxnet3_rxring vxrxq_cmd_ring[VMXNET3_RXRINGS_PERQ];
|
||||
struct vmxnet3_comp_ring vxrxq_comp_ring;
|
||||
struct vmxnet3_rxq_stats vxrxq_stats;
|
||||
struct vmxnet3_rxq_shared *vxrxq_rs;
|
||||
struct sysctl_oid_list *vxrxq_sysctl;
|
||||
char vxrxq_name[16];
|
||||
};
|
||||
|
||||
#define VMXNET3_RXQ_LOCK(_rxq) mtx_lock(&(_rxq)->vxrxq_mtx)
|
||||
#define VMXNET3_RXQ_UNLOCK(_rxq) mtx_unlock(&(_rxq)->vxrxq_mtx)
|
||||
#define VMXNET3_RXQ_LOCK_ASSERT(_rxq) \
|
||||
mtx_assert(&(_rxq)->vxrxq_mtx, MA_OWNED)
|
||||
#define VMXNET3_RXQ_LOCK_ASSERT_NOTOWNED(_rxq) \
|
||||
mtx_assert(&(_rxq)->vxrxq_mtx, MA_NOTOWNED)
|
||||
|
||||
struct vmxnet3_statistics {
|
||||
uint32_t vmst_collapsed;
|
||||
uint32_t vmst_mgetcl_failed;
|
||||
uint32_t vmst_mbuf_load_failed;
|
||||
|
||||
};
|
||||
|
||||
struct vmxnet3_interrupt {
|
||||
struct resource *vmxi_irq;
|
||||
int vmxi_rid;
|
||||
void *vmxi_handler;
|
||||
};
|
||||
|
||||
struct vmxnet3_softc {
|
||||
device_t vmx_dev;
|
||||
struct ifnet *vmx_ifp;
|
||||
struct vmxnet3_driver_shared *vmx_ds;
|
||||
uint32_t vmx_flags;
|
||||
#define VMXNET3_FLAG_NO_MSIX 0x0001
|
||||
|
||||
struct vmxnet3_rxqueue *vmx_rxq;
|
||||
struct vmxnet3_txqueue *vmx_txq;
|
||||
|
||||
struct resource *vmx_res0;
|
||||
bus_space_tag_t vmx_iot0;
|
||||
bus_space_handle_t vmx_ioh0;
|
||||
struct resource *vmx_res1;
|
||||
bus_space_tag_t vmx_iot1;
|
||||
bus_space_handle_t vmx_ioh1;
|
||||
struct resource *vmx_msix_res;
|
||||
|
||||
int vmx_link_active;
|
||||
int vmx_link_speed;
|
||||
int vmx_if_flags;
|
||||
int vmx_ntxqueues;
|
||||
int vmx_nrxqueues;
|
||||
int vmx_ntxdescs;
|
||||
int vmx_nrxdescs;
|
||||
int vmx_max_rxsegs;
|
||||
int vmx_rx_max_chain;
|
||||
|
||||
struct vmxnet3_statistics vmx_stats;
|
||||
|
||||
int vmx_intr_type;
|
||||
int vmx_intr_mask_mode;
|
||||
int vmx_event_intr_idx;
|
||||
int vmx_nintrs;
|
||||
struct vmxnet3_interrupt vmx_intrs[VMXNET3_MAX_INTRS];
|
||||
|
||||
struct mtx vmx_mtx;
|
||||
uint8_t *vmx_mcast;
|
||||
void *vmx_qs;
|
||||
struct callout vmx_tick;
|
||||
struct vmxnet3_dma_alloc vmx_ds_dma;
|
||||
struct vmxnet3_dma_alloc vmx_qs_dma;
|
||||
struct vmxnet3_dma_alloc vmx_mcast_dma;
|
||||
struct ifmedia vmx_media;
|
||||
eventhandler_tag vmx_vlan_attach;
|
||||
eventhandler_tag vmx_vlan_detach;
|
||||
uint8_t vmx_vlan_filter[4096/32];
|
||||
uint8_t vmx_lladdr[ETHER_ADDR_LEN];
|
||||
};
|
||||
|
||||
#define VMXNET3_CORE_LOCK_INIT(_sc, _name) \
|
||||
mtx_init(&(_sc)->vmx_mtx, _name, "VMXNET3 Lock", MTX_DEF)
|
||||
#define VMXNET3_CORE_LOCK_DESTROY(_sc) mtx_destroy(&(_sc)->vmx_mtx)
|
||||
#define VMXNET3_CORE_LOCK(_sc) mtx_lock(&(_sc)->vmx_mtx)
|
||||
#define VMXNET3_CORE_UNLOCK(_sc) mtx_unlock(&(_sc)->vmx_mtx)
|
||||
#define VMXNET3_CORE_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->vmx_mtx, MA_OWNED)
|
||||
#define VMXNET3_CORE_LOCK_ASSERT_NOTOWNED(_sc) \
|
||||
mtx_assert(&(_sc)->vmx_mtx, MA_NOTOWNED)
|
||||
|
||||
/*
|
||||
* Our driver version we report to the hypervisor; we just keep
|
||||
* this value constant.
|
||||
*/
|
||||
#define VMXNET3_DRIVER_VERSION 0x00010000
|
||||
|
||||
/*
|
||||
* Convert the FreeBSD version in to something the hypervisor
|
||||
* understands. This is apparently what VMware's driver reports
|
||||
* so mimic it even though it probably is not required.
|
||||
*/
|
||||
#define VMXNET3_GUEST_OS_VERSION \
|
||||
(((__FreeBSD_version / 100000) << 14) | \
|
||||
(((__FreeBSD_version / 1000) % 100) << 6 ) | \
|
||||
(((__FreeBSD_version / 100) % 10) << 30) | \
|
||||
((__FreeBSD_version % 100) << 22))
|
||||
|
||||
/*
|
||||
* Max descriptors per Tx packet. We must limit the size of the
|
||||
* any TSO packets based on the number of segments.
|
||||
*/
|
||||
#define VMXNET3_TX_MAXSEGS 32
|
||||
#define VMXNET3_TSO_MAXSIZE 65550
|
||||
|
||||
/*
|
||||
* Maximum support Tx segments size. The length field in the
|
||||
* Tx descriptor is 14 bits.
|
||||
*/
|
||||
#define VMXNET3_TX_MAXSEGSIZE (1 << 14)
|
||||
|
||||
/*
|
||||
* Predetermined size of the multicast MACs filter table. If the
|
||||
* number of multicast addresses exceeds this size, then the
|
||||
* ALL_MULTI mode is use instead.
|
||||
*/
|
||||
#define VMXNET3_MULTICAST_MAX 32
|
||||
|
||||
/*
|
||||
* Our Tx watchdog timeout.
|
||||
*/
|
||||
#define VMXNET3_WATCHDOG_TIMEOUT 5
|
||||
|
||||
/*
|
||||
* IP protocols that we can perform Tx checksum offloading of.
|
||||
*/
|
||||
#define VMXNET3_CSUM_OFFLOAD (CSUM_TCP | CSUM_UDP)
|
||||
#define VMXNET3_CSUM_OFFLOAD_IPV6 (CSUM_TCP_IPV6 | CSUM_UDP_IPV6)
|
||||
|
||||
#define VMXNET3_CSUM_ALL_OFFLOAD \
|
||||
(VMXNET3_CSUM_OFFLOAD | VMXNET3_CSUM_OFFLOAD_IPV6 | CSUM_TSO)
|
||||
|
||||
/*
|
||||
* Compat macros to keep this driver compiling on old releases.
|
||||
*/
|
||||
|
||||
#if !defined(SYSCTL_ADD_UQUAD)
|
||||
#define SYSCTL_ADD_UQUAD SYSCTL_ADD_QUAD
|
||||
#endif
|
||||
|
||||
#if !defined(IFCAP_TXCSUM_IPV6)
|
||||
#define IFCAP_TXCSUM_IPV6 0
|
||||
#endif
|
||||
|
||||
#if !defined(IFCAP_RXCSUM_IPV6)
|
||||
#define IFCAP_RXCSUM_IPV6 0
|
||||
#endif
|
||||
|
||||
#if !defined(CSUM_TCP_IPV6)
|
||||
#define CSUM_TCP_IPV6 0
|
||||
#endif
|
||||
|
||||
#if !defined(CSUM_UDP_IPV6)
|
||||
#define CSUM_UDP_IPV6 0
|
||||
#endif
|
||||
|
||||
#endif /* _IF_VMXVAR_H */
|
@ -342,6 +342,7 @@ SUBDIR= \
|
||||
${_viawd} \
|
||||
vkbd \
|
||||
${_vmm} \
|
||||
${_vmware} \
|
||||
${_vpo} \
|
||||
vr \
|
||||
vte \
|
||||
@ -368,6 +369,7 @@ SUBDIR= \
|
||||
|
||||
.if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64"
|
||||
_filemon= filemon
|
||||
_vmware= vmware
|
||||
.endif
|
||||
|
||||
.if ${MACHINE_CPUARCH} != "powerpc" && ${MACHINE_CPUARCH} != "arm" && \
|
||||
|
28
sys/modules/vmware/Makefile
Normal file
28
sys/modules/vmware/Makefile
Normal file
@ -0,0 +1,28 @@
|
||||
#
|
||||
# $FreeBSD$
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
SUBDIR= vmxnet3
|
||||
|
||||
.include <bsd.subdir.mk>
|
44
sys/modules/vmware/vmxnet3/Makefile
Normal file
44
sys/modules/vmware/vmxnet3/Makefile
Normal file
@ -0,0 +1,44 @@
|
||||
#
|
||||
# $FreeBSD$
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
.PATH: ${.CURDIR}/../../../dev/vmware/vmxnet3
|
||||
|
||||
KMOD= if_vmx
|
||||
SRCS= if_vmx.c
|
||||
SRCS+= bus_if.h device_if.h pci_if.h opt_inet.h opt_inet6.h
|
||||
|
||||
.if !defined(KERNBUILDDIR)
|
||||
.if ${MK_INET_SUPPORT} != "no"
|
||||
opt_inet.h:
|
||||
@echo "#define INET 1" > ${.TARGET}
|
||||
.endif
|
||||
|
||||
.if ${MK_INET6_SUPPORT} != "no"
|
||||
opt_inet6.h:
|
||||
@echo "#define INET6 1" > ${.TARGET}
|
||||
.endif
|
||||
.endif
|
||||
|
||||
.include <bsd.kmod.mk>
|
Loading…
Reference in New Issue
Block a user