be_bus.c revision 1.12
1/* $NetBSD: be_bus.c,v 1.12 2009/03/08 05:25:30 tsutsui Exp $ */ 2 3/*- 4 * Copyright (c) 1998 The NetBSD Foundation, Inc. 5 * All rights reserved. 6 * 7 * This code is derived from software contributed to The NetBSD Foundation 8 * by Leo Weppelman. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 * POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32#include <sys/cdefs.h> 33__KERNEL_RCSID(0, "$NetBSD: be_bus.c,v 1.12 2009/03/08 05:25:30 tsutsui Exp $"); 34 35#include <sys/types.h> 36#include <sys/param.h> 37#include <sys/systm.h> 38#include <sys/malloc.h> 39#include <machine/cpu.h> 40#include <machine/bus.h> 41 42/* 43 * This file contains the common functions for using a big endian (linear) 44 * bus on a big endian atari. 45 */ 46 47 /* Autoconf detection stuff */ 48static int beb_bus_space_peek_1(bus_space_tag_t, 49 bus_space_handle_t, bus_size_t); 50static int beb_bus_space_peek_2(bus_space_tag_t, 51 bus_space_handle_t, bus_size_t); 52static int beb_bus_space_peek_4(bus_space_tag_t, 53 bus_space_handle_t, bus_size_t); 54static int beb_bus_space_peek_8(bus_space_tag_t, 55 bus_space_handle_t, bus_size_t); 56 57 /* read (single) */ 58static uint8_t beb_bus_space_read_1(bus_space_tag_t, 59 bus_space_handle_t, bus_size_t); 60static uint16_t beb_bus_space_read_2(bus_space_tag_t, 61 bus_space_handle_t, bus_size_t); 62static uint32_t beb_bus_space_read_4(bus_space_tag_t, 63 bus_space_handle_t, bus_size_t); 64static uint64_t beb_bus_space_read_8(bus_space_tag_t, 65 bus_space_handle_t, bus_size_t); 66 67 /* write (single) */ 68static void beb_bus_space_write_1(bus_space_tag_t, 69 bus_space_handle_t, bus_size_t, uint8_t); 70static void beb_bus_space_write_2(bus_space_tag_t, 71 bus_space_handle_t, bus_size_t, uint16_t); 72static void beb_bus_space_write_4(bus_space_tag_t, 73 bus_space_handle_t, bus_size_t, uint32_t); 74static void beb_bus_space_write_8(bus_space_tag_t, 75 bus_space_handle_t, bus_size_t, uint64_t); 76 77 /* read multiple */ 78static void beb_bus_space_read_multi_1(bus_space_tag_t, 79 bus_space_handle_t, bus_size_t, uint8_t *, 80 bus_size_t); 81static void beb_bus_space_read_multi_2(bus_space_tag_t, 82 bus_space_handle_t, bus_size_t, uint16_t *, 83 bus_size_t); 84static void beb_bus_space_read_multi_4(bus_space_tag_t, 85 bus_space_handle_t, bus_size_t, uint32_t *, 86 bus_size_t); 87static void beb_bus_space_read_multi_8(bus_space_tag_t, 88 bus_space_handle_t, bus_size_t, uint64_t *, 89 bus_size_t); 90 91 /* write multiple */ 92static void beb_bus_space_write_multi_1(bus_space_tag_t, 93 bus_space_handle_t, bus_size_t, 94 const uint8_t *, bus_size_t); 95static void beb_bus_space_write_multi_2(bus_space_tag_t, 96 bus_space_handle_t, bus_size_t, 97 const uint16_t *, bus_size_t); 98static void beb_bus_space_write_multi_4(bus_space_tag_t, 99 bus_space_handle_t, bus_size_t, 100 const uint32_t *, bus_size_t); 101static void beb_bus_space_write_multi_8(bus_space_tag_t, 102 bus_space_handle_t, bus_size_t, 103 const uint64_t *, bus_size_t); 104 105 /* read region */ 106static void beb_bus_space_read_region_1(bus_space_tag_t, 107 bus_space_handle_t, bus_size_t, uint8_t *, 108 bus_size_t); 109static void beb_bus_space_read_region_2(bus_space_tag_t, 110 bus_space_handle_t, bus_size_t, uint16_t *, 111 bus_size_t); 112static void beb_bus_space_read_region_4(bus_space_tag_t, 113 bus_space_handle_t, bus_size_t, uint32_t *, 114 bus_size_t); 115static void beb_bus_space_read_region_8(bus_space_tag_t, 116 bus_space_handle_t, bus_size_t, uint64_t *, 117 bus_size_t); 118 119 /* read region */ 120static void beb_bus_space_write_region_1(bus_space_tag_t, 121 bus_space_handle_t, bus_size_t, 122 const uint8_t *, bus_size_t); 123static void beb_bus_space_write_region_2(bus_space_tag_t, 124 bus_space_handle_t, bus_size_t, 125 const uint16_t *, bus_size_t); 126static void beb_bus_space_write_region_4(bus_space_tag_t, 127 bus_space_handle_t, bus_size_t, 128 const uint32_t *, bus_size_t); 129static void beb_bus_space_write_region_8(bus_space_tag_t, 130 bus_space_handle_t, bus_size_t, 131 const uint64_t *, bus_size_t); 132 133 /* set multi */ 134static void beb_bus_space_set_multi_1(bus_space_tag_t, 135 bus_space_handle_t, bus_size_t, uint8_t, 136 bus_size_t); 137static void beb_bus_space_set_multi_2(bus_space_tag_t, 138 bus_space_handle_t, bus_size_t, uint16_t, 139 bus_size_t); 140static void beb_bus_space_set_multi_4(bus_space_tag_t, 141 bus_space_handle_t, bus_size_t, uint32_t, 142 bus_size_t); 143static void beb_bus_space_set_multi_8(bus_space_tag_t, 144 bus_space_handle_t, bus_size_t, uint64_t, 145 bus_size_t); 146 147 /* set region */ 148static void beb_bus_space_set_region_1(bus_space_tag_t, 149 bus_space_handle_t, bus_size_t, uint8_t, 150 bus_size_t); 151static void beb_bus_space_set_region_2(bus_space_tag_t, 152 bus_space_handle_t, bus_size_t, uint16_t, 153 bus_size_t); 154static void beb_bus_space_set_region_4(bus_space_tag_t, 155 bus_space_handle_t, bus_size_t, uint32_t, 156 bus_size_t); 157static void beb_bus_space_set_region_8(bus_space_tag_t, 158 bus_space_handle_t, bus_size_t, uint64_t, 159 bus_size_t); 160 161/* 162 * Don't force a function call overhead on these primitives... 163 */ 164#define __read_1(h, o) *((volatile uint8_t *)((h) + (o))) 165#define __read_2(h, o) *((volatile uint16_t *)((h) + (o))) 166#define __read_4(h, o) *((volatile uint32_t *)((h) + (o))) 167#define __read_8(h, o) *((volatile uint64_t *)((h) + (o))) 168 169#define __write_1(h, o, v) *((volatile uint8_t *)((h) + (o))) = (v) 170#define __write_2(h, o, v) *((volatile uint16_t *)((h) + (o))) = (v) 171#define __write_4(h, o, v) *((volatile uint32_t *)((h) + (o))) = (v) 172#define __write_8(h, o, v) *((volatile uint64_t *)((h) + (o))) = (v) 173 174bus_space_tag_t 175beb_alloc_bus_space_tag(bus_space_tag_t storage) 176{ 177 bus_space_tag_t beb_t; 178 179 /* 180 * Allow the caller to specify storage space for the tag. This 181 * is used during console config (when malloc() can't be used). 182 */ 183 if (storage != NULL) 184 beb_t = storage; 185 else { 186 if ((beb_t = malloc(sizeof(*beb_t), M_TEMP, M_NOWAIT)) == NULL) 187 return(NULL); 188 } 189 bzero(beb_t, sizeof(*beb_t)); 190 191 beb_t->abs_p_1 = beb_bus_space_peek_1; 192 beb_t->abs_p_2 = beb_bus_space_peek_2; 193 beb_t->abs_p_4 = beb_bus_space_peek_4; 194 beb_t->abs_p_8 = beb_bus_space_peek_8; 195 beb_t->abs_r_1 = beb_bus_space_read_1; 196 beb_t->abs_r_2 = beb_bus_space_read_2; 197 beb_t->abs_r_4 = beb_bus_space_read_4; 198 beb_t->abs_r_8 = beb_bus_space_read_8; 199 beb_t->abs_rs_1 = beb_bus_space_read_1; 200 beb_t->abs_rs_2 = beb_bus_space_read_2; 201 beb_t->abs_rs_4 = beb_bus_space_read_4; 202 beb_t->abs_rs_8 = beb_bus_space_read_8; 203 beb_t->abs_rm_1 = beb_bus_space_read_multi_1; 204 beb_t->abs_rm_2 = beb_bus_space_read_multi_2; 205 beb_t->abs_rm_4 = beb_bus_space_read_multi_4; 206 beb_t->abs_rm_8 = beb_bus_space_read_multi_8; 207 beb_t->abs_rms_1 = beb_bus_space_read_multi_1; 208 beb_t->abs_rms_2 = beb_bus_space_read_multi_2; 209 beb_t->abs_rms_4 = beb_bus_space_read_multi_4; 210 beb_t->abs_rms_8 = beb_bus_space_read_multi_8; 211 beb_t->abs_rr_1 = beb_bus_space_read_region_1; 212 beb_t->abs_rr_2 = beb_bus_space_read_region_2; 213 beb_t->abs_rr_4 = beb_bus_space_read_region_4; 214 beb_t->abs_rr_8 = beb_bus_space_read_region_8; 215 beb_t->abs_rrs_1 = beb_bus_space_read_region_1; 216 beb_t->abs_rrs_2 = beb_bus_space_read_region_2; 217 beb_t->abs_rrs_4 = beb_bus_space_read_region_4; 218 beb_t->abs_rrs_8 = beb_bus_space_read_region_8; 219 beb_t->abs_w_1 = beb_bus_space_write_1; 220 beb_t->abs_w_2 = beb_bus_space_write_2; 221 beb_t->abs_w_4 = beb_bus_space_write_4; 222 beb_t->abs_w_8 = beb_bus_space_write_8; 223 beb_t->abs_ws_1 = beb_bus_space_write_1; 224 beb_t->abs_ws_2 = beb_bus_space_write_2; 225 beb_t->abs_ws_4 = beb_bus_space_write_4; 226 beb_t->abs_ws_8 = beb_bus_space_write_8; 227 beb_t->abs_wm_1 = beb_bus_space_write_multi_1; 228 beb_t->abs_wm_2 = beb_bus_space_write_multi_2; 229 beb_t->abs_wm_4 = beb_bus_space_write_multi_4; 230 beb_t->abs_wm_8 = beb_bus_space_write_multi_8; 231 beb_t->abs_wms_1 = beb_bus_space_write_multi_1; 232 beb_t->abs_wms_2 = beb_bus_space_write_multi_2; 233 beb_t->abs_wms_4 = beb_bus_space_write_multi_4; 234 beb_t->abs_wms_8 = beb_bus_space_write_multi_8; 235 beb_t->abs_wr_1 = beb_bus_space_write_region_1; 236 beb_t->abs_wr_2 = beb_bus_space_write_region_2; 237 beb_t->abs_wr_4 = beb_bus_space_write_region_4; 238 beb_t->abs_wr_8 = beb_bus_space_write_region_8; 239 beb_t->abs_wrs_1 = beb_bus_space_write_region_1; 240 beb_t->abs_wrs_2 = beb_bus_space_write_region_2; 241 beb_t->abs_wrs_4 = beb_bus_space_write_region_4; 242 beb_t->abs_wrs_8 = beb_bus_space_write_region_8; 243 beb_t->abs_sm_1 = beb_bus_space_set_multi_1; 244 beb_t->abs_sm_2 = beb_bus_space_set_multi_2; 245 beb_t->abs_sm_4 = beb_bus_space_set_multi_4; 246 beb_t->abs_sm_8 = beb_bus_space_set_multi_8; 247 beb_t->abs_sr_1 = beb_bus_space_set_region_1; 248 beb_t->abs_sr_2 = beb_bus_space_set_region_2; 249 beb_t->abs_sr_4 = beb_bus_space_set_region_4; 250 beb_t->abs_sr_8 = beb_bus_space_set_region_8; 251 252 return beb_t; 253} 254 255 256/* 257 * The various access functions 258 */ 259 260/* 261 * int bus_space_peek_N(bus_space_tag_t tag, 262 * bus_space_handle_t sh, bus_size_t offset); 263 * 264 * Check if the address is suitable for reading N-byte quantities. 265 */ 266static int 267beb_bus_space_peek_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o) 268{ 269 270 return !badbaddr((void *)(h + o), 1); 271} 272 273static int 274beb_bus_space_peek_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o) 275{ 276 277 return !badbaddr((void *)(h + o), 2); 278} 279 280static int 281beb_bus_space_peek_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o) 282{ 283 284 return !badbaddr((void *)(h + o), 4); 285} 286 287static int 288beb_bus_space_peek_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o) 289{ 290 291 return !badbaddr((void *)(h + o), 8); 292} 293 294/* 295 * uintX_t bus_space_read_N(bus_space_tag_t tag, 296 * bus_space_handle_t bsh, bus_size_t offset); 297 * 298 * Return an 1, 2, 4, or 8 byte value read from the bus_space described 299 * by tag/handle at `offset'. The value is converted to host-endian. 300 */ 301static uint8_t 302beb_bus_space_read_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o) 303{ 304 305 return __read_1(h, o); 306} 307 308static uint16_t 309beb_bus_space_read_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o) 310{ 311 312 return __read_2(h, o); 313} 314 315static uint32_t 316beb_bus_space_read_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o) 317{ 318 319 return __read_4(h, o); 320} 321 322static uint64_t 323beb_bus_space_read_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o) 324{ 325 326 return __read_8(h, o); 327} 328 329/* 330 * uintX_t bus_space_write_N(bus_space_tag_t tag, 331 * bus_space_handle_t bsh, bus_size_t offset, uintX_t val); 332 * 333 * Write an 1, 2, 4, or 8 byte value to the bus_space described by tag/handle 334 * at `offset'. The value `val' is converted from host to bus endianness 335 * before being written. 336 */ 337static void 338beb_bus_space_write_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 339 uint8_t v) 340{ 341 342 __write_1(h, o, v); 343} 344 345static void 346beb_bus_space_write_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 347 uint16_t v) 348{ 349 350 __write_2(h, o, v); 351} 352 353static void 354beb_bus_space_write_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 355 uint32_t v) 356{ 357 358 __write_4(h, o, v); 359} 360 361static void 362beb_bus_space_write_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 363 uint64_t v) 364{ 365 366 __write_8(h, o, v); 367} 368 369/* 370 * void bus_space_read_multi_N(bus_space_tag_t tag, 371 * bus_space_handle_t bsh, bus_size_t offset, uintX_t *address, 372 * bus_size_t count); 373 * 374 * Read 'count' 1, 2, 4, or 8 byte values from the bus_space described by 375 * tag/handle at `offset' and store them in the address range starting at 376 * 'address'. The values are converted to CPU endian order before being 377 * being stored. 378 */ 379static void 380beb_bus_space_read_multi_1(bus_space_tag_t t, bus_space_handle_t h, 381 bus_size_t o, uint8_t *a, bus_size_t c) 382{ 383 384 for (; c; a++, c--) 385 *a = __read_1(h, o); 386} 387 388static void 389beb_bus_space_read_multi_2(bus_space_tag_t t, bus_space_handle_t h, 390 bus_size_t o, uint16_t *a, bus_size_t c) 391{ 392 393 for (; c; a++, c--) 394 *a = __read_2(h, o); 395} 396 397static void 398beb_bus_space_read_multi_4(bus_space_tag_t t, bus_space_handle_t h, 399 bus_size_t o, uint32_t *a, bus_size_t c) 400{ 401 402 for (; c; a++, c--) 403 *a = __read_4(h, o); 404} 405 406static void 407beb_bus_space_read_multi_8(bus_space_tag_t t, bus_space_handle_t h, 408 bus_size_t o, uint64_t *a, bus_size_t c) 409{ 410 411 for (; c; a++, c--) 412 *a = __read_8(h, o); 413} 414 415/* 416 * void bus_space_write_multi_N(bus_space_tag_t tag, 417 * bus_space_handle_t bsh, bus_size_t offset, 418 * const uintX_t *address, bus_size_t count); 419 * 420 * Write 'count' 1, 2, 4, or 8 byte values from the address range starting 421 * at 'address' to the bus_space described by tag/handle at `offset'. 422 * The values are converted to bus endian order before being written to 423 * the bus. 424 */ 425static void 426beb_bus_space_write_multi_1(bus_space_tag_t t, bus_space_handle_t h, 427 bus_size_t o, const uint8_t *a, bus_size_t c) 428{ 429 430 for (; c; a++, c--) 431 __write_1(h, o, *a); 432} 433 434static void 435beb_bus_space_write_multi_2(bus_space_tag_t t, bus_space_handle_t h, 436 bus_size_t o, const uint16_t *a, bus_size_t c) 437{ 438 439 for (; c; a++, c--) 440 __write_2(h, o, *a); 441} 442 443static void 444beb_bus_space_write_multi_4(bus_space_tag_t t, bus_space_handle_t h, 445 bus_size_t o, const uint32_t *a, bus_size_t c) 446{ 447 448 for (; c; a++, c--) 449 __write_4(h, o, *a); 450} 451 452static void 453beb_bus_space_write_multi_8(bus_space_tag_t t, bus_space_handle_t h, 454 bus_size_t o, const uint64_t *a, bus_size_t c) 455{ 456 457 for (; c; a++, c--) 458 __write_8(h, o, *a); 459} 460 461/* 462 * void bus_space_read_region_N(bus_space_tag_t tag, 463 * bus_space_handle_t bsh, bus_size_t offset, 464 * uintN_t *addr, bus_size_t count); 465 * 466 * Read `count' 1, 2, 4, or 8 byte quantities from bus space 467 * described by tag/handle and starting at `offset' and copy into 468 * buffer provided. 469 */ 470static void 471beb_bus_space_read_region_1(bus_space_tag_t t, bus_space_handle_t h, 472 bus_size_t o, uint8_t *a, bus_size_t c) 473{ 474 475 for (; c; a++, o++, c--) 476 *a = __read_1(h, o); 477} 478 479static void 480beb_bus_space_read_region_2(bus_space_tag_t t, bus_space_handle_t h, 481 bus_size_t o, uint16_t *a, bus_size_t c) 482{ 483 484 for (; c; a++, o += 2, c--) 485 *a = __read_2(h, o); 486} 487 488static void 489beb_bus_space_read_region_4(bus_space_tag_t t, bus_space_handle_t h, 490 bus_size_t o, uint32_t *a, bus_size_t c) 491{ 492 493 for (; c; a++, o += 4, c--) 494 *a = __read_4(h, o); 495} 496 497static void 498beb_bus_space_read_region_8(bus_space_tag_t t, bus_space_handle_t h, 499 bus_size_t o, uint64_t *a, bus_size_t c) 500{ 501 502 for (; c; a++, o += 8, c--) 503 *a = __read_8(h, o); 504} 505 506/* 507 * void bus_space_write_region_N(bus_space_tag_t tag, 508 * bus_space_handle_t bsh, bus_size_t offset, 509 * uintN_t *addr, bus_size_t count); 510 * 511 * Copy `count' 1, 2, 4, or 8 byte quantities from the buffer provided 512 * into the bus space described by tag/handle and starting at `offset'. 513 */ 514static void 515beb_bus_space_write_region_1(bus_space_tag_t t, bus_space_handle_t h, 516 bus_size_t o, const uint8_t *a, bus_size_t c) 517{ 518 519 for (; c; a++, o++, c--) 520 __write_1(h, o, *a); 521} 522 523static void 524beb_bus_space_write_region_2(bus_space_tag_t t, bus_space_handle_t h, 525 bus_size_t o, const uint16_t *a, bus_size_t c) 526{ 527 528 for (; c; a++, o += 2, c--) 529 __write_2(h, o, *a); 530} 531 532static void 533beb_bus_space_write_region_4(bus_space_tag_t t, bus_space_handle_t h, 534 bus_size_t o, const uint32_t *a, bus_size_t c) 535{ 536 537 for (; c; a++, o += 4, c--) 538 __write_4(h, o, *a); 539} 540 541static void 542beb_bus_space_write_region_8(bus_space_tag_t t, bus_space_handle_t h, 543 bus_size_t o, const uint64_t *a, bus_size_t c) 544{ 545 546 for (; c; a++, o += 8, c--) 547 __write_8(h, o, *a); 548} 549 550/* 551 * void bus_space_set_multi_N(bus_space_tag_t tag, 552 * bus_space_handle_t bsh, bus_size_t offset, uintN_t val, 553 * bus_size_t count); 554 * 555 * Write the 1, 2, 4, or 8 byte value `val' to bus space described 556 * by tag/handle/offset `count' times. 557 */ 558 559static void 560beb_bus_space_set_multi_1(bus_space_tag_t t, bus_space_handle_t h, 561 bus_size_t o, uint8_t v, bus_size_t c) 562{ 563 564 for (; c; c--) 565 __write_1(h, o, v); 566} 567 568static void 569beb_bus_space_set_multi_2(bus_space_tag_t t, bus_space_handle_t h, 570 bus_size_t o, uint16_t v, bus_size_t c) 571{ 572 573 for (; c; c--) 574 __write_2(h, o, v); 575} 576 577static void 578beb_bus_space_set_multi_4(bus_space_tag_t t, bus_space_handle_t h, 579 bus_size_t o, uint32_t v, bus_size_t c) 580{ 581 582 for (; c; c--) 583 __write_4(h, o, v); 584} 585 586static void 587beb_bus_space_set_multi_8(bus_space_tag_t t, bus_space_handle_t h, 588 bus_size_t o, uint64_t v, bus_size_t c) 589{ 590 591 for (; c; c--) 592 __write_8(h, o, v); 593} 594 595/* 596 * void bus_space_set_region_N(bus_space_tag_t tag, 597 * bus_space_handle_t bsh, bus_size_t offset, uintN_t val, 598 * bus_size_t count); 599 * 600 * Write `count' 1, 2, 4, or 8 byte value `val' to bus space described 601 * by tag/handle starting at `offset'. 602 */ 603static void 604beb_bus_space_set_region_1(bus_space_tag_t t, bus_space_handle_t h, 605 bus_size_t o, uint8_t v, bus_size_t c) 606{ 607 608 for (; c; o++, c--) 609 __write_1(h, o, v); 610} 611 612static void 613beb_bus_space_set_region_2(bus_space_tag_t t, bus_space_handle_t h, 614 bus_size_t o, uint16_t v, bus_size_t c) 615{ 616 617 for (; c; o += 2, c--) 618 __write_2(h, o, v); 619} 620 621static void 622beb_bus_space_set_region_4(bus_space_tag_t t, bus_space_handle_t h, 623 bus_size_t o, uint32_t v, bus_size_t c) 624{ 625 626 for (; c; o += 4, c--) 627 __write_4(h, o, v); 628} 629 630static void 631beb_bus_space_set_region_8(bus_space_tag_t t, bus_space_handle_t h, 632 bus_size_t o, uint64_t v, bus_size_t c) 633{ 634 635 for (; c; o += 8, c--) 636 __write_8(h, o, v); 637} 638