1 | #ifndef WLAN_HIGH_TYPES_H_ |
---|
2 | #define WLAN_HIGH_TYPES_H_ |
---|
3 | |
---|
4 | #include "wlan_common_types.h" |
---|
5 | |
---|
6 | #define ETH_ADDR_SIZE 6 // Length of Ethernet MAC address (in bytes) |
---|
7 | #define IP_ADDR_SIZE 4 // Length of IP address (in bytes) |
---|
8 | |
---|
9 | typedef enum application_role_t{ |
---|
10 | APPLICATION_ROLE_AP = 1, |
---|
11 | APPLICATION_ROLE_STA = 2, |
---|
12 | APPLICATION_ROLE_IBSS = 3, |
---|
13 | APPLICATION_ROLE_UNKNOWN = 0xFF |
---|
14 | } application_role_t; |
---|
15 | |
---|
16 | /******************************************************************** |
---|
17 | * @brief Channel Type Enum |
---|
18 | * |
---|
19 | * This enum described the type of channel that is specified in the |
---|
20 | * chan_spec_t struct. The size of an enum is compiler dependent. Because |
---|
21 | * this enum will be used in structs whose contents must be aligned with |
---|
22 | * wlan_exp in Python, we use a compile time assertion to at least create |
---|
23 | * a compilation error if the size winds up being different than wlan_exp |
---|
24 | * expects. |
---|
25 | * |
---|
26 | ********************************************************************/ |
---|
27 | typedef enum __attribute__((__packed__)) { |
---|
28 | CHAN_TYPE_BW20 = 0, |
---|
29 | CHAN_TYPE_BW40_SEC_BELOW = 1, |
---|
30 | CHAN_TYPE_BW40_SEC_ABOVE = 2 |
---|
31 | } chan_type_t; |
---|
32 | ASSERT_TYPE_SIZE(chan_type_t, 1); |
---|
33 | |
---|
34 | /******************************************************************** |
---|
35 | * @brief Channel Specifications Struct |
---|
36 | * |
---|
37 | * This struct contains a primary channel number and a chan_type_t. |
---|
38 | * Together, this tuple of information can be used to calculate the |
---|
39 | * center frequency and bandwidth of the radio. |
---|
40 | ********************************************************************/ |
---|
41 | typedef struct __attribute__((__packed__)){ |
---|
42 | u8 chan_pri; |
---|
43 | chan_type_t chan_type; |
---|
44 | } chan_spec_t; |
---|
45 | ASSERT_TYPE_SIZE(chan_spec_t, 2); |
---|
46 | |
---|
47 | // Scan FSM states |
---|
48 | typedef enum scan_state_t{ |
---|
49 | SCAN_IDLE, |
---|
50 | SCAN_RUNNING, |
---|
51 | SCAN_PAUSED |
---|
52 | } scan_state_t; |
---|
53 | |
---|
54 | |
---|
55 | // Interrupt controller started/stopped state |
---|
56 | typedef enum interrupt_state_t{ |
---|
57 | INTERRUPTS_DISABLED, |
---|
58 | INTERRUPTS_ENABLED |
---|
59 | } interrupt_state_t; |
---|
60 | |
---|
61 | // Ethernet header |
---|
62 | typedef struct ethernet_header_t{ |
---|
63 | u8 dest_mac_addr[ETH_ADDR_SIZE]; // Destination MAC address |
---|
64 | u8 src_mac_addr[ETH_ADDR_SIZE]; // Source MAC address |
---|
65 | u16 ethertype; // EtherType |
---|
66 | } ethernet_header_t; |
---|
67 | |
---|
68 | // IPv4 Header |
---|
69 | typedef struct ipv4_header_t{ |
---|
70 | u8 version_ihl; // [7:4] Version; [3:0] Internet Header Length |
---|
71 | u8 dscp_ecn; // [7:2] Differentiated Services Code Point; [1:0] Explicit Congestion Notification |
---|
72 | u16 total_length; // Total Length (includes header and data - in bytes) |
---|
73 | u16 identification; // Identification |
---|
74 | u16 fragment_offset; // [15:14] Flags; [13:0] Fragment offset |
---|
75 | u8 ttl; // Time To Live |
---|
76 | u8 protocol; // Protocol |
---|
77 | u16 header_checksum; // IP header checksum |
---|
78 | u8 src_ip_addr[IP_ADDR_SIZE]; // Source IP address (big endian) |
---|
79 | u8 dest_ip_addr[IP_ADDR_SIZE]; // Destination IP address (big endian) |
---|
80 | } ipv4_header_t; |
---|
81 | |
---|
82 | // UDP Header |
---|
83 | typedef struct udp_header_t{ |
---|
84 | u16 src_port; // Source port number |
---|
85 | u16 dest_port; // Destination port number |
---|
86 | u16 length; // Length of UDP header and UDP data (in bytes) |
---|
87 | u16 checksum; // Checksum |
---|
88 | } udp_header_t; |
---|
89 | |
---|
90 | // wlan_exp Transport Header |
---|
91 | typedef struct wlan_exp_transport_header{ |
---|
92 | u16 dest_id; // Destination ID |
---|
93 | u16 src_id; // Source ID |
---|
94 | u16 length; // Length of the Packet |
---|
95 | u16 seq_num; // Sequence Number |
---|
96 | u16 flags; // Transport flags |
---|
97 | } wlan_exp_transport_header; |
---|
98 | |
---|
99 | // ARP Packet |
---|
100 | typedef struct arp_ipv4_packet_t{ |
---|
101 | u16 htype; // Hardware Type |
---|
102 | u16 ptype; // Protocol Type |
---|
103 | u8 hlen; // Length of Hardware address |
---|
104 | u8 plen; // Length of Protocol address |
---|
105 | u16 oper; // Operation |
---|
106 | u8 sender_haddr[ETH_ADDR_SIZE]; // Sender hardware address |
---|
107 | u8 sender_paddr[IP_ADDR_SIZE]; // Sender protocol address |
---|
108 | u8 target_haddr[ETH_ADDR_SIZE]; // Target hardware address |
---|
109 | u8 target_paddr[IP_ADDR_SIZE]; // Target protocol address |
---|
110 | } arp_ipv4_packet_t; |
---|
111 | |
---|
112 | // Socket address structure |
---|
113 | typedef struct __attribute__((__packed__)) sockaddr_t { |
---|
114 | u16 sa_family; |
---|
115 | u8 sa_data[14]; |
---|
116 | } sockaddr_t; |
---|
117 | ASSERT_TYPE_SIZE(sockaddr_t, 16); |
---|
118 | |
---|
119 | // Internet (IP) address structure |
---|
120 | typedef struct __attribute__((__packed__)) in_addr_t { |
---|
121 | u8 s_addr[IP_ADDR_LEN]; |
---|
122 | } in_addr_t; |
---|
123 | |
---|
124 | // Internet (IP) socket address structure |
---|
125 | typedef struct __attribute__((__packed__)) sockaddr_in_t { |
---|
126 | u16 sin_family; |
---|
127 | u16 sin_port; |
---|
128 | in_addr_t sin_addr; |
---|
129 | u8 sin_zero[8]; |
---|
130 | } sockaddr_in_t; |
---|
131 | ASSERT_TYPE_SIZE(sockaddr_in_t, 16); |
---|
132 | |
---|
133 | |
---|
134 | // Function pointer type (void return, 1 argument) for Interrupt Service Routines |
---|
135 | // axi_intc and ps_gic use compatible types but different names for interrupt handlers |
---|
136 | typedef void (*wlan_intr_handler_t)(void *data); |
---|
137 | |
---|
138 | #endif /* WLAN_HIGH_TYPES_H_ */ |
---|