source: ReferenceDesigns/w3_802.11/c/wlan_w3_common/w3_common.c

Last change on this file was 6319, checked in by chunter, 5 years ago

1.8.0 release wlan-mac-se

File size: 3.9 KB
Line 
1#include "stdlib.h"
2#include "string.h"
3#include "stdarg.h"
4
5#include "xil_io.h"
6#include "xstatus.h"
7#include "xparameters.h"
8
9#include "wlan_platform_common.h"
10#include "w3_common.h"
11#include "w3_userio_util.h"
12#include "wlan_mac_common.h"
13#include "w3_iic_eeprom.h"
14#include "w3_sysmon_util.h"
15#include "wlan_cpu_id.h"
16#include "w3_userio.h"
17#include "wlan_platform_debug_hdr.h"
18
19
20
21static const platform_common_dev_info_t platform_common_dev_info = {
22        .platform_id = PLATFORM_ID_W3,
23        .cpu_id = XPAR_CPU_ID,
24#if WLAN_COMPILE_FOR_CPU_HIGH
25        .is_cpu_high = 1,
26        .is_cpu_low = 0,
27#endif
28#if WLAN_COMPILE_FOR_CPU_LOW
29        .is_cpu_high = 0,
30        .is_cpu_low = 1,
31#endif
32        .mailbox_dev_id = PLATFORM_DEV_ID_MAILBOX,
33        .pkt_buf_mutex_dev_id = PLATFORM_DEV_ID_PKT_BUF_MUTEX,
34        .tx_pkt_buf_baseaddr = XPAR_PKT_BUFF_TX_BRAM_CTRL_S_AXI_BASEADDR,
35        .rx_pkt_buf_baseaddr = XPAR_PKT_BUFF_RX_BRAM_CTRL_S_AXI_BASEADDR,
36        .tx_power_max_dbm = TX_POWER_MAX_DBM,
37        .tx_power_min_dbm = TX_POWER_MIN_DBM,
38        .tx_radio_prep_latency_100ns = 3, //(~300 nsec radio_controller TxEn process) + (~1.4 usec baseband -> antenna port)
39        .tx_analog_latency_100ns = 14,   //(~1.4 usec baseband -> antenna port)
40        .rx_analog_latency_100ns = 14,   //(~1.4 usec antenna port -> baseband)
41        .capabilities_flags = PLATFORM_CAPABILITIES_FLAGS_SUPPORTS_PER_TX_POWER
42};
43
44static const char serial_number_prefix[] = "W3-a";
45
46platform_common_dev_info_t wlan_platform_common_get_dev_info(){
47    return platform_common_dev_info;
48}
49
50int wlan_platform_common_init(){
51    u32 iter = 0;
52    while (iic_eeprom_init(EEPROM_BASEADDR, 0x64, XPAR_CPU_ID) != IIC_EEPROM_SUCCESS){
53        iter++;
54    };
55
56    // ------------------------------------------
57    // Initialize the System Monitor
58    init_sysmon();
59
60    //Use entropy source to seed PRNG
61    u32 temp_curr = 0;
62    u32 temp_prev = 0;
63    u32 rand_seed = 0;
64    u8 num_bits = 0;
65
66    while(1){
67        temp_curr = wlan_platform_get_current_temp();
68
69        if ((temp_curr == temp_prev) && (iter < 1000000)){
70            iter++;
71        } else {
72
73            temp_prev = temp_curr;
74            iter = 0;
75
76            rand_seed = (rand_seed<<1) | (temp_curr&1);
77            num_bits++;
78
79            if(num_bits > 32){
80                break;
81            }
82        }
83
84    }
85
86
87    xil_printf("Rand Seed: 0x%08x\n", rand_seed);
88    srand(rand_seed);
89
90
91    return WLAN_SUCCESS;
92}
93
94wlan_mac_hw_info_t wlan_platform_get_hw_info(){
95
96    static u32 already_read = 0;
97    static wlan_mac_hw_info_t mac_hw_info;
98
99    if(already_read == 0){
100        // Set General Node information
101        mac_hw_info.platform_id = PLATFORM_ID_W3;
102        mac_hw_info.platform_config = PLATFORM_CONFIG;
103        mac_hw_info.serial_number_prefix = serial_number_prefix;
104        mac_hw_info.serial_number = w3_eeprom_read_serial_num(EEPROM_BASEADDR);
105
106        // Set HW Addresses
107        //   - The w3_eeprom_read_eth_addr() function handles the case when the WARP v3
108        //     hardware does not have a valid Ethernet address
109        //
110        // Use address 0 for the WLAN interface, address 1 for the WLAN Exp interface
111        //
112        w3_eeprom_read_eth_addr(EEPROM_BASEADDR, 0, mac_hw_info.hw_addr_wlan);
113        w3_eeprom_read_eth_addr(EEPROM_BASEADDR, 1, mac_hw_info.hw_addr_wlan_exp);
114        already_read = 1;
115    }
116
117    return mac_hw_info;
118}
119
120u32  wlan_platform_userio_get_state(){
121    u32 return_value = 0;
122    u32 user_io_inputs;
123
124    user_io_inputs = userio_read_inputs(USERIO_BASEADDR);
125
126    if(user_io_inputs & W3_USERIO_PB_U) return_value |= USERIO_INPUT_MASK_PB_0;
127    if(user_io_inputs & W3_USERIO_PB_M) return_value |= USERIO_INPUT_MASK_PB_1;
128    if(user_io_inputs & W3_USERIO_PB_D) return_value |= USERIO_INPUT_MASK_PB_2;
129
130    if(user_io_inputs & W3_USERIO_DIPSW_0) return_value |= USERIO_INPUT_MASK_SW_0;
131    if(user_io_inputs & W3_USERIO_DIPSW_1) return_value |= USERIO_INPUT_MASK_SW_1;
132    if(user_io_inputs & W3_USERIO_DIPSW_2) return_value |= USERIO_INPUT_MASK_SW_2;
133    if(user_io_inputs & W3_USERIO_DIPSW_3) return_value |= USERIO_INPUT_MASK_SW_3;
134
135    return return_value;
136}
Note: See TracBrowser for help on using the repository browser.