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/arm/xscale/pxa/pxa_space.c

Version: -  FREEBSD  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-2  -  FREEBSD-11-1  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-4  -  FREEBSD-10-3  -  FREEBSD-10-2  -  FREEBSD-10-1  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-3  -  FREEBSD-9-2  -  FREEBSD-9-1  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-4  -  FREEBSD-8-3  -  FREEBSD-8-2  -  FREEBSD-8-1  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-4  -  FREEBSD-7-3  -  FREEBSD-7-2  -  FREEBSD-7-1  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-4  -  FREEBSD-6-3  -  FREEBSD-6-2  -  FREEBSD-6-1  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-5  -  FREEBSD-5-4  -  FREEBSD-5-3  -  FREEBSD-5-2  -  FREEBSD-5-1  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  linux-2.6  -  linux-2.4.22  -  MK83  -  MK84  -  PLAN9  -  DFBSD  -  NETBSD  -  NETBSD5  -  NETBSD4  -  NETBSD3  -  NETBSD20  -  OPENBSD  -  xnu-517  -  xnu-792  -  xnu-792.6.70  -  xnu-1228  -  xnu-1456.1.26  -  xnu-1699.24.8  -  xnu-2050.18.24  -  OPENSOLARIS  -  minix-3-1-1 
SearchContext: -  none  -  3  -  10 

    1 /*      $NetBSD: obio_space.c,v 1.6 2003/07/15 00:25:05 lukem Exp $     */
    2 
    3 /*-
    4  * Copyright (c) 2001, 2002, 2003 Wasabi Systems, Inc.
    5  * All rights reserved.
    6  *
    7  * Written by Jason R. Thorpe for Wasabi Systems, Inc.
    8  *
    9  * Redistribution and use in source and binary forms, with or without
   10  * modification, are permitted provided that the following conditions
   11  * are met:
   12  * 1. Redistributions of source code must retain the above copyright
   13  *    notice, this list of conditions and the following disclaimer.
   14  * 2. Redistributions in binary form must reproduce the above copyright
   15  *    notice, this list of conditions and the following disclaimer in the
   16  *    documentation and/or other materials provided with the distribution.
   17  * 3. All advertising materials mentioning features or use of this software
   18  *    must display the following acknowledgement:
   19  *      This product includes software developed for the NetBSD Project by
   20  *      Wasabi Systems, Inc.
   21  * 4. The name of Wasabi Systems, Inc. may not be used to endorse
   22  *    or promote products derived from this software without specific prior
   23  *    written permission.
   24  *
   25  * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
   26  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
   27  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   28  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL WASABI SYSTEMS, INC
   29  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   30  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   31  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   32  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   33  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   34  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   35  * POSSIBILITY OF SUCH DAMAGE.
   36  */
   37 
   38 /*
   39  * bus_space functions for PXA devices
   40  */
   41 
   42 #include <sys/cdefs.h>
   43 __FBSDID("$FreeBSD: releng/11.2/sys/arm/xscale/pxa/pxa_space.c 331722 2018-03-29 02:50:57Z eadler $");
   44 
   45 #include <sys/param.h>
   46 #include <sys/systm.h>
   47 #include <sys/bus.h>
   48 #include <sys/kernel.h>
   49 #include <sys/malloc.h>
   50 
   51 #include <machine/bus.h>
   52 
   53 #include <arm/xscale/pxa/pxareg.h>
   54 #include <arm/xscale/pxa/pxavar.h>
   55 
   56 static MALLOC_DEFINE(M_PXATAG, "PXA bus_space tags", "Bus_space tags for PXA");
   57 
   58 /* Prototypes for all the bus_space structure functions */
   59 bs_protos(generic);
   60 bs_protos(pxa);
   61 
   62 /*
   63  * The obio bus space tag.  This is constant for all instances, so
   64  * we never have to explicitly "create" it.
   65  */
   66 struct bus_space _base_tag = {
   67         /* cookie */
   68         .bs_privdata    = NULL,
   69 
   70         /* mapping/unmapping */
   71         .bs_map         = generic_bs_map,
   72         .bs_unmap       = generic_bs_unmap,
   73         .bs_subregion   = generic_bs_subregion,
   74 
   75         /* allocation/deallocation */
   76         .bs_alloc       = generic_bs_alloc,
   77         .bs_free        = generic_bs_free,
   78 
   79         /* barrier */
   80         .bs_barrier     = generic_bs_barrier,
   81 
   82         /* read (single) */
   83         .bs_r_1         = pxa_bs_r_1,
   84         .bs_r_2         = pxa_bs_r_2,
   85         .bs_r_4         = pxa_bs_r_4,
   86         .bs_r_8         = BS_UNIMPLEMENTED,
   87 
   88         /* read multiple */
   89         .bs_rm_1        = pxa_bs_rm_1,
   90         .bs_rm_2        = pxa_bs_rm_2,
   91         .bs_rm_4        = BS_UNIMPLEMENTED,
   92         .bs_rm_8        = BS_UNIMPLEMENTED,
   93 
   94         /* read region */
   95         .bs_rr_1        = pxa_bs_rr_1,
   96         .bs_rr_2        = BS_UNIMPLEMENTED,
   97         .bs_rr_4        = BS_UNIMPLEMENTED,
   98         .bs_rr_8        = BS_UNIMPLEMENTED,
   99 
  100         /* write (single) */
  101         .bs_w_1         = pxa_bs_w_1,
  102         .bs_w_2         = pxa_bs_w_2,
  103         .bs_w_4         = pxa_bs_w_4,
  104         .bs_w_8         = BS_UNIMPLEMENTED,
  105 
  106         /* write multiple */
  107         .bs_wm_1        = pxa_bs_wm_1,
  108         .bs_wm_2        = pxa_bs_wm_2,
  109         .bs_wm_4        = BS_UNIMPLEMENTED,
  110         .bs_wm_8        = BS_UNIMPLEMENTED,
  111 
  112         /* write region */
  113         .bs_wr_1        = BS_UNIMPLEMENTED,
  114         .bs_wr_2        = BS_UNIMPLEMENTED,
  115         .bs_wr_4        = BS_UNIMPLEMENTED,
  116         .bs_wr_8        = BS_UNIMPLEMENTED,
  117 
  118         /* set multiple */
  119         .bs_sm_1        = BS_UNIMPLEMENTED,
  120         .bs_sm_2        = BS_UNIMPLEMENTED,
  121         .bs_sm_4        = BS_UNIMPLEMENTED,
  122         .bs_sm_8        = BS_UNIMPLEMENTED,
  123 
  124         /* set region */
  125         .bs_sr_1        = BS_UNIMPLEMENTED,
  126         .bs_sr_2        = BS_UNIMPLEMENTED,
  127         .bs_sr_4        = BS_UNIMPLEMENTED,
  128         .bs_sr_8        = BS_UNIMPLEMENTED,
  129 
  130         /* copy */
  131         .bs_c_1         = BS_UNIMPLEMENTED,
  132         .bs_c_2         = BS_UNIMPLEMENTED,
  133         .bs_c_4         = BS_UNIMPLEMENTED,
  134         .bs_c_8         = BS_UNIMPLEMENTED,
  135 
  136         /* read stream (single) */
  137         .bs_r_1_s       = BS_UNIMPLEMENTED,
  138         .bs_r_2_s       = BS_UNIMPLEMENTED,
  139         .bs_r_4_s       = BS_UNIMPLEMENTED,
  140         .bs_r_8_s       = BS_UNIMPLEMENTED,
  141 
  142         /* read multiple stream */
  143         .bs_rm_1_s      = BS_UNIMPLEMENTED,
  144         .bs_rm_2_s      = BS_UNIMPLEMENTED,
  145         .bs_rm_4_s      = BS_UNIMPLEMENTED,
  146         .bs_rm_8_s      = BS_UNIMPLEMENTED,
  147 
  148         /* read region stream */
  149         .bs_rr_1_s      = BS_UNIMPLEMENTED,
  150         .bs_rr_2_s      = BS_UNIMPLEMENTED,
  151         .bs_rr_4_s      = BS_UNIMPLEMENTED,
  152         .bs_rr_8_s      = BS_UNIMPLEMENTED,
  153 
  154         /* write stream (single) */
  155         .bs_w_1_s       = BS_UNIMPLEMENTED, 
  156         .bs_w_2_s       = BS_UNIMPLEMENTED, 
  157         .bs_w_4_s       = BS_UNIMPLEMENTED, 
  158         .bs_w_8_s       = BS_UNIMPLEMENTED, 
  159 
  160         /* write multiple stream */
  161         .bs_wm_1_s      = BS_UNIMPLEMENTED,
  162         .bs_wm_2_s      = BS_UNIMPLEMENTED,
  163         .bs_wm_4_s      = BS_UNIMPLEMENTED,
  164         .bs_wm_8_s      = BS_UNIMPLEMENTED,
  165 
  166         /* write region stream */
  167         .bs_wr_1_s      = BS_UNIMPLEMENTED,
  168         .bs_wr_2_s      = BS_UNIMPLEMENTED,
  169         .bs_wr_4_s      = BS_UNIMPLEMENTED,
  170         .bs_wr_8_s      = BS_UNIMPLEMENTED,
  171 };
  172 
  173 static struct bus_space _obio_tag;
  174 
  175 bus_space_tag_t         base_tag = &_base_tag;
  176 bus_space_tag_t         obio_tag = NULL;
  177 
  178 void
  179 pxa_obio_tag_init(void)
  180 {
  181 
  182         bcopy(&_base_tag, &_obio_tag, sizeof(struct bus_space));
  183         _obio_tag.bs_privdata = (void *)PXA2X0_PERIPH_OFFSET;
  184         obio_tag = &_obio_tag;
  185 }
  186 
  187 bus_space_tag_t
  188 pxa_bus_tag_alloc(bus_addr_t offset)
  189 {
  190         struct  bus_space *tag;
  191 
  192         tag = (struct bus_space *)malloc(sizeof(struct bus_space), M_PXATAG,
  193             M_WAITOK);
  194         if (tag == NULL) {
  195                 return (NULL);
  196         }
  197 
  198         bcopy(&_base_tag, tag, sizeof(struct bus_space));
  199         tag->bs_privdata = (void *)offset;
  200 
  201         return ((bus_space_tag_t)tag);
  202 }
  203 
  204 
  205 #define READ_SINGLE(type, proto, base)                                  \
  206         type                                                            \
  207         proto(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset)   \
  208         {                                                               \
  209                 bus_addr_t      tag_offset;                             \
  210                 type            value;                                  \
  211                 tag_offset = (bus_addr_t)tag->bs_privdata;              \
  212                 value = base(NULL, bsh + tag_offset, offset);           \
  213                 return (value);                                         \
  214         }
  215 
  216 READ_SINGLE(u_int8_t,  pxa_bs_r_1, generic_bs_r_1)
  217 READ_SINGLE(u_int16_t, pxa_bs_r_2, generic_bs_r_2)
  218 READ_SINGLE(u_int32_t, pxa_bs_r_4, generic_bs_r_4)
  219 
  220 #undef READ_SINGLE
  221 
  222 #define WRITE_SINGLE(type, proto, base)                                 \
  223         void                                                            \
  224         proto(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset,   \
  225             type value)                                                 \
  226         {                                                               \
  227                 bus_addr_t      tag_offset;                             \
  228                 tag_offset = (bus_addr_t)tag->bs_privdata;              \
  229                 base(NULL, bsh + tag_offset, offset, value);            \
  230         }
  231 
  232 WRITE_SINGLE(u_int8_t,  pxa_bs_w_1, generic_bs_w_1)
  233 WRITE_SINGLE(u_int16_t, pxa_bs_w_2, generic_bs_w_2)
  234 WRITE_SINGLE(u_int32_t, pxa_bs_w_4, generic_bs_w_4)
  235 
  236 #undef WRITE_SINGLE
  237 
  238 #define READ_MULTI(type, proto, base)                                   \
  239         void                                                            \
  240         proto(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset,   \
  241             type *dest, bus_size_t count)                               \
  242         {                                                               \
  243                 bus_addr_t      tag_offset;                             \
  244                 tag_offset = (bus_addr_t)tag->bs_privdata;              \
  245                 base(NULL, bsh + tag_offset, offset, dest, count);      \
  246         }
  247 
  248 READ_MULTI(u_int8_t,  pxa_bs_rm_1, generic_bs_rm_1)
  249 READ_MULTI(u_int16_t, pxa_bs_rm_2, generic_bs_rm_2)
  250 
  251 READ_MULTI(u_int8_t,  pxa_bs_rr_1, generic_bs_rr_1)
  252 
  253 #undef READ_MULTI
  254 
  255 #define WRITE_MULTI(type, proto, base)                                  \
  256         void                                                            \
  257         proto(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset,   \
  258             const type *src, bus_size_t count)                          \
  259         {                                                               \
  260                 bus_addr_t      tag_offset;                             \
  261                 tag_offset = (bus_addr_t)tag->bs_privdata;              \
  262                 base(NULL, bsh + tag_offset, offset, src, count);       \
  263         }
  264 
  265 WRITE_MULTI(u_int8_t,  pxa_bs_wm_1, generic_bs_wm_1)
  266 WRITE_MULTI(u_int16_t, pxa_bs_wm_2, generic_bs_wm_2)
  267 
  268 #undef WRITE_MULTI

Cache object: 6f756fe819f53db27ebbc5f33e1dca1a


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