1198956Srrs/*- 2198956Srrs * Copyright (c) 2009 RMI Corporation 3198956Srrs * All rights reserved. 4198956Srrs * 5198956Srrs * Redistribution and use in source and binary forms, with or without 6198956Srrs * modification, are permitted provided that the following conditions 7198956Srrs * are met: 8198956Srrs * 1. Redistributions of source code must retain the above copyright 9198956Srrs * notice, this list of conditions and the following disclaimer. 10198956Srrs * 2. Redistributions in binary form must reproduce the above copyright 11198956Srrs * notice, this list of conditions and the following disclaimer in the 12198956Srrs * documentation and/or other materials provided with the distribution. 13198956Srrs * 14198956Srrs * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15198956Srrs * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16198956Srrs * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17198956Srrs * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18198956Srrs * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19198956Srrs * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20198956Srrs * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21198956Srrs * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22198956Srrs * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23198956Srrs * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24198956Srrs * SUCH DAMAGE. 25198956Srrs * 26198956Srrs * $FreeBSD$ 27198956Srrs */ 28198956Srrs#include <sys/cdefs.h> 29198956Srrs__FBSDID("$FreeBSD$"); 30198956Srrs 31198956Srrs#include <sys/param.h> 32198956Srrs#include <sys/systm.h> 33198956Srrs#include <sys/bus.h> 34198956Srrs#include <sys/kernel.h> 35204131Srrs#include <sys/endian.h> 36198956Srrs#include <sys/malloc.h> 37198956Srrs#include <sys/ktr.h> 38198956Srrs 39198956Srrs#include <vm/vm.h> 40198956Srrs#include <vm/pmap.h> 41198956Srrs#include <vm/vm_kern.h> 42198956Srrs#include <vm/vm_extern.h> 43198956Srrs 44198956Srrs#include <machine/bus.h> 45198956Srrs#include <machine/cache.h> 46198956Srrs 47198957Srrsstatic int 48198957Srrsrmi_bus_space_map(void *t, bus_addr_t addr, 49198957Srrs bus_size_t size, int flags, 50198957Srrs bus_space_handle_t * bshp); 51198956Srrs 52198957Srrsstatic void 53198957Srrsrmi_bus_space_unmap(void *t, bus_space_handle_t bsh, 54198957Srrs bus_size_t size); 55198956Srrs 56198957Srrsstatic int 57198957Srrsrmi_bus_space_subregion(void *t, 58198957Srrs bus_space_handle_t bsh, 59198957Srrs bus_size_t offset, bus_size_t size, 60198957Srrs bus_space_handle_t * nbshp); 61198956Srrs 62198957Srrsstatic u_int8_t 63198957Srrsrmi_bus_space_read_1(void *t, 64198957Srrs bus_space_handle_t handle, 65198957Srrs bus_size_t offset); 66198956Srrs 67198957Srrsstatic u_int16_t 68198957Srrsrmi_bus_space_read_2(void *t, 69198957Srrs bus_space_handle_t handle, 70198957Srrs bus_size_t offset); 71198956Srrs 72198957Srrsstatic u_int32_t 73198957Srrsrmi_bus_space_read_4(void *t, 74198957Srrs bus_space_handle_t handle, 75198957Srrs bus_size_t offset); 76198956Srrs 77198957Srrsstatic void 78198957Srrsrmi_bus_space_read_multi_1(void *t, 79198957Srrs bus_space_handle_t handle, 80198957Srrs bus_size_t offset, u_int8_t * addr, 81198957Srrs size_t count); 82198956Srrs 83198957Srrsstatic void 84198957Srrsrmi_bus_space_read_multi_2(void *t, 85198957Srrs bus_space_handle_t handle, 86198957Srrs bus_size_t offset, u_int16_t * addr, 87198957Srrs size_t count); 88198956Srrs 89198957Srrsstatic void 90198957Srrsrmi_bus_space_read_multi_4(void *t, 91198957Srrs bus_space_handle_t handle, 92198957Srrs bus_size_t offset, u_int32_t * addr, 93198957Srrs size_t count); 94198956Srrs 95198957Srrsstatic void 96198957Srrsrmi_bus_space_read_region_1(void *t, 97198957Srrs bus_space_handle_t bsh, 98198957Srrs bus_size_t offset, u_int8_t * addr, 99198957Srrs size_t count); 100198956Srrs 101198957Srrsstatic void 102198957Srrsrmi_bus_space_read_region_2(void *t, 103198957Srrs bus_space_handle_t bsh, 104198957Srrs bus_size_t offset, u_int16_t * addr, 105198957Srrs size_t count); 106198956Srrs 107198957Srrsstatic void 108198957Srrsrmi_bus_space_read_region_4(void *t, 109198957Srrs bus_space_handle_t bsh, 110198957Srrs bus_size_t offset, u_int32_t * addr, 111198957Srrs size_t count); 112198956Srrs 113198957Srrsstatic void 114198957Srrsrmi_bus_space_write_1(void *t, 115198957Srrs bus_space_handle_t handle, 116198957Srrs bus_size_t offset, u_int8_t value); 117198956Srrs 118198957Srrsstatic void 119198957Srrsrmi_bus_space_write_2(void *t, 120198957Srrs bus_space_handle_t handle, 121198957Srrs bus_size_t offset, u_int16_t value); 122198956Srrs 123198957Srrsstatic void 124198957Srrsrmi_bus_space_write_4(void *t, 125198957Srrs bus_space_handle_t handle, 126198957Srrs bus_size_t offset, u_int32_t value); 127198956Srrs 128198957Srrsstatic void 129198957Srrsrmi_bus_space_write_multi_1(void *t, 130198957Srrs bus_space_handle_t handle, 131198957Srrs bus_size_t offset, 132198957Srrs const u_int8_t * addr, 133198957Srrs size_t count); 134204131Srrs 135198957Srrsstatic void 136198957Srrsrmi_bus_space_write_multi_2(void *t, 137198957Srrs bus_space_handle_t handle, 138198957Srrs bus_size_t offset, 139198957Srrs const u_int16_t * addr, 140198957Srrs size_t count); 141198956Srrs 142198957Srrsstatic void 143198957Srrsrmi_bus_space_write_multi_4(void *t, 144198957Srrs bus_space_handle_t handle, 145198957Srrs bus_size_t offset, 146198957Srrs const u_int32_t * addr, 147198957Srrs size_t count); 148198956Srrs 149198957Srrsstatic void 150198957Srrsrmi_bus_space_write_region_2(void *t, 151198957Srrs bus_space_handle_t bsh, 152198957Srrs bus_size_t offset, 153198957Srrs const u_int16_t * addr, 154198957Srrs size_t count); 155198956Srrs 156198957Srrsstatic void 157198957Srrsrmi_bus_space_write_region_4(void *t, 158198957Srrs bus_space_handle_t bsh, 159198957Srrs bus_size_t offset, 160198957Srrs const u_int32_t * addr, 161198957Srrs size_t count); 162198956Srrs 163198956Srrs 164198957Srrsstatic void 165198957Srrsrmi_bus_space_set_region_2(void *t, 166198957Srrs bus_space_handle_t bsh, 167198957Srrs bus_size_t offset, u_int16_t value, 168198957Srrs size_t count); 169198957Srrsstatic void 170198957Srrsrmi_bus_space_set_region_4(void *t, 171198957Srrs bus_space_handle_t bsh, 172198957Srrs bus_size_t offset, u_int32_t value, 173198957Srrs size_t count); 174198956Srrs 175198957Srrsstatic void 176198957Srrsrmi_bus_space_barrier(void *tag __unused, bus_space_handle_t bsh __unused, 177198957Srrs bus_size_t offset __unused, bus_size_t len __unused, int flags); 178198956Srrs 179198957Srrsstatic void 180198957Srrsrmi_bus_space_copy_region_2(void *t, 181198957Srrs bus_space_handle_t bsh1, 182198957Srrs bus_size_t off1, 183198957Srrs bus_space_handle_t bsh2, 184198957Srrs bus_size_t off2, size_t count); 185198956Srrs 186198957Srrsu_int8_t 187198957Srrsrmi_bus_space_read_stream_1(void *t, bus_space_handle_t handle, 188198957Srrs bus_size_t offset); 189198956Srrs 190198957Srrsstatic u_int16_t 191198957Srrsrmi_bus_space_read_stream_2(void *t, bus_space_handle_t handle, 192198957Srrs bus_size_t offset); 193198956Srrs 194198957Srrsstatic u_int32_t 195198957Srrsrmi_bus_space_read_stream_4(void *t, bus_space_handle_t handle, 196198957Srrs bus_size_t offset); 197198957Srrsstatic void 198198957Srrsrmi_bus_space_read_multi_stream_1(void *t, 199198957Srrs bus_space_handle_t handle, 200198957Srrs bus_size_t offset, u_int8_t * addr, 201198957Srrs size_t count); 202198956Srrs 203198957Srrsstatic void 204198957Srrsrmi_bus_space_read_multi_stream_2(void *t, 205198957Srrs bus_space_handle_t handle, 206198957Srrs bus_size_t offset, u_int16_t * addr, 207198957Srrs size_t count); 208198956Srrs 209198957Srrsstatic void 210198957Srrsrmi_bus_space_read_multi_stream_4(void *t, 211198957Srrs bus_space_handle_t handle, 212198957Srrs bus_size_t offset, u_int32_t * addr, 213198957Srrs size_t count); 214198956Srrs 215198957Srrsvoid 216198957Srrsrmi_bus_space_write_stream_1(void *t, bus_space_handle_t bsh, 217198957Srrs bus_size_t offset, u_int8_t value); 218198957Srrsstatic void 219198957Srrsrmi_bus_space_write_stream_2(void *t, bus_space_handle_t handle, 220198957Srrs bus_size_t offset, u_int16_t value); 221198956Srrs 222198957Srrsstatic void 223198957Srrsrmi_bus_space_write_stream_4(void *t, bus_space_handle_t handle, 224198957Srrs bus_size_t offset, u_int32_t value); 225198956Srrs 226198957Srrsstatic void 227198957Srrsrmi_bus_space_write_multi_stream_1(void *t, 228198957Srrs bus_space_handle_t handle, 229198957Srrs bus_size_t offset, 230198957Srrs const u_int8_t * addr, 231198957Srrs size_t count); 232198957Srrsstatic void 233198957Srrsrmi_bus_space_write_multi_stream_2(void *t, 234198957Srrs bus_space_handle_t handle, 235198957Srrs bus_size_t offset, 236198957Srrs const u_int16_t * addr, 237198957Srrs size_t count); 238198956Srrs 239198957Srrsstatic void 240198957Srrsrmi_bus_space_write_multi_stream_4(void *t, 241198957Srrs bus_space_handle_t handle, 242198957Srrs bus_size_t offset, 243198957Srrs const u_int32_t * addr, 244198957Srrs size_t count); 245198956Srrs 246204131Srrs#define TODO() printf("XLR memory bus space function '%s' unimplemented\n", __func__) 247204131Srrs 248198956Srrsstatic struct bus_space local_rmi_bus_space = { 249198956Srrs /* cookie */ 250198957Srrs (void *)0, 251198956Srrs 252198956Srrs /* mapping/unmapping */ 253198956Srrs rmi_bus_space_map, 254198956Srrs rmi_bus_space_unmap, 255198956Srrs rmi_bus_space_subregion, 256198956Srrs 257198956Srrs /* allocation/deallocation */ 258198956Srrs NULL, 259198956Srrs NULL, 260198956Srrs 261198956Srrs /* barrier */ 262198957Srrs rmi_bus_space_barrier, 263198956Srrs 264198956Srrs /* read (single) */ 265198956Srrs rmi_bus_space_read_1, 266198956Srrs rmi_bus_space_read_2, 267198956Srrs rmi_bus_space_read_4, 268198956Srrs NULL, 269198956Srrs 270198956Srrs /* read multiple */ 271198956Srrs rmi_bus_space_read_multi_1, 272198956Srrs rmi_bus_space_read_multi_2, 273198956Srrs rmi_bus_space_read_multi_4, 274198956Srrs NULL, 275198956Srrs 276198956Srrs /* read region */ 277198956Srrs rmi_bus_space_read_region_1, 278198956Srrs rmi_bus_space_read_region_2, 279198956Srrs rmi_bus_space_read_region_4, 280198956Srrs NULL, 281198956Srrs 282198956Srrs /* write (single) */ 283198956Srrs rmi_bus_space_write_1, 284198956Srrs rmi_bus_space_write_2, 285198956Srrs rmi_bus_space_write_4, 286198956Srrs NULL, 287198956Srrs 288198956Srrs /* write multiple */ 289198956Srrs rmi_bus_space_write_multi_1, 290198956Srrs rmi_bus_space_write_multi_2, 291198956Srrs rmi_bus_space_write_multi_4, 292198956Srrs NULL, 293198956Srrs 294198956Srrs /* write region */ 295198956Srrs NULL, 296198956Srrs rmi_bus_space_write_region_2, 297198956Srrs rmi_bus_space_write_region_4, 298198956Srrs NULL, 299198956Srrs 300198956Srrs /* set multiple */ 301198956Srrs NULL, 302198956Srrs NULL, 303198956Srrs NULL, 304198956Srrs NULL, 305198956Srrs 306198956Srrs /* set region */ 307198956Srrs NULL, 308198956Srrs rmi_bus_space_set_region_2, 309198956Srrs rmi_bus_space_set_region_4, 310198956Srrs NULL, 311198956Srrs 312198956Srrs /* copy */ 313198956Srrs NULL, 314198956Srrs rmi_bus_space_copy_region_2, 315198956Srrs NULL, 316198956Srrs NULL, 317198956Srrs 318198956Srrs /* read (single) stream */ 319198956Srrs rmi_bus_space_read_stream_1, 320198956Srrs rmi_bus_space_read_stream_2, 321198956Srrs rmi_bus_space_read_stream_4, 322198956Srrs NULL, 323198956Srrs 324198956Srrs /* read multiple stream */ 325198956Srrs rmi_bus_space_read_multi_stream_1, 326198956Srrs rmi_bus_space_read_multi_stream_2, 327198956Srrs rmi_bus_space_read_multi_stream_4, 328198956Srrs NULL, 329198956Srrs 330198956Srrs /* read region stream */ 331198956Srrs rmi_bus_space_read_region_1, 332198956Srrs rmi_bus_space_read_region_2, 333198956Srrs rmi_bus_space_read_region_4, 334198956Srrs NULL, 335198956Srrs 336198956Srrs /* write (single) stream */ 337198956Srrs rmi_bus_space_write_stream_1, 338198956Srrs rmi_bus_space_write_stream_2, 339198956Srrs rmi_bus_space_write_stream_4, 340198956Srrs NULL, 341198956Srrs 342198956Srrs /* write multiple stream */ 343198956Srrs rmi_bus_space_write_multi_stream_1, 344198956Srrs rmi_bus_space_write_multi_stream_2, 345198956Srrs rmi_bus_space_write_multi_stream_4, 346198956Srrs NULL, 347198956Srrs 348198956Srrs /* write region stream */ 349198956Srrs NULL, 350198956Srrs rmi_bus_space_write_region_2, 351198956Srrs rmi_bus_space_write_region_4, 352198956Srrs NULL, 353198956Srrs}; 354198956Srrs 355198956Srrs/* generic bus_space tag */ 356198956Srrsbus_space_tag_t rmi_bus_space = &local_rmi_bus_space; 357198956Srrs 358198956Srrs/* 359198956Srrs * Map a region of device bus space into CPU virtual address space. 360198956Srrs */ 361198956Srrsstatic int 362198956Srrsrmi_bus_space_map(void *t __unused, bus_addr_t addr, 363198957Srrs bus_size_t size __unused, int flags __unused, 364198957Srrs bus_space_handle_t * bshp) 365198956Srrs{ 366198956Srrs 367198956Srrs *bshp = addr; 368198956Srrs return (0); 369198956Srrs} 370198956Srrs 371198956Srrs/* 372198956Srrs * Unmap a region of device bus space. 373198956Srrs */ 374198956Srrsstatic void 375198956Srrsrmi_bus_space_unmap(void *t __unused, bus_space_handle_t bsh __unused, 376198957Srrs bus_size_t size __unused) 377198956Srrs{ 378198956Srrs} 379198956Srrs 380198956Srrs/* 381198956Srrs * Get a new handle for a subregion of an already-mapped area of bus space. 382198956Srrs */ 383198956Srrs 384198956Srrsstatic int 385198956Srrsrmi_bus_space_subregion(void *t __unused, bus_space_handle_t bsh, 386198957Srrs bus_size_t offset, bus_size_t size __unused, 387198957Srrs bus_space_handle_t * nbshp) 388198956Srrs{ 389198956Srrs *nbshp = bsh + offset; 390198956Srrs return (0); 391198956Srrs} 392198956Srrs 393198956Srrs/* 394198956Srrs * Read a 1, 2, 4, or 8 byte quantity from bus space 395198956Srrs * described by tag/handle/offset. 396198956Srrs */ 397198956Srrs 398198956Srrsstatic u_int8_t 399198956Srrsrmi_bus_space_read_1(void *tag, bus_space_handle_t handle, 400198957Srrs bus_size_t offset) 401198956Srrs{ 402204131Srrs return (u_int8_t) (*(volatile u_int32_t *)(handle + offset)); 403198956Srrs} 404198956Srrs 405198956Srrsstatic u_int16_t 406198956Srrsrmi_bus_space_read_2(void *tag, bus_space_handle_t handle, 407198957Srrs bus_size_t offset) 408198956Srrs{ 409204131Srrs return (u_int16_t)(*(volatile u_int32_t *)(handle + offset)); 410198956Srrs} 411198956Srrs 412198956Srrsstatic u_int32_t 413198956Srrsrmi_bus_space_read_4(void *tag, bus_space_handle_t handle, 414198957Srrs bus_size_t offset) 415198956Srrs{ 416204131Srrs return (*(volatile u_int32_t *)(handle + offset)); 417198956Srrs} 418198956Srrs 419198956Srrs 420198956Srrs/* 421198956Srrs * Read `count' 1, 2, 4, or 8 byte quantities from bus space 422198956Srrs * described by tag/handle/offset and copy into buffer provided. 423198956Srrs */ 424198956Srrsstatic void 425198956Srrsrmi_bus_space_read_multi_1(void *tag, bus_space_handle_t handle, 426198957Srrs bus_size_t offset, u_int8_t * addr, size_t count) 427198956Srrs{ 428204131Srrs TODO(); 429198956Srrs} 430198956Srrs 431198956Srrsstatic void 432198956Srrsrmi_bus_space_read_multi_2(void *tag, bus_space_handle_t handle, 433198957Srrs bus_size_t offset, u_int16_t * addr, size_t count) 434198956Srrs{ 435204131Srrs TODO(); 436198956Srrs} 437198956Srrs 438198956Srrsstatic void 439198956Srrsrmi_bus_space_read_multi_4(void *tag, bus_space_handle_t handle, 440198957Srrs bus_size_t offset, u_int32_t * addr, size_t count) 441198956Srrs{ 442204131Srrs TODO(); 443198956Srrs} 444198956Srrs 445198956Srrs/* 446198956Srrs * Write the 1, 2, 4, or 8 byte value `value' to bus space 447198956Srrs * described by tag/handle/offset. 448198956Srrs */ 449198956Srrs 450198956Srrsstatic void 451198956Srrsrmi_bus_space_write_1(void *tag, bus_space_handle_t handle, 452198957Srrs bus_size_t offset, u_int8_t value) 453198956Srrs{ 454204131Srrs *(volatile u_int32_t *)(handle + offset) = (u_int32_t)value; 455198956Srrs} 456198956Srrs 457198956Srrsstatic void 458198956Srrsrmi_bus_space_write_2(void *tag, bus_space_handle_t handle, 459198957Srrs bus_size_t offset, u_int16_t value) 460198956Srrs{ 461204131Srrs *(volatile u_int32_t *)(handle + offset) = (u_int32_t)value; 462198956Srrs} 463198956Srrs 464198956Srrsstatic void 465198956Srrsrmi_bus_space_write_4(void *tag, bus_space_handle_t handle, 466198957Srrs bus_size_t offset, u_int32_t value) 467198956Srrs{ 468204131Srrs *(volatile u_int32_t *)(handle + offset) = value; 469198956Srrs} 470198956Srrs 471198956Srrs 472198956Srrs/* 473198956Srrs * Write `count' 1, 2, 4, or 8 byte quantities from the buffer 474198956Srrs * provided to bus space described by tag/handle/offset. 475198956Srrs */ 476198956Srrs 477198956Srrs 478198956Srrsstatic void 479198956Srrsrmi_bus_space_write_multi_1(void *tag, bus_space_handle_t handle, 480198957Srrs bus_size_t offset, const u_int8_t * addr, size_t count) 481198956Srrs{ 482204131Srrs TODO(); 483198956Srrs} 484198956Srrs 485198956Srrsstatic void 486198956Srrsrmi_bus_space_write_multi_2(void *tag, bus_space_handle_t handle, 487198957Srrs bus_size_t offset, const u_int16_t * addr, size_t count) 488198956Srrs{ 489204131Srrs TODO(); 490198956Srrs} 491198956Srrs 492198956Srrsstatic void 493198956Srrsrmi_bus_space_write_multi_4(void *tag, bus_space_handle_t handle, 494198957Srrs bus_size_t offset, const u_int32_t * addr, size_t count) 495198956Srrs{ 496204131Srrs TODO(); 497198956Srrs} 498198956Srrs 499198956Srrs/* 500198956Srrs * Write `count' 1, 2, 4, or 8 byte value `val' to bus space described 501198956Srrs * by tag/handle starting at `offset'. 502198956Srrs */ 503198956Srrs 504198956Srrsstatic void 505198956Srrsrmi_bus_space_set_region_2(void *t, bus_space_handle_t bsh, 506198957Srrs bus_size_t offset, u_int16_t value, size_t count) 507198956Srrs{ 508198956Srrs bus_addr_t addr = bsh + offset; 509198956Srrs 510198956Srrs for (; count != 0; count--, addr += 2) 511204131Srrs (*(volatile u_int32_t *)(addr)) = value; 512198956Srrs} 513198956Srrs 514198956Srrsstatic void 515198956Srrsrmi_bus_space_set_region_4(void *t, bus_space_handle_t bsh, 516198957Srrs bus_size_t offset, u_int32_t value, size_t count) 517198956Srrs{ 518198956Srrs bus_addr_t addr = bsh + offset; 519198956Srrs 520198956Srrs for (; count != 0; count--, addr += 4) 521198956Srrs (*(volatile u_int32_t *)(addr)) = value; 522198956Srrs} 523198956Srrs 524198956Srrs 525198956Srrs/* 526198956Srrs * Copy `count' 1, 2, 4, or 8 byte values from bus space starting 527198956Srrs * at tag/bsh1/off1 to bus space starting at tag/bsh2/off2. 528198956Srrs */ 529198956Srrsstatic void 530198956Srrsrmi_bus_space_copy_region_2(void *t, bus_space_handle_t bsh1, 531198957Srrs bus_size_t off1, bus_space_handle_t bsh2, 532198957Srrs bus_size_t off2, size_t count) 533198956Srrs{ 534198956Srrs printf("bus_space_copy_region_2 - unimplemented\n"); 535198956Srrs} 536198956Srrs 537198956Srrs/* 538198956Srrs * Read `count' 1, 2, 4, or 8 byte quantities from bus space 539198956Srrs * described by tag/handle/offset and copy into buffer provided. 540198956Srrs */ 541198956Srrs 542198956Srrsu_int8_t 543198956Srrsrmi_bus_space_read_stream_1(void *t, bus_space_handle_t handle, 544198956Srrs bus_size_t offset) 545198956Srrs{ 546198956Srrs 547198956Srrs return *((volatile u_int8_t *)(handle + offset)); 548198956Srrs} 549198956Srrs 550198956Srrs 551198956Srrsstatic u_int16_t 552198956Srrsrmi_bus_space_read_stream_2(void *t, bus_space_handle_t handle, 553198957Srrs bus_size_t offset) 554198956Srrs{ 555198957Srrs return *(volatile u_int16_t *)(handle + offset); 556198956Srrs} 557198956Srrs 558198956Srrs 559198956Srrsstatic u_int32_t 560198956Srrsrmi_bus_space_read_stream_4(void *t, bus_space_handle_t handle, 561198957Srrs bus_size_t offset) 562198956Srrs{ 563198957Srrs return (*(volatile u_int32_t *)(handle + offset)); 564198956Srrs} 565198956Srrs 566198956Srrs 567198956Srrsstatic void 568198956Srrsrmi_bus_space_read_multi_stream_1(void *tag, bus_space_handle_t handle, 569198957Srrs bus_size_t offset, u_int8_t * addr, size_t count) 570198956Srrs{ 571204131Srrs TODO(); 572198956Srrs} 573198956Srrs 574198956Srrsstatic void 575198956Srrsrmi_bus_space_read_multi_stream_2(void *tag, bus_space_handle_t handle, 576198957Srrs bus_size_t offset, u_int16_t * addr, size_t count) 577198956Srrs{ 578204131Srrs TODO(); 579198956Srrs} 580198956Srrs 581198956Srrsstatic void 582198956Srrsrmi_bus_space_read_multi_stream_4(void *tag, bus_space_handle_t handle, 583198957Srrs bus_size_t offset, u_int32_t * addr, size_t count) 584198956Srrs{ 585204131Srrs TODO(); 586198956Srrs} 587198956Srrs 588198956Srrs 589198956Srrs/* 590198956Srrs * Read `count' 1, 2, 4, or 8 byte quantities from bus space 591198956Srrs * described by tag/handle and starting at `offset' and copy into 592198956Srrs * buffer provided. 593198956Srrs */ 594198956Srrsvoid 595198956Srrsrmi_bus_space_read_region_1(void *t, bus_space_handle_t bsh, 596198957Srrs bus_size_t offset, u_int8_t * addr, size_t count) 597198956Srrs{ 598204131Srrs TODO(); 599198956Srrs} 600198956Srrs 601198956Srrsvoid 602198956Srrsrmi_bus_space_read_region_2(void *t, bus_space_handle_t bsh, 603198957Srrs bus_size_t offset, u_int16_t * addr, size_t count) 604198956Srrs{ 605204131Srrs TODO(); 606198956Srrs} 607198956Srrs 608198956Srrsvoid 609198956Srrsrmi_bus_space_read_region_4(void *t, bus_space_handle_t bsh, 610198957Srrs bus_size_t offset, u_int32_t * addr, size_t count) 611198956Srrs{ 612198956Srrs bus_addr_t baddr = bsh + offset; 613198956Srrs 614198956Srrs while (count--) { 615198956Srrs *addr++ = (*(volatile u_int32_t *)(baddr)); 616198956Srrs baddr += 4; 617198956Srrs } 618198956Srrs} 619198956Srrs 620198956Srrsvoid 621198956Srrsrmi_bus_space_write_stream_1(void *t, bus_space_handle_t handle, 622198956Srrs bus_size_t offset, u_int8_t value) 623198956Srrs{ 624204131Srrs TODO(); 625198956Srrs} 626198956Srrs 627198956Srrs 628198956Srrsstatic void 629198956Srrsrmi_bus_space_write_stream_2(void *t, bus_space_handle_t handle, 630198957Srrs bus_size_t offset, u_int16_t value) 631198956Srrs{ 632204131Srrs TODO(); 633198956Srrs} 634198956Srrs 635198956Srrs 636198956Srrsstatic void 637198956Srrsrmi_bus_space_write_stream_4(void *t, bus_space_handle_t handle, 638198957Srrs bus_size_t offset, u_int32_t value) 639198956Srrs{ 640204131Srrs TODO(); 641198956Srrs} 642198956Srrs 643198956Srrs 644198956Srrsstatic void 645198956Srrsrmi_bus_space_write_multi_stream_1(void *tag, bus_space_handle_t handle, 646198957Srrs bus_size_t offset, const u_int8_t * addr, size_t count) 647198956Srrs{ 648204131Srrs TODO(); 649198956Srrs} 650198956Srrs 651198956Srrsstatic void 652198956Srrsrmi_bus_space_write_multi_stream_2(void *tag, bus_space_handle_t handle, 653198957Srrs bus_size_t offset, const u_int16_t * addr, size_t count) 654198956Srrs{ 655204131Srrs TODO(); 656198956Srrs} 657198956Srrs 658198956Srrsstatic void 659198956Srrsrmi_bus_space_write_multi_stream_4(void *tag, bus_space_handle_t handle, 660198957Srrs bus_size_t offset, const u_int32_t * addr, size_t count) 661198956Srrs{ 662204131Srrs TODO(); 663198956Srrs} 664198956Srrs 665198956Srrsvoid 666198956Srrsrmi_bus_space_write_region_2(void *t, 667198957Srrs bus_space_handle_t bsh, 668198957Srrs bus_size_t offset, 669198957Srrs const u_int16_t * addr, 670198957Srrs size_t count) 671198956Srrs{ 672204131Srrs TODO(); 673198956Srrs} 674198956Srrs 675198956Srrsvoid 676198956Srrsrmi_bus_space_write_region_4(void *t, bus_space_handle_t bsh, 677198957Srrs bus_size_t offset, const u_int32_t * addr, size_t count) 678198956Srrs{ 679204131Srrs TODO(); 680198956Srrs} 681198956Srrs 682198956Srrsstatic void 683198956Srrsrmi_bus_space_barrier(void *tag __unused, bus_space_handle_t bsh __unused, 684198957Srrs bus_size_t offset __unused, bus_size_t len __unused, int flags) 685198956Srrs{ 686198956Srrs} 687