#pragma once

#include <stdint.h>

#define GSM(x)	(0x5000 + x)

enum diag_log_code_gsm {
	LOG_GSM_POWER_SCAN_C				= 0x64,
	LOG_GSM_FCCH_DECODE_C				= 0x65,
	LOG_GSM_NCELL_ACQ_C				= 0x75,
	LOG_GSM_AFC_ADJUST_C				= 0x7c,
	LOG_GSM_MON_BURST_C				= 0x82,
	LOG_GSM_BCCH_BURST_METRICS_C			= 0x85,
	LOG_GSM_MDSP_CMD_C				= 0x8c,
	LOG_GSM_GL1_HW_CMD_C				= 0x8d,
	LOG_GSM_RR_SIGNALING_MESSAGE_C			= 0x12f,

	/* Layer2 (LAPDm) */
	LOG_GSM_L2_STATE_C				= 200,
	LOG_GSM_L2_TRANSMISSION_STATUS_C		= 201,
	LOG_GSM_L2_OUTSTANDING_FRAME_C			= 202,


	LOG_GSM_RR_STATE_C				= 300,
	//= 303,
	LOG_GSM_RR_CONTROL_CHANNEL_PARAMS_C		= 306,

	LOG_GPRS_INDICATORS_C				= 500,
	LOG_GPRS_GENERAL_PARAMS_C			= 501,
	LOG_GPRS_CELL_OPTIONS_C				= 502,
	LOG_GPRS_POWER_CONTROL_PARAMS_C			= 503,
	LOG_GPRS_MOBILE_ALLOCATION_C			= 504,
	LOG_GPRS_PBCCH_DESCRIPTION_C			= 505,
	LOG_GPRS_GRR_STATE_C				= 506,
	LOG_GPRS_RR_CELL_RESELECTION_PARAMS_C		= 507,
	LOG_GPRS_RR_CELL_RESELECTION_MEASMNTS_C		= 508,
	LOG_GPRS_RR_PSI1_C				= 509,
	LOG_GPRS_RR_PSI2_C				= 510,
	LOG_GPRS_RR_PSI3_C				= 511,
	LOG_GPRS_RLC_UL_ABNRML_RLS_COUNTS_C		= 512,
	LOG_GPRS_RLC_UL_EVENT_COUNTS_C			= 513,
	LOG_GPRS_RLC_UL_STATS_C				= 514,
	LOG_EGPRS_RLC_UL_HEADER_C			= 517,
	LOG_EGPRS_RLC_DL_HEADER_C			= 518,
	LOG_EGPRS_RLC_UL_STATS_C			= 519,
	LOG_EGPRS_RLC_DL_STATS_C			= 520,
	LOG_EGPRS_RLC_EPUAN_C				= 521,
	LOG_GPRS_RLC_DL_STATS_C				= 522,
	LOG_GPRS_RLC_UL_ACKNACK_PARAMS_C		= 523,
	LOG_GPRS_RLC_DL_ACKNACK_PARAMS_C		= 524,
	LOG_GPRS_RLC_UL_RELEASE_IND_C			= 525,
	LOG_GPRS_RLC_DL_RELEASE_IND_C			= 526,
	LOG_GPRS_RLC_UL_ACKNACK_PARAMS_VER2_C		= 527,
	LOG_GPRS_RLC_DL_ACKNACK_PARAMS_VER2_C		= 528,
	LOG_EGPRS_RLC_EPDAN_C				= 529,
	LOG_GPRS_LLC_ME_INFO_C				= 530,
	LOG_GPRS_LLC_SAPI_STATES_C			= 531,
	LOG_GPRS_LLC_XID_INFO_C				= 532,
	LOG_GPRS_LLC_PDU_STATS_C			= 533,
	LOG_GPRS_LLC_PERIODIC_STATS_C			= 534,
	LOG_GPRS_LLC_READY_TIMER_STATUS_C		= 535,
	LOG_GPRS_LLC_SEND_UI_FRAME_C			= 536,
	LOG_GPRS_LLC_RECV_UI_FRAME_C			= 537,
	LOG_GPRS_LLC_READY_TIMER_STATUS_VER2_C		= 538,
	LOG_GPRS_SNDCP_ACTIVE_PDP_CONTEXTS_C		= 540,
	LOG_GPRS_SNDCP_PDP_CONTEXT_INFO_C		= 541,
	LOG_GPRS_SNDCP_STATES_C				= 542,
	LOG_GPRS_SNDCP_PDU_STATS_C			= 543,
	LOG_GPRS_SNDCP_UL_TCP_HDR_C			= 544,
	LOG_GPRS_SNDCP_DL_TCP_HDR_C			= 545,
	LOG_GPRS_MAC_SIGNALLING_MESSAGE_C		= 550,
	LOG_GPRS_MAC_STATE_C				= 551,
	LOG_GPRS_MAC_UL_TBF_ESTABLISH_C			= 552,
	LOG_GPRS_MAC_UL_TBF_RELEASE_C			= 553,
	LOG_GPRS_MAC_DL_TBF_ESTABLISH_C			= 554,
	LOG_GPRS_MAC_DL_TBF_RELEASE_C			= 555,
	LOG_EGPRS_MAC_UL_ACKNACK_C			= 556,
	LOG_EGPRS_MAC_DL_ACKNACK_C			= 557,
	LOG_EGPRS_SRB_HARD_DECISIONS_C			= 558,
	LOG_GPRS_SM_GMM_OTA_MESSAGE_C			= 560,
	LOG_GPRS_AIR_INTERFACE_SUMMARY_C		= 561,
	LOG_GPRS_AGC_C					= 562,
	LOG_GPRS_TIMING_ADVANCE_C			= 563,
	LOG_GPRS_POWER_CONTROL_C			= 564,
	LOG_GPRS_TRANSFER_SUMMARY_C			= 565,
	LOG_GPRS_TX_SCHEDULED_RESULTS_C			= 567,
	LOG_GPRS_HW_SCHEDULE_C				= 570,
	LOG_UPLINK_TBF_DATA_BLOCK_COUNT_C		= 575,
	LOG_GPRS_RECEIVE_BURST_METRICS_A_C		= 581,
	LOG_GPRS_RECEIVE_BURST_METRICS_B_C		= 582,
	LOG_GPRS_RECEIVE_BURST_METRICS_C_C		= 583,
	LOG_GPRS_RECEIVE_BURST_METRICS_D_C		= 584,
	LOG_GPRS_RECEIVE_MSG_METRICS_A_C		= 585,
	LOG_GPRS_RECEIVE_MSG_METRICS_B_C		= 586,
	LOG_GPRS_RECEIVE_MSG_METRICS_C_C		= 587,
	LOG_GPRS_RECEIVE_MSG_METRICS_D_C		= 588,
	LOG_GPRS_RECEIVE_MSG_METRICS_A_VER2_C		= 589,
	LOG_GPRS_RECEIVE_MSG_METRICS_B_VER2_C		= 590,
	LOG_GPRS_RECEIVE_MSG_METRICS_C_VER2_C		= 591,
	LOG_GPRS_RECEIVE_MSG_METRICS_D_VER2_C		= 592,
	LOG_GPRS_DLPTCCH_BURST_METRICS_C		= 593,
	LOG_GPRS_DLPTCCH_MSG_METRICS_C			= 594,
};

enum diag_gsm_cmd {
	GSM_DIAG_VERNO_F		= 0,
	GSM_STATUS_F			= 1,
	GSM_TMC_STATE_RETRIEVAL_F	= 2,
	GSM_DIAG_CALL_ORIG_F		= 3,
	GSM_DIAG_CALL_END_F		= 4,
	GSM_GPRS_LOG_PACKET_REQ_F	= 5,
	DIAG_GSM_MAX_F			= 6,
};

/* channel_type | 0x80 == downlink */
enum diag_gsm_rr_chan_type {
	DIAG_GSM_L2_CHAN_TYPE_DCCH	= 0,
	DIAG_GSM_L2_CHAN_TYPE_BCCH	= 1,
	DIAG_GSM_L2_CHAN_TYPE_RACH	= 2,
	DIAG_GSM_L2_CHAN_TYPE_CCCH	= 3,
	DIAG_GSM_L2_CHAN_TYPE_SACCH	= 4,
	DIAG_GSM_L2_CHAN_TYPE_SDCCH	= 5,
	DIAG_GSM_L2_CHAN_TYPE_FACCH_F	= 6,
	DIAG_GSM_L2_CHAN_TYPE_FACCH_H	= 7,
};

/* LOG_GSM_RR_SIGNALING_MESSAGE_C */
struct diag_gsm_rr_msg {
	uint8_t chan_type;
	uint8_t msg_type;
	uint8_t length;
	uint8_t data[0];
} __attribute__((packed));

enum diag_gsm_rr_st {
	DIAG_RR_ST_INACTIVE		= 0,
	DIAG_RR_ST_GOING_ACTIVE		= 1,
	DIAG_RR_ST_GOING_INACTIVE	= 2,
	DIAG_RR_ST_CELL_SELECTION	= 3,
	DIAG_RR_ST_PLMN_LIST_CONSTRUCTION = 4,
	DIAG_RR_ST_IDLE			= 5,
	DIAG_RR_ST_CELL_RESELECTION	= 6,
	DIAG_RR_ST_CONNECTION_PENDING	= 7,
	DIAG_RR_ST_CHOOSE_CELL		= 8,
	DIAG_RR_ST_DATA_TRANSFER	= 9,
	DIAG_RR_ST_NO_CHANNELS		= 10,
	DIAG_RR_ST_CONNECTION_RELEASE	= 11,
	DIAG_RR_ST_EARLY_CAMPED_WAIT_FOR_SI= 12,
	DIAG_RR_ST_W2G_INTERRAT_HO_PROGRESS= 13,
	DIAG_RR_ST_W2G_INTERRAT_RESELECTION_PROGRESS = 14,
	DIAG_RR_ST_W2G_INTERRAT_CC_ORDER_PROGRESS = 15,
	DIAG_RR_ST_G2W_INTERRAT_RESELECTION_PROGRESS = 16,
	DIAG_RR_ST_WAIT_FOR_EARLY_PSCAN	= 17,
	DIAG_RR_ST_GRR			= 18,
	DIAG_RR_ST_G2W_INTERRAT_HO_PROGRESS = 20,
	DIAG_RR_ST_BACKGROUND_PLMN_SEARCH = 21,
	DIAG_RR_ST_W2G_SERVICE_REDIR_IN_PROGRESS = 22,
	DIAG_RR_ST_RESET		= 23,
	DIAG_RR_ST_W2G_BACKGROUND_PLN_SEARCH = 24,
};
extern const struct value_string diag_gsm_rr_st_vals[25];

/* LOG_GSM_RR_STATE_C */
struct diag_gsm_rr_state {
	uint8_t state;
	uint8_t substate;
	uint8_t status;
	uint8_t mode;
} __attribute__((packed));

enum diag_gprs_grr_st {
	DIAG_GRR_ST_NULL	= 0,
	DIAG_GRR_ST_ACQUIRE	= 1,
	DIAG_GRR_ST_CAMPED	= 2,
	DIAG_GRR_ST_CONN_PEND	= 3,
	DIAG_GRR_ST_CELL_RESEL	= 4,
	DIAG_GRR_ST_CELL_RESEL_G2W	= 6,
	DIAG_GRR_ST_BG_PLMN_SEARCH	= 7,
	DIAG_GRR_ST_PCCO	= 8,
};
extern const struct value_string diag_gprs_grr_st_vals[9];

/* LOG_GPRS_GRR_STATE_C */
struct diag_gprs_grr_state {
	uint8_t	active_state;
	uint8_t grr_state;
} __attribute__((packed));


enum diag_gprs_llme_state {
	DIAG_GPRS_LLMES_TLLI_UNASS	= 0,
	DIAG_GPRS_LLMES_TLLI_ASS	= 1,
	DIAG_GPRS_LLMES_TEST_MODE	= 2,
};
extern const struct value_string diag_gprs_llme_st_vals[4];

/* LOG_GPRS_LLC_ME_INFO_C */
struct diag_gprs_llme_info {
	uint8_t state;
	uint8_t xid_version;
	uint32_t tlli_new;
	uint32_t tlli_old;
	uint8_t enc_alg;
	uint8_t enc_key[8];
	uint32_t input_offset_iov_ui;
} __attribute__((packed));

/* LOG_GPRS_LLC_PDU_STATS_C */
struct diag_gprs_llc_stats {
	uint8_t	sapi;
	uint32_t ack_l3pdu_tx;
	uint32_t ack_octet_tx;
	uint32_t ack_l3pdu_retrans;
	uint32_t ack_octet_retrans;
	uint32_t ack_l3pdu_rx;
	uint32_t ack_octet_rx;
	uint32_t unack_l3pdu_tx;
	uint32_t unack_octet_tx;
	uint32_t unack_l3pdu_rx;
	uint32_t unack_octet_rx;
	uint32_t llpdu_tx;
	uint32_t llpdu_rx;
	uint32_t llpdu_fcs_err;
	uint32_t llpdu_frm_rej;
	uint32_t llpdu_tlli_err;
	uint32_t llpdu_addr_err;
	uint32_t llpdu_short_err;
} __attribute__((packed));

struct diag_xid_tuple32 {
	uint32_t current;
	uint32_t preferred;
} __attribute__ ((packed));

struct diag_xid_tuple16 {
	uint16_t current;
	uint16_t preferred;
} __attribute__ ((packed));

struct diag_xid_tuple8 {
	uint8_t current;
	uint8_t preferred;
} __attribute__ ((packed));

/* LOG_GPRS_LLC_XID_INFO_C */
struct diag_gprs_llc_xid_info {
	uint8_t gllc_sapi;
	uint16_t pending_xid_bitmap;
	uint32_t cur_iov_i;
	struct diag_xid_tuple32 t200;
	struct diag_xid_tuple8 n200;
	struct diag_xid_tuple16 n201_u;
	struct diag_xid_tuple16 n201_i;
	struct diag_xid_tuple16 md;
	struct diag_xid_tuple16 mu;
	struct diag_xid_tuple8 kd;
	struct diag_xid_tuple8 ku;
} __attribute__ ((packed));

struct diag_mdsp_log_cmd {
	uint32_t fn;
	uint16_t cnt;
	uint16_t seq;
	uint16_t cmd;
	uint16_t params[5];
} __attribute__ ((packed));

struct diag_mdsp_log_cmds {
	uint32_t num_cmds;
	struct diag_mdsp_log_cmd cmds[16];
} __attribute__ ((packed));


enum diag_gsm_sapi0_state {
	DIAG_SAPI0_ST_NULL,
	DIAG_SAPI0_ST_CON_PEND,
	DIAG_SAPI0_ST_IDLE,
	DIAG_SAPI0_ST_EST_PEND,
	DIAG_SAPI0_ST_REL_PEND,
	DIAG_SAPI0_ST_LINK_EST,
	DIAG_SAPI0_ST_TMR_RECOV,
	DIAG_SAPI0_ST_LINK_SUSP,
	DIAG_SAPI0_ST_UA_PEND,
};
extern const struct value_string diag_gsm_l2_sapi0_st_vals[10];

enum diag_gsm_sapi3_state {
	DIAG_SAPI3_ST_NULL,
	DIAG_SAPI3_ST_CON_PEND,
	DIAG_SAPI3_ST_IDLE,
	DIAG_SAPI3_ST_EST_PEND,
	DIAG_SAPI3_ST_REL_PEND,
	DIAG_SAPI3_ST_LINK_EST,
	DIAG_SAPI3_ST_TMR_RECOV,
	DIAG_SAPI3_ST_UA_PEND,
};
extern const struct value_string diag_gsm_l2_sapi3_st_vals[9];

enum diag_gsm_l2_event {
	DIAG_L2_EV_NO_EVENT,
	DIAG_L2_EV_CONNECT_RECEIVED,
	DIAG_L2_EV_ESTABLISH_REQUEST,
	DIAG_L2_EV_RELEASE_REQUEST,
	DIAG_L2_EV_SUSPEND_REQUEST,
	DIAG_L2_EV_RESUME_REQUEST,
	DIAG_L2_EV_RECONNECT_REQUEST,
	DIAG_L2_EV_DATA_REQUEST,
	DIAG_L2_EV_MDL_RELEASE_REQUEST,
	DIAG_L2_EV_UA_RECEIVED,
	DIAG_L2_EV_DM_RECEIVED,
	DIAG_L2_EV_DISC_RECEIVED,
	DIAG_L2_EV_SABM_RECEIVED,
	DIAG_L2_EV_I_RECEIVED,
	DIAG_L2_EV_UI_RECEIVED,
	DIAG_L2_EV_RR_RECEIVED,
	DIAG_L2_EV_REJ_RECEIVED,
	DIAG_L2_EV_T200_TIMEOUT,
	DIAG_L2_EV_CONTENTION_FAILED,
	DIAG_L2_EV_ABORT_ESTABLISHMENT,
	DIAG_L2_EV_LINK_ESTABLISHED,
	DIAG_L2_EV_RELEASE_CONFIRMED,
	DIAG_L2_EV_CLEAR_RECOVERY_CONDITION,
	DIAG_L2_EV_OPTIONAL_SEND,
	DIAG_L2_EV_RESET_L2,
	DIAG_L2_EV_UA_SENT,
	DIAG_L2_EV_FORCED_SUSPEND_REQ,
};
extern const struct value_string diag_gsm_l2_event_vals[28];

struct diag_gsm_l2_state {
	uint8_t sapi;
	uint8_t l2_state;
	uint8_t l2_event;
} __attribute__ ((packed));

enum diag_gsm_l2_chantype {
	DIAG_L2_CHT_DCCH	= 0,
	DIAG_L2_CHT_BCCH	= 1,
	DIAG_L2_CHT_L2_RACH	= 2,
	DIAG_L2_CHT_CCCH	= 3,
	DIAG_L2_CHT_SACCH	= 4,
	DIAG_L2_CHT_SDCCH	= 5,
	DIAG_L2_CHT_FACCH_F	= 6,
	DIAG_L2_CHT_FACCH_H	= 7,
};
extern const struct value_string diag_gsm_l2_chantype_vals[9];

struct diag_gsm_l2_transm_status {
	uint8_t sapi;
	uint8_t channel_type;
	uint8_t vs;
	uint8_t va;
	uint8_t vr;
	uint8_t retrans_ctr;
	uint8_t seq_err;
	uint8_t frame_type;
	uint8_t msg_entries;
	uint8_t seg_entries;
} __attribute__ ((packed));

struct msgb *diag_gsm_make_log_pack_req(uint16_t log_code, uint8_t zero_stats, uint8_t addl_info);
