Home | History | Annotate | Download | only in parser
      1 /*
      2 
      3   This file is provided under a dual BSD/GPLv2 license.  When using or
      4   redistributing this file, you may do so under either license.
      5 
      6   GPL LICENSE SUMMARY
      7 
      8   Copyright(c) 2005-2008 Intel Corporation. All rights reserved.
      9 
     10   This program is free software; you can redistribute it and/or modify
     11   it under the terms of version 2 of the GNU General Public License as
     12   published by the Free Software Foundation.
     13 
     14   This program is distributed in the hope that it will be useful, but
     15   WITHOUT ANY WARRANTY; without even the implied warranty of
     16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     17   General Public License for more details.
     18 
     19   You should have received a copy of the GNU General Public License
     20   along with this program; if not, write to the Free Software
     21   Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
     22   The full GNU General Public License is included in this distribution
     23   in the file called LICENSE.GPL.
     24 
     25   Contact Information:
     26     Intel Corporation
     27     2200 Mission College Blvd.
     28     Santa Clara, CA  97052
     29 
     30   BSD LICENSE
     31 
     32   Copyright(c) 2005-2008 Intel Corporation. All rights reserved.
     33 
     34   Redistribution and use in source and binary forms, with or without
     35   modification, are permitted provided that the following conditions
     36   are met:
     37 
     38     * Redistributions of source code must retain the above copyright
     39       notice, this list of conditions and the following disclaimer.
     40     * Redistributions in binary form must reproduce the above copyright
     41       notice, this list of conditions and the following disclaimer in
     42       the documentation and/or other materials provided with the
     43       distribution.
     44     * Neither the name of Intel Corporation nor the names of its
     45       contributors may be used to endorse or promote products derived
     46       from this software without specific prior written permission.
     47 
     48   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     49   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     50   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     51   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     52   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     53   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     54   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     55   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     56   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     57   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     58   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     59 
     60 */
     61 
     62 #ifndef SVEN_FW_H
     63 #include "sven_fw.h"
     64 #endif
     65 
     66 #define _OSAL_IO_MEMMAP_H  /* to prevent errors when including sven_devh.h */
     67 #define _OSAL_ASSERT_H     /* to prevent errors when including sven_devh.h */
     68 #include "sven_devh.h"
     69 
     70 #include "fw_pvt.h"
     71 
     72 static os_devhandle_t         g_svenh;
     73 
     74 #define FW_SVEN_DEVH_DISABLE_SVEN_REGISTER_IO
     75 //#define SVEN_DEVH_DISABLE_SVEN
     76 
     77 extern int sven_fw_is_tx_enabled(
     78    struct SVENHandle       *svenh );
     79 
     80 #ifndef SVEN_DEVH_DISABLE_SVEN
     81 static void sven_write_event(
     82    struct SVENHandle        *svenh,
     83    struct SVENEvent         *ev )
     84 {
     85    if ( NULL == svenh )
     86       svenh = &g_svenh.devh_svenh;
     87 
     88    if ( NULL != svenh->phot )
     89       sven_fw_write_event(svenh,ev);
     90 }
     91 
     92 static void sven_fw_initialize_event_top(
     93    struct SVENEvent         *ev,
     94     int                      module,
     95     int                      unit,
     96     int                      event_type,
     97     int                      event_subtype )
     98 {
     99     ev->se_et.et_gencount = 0;
    100     ev->se_et.et_module = module;
    101     ev->se_et.et_unit = unit;
    102     ev->se_et.et_type = event_type;
    103     ev->se_et.et_subtype = event_subtype;
    104 }
    105 #endif
    106 
    107 uint32_t sven_get_timestamp()
    108 {
    109    uint32_t    value = 0;
    110 
    111    if ( NULL != g_svenh.devh_svenh.ptime )
    112    {
    113       value = sven_fw_read_external_register( &g_svenh.devh_svenh, g_svenh.devh_svenh.ptime );
    114    }
    115 
    116    return(value);
    117 }
    118 
    119 /* ---------------------------------------------------------------------- */
    120 /* ---------------------------------------------------------------------- */
    121 
    122 void devh_SVEN_SetModuleUnit(
    123     os_devhandle_t          *devh,
    124     int                      sven_module,
    125     int                      sven_unit )
    126 {
    127 #ifndef SVEN_DEVH_DISABLE_SVEN
    128    if ( NULL == devh )
    129       devh = &g_svenh;
    130    devh->devh_sven_module = sven_module;
    131    devh->devh_sven_unit = sven_unit;
    132 #endif
    133 }
    134 
    135 os_devhandle_t *devhandle_factory( const char *desc )
    136 {
    137    /* pointer to global vsparc local registers */
    138    g_svenh.devh_regs_ptr = (void *) 0x10000000;   /* firmware address to Local (GV) registers */
    139 
    140    return( &g_svenh );
    141 }
    142 
    143 int devhandle_connect_name(
    144     os_devhandle_t          *devh,
    145     const char              *devname )
    146 {
    147    return(1);
    148 }
    149 
    150 /* ---------------------------------------------------------------------- */
    151 /* ---------------------------------------------------------------------- */
    152 
    153 void devh_SVEN_WriteModuleEvent(
    154     os_devhandle_t  *devh,
    155     int              module_event_subtype,
    156     unsigned int     payload0,
    157     unsigned int     payload1,
    158     unsigned int     payload2,
    159     unsigned int     payload3,
    160     unsigned int     payload4,
    161     unsigned int     payload5 )
    162 {
    163 #ifndef SVEN_DEVH_DISABLE_SVEN
    164     struct SVENEvent        ev __attribute__ ((aligned(8)));
    165 
    166     devh = (NULL != devh) ? devh :  &g_svenh;
    167 
    168     if ( ! sven_fw_is_tx_enabled( &devh->devh_svenh ) )
    169         return;
    170 
    171     sven_fw_initialize_event_top( &ev,
    172         devh->devh_sven_module,
    173         1 /* devh->devh_sven_unit */,
    174         SVEN_event_type_module_specific,
    175         module_event_subtype );
    176 
    177     ev.u.se_uint[0]        = payload0;
    178     ev.u.se_uint[1]        = payload1;
    179     ev.u.se_uint[2]        = payload2;
    180     ev.u.se_uint[3]        = payload3;
    181     ev.u.se_uint[4]        = payload4;
    182     ev.u.se_uint[5]        = payload5;
    183 
    184     sven_write_event( &devh->devh_svenh, &ev );
    185 #endif
    186 }
    187 
    188 /* ---------------------------------------------------------------------- */
    189 /* SVEN FW TX: Required custom routines to enable FW TX                   */
    190 /* ---------------------------------------------------------------------- */
    191 int sven_fw_set_globals(
    192    struct SVEN_FW_Globals  *fw_globals )
    193 {
    194    sven_fw_attach( &g_svenh.devh_svenh, fw_globals );
    195    devh_SVEN_SetModuleUnit( &g_svenh, SVEN_module_GEN4_GV, 1 );
    196    return(0);
    197 }
    198 
    199 uint32_t cp_using_dma_phys(uint32_t ddr_addr, uint32_t local_addr, uint32_t size, char to_ddr, char swap);
    200 
    201 unsigned int sven_fw_read_external_register(
    202    struct SVENHandle       *svenh,
    203    volatile unsigned int   *preg )
    204 {
    205    unsigned int      reg __attribute__ ((aligned(8)));
    206 
    207    (void)svenh;   // argument unused
    208 
    209    cp_using_dma_phys( (uint32_t) preg, (uint32_t) &reg, 4, 0, 0 );
    210 
    211    return( reg );
    212 }
    213 
    214 void sven_fw_copy_event_to_host_mem(
    215    struct SVENHandle          *svenh,
    216    volatile struct SVENEvent  *to,
    217    const struct SVENEvent     *from )
    218 {
    219    (void)svenh;   // argument unused
    220 
    221    cp_using_dma_phys( (uint32_t) to, (uint32_t) from, sizeof(*to), 1, 0 );
    222 }
    223 /* ---------------------------------------------------------------------- */
    224 /* ---------------------------------------------------------------------- */
    225