/* SPDX-License-Identifier: GPL-2.0-or-later */
/*******************************************************************************
 *
 * CTU CAN FD IP Core
 *
 * Copyright (C) 2015-2018 Ondrej Ille <ondrej.ille@gmail.com> FEE CTU
 * Copyright (C) 2018-2020 Ondrej Ille <ondrej.ille@gmail.com> self-funded
 * Copyright (C) 2018-2019 Martin Jerabek <martin.jerabek01@gmail.com> FEE CTU
 * Copyright (C) 2018-2020 Pavel Pisa <pisa@cmp.felk.cvut.cz> FEE CTU/self-funded
 *
 * Project advisors:
 *     Jiri Novak <jnovak@fel.cvut.cz>
 *     Pavel Pisa <pisa@cmp.felk.cvut.cz>
 *
 * Department of Measurement         (http://meas.fel.cvut.cz/)
 * Faculty of Electrical Engineering (http://www.fel.cvut.cz)
 * Czech Technical University        (http://www.cvut.cz/)
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 ******************************************************************************/

/* This file is autogenerated, DO NOT EDIT! */

#ifndef HW_CAN_CTU_CAN_FD_FRAME_H
#define HW_CAN_CTU_CAN_FD_FRAME_H

/* CAN_Frame_format memory map */
enum ctu_can_fd_can_frame_format {
    CTU_CAN_FD_FRAME_FORM_W        = 0x0,
    CTU_CAN_FD_IDENTIFIER_W        = 0x4,
    CTU_CAN_FD_TIMESTAMP_L_W       = 0x8,
    CTU_CAN_FD_TIMESTAMP_U_W       = 0xc,
    CTU_CAN_FD_DATA_1_4_W         = 0x10,
    CTU_CAN_FD_DATA_5_8_W         = 0x14,
    CTU_CAN_FD_DATA_61_64_W       = 0x4c,
};


/* Register descriptions: */
union ctu_can_fd_frame_form_w {
    uint32_t u32;
    struct ctu_can_fd_frame_form_w_s {
#ifdef __LITTLE_ENDIAN_BITFIELD
  /* FRAME_FORM_W */
        uint32_t dlc                     : 4;
        uint32_t reserved_4              : 1;
        uint32_t rtr                     : 1;
        uint32_t ide                     : 1;
        uint32_t fdf                     : 1;
        uint32_t reserved_8              : 1;
        uint32_t brs                     : 1;
        uint32_t esi_rsv                 : 1;
        uint32_t rwcnt                   : 5;
        uint32_t reserved_31_16         : 16;
#else
        uint32_t reserved_31_16         : 16;
        uint32_t rwcnt                   : 5;
        uint32_t esi_rsv                 : 1;
        uint32_t brs                     : 1;
        uint32_t reserved_8              : 1;
        uint32_t fdf                     : 1;
        uint32_t ide                     : 1;
        uint32_t rtr                     : 1;
        uint32_t reserved_4              : 1;
        uint32_t dlc                     : 4;
#endif
    } s;
};

enum ctu_can_fd_frame_form_w_rtr {
    NO_RTR_FRAME       = 0x0,
    RTR_FRAME          = 0x1,
};

enum ctu_can_fd_frame_form_w_ide {
    BASE           = 0x0,
    EXTENDED       = 0x1,
};

enum ctu_can_fd_frame_form_w_fdf {
    NORMAL_CAN       = 0x0,
    FD_CAN           = 0x1,
};

enum ctu_can_fd_frame_form_w_brs {
    BR_NO_SHIFT       = 0x0,
    BR_SHIFT          = 0x1,
};

enum ctu_can_fd_frame_form_w_esi_rsv {
    ESI_ERR_ACTIVE       = 0x0,
    ESI_ERR_PASIVE       = 0x1,
};

union ctu_can_fd_identifier_w {
    uint32_t u32;
    struct ctu_can_fd_identifier_w_s {
#ifdef __LITTLE_ENDIAN_BITFIELD
  /* IDENTIFIER_W */
        uint32_t identifier_ext         : 18;
        uint32_t identifier_base        : 11;
        uint32_t reserved_31_29          : 3;
#else
        uint32_t reserved_31_29          : 3;
        uint32_t identifier_base        : 11;
        uint32_t identifier_ext         : 18;
#endif
    } s;
};

union ctu_can_fd_timestamp_l_w {
    uint32_t u32;
    struct ctu_can_fd_timestamp_l_w_s {
  /* TIMESTAMP_L_W */
        uint32_t time_stamp_31_0        : 32;
    } s;
};

union ctu_can_fd_timestamp_u_w {
    uint32_t u32;
    struct ctu_can_fd_timestamp_u_w_s {
  /* TIMESTAMP_U_W */
        uint32_t timestamp_l_w          : 32;
    } s;
};

union ctu_can_fd_data_1_4_w {
    uint32_t u32;
    struct ctu_can_fd_data_1_4_w_s {
#ifdef __LITTLE_ENDIAN_BITFIELD
  /* DATA_1_4_W */
        uint32_t data_1                  : 8;
        uint32_t data_2                  : 8;
        uint32_t data_3                  : 8;
        uint32_t data_4                  : 8;
#else
        uint32_t data_4                  : 8;
        uint32_t data_3                  : 8;
        uint32_t data_2                  : 8;
        uint32_t data_1                  : 8;
#endif
    } s;
};

union ctu_can_fd_data_5_8_w {
    uint32_t u32;
    struct ctu_can_fd_data_5_8_w_s {
#ifdef __LITTLE_ENDIAN_BITFIELD
  /* DATA_5_8_W */
        uint32_t data_5                  : 8;
        uint32_t data_6                  : 8;
        uint32_t data_7                  : 8;
        uint32_t data_8                  : 8;
#else
        uint32_t data_8                  : 8;
        uint32_t data_7                  : 8;
        uint32_t data_6                  : 8;
        uint32_t data_5                  : 8;
#endif
    } s;
};

union ctu_can_fd_data_61_64_w {
    uint32_t u32;
    struct ctu_can_fd_data_61_64_w_s {
#ifdef __LITTLE_ENDIAN_BITFIELD
  /* DATA_61_64_W */
        uint32_t data_61                 : 8;
        uint32_t data_62                 : 8;
        uint32_t data_63                 : 8;
        uint32_t data_64                 : 8;
#else
        uint32_t data_64                 : 8;
        uint32_t data_63                 : 8;
        uint32_t data_62                 : 8;
        uint32_t data_61                 : 8;
#endif
    } s;
};

#endif
