The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/mips/nlm/bus_space_rmi_pci.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
    3  *
    4  * Copyright 2003-2011 Netlogic Microsystems (Netlogic). All rights
    5  * reserved.
    6  *
    7  * Redistribution and use in source and binary forms, with or without
    8  * modification, are permitted provided that the following conditions are
    9  * met:
   10  *
   11  * 1. Redistributions of source code must retain the above copyright
   12  *    notice, this list of conditions and the following disclaimer.
   13  * 2. Redistributions in binary form must reproduce the above copyright
   14  *    notice, this list of conditions and the following disclaimer in
   15  *    the documentation and/or other materials provided with the
   16  *    distribution.
   17  *
   18  * THIS SOFTWARE IS PROVIDED BY Netlogic Microsystems ``AS IS'' AND
   19  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   21  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NETLOGIC OR CONTRIBUTORS BE
   22  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   23  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   24  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   25  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   26  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   27  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
   28  * THE POSSIBILITY OF SUCH DAMAGE.
   29  *
   30  * NETLOGIC_BSD */
   31 
   32 #include <sys/cdefs.h>
   33 __FBSDID("$FreeBSD$");
   34 
   35 #include <sys/param.h>
   36 #include <sys/systm.h>
   37 #include <sys/bus.h>
   38 #include <sys/kernel.h>
   39 #include <sys/endian.h>
   40 #include <sys/malloc.h>
   41 #include <sys/ktr.h>
   42 
   43 #include <vm/vm.h>
   44 #include <vm/pmap.h>
   45 #include <vm/vm_kern.h>
   46 #include <vm/vm_extern.h>
   47 
   48 #include <machine/bus.h>
   49 #include <machine/cache.h>
   50 
   51 static int
   52 rmi_pci_bus_space_map(void *t, bus_addr_t addr,
   53     bus_size_t size, int flags,
   54     bus_space_handle_t * bshp);
   55 
   56 static void
   57 rmi_pci_bus_space_unmap(void *t, bus_space_handle_t bsh,
   58     bus_size_t size);
   59 
   60 static int
   61 rmi_pci_bus_space_subregion(void *t,
   62     bus_space_handle_t bsh,
   63     bus_size_t offset, bus_size_t size,
   64     bus_space_handle_t * nbshp);
   65 
   66 static u_int8_t
   67 rmi_pci_bus_space_read_1(void *t,
   68     bus_space_handle_t handle,
   69     bus_size_t offset);
   70 
   71 static u_int16_t
   72 rmi_pci_bus_space_read_2(void *t,
   73     bus_space_handle_t handle,
   74     bus_size_t offset);
   75 
   76 static u_int32_t
   77 rmi_pci_bus_space_read_4(void *t,
   78     bus_space_handle_t handle,
   79     bus_size_t offset);
   80 
   81 static void
   82 rmi_pci_bus_space_read_multi_1(void *t,
   83     bus_space_handle_t handle,
   84     bus_size_t offset, u_int8_t * addr,
   85     size_t count);
   86 
   87 static void
   88 rmi_pci_bus_space_read_multi_2(void *t,
   89     bus_space_handle_t handle,
   90     bus_size_t offset, u_int16_t * addr,
   91     size_t count);
   92 
   93 static void
   94 rmi_pci_bus_space_read_multi_4(void *t,
   95     bus_space_handle_t handle,
   96     bus_size_t offset, u_int32_t * addr,
   97     size_t count);
   98 
   99 static void
  100 rmi_pci_bus_space_read_region_1(void *t,
  101     bus_space_handle_t bsh,
  102     bus_size_t offset, u_int8_t * addr,
  103     size_t count);
  104 
  105 static void
  106 rmi_pci_bus_space_read_region_2(void *t,
  107     bus_space_handle_t bsh,
  108     bus_size_t offset, u_int16_t * addr,
  109     size_t count);
  110 
  111 static void
  112 rmi_pci_bus_space_read_region_4(void *t,
  113     bus_space_handle_t bsh,
  114     bus_size_t offset, u_int32_t * addr,
  115     size_t count);
  116 
  117 static void
  118 rmi_pci_bus_space_write_1(void *t,
  119     bus_space_handle_t handle,
  120     bus_size_t offset, u_int8_t value);
  121 
  122 static void
  123 rmi_pci_bus_space_write_2(void *t,
  124     bus_space_handle_t handle,
  125     bus_size_t offset, u_int16_t value);
  126 
  127 static void
  128 rmi_pci_bus_space_write_4(void *t,
  129     bus_space_handle_t handle,
  130     bus_size_t offset, u_int32_t value);
  131 
  132 static void
  133 rmi_pci_bus_space_write_multi_1(void *t,
  134     bus_space_handle_t handle,
  135     bus_size_t offset,
  136     const u_int8_t * addr,
  137     size_t count);
  138 
  139 static void
  140 rmi_pci_bus_space_write_multi_2(void *t,
  141     bus_space_handle_t handle,
  142     bus_size_t offset,
  143     const u_int16_t * addr,
  144     size_t count);
  145 
  146 static void
  147 rmi_pci_bus_space_write_multi_4(void *t,
  148     bus_space_handle_t handle,
  149     bus_size_t offset,
  150     const u_int32_t * addr,
  151     size_t count);
  152 
  153 static void
  154 rmi_pci_bus_space_write_region_2(void *t,
  155     bus_space_handle_t bsh,
  156     bus_size_t offset,
  157     const u_int16_t * addr,
  158     size_t count);
  159 
  160 static void
  161 rmi_pci_bus_space_write_region_4(void *t,
  162     bus_space_handle_t bsh,
  163     bus_size_t offset,
  164     const u_int32_t * addr,
  165     size_t count);
  166 
  167 static void
  168 rmi_pci_bus_space_set_region_2(void *t,
  169     bus_space_handle_t bsh,
  170     bus_size_t offset, u_int16_t value,
  171     size_t count);
  172 
  173 static void
  174 rmi_pci_bus_space_set_region_4(void *t,
  175     bus_space_handle_t bsh,
  176     bus_size_t offset, u_int32_t value,
  177     size_t count);
  178 
  179 static void
  180 rmi_pci_bus_space_barrier(void *tag __unused, bus_space_handle_t bsh __unused,
  181     bus_size_t offset __unused, bus_size_t len __unused, int flags);
  182 
  183 static void
  184 rmi_pci_bus_space_copy_region_2(void *t,
  185     bus_space_handle_t bsh1,
  186     bus_size_t off1,
  187     bus_space_handle_t bsh2,
  188     bus_size_t off2, size_t count);
  189 
  190 u_int8_t
  191 rmi_pci_bus_space_read_stream_1(void *t, bus_space_handle_t handle,
  192     bus_size_t offset);
  193 
  194 static u_int16_t
  195 rmi_pci_bus_space_read_stream_2(void *t, bus_space_handle_t handle,
  196     bus_size_t offset);
  197 
  198 static u_int32_t
  199 rmi_pci_bus_space_read_stream_4(void *t, bus_space_handle_t handle,
  200     bus_size_t offset);
  201 
  202 static void
  203 rmi_pci_bus_space_read_multi_stream_1(void *t,
  204     bus_space_handle_t handle,
  205     bus_size_t offset, u_int8_t * addr,
  206     size_t count);
  207 
  208 static void
  209 rmi_pci_bus_space_read_multi_stream_2(void *t,
  210     bus_space_handle_t handle,
  211     bus_size_t offset, u_int16_t * addr,
  212     size_t count);
  213 
  214 static void
  215 rmi_pci_bus_space_read_multi_stream_4(void *t,
  216     bus_space_handle_t handle,
  217     bus_size_t offset, u_int32_t * addr,
  218     size_t count);
  219 
  220 void
  221 rmi_pci_bus_space_write_stream_1(void *t, bus_space_handle_t bsh,
  222     bus_size_t offset, u_int8_t value);
  223 
  224 static void
  225 rmi_pci_bus_space_write_stream_2(void *t, bus_space_handle_t handle,
  226     bus_size_t offset, u_int16_t value);
  227 
  228 static void
  229 rmi_pci_bus_space_write_stream_4(void *t, bus_space_handle_t handle,
  230     bus_size_t offset, u_int32_t value);
  231 
  232 static void
  233 rmi_pci_bus_space_write_multi_stream_1(void *t,
  234     bus_space_handle_t handle,
  235     bus_size_t offset,
  236     const u_int8_t * addr,
  237     size_t count);
  238 
  239 static void
  240 rmi_pci_bus_space_write_multi_stream_2(void *t,
  241     bus_space_handle_t handle,
  242     bus_size_t offset,
  243     const u_int16_t * addr,
  244     size_t count);
  245 
  246 static void
  247 rmi_pci_bus_space_write_multi_stream_4(void *t,
  248     bus_space_handle_t handle,
  249     bus_size_t offset,
  250     const u_int32_t * addr,
  251     size_t count);
  252 
  253 #define TODO() printf("XLR memory bus space function '%s' unimplemented\n", __func__)
  254 
  255 static struct bus_space local_rmi_pci_bus_space = {
  256         /* cookie */
  257         (void *)0,
  258 
  259         /* mapping/unmapping */
  260         rmi_pci_bus_space_map,
  261         rmi_pci_bus_space_unmap,
  262         rmi_pci_bus_space_subregion,
  263 
  264         /* allocation/deallocation */
  265         NULL,
  266         NULL,
  267 
  268         /* barrier */
  269         rmi_pci_bus_space_barrier,
  270 
  271         /* read (single) */
  272         rmi_pci_bus_space_read_1,
  273         rmi_pci_bus_space_read_2,
  274         rmi_pci_bus_space_read_4,
  275         NULL,
  276 
  277         /* read multiple */
  278         rmi_pci_bus_space_read_multi_1,
  279         rmi_pci_bus_space_read_multi_2,
  280         rmi_pci_bus_space_read_multi_4,
  281         NULL,
  282 
  283         /* read region */
  284         rmi_pci_bus_space_read_region_1,
  285         rmi_pci_bus_space_read_region_2,
  286         rmi_pci_bus_space_read_region_4,
  287         NULL,
  288 
  289         /* write (single) */
  290         rmi_pci_bus_space_write_1,
  291         rmi_pci_bus_space_write_2,
  292         rmi_pci_bus_space_write_4,
  293         NULL,
  294 
  295         /* write multiple */
  296         rmi_pci_bus_space_write_multi_1,
  297         rmi_pci_bus_space_write_multi_2,
  298         rmi_pci_bus_space_write_multi_4,
  299         NULL,
  300 
  301         /* write region */
  302         NULL,
  303         rmi_pci_bus_space_write_region_2,
  304         rmi_pci_bus_space_write_region_4,
  305         NULL,
  306 
  307         /* set multiple */
  308         NULL,
  309         NULL,
  310         NULL,
  311         NULL,
  312 
  313         /* set region */
  314         NULL,
  315         rmi_pci_bus_space_set_region_2,
  316         rmi_pci_bus_space_set_region_4,
  317         NULL,
  318 
  319         /* copy */
  320         NULL,
  321         rmi_pci_bus_space_copy_region_2,
  322         NULL,
  323         NULL,
  324 
  325         /* read (single) stream */
  326         rmi_pci_bus_space_read_stream_1,
  327         rmi_pci_bus_space_read_stream_2,
  328         rmi_pci_bus_space_read_stream_4,
  329         NULL,
  330 
  331         /* read multiple stream */
  332         rmi_pci_bus_space_read_multi_stream_1,
  333         rmi_pci_bus_space_read_multi_stream_2,
  334         rmi_pci_bus_space_read_multi_stream_4,
  335         NULL,
  336 
  337         /* read region stream */
  338         rmi_pci_bus_space_read_region_1,
  339         rmi_pci_bus_space_read_region_2,
  340         rmi_pci_bus_space_read_region_4,
  341         NULL,
  342 
  343         /* write (single) stream */
  344         rmi_pci_bus_space_write_stream_1,
  345         rmi_pci_bus_space_write_stream_2,
  346         rmi_pci_bus_space_write_stream_4,
  347         NULL,
  348 
  349         /* write multiple stream */
  350         rmi_pci_bus_space_write_multi_stream_1,
  351         rmi_pci_bus_space_write_multi_stream_2,
  352         rmi_pci_bus_space_write_multi_stream_4,
  353         NULL,
  354 
  355         /* write region stream */
  356         NULL,
  357         rmi_pci_bus_space_write_region_2,
  358         rmi_pci_bus_space_write_region_4,
  359         NULL,
  360 };
  361 
  362 /* generic bus_space tag */
  363 bus_space_tag_t rmi_pci_bus_space = &local_rmi_pci_bus_space;
  364 
  365 /*
  366  * Map a region of device bus space into CPU virtual address space.
  367  */
  368 static int
  369 rmi_pci_bus_space_map(void *t __unused, bus_addr_t addr,
  370     bus_size_t size __unused, int flags __unused,
  371     bus_space_handle_t * bshp)
  372 {
  373         *bshp = addr;
  374         return (0);
  375 }
  376 
  377 /*
  378  * Unmap a region of device bus space.
  379  */
  380 static void
  381 rmi_pci_bus_space_unmap(void *t __unused, bus_space_handle_t bsh __unused,
  382     bus_size_t size __unused)
  383 {
  384 }
  385 
  386 /*
  387  * Get a new handle for a subregion of an already-mapped area of bus space.
  388  */
  389 
  390 static int
  391 rmi_pci_bus_space_subregion(void *t __unused, bus_space_handle_t bsh,
  392     bus_size_t offset, bus_size_t size __unused,
  393     bus_space_handle_t * nbshp)
  394 {
  395         *nbshp = bsh + offset;
  396         return (0);
  397 }
  398 
  399 /*
  400  * Read a 1, 2, 4, or 8 byte quantity from bus space
  401  * described by tag/handle/offset.
  402  */
  403 
  404 static u_int8_t
  405 rmi_pci_bus_space_read_1(void *tag, bus_space_handle_t handle,
  406     bus_size_t offset)
  407 {
  408         return (u_int8_t) (*(volatile u_int8_t *)(handle + offset));
  409 }
  410 
  411 static u_int16_t
  412 rmi_pci_bus_space_read_2(void *tag, bus_space_handle_t handle,
  413     bus_size_t offset)
  414 {
  415         u_int16_t value;
  416 
  417         value = *(volatile u_int16_t *)(handle + offset);
  418         return bswap16(value);
  419 }
  420 
  421 static u_int32_t
  422 rmi_pci_bus_space_read_4(void *tag, bus_space_handle_t handle,
  423     bus_size_t offset)
  424 {
  425         uint32_t value;
  426 
  427         value = *(volatile u_int32_t *)(handle + offset);
  428         return bswap32(value);
  429 }
  430 
  431 /*
  432  * Read `count' 1, 2, 4, or 8 byte quantities from bus space
  433  * described by tag/handle/offset and copy into buffer provided.
  434  */
  435 static void
  436 rmi_pci_bus_space_read_multi_1(void *tag, bus_space_handle_t handle,
  437     bus_size_t offset, u_int8_t * addr, size_t count)
  438 {
  439         while (count--) {
  440                 *addr = *(volatile u_int8_t *)(handle + offset);
  441                 addr++;
  442         }
  443 }
  444 
  445 static void
  446 rmi_pci_bus_space_read_multi_2(void *tag, bus_space_handle_t handle,
  447     bus_size_t offset, u_int16_t * addr, size_t count)
  448 {
  449 
  450         while (count--) {
  451                 *addr = *(volatile u_int16_t *)(handle + offset);
  452                 *addr = bswap16(*addr);
  453                 addr++;
  454         }
  455 }
  456 
  457 static void
  458 rmi_pci_bus_space_read_multi_4(void *tag, bus_space_handle_t handle,
  459     bus_size_t offset, u_int32_t * addr, size_t count)
  460 {
  461 
  462         while (count--) {
  463                 *addr = *(volatile u_int32_t *)(handle + offset);
  464                 *addr = bswap32(*addr);
  465                 addr++;
  466         }
  467 }
  468 
  469 /*
  470  * Write the 1, 2, 4, or 8 byte value `value' to bus space
  471  * described by tag/handle/offset.
  472  */
  473 
  474 static void
  475 rmi_pci_bus_space_write_1(void *tag, bus_space_handle_t handle,
  476     bus_size_t offset, u_int8_t value)
  477 {
  478         mips_sync();
  479         *(volatile u_int8_t *)(handle + offset) = value;
  480 }
  481 
  482 static void
  483 rmi_pci_bus_space_write_2(void *tag, bus_space_handle_t handle,
  484     bus_size_t offset, u_int16_t value)
  485 {
  486         mips_sync();
  487         *(volatile u_int16_t *)(handle + offset) = bswap16(value);
  488 }
  489 
  490 static void
  491 rmi_pci_bus_space_write_4(void *tag, bus_space_handle_t handle,
  492     bus_size_t offset, u_int32_t value)
  493 {
  494         mips_sync();
  495         *(volatile u_int32_t *)(handle + offset) = bswap32(value);
  496 }
  497 
  498 /*
  499  * Write `count' 1, 2, 4, or 8 byte quantities from the buffer
  500  * provided to bus space described by tag/handle/offset.
  501  */
  502 
  503 static void
  504 rmi_pci_bus_space_write_multi_1(void *tag, bus_space_handle_t handle,
  505     bus_size_t offset, const u_int8_t * addr, size_t count)
  506 {
  507         mips_sync();
  508         while (count--) {
  509                 (*(volatile u_int8_t *)(handle + offset)) = *addr;
  510                 addr++;
  511         }
  512 }
  513 
  514 static void
  515 rmi_pci_bus_space_write_multi_2(void *tag, bus_space_handle_t handle,
  516     bus_size_t offset, const u_int16_t * addr, size_t count)
  517 {
  518         mips_sync();
  519         while (count--) {
  520                 (*(volatile u_int16_t *)(handle + offset)) = bswap16(*addr);
  521                 addr++;
  522         }
  523 }
  524 
  525 static void
  526 rmi_pci_bus_space_write_multi_4(void *tag, bus_space_handle_t handle,
  527     bus_size_t offset, const u_int32_t * addr, size_t count)
  528 {
  529         mips_sync();
  530         while (count--) {
  531                 (*(volatile u_int32_t *)(handle + offset)) = bswap32(*addr);
  532                 addr++;
  533         }
  534 }
  535 
  536 /*
  537  * Write `count' 1, 2, 4, or 8 byte value `val' to bus space described
  538  * by tag/handle starting at `offset'.
  539  */
  540 
  541 static void
  542 rmi_pci_bus_space_set_region_2(void *t, bus_space_handle_t bsh,
  543     bus_size_t offset, u_int16_t value, size_t count)
  544 {
  545         bus_addr_t addr = bsh + offset;
  546 
  547         for (; count != 0; count--, addr += 2)
  548                 (*(volatile u_int16_t *)(addr)) = value;
  549 }
  550 
  551 static void
  552 rmi_pci_bus_space_set_region_4(void *t, bus_space_handle_t bsh,
  553     bus_size_t offset, u_int32_t value, size_t count)
  554 {
  555         bus_addr_t addr = bsh + offset;
  556 
  557         for (; count != 0; count--, addr += 4)
  558                 (*(volatile u_int32_t *)(addr)) = value;
  559 }
  560 
  561 /*
  562  * Copy `count' 1, 2, 4, or 8 byte values from bus space starting
  563  * at tag/bsh1/off1 to bus space starting at tag/bsh2/off2.
  564  */
  565 static void
  566 rmi_pci_bus_space_copy_region_2(void *t, bus_space_handle_t bsh1,
  567     bus_size_t off1, bus_space_handle_t bsh2,
  568     bus_size_t off2, size_t count)
  569 {
  570         TODO();
  571 }
  572 
  573 /*
  574  * Read `count' 1, 2, 4, or 8 byte quantities from bus space
  575  * described by tag/handle/offset and copy into buffer provided.
  576  */
  577 
  578 u_int8_t
  579 rmi_pci_bus_space_read_stream_1(void *t, bus_space_handle_t handle,
  580     bus_size_t offset)
  581 {
  582 
  583         return *((volatile u_int8_t *)(handle + offset));
  584 }
  585 
  586 static u_int16_t
  587 rmi_pci_bus_space_read_stream_2(void *t, bus_space_handle_t handle,
  588     bus_size_t offset)
  589 {
  590         return *(volatile u_int16_t *)(handle + offset);
  591 }
  592 
  593 static u_int32_t
  594 rmi_pci_bus_space_read_stream_4(void *t, bus_space_handle_t handle,
  595     bus_size_t offset)
  596 {
  597         return (*(volatile u_int32_t *)(handle + offset));
  598 }
  599 
  600 static void
  601 rmi_pci_bus_space_read_multi_stream_1(void *tag, bus_space_handle_t handle,
  602     bus_size_t offset, u_int8_t * addr, size_t count)
  603 {
  604         while (count--) {
  605                 *addr = (*(volatile u_int8_t *)(handle + offset));
  606                 addr++;
  607         }
  608 }
  609 
  610 static void
  611 rmi_pci_bus_space_read_multi_stream_2(void *tag, bus_space_handle_t handle,
  612     bus_size_t offset, u_int16_t * addr, size_t count)
  613 {
  614         while (count--) {
  615                 *addr = (*(volatile u_int16_t *)(handle + offset));
  616                 addr++;
  617         }
  618 }
  619 
  620 static void
  621 rmi_pci_bus_space_read_multi_stream_4(void *tag, bus_space_handle_t handle,
  622     bus_size_t offset, u_int32_t * addr, size_t count)
  623 {
  624         while (count--) {
  625                 *addr = (*(volatile u_int32_t *)(handle + offset));
  626                 addr++;
  627         }
  628 }
  629 
  630 /*
  631  * Read `count' 1, 2, 4, or 8 byte quantities from bus space
  632  * described by tag/handle and starting at `offset' and copy into
  633  * buffer provided.
  634  */
  635 void
  636 rmi_pci_bus_space_read_region_1(void *t, bus_space_handle_t bsh,
  637     bus_size_t offset, u_int8_t * addr, size_t count)
  638 {
  639         bus_addr_t baddr = bsh + offset;
  640 
  641         while (count--) {
  642                 *addr++ = (*(volatile u_int8_t *)(baddr));
  643                 baddr += 1;
  644         }
  645 }
  646 
  647 void
  648 rmi_pci_bus_space_read_region_2(void *t, bus_space_handle_t bsh,
  649     bus_size_t offset, u_int16_t * addr, size_t count)
  650 {
  651         bus_addr_t baddr = bsh + offset;
  652 
  653         while (count--) {
  654                 *addr++ = (*(volatile u_int16_t *)(baddr));
  655                 baddr += 2;
  656         }
  657 }
  658 
  659 void
  660 rmi_pci_bus_space_read_region_4(void *t, bus_space_handle_t bsh,
  661     bus_size_t offset, u_int32_t * addr, size_t count)
  662 {
  663         bus_addr_t baddr = bsh + offset;
  664 
  665         while (count--) {
  666                 *addr++ = (*(volatile u_int32_t *)(baddr));
  667                 baddr += 4;
  668         }
  669 }
  670 
  671 void
  672 rmi_pci_bus_space_write_stream_1(void *t, bus_space_handle_t handle,
  673     bus_size_t offset, u_int8_t value)
  674 {
  675         mips_sync();
  676         *(volatile u_int8_t *)(handle + offset) = value;
  677 }
  678 
  679 static void
  680 rmi_pci_bus_space_write_stream_2(void *t, bus_space_handle_t handle,
  681     bus_size_t offset, u_int16_t value)
  682 {
  683         mips_sync();
  684         *(volatile u_int16_t *)(handle + offset) = value;
  685 }
  686 
  687 static void
  688 rmi_pci_bus_space_write_stream_4(void *t, bus_space_handle_t handle,
  689     bus_size_t offset, u_int32_t value)
  690 {
  691         mips_sync();
  692         *(volatile u_int32_t *)(handle + offset) = value;
  693 }
  694 
  695 static void
  696 rmi_pci_bus_space_write_multi_stream_1(void *tag, bus_space_handle_t handle,
  697     bus_size_t offset, const u_int8_t * addr, size_t count)
  698 {
  699         mips_sync();
  700         while (count--) {
  701                 (*(volatile u_int8_t *)(handle + offset)) = *addr;
  702                 addr++;
  703         }
  704 }
  705 
  706 static void
  707 rmi_pci_bus_space_write_multi_stream_2(void *tag, bus_space_handle_t handle,
  708     bus_size_t offset, const u_int16_t * addr, size_t count)
  709 {
  710         mips_sync();
  711         while (count--) {
  712                 (*(volatile u_int16_t *)(handle + offset)) = *addr;
  713                 addr++;
  714         }
  715 }
  716 
  717 static void
  718 rmi_pci_bus_space_write_multi_stream_4(void *tag, bus_space_handle_t handle,
  719     bus_size_t offset, const u_int32_t * addr, size_t count)
  720 {
  721         mips_sync();
  722         while (count--) {
  723                 (*(volatile u_int32_t *)(handle + offset)) = *addr;
  724                 addr++;
  725         }
  726 }
  727 
  728 void
  729 rmi_pci_bus_space_write_region_2(void *t,
  730     bus_space_handle_t bsh,
  731     bus_size_t offset,
  732     const u_int16_t * addr,
  733     size_t count)
  734 {
  735         bus_addr_t baddr = (bus_addr_t) bsh + offset;
  736 
  737         while (count--) {
  738                 (*(volatile u_int16_t *)(baddr)) = *addr;
  739                 addr++;
  740                 baddr += 2;
  741         }
  742 }
  743 
  744 void
  745 rmi_pci_bus_space_write_region_4(void *t, bus_space_handle_t bsh,
  746     bus_size_t offset, const u_int32_t * addr, size_t count)
  747 {
  748         bus_addr_t baddr = bsh + offset;
  749 
  750         while (count--) {
  751                 (*(volatile u_int32_t *)(baddr)) = *addr;
  752                 addr++;
  753                 baddr += 4;
  754         }
  755 }
  756 
  757 static void
  758 rmi_pci_bus_space_barrier(void *tag __unused, bus_space_handle_t bsh __unused,
  759     bus_size_t offset __unused, bus_size_t len __unused, int flags)
  760 {
  761 
  762 }

Cache object: 6f9d0af3d2c0047d90df3397bcf97854


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.