[PATCH 05/17] rtl8192e: Store priv data like mac80211

Mike McCormack mikem at ring3k.org
Tue Apr 26 13:38:43 UTC 2011


Signed-off-by: Mike McCormack <mikem at ring3k.org>
---
 drivers/staging/rtl8192e/ieee80211/ieee80211.h     |    4 +-
 .../staging/rtl8192e/ieee80211/ieee80211_module.c  |   15 +++++-
 drivers/staging/rtl8192e/r8192E_core.c             |   45 ++++++++++----------
 drivers/staging/rtl8192e/r819xE_phy.c              |   13 +++---
 4 files changed, 41 insertions(+), 36 deletions(-)

diff --git a/drivers/staging/rtl8192e/ieee80211/ieee80211.h b/drivers/staging/rtl8192e/ieee80211/ieee80211.h
index 0b26fbd..79007ed 100644
--- a/drivers/staging/rtl8192e/ieee80211/ieee80211.h
+++ b/drivers/staging/rtl8192e/ieee80211/ieee80211.h
@@ -2200,9 +2200,7 @@ struct ieee80211_device {
 	bool (*GetHalfNmodeSupportByAPsHandler)(struct ieee80211_device *ieee80211);
 	void (*InitialGainHandler)(struct ieee80211_device *ieee80211, u8 Operation);
 
-	/* This must be the last item so that it points to the data
-	 * allocated beyond this structure by alloc_ieee80211 */
-	u8 priv[0];
+	void *priv;
 };
 
 #define	RT_RF_OFF_LEVL_ASPM			BIT0	// PCI ASPM
diff --git a/drivers/staging/rtl8192e/ieee80211/ieee80211_module.c b/drivers/staging/rtl8192e/ieee80211/ieee80211_module.c
index a3acd6e..e182e27 100644
--- a/drivers/staging/rtl8192e/ieee80211/ieee80211_module.c
+++ b/drivers/staging/rtl8192e/ieee80211/ieee80211_module.c
@@ -103,15 +103,19 @@ struct net_device *alloc_ieee80211(int sizeof_priv, const struct ieee80211_ops *
 
 	IEEE80211_DEBUG_INFO("Initializing...\n");
 
-	dev = alloc_etherdev(sizeof(struct ieee80211_device) + sizeof_priv);
+	dev = alloc_etherdev(sizeof *ieee);
 	if (!dev) {
 		IEEE80211_ERROR("Unable to network device.\n");
 		goto failed;
 	}
 
 	ieee = netdev_priv(dev);
+	memset(ieee, 0, sizeof *ieee);
+
+	ieee->priv = kzalloc(sizeof_priv, GFP_KERNEL);
+	if (!ieee->priv)
+		goto failed;
 
-	memset(ieee, 0, sizeof(struct ieee80211_device) + sizeof_priv);
 	ieee->ops = ops;
 	ieee->dev = dev;
 
@@ -185,8 +189,11 @@ struct net_device *alloc_ieee80211(int sizeof_priv, const struct ieee80211_ops *
 	return dev;
 
 failed:
-	if (dev)
+	if (dev) {
+		if (ieee->priv)
+			kfree(ieee->priv);
 		free_netdev(dev);
+	}
 	return NULL;
 }
 
@@ -213,6 +220,8 @@ void free_ieee80211(struct net_device *dev)
 	}
 
 	ieee80211_networks_free(ieee);
+	if (ieee->priv)
+		kfree(ieee->priv);
 	free_netdev(dev);
 }
 
diff --git a/drivers/staging/rtl8192e/r8192E_core.c b/drivers/staging/rtl8192e/r8192E_core.c
index 195373c..728c7e3 100644
--- a/drivers/staging/rtl8192e/r8192E_core.c
+++ b/drivers/staging/rtl8192e/r8192E_core.c
@@ -273,7 +273,7 @@ u8 rtl8192e_ap_sec_type(struct ieee80211_device *ieee)
 
 void rtl8192e_SetHwReg(struct ieee80211_device *ieee80211, u8 variable, u8 *val)
 {
-	struct r8192_priv *priv = ieee80211_priv(ieee80211->dev);
+	struct r8192_priv *priv = ieee80211->priv;
 
 	switch(variable)
 	{
@@ -585,7 +585,7 @@ static void rtl8192_proc_init_one(struct r8192_priv *priv)
 
 static short check_nic_enough_desc(struct ieee80211_device *ieee, int prio)
 {
-    struct r8192_priv *priv = ieee80211_priv(ieee->dev);
+    struct r8192_priv *priv = ieee->priv;
     struct rtl8192_tx_ring *ring = &priv->tx_ring[prio];
 
     /* for now we reserve two free descriptor as a safety boundary
@@ -661,7 +661,7 @@ static void rtl8192_set_chan(struct ieee80211_device *ieee80211, short ch)
 
 static int rtl8192_config(struct ieee80211_device *ieee, u32 changed)
 {
-	struct r8192_priv *priv = ieee80211_priv(ieee->dev);
+	struct r8192_priv *priv = ieee->priv;
 
 	priv->chan = ieee->current_network.channel;
 
@@ -759,7 +759,7 @@ void PHY_SetRtl8192eRfOff(struct r8192_priv *priv)
 
 static void rtl8192_stop(struct ieee80211_device *ieee)
 {
-	struct r8192_priv *priv = ieee80211_priv(ieee->dev);
+	struct r8192_priv *priv = ieee->priv;
 	int i;
 	u8 OpMode;
 	u32 ulRegRead;
@@ -825,7 +825,7 @@ static void rtl8192_data_hard_resume(struct ieee80211_device *ieee80211)
 static void rtl8192_hard_data_xmit(struct sk_buff *skb,
 				   struct ieee80211_device *ieee80211, int rate)
 {
-	struct r8192_priv *priv = ieee80211_priv(ieee80211->dev);
+	struct r8192_priv *priv = ieee80211->priv;
 	int ret;
 	cb_desc *tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE);
 	u8 queue_index = tcb_desc->queue_index;
@@ -859,7 +859,7 @@ static void rtl8192_hard_data_xmit(struct sk_buff *skb,
  */
 static int rtl8192_hard_start_xmit(struct ieee80211_device *ieee80211, struct sk_buff *skb)
 {
-	struct r8192_priv *priv = ieee80211_priv(ieee80211->dev);
+	struct r8192_priv *priv = ieee80211->priv;
 	int ret;
         cb_desc *tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE);
         u8 queue_index = tcb_desc->queue_index;
@@ -1472,7 +1472,7 @@ static void rtl8192_pci_resetdescring(struct r8192_priv *priv)
 
 static void rtl8192_link_change(struct ieee80211_device *ieee)
 {
-	struct r8192_priv *priv = ieee80211_priv(ieee->dev);
+	struct r8192_priv *priv = ieee->priv;
 
 	if (ieee->state == IEEE80211_LINKED)
 	{
@@ -1607,7 +1607,7 @@ static int rtl8192_handle_beacon(struct ieee80211_device *ieee,
                               struct ieee80211_beacon * beacon,
                               struct ieee80211_network * network)
 {
-	struct r8192_priv *priv = ieee80211_priv(ieee->dev);
+	struct r8192_priv *priv = ieee->priv;
 
 	rtl8192_qos_handle_probe_response(priv,1,network);
 
@@ -1673,7 +1673,7 @@ static int rtl8192_handle_assoc_response(struct ieee80211_device *ieee,
                                      struct ieee80211_assoc_response_frame *resp,
                                      struct ieee80211_network *network)
 {
-        struct r8192_priv *priv = ieee80211_priv(ieee->dev);
+        struct r8192_priv *priv = ieee->priv;
         rtl8192_qos_association_resp(priv, network);
         return 0;
 }
@@ -1750,7 +1750,7 @@ static u8 rtl8192_getSupportedWireleeMode(void)
 
 static void rtl8192_SetWirelessMode(struct ieee80211_device *ieee, u8 wireless_mode)
 {
-	struct r8192_priv *priv = ieee80211_priv(ieee->dev);
+	struct r8192_priv *priv = ieee->priv;
 	u8 bSupportMode = rtl8192_getSupportedWireleeMode();
 
 	if ((wireless_mode == WIRELESS_MODE_AUTO) || ((wireless_mode&bSupportMode)==0))
@@ -1798,7 +1798,7 @@ static bool GetHalfNmodeSupportByAPs819xPci(struct ieee80211_device* ieee)
 static short rtl8192_is_tx_queue_empty(struct ieee80211_device *ieee)
 {
 	int i=0;
-	struct r8192_priv *priv = ieee80211_priv(ieee->dev);
+	struct r8192_priv *priv = ieee->priv;
 
 	for (i=0; i<=MGNT_QUEUE; i++)
 	{
@@ -1819,7 +1819,7 @@ static void rtl8192_hw_sleep_down(struct r8192_priv *priv)
 
 static void rtl8192_hw_wakeup(struct ieee80211_device *ieee)
 {
-	struct r8192_priv *priv = ieee80211_priv(ieee->dev);
+	struct r8192_priv *priv = ieee->priv;
 	MgntActSet_RF_State(priv, eRfOn, RF_CHANGE_BY_PS);
 }
 
@@ -1835,7 +1835,7 @@ static void rtl8192_hw_wakeup_wq (struct work_struct *work)
 #define MAX_SLEEP_TIME 10000
 static void rtl8192_hw_to_sleep(struct ieee80211_device *ieee, u32 th, u32 tl)
 {
-	struct r8192_priv *priv = ieee80211_priv(ieee->dev);
+	struct r8192_priv *priv = ieee->priv;
 	u32 tmp;
 	u32 rb = jiffies;
 
@@ -2511,7 +2511,7 @@ static void rtl8192_hwconfig(struct r8192_priv *priv)
 
 static int rtl8192_start(struct ieee80211_device *ieee)
 {
-	struct r8192_priv *priv = ieee80211_priv(ieee->dev);
+	struct r8192_priv *priv = ieee->priv;
 	struct net_device *dev = priv->ieee80211->dev;
 	u32 ulRegRead;
 	RT_STATUS rtStatus;
@@ -2852,7 +2852,7 @@ static void rtl8192_prepare_beacon(unsigned long arg)
  */
 static void rtl8192_start_beacon(struct ieee80211_device *ieee80211)
 {
-	struct r8192_priv *priv = ieee80211_priv(ieee80211->dev);
+	struct r8192_priv *priv = ieee80211->priv;
 	struct ieee80211_network *net = &priv->ieee80211->current_network;
 	u16 BcnTimeCfg = 0;
         u16 BcnCW = 6;
@@ -3069,7 +3069,7 @@ bool MgntActSet_802_11_PowerSaveMode(struct r8192_priv *priv, u8 rtPsMode)
 /* Enter the leisure power save mode. */
 void LeisurePSEnter(struct ieee80211_device *ieee80211)
 {
-	struct r8192_priv *priv = ieee80211_priv(ieee80211->dev);
+	struct r8192_priv *priv = ieee80211->priv;
 	PRT_POWER_SAVE_CONTROL pPSC = &priv->PowerSaveControl;
 
 	if(!((priv->ieee80211->iw_mode == IW_MODE_INFRA) &&
@@ -3099,7 +3099,7 @@ void LeisurePSEnter(struct ieee80211_device *ieee80211)
 /* Leave leisure power save mode. */
 void LeisurePSLeave(struct ieee80211_device *ieee80211)
 {
-	struct r8192_priv *priv = ieee80211_priv(ieee80211->dev);
+	struct r8192_priv *priv = ieee80211->priv;
 	PRT_POWER_SAVE_CONTROL pPSC = &priv->PowerSaveControl;
 
 	if (pPSC->bLeisurePs)
@@ -3169,9 +3169,8 @@ void IPSLeave(struct r8192_priv *priv)
 void IPSLeave_wq(struct work_struct *work)
 {
 	struct ieee80211_device *ieee = container_of(work, struct ieee80211_device, ips_leave_wq);
-	struct net_device *dev = ieee->dev;
 
-	struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev);
+	struct r8192_priv *priv = ieee->priv;
 	down(&priv->ieee80211->ips_sem);
 	IPSLeave(priv);
 	up(&priv->ieee80211->ips_sem);
@@ -3179,7 +3178,7 @@ void IPSLeave_wq(struct work_struct *work)
 
 void ieee80211_ips_leave_wq(struct ieee80211_device *ieee80211)
 {
-	struct r8192_priv *priv = ieee80211_priv(ieee80211->dev);
+	struct r8192_priv *priv = ieee80211->priv;
 	RT_RF_POWER_STATE	rtState;
 	rtState = priv->eRFPowerState;
 
@@ -3200,7 +3199,7 @@ void ieee80211_ips_leave_wq(struct ieee80211_device *ieee80211)
 //added by amy 090331 end
 void ieee80211_ips_leave(struct ieee80211_device *ieee80211)
 {
-	struct r8192_priv *priv = ieee80211_priv(ieee80211->dev);
+	struct r8192_priv *priv = ieee80211->priv;
 	down(&ieee80211->ips_sem);
 	IPSLeave(priv);
 	up(&ieee80211->ips_sem);
@@ -3581,7 +3580,7 @@ static void r8192e_set_hw_key(struct r8192_priv *priv, struct ieee_param *ipw)
 /* based on ipw2200 driver */
 static int rtl8192_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
 {
-	struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev);
+	struct r8192_priv *priv = ieee80211_priv(dev);
 	struct iwreq *wrq = (struct iwreq *)rq;
 	int ret=-1;
 	struct iw_point *p = &wrq->u.data;
@@ -4559,7 +4558,7 @@ static int __devinit rtl8192_pci_probe(struct pci_dev *pdev,
 	//pci_set_wmi(pdev);
 	pci_set_dma_mask(pdev, 0xffffff00ULL);
 	pci_set_consistent_dma_mask(pdev,0xffffff00ULL);
-	dev = alloc_ieee80211(sizeof(struct r8192_priv), &r8192e_ops);
+	dev = alloc_ieee80211(sizeof *priv, &r8192e_ops);
 	if (!dev) {
 		ret = -ENOMEM;
 		goto fail_free;
diff --git a/drivers/staging/rtl8192e/r819xE_phy.c b/drivers/staging/rtl8192e/r819xE_phy.c
index dfa4e11..b1d9355 100644
--- a/drivers/staging/rtl8192e/r819xE_phy.c
+++ b/drivers/staging/rtl8192e/r819xE_phy.c
@@ -1850,9 +1850,9 @@ void rtl8192_SwChnl_WorkItem(struct r8192_priv *priv)
  *  return:  return code show if workitem is scheduled(1:pass, 0:fail)
  *    Note:  Delay may be required for RF configuration
  * ***************************************************************************/
-u8 rtl8192_phy_SwChnl(struct ieee80211_device *ieee80211, u8 channel)
+u8 rtl8192_phy_SwChnl(struct ieee80211_device *ieee, u8 channel)
 {
-	struct r8192_priv *priv = ieee80211_priv(ieee80211->dev);
+	struct r8192_priv *priv = ieee->priv;
 
 	RT_TRACE(COMP_PHY, "=====>%s()\n", __FUNCTION__);
         if(!priv->up)
@@ -1864,7 +1864,7 @@ u8 rtl8192_phy_SwChnl(struct ieee80211_device *ieee80211, u8 channel)
 //		return;
 
 	//--------------------------------------------
-	switch(priv->ieee80211->mode)
+	switch (ieee->mode)
 	{
 	case WIRELESS_MODE_A:
 	case WIRELESS_MODE_N_5G:
@@ -2127,13 +2127,12 @@ void rtl8192_SetBWModeWorkItem(struct r8192_priv *priv)
  * ***************************************************************************/
 void rtl8192_SetBWMode(struct ieee80211_device *ieee, HT_CHANNEL_WIDTH Bandwidth, HT_EXTCHNL_OFFSET Offset)
 {
-	struct r8192_priv *priv = ieee80211_priv(ieee->dev);
-
+	struct r8192_priv *priv = ieee->priv;
 
 	if(priv->SetBWModeInProgress)
 		return;
 
-	 atomic_inc(&(priv->ieee80211->atm_swbw));
+	atomic_inc(&ieee->atm_swbw);
 	priv->SetBWModeInProgress= true;
 
 	priv->CurrentChannelBW = Bandwidth;
@@ -2156,7 +2155,7 @@ void InitialGain819xPci(struct ieee80211_device *ieee, u8 Operation)
 {
 #define SCAN_RX_INITIAL_GAIN	0x17
 #define POWER_DETECTION_TH	0x08
-	struct r8192_priv *priv = ieee80211_priv(ieee->dev);
+	struct r8192_priv *priv = ieee->priv;
 	u32					BitMask;
 	u8					initial_gain;
 
-- 
1.7.0.4





More information about the devel mailing list