xref: /netbsd-src/sys/dev/ic/hd64570var.h (revision dc306354b0b29af51801a7632f1e95265a68cd81)
1 /*	$NetBSD: hd64570var.h,v 1.2 1998/10/28 16:26:01 kleink Exp $	*/
2 
3 /*
4  * Copyright (c) 1998 Vixie Enterprises
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  * 3. Neither the name of Vixie Enterprises nor the names
17  *    of its contributors may be used to endorse or promote products derived
18  *    from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY VIXIE ENTERPRISES AND
21  * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
22  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
23  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24  * DISCLAIMED.  IN NO EVENT SHALL VIXIE ENTERPRISES OR
25  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
28  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
29  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
30  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
31  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32  * SUCH DAMAGE.
33  *
34  * This software has been written for Vixie Enterprises by Michael Graff
35  * <explorer@flame.org>.  To learn more about Vixie Enterprises, see
36  * ``http://www.vix.com''.
37  */
38 
39 #ifndef _DEV_IC_HD64570VAR_H_
40 #define _DEV_IC_HD64570VAR_H_
41 
42 #include "bpfilter.h"
43 
44 #define SCA_USE_FASTQ		/* use a split queue, one for fast traffic */
45 
46 struct sca_softc;
47 typedef struct sca_port sca_port_t;
48 typedef struct sca_desc sca_desc_t;
49 
50 /*
51  * device DMA descriptor
52  */
53 struct sca_desc {
54 	u_int16_t	cp;	/* chain pointer */
55 	u_int16_t	bp;	/* buffer pointer (low bits) */
56 	u_int8_t	bpb;	/* buffer pointer (high bits) */
57 	u_int8_t	unused0;
58 	u_int16_t	len;	/* total length */
59 	u_int8_t	stat;	/* status */
60 	u_int8_t	unused1;
61 };
62 #define SCA_DESC_EOT            0x01
63 #define SCA_DESC_CRC            0x04
64 #define SCA_DESC_OVRN           0x08
65 #define SCA_DESC_RESD           0x10
66 #define SCA_DESC_ABORT          0x20
67 #define SCA_DESC_SHRTFRM        0x40
68 #define SCA_DESC_EOM            0x80
69 #define SCA_DESC_ERRORS         0x7C
70 
71 /*
72  * softc structure for each port
73  */
74 struct sca_port {
75 	u_int msci_off;		/* offset for msci address for this port */
76 	u_int dmac_off;		/* offset of dmac address for this port */
77 
78 	u_int sp_port;
79 
80 	/*
81 	 * CISCO keepalive stuff
82 	 */
83 	u_int32_t	cka_lasttx;
84 	u_int32_t	cka_lastrx;
85 
86 	/*
87 	 * start of each important bit of information for transmit and
88 	 * receive buffers.
89 	 */
90 	u_int32_t txdesc_p;
91 	sca_desc_t *txdesc;
92 	u_int32_t txbuf_p;
93 	u_int8_t *txbuf;
94 	volatile u_int txcur;		/* last descriptor in chain */
95 	volatile u_int txinuse;		/* descriptors in use */
96 	volatile u_int txstart;		/* start descriptor */
97 
98 	u_int32_t rxdesc_p;
99 	sca_desc_t *rxdesc;
100 	u_int32_t rxbuf_p;
101 	u_int8_t *rxbuf;
102 	u_int rxstart;			/* index of first descriptor */
103 	u_int rxend;			/* index of last descriptor */
104 
105 	struct ifnet sp_if;		/* the network information */
106 	struct ifqueue linkq;		/* link-level packets are high prio */
107 #ifdef SCA_USE_FASTQ
108 	struct ifqueue fastq;		/* interactive packets */
109 #endif
110 
111 #if NBPFILTER > 0
112 	caddr_t	sp_bpf;			/* hook for BPF */
113 #endif
114 
115 	struct sca_softc *sca;		/* pointer to parent */
116 };
117 
118 /*
119  * softc structure for the chip itself
120  */
121 struct sca_softc {
122 	struct device *parent;		/* our parent device, or NULL */
123 	int sc_numports;		/* number of ports present */
124 
125 	/*
126 	 * a callback into the parent, since the SCA chip has no control
127 	 * over DTR, we have to make a callback into the parent, which
128 	 * might know about DTR.
129 	 *
130 	 * If the function pointer is NULL, no callback is specified.
131 	 */
132 	void (*dtr_callback) __P((void *aux, int port, int state));
133 	void *dtr_aux;
134 
135 	sca_port_t sc_ports[2];
136 	bus_space_handle_t sc_ioh;
137 	bus_space_tag_t sc_iot;
138 
139 	bus_dma_tag_t sc_dmat;		/* bus dma tag */
140 	bus_dmamap_t sc_dmam;		/* bus dma map */
141 	bus_dma_segment_t sc_seg;	/* bus dma segment allocated */
142 	caddr_t sc_dma_addr;		/* kva address of segment */
143 	u_long sc_allocsize;		/* size of region */
144 };
145 
146 
147 int	sca_init(struct sca_softc *, u_int);
148 void	sca_port_attach(struct sca_softc *, u_int);
149 int	sca_hardintr(struct sca_softc *);
150 void	sca_shutdown(struct sca_softc *);
151 
152 #endif /* _DEV_IC_HD64570VAR_H_ */
153