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: Matthias Beyer <mail@beyermatthias.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
8224ac2a78
commit
e5c34a1aad
1 changed files with 55 additions and 43 deletions
|
@ -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,
|
||||||
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,
|
||||||
|
|
||||||
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,
|
||||||
|
|
Loading…
Add table
Reference in a new issue