This patch outsources the code from the IsFlash2x() check in
bcm_char_ioctl_nvm_rw() function to shorten it.

Signed-off-by: Matthias Beyer <m...@beyermatthias.de>
---
 drivers/staging/bcm/Bcmchar.c | 98 ++++++++++++++++++++++++-------------------
 1 file changed, 56 insertions(+), 42 deletions(-)

diff --git a/drivers/staging/bcm/Bcmchar.c b/drivers/staging/bcm/Bcmchar.c
index 71818b1..118149c 100644
--- a/drivers/staging/bcm/Bcmchar.c
+++ b/drivers/staging/bcm/Bcmchar.c
@@ -4,6 +4,7 @@
 
 static int bcm_handle_nvm_read_cmd(struct bcm_mini_adapter *Adapter,
                PUCHAR pReadData);
+static int handle_flash2x_adapter(struct bcm_mini_adapter *Adapter);
 
 /***************************************************************
 * Function       - bcm_char_open()
@@ -1474,48 +1475,11 @@ static int bcm_char_ioctl_nvm_rw(void __user *argp,
 
                Adapter->bHeaderChangeAllowed = TRUE;
                if (IsFlash2x(Adapter)) {
-                       /*
-                        * New Requirement:-
-                        * DSD section updation will be allowed in two case:-
-                        * 1.  if DSD sig is present in DSD header means dongle
-                        * is ok and updation is fruitfull
-                        * 2.  if point 1 failes then user buff should have
-                        * DSD sig. this point ensures that if dongle is
-                        * corrupted then user space program first modify
-                        * the DSD header with valid DSD sig so that this
-                        * as well as further write may be worthwhile.
-                        *
-                        * This restriction has been put assuming that
-                        * if DSD sig is corrupted, DSD data won't be
-                        * considered valid.
-                        */
-
-                       Status = BcmFlash2xCorruptSig(Adapter,
-                               Adapter->eActiveDSD);
-                       if (Status != STATUS_SUCCESS) {
-                               if (((stNVMReadWrite.uiOffset + 
stNVMReadWrite.uiNumBytes) !=
-                                       Adapter->uiNVMDSDSize) ||
-                                       (stNVMReadWrite.uiNumBytes < 
SIGNATURE_SIZE)) {
-
-                                       BCM_DEBUG_PRINT(Adapter, 
DBG_TYPE_OTHERS,
-                                               OSAL_DBG, DBG_LVL_ALL,
-                                               "DSD Sig is present neither in 
Flash nor User provided Input..");
-                                       up(&Adapter->NVMRdmWrmLock);
-                                       kfree(pReadData);
-                                       return Status;
-                               }
-
-                               ulDSDMagicNumInUsrBuff = 
ntohl(*(PUINT)(pReadData + stNVMReadWrite.uiNumBytes - SIGNATURE_SIZE));
-                               if (ulDSDMagicNumInUsrBuff !=
-                                       DSD_IMAGE_MAGIC_NUMBER) {
-                                       BCM_DEBUG_PRINT(Adapter,
-                                       DBG_TYPE_OTHERS, OSAL_DBG, DBG_LVL_ALL,
-                                               "DSD Sig is present neither in 
Flash nor User provided Input..");
-                                       up(&Adapter->NVMRdmWrmLock);
-                                       kfree(pReadData);
-                                       return Status;
-                               }
-                       }
+                       int ret = handle_flash2x_adapter(Adapter,
+                                                       pReadData,
+                                                       &stNVMReadWrite);
+                       if (ret != STATUS_SUCCESS)
+                               return ret;
                }
 
                Status = BeceemNVMWrite(Adapter, (PUINT)pReadData,
@@ -2629,3 +2593,53 @@ static int bcm_handle_nvm_read_cmd(struct 
bcm_mini_adapter *Adapter,
 
        return STATUS_SUCCESS;
 }
+
+static int handle_flash2x_adapter(struct bcm_mini_adapter *Adapter,
+       PUCHAR pReadData, struct bcm_nvm_readwrite *stNVMReadWrite)
+{
+       /*
+        * New Requirement:-
+        * DSD section updation will be allowed in two case:-
+        * 1.  if DSD sig is present in DSD header means dongle
+        * is ok and updation is fruitfull
+        * 2.  if point 1 failes then user buff should have
+        * DSD sig. this point ensures that if dongle is
+        * corrupted then user space program first modify
+        * the DSD header with valid DSD sig so that this
+        * as well as further write may be worthwhile.
+        *
+        * This restriction has been put assuming that
+        * if DSD sig is corrupted, DSD data won't be
+        * considered valid.
+        */
+       INT Status = STATUS_FAILURE;
+
+       Status = BcmFlash2xCorruptSig(Adapter, Adapter->eActiveDSD);
+       if (Status != STATUS_SUCCESS) {
+               if (((stNVMReadWrite->uiOffset + stNVMReadWrite->uiNumBytes) !=
+                       Adapter->uiNVMDSDSize) ||
+                       (stNVMReadWrite->uiNumBytes < SIGNATURE_SIZE)) {
+
+                       BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, OSAL_DBG,
+                                       DBG_LVL_ALL,
+                                       "DSD Sig is present neither in Flash 
nor User provided Input..");
+                       up(&Adapter->NVMRdmWrmLock);
+                       kfree(pReadData);
+                       return Status;
+               }
+
+               ulDSDMagicNumInUsrBuff = ntohl(*(PUINT)(pReadData +
+                                       stNVMReadWrite->uiNumBytes -
+                                       SIGNATURE_SIZE));
+               if (ulDSDMagicNumInUsrBuff != DSD_IMAGE_MAGIC_NUMBER) {
+                       BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, OSAL_DBG,
+                                       DBG_LVL_ALL,
+                                       "DSD Sig is present neither in Flash 
nor User provided Input..");
+                       up(&Adapter->NVMRdmWrmLock);
+                       kfree(pReadData);
+                       return Status;
+               }
+       }
+
+       return Status;
+}
-- 
1.9.3

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to