OSDN Git Service

Staging: bcm: Outsourced IsFlash2x() handling
authorMatthias Beyer <mail@beyermatthias.de>
Thu, 22 May 2014 10:17:27 +0000 (12:17 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 23 May 2014 11:53:40 +0000 (20:53 +0900)
This patch outsources the code from the IsFlash2x() check in
bcm_char_ioctl_nvm_rw() function to shorten it.

Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/bcm/Bcmchar.c

index 89ecdac..93b94b4 100644 (file)
@@ -39,6 +39,56 @@ 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;
+       ULONG ulDSDMagicNumInUsrBuff = 0;
+
+       Status = BcmFlash2xCorruptSig(Adapter, Adapter->eActiveDSD);
+       if (Status == STATUS_SUCCESS)
+               return 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_SUCCESS;
+}
+
 /***************************************************************
 * Function       - bcm_char_open()
 *
@@ -1437,7 +1487,6 @@ static int bcm_char_ioctl_nvm_rw(void __user *argp,
        struct timeval tv0, tv1;
        struct bcm_ioctl_buffer IoBuffer;
        PUCHAR pReadData = NULL;
-       ULONG ulDSDMagicNumInUsrBuff = 0;
        INT Status = STATUS_FAILURE;
 
        memset(&tv0, 0, sizeof(struct timeval));
@@ -1508,48 +1557,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,