static char *cal_data_cfg;
 module_param(cal_data_cfg, charp, 0);
 
+static unsigned short driver_mode;
+module_param(driver_mode, ushort, 0);
+MODULE_PARM_DESC(driver_mode,
+                "station=0x1(default), ap-sta=0x3, station-p2p=0x5, ap-sta-p2p=0x7");
+
 /*
  * This function registers the device and performs all the necessary
  * initializations.
                goto err_init_fw;
        }
 
+       if (driver_mode) {
+               driver_mode &= MWIFIEX_DRIVER_MODE_BITMASK;
+               driver_mode |= MWIFIEX_DRIVER_MODE_STA;
+       }
+
        rtnl_lock();
        /* Create station interface by default */
        wdev = mwifiex_add_virtual_intf(adapter->wiphy, "mlan%d",
                rtnl_unlock();
                goto err_add_intf;
        }
+
+       if (driver_mode & MWIFIEX_DRIVER_MODE_UAP) {
+               wdev = mwifiex_add_virtual_intf(adapter->wiphy, "uap%d",
+                                               NL80211_IFTYPE_AP, NULL, NULL);
+               if (IS_ERR(wdev)) {
+                       dev_err(adapter->dev, "cannot create AP interface\n");
+                       rtnl_unlock();
+                       goto err_add_intf;
+               }
+       }
+
+       if (driver_mode & MWIFIEX_DRIVER_MODE_P2P) {
+               wdev = mwifiex_add_virtual_intf(adapter->wiphy, "p2p%d",
+                                               NL80211_IFTYPE_P2P_CLIENT, NULL,
+                                               NULL);
+               if (IS_ERR(wdev)) {
+                       dev_err(adapter->dev,
+                               "cannot create p2p client interface\n");
+                       rtnl_unlock();
+                       goto err_add_intf;
+               }
+       }
        rtnl_unlock();
 
        mwifiex_drv_get_driver_version(adapter, fmt, sizeof(fmt) - 1);
 
        MWIFIEX_SYNC_CMD
 };
 
+#define MWIFIEX_DRIVER_MODE_STA                        BIT(0)
+#define MWIFIEX_DRIVER_MODE_UAP                        BIT(1)
+#define MWIFIEX_DRIVER_MODE_P2P                        BIT(2)
+#define MWIFIEX_DRIVER_MODE_BITMASK            (BIT(0) | BIT(1) | BIT(2))
+
 #define MWIFIEX_MAX_AP                         64
 
 #define MWIFIEX_DEFAULT_WATCHDOG_TIMEOUT       (5 * HZ)