summaryrefslogtreecommitdiff
path: root/sys/dev/pci/if_vicreg.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/pci/if_vicreg.h')
-rw-r--r--sys/dev/pci/if_vicreg.h195
1 files changed, 195 insertions, 0 deletions
diff --git a/sys/dev/pci/if_vicreg.h b/sys/dev/pci/if_vicreg.h
new file mode 100644
index 00000000000..809aea43ac1
--- /dev/null
+++ b/sys/dev/pci/if_vicreg.h
@@ -0,0 +1,195 @@
+/* $OpenBSD: if_vicreg.h,v 1.1 2006/02/25 23:49:04 reyk Exp $ */
+
+/*
+ * Copyright (c) 2006 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.
+ */
+
+#ifndef _DEV_IC_VICREG_H
+#define _DEV_IC_VICREG_H
+
+#define VIC_MAGIC 0xbabe864f
+
+/*
+ * Register address offsets
+ */
+
+#define VIC_DATA_ADDR 0x0000 /* Shared data address */
+#define VIC_DATA_LENGTH 0x0004 /* Shared data length */
+#define VIC_Tx_ADDR 0x0008 /* Tx pointer address */
+
+/* Command register */
+#define VIC_CMD 0x000c /* Command register */
+#define VIC_CMD_INTR_ACK 0x00000001 /* Acknowledge interrupt */
+#define VIC_CMD_MCASTFIL 0x00000002 /* Multicast address filter */
+#define VIC_CMD_MCASTFIL_LENGTH 2
+#define VIC_CMD_IFF 0x00000004 /* Interface flags */
+#define VIC_CMD_IFF_PROMISC 0x0001 /* Promiscous enabled */
+#define VIC_CMD_IFF_BROADCAST 0x0002 /* Broadcast enabled */
+#define VIC_CMD_IFF_MULTICAST 0x0004 /* Multicast enabled */
+#define VIC_CMD_RESERVED_8 0x00000008
+#define VIC_CMD_RESERVED_10 0x00000010
+#define VIC_CMD_INTR_DISABLE 0x00000020 /* Enable interrupts */
+#define VIC_CMD_INTR_ENABLE 0x00000040 /* Disable interrupts */
+#define VIC_CMD_RESERVED_80 0x00000080
+#define VIC_CMD_Tx_DONE 0x00000100 /* Tx done register */
+#define VIC_CMD_NUM_Rx_BUF 0x00000200 /* Number of Rx buffers */
+#define VIC_CMD_NUM_Tx_BUF 0x00000400 /* Number of Tx buffers */
+#define VIC_CMD_NUM_PINNED_BUF 0x00000800 /* Number of pinned buffers */
+#define VIC_CMD_HWCAP 0x00001000 /* Capability register */
+#define VIC_CMD_HWCAP_SG 0x0001 /* Scatter-gather transmits */
+#define VIC_CMD_HWCAP_CSUM_IPv4 0x0002 /* Hardware checksum of TCP/UDP */
+#define VIC_CMD_HWCAP_CSUM_ALL 0x0004 /* Hardware checksum support */
+#define VIC_CMD_HWCAP_CSUM \
+ (VIC_CMD_HWCAP_CSUM_IPv4 | VIC_CMD_HWCAP_CSUM_ALL)
+#define VIC_CMD_HWCAP_DMA_HIGH 0x0008 /* High DMA mapping possible */
+#define VIC_CMD_HWCAP_TOE 0x0010 /* TCP offload engine available */
+#define VIC_CMD_HWCAP_TSO 0x0020 /* TCP segmentation offload */
+#define VIC_CMD_HWCAP_TSO_SW 0x0040 /* Software TCP segmentation */
+#define VIC_CMD_HWCAP_VPROM 0x0080 /* Virtual PROM available */
+#define VIC_CMD_HWCAP_VLAN_Tx 0x0100 /* Hardware VLAN MTU Rx */
+#define VIC_CMD_HWCAP_VLAN_Rx 0x0200 /* Hardware VLAN MTU Tx */
+#define VIC_CMD_HWCAP_VLAN_SW 0x0400 /* Software VLAN MTU */
+#define VIC_CMD_HWCAP_VLAN \
+ (VIC_CMD_HWCAP_VLAN_Tx | VIC_CMD_HWCAP_VLAN_Rx | VIC_CMD_HWCAP_VLAN_SW)
+#define VIC_CMD_HWCAP_BITS \
+ "\20\01SG\02CSUM4\03CSUM\04HDMA\05TOE" \
+ "\06TSO\07TSOSW\10VPROM\13VLANTx\14VLANRx\15VLANSW"
+#define VIC_CMD_FEATURE 0x00002000 /* Additional feature register */
+#define VIC_CMD_FEATURE_0_Tx 0x0001
+#define VIC_CMD_FEATURE_TSO 0x0002
+
+#define VIC_LLADDR 0x0010 /* MAC address register */
+#define VIC_VERSION_MINOR 0x0018 /* Minor version register */
+#define VIC_VERSION_MAJOR 0x001c /* Major version register */
+#define VIC_VERSION_MAJOR_M 0xffff0000
+
+/* Status register */
+#define VIC_STATUS 0x0020
+#define VIC_STATUS_CONNECTED 0x00000001
+#define VIC_STATUS_ENABLED 0x00000002
+
+#define VIC_TOE_ADDR 0x0024 /* TCP offload address */
+
+/* Virtual PROM address */
+#define VIC_VPROM 0x0028
+#define VIC_VPROM_LENGTH 6
+
+/*
+ * Shared DMA data structures
+ */
+
+struct vic_sg {
+ u_int32_t sg_addr_low;
+ u_int16_t sg_addr_high;
+ u_int16_t sg_length;
+} __packed;
+
+#define VIC_SG_MAX 6
+#define VIC_SG_ADDR_MACH 0
+#define VIC_SG_ADDR_PHYS 1
+#define VIC_SG_ADDR_VIRT 3
+
+struct vic_sgarray {
+ u_int16_t sa_addr_type;
+ u_int16_t sa_length;
+ struct vic_sg sa_sg[VIC_SG_MAX];
+};
+
+struct vic_rxdesc {
+ u_int64_t rx_physaddr;
+ u_int32_t rx_buflength;
+ u_int32_t rx_length;
+ u_int16_t rx_owner;
+ u_int16_t rx_flags;
+ void *rx_priv;
+} __packed;
+
+#define VIC_RX_FLAGS_CSUMHW_OK 0x0001
+
+struct vic_txdesc {
+ u_int16_t tx_flags;
+ u_int16_t tx_owner;
+ void *tx_priv;
+ u_int32_t tx_tsomss;
+ struct vic_sgarray tx_sa;
+} __packed;
+
+#define VIC_TX_FLAGS_KEEP 0x0001
+#define VIC_TX_FLAGS_TXURN 0x0002
+#define VIC_TX_FLAGS_CSUMHW 0x0004
+#define VIC_TX_FLAGS_TSO 0x0008
+#define VIC_TX_FLAGS_PINNED 0x0010
+#define VIC_TX_FLAGS_QRETRY 0x1000
+
+struct vic_stats {
+ u_int32_t vs_tx_count;
+ u_int32_t vs_tx_packets;
+ u_int32_t vs_tx_0copy;
+ u_int32_t vs_tx_copy;
+ u_int32_t vs_tx_maxpending;
+ u_int32_t vs_tx_stopped;
+ u_int32_t vs_tx_overrun;
+ u_int32_t vs_intr;
+ u_int32_t vs_rx_packets;
+ u_int32_t vs_rx_underrun;
+} __packed;
+
+struct vic_data {
+ u_int32_t vd_magic;
+
+ u_int32_t vd_rx_length;
+ u_int32_t vd_rx_nextidx;
+ u_int32_t vd_rx_length2;
+ u_int32_t vd_rx_nextidx2;
+
+ u_int32_t vd_irq;
+ u_int32_t vd_iff;
+
+ u_int32_t vd_mcastfil[VIC_CMD_MCASTFIL_LENGTH];
+
+ u_int32_t vd_reserved1[1];
+
+ u_int32_t vd_tx_length;
+ u_int32_t vd_tx_curidx;
+ u_int32_t vd_tx_nextidx;
+ u_int32_t vd_tx_stopped;
+ u_int32_t vd_tx_triggerlvl;
+ u_int32_t vd_tx_queued;
+ u_int32_t vd_tx_minlength;
+
+ u_int32_t vd_reserved2[6];
+
+ u_int32_t vd_rx_saved_nextidx;
+ u_int32_t vd_rx_saved_nextidx2;
+ u_int32_t vd_tx_saved_nextidx;
+
+ u_int32_t vd_length;
+ u_int32_t vd_rx_offset;
+ u_int32_t vd_rx_offset2;
+ u_int32_t vd_tx_offset;
+ u_int32_t vd_debug;
+ u_int32_t vd_tx_physaddr;
+ u_int32_t vd_tx_physaddr_length;
+ u_int32_t vd_tx_maxlength;
+
+ struct vic_stats vd_stats;
+} __packed;
+
+#define VIC_OWNER_DRIVER 0
+#define VIC_OWNER_DRIVER_PEND 1
+#define VIC_OWNER_NIC 2
+#define VIC_OWNER_NIC_PEND 3
+
+#endif /* _DEV_IC_VICREG_H */