cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

ctucan_core.h (5306B)


      1/*
      2 * CTU CAN FD device emulation
      3 * http://canbus.pages.fel.cvut.cz/
      4 *
      5 * Copyright (c) 2019 Jan Charvat (jancharvat.charvat@gmail.com)
      6 *
      7 * Based on Kvaser PCI CAN device (SJA1000 based) emulation implemented by
      8 * Jin Yang and Pavel Pisa
      9 *
     10 * Permission is hereby granted, free of charge, to any person obtaining a copy
     11 * of this software and associated documentation files (the "Software"), to deal
     12 * in the Software without restriction, including without limitation the rights
     13 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     14 * copies of the Software, and to permit persons to whom the Software is
     15 * furnished to do so, subject to the following conditions:
     16 *
     17 * The above copyright notice and this permission notice shall be included in
     18 * all copies or substantial portions of the Software.
     19 *
     20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     21 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     22 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
     23 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     24 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     25 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
     26 * THE SOFTWARE.
     27 */
     28#ifndef HW_CAN_CTUCAN_CORE_H
     29#define HW_CAN_CTUCAN_CORE_H
     30
     31#include "exec/hwaddr.h"
     32#include "net/can_emu.h"
     33
     34#ifndef HOST_WORDS_BIGENDIAN
     35#define __LITTLE_ENDIAN_BITFIELD 1
     36#endif
     37
     38#include "ctu_can_fd_frame.h"
     39#include "ctu_can_fd_regs.h"
     40
     41#define CTUCAN_CORE_MEM_SIZE       0x500
     42
     43/* The max size for a message in FIFO */
     44#define CTUCAN_MSG_MAX_LEN        (CTU_CAN_FD_DATA_1_4_W + 64)
     45/* The receive buffer size. */
     46#define CTUCAN_RCV_BUF_LEN        (1024 * 8)
     47
     48
     49/* The max size for a message buffer */
     50#define CTUCAN_CORE_MSG_MAX_LEN       0x50
     51/* The receive buffer size. */
     52#define CTUCAN_CORE_RCV_BUF_LEN       0x1000
     53
     54#define CTUCAN_CORE_TXBUF_NUM            4
     55
     56typedef struct CtuCanCoreMsgBuffer {
     57    uint8_t data[CTUCAN_CORE_MSG_MAX_LEN];
     58} CtuCanCoreMsgBuffer;
     59
     60typedef struct CtuCanCoreState {
     61    union ctu_can_fd_mode_settings                  mode_settings;
     62    union ctu_can_fd_status                         status;
     63    union ctu_can_fd_int_stat                       int_stat;
     64    union ctu_can_fd_int_ena_set                    int_ena;
     65    union ctu_can_fd_int_mask_set                   int_mask;
     66    union ctu_can_fd_btr                            brt;
     67    union ctu_can_fd_btr_fd                         brt_fd;
     68    union ctu_can_fd_ewl_erp_fault_state            ewl_erp_fault_state;
     69    union ctu_can_fd_rec_tec                        rec_tec;
     70    union ctu_can_fd_err_norm_err_fd                err_norm_err_fd;
     71    union ctu_can_fd_ctr_pres                       ctr_pres;
     72    union ctu_can_fd_filter_a_mask                  filter_a_mask;
     73    union ctu_can_fd_filter_a_val                   filter_a_val;
     74    union ctu_can_fd_filter_b_mask                  filter_b_mask;
     75    union ctu_can_fd_filter_b_val                   filter_b_val;
     76    union ctu_can_fd_filter_c_mask                  filter_c_mask;
     77    union ctu_can_fd_filter_c_val                   filter_c_val;
     78    union ctu_can_fd_filter_ran_low                 filter_ran_low;
     79    union ctu_can_fd_filter_ran_high                filter_ran_high;
     80    union ctu_can_fd_filter_control_filter_status   filter_control_filter_status;
     81    union ctu_can_fd_rx_mem_info                    rx_mem_info;
     82    union ctu_can_fd_rx_pointers                    rx_pointers;
     83    union ctu_can_fd_rx_status_rx_settings          rx_status_rx_settings;
     84    union ctu_can_fd_tx_status                      tx_status;
     85    union ctu_can_fd_tx_priority                    tx_priority;
     86    union ctu_can_fd_err_capt_alc                   err_capt_alc;
     87    union ctu_can_fd_trv_delay_ssp_cfg              trv_delay_ssp_cfg;
     88    union ctu_can_fd_rx_fr_ctr                      rx_fr_ctr;
     89    union ctu_can_fd_tx_fr_ctr                      tx_fr_ctr;
     90    union ctu_can_fd_debug_register                 debug_register;
     91    union ctu_can_fd_yolo_reg                       yolo_reg;
     92    union ctu_can_fd_timestamp_low                  timestamp_low;
     93    union ctu_can_fd_timestamp_high                 timestamp_high;
     94
     95    CtuCanCoreMsgBuffer tx_buffer[CTUCAN_CORE_TXBUF_NUM];
     96
     97    uint8_t         rx_buff[CTUCAN_RCV_BUF_LEN];  /* 32~95 .. 64bytes Rx FIFO */
     98    uint32_t        rx_tail_pos;        /* Count by bytes. */
     99    uint32_t        rx_cnt;        /* Count by bytes. */
    100    uint32_t        rx_frame_rem;
    101
    102    qemu_irq        irq;
    103    CanBusClientState bus_client;
    104} CtuCanCoreState;
    105
    106void ctucan_hardware_reset(CtuCanCoreState *s);
    107
    108void ctucan_mem_write(CtuCanCoreState *s, hwaddr addr, uint64_t val,
    109                       unsigned size);
    110
    111uint64_t ctucan_mem_read(CtuCanCoreState *s, hwaddr addr, unsigned size);
    112
    113int ctucan_connect_to_bus(CtuCanCoreState *s, CanBusState *bus);
    114
    115void ctucan_disconnect(CtuCanCoreState *s);
    116
    117int ctucan_init(CtuCanCoreState *s, qemu_irq irq);
    118
    119bool ctucan_can_receive(CanBusClientState *client);
    120
    121ssize_t ctucan_receive(CanBusClientState *client,
    122                        const qemu_can_frame *frames, size_t frames_cnt);
    123
    124extern const VMStateDescription vmstate_ctucan;
    125
    126#endif