root/drivers/staging/media/atomisp/pci/hive_isp_css_common/host/fifo_monitor_local.h
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Support for Intel Camera Imaging ISP subsystem.
 * Copyright (c) 2010-2015, Intel Corporation.
 */

#ifndef __FIFO_MONITOR_LOCAL_H_INCLUDED__
#define __FIFO_MONITOR_LOCAL_H_INCLUDED__

#include <type_support.h>
#include "fifo_monitor_global.h"

#include "hive_isp_css_defs.h"  /* ISP_STR_MON_PORT_SND_SP, ... */

#define _hive_str_mon_valid_offset   0
#define _hive_str_mon_accept_offset  1

#define FIFO_CHANNEL_SP_VALID_MASK              0x55555555
#define FIFO_CHANNEL_SP_VALID_B_MASK    0x00000055
#define FIFO_CHANNEL_ISP_VALID_MASK             0x15555555
#define FIFO_CHANNEL_MOD_VALID_MASK             0x55555555

typedef enum fifo_switch {
        FIFO_SWITCH_IF,
        FIFO_SWITCH_GDC0,
        FIFO_SWITCH_GDC1,
        N_FIFO_SWITCH
} fifo_switch_t;

typedef enum fifo_channel {
        FIFO_CHANNEL_ISP0_TO_SP0,
        FIFO_CHANNEL_SP0_TO_ISP0,
        FIFO_CHANNEL_ISP0_TO_IF0,
        FIFO_CHANNEL_IF0_TO_ISP0,
        FIFO_CHANNEL_ISP0_TO_IF1,
        FIFO_CHANNEL_IF1_TO_ISP0,
        FIFO_CHANNEL_ISP0_TO_DMA0,
        FIFO_CHANNEL_DMA0_TO_ISP0,
        FIFO_CHANNEL_ISP0_TO_GDC0,
        FIFO_CHANNEL_GDC0_TO_ISP0,
        FIFO_CHANNEL_ISP0_TO_GDC1,
        FIFO_CHANNEL_GDC1_TO_ISP0,
        FIFO_CHANNEL_ISP0_TO_HOST0,
        FIFO_CHANNEL_HOST0_TO_ISP0,
        FIFO_CHANNEL_SP0_TO_IF0,
        FIFO_CHANNEL_IF0_TO_SP0,
        FIFO_CHANNEL_SP0_TO_IF1,
        FIFO_CHANNEL_IF1_TO_SP0,
        FIFO_CHANNEL_SP0_TO_IF2,
        FIFO_CHANNEL_IF2_TO_SP0,
        FIFO_CHANNEL_SP0_TO_DMA0,
        FIFO_CHANNEL_DMA0_TO_SP0,
        FIFO_CHANNEL_SP0_TO_GDC0,
        FIFO_CHANNEL_GDC0_TO_SP0,
        FIFO_CHANNEL_SP0_TO_GDC1,
        FIFO_CHANNEL_GDC1_TO_SP0,
        FIFO_CHANNEL_SP0_TO_HOST0,
        FIFO_CHANNEL_HOST0_TO_SP0,
        FIFO_CHANNEL_SP0_TO_STREAM2MEM0,
        FIFO_CHANNEL_STREAM2MEM0_TO_SP0,
        FIFO_CHANNEL_SP0_TO_INPUT_SYSTEM0,
        FIFO_CHANNEL_INPUT_SYSTEM0_TO_SP0,
        /*
         * No clue what this is
         *
                FIFO_CHANNEL_SP0_TO_IRQ0,
                FIFO_CHANNEL_IRQ0_TO_SP0,
         */
        N_FIFO_CHANNEL
} fifo_channel_t;

struct fifo_channel_state_s {
        bool    src_valid;
        bool    fifo_accept;
        bool    fifo_valid;
        bool    sink_accept;
};

/* The switch is tri-state */
struct fifo_switch_state_s {
        bool    is_none;
        bool    is_isp;
        bool    is_sp;
};

struct fifo_monitor_state_s {
        struct fifo_channel_state_s     fifo_channels[N_FIFO_CHANNEL];
        struct fifo_switch_state_s      fifo_switches[N_FIFO_SWITCH];
};

#endif /* __FIFO_MONITOR_LOCAL_H_INCLUDED__ */