/******************************************************************************
 *
 * Copyright(c) 2007 - 2016  Realtek Corporation.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of version 2 of the GNU General Public License as
 * published by the Free Software Foundation.
 *
 * 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.
 *
 * The full GNU General Public License is included in this distribution in the
 * file called LICENSE.
 *
 * Contact Information:
 * wlanfae <wlanfae@realtek.com>
 * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
 * Hsinchu 300, Taiwan.
 *
 * Larry Finger <Larry.Finger@lwfinger.net>
 *
 *****************************************************************************/
#ifndef __INC_ADCSMP_H
#define __INC_ADCSMP_H

#define DYNAMIC_LA_MODE "1.0" /*2016.07.15  Dino */

struct rt_adcsmp_string {
	u32 *octet;
	u32 length;
	u32 buffer_size;
	u32 start_pos;
};

enum rt_adcsmp_trig_sel {
	PHYDM_ADC_BB_TRIG = 0,
	PHYDM_ADC_MAC_TRIG = 1,
	PHYDM_ADC_RF0_TRIG = 2,
	PHYDM_ADC_RF1_TRIG = 3,
	PHYDM_MAC_TRIG = 4
};

enum rt_adcsmp_trig_sig_sel {
	ADCSMP_TRIG_CRCOK = 0,
	ADCSMP_TRIG_CRCFAIL = 1,
	ADCSMP_TRIG_CCA = 2,
	ADCSMP_TRIG_REG = 3
};

enum rt_adcsmp_state {
	ADCSMP_STATE_IDLE = 0,
	ADCSMP_STATE_SET = 1,
	ADCSMP_STATE_QUERY = 2
};

struct rt_adcsmp {
	struct rt_adcsmp_string adc_smp_buf;
	enum rt_adcsmp_state adc_smp_state;
	u8 la_trig_mode;
	u32 la_trig_sig_sel;
	u8 la_dma_type;
	u32 la_trigger_time;
	u32 la_mac_ref_mask;
	u32 la_dbg_port;
	u8 la_trigger_edge;
	u8 la_smp_rate;
	u32 la_count;
	u8 is_bb_trigger;
	u8 la_work_item_index;
};

void adc_smp_set(void *dm_void, u8 trig_mode, u32 trig_sig_sel,
		 u8 dma_data_sig_sel, u32 trigger_time, u16 polling_time);

void adc_smp_query(void *dm_void, void *output, u32 out_len, u32 *pused);

s32 adc_smp_get_sample_counts(void *dm_void);

s32 adc_smp_query_single_data(void *dm_void, void *output, u32 out_len,
			      u32 index);

void adc_smp_stop(void *dm_void);

void adc_smp_init(void *dm_void);

void adc_smp_de_init(void *dm_void);

void phydm_la_mode_bb_setting(void *dm_void);

void phydm_la_mode_set_trigger_time(void *dm_void, u32 trigger_time_mu_sec);

void phydm_lamode_trigger_setting(void *dm_void, char input[][16], u32 *_used,
				  char *output, u32 *_out_len, u32 input_num);
#endif
