// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0

#ifndef OPENTITAN_HW_DV_DPI_SPIDPI_SPIDPI_H_
#define OPENTITAN_HW_DV_DPI_SPIDPI_SPIDPI_H_

#include <limits.h>
#include <svdpi.h>

extern "C" {

#define MAX_TRANSACTION 4
struct spidpi_ctx {
  int loglevel;
  char ptyname[64];
  int host;
  int device;
  FILE *mon_file;
  char mon_pathname[PATH_MAX];
  void *mon;
  int tick;
  int cpol;
  int cpha;
  int msbfirst;  // shift direction
  int nout;
  int bout;
  int nin;
  int bin;
  int din;
  int nmax;
  char driving;
  int state;
  char buf[MAX_TRANSACTION];
};

// SPI Host States
#define SP_IDLE 0
#define SP_CSFALL 1
#define SP_DMOVE 2
#define SP_LASTBIT 3
#define SP_CSRISE 4
#define SP_FINISH 99

// Bits in data to C
#define D2P_SDO 0x2
#define D2P_SDO_EN 0x1

// Bits in char from C
#define P2D_SCK 0x1
#define P2D_CSB 0x2
#define P2D_SDI 0x4

void *spidpi_create(const char *name, int mode, int loglevel);
char spidpi_tick(void *ctx_void, const svLogicVecVal *d2p_data);
void spidpi_close(void *ctx_void);

// monitor
void monitor_spi(void *mon_void, FILE *mon_file, int loglevel, int tick,
                 int p2d, int d2p);
void *monitor_spi_init(int mode);
}
#endif  // OPENTITAN_HW_DV_DPI_SPIDPI_SPIDPI_H_
