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

Cache object: fe2e9362095bfeb75509f6d8b611d7fc


[ 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.