Index: uspace/Makefile.common
===================================================================
--- uspace/Makefile.common	(revision 462054abcfa5153f73910e63137ea1db077091da)
+++ uspace/Makefile.common	(revision ab365c4b5641c1da9913b8fda70916c9a2a5a7c0)
@@ -258,5 +258,5 @@
 
 ifeq ($(CONFIG_DEBUG),y)
-#	GCC_CFLAGS += -Werror
+	GCC_CFLAGS += -Werror
 	ICC_CFLAGS += -Werror
 endif
Index: uspace/drv/bus/usb/ar9271/Makefile
===================================================================
--- uspace/drv/bus/usb/ar9271/Makefile	(revision 462054abcfa5153f73910e63137ea1db077091da)
+++ uspace/drv/bus/usb/ar9271/Makefile	(revision ab365c4b5641c1da9913b8fda70916c9a2a5a7c0)
@@ -33,5 +33,6 @@
 	$(LIBUSB_PREFIX)/libusb.a \
 	$(LIBDRV_PREFIX)/libdrv.a \
-	$(LIBNIC_PREFIX)/libnic.a
+	$(LIBNIC_PREFIX)/libnic.a \
+	$(LIBNET_PREFIX)/libnet.a
 	
 EXTRA_CFLAGS += \
@@ -40,5 +41,6 @@
 	-I$(LIBUSBDEV_PREFIX)/include \
 	-I$(LIBDRV_PREFIX)/include \
-	-I$(LIBNIC_PREFIX)/include
+	-I$(LIBNIC_PREFIX)/include \
+	-I$(LIBNET_PREFIX)/include \
 	
 BINARY = ar9271
Index: uspace/drv/bus/usb/ar9271/ar9271.c
===================================================================
--- uspace/drv/bus/usb/ar9271/ar9271.c	(revision 462054abcfa5153f73910e63137ea1db077091da)
+++ uspace/drv/bus/usb/ar9271/ar9271.c	(revision ab365c4b5641c1da9913b8fda70916c9a2a5a7c0)
@@ -33,4 +33,5 @@
  */
 
+#include <ieee80211.h>
 #include <usb/classes/classes.h>
 #include <usb/dev/request.h>
@@ -95,15 +96,9 @@
 };
 
-/** Network interface options for AR9271 driver. */
-static nic_iface_t ar9271_nic_iface;
-
-/** Basic device operations for AR9271 NIC driver. */
-static ddf_dev_ops_t ar9271_nic_dev_ops;
-
-/** Basic driver operations for AR9271 NIC driver. */
-static driver_ops_t ar9271_nic_driver_ops;
-
 /* Callback when new device is to be controlled by this driver. */
 static int ar9271_add_device(ddf_dev_t *);
+
+/* IEEE802.11 callbacks */
+static int ar9271_ieee80211_start(ieee80211_dev_t *ieee80211_dev);
 
 static driver_ops_t ar9271_driver_ops = {
@@ -116,8 +111,97 @@
 };
 
-/* The default implementation callbacks */
-static int ar9271_on_activating(nic_t *);
-static int ar9271_on_stopping(nic_t *);
-static void ar9271_send_frame(nic_t *, void *, size_t);
+static ieee80211_ops_t ar9271_ieee80211_ops = {
+	.start = ar9271_ieee80211_start
+};
+
+static int ar9271_set_rx_filter(ar9271_t *ar9271)
+{
+	uint32_t filter_bits;
+	int rc = wmi_reg_read(ar9271->htc_device, AR9271_RX_FILTER, 
+		&filter_bits);
+	if(rc != EOK) {
+		usb_log_error("Failed to read RX filter.\n");
+		return EINVAL;
+	}
+	
+	/* TODO: Do proper filtering here. */
+	
+	filter_bits |= AR9271_RX_FILTER_UNI | AR9271_RX_FILTER_MULTI | 
+		AR9271_RX_FILTER_BROAD | AR9271_RX_FILTER_PROMISCUOUS;
+	
+	rc = wmi_reg_write(ar9271->htc_device, AR9271_RX_FILTER, filter_bits);
+	if(rc != EOK) {
+		usb_log_error("Failed to write RX filter.\n");
+		return EINVAL;
+	}
+	
+	return EOK;
+}
+
+static int ar9271_rx_init(ar9271_t *ar9271)
+{
+	int rc = wmi_reg_write(ar9271->htc_device, AR9271_COMMAND, 
+		AR9271_COMMAND_RX_ENABLE);
+	if(rc != EOK) {
+		usb_log_error("Failed to send RX enable command.\n");
+		return EINVAL;
+	}
+	
+	rc = ar9271_set_rx_filter(ar9271);
+	if(rc != EOK) {
+		usb_log_error("Failed to set RX filtering.\n");
+		return EINVAL;
+	}
+	
+	return EOK;
+}
+
+static int ar9271_ieee80211_start(ieee80211_dev_t *ieee80211_dev)
+{
+	ar9271_t *ar9271 = (ar9271_t *) ieee80211_dev->driver_data;
+	
+	int rc = wmi_send_command(ar9271->htc_device, WMI_FLUSH_RECV, NULL, 0, 
+		NULL);
+	if(rc != EOK) {
+		usb_log_error("Failed to flush receiving buffer.\n");
+		return EINVAL;
+	}
+	
+	rc = hw_reset(ar9271);
+	if(rc != EOK) {
+		usb_log_error("Failed to do HW reset.\n");
+		return EINVAL;
+	}
+	
+	uint16_t htc_mode = host2uint16_t_be(1);
+	rc = wmi_send_command(ar9271->htc_device, WMI_SET_MODE, 
+		(uint8_t *) &htc_mode, sizeof(htc_mode), NULL);
+	if(rc != EOK) {
+		usb_log_error("Failed to set HTC mode.\n");
+		return EINVAL;
+	}
+	
+	rc = wmi_send_command(ar9271->htc_device, WMI_ATH_INIT, NULL, 0, 
+		NULL);
+	if(rc != EOK) {
+		usb_log_error("Failed to send ath init command.\n");
+		return EINVAL;
+	}
+	
+	rc = wmi_send_command(ar9271->htc_device, WMI_START_RECV, NULL, 0, 
+		NULL);
+	if(rc != EOK) {
+		usb_log_error("Failed to send receiving init command.\n");
+		return EINVAL;
+	}
+	
+	rc = ar9271_rx_init(ar9271);
+	if(rc != EOK) {
+		usb_log_error("Failed to initialize RX.\n");
+		return EINVAL;
+	}
+	
+	return EOK;
+}
 
 static int ar9271_init(ar9271_t *ar9271, usb_device_t *usb_device)
@@ -125,6 +209,6 @@
 	ar9271->usb_device = usb_device;
 	
-	ath_t *ath_device = malloc(sizeof(ath_t));
-	if (!ath_device) {
+	ar9271->ath_device = calloc(1, sizeof(ath_t));
+	if (!ar9271->ath_device) {
 		usb_log_error("Failed to allocate memory for ath device "
 		    "structure.\n");
@@ -132,7 +216,7 @@
 	}
 	
-	int rc = ath_usb_init(ath_device, usb_device);
-	if(rc != EOK) {
-		free(ath_device);
+	int rc = ath_usb_init(ar9271->ath_device, usb_device);
+	if(rc != EOK) {
+		free(ar9271->ath_device);
 		usb_log_error("Failed to initialize ath device.\n");
 		return EINVAL;
@@ -140,7 +224,7 @@
 		
 	/* HTC device structure initialization. */
-	ar9271->htc_device = malloc(sizeof(htc_device_t));
+	ar9271->htc_device = calloc(1, sizeof(htc_device_t));
 	if(!ar9271->htc_device) {
-		free(ath_device);
+		free(ar9271->ath_device);
 		usb_log_error("Failed to allocate memory for HTC device "
 		    "structure.\n");
@@ -148,11 +232,30 @@
 	}
 	
-	memset(ar9271->htc_device, 0, sizeof(htc_device_t));
-        
-	rc = htc_device_init(ath_device, ar9271->htc_device);
+	rc = htc_device_init(ar9271->ath_device, ar9271->htc_device);
 	if(rc != EOK) {
 		free(ar9271->htc_device);
-		free(ath_device);
-		usb_log_error("Failed to initialize HTC device.\n");
+		free(ar9271->ath_device);
+		usb_log_error("Failed to initialize HTC device structure.\n");
+		return EINVAL;
+	}
+	
+	/* IEEE 802.11 framework structure initialization. */
+	ar9271->ieee80211_dev = calloc(1, sizeof(ieee80211_dev_t));
+	if (!ar9271->ieee80211_dev) {
+		free(ar9271->htc_device);
+		free(ar9271->ath_device);
+		usb_log_error("Failed to allocate memory for IEEE80211 device "
+		    "structure.\n");
+		return ENOMEM;
+	}
+	
+	rc = ieee80211_device_init(ar9271->ieee80211_dev, ar9271, 
+		ar9271->ddf_dev);
+	if(rc != EOK) {
+		free(ar9271->ieee80211_dev);
+		free(ar9271->htc_device);
+		free(ar9271->ath_device);
+		usb_log_error("Failed to initialize IEEE80211 device structure."
+			"\n");
 		return EINVAL;
 	}
@@ -255,109 +358,4 @@
 }
 
-/** Force receiving all frames in the receive buffer
- *
- * @param nic NIC data
- */
-static void ar9271_poll(nic_t *nic)
-{
-	assert(nic);
-}
-
-/** Set polling mode
- *
- * @param device  Device to set
- * @param mode    Mode to set
- * @param period  Period for NIC_POLL_PERIODIC
- *
- * @return EOK if succeed, ENOTSUP if the mode is not supported
- */
-static int ar9271_poll_mode_change(nic_t *nic, nic_poll_mode_t mode,
-    const struct timeval *period)
-{
-	assert(nic);
-	return EOK;
-}
-
-/** Set multicast frames acceptance mode
- *
- * @param nic      NIC device to update
- * @param mode     Mode to set
- * @param addr     Address list (used in mode = NIC_MULTICAST_LIST)
- * @param addr_cnt Length of address list (used in mode = NIC_MULTICAST_LIST)
- *
- * @return EOK if succeed, negative error code otherwise
- */
-static int ar9271_on_multicast_mode_change(nic_t *nic, 
-    nic_multicast_mode_t mode, const nic_address_t *addr, size_t addr_cnt)
-{
-	assert(nic);
-	return EOK;
-}
-
-/** Set unicast frames acceptance mode
- *
- * @param nic      NIC device to update
- * @param mode     Mode to set
- * @param addr     Address list (used in mode = NIC_MULTICAST_LIST)
- * @param addr_cnt Length of address list (used in mode = NIC_MULTICAST_LIST)
- *
- * @return EOK if succeed, negative error code otherwise
- */
-static int ar9271_on_unicast_mode_change(nic_t *nic, nic_unicast_mode_t mode,
-    const nic_address_t *addr, size_t addr_cnt)
-{
-	assert(nic);
-	return EOK;
-}
-
-/** Set broadcast frames acceptance mode
- *
- * @param nic  NIC device to update
- * @param mode Mode to set
- *
- * @return EOK if succeed, negative error code otherwise
- */
-static int ar9271_on_broadcast_mode_change(nic_t *nic, 
-    nic_broadcast_mode_t mode)
-{
-	assert(nic);
-	return EOK;
-}
-
-/** Activate the device to receive and transmit frames
- *
- * @param nic NIC driver data
- *
- * @return EOK if activated successfully, negative error code otherwise
- */
-static int ar9271_on_activating(nic_t *nic)
-{
-	assert(nic);
-	return EOK;
-}
-
-/** Callback for NIC_STATE_STOPPED change
- *
- * @param nic NIC driver data
- *
- * @return EOK if succeed, negative error code otherwise
- */
-static int ar9271_on_stopping(nic_t *nic)
-{
-	assert(nic);
-	return EOK;
-}
-
-/** Send frame
- *
- * @param nic    NIC driver data structure
- * @param data   Frame data
- * @param size   Frame size in bytes
- */
-static void ar9271_send_frame(nic_t *nic, void *data, size_t size)
-{
-	assert(nic);
-}
-
 /** Create driver data structure.
  * 
@@ -385,5 +383,5 @@
 	
 	/* AR9271 structure initialization. */
-	ar9271_t *ar9271 = malloc(sizeof(ar9271_t));
+	ar9271_t *ar9271 = calloc(1, sizeof(ar9271_t));
 	if (!ar9271) {
 		free(usb_device);
@@ -393,7 +391,5 @@
 	}
 	
-	memset(ar9271, 0, sizeof(ar9271_t));
-	
-	ar9271->ddf_device = dev;
+	ar9271->ddf_dev = dev;
 	
 	rc = ar9271_init(ar9271, usb_device);
@@ -406,22 +402,4 @@
 	}
 	
-	/* NIC framework initialization. */
-	nic_t *nic = nic_create_and_bind(dev);
-	if (!nic) {
-		free(ar9271);
-		free(usb_device);
-		usb_log_error("Failed to create and bind NIC data.\n");
-		return NULL;
-	}
-	
-	nic_set_specific(nic, ar9271);
-	nic_set_send_frame_handler(nic, ar9271_send_frame);
-	nic_set_state_change_handlers(nic, ar9271_on_activating,
-	    NULL, ar9271_on_stopping);
-	nic_set_filtering_change_handlers(nic,
-	    ar9271_on_unicast_mode_change, ar9271_on_multicast_mode_change,
-	    ar9271_on_broadcast_mode_change, NULL, NULL);
-	nic_set_poll_handlers(nic, ar9271_poll_mode_change, ar9271_poll);
-	
 	return ar9271;
 }
@@ -447,5 +425,4 @@
 {
 	assert(dev);
-	ddf_fun_t *fun;
 	
 	/* Allocate driver data for the device. */
@@ -477,28 +454,9 @@
 	}
 	
-	nic_t *nic = nic_get_from_ddf_dev(dev);
-	
-	/* Create AR9271 function.*/
-	fun = ddf_fun_create(nic_get_ddf_dev(nic), fun_exposed, "port0");
-	if (fun == NULL) {
+	/* Initialize AR9271 IEEE 802.11 framework. */
+	rc = ieee80211_init(ar9271->ieee80211_dev, &ar9271_ieee80211_ops);
+	if(rc != EOK) {
 		ar9271_delete_dev_data(ar9271);
-		usb_log_error("Failed creating device function.\n");
-	}
-	
-	nic_set_ddf_fun(nic, fun);
-	ddf_fun_set_ops(fun, &ar9271_nic_dev_ops);
-	
-	rc = ddf_fun_bind(fun);
-	if (rc != EOK) {
-		ddf_fun_destroy(fun);
-		ar9271_delete_dev_data(ar9271);
-		usb_log_error("Failed binding device function.\n");
-		return rc;
-	}
-	rc = ddf_fun_add_to_category(fun, DEVICE_CATEGORY_NIC);
-	if (rc != EOK) {
-		ddf_fun_unbind(fun);
-		ar9271_delete_dev_data(ar9271);
-		usb_log_error("Failed adding function to category.\n");
+		usb_log_error("Failed to initialize IEEE80211 framework.\n");
 		return rc;
 	}
@@ -516,7 +474,4 @@
 		return 1;
 	
-	nic_driver_implement(&ar9271_nic_driver_ops, &ar9271_nic_dev_ops,
-	    &ar9271_nic_iface);
-
 	usb_log_info("HelenOS AR9271 driver started.\n");
 
Index: uspace/drv/bus/usb/ar9271/ar9271.h
===================================================================
--- uspace/drv/bus/usb/ar9271/ar9271.h	(revision 462054abcfa5153f73910e63137ea1db077091da)
+++ uspace/drv/bus/usb/ar9271/ar9271.h	(revision ab365c4b5641c1da9913b8fda70916c9a2a5a7c0)
@@ -40,4 +40,10 @@
 #include "htc.h"
 
+/** Max supported channel frequency. */
+#define AR9271_MAX_CHANNEL 2472
+
+/** Number of transmisson queues */
+#define AR9271_QUEUES_COUNT 10
+
 /** Number of GPIO pin used for handling led light */
 #define AR9271_LED_PIN 15
@@ -45,4 +51,14 @@
 /** AR9271 Registers */
 typedef enum {
+	/* ATH command register */
+	AR9271_COMMAND = 0x0008,
+	AR9271_COMMAND_RX_ENABLE = 0x00000004,
+	
+	/* ATH config register */
+	AR9271_CONFIG = 0x0014,
+	AR9271_CONFIG_ADHOC = 0x00000020,
+	
+	AR9271_QUEUE_BASE_MASK = 0x1000,
+	
 	/* EEPROM Addresses */
 	AR9271_EEPROM_BASE = 0x2100,
@@ -64,12 +80,39 @@
 	/* Wakeup related registers */
 	AR9271_RTC_RC = 0x7000,
+	AR9271_RTC_RC_MAC_WARM = 0x00000001,
+	AR9271_RTC_RC_MAC_COLD = 0x00000002,
 	AR9271_RTC_RC_MASK = 0x00000003,
 	AR9271_RTC_RESET = 0x7040,
 	AR9271_RTC_STATUS = 0x7044,
 	AR9271_RTC_STATUS_MASK = 0x0000000F,
+	AR9271_RTC_STATUS_SHUTDOWN = 0x00000001,
 	AR9271_RTC_STATUS_ON = 0x00000002,
 	AR9271_RTC_FORCE_WAKE = 0x704C,
 	AR9271_RTC_FORCE_WAKE_ENABLE = 0x00000001,
 	AR9271_RTC_FORCE_WAKE_ON_INT = 0x00000002,
+		
+	AR9271_RX_FILTER = 0x803C,
+	AR9271_RX_FILTER_UNI = 0x00000001,
+	AR9271_RX_FILTER_MULTI = 0x00000002,
+	AR9271_RX_FILTER_BROAD = 0x00000004,
+	AR9271_RX_FILTER_CONTROL = 0x00000008,
+	AR9271_RX_FILTER_BEACON = 0x00000010,
+	AR9271_RX_FILTER_PROMISCUOUS = 0x00000020,
+	AR9271_RX_FILTER_PROBEREQ = 0x00000080,
+		
+	AR9271_PHY_BASE = 0x9800,
+	AR9271_PHY_ACTIVE = 0x981C,	
+	AR9271_PHY_MODE = 0xA200,
+	AR9271_PHY_MODE_2G = 0x02,
+	AR9271_PHY_MODE_DYNAMIC = 0x04,
+	AR9271_PHY_CCK_TX_CTRL = 0xA204,
+	AR9271_PHY_CCK_TX_CTRL_JAPAN = 0x00000010,
+		
+	AR9271_OPMODE_STATION_AP_MASK =	0x00010000,
+	AR9271_OPMODE_ADHOC_MASK = 0x00020000,
+		
+	AR9271_RESET_POWER_DOWN_CONTROL = 0x50044,
+	AR9271_RADIO_RF_RESET = 0x20,
+	AR9271_GATE_MAC_CONTROL = 0x4000,
     
 	/* FW Addresses */
@@ -78,8 +121,8 @@
 	
 	/* MAC Registers */
-	AR9271_MAC_PCU_STA_ADDR_L32 = 0x8000, /**< STA Address Lower 32 Bits */
-	AR9271_MAC_PCU_STA_ADDR_U16 = 0x8004, /**< STA Address Upper 16 Bits */
-	AR9271_MAC_PCU_BSSID_L32 = 0x8008, /**< BSSID Lower 32 Bits */
-	AR9271_MAC_PCU_BSSID_U16 = 0x800C, /**< BSSID Upper 16 Bits */
+	AR9271_STATION_ID0 = 0x8000, /**< STA Address Lower 32 Bits */
+	AR9271_STATION_ID1 = 0x8004, /**< STA Address Upper 16 Bits */
+	AR9271_STATION_BSSID0 = 0x8008, /**< BSSID Lower 32 Bits */
+	AR9271_STATION_BSSID1 = 0x800C, /**< BSSID Upper 16 Bits */
 } ar9271_registers_t;
 
@@ -92,9 +135,15 @@
 /** AR9271 device data */
 typedef struct {
-	/** DDF device pointer */
-	ddf_dev_t *ddf_device;
+	/** Backing DDF device */
+	ddf_dev_t *ddf_dev;
 	
 	/** USB device data */
 	usb_device_t *usb_device;
+	
+	/** IEEE 802.11 device data */
+	ieee80211_dev_t *ieee80211_dev;
+	
+	/** ATH device data */
+	ath_t *ath_device;
 	
 	/** HTC device data */
Index: uspace/drv/bus/usb/ar9271/htc.c
===================================================================
--- uspace/drv/bus/usb/ar9271/htc.c	(revision 462054abcfa5153f73910e63137ea1db077091da)
+++ uspace/drv/bus/usb/ar9271/htc.c	(revision ab365c4b5641c1da9913b8fda70916c9a2a5a7c0)
@@ -35,4 +35,5 @@
 #include <usb/debug.h>
 #include <byteorder.h>
+#include <errno.h>
 
 #include "wmi.h"
Index: uspace/drv/bus/usb/ar9271/htc.h
===================================================================
--- uspace/drv/bus/usb/ar9271/htc.h	(revision 462054abcfa5153f73910e63137ea1db077091da)
+++ uspace/drv/bus/usb/ar9271/htc.h	(revision ab365c4b5641c1da9913b8fda70916c9a2a5a7c0)
@@ -39,5 +39,4 @@
 #include <usb/dev/driver.h>
 #include <sys/types.h>
-#include <errno.h>
 
 #include "ath.h"
@@ -171,5 +170,5 @@
 
 extern int htc_device_init(ath_t *ath_device, htc_device_t *htc_device);
-extern int htc_init(htc_device_t* htc_device);
+extern int htc_init(htc_device_t *htc_device);
 extern int htc_read_message(htc_device_t *htc_device, void *buffer, 
 	size_t buffer_size, size_t *transferred_size);
@@ -177,4 +176,4 @@
 	size_t buffer_size, uint8_t endpoint_id);
 
-#endif	/* HTC_H */
+#endif	/* ATHEROS_HTC_H */
 
Index: uspace/drv/bus/usb/ar9271/hw.c
===================================================================
--- uspace/drv/bus/usb/ar9271/hw.c	(revision 462054abcfa5153f73910e63137ea1db077091da)
+++ uspace/drv/bus/usb/ar9271/hw.c	(revision ab365c4b5641c1da9913b8fda70916c9a2a5a7c0)
@@ -36,4 +36,5 @@
 #include <unistd.h>
 #include <nic.h>
+#include <ieee80211.h>
 
 #include "hw.h"
@@ -76,11 +77,4 @@
 static int hw_reset_power_on(ar9271_t *ar9271)
 {
-	int rc = wmi_reg_write(ar9271->htc_device, AR9271_RTC_FORCE_WAKE, 
-		AR9271_RTC_FORCE_WAKE_ENABLE | 	AR9271_RTC_FORCE_WAKE_ON_INT);
-	if(rc != EOK) {
-		usb_log_error("Failed to bring up RTC register.\n");
-		return rc;
-	}
-	
 	wmi_reg_t buffer[] = {
 		{
@@ -99,5 +93,5 @@
 	};
 	
-	rc = wmi_reg_buffer_write(ar9271->htc_device, buffer,
+	int rc = wmi_reg_buffer_write(ar9271->htc_device, buffer,
 		sizeof(buffer) / sizeof(wmi_reg_t));
 	if(rc != EOK) {
@@ -132,6 +126,12 @@
 }
 
-static int hw_warm_reset(ar9271_t *ar9271)
-{
+static int hw_set_reset(ar9271_t *ar9271, bool cold)
+{
+	uint32_t reset_value = AR9271_RTC_RC_MAC_WARM;
+	
+	if(cold) {
+		reset_value |= AR9271_RTC_RC_MAC_COLD;
+	}
+	
 	wmi_reg_t buffer[] = {
 		{
@@ -146,5 +146,5 @@
 		{
 			.offset = AR9271_RTC_RC,
-			.value = 1
+			.value = reset_value
 		}
 	};
@@ -202,5 +202,5 @@
 	}
 	
-	nic_t *nic = nic_get_from_ddf_dev(ar9271->ddf_device);
+	nic_t *nic = nic_get_from_ddf_dev(ar9271->ddf_dev);
 	
 	rc = nic_report_address(nic, &ar9271_address);
@@ -269,5 +269,5 @@
 
 /**
- * Hardware reset of AR9271 device.
+ * Hardware init procedure of AR9271 device.
  * 
  * @param ar9271 Device structure.
@@ -275,5 +275,5 @@
  * @return EOK if succeed, negative error code otherwise.
  */
-static int hw_reset(ar9271_t *ar9271)
+static int hw_init_proc(ar9271_t *ar9271)
 {
 	int rc = hw_reset_power_on(ar9271);
@@ -283,5 +283,5 @@
 	}
 	
-	rc = hw_warm_reset(ar9271);
+	rc = hw_set_reset(ar9271, false);
 	if(rc != EOK) {
 		usb_log_error("Failed to HW warm reset.\n");
@@ -310,4 +310,142 @@
 	if(rc != EOK) {
 		usb_log_error("Failed to init bring up GPIO led.\n");
+		return rc;
+	}
+	
+	return EOK;
+}
+
+static int hw_set_operating_mode(ar9271_t *ar9271, 
+	ieee80211_operating_mode_t opmode)
+{
+	uint32_t set_bit = 0x10000000;
+	
+	/* NOTICE: Fall-through switch statement! */
+	switch(opmode) {
+		case IEEE80211_OPMODE_ADHOC:
+			set_bit |= AR9271_OPMODE_ADHOC_MASK;
+		case IEEE80211_OPMODE_MESH:
+		case IEEE80211_OPMODE_AP:
+			set_bit |= AR9271_OPMODE_STATION_AP_MASK;
+		case IEEE80211_OPMODE_STATION:
+			wmi_reg_clear_bit(ar9271->htc_device, AR9271_CONFIG,
+				AR9271_CONFIG_ADHOC);
+	}
+	
+	wmi_reg_clear_set_bit(ar9271->htc_device, AR9271_STATION_ID1,
+		set_bit, 
+		AR9271_OPMODE_STATION_AP_MASK | AR9271_OPMODE_ADHOC_MASK);
+	
+	return EOK;
+}
+
+static uint32_t hw_reverse_bits(uint32_t value, uint32_t count)
+{
+	uint32_t ret_val = 0;
+	
+	for(size_t i = 0; i < count; i++) {
+		ret_val = (ret_val << 1) | (value & 1);
+		value >>= 1;
+	}
+	
+	return ret_val;
+}
+
+static int hw_set_channel(ar9271_t *ar9271, uint16_t freq)
+{
+	/* Not supported channel frequency. */
+	if(freq < IEEE80211_FIRST_CHANNEL || freq > IEEE80211_MAX_CHANNEL) {
+		return EINVAL;
+	}
+	
+	/* Not supported channel frequency. */
+	if((freq - IEEE80211_FIRST_CHANNEL) % IEEE80211_CHANNEL_GAP != 0) {
+		return EINVAL;
+	}
+	
+	uint32_t result;
+	wmi_reg_read(ar9271->htc_device, AR9271_PHY_CCK_TX_CTRL, &result);
+	wmi_reg_write(ar9271->htc_device, AR9271_PHY_CCK_TX_CTRL,
+		result & ~AR9271_PHY_CCK_TX_CTRL_JAPAN);
+	
+	/* Some magic here. */
+	uint32_t channel = hw_reverse_bits(
+		(((((freq - 672) * 2 - 3040) / 10) << 2) & 0xFF), 8);
+	uint32_t to_write = (channel << 8) | 33;
+	
+	wmi_reg_write(ar9271->htc_device, AR9271_PHY_BASE + (0x37 << 2),
+		to_write);
+	
+	return EOK;
+}
+
+int hw_reset(ar9271_t *ar9271) 
+{
+	int rc = wmi_reg_write(ar9271->htc_device, 
+		AR9271_RESET_POWER_DOWN_CONTROL,
+		AR9271_RADIO_RF_RESET);
+	if(rc != EOK) {
+		usb_log_error("Failed to reset radio rf.\n");
+		return rc;
+	}
+	
+	udelay(50);
+	
+	rc = wmi_reg_write(ar9271->htc_device, 
+		AR9271_RESET_POWER_DOWN_CONTROL,
+		AR9271_GATE_MAC_CONTROL);
+	if(rc != EOK) {
+		usb_log_error("Failed to set the gate reset controls for MAC."
+			"\n");
+		return rc;
+	}
+	
+	udelay(50);
+	
+	/* Perform cold reset of device. */
+	rc = hw_set_reset(ar9271, true);
+	if(rc != EOK) {
+		usb_log_error("Failed to HW cold reset.\n");
+		return rc;
+	}
+	
+	/* Set physical layer mode. */
+	rc = wmi_reg_write(ar9271->htc_device, AR9271_PHY_MODE,
+		AR9271_PHY_MODE_DYNAMIC | AR9271_PHY_MODE_2G);
+	if(rc != EOK) {
+		usb_log_error("Failed to set physical layer mode.\n");
+		return rc;
+	}
+	
+	/* Set device operating mode. */
+	rc = hw_set_operating_mode(ar9271, IEEE80211_OPMODE_STATION);
+	if(rc != EOK) {
+		usb_log_error("Failed to set opmode to station.\n");
+		return rc;
+	}
+	
+	/* Set channel. */
+	rc = hw_set_channel(ar9271, IEEE80211_FIRST_CHANNEL);
+	if(rc != EOK) {
+		usb_log_error("Failed to set channel.\n");
+		return rc;
+	}
+	
+	/* Initialize transmission queues. */
+	for(int i = 0; i < AR9271_QUEUES_COUNT; i++) {
+		rc = wmi_reg_write(ar9271->htc_device, 
+			AR9271_QUEUE_BASE_MASK + (i << 2),
+			1 << i);
+		if(rc != EOK) {
+			usb_log_error("Failed to initialize transmission queue."
+				"\n");
+			return rc;
+		}
+	}
+	
+	/* Activate physical layer. */
+	rc = wmi_reg_write(ar9271->htc_device, AR9271_PHY_ACTIVE, 1);
+	if(rc != EOK) {
+		usb_log_error("Failed to activate physical layer.\n");
 		return rc;
 	}
@@ -325,5 +463,5 @@
 int hw_init(ar9271_t *ar9271)
 {
-	int rc = hw_reset(ar9271);
+	int rc = hw_init_proc(ar9271);
 	if(rc != EOK) {
 		usb_log_error("Failed to HW reset device.\n");
Index: uspace/drv/bus/usb/ar9271/hw.h
===================================================================
--- uspace/drv/bus/usb/ar9271/hw.h	(revision 462054abcfa5153f73910e63137ea1db077091da)
+++ uspace/drv/bus/usb/ar9271/hw.h	(revision ab365c4b5641c1da9913b8fda70916c9a2a5a7c0)
@@ -42,4 +42,5 @@
 
 extern int hw_init(ar9271_t *ar9271);
+extern int hw_reset(ar9271_t *ar9271);
 
 #endif	/* ATHEROS_HW_H */
Index: uspace/drv/bus/usb/ar9271/wmi.c
===================================================================
--- uspace/drv/bus/usb/ar9271/wmi.c	(revision 462054abcfa5153f73910e63137ea1db077091da)
+++ uspace/drv/bus/usb/ar9271/wmi.c	(revision ab365c4b5641c1da9913b8fda70916c9a2a5a7c0)
@@ -250,4 +250,10 @@
 	free(buffer);
 	
+	bool clean_resp_buffer = false;
+	if(response_buffer == NULL) {
+		response_buffer = malloc(MAX_RESPONSE_LENGTH);
+		clean_resp_buffer = true;
+	}
+	
 	/* Read response. */
 	rc = htc_read_message(htc_device, response_buffer, MAX_RESPONSE_LENGTH, 
@@ -260,4 +266,8 @@
 	}
 	
-	return rc;
-}
+	if(clean_resp_buffer) {
+		free(response_buffer);
+	}
+	
+	return rc;
+}
Index: uspace/drv/bus/usb/ar9271/wmi.h
===================================================================
--- uspace/drv/bus/usb/ar9271/wmi.h	(revision 462054abcfa5153f73910e63137ea1db077091da)
+++ uspace/drv/bus/usb/ar9271/wmi.h	(revision ab365c4b5641c1da9913b8fda70916c9a2a5a7c0)
@@ -102,6 +102,5 @@
 	WMI_TX_STATS,
 	WMI_RX_STATS,
-	WMI_BITRATE_MASK,
-	WMI_REG_RMW,
+	WMI_BITRATE_MASK
 } wmi_command_t;
 
Index: uspace/lib/net/Makefile
===================================================================
--- uspace/lib/net/Makefile	(revision 462054abcfa5153f73910e63137ea1db077091da)
+++ uspace/lib/net/Makefile	(revision ab365c4b5641c1da9913b8fda70916c9a2a5a7c0)
@@ -29,9 +29,19 @@
 
 USPACE_PREFIX = ../..
-EXTRA_CFLAGS = -Iinclude
 LIBRARY = libnet
 
+LIBS = \
+	$(LIBDRV_PREFIX)/libdrv.a \
+	$(LIBNIC_PREFIX)/libnic.a 
+
+EXTRA_CFLAGS += \
+	-Iinclude \
+	-I$(LIBDRV_PREFIX)/include \
+	-I$(LIBNIC_PREFIX)/include
+
 SOURCES = \
-	tl/socket_core.c
+	tl/socket_core.c \
+	ieee80211/ieee80211.c \
+	ieee80211/ieee80211_impl.c
 
 include $(USPACE_PREFIX)/Makefile.common
Index: uspace/lib/net/ieee80211/ieee80211.c
===================================================================
--- uspace/lib/net/ieee80211/ieee80211.c	(revision ab365c4b5641c1da9913b8fda70916c9a2a5a7c0)
+++ uspace/lib/net/ieee80211/ieee80211.c	(revision ab365c4b5641c1da9913b8fda70916c9a2a5a7c0)
@@ -0,0 +1,153 @@
+/*
+ * Copyright (c) 2015 Jan Kolarik
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libnet
+ *  @{
+ */
+
+/** @file ieee80211.c
+ * 
+ * IEEE 802.11 interface implementation.
+ */
+
+#include <errno.h>
+#include <nic.h>
+
+#include <ieee80211_impl.h>
+#include <ieee80211.h>
+
+/** Network interface options for IEEE 802.11 driver. */
+static nic_iface_t ieee80211_nic_iface;
+
+/** Basic driver operations for IEEE 802.11 NIC driver. */
+static driver_ops_t ieee80211_nic_driver_ops;
+
+static int ieee80211_open(ddf_fun_t *fun)
+{
+	nic_t *nic_data = nic_get_from_ddf_fun(fun);
+	ieee80211_dev_t *ieee80211_dev = nic_get_specific(nic_data);
+	
+	int rc = ieee80211_dev->ops->start(ieee80211_dev);
+	if(rc != EOK)
+		return rc;
+	
+	return EOK;
+}
+
+/** Basic NIC device operations for IEEE802.11 driver. */
+static ddf_dev_ops_t ieee80211_nic_dev_ops = {
+	.open = ieee80211_open
+};
+
+static int ieee80211_set_operations(ieee80211_dev_t *ieee80211_dev, 
+	ieee80211_ops_t *ieee80211_ops)
+{
+	/* IEEE802.11 start operation must be implemented. */
+	if(!ieee80211_ops->start)
+		return EINVAL;
+	
+	if(!ieee80211_ops->scan)
+		ieee80211_ops->scan = ieee80211_scan_impl;
+	
+	ieee80211_dev->ops = ieee80211_ops;
+	
+	return EOK;
+}
+
+/**
+ * Initialize an IEEE802.11 framework structure.
+ * 
+ * @param ieee80211_dev Device structure to initialize.
+ * @param ieee80211_ops Structure with implemented IEEE802.11 operations.
+ * 
+ * @return EOK if succeed, negative error code otherwise.
+ */
+int ieee80211_device_init(ieee80211_dev_t *ieee80211_dev, void *driver_data,
+	ddf_dev_t *ddf_dev)
+{
+	ieee80211_dev->ddf_dev = ddf_dev;
+	ieee80211_dev->driver_data = driver_data;
+	
+	/* Bind NIC to device */
+	nic_t *nic = nic_create_and_bind(ddf_dev);
+	if (!nic) {
+		return ENOMEM;
+	}
+	
+	nic_set_specific(nic, ieee80211_dev);
+	
+	return EOK;
+}
+
+/**
+ * IEEE802.11 WiFi framework initialization.
+ * 
+ * @param ieee80211_dev Device structure to initialize.
+ * @param ieee80211_ops Structure with implemented IEEE802.11 operations.
+ * 
+ * @return EOK if succeed, negative error code otherwise.
+ */
+int ieee80211_init(ieee80211_dev_t *ieee80211_dev, 
+	ieee80211_ops_t *ieee80211_ops)
+{
+	int rc = ieee80211_set_operations(ieee80211_dev, ieee80211_ops);
+	if(rc != EOK)
+		return rc;
+	
+	nic_driver_implement(&ieee80211_nic_driver_ops, &ieee80211_nic_dev_ops,
+	    &ieee80211_nic_iface);
+	
+	nic_t *nic = nic_get_from_ddf_dev(ieee80211_dev->ddf_dev);
+	
+	/** TODO: Set NIC handlers here. */
+	
+	ddf_fun_t *fun = ddf_fun_create(ieee80211_dev->ddf_dev, fun_exposed, 
+		"port0");
+	if (fun == NULL) {
+		return EINVAL;
+	}
+	
+	nic_set_ddf_fun(nic, fun);
+	ddf_fun_set_ops(fun, &ieee80211_nic_dev_ops);
+	
+	rc = ddf_fun_bind(fun);
+	if (rc != EOK) {
+		ddf_fun_destroy(fun);
+		return rc;
+	}
+	rc = ddf_fun_add_to_category(fun, DEVICE_CATEGORY_NIC);
+	if (rc != EOK) {
+		ddf_fun_unbind(fun);
+		return rc;
+	}
+	
+	return EOK;
+}
+
+/** @}
+ */
Index: uspace/lib/net/ieee80211/ieee80211_impl.c
===================================================================
--- uspace/lib/net/ieee80211/ieee80211_impl.c	(revision ab365c4b5641c1da9913b8fda70916c9a2a5a7c0)
+++ uspace/lib/net/ieee80211/ieee80211_impl.c	(revision ab365c4b5641c1da9913b8fda70916c9a2a5a7c0)
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2015 Jan Kolarik
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libnet
+ *  @{
+ */
+
+/** @file ieee80211_impl.c
+ * 
+ * IEEE 802.11 default functions implementation.
+ */
+
+#include <errno.h>
+
+#include <ieee80211_impl.h>
+
+/**
+ * Default implementation of IEEE802.11 scan function.
+ * 
+ * @param ieee80211_dev Structure of IEEE802.11 device.
+ * 
+ * @return EOK if succeed, negative error code otherwise. 
+ */
+int ieee80211_scan_impl(ieee80211_dev_t *ieee80211_dev)
+{
+	/** TODO */
+	
+	return EOK;
+}
Index: uspace/lib/net/include/ieee80211.h
===================================================================
--- uspace/lib/net/include/ieee80211.h	(revision ab365c4b5641c1da9913b8fda70916c9a2a5a7c0)
+++ uspace/lib/net/include/ieee80211.h	(revision ab365c4b5641c1da9913b8fda70916c9a2a5a7c0)
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2015 Jan Kolarik
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libnet
+ *  @{
+ */
+
+/** @file ieee80211.h
+ * 
+ * IEEE 802.11 interface definition.
+ */
+
+#ifndef LIBNET_IEEE80211_H
+#define LIBNET_IEEE80211_H
+
+#include <ddf/driver.h>
+#include <sys/types.h>
+
+/** Initial channel frequency. */
+#define IEEE80211_FIRST_CHANNEL 2412
+
+/** Max supported channel frequency. */
+#define IEEE80211_MAX_CHANNEL 2472
+
+/* Gap between IEEE80211 channels in MHz. */
+#define IEEE80211_CHANNEL_GAP 5
+
+struct ieee80211_dev;
+
+/** Device operating modes. */
+typedef enum {
+	IEEE80211_OPMODE_ADHOC,
+	IEEE80211_OPMODE_MESH,
+	IEEE80211_OPMODE_AP,
+	IEEE80211_OPMODE_STATION
+} ieee80211_operating_mode_t;
+
+/** IEEE 802.11 functions. */
+typedef struct {
+	int (*start)(struct ieee80211_dev *);
+	int (*scan)(struct ieee80211_dev *);
+} ieee80211_ops_t;
+
+/** IEEE 802.11 WiFi device structure. */
+typedef struct ieee80211_dev {
+	/** Backing DDF device. */
+	ddf_dev_t *ddf_dev;
+	
+	/** Pointer to implemented IEEE 802.11 operations. */
+	ieee80211_ops_t *ops;
+	
+	/** Pointer to driver specific data. */
+	void *driver_data;
+} ieee80211_dev_t;
+
+extern int ieee80211_device_init(ieee80211_dev_t *ieee80211_dev, 
+	void *driver_data, ddf_dev_t *ddf_dev);
+extern int ieee80211_init(ieee80211_dev_t *ieee80211_dev, 
+	ieee80211_ops_t *ieee80211_ops);
+
+#endif /* LIBNET_IEEE80211_H */
+
+/** @}
+ */
Index: uspace/lib/net/include/ieee80211_impl.h
===================================================================
--- uspace/lib/net/include/ieee80211_impl.h	(revision ab365c4b5641c1da9913b8fda70916c9a2a5a7c0)
+++ uspace/lib/net/include/ieee80211_impl.h	(revision ab365c4b5641c1da9913b8fda70916c9a2a5a7c0)
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2015 Jan Kolarik
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libnet
+ *  @{
+ */
+
+/** @file ieee80211_impl.h
+ * 
+ * IEEE 802.11 default functions definition.
+ */
+
+#ifndef LIBNET_IEEE80211_IMPL_H
+#define	LIBNET_IEEE80211_IMPL_H
+
+#include <ieee80211.h>
+
+extern int ieee80211_scan_impl(ieee80211_dev_t *ieee80211_dev);
+
+#endif	/* LIBNET_IEEE80211_IMPL_H */
+
+/** @}
+ */
