308 lines
9.3 KiB
C
Executable File
308 lines
9.3 KiB
C
Executable File
/****************************************************************************
|
|
|
|
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
|
|
|
|
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
|
|
be copied by any method or incorporated into another program without
|
|
the express written consent of Aerospace C.Power. This Information or any portion
|
|
thereof remains the property of Aerospace C.Power. The Information contained herein
|
|
is believed to be accurate and Aerospace C.Power assumes no responsibility or
|
|
liability for its use in any way and conveys no license or title under
|
|
any patent or copyright and makes no representation or warranty that this
|
|
Information is free from patent or copyright infringement.
|
|
|
|
****************************************************************************/
|
|
#ifndef MPDU_HEADER_H
|
|
#define MPDU_HEADER_H
|
|
|
|
/* os shim includes */
|
|
#include "os_types_api.h"
|
|
|
|
#include "mac_data_api.h"
|
|
#include "iot_pkt_api.h"
|
|
#include "hw_war.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*
|
|
structure for
|
|
aquiring different part of FC according to delimiter and proto
|
|
*/
|
|
typedef struct _rx_fc_msg {
|
|
/* plc & rf use */
|
|
uint32_t bcast : 1,
|
|
/* plc & rf use */
|
|
retry : 1,
|
|
/* plc only */
|
|
tmi : 4,
|
|
/* plc only */
|
|
tmi_ext : 4,
|
|
/* plc only */
|
|
numsym : 9,
|
|
/* plc only. gp protocol */
|
|
rtsf : 1,
|
|
/* plc only. gp protocol */
|
|
saf : 1,
|
|
/* plc only */
|
|
phase : 2,
|
|
/* plc & rf use */
|
|
lid : 8,
|
|
/* reserved */
|
|
resv0 : 1;
|
|
/* plc & rf use */
|
|
uint32_t dst_tei : 12,
|
|
/* plc & rf use */
|
|
src_tei : 12,
|
|
/* plc & rf use */
|
|
sack_ext_deli : 8;
|
|
/* plc & rf use. fc crc */
|
|
uint32_t fccs : 24,
|
|
/* plc & rf use */
|
|
load_in_sack : 8;
|
|
/* plc & rf use */
|
|
uint32_t time_stamp;
|
|
/* plc & rf use */
|
|
uint32_t nid : 24,
|
|
/* plc only */
|
|
bitmap_in_sack : 4,
|
|
/* plc & rf use */
|
|
result_in_sack : 4;
|
|
/* plc & rf use */
|
|
int8_t snr_in_sack;
|
|
/* plc only */
|
|
uint8_t pb_num : 4,
|
|
/* plc & rf use */
|
|
delimiter : 4;
|
|
/* rf only. rf phr pb size index */
|
|
uint8_t rf_pb_sz_idx : 4,
|
|
/* rf only. rf phr mcs index */
|
|
rf_mcs : 4;
|
|
/* reserved */
|
|
uint8_t resv1;
|
|
} rx_fc_msg_t;
|
|
|
|
typedef struct _nncco_fc_info {
|
|
uint32_t nid;
|
|
uint32_t delimiter;
|
|
uint32_t network_type;
|
|
union{
|
|
/* nncco */
|
|
struct{
|
|
/* sg: duration
|
|
* nw: continue time
|
|
*/
|
|
uint32_t duration : 16,
|
|
/* sg: next start offset
|
|
* nw: next start offset
|
|
*/
|
|
sbandoffset : 16;
|
|
uint32_t receive_nid;
|
|
/* sg: none
|
|
* nw: last end flag
|
|
*/
|
|
uint8_t bwth_end_flag : 1,
|
|
resv0 : 7;
|
|
/* sg: none
|
|
* nw: last end offset
|
|
*/
|
|
uint16_t bwth_end_shift;
|
|
/* sg self rf channel */
|
|
uint32_t self_rf_channel : 8,
|
|
/* sg self rf option */
|
|
self_rf_option : 2,
|
|
resv1 : 22;
|
|
};
|
|
/* sw nncco */
|
|
struct{
|
|
uint32_t start_ntb_l32;
|
|
/* sg: receive nid.
|
|
* nw: receive bitmap.
|
|
*/
|
|
uint64_t sw_receive_nid : 24,
|
|
sw_duration : 16,
|
|
start_ntb_h24 : 24;
|
|
uint32_t last_offset;
|
|
};
|
|
};
|
|
}nncco_fc_info_t;
|
|
|
|
/*
|
|
structure for
|
|
aquiring different part of FC according to delimiter and proto
|
|
*/
|
|
typedef struct _tx_fc_msg {
|
|
nid_t nid;
|
|
uint32_t fccs;
|
|
tei_t src_tei;
|
|
uint8_t tmi;
|
|
uint8_t ext_tmi;
|
|
uint8_t network_type;
|
|
uint8_t rf_mcs;
|
|
uint8_t rf_pb_sz_idx;
|
|
uint32_t bcn_period_cnt;
|
|
} tx_fc_msg_t;
|
|
|
|
uint32_t mac_get_rx_delimiter_from_fc(uint32_t proto, void *fc);
|
|
|
|
uint32_t mac_get_nid_from_fc(uint32_t proto, void *fc);
|
|
|
|
void mac_get_rx_frm_msg_from_fc(uint32_t proto,
|
|
void *fc, rx_fc_msg_t *msg);
|
|
|
|
void mac_rf_get_rx_frm_msg_from_fc(uint32_t proto,
|
|
void *fc, rx_fc_msg_t *msg);
|
|
|
|
void mac_get_nncco_info_from_fc(void *fc, nncco_fc_info_t *nn_fc_info);
|
|
|
|
uint32_t mac_nncco_nid_compare(uint32_t nid_in_nncco, uint32_t nid_to_check);
|
|
|
|
uint32_t mac_debug_nncco_info(void *fc, uint32_t ntb);
|
|
|
|
void mac_set_bcn_st(void *fc, uint32_t ntb);
|
|
|
|
void mac_set_sync_st(void *fc, uint32_t ntb);
|
|
|
|
void mac_get_tx_msg_from_fc(uint32_t proto, uint32_t delimiter, \
|
|
void *fc, tx_fc_msg_t *msg);
|
|
uint32_t mac_get_delimi_from_fc(uint32_t proto, \
|
|
void *fc);
|
|
uint8_t mac_get_pb_hdr_crc_len(uint32_t delimiter, uint32_t proto);
|
|
uint8_t mac_get_pb_hdr_resv_crc_len(uint32_t delimiter, uint32_t proto);
|
|
uint8_t mac_get_pb_pld_crc_len(uint32_t delimiter, uint32_t proto);
|
|
uint8_t mac_get_pb_crc_len(uint32_t delimiter, uint32_t proto);
|
|
uint8_t mac_get_mpdu_fc_len(uint32_t proto);
|
|
uint8_t mac_get_mpdu_fccs_len(uint32_t proto);
|
|
uint8_t mac_get_pb_hdr_len(uint32_t delimiter, uint32_t proto);
|
|
|
|
/**
|
|
*@brief mac_get_sof_pb_valid_payload_sz
|
|
* get sof pb payload len
|
|
*@param proto sof protocol. see plc_protocol.h
|
|
*@param pb_size sof pb size
|
|
*@return 0: get failed;
|
|
* others: sof pb payload length
|
|
*/
|
|
uint32_t mac_get_sof_pb_valid_payload_sz(uint32_t proto, uint32_t pb_size);
|
|
|
|
void mac_beacon_rx_fc_info_get(uint8_t proto, mac_rx_info_t *rx_info,
|
|
rx_fc_msg_t *msg);
|
|
|
|
/*
|
|
* get/set nncco's protect duration part for different kind of protocol
|
|
* @param proto - protocol value
|
|
* @param fc - pointer for frame control
|
|
* @param dur - value to set, unit ms
|
|
*/
|
|
uint32_t mac_get_nncco_protect_dur(uint32_t proto, void *fc);
|
|
|
|
uint32_t mac_get_nncco_protect_region_offset(uint32_t proto, void *fc);
|
|
uint32_t mac_get_nncco_received_nid(uint32_t proto, void *fc);
|
|
|
|
/**
|
|
*@brief mac_get_nncco_self_ch_id
|
|
* get nncco self rf channel id
|
|
*@param proto sof protocol. see PLC_PROTO_TYPE_XXX
|
|
*@param fc fc/hdr pointer
|
|
*@return nncco fc self rf channel id
|
|
*/
|
|
uint8_t mac_get_nncco_self_ch_id(uint32_t proto, void *fc);
|
|
|
|
/**
|
|
*@brief mac_get_nncco_self_option
|
|
* get nncco self rf option id
|
|
*@param proto sof protocol. see PLC_PROTO_TYPE_XXX
|
|
*@param fc fc/hdr pointer
|
|
*@return nncco fc self rf option id
|
|
*/
|
|
uint8_t mac_get_nncco_self_option(uint32_t proto, void *fc);
|
|
|
|
uint32_t mac_is_unicast(uint32_t proto, void *fc, uint8_t is_rf);
|
|
|
|
uint32_t mac_get_sof_frame_len(uint32_t proto, void *fc);
|
|
|
|
uint32_t mac_get_sof_pbnum(uint32_t proto, void *fc);
|
|
|
|
uint32_t mac_mask_input_nid(uint32_t nid);
|
|
|
|
/**
|
|
*@brief mac_get_bcn_st
|
|
* get timestamp from fc
|
|
*@param proto sof protocol. see plc_protocol.h
|
|
*@param fc fc pointer
|
|
*@return 0: get failed;
|
|
* others: sof pb payload length
|
|
*/
|
|
uint32_t mac_get_bcn_st(uint32_t proto, void *fc);
|
|
|
|
/**
|
|
*@brief mac_get_fc_dtei fc dtei
|
|
*@param proto sof protocol. see plc_protocol.h
|
|
*@param fc fc pointer
|
|
*@return dtei;
|
|
* others: sof pb payload length
|
|
*/
|
|
uint32_t mac_get_fc_dtei(uint32_t proto, void *fc);
|
|
|
|
/**
|
|
*@brief mac_get_unicast_sack_ts
|
|
* get unicast tx sack timestamp
|
|
*@return tx sack ntb timestamp
|
|
*/
|
|
uint32_t mac_get_unicast_sack_ts(void);
|
|
|
|
/**
|
|
*@brief mac_fc_i1901_to_sg convert ieee1901 fc to sg fc
|
|
*@param proto current phy protocol type
|
|
*@param fc ieee1901 protocol fc
|
|
*@return none
|
|
*/
|
|
void mac_fc_i1901_to_sg(uint32_t proto, void *fc);
|
|
|
|
/**
|
|
*@brief mac_fc_sg_to_i1901 convert sg fc to ieee1901 fc
|
|
*@param proto current phy protocol type
|
|
*@param fc sg protocol fc
|
|
*@return none
|
|
*/
|
|
void mac_fc_sg_to_i1901(uint32_t proto, void *fc);
|
|
|
|
#if (ENA_HW_SYNC_PPM_WAR || ENA_SW_SYNC_PPM_WAR)
|
|
/**
|
|
*@brief mac_get_clear_dbg_pkt_ppm_step
|
|
get current packet ppm step and clean
|
|
*@param fc fc address
|
|
*@return ppm step
|
|
*/
|
|
int32_t mac_get_clear_dbg_pkt_ppm_step(void *fc);
|
|
|
|
/**
|
|
*@brief mac_modify_dbg_pkt_tx_ppm
|
|
fix current packet tx ppm
|
|
*@param step ppm shift value
|
|
*@return none
|
|
*/
|
|
void mac_modify_dbg_pkt_tx_ppm(int32_t step);
|
|
|
|
#else /* (ENA_HW_SYNC_PPM_WAR || ENA_SW_SYNC_PPM_WAR) */
|
|
|
|
#define mac_get_clear_dbg_pkt_ppm_step(fc) \
|
|
(0); \
|
|
do { \
|
|
(void)(fc); \
|
|
} while(0)
|
|
|
|
#define mac_modify_dbg_pkt_tx_ppm(step) \
|
|
do { \
|
|
(void)(step); \
|
|
} while(0)
|
|
|
|
#endif /* (ENA_HW_SYNC_PPM_WAR || ENA_SW_SYNC_PPM_WAR) */
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|