1*712239e3Sthorpej /* $NetBSD: au_wired_space.c,v 1.4 2007/02/21 22:59:47 thorpej Exp $ */ 2d8b2de51Sgdamore 3d8b2de51Sgdamore /*- 4d8b2de51Sgdamore * Copyright (c) 2006 Itronix Inc. 5d8b2de51Sgdamore * All rights reserved. 6d8b2de51Sgdamore * 7d8b2de51Sgdamore * Written by Garrett D'Amore for Itronix Inc. 8d8b2de51Sgdamore * 9d8b2de51Sgdamore * Redistribution and use in source and binary forms, with or without 10d8b2de51Sgdamore * modification, are permitted provided that the following conditions 11d8b2de51Sgdamore * are met: 12d8b2de51Sgdamore * 1. Redistributions of source code must retain the above copyright 13d8b2de51Sgdamore * notice, this list of conditions and the following disclaimer. 14d8b2de51Sgdamore * 2. Redistributions in binary form must reproduce the above copyright 15d8b2de51Sgdamore * notice, this list of conditions and the following disclaimer in the 16d8b2de51Sgdamore * documentation and/or other materials provided with the distribution. 17d8b2de51Sgdamore * 3. The name of Itronix Inc. may not be used to endorse 18d8b2de51Sgdamore * or promote products derived from this software without specific 19d8b2de51Sgdamore * prior written permission. 20d8b2de51Sgdamore * 21d8b2de51Sgdamore * THIS SOFTWARE IS PROVIDED BY ITRONIX INC. ``AS IS'' AND 22d8b2de51Sgdamore * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 23d8b2de51Sgdamore * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 24d8b2de51Sgdamore * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ITRONIX INC. BE LIABLE FOR ANY 25d8b2de51Sgdamore * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 26d8b2de51Sgdamore * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 27d8b2de51Sgdamore * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 28d8b2de51Sgdamore * ON ANY THEORY OF LIABILITY, WHETHER IN 29d8b2de51Sgdamore * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30d8b2de51Sgdamore * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 31d8b2de51Sgdamore * POSSIBILITY OF SUCH DAMAGE. 32d8b2de51Sgdamore */ 33d8b2de51Sgdamore /* 34d8b2de51Sgdamore * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc. 35d8b2de51Sgdamore * All rights reserved. 36d8b2de51Sgdamore * 37d8b2de51Sgdamore * This code is derived from software contributed to The NetBSD Foundation 38d8b2de51Sgdamore * by Charles M. Hannum and by Jason R. Thorpe of the Numerical Aerospace 39d8b2de51Sgdamore * Simulation Facility, NASA Ames Research Center. 40d8b2de51Sgdamore * 41d8b2de51Sgdamore * Redistribution and use in source and binary forms, with or without 42d8b2de51Sgdamore * modification, are permitted provided that the following conditions 43d8b2de51Sgdamore * are met: 44d8b2de51Sgdamore * 1. Redistributions of source code must retain the above copyright 45d8b2de51Sgdamore * notice, this list of conditions and the following disclaimer. 46d8b2de51Sgdamore * 2. Redistributions in binary form must reproduce the above copyright 47d8b2de51Sgdamore * notice, this list of conditions and the following disclaimer in the 48d8b2de51Sgdamore * documentation and/or other materials provided with the distribution. 49d8b2de51Sgdamore * 3. All advertising materials mentioning features or use of this software 50d8b2de51Sgdamore * must display the following acknowledgement: 51d8b2de51Sgdamore * This product includes software developed by the NetBSD 52d8b2de51Sgdamore * Foundation, Inc. and its contributors. 53d8b2de51Sgdamore * 4. Neither the name of The NetBSD Foundation nor the names of its 54d8b2de51Sgdamore * contributors may be used to endorse or promote products derived 55d8b2de51Sgdamore * from this software without specific prior written permission. 56d8b2de51Sgdamore * 57d8b2de51Sgdamore * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 58d8b2de51Sgdamore * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 59d8b2de51Sgdamore * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 60d8b2de51Sgdamore * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 61d8b2de51Sgdamore * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 62d8b2de51Sgdamore * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 63d8b2de51Sgdamore * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 64d8b2de51Sgdamore * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 65d8b2de51Sgdamore * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 66d8b2de51Sgdamore * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 67d8b2de51Sgdamore * POSSIBILITY OF SUCH DAMAGE. 68d8b2de51Sgdamore */ 69d8b2de51Sgdamore 70d8b2de51Sgdamore #include <sys/cdefs.h> 71*712239e3Sthorpej __KERNEL_RCSID(0, "$NetBSD: au_wired_space.c,v 1.4 2007/02/21 22:59:47 thorpej Exp $"); 72d8b2de51Sgdamore 73d8b2de51Sgdamore /* 74d8b2de51Sgdamore * This provides mappings for the upper I/O regions used on some 75c050474dSsimonb * Alchemy parts, e.g. PCI and PCMCIA spaces. These spaces can be 76c050474dSsimonb * accessed using wired TLB entries. 77d8b2de51Sgdamore */ 78d8b2de51Sgdamore 79d8b2de51Sgdamore #include <sys/param.h> 80d8b2de51Sgdamore #include <sys/systm.h> 81d8b2de51Sgdamore #include <sys/extent.h> 82d8b2de51Sgdamore #include <sys/malloc.h> 83d8b2de51Sgdamore #include <sys/endian.h> 84d8b2de51Sgdamore 85d8b2de51Sgdamore #include <machine/bus.h> 86d8b2de51Sgdamore #include <machine/locore.h> 87d8b2de51Sgdamore #include <machine/wired_map.h> 88d8b2de51Sgdamore #include <mips/alchemy/include/au_wired_space.h> 89d8b2de51Sgdamore 90d8b2de51Sgdamore #ifndef AU_WIRED_EXTENT_SZ 91d8b2de51Sgdamore #define AU_WIRED_EXTENT_SZ EXTENT_FIXED_STORAGE_SIZE(10) 92d8b2de51Sgdamore #endif 93d8b2de51Sgdamore 94d8b2de51Sgdamore typedef struct au_wired_cookie { 95d8b2de51Sgdamore const char *c_name; 96d8b2de51Sgdamore bus_addr_t c_start; 97d8b2de51Sgdamore bus_size_t c_size; 98d8b2de51Sgdamore paddr_t c_pbase; 99d8b2de51Sgdamore int c_flags; 100d8b2de51Sgdamore int c_swswap; 101*712239e3Sthorpej bool c_hwswap; 102d8b2de51Sgdamore struct extent *c_extent; 103d8b2de51Sgdamore long c_exstore[AU_WIRED_EXTENT_SZ/sizeof (long)]; 104d8b2de51Sgdamore } au_wired_cookie_t; 105d8b2de51Sgdamore 106d8b2de51Sgdamore int au_wired_map(void *, bus_addr_t, bus_size_t, int, 107d8b2de51Sgdamore bus_space_handle_t *, int); 108d8b2de51Sgdamore void au_wired_unmap(void *, bus_space_handle_t, bus_size_t, int); 109d8b2de51Sgdamore void *au_wired_vaddr(void *, bus_space_handle_t); 110d8b2de51Sgdamore int au_wired_subregion(void *, bus_space_handle_t, bus_size_t, bus_size_t, 111d8b2de51Sgdamore bus_space_handle_t *); 112d8b2de51Sgdamore paddr_t au_wired_mmap(void *, bus_addr_t, off_t, int, int); 113d8b2de51Sgdamore int au_wired_alloc(void *, bus_addr_t, bus_addr_t, bus_size_t, bus_size_t, 114d8b2de51Sgdamore bus_size_t, int, bus_addr_t *, bus_space_handle_t *); 115d8b2de51Sgdamore void au_wired_free(void *, bus_space_handle_t, bus_size_t); 116d8b2de51Sgdamore void au_wired_barrier(void *, bus_space_handle_t, bus_size_t, bus_size_t, int); 117d8b2de51Sgdamore uint8_t au_wired_r_1(void *, bus_space_handle_t, bus_size_t); 118d8b2de51Sgdamore uint16_t au_wired_r_2(void *, bus_space_handle_t, bus_size_t); 119d8b2de51Sgdamore uint32_t au_wired_r_4(void *, bus_space_handle_t, bus_size_t); 120d8b2de51Sgdamore uint64_t au_wired_r_8(void *, bus_space_handle_t, bus_size_t); 121d8b2de51Sgdamore void au_wired_rm_1(void *, bus_space_handle_t, bus_size_t, uint8_t *, 122d8b2de51Sgdamore bus_size_t); 123d8b2de51Sgdamore void au_wired_rm_2(void *, bus_space_handle_t, bus_size_t, uint16_t *, 124d8b2de51Sgdamore bus_size_t); 125d8b2de51Sgdamore void au_wired_rm_4(void *, bus_space_handle_t, bus_size_t, uint32_t *, 126d8b2de51Sgdamore bus_size_t); 127d8b2de51Sgdamore void au_wired_rm_8(void *, bus_space_handle_t, bus_size_t, uint64_t *, 128d8b2de51Sgdamore bus_size_t); 129d8b2de51Sgdamore void au_wired_rr_1(void *, bus_space_handle_t, bus_size_t, uint8_t *, 130d8b2de51Sgdamore bus_size_t); 131d8b2de51Sgdamore void au_wired_rr_2(void *, bus_space_handle_t, bus_size_t, uint16_t *, 132d8b2de51Sgdamore bus_size_t); 133d8b2de51Sgdamore void au_wired_rr_4(void *, bus_space_handle_t, bus_size_t, uint32_t *, 134d8b2de51Sgdamore bus_size_t); 135d8b2de51Sgdamore void au_wired_rr_8(void *, bus_space_handle_t, bus_size_t, uint64_t *, 136d8b2de51Sgdamore bus_size_t); 137d8b2de51Sgdamore void au_wired_w_1(void *, bus_space_handle_t, bus_size_t, uint8_t); 138d8b2de51Sgdamore void au_wired_w_2(void *, bus_space_handle_t, bus_size_t, uint16_t); 139d8b2de51Sgdamore void au_wired_w_4(void *, bus_space_handle_t, bus_size_t, uint32_t); 140d8b2de51Sgdamore void au_wired_w_8(void *, bus_space_handle_t, bus_size_t, uint64_t); 141d8b2de51Sgdamore void au_wired_wm_1(void *, bus_space_handle_t, bus_size_t, const uint8_t *, 142d8b2de51Sgdamore bus_size_t); 143d8b2de51Sgdamore void au_wired_wm_2(void *, bus_space_handle_t, bus_size_t, const uint16_t *, 144d8b2de51Sgdamore bus_size_t); 145d8b2de51Sgdamore void au_wired_wm_4(void *, bus_space_handle_t, bus_size_t, const uint32_t *, 146d8b2de51Sgdamore bus_size_t); 147d8b2de51Sgdamore void au_wired_wm_8(void *, bus_space_handle_t, bus_size_t, const uint64_t *, 148d8b2de51Sgdamore bus_size_t); 149d8b2de51Sgdamore void au_wired_wr_1(void *, bus_space_handle_t, bus_size_t, const uint8_t *, 150d8b2de51Sgdamore bus_size_t); 151d8b2de51Sgdamore void au_wired_wr_2(void *, bus_space_handle_t, bus_size_t, const uint16_t *, 152d8b2de51Sgdamore bus_size_t); 153d8b2de51Sgdamore void au_wired_wr_4(void *, bus_space_handle_t, bus_size_t, const uint32_t *, 154d8b2de51Sgdamore bus_size_t); 155d8b2de51Sgdamore void au_wired_wr_8(void *, bus_space_handle_t, bus_size_t, const uint64_t *, 156d8b2de51Sgdamore bus_size_t); 157d8b2de51Sgdamore void au_wired_sm_1(void *, bus_space_handle_t, bus_size_t, uint8_t, 158d8b2de51Sgdamore bus_size_t); 159d8b2de51Sgdamore void au_wired_sm_2(void *, bus_space_handle_t, bus_size_t, uint16_t, 160d8b2de51Sgdamore bus_size_t); 161d8b2de51Sgdamore void au_wired_sm_4(void *, bus_space_handle_t, bus_size_t, uint32_t, 162d8b2de51Sgdamore bus_size_t); 163d8b2de51Sgdamore void au_wired_sm_8(void *, bus_space_handle_t, bus_size_t, uint64_t, 164d8b2de51Sgdamore bus_size_t); 165d8b2de51Sgdamore void au_wired_sr_1(void *, bus_space_handle_t, bus_size_t, uint8_t, 166d8b2de51Sgdamore bus_size_t); 167d8b2de51Sgdamore void au_wired_sr_2(void *, bus_space_handle_t, bus_size_t, uint16_t, 168d8b2de51Sgdamore bus_size_t); 169d8b2de51Sgdamore void au_wired_sr_4(void *, bus_space_handle_t, bus_size_t, uint32_t, 170d8b2de51Sgdamore bus_size_t); 171d8b2de51Sgdamore void au_wired_sr_8(void *, bus_space_handle_t, bus_size_t, uint64_t, 172d8b2de51Sgdamore bus_size_t); 173d8b2de51Sgdamore void au_wired_c_1(void *, bus_space_handle_t, bus_size_t, 174d8b2de51Sgdamore bus_space_handle_t, bus_size_t, bus_size_t); 175d8b2de51Sgdamore void au_wired_c_2(void *, bus_space_handle_t, bus_size_t, 176d8b2de51Sgdamore bus_space_handle_t, bus_size_t, bus_size_t); 177d8b2de51Sgdamore void au_wired_c_4(void *, bus_space_handle_t, bus_size_t, 178d8b2de51Sgdamore bus_space_handle_t, bus_size_t, bus_size_t); 179d8b2de51Sgdamore void au_wired_c_8(void *, bus_space_handle_t, bus_size_t, 180d8b2de51Sgdamore bus_space_handle_t, bus_size_t, bus_size_t); 181d8b2de51Sgdamore uint16_t au_wired_rs_2(void *, bus_space_handle_t, bus_size_t); 182d8b2de51Sgdamore uint32_t au_wired_rs_4(void *, bus_space_handle_t, bus_size_t); 183d8b2de51Sgdamore uint64_t au_wired_rs_8(void *, bus_space_handle_t, bus_size_t); 184d8b2de51Sgdamore void au_wired_ws_2(void *, bus_space_handle_t, bus_size_t, uint16_t); 185d8b2de51Sgdamore void au_wired_ws_4(void *, bus_space_handle_t, bus_size_t, uint32_t); 186d8b2de51Sgdamore void au_wired_ws_8(void *, bus_space_handle_t, bus_size_t, uint64_t); 187d8b2de51Sgdamore void au_wired_rms_2(void *, bus_space_handle_t, bus_size_t, uint16_t *, 188d8b2de51Sgdamore bus_size_t); 189d8b2de51Sgdamore void au_wired_rms_4(void *, bus_space_handle_t, bus_size_t, uint32_t *, 190d8b2de51Sgdamore bus_size_t); 191d8b2de51Sgdamore void au_wired_rms_8(void *, bus_space_handle_t, bus_size_t, uint64_t *, 192d8b2de51Sgdamore bus_size_t); 193d8b2de51Sgdamore void au_wired_rrs_2(void *, bus_space_handle_t, bus_size_t, uint16_t *, 194d8b2de51Sgdamore bus_size_t); 195d8b2de51Sgdamore void au_wired_rrs_4(void *, bus_space_handle_t, bus_size_t, uint32_t *, 196d8b2de51Sgdamore bus_size_t); 197d8b2de51Sgdamore void au_wired_rrs_8(void *, bus_space_handle_t, bus_size_t, uint64_t *, 198d8b2de51Sgdamore bus_size_t); 199d8b2de51Sgdamore void au_wired_wms_2(void *, bus_space_handle_t, bus_size_t, const uint16_t *, 200d8b2de51Sgdamore bus_size_t); 201d8b2de51Sgdamore void au_wired_wms_4(void *, bus_space_handle_t, bus_size_t, const uint32_t *, 202d8b2de51Sgdamore bus_size_t); 203d8b2de51Sgdamore void au_wired_wms_8(void *, bus_space_handle_t, bus_size_t, const uint64_t *, 204d8b2de51Sgdamore bus_size_t); 205d8b2de51Sgdamore void au_wired_wrs_2(void *, bus_space_handle_t, bus_size_t, const uint16_t *, 206d8b2de51Sgdamore bus_size_t); 207d8b2de51Sgdamore void au_wired_wrs_4(void *, bus_space_handle_t, bus_size_t, const uint32_t *, 208d8b2de51Sgdamore bus_size_t); 209d8b2de51Sgdamore void au_wired_wrs_8(void *, bus_space_handle_t, bus_size_t, const uint64_t *, 210d8b2de51Sgdamore bus_size_t); 211d8b2de51Sgdamore 212d8b2de51Sgdamore int 213d8b2de51Sgdamore au_wired_map(void *cookie, bus_addr_t addr, bus_size_t size, 214d8b2de51Sgdamore int flags, bus_space_handle_t *bshp, int acct) 215d8b2de51Sgdamore { 216d8b2de51Sgdamore int err; 217d8b2de51Sgdamore au_wired_cookie_t *c = (au_wired_cookie_t *)cookie; 218d8b2de51Sgdamore paddr_t pa; 219d8b2de51Sgdamore 220d8b2de51Sgdamore /* make sure we can map this bus address */ 221d8b2de51Sgdamore if (addr < c->c_start || 222d8b2de51Sgdamore addr + size > c->c_start + c->c_size) 223d8b2de51Sgdamore return EINVAL; 224d8b2de51Sgdamore 225d8b2de51Sgdamore pa = c->c_pbase + (addr - c->c_start); 226d8b2de51Sgdamore 227d8b2de51Sgdamore if (!mips3_wired_enter_region(addr, pa, size)) 228d8b2de51Sgdamore return ENOMEM; 229d8b2de51Sgdamore 230d8b2de51Sgdamore /* 231d8b2de51Sgdamore * bus addresses are taken from virtual address space. 232d8b2de51Sgdamore */ 233d8b2de51Sgdamore if (acct && c->c_extent != NULL) { 234d8b2de51Sgdamore err = extent_alloc_region(c->c_extent, addr, size, EX_NOWAIT); 235d8b2de51Sgdamore if (err) 236d8b2de51Sgdamore return err; 237d8b2de51Sgdamore } 238d8b2de51Sgdamore 239d8b2de51Sgdamore *bshp = addr; 240d8b2de51Sgdamore 241d8b2de51Sgdamore return 0; 242d8b2de51Sgdamore } 243d8b2de51Sgdamore 244d8b2de51Sgdamore void 245d8b2de51Sgdamore au_wired_unmap(void *cookie, bus_space_handle_t bsh, bus_size_t size, int acct) 246d8b2de51Sgdamore { 247d8b2de51Sgdamore au_wired_cookie_t *c = (au_wired_cookie_t *)cookie; 248d8b2de51Sgdamore 249d8b2de51Sgdamore if (acct != 0 && c->c_extent != NULL) { 250d8b2de51Sgdamore extent_free(c->c_extent, (vaddr_t)bsh, size, EX_NOWAIT); 251d8b2de51Sgdamore } 252d8b2de51Sgdamore } 253d8b2de51Sgdamore 254d8b2de51Sgdamore int 255d8b2de51Sgdamore au_wired_subregion(void *cookie, bus_space_handle_t bsh, 256d8b2de51Sgdamore bus_size_t offset, bus_size_t size, bus_space_handle_t *nbshp) 257d8b2de51Sgdamore { 258d8b2de51Sgdamore 259d8b2de51Sgdamore *nbshp = bsh + offset; 260d8b2de51Sgdamore return 0; 261d8b2de51Sgdamore } 262d8b2de51Sgdamore 263d8b2de51Sgdamore void * 264d8b2de51Sgdamore au_wired_vaddr(void *cookie, bus_space_handle_t bsh) 265d8b2de51Sgdamore { 266d8b2de51Sgdamore 267d8b2de51Sgdamore return ((void *)bsh); 268d8b2de51Sgdamore } 269d8b2de51Sgdamore 270d8b2de51Sgdamore paddr_t 271d8b2de51Sgdamore au_wired_mmap(void *cookie, bus_addr_t addr, off_t off, int prot, int flags) 272d8b2de51Sgdamore { 273d8b2de51Sgdamore au_wired_cookie_t *c = (au_wired_cookie_t *)cookie; 274d8b2de51Sgdamore 275d8b2de51Sgdamore /* I/O spaces should not be directly mmap'ed */ 276d8b2de51Sgdamore if (c->c_flags & AU_WIRED_SPACE_IO) 277d8b2de51Sgdamore return -1; 278d8b2de51Sgdamore 279d8b2de51Sgdamore if (addr < c->c_start || (addr + off) >= (c->c_start + c->c_size)) 280d8b2de51Sgdamore return -1; 281d8b2de51Sgdamore 282d8b2de51Sgdamore return mips_btop(c->c_pbase + (addr - c->c_start) + off); 283d8b2de51Sgdamore } 284d8b2de51Sgdamore 285d8b2de51Sgdamore int 286d8b2de51Sgdamore au_wired_alloc(void *cookie, bus_addr_t start, bus_addr_t end, 287d8b2de51Sgdamore bus_size_t size, bus_size_t align, bus_size_t boundary, int flags, 288d8b2de51Sgdamore bus_addr_t *addrp, bus_space_handle_t *bshp) 289d8b2de51Sgdamore { 290d8b2de51Sgdamore au_wired_cookie_t *c = (au_wired_cookie_t *)cookie; 291d8b2de51Sgdamore vaddr_t addr; 292d8b2de51Sgdamore int err; 293d8b2de51Sgdamore paddr_t pa; 294d8b2de51Sgdamore 295d8b2de51Sgdamore if (c->c_extent == NULL) 296d8b2de51Sgdamore panic("au_wired_alloc: extent map %s not avail", c->c_name); 297d8b2de51Sgdamore 298d8b2de51Sgdamore if (start < c->c_start || ((start + size) > (c->c_start + c->c_size))) 299d8b2de51Sgdamore return EINVAL; 300d8b2de51Sgdamore 301d8b2de51Sgdamore err = extent_alloc_subregion(c->c_extent, start, end, size, 302d8b2de51Sgdamore align, boundary, EX_FAST | EX_NOWAIT, &addr); 303d8b2de51Sgdamore if (err) 304d8b2de51Sgdamore return err; 305d8b2de51Sgdamore 306d8b2de51Sgdamore pa = c->c_pbase + (addr - c->c_start); 307d8b2de51Sgdamore 308d8b2de51Sgdamore if (!mips3_wired_enter_region(addr, pa, size)) 309d8b2de51Sgdamore return ENOMEM; 310d8b2de51Sgdamore 311d8b2de51Sgdamore *bshp = addr; 312d8b2de51Sgdamore *addrp = addr; 313d8b2de51Sgdamore return 0; 314d8b2de51Sgdamore } 315d8b2de51Sgdamore 316d8b2de51Sgdamore void 317d8b2de51Sgdamore au_wired_free(void *cookie, bus_space_handle_t bsh, bus_size_t size) 318d8b2de51Sgdamore { 319d8b2de51Sgdamore 320d8b2de51Sgdamore /* unmap takes care of it all */ 321d8b2de51Sgdamore au_wired_unmap(cookie, bsh, size, 1); 322d8b2de51Sgdamore } 323d8b2de51Sgdamore 324d8b2de51Sgdamore inline void 325d8b2de51Sgdamore au_wired_barrier(void *cookie, bus_space_handle_t bsh, bus_size_t o, 326d8b2de51Sgdamore bus_size_t l, int f) 327d8b2de51Sgdamore { 328d8b2de51Sgdamore 329d8b2de51Sgdamore if (f & BUS_SPACE_BARRIER_WRITE) 330d8b2de51Sgdamore wbflush(); 331d8b2de51Sgdamore } 332d8b2de51Sgdamore 333d8b2de51Sgdamore inline uint8_t 334d8b2de51Sgdamore au_wired_r_1(void *v, bus_space_handle_t h, bus_size_t o) 335d8b2de51Sgdamore { 336d8b2de51Sgdamore 337d8b2de51Sgdamore return (*(volatile uint8_t *)(h + o)); 338d8b2de51Sgdamore } 339d8b2de51Sgdamore 340d8b2de51Sgdamore inline uint16_t 341d8b2de51Sgdamore au_wired_r_2(void *v, bus_space_handle_t h, bus_size_t o) 342d8b2de51Sgdamore { 343d8b2de51Sgdamore uint16_t val = (*(volatile uint16_t *)(h + o)); 344d8b2de51Sgdamore au_wired_cookie_t *c = (au_wired_cookie_t *)v; 345d8b2de51Sgdamore 346d8b2de51Sgdamore return (c->c_swswap ? bswap16(val) : val); 347d8b2de51Sgdamore } 348d8b2de51Sgdamore 349d8b2de51Sgdamore inline uint32_t 350d8b2de51Sgdamore au_wired_r_4(void *v, bus_space_handle_t h, bus_size_t o) 351d8b2de51Sgdamore { 352d8b2de51Sgdamore uint32_t val = (*(volatile uint32_t *)(h + o)); 353d8b2de51Sgdamore au_wired_cookie_t *c = (au_wired_cookie_t *)v; 354d8b2de51Sgdamore 355d8b2de51Sgdamore return (c->c_swswap ? bswap32(val) : val); 356d8b2de51Sgdamore } 357d8b2de51Sgdamore 358d8b2de51Sgdamore inline uint64_t 359d8b2de51Sgdamore au_wired_r_8(void *v, bus_space_handle_t h, bus_size_t o) 360d8b2de51Sgdamore { 361d8b2de51Sgdamore uint64_t val = (*(volatile uint64_t *)(h + o)); 362d8b2de51Sgdamore au_wired_cookie_t *c = (au_wired_cookie_t *)v; 363d8b2de51Sgdamore 364d8b2de51Sgdamore return (c->c_swswap ? bswap64(val) : val); 365d8b2de51Sgdamore } 366d8b2de51Sgdamore 367d8b2de51Sgdamore inline void 368d8b2de51Sgdamore au_wired_w_1(void *v, bus_space_handle_t h, bus_size_t o, uint8_t val) 369d8b2de51Sgdamore { 370d8b2de51Sgdamore 371d8b2de51Sgdamore *(volatile uint8_t *)(h + o) = val; 372d8b2de51Sgdamore } 373d8b2de51Sgdamore 374d8b2de51Sgdamore inline void 375d8b2de51Sgdamore au_wired_w_2(void *v, bus_space_handle_t h, bus_size_t o, uint16_t val) 376d8b2de51Sgdamore { 377d8b2de51Sgdamore au_wired_cookie_t *c = (au_wired_cookie_t *)v; 378d8b2de51Sgdamore 379d8b2de51Sgdamore *(volatile uint16_t *)(h + o) = c->c_swswap ? bswap16(val) : val; 380d8b2de51Sgdamore } 381d8b2de51Sgdamore 382d8b2de51Sgdamore inline void 383d8b2de51Sgdamore au_wired_w_4(void *v, bus_space_handle_t h, bus_size_t o, uint32_t val) 384d8b2de51Sgdamore { 385d8b2de51Sgdamore au_wired_cookie_t *c = (au_wired_cookie_t *)v; 386d8b2de51Sgdamore 387d8b2de51Sgdamore *(volatile uint32_t *)(h + o) = c->c_swswap ? bswap32(val) : val; 388d8b2de51Sgdamore } 389d8b2de51Sgdamore 390d8b2de51Sgdamore inline void 391d8b2de51Sgdamore au_wired_w_8(void *v, bus_space_handle_t h, bus_size_t o, uint64_t val) 392d8b2de51Sgdamore { 393d8b2de51Sgdamore au_wired_cookie_t *c = (au_wired_cookie_t *)v; 394d8b2de51Sgdamore 395d8b2de51Sgdamore *(volatile uint64_t *)(h + o) = c->c_swswap ? bswap64(val) : val; 396d8b2de51Sgdamore } 397d8b2de51Sgdamore 398d8b2de51Sgdamore inline uint16_t 399d8b2de51Sgdamore au_wired_rs_2(void *v, bus_space_handle_t h, bus_size_t o) 400d8b2de51Sgdamore { 401d8b2de51Sgdamore uint16_t val = (*(volatile uint16_t *)(h + o)); 402d8b2de51Sgdamore au_wired_cookie_t *c = (au_wired_cookie_t *)v; 403d8b2de51Sgdamore 404d8b2de51Sgdamore return (c->c_hwswap ? bswap16(val) : val); 405d8b2de51Sgdamore } 406d8b2de51Sgdamore 407d8b2de51Sgdamore inline uint32_t 408d8b2de51Sgdamore au_wired_rs_4(void *v, bus_space_handle_t h, bus_size_t o) 409d8b2de51Sgdamore { 410d8b2de51Sgdamore uint32_t val = (*(volatile uint32_t *)(h + o)); 411d8b2de51Sgdamore au_wired_cookie_t *c = (au_wired_cookie_t *)v; 412d8b2de51Sgdamore 413d8b2de51Sgdamore return (c->c_hwswap ? bswap32(val) : val); 414d8b2de51Sgdamore } 415d8b2de51Sgdamore 416d8b2de51Sgdamore inline uint64_t 417d8b2de51Sgdamore au_wired_rs_8(void *v, bus_space_handle_t h, bus_size_t o) 418d8b2de51Sgdamore { 419d8b2de51Sgdamore uint64_t val = (*(volatile uint64_t *)(h + o)); 420d8b2de51Sgdamore au_wired_cookie_t *c = (au_wired_cookie_t *)v; 421d8b2de51Sgdamore 422d8b2de51Sgdamore return (c->c_hwswap ? bswap64(val) : val); 423d8b2de51Sgdamore } 424d8b2de51Sgdamore 425d8b2de51Sgdamore inline void 426d8b2de51Sgdamore au_wired_ws_2(void *v, bus_space_handle_t h, bus_size_t o, uint16_t val) 427d8b2de51Sgdamore { 428d8b2de51Sgdamore au_wired_cookie_t *c = (au_wired_cookie_t *)v; 429d8b2de51Sgdamore 430d8b2de51Sgdamore *(volatile uint16_t *)(h + o) = c->c_hwswap ? bswap16(val) : val; 431d8b2de51Sgdamore } 432d8b2de51Sgdamore 433d8b2de51Sgdamore inline void 434d8b2de51Sgdamore au_wired_ws_4(void *v, bus_space_handle_t h, bus_size_t o, uint32_t val) 435d8b2de51Sgdamore { 436d8b2de51Sgdamore au_wired_cookie_t *c = (au_wired_cookie_t *)v; 437d8b2de51Sgdamore 438d8b2de51Sgdamore *(volatile uint32_t *)(h + o) = c->c_hwswap ? bswap32(val) : val; 439d8b2de51Sgdamore } 440d8b2de51Sgdamore 441d8b2de51Sgdamore inline void 442d8b2de51Sgdamore au_wired_ws_8(void *v, bus_space_handle_t h, bus_size_t o, uint64_t val) 443d8b2de51Sgdamore { 444d8b2de51Sgdamore au_wired_cookie_t *c = (au_wired_cookie_t *)v; 445d8b2de51Sgdamore 446d8b2de51Sgdamore *(volatile uint64_t *)(h + o) = c->c_hwswap ? bswap64(val) : val; 447d8b2de51Sgdamore } 448d8b2de51Sgdamore 449d8b2de51Sgdamore #define AU_WIRED_RM(TYPE,BYTES) \ 450d8b2de51Sgdamore void \ 451d8b2de51Sgdamore __CONCAT(au_wired_rm_,BYTES)(void *v, \ 452d8b2de51Sgdamore bus_space_handle_t h, bus_size_t o, TYPE *dst, bus_size_t cnt) \ 453d8b2de51Sgdamore { \ 454d8b2de51Sgdamore \ 455d8b2de51Sgdamore while (cnt-- > 0) \ 456d8b2de51Sgdamore *dst ++ = __CONCAT(au_wired_r_,BYTES)(v, h, o); \ 457d8b2de51Sgdamore } 458d8b2de51Sgdamore AU_WIRED_RM(uint8_t,1) 459d8b2de51Sgdamore AU_WIRED_RM(uint16_t,2) 460d8b2de51Sgdamore AU_WIRED_RM(uint32_t,4) 461d8b2de51Sgdamore AU_WIRED_RM(uint64_t,8) 462d8b2de51Sgdamore 463d8b2de51Sgdamore #define AU_WIRED_RMS(TYPE,BYTES) \ 464d8b2de51Sgdamore void \ 465d8b2de51Sgdamore __CONCAT(au_wired_rms_,BYTES)(void *v, \ 466d8b2de51Sgdamore bus_space_handle_t h, bus_size_t o, TYPE *dst, bus_size_t cnt) \ 467d8b2de51Sgdamore { \ 468d8b2de51Sgdamore \ 469d8b2de51Sgdamore while (cnt-- > 0) { \ 470d8b2de51Sgdamore wbflush(); \ 471d8b2de51Sgdamore *dst++ = __CONCAT(au_wired_rs_,BYTES)(v, h, o); \ 472d8b2de51Sgdamore } \ 473d8b2de51Sgdamore } 474d8b2de51Sgdamore AU_WIRED_RMS(uint16_t,2) 475d8b2de51Sgdamore AU_WIRED_RMS(uint32_t,4) 476d8b2de51Sgdamore AU_WIRED_RMS(uint64_t,8) 477d8b2de51Sgdamore 478d8b2de51Sgdamore #define AU_WIRED_RR(TYPE,BYTES) \ 479d8b2de51Sgdamore void \ 480d8b2de51Sgdamore __CONCAT(au_wired_rr_,BYTES)(void *v, \ 481d8b2de51Sgdamore bus_space_handle_t h, bus_size_t o, TYPE *dst, bus_size_t cnt) \ 482d8b2de51Sgdamore { \ 483d8b2de51Sgdamore \ 484d8b2de51Sgdamore while (cnt-- > 0) { \ 485d8b2de51Sgdamore *dst++ = __CONCAT(au_wired_r_,BYTES)(v, h, o); \ 486d8b2de51Sgdamore o += BYTES; \ 487d8b2de51Sgdamore } \ 488d8b2de51Sgdamore } 489d8b2de51Sgdamore AU_WIRED_RR(uint8_t,1) 490d8b2de51Sgdamore AU_WIRED_RR(uint16_t,2) 491d8b2de51Sgdamore AU_WIRED_RR(uint32_t,4) 492d8b2de51Sgdamore AU_WIRED_RR(uint64_t,8) 493d8b2de51Sgdamore 494d8b2de51Sgdamore #define AU_WIRED_RRS(TYPE,BYTES) \ 495d8b2de51Sgdamore void \ 496d8b2de51Sgdamore __CONCAT(au_wired_rrs_,BYTES)(void *v, \ 497d8b2de51Sgdamore bus_space_handle_t h, bus_size_t o, TYPE *dst, bus_size_t cnt) \ 498d8b2de51Sgdamore { \ 499d8b2de51Sgdamore \ 500d8b2de51Sgdamore while (cnt-- > 0) { \ 501d8b2de51Sgdamore *dst++ = __CONCAT(au_wired_rs_,BYTES)(v, h, o); \ 502d8b2de51Sgdamore o += BYTES; \ 503d8b2de51Sgdamore } \ 504d8b2de51Sgdamore } 505d8b2de51Sgdamore AU_WIRED_RRS(uint16_t,2) 506d8b2de51Sgdamore AU_WIRED_RRS(uint32_t,4) 507d8b2de51Sgdamore AU_WIRED_RRS(uint64_t,8) 508d8b2de51Sgdamore 509d8b2de51Sgdamore #define AU_WIRED_WM(TYPE,BYTES) \ 510d8b2de51Sgdamore void \ 511d8b2de51Sgdamore __CONCAT(au_wired_wm_,BYTES)(void *v, \ 512d8b2de51Sgdamore bus_space_handle_t h, bus_size_t o, const TYPE *src, \ 513d8b2de51Sgdamore bus_size_t cnt) \ 514d8b2de51Sgdamore { \ 515d8b2de51Sgdamore \ 516d8b2de51Sgdamore while (cnt-- > 0) { \ 517d8b2de51Sgdamore __CONCAT(au_wired_w_,BYTES)(v, h, o, *src++); \ 518d8b2de51Sgdamore wbflush(); \ 519d8b2de51Sgdamore } \ 520d8b2de51Sgdamore } 521d8b2de51Sgdamore AU_WIRED_WM(uint8_t,1) 522d8b2de51Sgdamore AU_WIRED_WM(uint16_t,2) 523d8b2de51Sgdamore AU_WIRED_WM(uint32_t,4) 524d8b2de51Sgdamore AU_WIRED_WM(uint64_t,8) 525d8b2de51Sgdamore 526d8b2de51Sgdamore #define AU_WIRED_WMS(TYPE,BYTES) \ 527d8b2de51Sgdamore void \ 528d8b2de51Sgdamore __CONCAT(au_wired_wms_,BYTES)(void *v, \ 529d8b2de51Sgdamore bus_space_handle_t h, bus_size_t o, const TYPE *src, \ 530d8b2de51Sgdamore bus_size_t cnt) \ 531d8b2de51Sgdamore { \ 532d8b2de51Sgdamore \ 533d8b2de51Sgdamore while (cnt-- > 0) { \ 534d8b2de51Sgdamore __CONCAT(au_wired_ws_,BYTES)(v, h, o, *src++); \ 535d8b2de51Sgdamore wbflush(); \ 536d8b2de51Sgdamore } \ 537d8b2de51Sgdamore } 538d8b2de51Sgdamore AU_WIRED_WMS(uint16_t,2) 539d8b2de51Sgdamore AU_WIRED_WMS(uint32_t,4) 540d8b2de51Sgdamore AU_WIRED_WMS(uint64_t,8) 541d8b2de51Sgdamore 542d8b2de51Sgdamore #define AU_WIRED_WR(TYPE,BYTES) \ 543d8b2de51Sgdamore void \ 544d8b2de51Sgdamore __CONCAT(au_wired_wr_,BYTES)(void *v, \ 545d8b2de51Sgdamore bus_space_handle_t h, bus_size_t o, const TYPE *src, \ 546d8b2de51Sgdamore bus_size_t cnt) \ 547d8b2de51Sgdamore { \ 548d8b2de51Sgdamore \ 549d8b2de51Sgdamore while (cnt-- > 0) { \ 550d8b2de51Sgdamore __CONCAT(au_wired_w_,BYTES)(v, h, o, *src++); \ 551d8b2de51Sgdamore o += BYTES; \ 552d8b2de51Sgdamore } \ 553d8b2de51Sgdamore } 554d8b2de51Sgdamore AU_WIRED_WR(uint8_t,1) 555d8b2de51Sgdamore AU_WIRED_WR(uint16_t,2) 556d8b2de51Sgdamore AU_WIRED_WR(uint32_t,4) 557d8b2de51Sgdamore AU_WIRED_WR(uint64_t,8) 558d8b2de51Sgdamore 559d8b2de51Sgdamore #define AU_WIRED_WRS(TYPE,BYTES) \ 560d8b2de51Sgdamore void \ 561d8b2de51Sgdamore __CONCAT(au_wired_wrs_,BYTES)(void *v, \ 562d8b2de51Sgdamore bus_space_handle_t h, bus_size_t o, const TYPE *src, \ 563d8b2de51Sgdamore bus_size_t cnt) \ 564d8b2de51Sgdamore { \ 565d8b2de51Sgdamore \ 566d8b2de51Sgdamore while (cnt-- > 0) { \ 567d8b2de51Sgdamore __CONCAT(au_wired_ws_,BYTES)(v, h, o, *src++); \ 568d8b2de51Sgdamore o += BYTES; \ 569d8b2de51Sgdamore } \ 570d8b2de51Sgdamore } 571d8b2de51Sgdamore AU_WIRED_WRS(uint16_t,2) 572d8b2de51Sgdamore AU_WIRED_WRS(uint32_t,4) 573d8b2de51Sgdamore AU_WIRED_WRS(uint64_t,8) 574d8b2de51Sgdamore 575d8b2de51Sgdamore #define AU_WIRED_SM(TYPE,BYTES) \ 576d8b2de51Sgdamore void \ 577d8b2de51Sgdamore __CONCAT(au_wired_sm_,BYTES)(void *v, \ 578d8b2de51Sgdamore bus_space_handle_t h, bus_size_t o, TYPE val, \ 579d8b2de51Sgdamore bus_size_t cnt) \ 580d8b2de51Sgdamore { \ 581d8b2de51Sgdamore \ 582d8b2de51Sgdamore while (cnt-- > 0) { \ 583d8b2de51Sgdamore __CONCAT(au_wired_w_,BYTES)(v, h, o, val); \ 584d8b2de51Sgdamore wbflush(); \ 585d8b2de51Sgdamore } \ 586d8b2de51Sgdamore } 587d8b2de51Sgdamore AU_WIRED_SM(uint8_t,1) 588d8b2de51Sgdamore AU_WIRED_SM(uint16_t,2) 589d8b2de51Sgdamore AU_WIRED_SM(uint32_t,4) 590d8b2de51Sgdamore AU_WIRED_SM(uint64_t,8) 591d8b2de51Sgdamore 592d8b2de51Sgdamore #define AU_WIRED_SR(TYPE,BYTES) \ 593d8b2de51Sgdamore void \ 594d8b2de51Sgdamore __CONCAT(au_wired_sr_,BYTES)(void *v, \ 595d8b2de51Sgdamore bus_space_handle_t h, bus_size_t o, TYPE val, \ 596d8b2de51Sgdamore bus_size_t cnt) \ 597d8b2de51Sgdamore { \ 598d8b2de51Sgdamore \ 599d8b2de51Sgdamore while (cnt-- > 0) { \ 600d8b2de51Sgdamore __CONCAT(au_wired_w_,BYTES)(v, h, o, val); \ 601d8b2de51Sgdamore o += BYTES; \ 602d8b2de51Sgdamore } \ 603d8b2de51Sgdamore } 604d8b2de51Sgdamore AU_WIRED_SR(uint8_t,1) 605d8b2de51Sgdamore AU_WIRED_SR(uint16_t,2) 606d8b2de51Sgdamore AU_WIRED_SR(uint32_t,4) 607d8b2de51Sgdamore AU_WIRED_SR(uint64_t,8) 608d8b2de51Sgdamore 609d8b2de51Sgdamore 610d8b2de51Sgdamore #define AU_WIRED_C(TYPE,BYTES) \ 611d8b2de51Sgdamore void \ 612d8b2de51Sgdamore __CONCAT(au_wired_c_,BYTES)(void *v, \ 613d8b2de51Sgdamore bus_space_handle_t h1, bus_size_t o1, bus_space_handle_t h2, \ 614d8b2de51Sgdamore bus_space_handle_t o2, bus_size_t cnt) \ 615d8b2de51Sgdamore { \ 616d8b2de51Sgdamore volatile TYPE *src, *dst; \ 617d8b2de51Sgdamore src = (volatile TYPE *)(h1 + o1); \ 618d8b2de51Sgdamore dst = (volatile TYPE *)(h2 + o2); \ 619d8b2de51Sgdamore \ 620d8b2de51Sgdamore if (src >= dst) { \ 621d8b2de51Sgdamore while (cnt-- > 0) \ 622d8b2de51Sgdamore *dst++ = *src++; \ 623d8b2de51Sgdamore } else { \ 624d8b2de51Sgdamore src += cnt - 1; \ 625d8b2de51Sgdamore dst += cnt - 1; \ 626d8b2de51Sgdamore while (cnt-- > 0) \ 627d8b2de51Sgdamore *dst-- = *src--; \ 628d8b2de51Sgdamore } \ 629d8b2de51Sgdamore } 630d8b2de51Sgdamore AU_WIRED_C(uint8_t,1) 631d8b2de51Sgdamore AU_WIRED_C(uint16_t,2) 632d8b2de51Sgdamore AU_WIRED_C(uint32_t,4) 633d8b2de51Sgdamore AU_WIRED_C(uint64_t,8) 634d8b2de51Sgdamore 635d8b2de51Sgdamore 636d8b2de51Sgdamore void 637d8b2de51Sgdamore au_wired_space_init(bus_space_tag_t bst, const char *name, 638d8b2de51Sgdamore paddr_t paddr, bus_addr_t start, bus_size_t size, int flags) 639d8b2de51Sgdamore { 640d8b2de51Sgdamore au_wired_cookie_t *c; 641d8b2de51Sgdamore 642d8b2de51Sgdamore c = malloc(sizeof (struct au_wired_cookie), M_DEVBUF, 643d8b2de51Sgdamore M_NOWAIT | M_ZERO); 644d8b2de51Sgdamore 645d8b2de51Sgdamore c->c_pbase = paddr; 646d8b2de51Sgdamore c->c_name = name; 647d8b2de51Sgdamore c->c_start = start; 648d8b2de51Sgdamore c->c_size = size; 649d8b2de51Sgdamore 650d8b2de51Sgdamore /* allocate extent manager */ 651d8b2de51Sgdamore c->c_extent = extent_create(name, start, start + size, M_DEVBUF, 652d8b2de51Sgdamore (caddr_t)c->c_exstore, sizeof (c->c_exstore), EX_NOWAIT); 653d8b2de51Sgdamore if (c->c_extent == NULL) 654d8b2de51Sgdamore panic("au_wired_space_init: %s: cannot create extent", name); 655d8b2de51Sgdamore 656d8b2de51Sgdamore #if _BYTE_ORDER == _BIG_ENDIAN 657d8b2de51Sgdamore if (flags & AU_WIRED_SPACE_LITTLE_ENDIAN) { 658d8b2de51Sgdamore if (flags & AU_WIRED_SPACE_SWAP_HW) 659d8b2de51Sgdamore c->c_hwswap = 1; 660d8b2de51Sgdamore else 661d8b2de51Sgdamore c->c_swswap = 1; 662d8b2de51Sgdamore } 663d8b2de51Sgdamore 664d8b2de51Sgdamore #elif _BYTE_ORDER == _LITTLE_ENDIAN 665d8b2de51Sgdamore if (flags & AU_WIRED_SPACE_BIG_ENDIAN) { 666d8b2de51Sgdamore if (flags & AU_WIRED_SPACE_SWAP_HW) 667d8b2de51Sgdamore c->c_hwswap = 1; 668d8b2de51Sgdamore else 669d8b2de51Sgdamore c->c_swswap = 1; 670d8b2de51Sgdamore } 671d8b2de51Sgdamore #endif 672d8b2de51Sgdamore 673d8b2de51Sgdamore bst->bs_cookie = c; 674d8b2de51Sgdamore bst->bs_map = au_wired_map; 675d8b2de51Sgdamore bst->bs_unmap = au_wired_unmap; 676d8b2de51Sgdamore bst->bs_subregion = au_wired_subregion; 677d8b2de51Sgdamore bst->bs_translate = NULL; /* we don't use these */ 678d8b2de51Sgdamore bst->bs_get_window = NULL; /* we don't use these */ 679d8b2de51Sgdamore bst->bs_alloc = au_wired_alloc; 680d8b2de51Sgdamore bst->bs_free = au_wired_free; 681d8b2de51Sgdamore bst->bs_vaddr = au_wired_vaddr; 682d8b2de51Sgdamore bst->bs_mmap = au_wired_mmap; 683d8b2de51Sgdamore bst->bs_barrier = au_wired_barrier; 684d8b2de51Sgdamore bst->bs_r_1 = au_wired_r_1; 685d8b2de51Sgdamore bst->bs_w_1 = au_wired_w_1; 686d8b2de51Sgdamore bst->bs_r_2 = au_wired_r_2; 687d8b2de51Sgdamore bst->bs_r_4 = au_wired_r_4; 688d8b2de51Sgdamore bst->bs_r_8 = au_wired_r_8; 689d8b2de51Sgdamore bst->bs_w_2 = au_wired_w_2; 690d8b2de51Sgdamore bst->bs_w_4 = au_wired_w_4; 691d8b2de51Sgdamore bst->bs_w_8 = au_wired_w_8; 692d8b2de51Sgdamore bst->bs_rm_1 = au_wired_rm_1; 693d8b2de51Sgdamore bst->bs_rm_2 = au_wired_rm_2; 694d8b2de51Sgdamore bst->bs_rm_4 = au_wired_rm_4; 695d8b2de51Sgdamore bst->bs_rm_8 = au_wired_rm_8; 696d8b2de51Sgdamore bst->bs_rr_1 = au_wired_rr_1; 697d8b2de51Sgdamore bst->bs_rr_2 = au_wired_rr_2; 698d8b2de51Sgdamore bst->bs_rr_4 = au_wired_rr_4; 699d8b2de51Sgdamore bst->bs_rr_8 = au_wired_rr_8; 700d8b2de51Sgdamore bst->bs_wm_1 = au_wired_wm_1; 701d8b2de51Sgdamore bst->bs_wm_2 = au_wired_wm_2; 702d8b2de51Sgdamore bst->bs_wm_4 = au_wired_wm_4; 703d8b2de51Sgdamore bst->bs_wm_8 = au_wired_wm_8; 704d8b2de51Sgdamore bst->bs_wr_1 = au_wired_wr_1; 705d8b2de51Sgdamore bst->bs_wr_2 = au_wired_wr_2; 706d8b2de51Sgdamore bst->bs_wr_4 = au_wired_wr_4; 707d8b2de51Sgdamore bst->bs_wr_8 = au_wired_wr_8; 708d8b2de51Sgdamore bst->bs_sm_1 = au_wired_sm_1; 709d8b2de51Sgdamore bst->bs_sm_2 = au_wired_sm_2; 710d8b2de51Sgdamore bst->bs_sm_4 = au_wired_sm_4; 711d8b2de51Sgdamore bst->bs_sm_8 = au_wired_sm_8; 712d8b2de51Sgdamore bst->bs_sr_1 = au_wired_sr_1; 713d8b2de51Sgdamore bst->bs_sr_2 = au_wired_sr_2; 714d8b2de51Sgdamore bst->bs_sr_4 = au_wired_sr_4; 715d8b2de51Sgdamore bst->bs_sr_8 = au_wired_sr_8; 716d8b2de51Sgdamore bst->bs_c_1 = au_wired_c_1; 717d8b2de51Sgdamore bst->bs_c_2 = au_wired_c_2; 718d8b2de51Sgdamore bst->bs_c_4 = au_wired_c_4; 719d8b2de51Sgdamore bst->bs_c_8 = au_wired_c_8; 720d8b2de51Sgdamore 721d8b2de51Sgdamore bst->bs_rs_1 = au_wired_r_1; 722d8b2de51Sgdamore bst->bs_rs_2 = au_wired_rs_2; 723d8b2de51Sgdamore bst->bs_rs_4 = au_wired_rs_4; 724d8b2de51Sgdamore bst->bs_rs_8 = au_wired_rs_8; 725d8b2de51Sgdamore bst->bs_rms_1 = au_wired_rm_1; 726d8b2de51Sgdamore bst->bs_rms_2 = au_wired_rms_2; 727d8b2de51Sgdamore bst->bs_rms_4 = au_wired_rms_4; 728d8b2de51Sgdamore bst->bs_rms_8 = au_wired_rms_8; 729d8b2de51Sgdamore bst->bs_rrs_1 = au_wired_rr_1; 730d8b2de51Sgdamore bst->bs_rrs_2 = au_wired_rrs_2; 731d8b2de51Sgdamore bst->bs_rrs_4 = au_wired_rrs_4; 732d8b2de51Sgdamore bst->bs_rrs_8 = au_wired_rrs_8; 733d8b2de51Sgdamore bst->bs_ws_1 = au_wired_w_1; 734d8b2de51Sgdamore bst->bs_ws_2 = au_wired_ws_2; 735d8b2de51Sgdamore bst->bs_ws_4 = au_wired_ws_4; 736d8b2de51Sgdamore bst->bs_ws_8 = au_wired_ws_8; 737d8b2de51Sgdamore bst->bs_wms_1 = au_wired_wm_1; 738d8b2de51Sgdamore bst->bs_wms_2 = au_wired_wms_2; 739d8b2de51Sgdamore bst->bs_wms_4 = au_wired_wms_4; 740d8b2de51Sgdamore bst->bs_wms_8 = au_wired_wms_8; 741d8b2de51Sgdamore bst->bs_wrs_1 = au_wired_wr_1; 742d8b2de51Sgdamore bst->bs_wrs_2 = au_wired_wrs_2; 743d8b2de51Sgdamore bst->bs_wrs_4 = au_wired_wrs_4; 744d8b2de51Sgdamore bst->bs_wrs_8 = au_wired_wrs_8; 745d8b2de51Sgdamore } 746