summaryrefslogtreecommitdiffstats
path: root/sys/dev/lnc/if_lncvar.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/lnc/if_lncvar.h')
-rw-r--r--sys/dev/lnc/if_lncvar.h265
1 files changed, 265 insertions, 0 deletions
diff --git a/sys/dev/lnc/if_lncvar.h b/sys/dev/lnc/if_lncvar.h
new file mode 100644
index 0000000..8c76738
--- /dev/null
+++ b/sys/dev/lnc/if_lncvar.h
@@ -0,0 +1,265 @@
+/*-
+ * Copyright (c) 1994-1998
+ * Paul Richards. 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,
+ * verbatim and that no modifications are made prior to this
+ * point in the file.
+ * 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.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Paul Richards.
+ * 4. The name Paul Richards may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY PAUL RICHARDS ``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 PAUL RICHARDS 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$
+ */
+
+/*
+ * Initialize multicast address hashing registers to accept
+ * all multicasts (only used when in promiscuous mode)
+ */
+#define MULTI_INIT_ADDR 0xff
+
+#define NORMAL 0
+
+#define NRDRE 3
+#define NTDRE 3
+#define RECVBUFSIZE 1518 /* Packet size rounded to dword boundary */
+#define TRANSBUFSIZE 1518
+#define MBUF_CACHE_LIMIT 0
+
+#define MEM_SLEW 8
+
+/* LNC Flags */
+#define LNC_INITIALISED 1
+#define LNC_ALLMULTI 2
+
+/* BICC port addresses */
+#define BICC_IOSIZE 16
+#define BICC_RDP 0x0c /* Register Data Port */
+#define BICC_RAP 0x0e /* Register Address Port */
+
+/* NE2100 port addresses */
+#define NE2100_IOSIZE 24
+#define PCNET_RDP 0x10 /* Register Data Port */
+#define PCNET_RAP 0x12 /* Register Address Port */
+#define PCNET_RESET 0x14
+#define PCNET_BDP 0x16
+#define PCNET_VSW 0x18
+
+/* DEPCA port addresses */
+#define DEPCA_IOSIZE 16
+#define DEPCA_CTRL 0x00 /* NIC Control and status register */
+#define DEPCA_RDP 0x04 /* Register Data Port */
+#define DEPCA_RAP 0x06 /* Register Address Port */
+#define DEPCA_ADP 0x0c
+
+/* DEPCA specific defines */
+#define DEPCA_ADDR_ROM_SIZE 32
+
+/* C-NET(98)S port addresses */
+/* Notice, we can ignore fragmantation by using isa_alloc_resourcev(). */
+#define CNET98S_IOSIZE 32
+#define CNET98S_RDP 0x10 /* Register Data Port */
+#define CNET98S_RAP 0x12 /* Register Address Port */
+#define CNET98S_RESET 0x14
+#define CNET98S_IDP 0x16
+#define CNET98S_EEPROM 0x1e
+
+/* Chip types */
+#define LANCE 1 /* Am7990 */
+#define C_LANCE 2 /* Am79C90 */
+#define PCnet_ISA 3 /* Am79C960 */
+#define PCnet_ISAplus 4 /* Am79C961 */
+#define PCnet_ISA_II 5 /* Am79C961A */
+#define PCnet_32 6 /* Am79C965 */
+#define PCnet_PCI 7 /* Am79C970 */
+#define PCnet_PCI_II 8 /* Am79C970A */
+#define PCnet_FAST 9 /* Am79C971 */
+#define PCnet_FASTplus 10 /* Am79C972 */
+#define PCnet_Home 11 /* Am79C978 */
+
+
+/* CSR88-89: Chip ID masks */
+#define AMD_MASK 0x003
+#define PART_MASK 0xffff
+#define Am79C960 0x0003
+#define Am79C961 0x2260
+#define Am79C961A 0x2261
+#define Am79C965 0x2430
+#define Am79C970 0x0242
+#define Am79C970A 0x2621
+#define Am79C971 0x2623
+#define Am79C972 0x2624
+#define Am79C973 0x2625
+#define Am79C978 0x2626
+
+/* Board types */
+#define UNKNOWN 0
+#define BICC 1
+#define NE2100 2
+#define DEPCA 3
+#define CNET98S 4 /* PC-98 */
+
+/* mem_mode values */
+#define DMA_FIXED 1
+#define DMA_MBUF 2
+#define SHMEM 4
+
+#define MEM_MODES \
+ "\20\3SHMEM\2DMA_MBUF\1DMA_FIXED"
+
+#define CSR0_FLAGS \
+ "\20\20ERR\17BABL\16CERR\15MISS\14MERR\13RINT\12TINT\11IDON\
+ \10INTR\07INEA\06RXON\05TXON\04TDMD\03STOP\02STRT\01INIT"
+
+#define INIT_MODE \
+ "\20\20PROM\07INTL\06DRTY\05COLL\04DTCR\03LOOP\02DTX\01DRX"
+
+#define RECV_MD1 \
+ "\20\10OWN\7ERR\6FRAM\5OFLO\4CRC\3BUFF\2STP\1ENP"
+
+#define TRANS_MD1 \
+ "\20\10OWN\7ERR\6RES\5MORE\4ONE\3DEF\2STP\1ENP"
+
+#define TRANS_MD3 \
+ "\20\6BUFF\5UFLO\4RES\3LCOL\2LCAR\1RTRY"
+
+#ifdef LNC_KEEP_STATS
+#define LNCSTATS_STRUCT \
+ struct lnc_stats { \
+ int idon; \
+ int rint; \
+ int tint; \
+ int cerr; \
+ int babl; \
+ int miss; \
+ int merr; \
+ int rxoff; \
+ int txoff; \
+ int terr; \
+ int lcol; \
+ int lcar; \
+ int tbuff; \
+ int def; \
+ int more; \
+ int one; \
+ int uflo; \
+ int rtry; \
+ int rerr; \
+ int fram; \
+ int oflo; \
+ int crc; \
+ int rbuff; \
+ int drop_packet; \
+ int trans_ring_full; \
+ } lnc_stats;
+#define LNCSTATS(X) ++(sc->lnc_stats.X);
+#else
+#define LNCSTATS_STRUCT
+#define LNCSTATS(X)
+#endif
+
+struct nic_info {
+ int ident; /* Type of card */
+ int ic; /* Type of ic, Am7990, Am79C960 etc. */
+ int mem_mode;
+ int iobase;
+ int mode; /* Mode setting at initialization */
+};
+
+typedef struct lnc_softc {
+ struct resource *irqres;
+ int irqrid;
+ struct resource *drqres;
+ int drqrid;
+ struct resource *portres;
+ int portrid;
+ bus_space_tag_t lnc_btag;
+ bus_space_handle_t lnc_bhandle;
+ void *intrhand;
+ bus_dma_tag_t dmat;
+ bus_dmamap_t dmamap;
+ struct arpcom arpcom; /* see ../../net/if_arp.h */
+ struct nic_info nic; /* NIC specific info */
+ int nrdre;
+ struct host_ring_entry *recv_ring; /* start of alloc'd mem */
+ int recv_next;
+ int ntdre;
+ struct host_ring_entry *trans_ring;
+ int trans_next;
+ struct init_block *init_block; /* Initialisation block */
+ int pending_transmits; /* No. of transmit descriptors in
+ use */
+ int next_to_send;
+ struct mbuf *mbufs;
+ int mbuf_count;
+ int flags;
+ int rap;
+ int rdp;
+ int bdp;
+ #ifdef DEBUG
+ int lnc_debug;
+ #endif
+ LNCSTATS_STRUCT
+} lnc_softc_t;
+
+struct host_ring_entry {
+ struct mds *md;
+ union {
+ struct mbuf *mbuf;
+ char *data;
+ }buff;
+};
+
+#define NDESC(len2) (1 << len2)
+
+#define INC_MD_PTR(ptr, no_entries) \
+ if (++ptr >= NDESC(no_entries)) \
+ ptr = 0;
+
+#define DEC_MD_PTR(ptr, no_entries) \
+ if (--ptr < 0) \
+ ptr = NDESC(no_entries) - 1;
+
+#define RECV_NEXT (sc->recv_ring->base + sc->recv_next)
+#define TRANS_NEXT (sc->trans_ring->base + sc->trans_next)
+
+#define lnc_inb(port) \
+ bus_space_read_1(sc->lnc_btag, sc->lnc_bhandle, (port))
+#define lnc_inw(port) \
+ bus_space_read_2(sc->lnc_btag, sc->lnc_bhandle, (port))
+#define lnc_outw(port, val) \
+ bus_space_write_2(sc->lnc_btag, sc->lnc_bhandle, (port), (val))
+
+/* Functional declarations */
+extern int lance_probe(struct lnc_softc *);
+extern void lnc_release_resources(device_t);
+extern int lnc_attach_common(device_t);
+extern void lnc_stop(struct lnc_softc *);
+
+extern void write_csr(struct lnc_softc *, u_short, u_short);
+extern u_short read_csr(struct lnc_softc *, u_short);
+
+/* Variable declarations */
+extern driver_intr_t lncintr;
+extern devclass_t lnc_devclass;
OpenPOWER on IntegriCloud