Linux Device Interface - linux_dev¶
The linux_dev application for CPU High implements the interface between the MAC and the mango_wlan kernel module. CPU High must run the linux_dev application in order for Linux to use the 802.11 MAC/PHY as a wireless network interface.
Message Passing¶
The linux_dev application translates messages between the kernel and the MAC. All communication between the kernel and MAC passes through the msg_fifo kernel module and the linux_dev application. The kernel and linux_dev application must use the identical message format definitions via the shared mango_wlan_msg.h header.
The core MAC/driver messages are listed below. New message formats can be defined for custom MAC extensions.
Driver to MAC messages¶
| Message ID | Description | 
|---|---|
| WLAN_MSG_CONFIG | MAC configuration parameters specified by the kernel driver and applied to the MAC. The driver always sends a complete CONFIGstruct to ensure driver and MAC state remain consistent across partial reboots. | 
| MSG_TX_MPDU | New packet from the kernel for wireless transmission, linux_devadds to queue for future transmission | 
| MSG_TX_BEACON | Updated beacon contents provided by kernel networking stack, to be used in next beacon transmission | 
| MAC_ADDR_ARRAY | List of MAC addresses for local wireless network interfaces | 
MAC to Driver messages¶
| Message ID | Description | 
|---|---|
| MSG_BEACON_UPDATE_TRIGGER | Notification from the MAC that a beacon Tx is occurring soon, requesting the kernel to update the beacon contents. | 
| MSG_TX_MPDU_DONE | Completion of a wireless transmission by the MAC for a packet previously sent from the driver via a MSG_TX_MPDUmessage. | 
| MSG_RX_MPDU | Wireless reception by the MAC, reported to the kernel. By default all wireless receptions are passed to the kernel driver for processing / filtering. | 
| MSG_HW_BOOTED | Notification that the MAC software has booted (or rebooted). | 
Wireless Tx Queue Handling¶
The linux_dev application uses the High MAC Framework’s queueing subsystem to implement multiple transmit queues. By default the linux_dev app uses two queues:
- Multicast Data: for all non-management packets addressed to a multicast MAC address
- Data: all non-multicast packets awaiting transmission
The Multicast queue is used when the kernel is operating an access point and needs to buffer multicast packets until the next DTIM.
The linux_dev queues are independent of the packet queues maintained in the Linux kernel. Every packet in a linux_dev queue will eventually be transmitted and reported to the kernel via a TX_MPDU_DONE message.