Commit e5c34a1a authored by Matthias Beyer's avatar Matthias Beyer Committed by Greg Kroah-Hartman

Staging: bcm: Outsourced IsFlash2x() handling

This patch outsources the code from the IsFlash2x() check in
bcm_char_ioctl_nvm_rw() function to shorten it.
Signed-off-by: default avatarMatthias Beyer <mail@beyermatthias.de>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 8224ac2a
...@@ -39,6 +39,56 @@ static int bcm_handle_nvm_read_cmd(struct bcm_mini_adapter *Adapter, ...@@ -39,6 +39,56 @@ static int bcm_handle_nvm_read_cmd(struct bcm_mini_adapter *Adapter,
return STATUS_SUCCESS; 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() * Function - bcm_char_open()
* *
...@@ -1437,7 +1487,6 @@ static int bcm_char_ioctl_nvm_rw(void __user *argp, ...@@ -1437,7 +1487,6 @@ static int bcm_char_ioctl_nvm_rw(void __user *argp,
struct timeval tv0, tv1; struct timeval tv0, tv1;
struct bcm_ioctl_buffer IoBuffer; struct bcm_ioctl_buffer IoBuffer;
PUCHAR pReadData = NULL; PUCHAR pReadData = NULL;
ULONG ulDSDMagicNumInUsrBuff = 0;
INT Status = STATUS_FAILURE; INT Status = STATUS_FAILURE;
memset(&tv0, 0, sizeof(struct timeval)); memset(&tv0, 0, sizeof(struct timeval));
...@@ -1508,48 +1557,11 @@ static int bcm_char_ioctl_nvm_rw(void __user *argp, ...@@ -1508,48 +1557,11 @@ static int bcm_char_ioctl_nvm_rw(void __user *argp,
Adapter->bHeaderChangeAllowed = TRUE; Adapter->bHeaderChangeAllowed = TRUE;
if (IsFlash2x(Adapter)) { if (IsFlash2x(Adapter)) {
/* int ret = handle_flash2x_adapter(Adapter,
* New Requirement:- pReadData,
* DSD section updation will be allowed in two case:- &stNVMReadWrite);
* 1. if DSD sig is present in DSD header means dongle if (ret != STATUS_SUCCESS)
* is ok and updation is fruitfull return ret;
* 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;
}
}
} }
Status = BeceemNVMWrite(Adapter, (PUINT)pReadData, Status = BeceemNVMWrite(Adapter, (PUINT)pReadData,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment