221 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			221 lines
		
	
	
		
			7.4 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 MAC_VDEV_API_H
 | 
						|
#define MAC_VDEV_API_H
 | 
						|
 | 
						|
#include "os_types.h"
 | 
						|
#include "plc_utils.h"
 | 
						|
 | 
						|
#include "mac_bcm_api.h"
 | 
						|
#include "mac_data_api.h"
 | 
						|
#include "mac_uni_cfg_api.h"
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
/* nid list report format. as we are not using packed struct, so we need to
 | 
						|
 * make sure all members in this struct are 4 bytes aligned.
 | 
						|
 */
 | 
						|
typedef struct _mac_nid_rpt {
 | 
						|
    /* nid of the neighbour network */
 | 
						|
    uint32_t    nid             :24,
 | 
						|
    /* flag indicate if neighbour network is single-pass to local network
 | 
						|
     * 1 means single-pass. 0 means double-pass.
 | 
						|
     */
 | 
						|
                sp_flag         :8;
 | 
						|
    /* bandwidth taken by neighbour network in millisecond, 0 means invalid */
 | 
						|
    uint32_t    bandwidth       :16,
 | 
						|
    /* rf channel of the neighbour network */
 | 
						|
                rf_channel      :8,
 | 
						|
    /* rf option of the neighbour network */
 | 
						|
                rf_option       :2,
 | 
						|
    /* reserved for future */
 | 
						|
                rsvd            :6;
 | 
						|
} mac_nid_rpt_t;
 | 
						|
 | 
						|
typedef struct _mac_nid_list_rpt {
 | 
						|
    /* available nid count in the array */
 | 
						|
    uint32_t        nid_cnt     :8,
 | 
						|
    /* reserved for future */
 | 
						|
                    rsvd        :24;
 | 
						|
    /* nid array */
 | 
						|
    mac_nid_rpt_t   nid_list[0];
 | 
						|
} mac_nid_list_rpt_t;
 | 
						|
 | 
						|
/* cco snr report format */
 | 
						|
typedef struct _mac_cco_snr_rpt {
 | 
						|
    /* nid of the neighbour network */
 | 
						|
    uint32_t    nid             :24,
 | 
						|
    /* rf channel of the neighbour network */
 | 
						|
                rf_channel      :8;
 | 
						|
    /* rx snr of the fc */
 | 
						|
    int8_t      snr;
 | 
						|
    /* flag to mark if come from rf link */
 | 
						|
    uint8_t     is_rf           :1,
 | 
						|
    /* rf option, see RF_OPTION_XXX */
 | 
						|
                rf_option       :2,
 | 
						|
    /* reserved for future */
 | 
						|
                rsvd1           :5;
 | 
						|
    /* hplc band id, see BEACON_FREQ_BAND_ID_XXX */
 | 
						|
    uint8_t     band_id;
 | 
						|
    /* reserved for future */
 | 
						|
    uint8_t     rsvd;
 | 
						|
} mac_cco_snr_rpt_t;
 | 
						|
 | 
						|
/*
 | 
						|
 * function callback to receive beacon period end alert
 | 
						|
 * @arg:        arg parameter registered alone with the callback
 | 
						|
 */
 | 
						|
typedef void (*mac_bp_end_alert_func_t)(void *arg);
 | 
						|
 | 
						|
/*
 | 
						|
 * @biref   function callback to receive watched nid list report
 | 
						|
 * @param   arg:        arg parameter registered alone with the callback
 | 
						|
 * @param   nid_list:   iot pkt to contain the nid list. the ownership will
 | 
						|
 *                      be transferred to callback function. see
 | 
						|
 *                      mac_nid_list_rpt_t for more details.
 | 
						|
 */
 | 
						|
typedef void (*mac_nid_rpt_func_t)(void *arg, iot_pkt_t *nid_list);
 | 
						|
 | 
						|
/*
 | 
						|
 * @biref   function callback to receive zero-cross status report
 | 
						|
 * @param   arg:        arg parameter registered alone with the callback
 | 
						|
 * @param   status:     indicate if the phase zc info is valid.
 | 
						|
 *                      bit0 - Phase A, bit1 - Phase B, bit2 - Phase C...
 | 
						|
 *                      0 - invalid, 1 - valid.
 | 
						|
 */
 | 
						|
typedef void (*mac_zc_status_rpt_func_t)(void *arg, uint32_t status);
 | 
						|
 | 
						|
/* more cfg to be added later */
 | 
						|
typedef struct _mac_vdev_cfg {
 | 
						|
    /* CCO, STA or PCO */
 | 
						|
    uint16_t node_role           : 8,
 | 
						|
    /* number of supported physical phases. The range should be from 1 - 3.
 | 
						|
     * for STA/PCO role device, only 1 physical phase supported.
 | 
						|
     * for CCO role device:
 | 
						|
     * if set to 1, only phase A supported.
 | 
						|
     * if set to 2, both phase A and B are supported.
 | 
						|
     * if set to 3, Phase A, B and C are supported.
 | 
						|
     */
 | 
						|
        p_phase_cnt              : 2,
 | 
						|
    /* flag this vdev is reduced */
 | 
						|
        is_reduced_vdev          : 1,
 | 
						|
    /* flag this vdev need time division tx nncco 3 phase */
 | 
						|
        is_td_tx_nncco_3phase    : 1,
 | 
						|
        resv0                    : 4;
 | 
						|
} mac_vdev_cfg_t;
 | 
						|
 | 
						|
/* more cfg to be added later */
 | 
						|
typedef struct _mac_vdev_start_cfg {
 | 
						|
    /* mac address of the vdev */
 | 
						|
    uint8_t                 mac_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* parameter to be transferred back with those callbacks */
 | 
						|
    void                    *mac_callback_arg;
 | 
						|
    /* beacon rx callback of the vdev */
 | 
						|
    mac_bc_rx_func_t        mac_bc_rx_func;
 | 
						|
    /* data frame rx callback of the vdev */
 | 
						|
    mac_recv_msdu_func_t    mac_data_rx_func;
 | 
						|
    /* payload error or no payload cco frame snr rx callback of the vdev */
 | 
						|
    mac_recv_snr_from_cco_func_t mac_cco_snr_rx_func;
 | 
						|
    /* beacon period end alert callback of the vdev */
 | 
						|
    mac_bp_end_alert_func_t mac_bp_end_alert_func;
 | 
						|
    /* watched nid list report callback of the vdev */
 | 
						|
    mac_nid_rpt_func_t      mac_nid_rpt_func;
 | 
						|
    /* zero-cross status changed report callback of the vdev */
 | 
						|
    mac_zc_status_rpt_func_t mac_zc_status_rpt_func;
 | 
						|
} mac_vdev_start_cfg_t;
 | 
						|
 | 
						|
/*
 | 
						|
 * mac_create_vdev() - create mac layer virtual device
 | 
						|
 * @pdev_id:    phasical mac device on top of which to create the vdev
 | 
						|
 * @vdev_id:    pointer to receive the created vdev id
 | 
						|
 * @cfg:        configuration for the created vdev
 | 
						|
 *
 | 
						|
 * return:
 | 
						|
 *      0         -- for success case
 | 
						|
 *      othersie  -- error code
 | 
						|
 */
 | 
						|
uint32_t mac_create_vdev(uint8_t pdev_id, uint8_t *vdev_id,
 | 
						|
    mac_vdev_cfg_t *cfg);
 | 
						|
 | 
						|
/*
 | 
						|
 * mac_start_vdev() - start mac layer virtual device
 | 
						|
 * @pdev_id:    phasical mac device id
 | 
						|
 * @vdev_id:    virtual mac device id
 | 
						|
 * @cfg:        configuration for the start
 | 
						|
 *
 | 
						|
 * return:
 | 
						|
 *      0         -- for success case
 | 
						|
 *      othersie  -- error code
 | 
						|
 */
 | 
						|
uint32_t mac_start_vdev(uint8_t pdev_id, uint8_t vdev_id,
 | 
						|
    mac_vdev_start_cfg_t *cfg);
 | 
						|
 | 
						|
/*
 | 
						|
 * mac_stop_vdev() - stop mac layer virtual device
 | 
						|
 * @pdev_id:    phasical mac device id
 | 
						|
 * @vdev_id:    virtual mac device id
 | 
						|
 *
 | 
						|
 * return:
 | 
						|
 *      0         -- for success case
 | 
						|
 *      othersie  -- error code
 | 
						|
 */
 | 
						|
uint32_t mac_stop_vdev(uint8_t pdev_id, uint8_t vdev_id);
 | 
						|
 | 
						|
/*
 | 
						|
 * mac_set_vdev_cfg() - set a vdev's config
 | 
						|
 * @pdev_id:        which pdev to config
 | 
						|
 * @vdev_id:        which vdev to config
 | 
						|
 * @cfg_struct_ptr: the pointer to the param config structure which can be
 | 
						|
 *                  decoded according to the type.
 | 
						|
 *
 | 
						|
 * return:
 | 
						|
 *      0         -- for success case
 | 
						|
 *      othersie  -- error code
 | 
						|
 */
 | 
						|
uint32_t mac_set_vdev_cfg(pdevid_t pdev_id, vdevid_t vdev_id,
 | 
						|
    cfg_data_tlv *cfg_struct_ptr);
 | 
						|
 | 
						|
 | 
						|
/*
 | 
						|
 * mac_get_reduce_vdev_id() - get dbg pkt vdev id
 | 
						|
 * @pdev_id:    phasical mac device id
 | 
						|
 *
 | 
						|
 * return:      dbg pkt vdev id
 | 
						|
 */
 | 
						|
uint32_t mac_get_reduce_vdev_id(uint32_t pdev_id);
 | 
						|
 | 
						|
/*
 | 
						|
 * mac_get_vdev_cfg() - get a vdev's config
 | 
						|
 * @pdev_id:        which pdev to config
 | 
						|
 * @vdev_id:        which vdev to config
 | 
						|
 * @cfg_struct_ptr: the pointer to the param config structure which can be
 | 
						|
 *                  decoded according to the type.
 | 
						|
 *
 | 
						|
 * return:
 | 
						|
 *      0         -- for success case
 | 
						|
 *      othersie  -- error code
 | 
						|
 */
 | 
						|
uint32_t mac_get_vdev_cfg(pdevid_t pdev_id, vdevid_t vdev_id,
 | 
						|
    cfg_data_tlv *tlv);
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif
 |