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 */ |