Deleted Added
full compact
pdqvar.h (76166) pdqvar.h (93383)
1/* $NetBSD: pdqvar.h,v 1.27 2000/05/03 19:17:54 thorpej Exp $ */
2
1/*-
2 * Copyright (c) 1995, 1996 Matt Thomas <matt@3am-software.com>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 7 unchanged lines hidden (view full) ---

16 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
17 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
18 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
20 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
22 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23 *
3/*-
4 * Copyright (c) 1995, 1996 Matt Thomas <matt@3am-software.com>
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 * 1. Redistributions of source code must retain the above copyright

--- 7 unchanged lines hidden (view full) ---

18 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 *
24 * $FreeBSD: head/sys/dev/pdq/pdqvar.h 76166 2001-05-01 08:13:21Z markm $
26 * Id: pdqvar.h,v 1.21 1997/03/21 21:16:04 thomas Exp
27 * $FreeBSD: head/sys/dev/pdq/pdqvar.h 93383 2002-03-29 11:22:22Z mdodd $
25 *
26 */
27
28/*
29 * DEC PDQ FDDI Controller; PDQ O/S dependent definitions
30 *
31 * Written by Matt Thomas
32 *

--- 24 unchanged lines hidden (view full) ---

57};
58
59#if defined(PDQTEST)
60#include <pdq_os_test.h>
61#elif defined(__FreeBSD__) || defined(__bsdi__) || defined(__NetBSD__)
62
63#include <sys/param.h>
64#include <sys/systm.h>
28 *
29 */
30
31/*
32 * DEC PDQ FDDI Controller; PDQ O/S dependent definitions
33 *
34 * Written by Matt Thomas
35 *

--- 24 unchanged lines hidden (view full) ---

60};
61
62#if defined(PDQTEST)
63#include <pdq_os_test.h>
64#elif defined(__FreeBSD__) || defined(__bsdi__) || defined(__NetBSD__)
65
66#include <sys/param.h>
67#include <sys/systm.h>
65#include <sys/lock.h>
66#ifndef M_MCAST
67#include <sys/mbuf.h>
68#endif /* M_CAST */
69#include <sys/malloc.h>
68#ifndef M_MCAST
69#include <sys/mbuf.h>
70#endif /* M_CAST */
71#include <sys/malloc.h>
70#include <sys/mutex.h>
71
72#include <vm/vm.h>
73#include <vm/vm_kern.h>
74
75#define PDQ_USE_MBUFS
76#if defined(__NetBSD__)
77#define PDQ_OS_PREFIX "%s: "
78#define PDQ_OS_PREFIX_ARGS pdq->pdq_os_name
79#else
80#define PDQ_OS_PREFIX "%s%d: "
81#define PDQ_OS_PREFIX_ARGS pdq->pdq_os_name, pdq->pdq_unit
82#endif
83#if defined(__FreeBSD__) && BSD >= 199506
84#define PDQ_OS_PAGESIZE PAGE_SIZE
85#else
86#define PDQ_OS_PAGESIZE NBPG
87#endif
88#define PDQ_OS_USEC_DELAY(n) DELAY(n)
89#define PDQ_OS_MEMZERO(p, n) bzero((caddr_t)(p), (n))
72#include <vm/vm.h>
73#include <vm/vm_kern.h>
74
75#define PDQ_USE_MBUFS
76#if defined(__NetBSD__)
77#define PDQ_OS_PREFIX "%s: "
78#define PDQ_OS_PREFIX_ARGS pdq->pdq_os_name
79#else
80#define PDQ_OS_PREFIX "%s%d: "
81#define PDQ_OS_PREFIX_ARGS pdq->pdq_os_name, pdq->pdq_unit
82#endif
83#if defined(__FreeBSD__) && BSD >= 199506
84#define PDQ_OS_PAGESIZE PAGE_SIZE
85#else
86#define PDQ_OS_PAGESIZE NBPG
87#endif
88#define PDQ_OS_USEC_DELAY(n) DELAY(n)
89#define PDQ_OS_MEMZERO(p, n) bzero((caddr_t)(p), (n))
90#if defined(__NetBSD__) && defined(__alpha__)
91#define PDQ_OS_VA_TO_PA(pdq, p) (vtophys((vm_offset_t)p) | (pdq->pdq_type == PDQ_DEFTA ? 0 : 0x40000000))
92#elif defined(__FreeBSD__) && defined(__alpha__)
93#define PDQ_OS_VA_TO_PA(pdq, p) (vtophys((vm_offset_t)p) | (pdq->pdq_type == PDQ_DEFTA ? 0 : alpha_XXX_dmamap_or))
94#else
95#define PDQ_OS_VA_TO_PA(pdq, p) vtophys(p)
90#if defined(__NetBSD__) && !defined(PDQ_NO_BUS_DMA)
91#define PDQ_BUS_DMA
96#endif
92#endif
93#if !defined(PDQ_BUS_DMA)
94#define PDQ_OS_VA_TO_BUSPA(pdq, p) vtophys(p)
95#endif
97#define PDQ_OS_MEMALLOC(n) malloc(n, M_DEVBUF, M_NOWAIT)
98#define PDQ_OS_MEMFREE(p, n) free((void *) p, M_DEVBUF)
99#ifdef __FreeBSD__
100#define PDQ_OS_MEMALLOC_CONTIG(n) vm_page_alloc_contig(n, 0, 0xffffffff, PAGE_SIZE)
96#define PDQ_OS_MEMALLOC(n) malloc(n, M_DEVBUF, M_NOWAIT)
97#define PDQ_OS_MEMFREE(p, n) free((void *) p, M_DEVBUF)
98#ifdef __FreeBSD__
99#define PDQ_OS_MEMALLOC_CONTIG(n) vm_page_alloc_contig(n, 0, 0xffffffff, PAGE_SIZE)
101#define PDQ_OS_MEMFREE_CONTIG(p, n) kmem_free(kernel_map, (vm_offset_t) p, n)
100#define PDQ_OS_MEMFREE_CONTIG(p, n) kmem_free(kernel_map, (vaddr_t) p, n)
102#else
101#else
103#define PDQ_OS_MEMALLOC_CONTIG(n) kmem_alloc(kernel_map, round_page(n))
104#define PDQ_OS_MEMFREE_CONTIG(p, n) kmem_free(kernel_map, (vm_offset_t) p, n)
102#if !defined(PDQ_BUS_DMA)
103#define PDQ_OS_MEMALLOC_CONTIG(n) uvm_km_alloc(kernel_map, round_page(n))
104#define PDQ_OS_MEMFREE_CONTIG(p, n) uvm_km_free(kernel_map, (vaddr_t) p, n)
105#endif
105#endif /* __FreeBSD__ */
106
107#if defined(__FreeBSD__)
108#include <vm/pmap.h>
109#include <vm/vm_extern.h>
106#endif /* __FreeBSD__ */
107
108#if defined(__FreeBSD__)
109#include <vm/pmap.h>
110#include <vm/vm_extern.h>
110#include <machine/bus.h>
111#include <machine/cpufunc.h>
112#include <machine/clock.h>
111#include <machine/cpufunc.h>
112#include <machine/clock.h>
113typedef void ifnet_ret_t;
114typedef u_long ioctl_cmd_t;
113#define ifnet_ret_t void
114typedef int ioctl_cmd_t;
115typedef enum { PDQ_BUS_EISA, PDQ_BUS_PCI } pdq_bus_t;
116typedef u_int16_t pdq_bus_ioport_t;
117typedef volatile pdq_uint32_t *pdq_bus_memaddr_t;
118typedef pdq_bus_memaddr_t pdq_bus_memoffset_t;
119#if BSD >= 199506 /* __FreeBSD__ */
120#define PDQ_BPF_MTAP(sc, m) bpf_mtap(&(sc)->sc_if, m)
121#define PDQ_BPFATTACH(sc, t, s) bpfattach(&(sc)->sc_if, t, s)
122#endif
123
115typedef enum { PDQ_BUS_EISA, PDQ_BUS_PCI } pdq_bus_t;
116typedef u_int16_t pdq_bus_ioport_t;
117typedef volatile pdq_uint32_t *pdq_bus_memaddr_t;
118typedef pdq_bus_memaddr_t pdq_bus_memoffset_t;
119#if BSD >= 199506 /* __FreeBSD__ */
120#define PDQ_BPF_MTAP(sc, m) bpf_mtap(&(sc)->sc_if, m)
121#define PDQ_BPFATTACH(sc, t, s) bpfattach(&(sc)->sc_if, t, s)
122#endif
123
124#define pdq_os_update_status(a, b) ((void) 0)
124
125#elif defined(__bsdi__)
125
126#elif defined(__bsdi__)
127#if !defined(PDQ_HWSUPPORT) && (_BSDI_VERSION >= 199701)
128#include <net/if_media.h>
129#endif
126#include <machine/inline.h>
130#include <machine/inline.h>
127typedef int ifnet_ret_t;
131#define ifnet_ret_t int
128typedef int ioctl_cmd_t;
129typedef enum { PDQ_BUS_EISA, PDQ_BUS_PCI } pdq_bus_t;
130typedef u_int16_t pdq_bus_ioport_t;
131typedef volatile pdq_uint32_t *pdq_bus_memaddr_t;
132typedef pdq_bus_memaddr_t pdq_bus_memoffset_t;
133
134
135#elif defined(__NetBSD__)
132typedef int ioctl_cmd_t;
133typedef enum { PDQ_BUS_EISA, PDQ_BUS_PCI } pdq_bus_t;
134typedef u_int16_t pdq_bus_ioport_t;
135typedef volatile pdq_uint32_t *pdq_bus_memaddr_t;
136typedef pdq_bus_memaddr_t pdq_bus_memoffset_t;
137
138
139#elif defined(__NetBSD__)
140#if !defined(PDQ_HWSUPPORT)
141#include <net/if_media.h>
142#endif
136#include <machine/bus.h>
137#include <machine/intr.h>
143#include <machine/bus.h>
144#include <machine/intr.h>
145#define PDQ_OS_HDR_OFFSET (PDQ_RX_FC_OFFSET-3)
138#define PDQ_OS_PTR_FMT "%p"
146#define PDQ_OS_PTR_FMT "%p"
139typedef void ifnet_ret_t;
147#define PDQ_OS_CSR_FMT "0x%lx"
148#define ifnet_ret_t void
140typedef u_long ioctl_cmd_t;
149typedef u_long ioctl_cmd_t;
141typedef bus_chipset_tag_t pdq_bus_t;
142typedef bus_io_handle_t pdq_bus_ioport_t;
143#if defined(PDQ_IOMAPPED)
144typedef bus_io_handle_t pdq_bus_memaddr_t;
145#else
146typedef bus_mem_handle_t pdq_bus_memaddr_t;
147#endif
148typedef pdq_uint32_t pdq_bus_memoffset_t;
150typedef bus_space_tag_t pdq_bus_t;
151typedef bus_space_handle_t pdq_bus_ioport_t;
152typedef bus_space_handle_t pdq_bus_memaddr_t;
153typedef bus_addr_t pdq_bus_memoffset_t;
154#define PDQ_OS_SPL_RAISE() splnet()
149#define PDQ_OS_IOMEM
155#define PDQ_OS_IOMEM
150#define PDQ_OS_IORD_32(t, base, offset) bus_io_read_4 (t, base, offset)
151#define PDQ_OS_IOWR_32(t, base, offset, data) bus_io_write_4 (t, base, offset, data)
152#define PDQ_OS_IORD_8(t, base, offset) bus_io_read_1 (t, base, offset)
153#define PDQ_OS_IOWR_8(t, base, offset, data) bus_io_write_1 (t, base, offset, data)
154#define PDQ_OS_MEMRD_32(t, base, offset) bus_mem_read_4(t, base, offset)
155#define PDQ_OS_MEMWR_32(t, base, offset, data) bus_mem_write_4(t, base, offset, data)
156#define PDQ_OS_IORD_32(t, base, offset) bus_space_read_4 (t, base, offset)
157#define PDQ_OS_IOWR_32(t, base, offset, data) bus_space_write_4 (t, base, offset, data)
158#define PDQ_OS_IORD_8(t, base, offset) bus_space_read_1 (t, base, offset)
159#define PDQ_OS_IOWR_8(t, base, offset, data) bus_space_write_1 (t, base, offset, data)
156#define PDQ_CSR_OFFSET(base, offset) (0 + (offset)*sizeof(pdq_uint32_t))
157
160#define PDQ_CSR_OFFSET(base, offset) (0 + (offset)*sizeof(pdq_uint32_t))
161
158#if defined(PDQ_IOMAPPED)
162#ifdef PDQ_BUS_DMA
163#define PDQ_OS_UNSOL_EVENT_PRESYNC(pdq, event) \
164 pdq_os_unsolicited_event_sync((pdq)->pdq_os_ctx, \
165 (u_int8_t *) (event) - \
166 (u_int8_t *) (pdq)->pdq_unsolicited_info.ui_events, \
167 sizeof(*event), BUS_DMASYNC_PREREAD)
168#define PDQ_OS_UNSOL_EVENT_POSTSYNC(pdq, event) \
169 pdq_os_unsolicited_event_sync((pdq)->pdq_os_ctx, \
170 (u_int8_t *) (event) - \
171 (u_int8_t *) (pdq)->pdq_unsolicited_info.ui_events, \
172 sizeof(*event), BUS_DMASYNC_POSTREAD)
173#define PDQ_OS_DESCBLOCK_SYNC(pdq, what, length, why) \
174 pdq_os_descriptor_block_sync((pdq)->pdq_os_ctx, \
175 (u_int8_t *) (what) - (u_int8_t *) (pdq)->pdq_dbp, \
176 (length), (why))
177#define PDQ_OS_CONSUMER_PRESYNC(pdq) \
178 pdq_os_consumer_block_sync((pdq)->pdq_os_ctx, \
179 BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE)
180#define PDQ_OS_CONSUMER_POSTSYNC(pdq) \
181 pdq_os_consumer_block_sync((pdq)->pdq_os_ctx, \
182 BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE)
183#define PDQ_OS_DESC_PRESYNC(pdq, d, s) \
184 PDQ_OS_DESCBLOCK_SYNC((pdq), (d), (s), BUS_DMASYNC_PREWRITE)
185#define PDQ_OS_DESC_POSTSYNC(pdq, d, s) \
186 PDQ_OS_DESCBLOCK_SYNC((pdq), (d), (s), BUS_DMASYNC_POSTWRITE)
187#define PDQ_OS_CMDRQST_PRESYNC(pdq, s) \
188 PDQ_OS_DESCBLOCK_SYNC((pdq), \
189 (pdq)->pdq_command_info.ci_request_bufstart, \
190 (s), BUS_DMASYNC_PREWRITE)
191#define PDQ_OS_CMDRSP_PRESYNC(pdq, s) \
192 PDQ_OS_DESCBLOCK_SYNC((pdq), \
193 (pdq)->pdq_command_info.ci_response_bufstart, \
194 (s), BUS_DMASYNC_PREREAD)
195#define PDQ_OS_CMDRQST_POSTSYNC(pdq, s) \
196 PDQ_OS_DESCBLOCK_SYNC((pdq), \
197 (pdq)->pdq_command_info.ci_request_bufstart, \
198 (s), BUS_DMASYNC_POSTWRITE)
199#define PDQ_OS_CMDRSP_POSTSYNC(pdq, s) \
200 PDQ_OS_DESCBLOCK_SYNC((pdq), \
201 (pdq)->pdq_command_info.ci_response_bufstart, \
202 (s), BUS_DMASYNC_POSTREAD)
203#define PDQ_OS_RXPDU_PRESYNC(pdq, b, o, l) \
204 pdq_os_databuf_sync((pdq)->pdq_os_ctx, (b), (o), (l), \
205 BUS_DMASYNC_PREREAD)
206#define PDQ_OS_RXPDU_POSTSYNC(pdq, b, o, l) \
207 pdq_os_databuf_sync((pdq)->pdq_os_ctx, (b), (o), (l), \
208 BUS_DMASYNC_POSTREAD)
209#define PDQ_OS_DATABUF_ALLOC(pdq, b) ((void)((b) = pdq_os_databuf_alloc((pdq)->pdq_os_ctx)))
210#define PDQ_OS_DATABUF_FREE(pdq, b) pdq_os_databuf_free((pdq)->pdq_os_ctx, (b))
211#define PDQ_OS_DATABUF_BUSPA(pdq, b) (M_GETCTX((b), bus_dmamap_t)->dm_segs[0].ds_addr + 0)
212struct _pdq_os_ctx_t;
213extern void pdq_os_descriptor_block_sync(struct _pdq_os_ctx_t *osctx, size_t offset,
214 size_t length, int ops);
215extern void pdq_os_consumer_block_sync(struct _pdq_os_ctx_t *osctx, int ops);
216extern void pdq_os_unsolicited_event_sync(struct _pdq_os_ctx_t *osctx, size_t offset,
217 size_t length, int ops);
218extern struct mbuf *pdq_os_databuf_alloc(struct _pdq_os_ctx_t *osctx);
219extern void pdq_os_databuf_sync(struct _pdq_os_ctx_t *osctx, struct mbuf *b,
220 size_t offset, size_t length, int ops);
221extern void pdq_os_databuf_free(struct _pdq_os_ctx_t *osctx, struct mbuf *m);
222#define M_HASTXDMAMAP M_LINK1
223#define M_HASRXDMAMAP M_LINK2
224#endif
225
159#define PDQ_CSR_WRITE(csr, name, data) PDQ_OS_IOWR_32((csr)->csr_bus, (csr)->csr_base, (csr)->name, data)
160#define PDQ_CSR_READ(csr, name) PDQ_OS_IORD_32((csr)->csr_bus, (csr)->csr_base, (csr)->name)
226#define PDQ_CSR_WRITE(csr, name, data) PDQ_OS_IOWR_32((csr)->csr_bus, (csr)->csr_base, (csr)->name, data)
227#define PDQ_CSR_READ(csr, name) PDQ_OS_IORD_32((csr)->csr_bus, (csr)->csr_base, (csr)->name)
161#else
162#define PDQ_CSR_WRITE(csr, name, data) PDQ_OS_MEMWR_32((csr)->csr_bus, (csr)->csr_base, (csr)->name, data)
163#define PDQ_CSR_READ(csr, name) PDQ_OS_MEMRD_32((csr)->csr_bus, (csr)->csr_base, (csr)->name)
164#endif
165
228
229#define PDQ_OS_IFP_TO_SOFTC(ifp) ((pdq_softc_t *) (ifp)->if_softc)
230#define PDQ_ARP_IFINIT(sc, ifa) arp_ifinit(&(sc)->sc_if, (ifa))
231#define PDQ_FDDICOM(sc) (&(sc)->sc_ec)
232#define PDQ_LANADDR(sc) LLADDR((sc)->sc_if.if_sadl)
233#define PDQ_LANADDR_SIZE(sc) ((sc)->sc_if.if_sadl->sdl_alen)
166#endif
167
168#if !defined(PDQ_BPF_MTAP)
169#define PDQ_BPF_MTAP(sc, m) bpf_mtap((sc)->sc_bpf, m)
170#endif
171
172#if !defined(PDQ_BPFATTACH)
173#define PDQ_BPFATTACH(sc, t, s) bpfattach(&(sc)->sc_bpf, &(sc)->sc_if, t, s)
174#endif
175
234#endif
235
236#if !defined(PDQ_BPF_MTAP)
237#define PDQ_BPF_MTAP(sc, m) bpf_mtap((sc)->sc_bpf, m)
238#endif
239
240#if !defined(PDQ_BPFATTACH)
241#define PDQ_BPFATTACH(sc, t, s) bpfattach(&(sc)->sc_bpf, &(sc)->sc_if, t, s)
242#endif
243
244#if !defined(PDQ_OS_SPL_RAISE)
245#define PDQ_OS_SPL_RAISE() splimp()
246#endif
247
248#if !defined(PDQ_OS_SPL_LOWER)
249#define PDQ_OS_SPL_LOWER(s) splx(s)
250#endif
251
252#if !defined(PDQ_FDDICOM)
253#define PDQ_FDDICOM(sc) (&(sc)->sc_ac)
254#endif
255
256#if !defined(PDQ_ARP_IFINIT)
257#define PDQ_ARP_IFINIT(sc, ifa) arp_ifinit(&(sc)->sc_ac, (ifa))
258#endif
259
176#if !defined(PDQ_OS_PTR_FMT)
177#define PDQ_OS_PTR_FMT "0x%x"
178#endif
179
260#if !defined(PDQ_OS_PTR_FMT)
261#define PDQ_OS_PTR_FMT "0x%x"
262#endif
263
264#if !defined(PDQ_OS_CSR_FMT)
265#define PDQ_OS_CSR_FMT "0x%x"
266#endif
267
268#if !defined(PDQ_LANADDR)
269#define PDQ_LANADDR(sc) ((sc)->sc_ac.ac_enaddr)
270#define PDQ_LANADDR_SIZE(sc) (sizeof((sc)->sc_ac.ac_enaddr))
271#endif
272
180#if !defined(PDQ_OS_IOMEM)
181#define PDQ_OS_IORD_32(t, base, offset) inl((base) + (offset))
182#define PDQ_OS_IOWR_32(t, base, offset, data) outl((base) + (offset), data)
183#define PDQ_OS_IORD_8(t, base, offset) inb((base) + (offset))
184#define PDQ_OS_IOWR_8(t, base, offset, data) outb((base) + (offset), data)
273#if !defined(PDQ_OS_IOMEM)
274#define PDQ_OS_IORD_32(t, base, offset) inl((base) + (offset))
275#define PDQ_OS_IOWR_32(t, base, offset, data) outl((base) + (offset), data)
276#define PDQ_OS_IORD_8(t, base, offset) inb((base) + (offset))
277#define PDQ_OS_IOWR_8(t, base, offset, data) outb((base) + (offset), data)
185#define PDQ_OS_MEMRD_32(t, base, offset) readl((base) + (offset))
186#define PDQ_OS_MEMWR_32(t, base, offset, data) writel((base) + (offset), data)
278#define PDQ_OS_MEMRD_32(t, base, offset) (0 + *((base) + (offset)))
279#define PDQ_OS_MEMWR_32(t, base, offset, data) do *((base) + (offset)) = (data); while (0)
187#endif
188#ifndef PDQ_CSR_OFFSET
189#define PDQ_CSR_OFFSET(base, offset) (0 + (base) + (offset))
190#endif
191
192#ifndef PDQ_CSR_WRITE
193#define PDQ_CSR_WRITE(csr, name, data) PDQ_OS_MEMWR_32((csr)->csr_bus, (csr)->name, 0, data)
194#define PDQ_CSR_READ(csr, name) PDQ_OS_MEMRD_32((csr)->csr_bus, (csr)->name, 0)
195#endif
196
280#endif
281#ifndef PDQ_CSR_OFFSET
282#define PDQ_CSR_OFFSET(base, offset) (0 + (base) + (offset))
283#endif
284
285#ifndef PDQ_CSR_WRITE
286#define PDQ_CSR_WRITE(csr, name, data) PDQ_OS_MEMWR_32((csr)->csr_bus, (csr)->name, 0, data)
287#define PDQ_CSR_READ(csr, name) PDQ_OS_MEMRD_32((csr)->csr_bus, (csr)->name, 0)
288#endif
289
290#ifndef PDQ_OS_IFP_TO_SOFTC
291#define PDQ_OS_IFP_TO_SOFTC(ifp) ((pdq_softc_t *) ((caddr_t) ifp - offsetof(pdq_softc_t, sc_ac.ac_if)))
292#endif
293
294
197#if !defined(PDQ_HWSUPPORT)
198
295#if !defined(PDQ_HWSUPPORT)
296
199typedef struct {
297typedef struct _pdq_os_ctx_t {
200#if defined(__bsdi__)
201 struct device sc_dev; /* base device */
202 struct isadev sc_id; /* ISA device */
203 struct intrhand sc_ih; /* interrupt vectoring */
204 struct atshutdown sc_ats; /* shutdown routine */
298#if defined(__bsdi__)
299 struct device sc_dev; /* base device */
300 struct isadev sc_id; /* ISA device */
301 struct intrhand sc_ih; /* interrupt vectoring */
302 struct atshutdown sc_ats; /* shutdown routine */
303 struct arpcom sc_ac;
304#define sc_if sc_ac.ac_if
205#elif defined(__NetBSD__)
206 struct device sc_dev; /* base device */
207 void *sc_ih; /* interrupt vectoring */
208 void *sc_ats; /* shutdown hook */
305#elif defined(__NetBSD__)
306 struct device sc_dev; /* base device */
307 void *sc_ih; /* interrupt vectoring */
308 void *sc_ats; /* shutdown hook */
309 struct ethercom sc_ec;
310 bus_dma_tag_t sc_dmatag;
311#define sc_if sc_ec.ec_if
209#elif defined(__FreeBSD__)
210 struct kern_devconf *sc_kdc; /* freebsd cruft */
312#elif defined(__FreeBSD__)
313 struct kern_devconf *sc_kdc; /* freebsd cruft */
211#endif
212 struct arpcom sc_ac;
213#define sc_if sc_ac.ac_if
314 struct arpcom sc_ac;
315#define sc_if sc_ac.ac_if
316#endif
317#if defined(IFM_FDDI)
318 struct ifmedia sc_ifmedia;
319#endif
214 pdq_t *sc_pdq;
215#if defined(__alpha__) || defined(__i386__)
216 pdq_bus_ioport_t sc_iobase;
217#endif
320 pdq_t *sc_pdq;
321#if defined(__alpha__) || defined(__i386__)
322 pdq_bus_ioport_t sc_iobase;
323#endif
218#ifdef PDQ_IOMAPPED
324#if defined(PDQ_IOMAPPED) && !defined(__NetBSD__)
219#define sc_membase sc_iobase
220#else
221 pdq_bus_memaddr_t sc_membase;
222#endif
325#define sc_membase sc_iobase
326#else
327 pdq_bus_memaddr_t sc_membase;
328#endif
223 pdq_bus_t sc_bc;
329 pdq_bus_t sc_iotag;
330 pdq_bus_t sc_csrtag;
224#if !defined(__bsdi__) || _BSDI_VERSION >= 199401
225#define sc_bpf sc_if.if_bpf
226#else
227 caddr_t sc_bpf;
228#endif
331#if !defined(__bsdi__) || _BSDI_VERSION >= 199401
332#define sc_bpf sc_if.if_bpf
333#else
334 caddr_t sc_bpf;
335#endif
336#if defined(PDQ_BUS_DMA)
337#if !defined(__NetBSD__)
338 bus_dma_tag_t sc_dmatag;
339#endif
340 bus_dmamap_t sc_dbmap; /* DMA map for descriptor block */
341 bus_dmamap_t sc_uimap; /* DMA map for unsolicited events */
342 bus_dmamap_t sc_cbmap; /* DMA map for consumer block */
343#endif
229} pdq_softc_t;
230
231
232extern void pdq_ifreset(pdq_softc_t *sc);
233extern void pdq_ifinit(pdq_softc_t *sc);
234extern void pdq_ifwatchdog(struct ifnet *ifp);
235extern ifnet_ret_t pdq_ifstart(struct ifnet *ifp);
236extern int pdq_ifioctl(struct ifnet *ifp, ioctl_cmd_t cmd, caddr_t data);

--- 9 unchanged lines hidden (view full) ---

246
247#define PDQ_USE_STREAMS
248#define PDQ_OS_PREFIX "%s board %d "
249#define PDQ_OS_PREFIX_ARGS pdq->pdq_os_name, pdq->pdq_unit
250
251#define PDQ_OS_PAGESIZE PAGESIZE
252#define PDQ_OS_USEC_DELAY(n) drv_usecwait(n)
253#define PDQ_OS_MEMZERO(p, n) bzero((caddr_t)(p), (n))
344} pdq_softc_t;
345
346
347extern void pdq_ifreset(pdq_softc_t *sc);
348extern void pdq_ifinit(pdq_softc_t *sc);
349extern void pdq_ifwatchdog(struct ifnet *ifp);
350extern ifnet_ret_t pdq_ifstart(struct ifnet *ifp);
351extern int pdq_ifioctl(struct ifnet *ifp, ioctl_cmd_t cmd, caddr_t data);

--- 9 unchanged lines hidden (view full) ---

361
362#define PDQ_USE_STREAMS
363#define PDQ_OS_PREFIX "%s board %d "
364#define PDQ_OS_PREFIX_ARGS pdq->pdq_os_name, pdq->pdq_unit
365
366#define PDQ_OS_PAGESIZE PAGESIZE
367#define PDQ_OS_USEC_DELAY(n) drv_usecwait(n)
368#define PDQ_OS_MEMZERO(p, n) bzero((caddr_t)(p), (n))
254#define PDQ_OS_VA_TO_PA(pdq, p) vtop((caddr_t)p, NULL)
369#define PDQ_OS_VA_TO_BUSPA(pdq, p) vtop((caddr_t)p, NULL)
255#define PDQ_OS_MEMALLOC(n) kmem_zalloc(n, KM_NOSLEEP)
256#define PDQ_OS_MEMFREE(p, n) kmem_free((caddr_t) p, n)
257#define PDQ_OS_MEMALLOC_CONTIG(n) kmem_zalloc_physreq(n, decfddiphysreq_db, KM_NOSLEEP)
258#define PDQ_OS_MEMFREE_CONTIG(p, n) PDQ_OS_MEMFREE(p, n)
259
260extern physreq_t *decfddiphysreq_db;
261extern physreq_t *decfddiphysreq_mblk;
262
370#define PDQ_OS_MEMALLOC(n) kmem_zalloc(n, KM_NOSLEEP)
371#define PDQ_OS_MEMFREE(p, n) kmem_free((caddr_t) p, n)
372#define PDQ_OS_MEMALLOC_CONTIG(n) kmem_zalloc_physreq(n, decfddiphysreq_db, KM_NOSLEEP)
373#define PDQ_OS_MEMFREE_CONTIG(p, n) PDQ_OS_MEMFREE(p, n)
374
375extern physreq_t *decfddiphysreq_db;
376extern physreq_t *decfddiphysreq_mblk;
377
263#define PDQ_OS_DATABUF_ALLOC(b) ((void) (((b) = allocb_physreq(PDQ_OS_DATABUF_SIZE, BPRI_MED, decfddiphysreq_mblk)) && ((b)->b_wptr = (b)->b_rptr + PDQ_OS_DATABUF_SIZE)))
378#define PDQ_OS_DATABUF_ALLOC(pdq, b) ((void) (((b) = allocb_physreq(PDQ_OS_DATABUF_SIZE, BPRI_MED, decfddiphysreq_mblk)) && ((b)->b_wptr = (b)->b_rptr + PDQ_OS_DATABUF_SIZE)))
264
265#define PDQ_OS_IORD_8(port) inb(port)
266#define PDQ_OS_IOWR_8(port, data) outb(port, data)
267#endif
268
269
270#ifdef PDQ_USE_MBUFS
271#define PDQ_OS_DATABUF_SIZE (MCLBYTES)
379
380#define PDQ_OS_IORD_8(port) inb(port)
381#define PDQ_OS_IOWR_8(port, data) outb(port, data)
382#endif
383
384
385#ifdef PDQ_USE_MBUFS
386#define PDQ_OS_DATABUF_SIZE (MCLBYTES)
272#define PDQ_OS_DATABUF_FREE(b) (m_freem(b))
387#ifndef PDQ_OS_DATABUF_FREE
388#define PDQ_OS_DATABUF_FREE(pdq, b) (m_freem(b))
389#endif
273#define PDQ_OS_DATABUF_NEXT(b) ((b)->m_next)
274#define PDQ_OS_DATABUF_NEXT_SET(b, b1) ((b)->m_next = (b1))
275#define PDQ_OS_DATABUF_NEXTPKT(b) ((b)->m_nextpkt)
276#define PDQ_OS_DATABUF_NEXTPKT_SET(b, b1) ((b)->m_nextpkt = (b1))
277#define PDQ_OS_DATABUF_LEN(b) ((b)->m_len)
278#define PDQ_OS_DATABUF_LEN_SET(b, n) ((b)->m_len = (n))
279/* #define PDQ_OS_DATABUF_LEN_ADJ(b, n) ((b)->m_len += (n)) */
280#define PDQ_OS_DATABUF_PTR(b) (mtod((b), pdq_uint8_t *))
281#define PDQ_OS_DATABUF_ADJ(b, n) ((b)->m_data += (n), (b)->m_len -= (n))
282typedef struct mbuf PDQ_OS_DATABUF_T;
283
390#define PDQ_OS_DATABUF_NEXT(b) ((b)->m_next)
391#define PDQ_OS_DATABUF_NEXT_SET(b, b1) ((b)->m_next = (b1))
392#define PDQ_OS_DATABUF_NEXTPKT(b) ((b)->m_nextpkt)
393#define PDQ_OS_DATABUF_NEXTPKT_SET(b, b1) ((b)->m_nextpkt = (b1))
394#define PDQ_OS_DATABUF_LEN(b) ((b)->m_len)
395#define PDQ_OS_DATABUF_LEN_SET(b, n) ((b)->m_len = (n))
396/* #define PDQ_OS_DATABUF_LEN_ADJ(b, n) ((b)->m_len += (n)) */
397#define PDQ_OS_DATABUF_PTR(b) (mtod((b), pdq_uint8_t *))
398#define PDQ_OS_DATABUF_ADJ(b, n) ((b)->m_data += (n), (b)->m_len -= (n))
399typedef struct mbuf PDQ_OS_DATABUF_T;
400
284#define PDQ_OS_DATABUF_ALLOC(b) do { \
401#ifndef PDQ_OS_DATABUF_ALLOC
402#define PDQ_OS_DATABUF_ALLOC(pdq, b) do { \
285 PDQ_OS_DATABUF_T *x_m0; \
286 MGETHDR(x_m0, M_DONTWAIT, MT_DATA); \
287 if (x_m0 != NULL) { \
288 MCLGET(x_m0, M_DONTWAIT); \
289 if ((x_m0->m_flags & M_EXT) == 0) { \
290 m_free(x_m0); \
291 (b) = NULL; \
292 } else { \
293 (b) = x_m0; \
294 x_m0->m_len = PDQ_OS_DATABUF_SIZE; \
295 } \
296 } else { \
297 (b) = NULL; \
298 } \
299} while (0)
403 PDQ_OS_DATABUF_T *x_m0; \
404 MGETHDR(x_m0, M_DONTWAIT, MT_DATA); \
405 if (x_m0 != NULL) { \
406 MCLGET(x_m0, M_DONTWAIT); \
407 if ((x_m0->m_flags & M_EXT) == 0) { \
408 m_free(x_m0); \
409 (b) = NULL; \
410 } else { \
411 (b) = x_m0; \
412 x_m0->m_len = PDQ_OS_DATABUF_SIZE; \
413 } \
414 } else { \
415 (b) = NULL; \
416 } \
417} while (0)
418#endif
300#define PDQ_OS_DATABUF_RESET(b) ((b)->m_data = (b)->m_ext.ext_buf, (b)->m_len = MCLBYTES)
301#endif /* PDQ_USE_MBUFS */
302
303#ifdef PDQ_USE_STREAMS
304#define PDQ_OS_DATABUF_SIZE (2048)
419#define PDQ_OS_DATABUF_RESET(b) ((b)->m_data = (b)->m_ext.ext_buf, (b)->m_len = MCLBYTES)
420#endif /* PDQ_USE_MBUFS */
421
422#ifdef PDQ_USE_STREAMS
423#define PDQ_OS_DATABUF_SIZE (2048)
305#define PDQ_OS_DATABUF_FREE(b) (freemsg(b))
424#define PDQ_OS_DATABUF_FREE(pdq, b) (freemsg(b))
306#define PDQ_OS_DATABUF_NEXT(b) ((b)->b_cont)
307#define PDQ_OS_DATABUF_NEXT_SET(b, b1) ((b)->b_cont = (b1))
308#define PDQ_OS_DATABUF_NEXTPKT(b) ((b)->b_next)
309#define PDQ_OS_DATABUF_NEXTPKT_SET(b, b1) ((b)->b_next = (b1))
310#define PDQ_OS_DATABUF_LEN(b) ((b)->b_wptr - (b)->b_rptr)
311#define PDQ_OS_DATABUF_LEN_SET(b, n) ((b)->b_wptr = (b)->b_rptr + (n))
312/*#define PDQ_OS_DATABUF_LEN_ADJ(b, n) ((b)->b_wptr += (n))*/
313#define PDQ_OS_DATABUF_PTR(b) ((pdq_uint8_t *) (b)->b_rptr)
314#define PDQ_OS_DATABUF_ADJ(b, n) ((b)->b_rptr += (n))
315typedef mblk_t PDQ_OS_DATABUF_T;
316
317#ifndef PDQ_OS_DATABUF_ALLOC
425#define PDQ_OS_DATABUF_NEXT(b) ((b)->b_cont)
426#define PDQ_OS_DATABUF_NEXT_SET(b, b1) ((b)->b_cont = (b1))
427#define PDQ_OS_DATABUF_NEXTPKT(b) ((b)->b_next)
428#define PDQ_OS_DATABUF_NEXTPKT_SET(b, b1) ((b)->b_next = (b1))
429#define PDQ_OS_DATABUF_LEN(b) ((b)->b_wptr - (b)->b_rptr)
430#define PDQ_OS_DATABUF_LEN_SET(b, n) ((b)->b_wptr = (b)->b_rptr + (n))
431/*#define PDQ_OS_DATABUF_LEN_ADJ(b, n) ((b)->b_wptr += (n))*/
432#define PDQ_OS_DATABUF_PTR(b) ((pdq_uint8_t *) (b)->b_rptr)
433#define PDQ_OS_DATABUF_ADJ(b, n) ((b)->b_rptr += (n))
434typedef mblk_t PDQ_OS_DATABUF_T;
435
436#ifndef PDQ_OS_DATABUF_ALLOC
318#define PDQ_OS_DATABUF_ALLOC(b) ((void) (((b) = allocb(PDQ_OS_DATABUF_SIZE, BPRI_MED)) && ((b)->b_wptr = (b)->b_rptr + PDQ_OS_DATABUF_SIZE)))
437#define PDQ_OS_DATABUF_ALLOC(pdq, b) ((void) (((b) = allocb(PDQ_OS_DATABUF_SIZE, BPRI_MED)) && ((b)->b_wptr = (b)->b_rptr + PDQ_OS_DATABUF_SIZE)))
319#endif /* PDQ_OS_DATABUF_ALLOC */
320#endif /* PDQ_USE_STREAMS */
321
322#define PDQ_OS_TX_TRANSMIT 5
323
324#define PDQ_OS_DATABUF_ENQUEUE(q, b) do { \
325 PDQ_OS_DATABUF_NEXTPKT_SET(b, NULL); \
326 if ((q)->q_tail == NULL) \

--- 6 unchanged lines hidden (view full) ---

333#define PDQ_OS_DATABUF_DEQUEUE(q, b) do { \
334 if (((b) = (PDQ_OS_DATABUF_T *) (q)->q_head) != NULL) { \
335 if (((q)->q_head = PDQ_OS_DATABUF_NEXTPKT(b)) == NULL) \
336 (q)->q_tail = NULL; \
337 PDQ_OS_DATABUF_NEXTPKT_SET(b, NULL); \
338 } \
339} while (0)
340
438#endif /* PDQ_OS_DATABUF_ALLOC */
439#endif /* PDQ_USE_STREAMS */
440
441#define PDQ_OS_TX_TRANSMIT 5
442
443#define PDQ_OS_DATABUF_ENQUEUE(q, b) do { \
444 PDQ_OS_DATABUF_NEXTPKT_SET(b, NULL); \
445 if ((q)->q_tail == NULL) \

--- 6 unchanged lines hidden (view full) ---

452#define PDQ_OS_DATABUF_DEQUEUE(q, b) do { \
453 if (((b) = (PDQ_OS_DATABUF_T *) (q)->q_head) != NULL) { \
454 if (((q)->q_head = PDQ_OS_DATABUF_NEXTPKT(b)) == NULL) \
455 (q)->q_tail = NULL; \
456 PDQ_OS_DATABUF_NEXTPKT_SET(b, NULL); \
457 } \
458} while (0)
459
460#if !defined(PDQ_OS_CONSUMER_PRESYNC)
461#define PDQ_OS_CONSUMER_PRESYNC(pdq) do { } while(0)
462#define PDQ_OS_CONSUMER_POSTSYNC(pdq) do { } while(0)
463#define PDQ_OS_DESC_PRESYNC(pdq, d, s) do { } while(0)
464#define PDQ_OS_DESC_POSTSYNC(pdq, d, s) do { } while(0)
465#define PDQ_OS_CMDRQST_PRESYNC(pdq, s) do { } while(0)
466#define PDQ_OS_CMDRQST_POSTSYNC(pdq, s) do { } while(0)
467#define PDQ_OS_CMDRSP_PRESYNC(pdq, s) do { } while(0)
468#define PDQ_OS_CMDRSP_POSTSYNC(pdq, s) do { } while(0)
469#define PDQ_OS_RXPDU_PRESYNC(pdq, b, o, l) do { } while(0)
470#define PDQ_OS_RXPDU_POSTSYNC(pdq, b, o, l) do { } while(0)
471#define PDQ_OS_UNSOL_EVENT_PRESYNC(pdq, e) do { } while(0)
472#define PDQ_OS_UNSOL_EVENT_POSTSYNC(pdq, e) do { } while(0)
473#endif
474
475#ifndef PDQ_OS_DATABUF_BUSPA
476#define PDQ_OS_DATABUF_BUSPA(pdq, b) PDQ_OS_VA_TO_BUSPA(pdq, PDQ_OS_DATABUF_PTR(b))
477#endif
478
479#ifndef PDQ_OS_HDR_OFFSET
480#define PDQ_OS_HDR_OFFSET PDQ_RX_FC_OFFSET
481#endif
482
341extern void pdq_os_addr_fill(pdq_t *pdq, pdq_lanaddr_t *addrs, size_t numaddrs);
483extern void pdq_os_addr_fill(pdq_t *pdq, pdq_lanaddr_t *addrs, size_t numaddrs);
342extern void pdq_os_receive_pdu(pdq_t *, PDQ_OS_DATABUF_T *pdu, size_t pdulen);
484extern void pdq_os_receive_pdu(pdq_t *, PDQ_OS_DATABUF_T *pdu, size_t pdulen, int drop);
343extern void pdq_os_restart_transmitter(pdq_t *pdq);
344extern void pdq_os_transmit_done(pdq_t *pdq, PDQ_OS_DATABUF_T *pdu);
485extern void pdq_os_restart_transmitter(pdq_t *pdq);
486extern void pdq_os_transmit_done(pdq_t *pdq, PDQ_OS_DATABUF_T *pdu);
345
487#if !defined(pdq_os_update_status)
488extern void pdq_os_update_status(pdq_t *pdq, const void *rsp);
489#endif
490#if !defined(PDQ_OS_MEMALLOC_CONTIG)
491extern int pdq_os_memalloc_contig(pdq_t *pdq);
492#endif
346extern pdq_boolean_t pdq_queue_transmit_data(pdq_t *pdq, PDQ_OS_DATABUF_T *pdu);
347extern void pdq_flush_transmitter(pdq_t *pdq);
348
349extern void pdq_run(pdq_t *pdq);
350extern pdq_state_t pdq_stop(pdq_t *pdq);
351extern void pdq_hwreset(pdq_t *pdq);
352
353extern int pdq_interrupt(pdq_t *pdq);
354extern pdq_t *pdq_initialize(pdq_bus_t bus, pdq_bus_memaddr_t csr_va,
355 const char *name, int unit,
356 void *ctx, pdq_type_t type);
357#endif /* _PDQ_OS_H */
493extern pdq_boolean_t pdq_queue_transmit_data(pdq_t *pdq, PDQ_OS_DATABUF_T *pdu);
494extern void pdq_flush_transmitter(pdq_t *pdq);
495
496extern void pdq_run(pdq_t *pdq);
497extern pdq_state_t pdq_stop(pdq_t *pdq);
498extern void pdq_hwreset(pdq_t *pdq);
499
500extern int pdq_interrupt(pdq_t *pdq);
501extern pdq_t *pdq_initialize(pdq_bus_t bus, pdq_bus_memaddr_t csr_va,
502 const char *name, int unit,
503 void *ctx, pdq_type_t type);
504#endif /* _PDQ_OS_H */