Commit 14e5d8ef authored by pixo's avatar pixo Committed by Greg Kroah-Hartman

staging: ft1000-pcmcia: Fix ft1000_dnld() to work also on 64bit architectures.

Firmware file needs to be read by 4bytes also on 64 bit architectures.
Change long type to u32 and also extend checking. Tested on 32 and also
64 bit architectures.
Signed-off-by: default avatarStano Lanci <chl.pixo@gmail.com>
Signed-off-by: default avatarMarek Belisko <marek.belisko@open-nandra.com>
Tested-by: default avatarStano Lanci <chl.pixo@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent ea4fca42
...@@ -95,47 +95,47 @@ void put_request_value(struct net_device *dev, long lvalue); ...@@ -95,47 +95,47 @@ void put_request_value(struct net_device *dev, long lvalue);
USHORT hdr_checksum(PPSEUDO_HDR pHdr); USHORT hdr_checksum(PPSEUDO_HDR pHdr);
typedef struct _DSP_FILE_HDR { typedef struct _DSP_FILE_HDR {
long build_date; u32 build_date;
long dsp_coff_date; u32 dsp_coff_date;
long loader_code_address; u32 loader_code_address;
long loader_code_size; u32 loader_code_size;
long loader_code_end; u32 loader_code_end;
long dsp_code_address; u32 dsp_code_address;
long dsp_code_size; u32 dsp_code_size;
long dsp_code_end; u32 dsp_code_end;
long reserved[8]; u32 reserved[8];
} __attribute__ ((packed)) DSP_FILE_HDR, *PDSP_FILE_HDR; } __attribute__ ((packed)) DSP_FILE_HDR, *PDSP_FILE_HDR;
typedef struct _DSP_FILE_HDR_5 { typedef struct _DSP_FILE_HDR_5 {
long version_id; // Version ID of this image format. u32 version_id; // Version ID of this image format.
long package_id; // Package ID of code release. u32 package_id; // Package ID of code release.
long build_date; // Date/time stamp when file was built. u32 build_date; // Date/time stamp when file was built.
long commands_offset; // Offset to attached commands in Pseudo Hdr format. u32 commands_offset; // Offset to attached commands in Pseudo Hdr format.
long loader_offset; // Offset to bootloader code. u32 loader_offset; // Offset to bootloader code.
long loader_code_address; // Start address of bootloader. u32 loader_code_address; // Start address of bootloader.
long loader_code_end; // Where bootloader code ends. u32 loader_code_end; // Where bootloader code ends.
long loader_code_size; u32 loader_code_size;
long version_data_offset; // Offset were scrambled version data begins. u32 version_data_offset; // Offset were scrambled version data begins.
long version_data_size; // Size, in words, of scrambled version data. u32 version_data_size; // Size, in words, of scrambled version data.
long nDspImages; // Number of DSP images in file. u32 nDspImages; // Number of DSP images in file.
} __attribute__ ((packed)) DSP_FILE_HDR_5, *PDSP_FILE_HDR_5; } __attribute__ ((packed)) DSP_FILE_HDR_5, *PDSP_FILE_HDR_5;
typedef struct _DSP_IMAGE_INFO { typedef struct _DSP_IMAGE_INFO {
long coff_date; // Date/time when DSP Coff image was built. u32 coff_date; // Date/time when DSP Coff image was built.
long begin_offset; // Offset in file where image begins. u32 begin_offset; // Offset in file where image begins.
long end_offset; // Offset in file where image begins. u32 end_offset; // Offset in file where image begins.
long run_address; // On chip Start address of DSP code. u32 run_address; // On chip Start address of DSP code.
long image_size; // Size of image. u32 image_size; // Size of image.
long version; // Embedded version # of DSP code. u32 version; // Embedded version # of DSP code.
} __attribute__ ((packed)) DSP_IMAGE_INFO, *PDSP_IMAGE_INFO; } __attribute__ ((packed)) DSP_IMAGE_INFO, *PDSP_IMAGE_INFO;
typedef struct _DSP_IMAGE_INFO_V6 { typedef struct _DSP_IMAGE_INFO_V6 {
long coff_date; // Date/time when DSP Coff image was built. u32 coff_date; // Date/time when DSP Coff image was built.
long begin_offset; // Offset in file where image begins. u32 begin_offset; // Offset in file where image begins.
long end_offset; // Offset in file where image begins. u32 end_offset; // Offset in file where image begins.
long run_address; // On chip Start address of DSP code. u32 run_address; // On chip Start address of DSP code.
long image_size; // Size of image. u32 image_size; // Size of image.
long version; // Embedded version # of DSP code. u32 version; // Embedded version # of DSP code.
unsigned short checksum; // Dsp File checksum unsigned short checksum; // Dsp File checksum
unsigned short pad1; unsigned short pad1;
} __attribute__ ((packed)) DSP_IMAGE_INFO_V6, *PDSP_IMAGE_INFO_V6; } __attribute__ ((packed)) DSP_IMAGE_INFO_V6, *PDSP_IMAGE_INFO_V6;
...@@ -846,8 +846,8 @@ int card_download(struct net_device *dev, const u8 *pFileStart, UINT FileLength) ...@@ -846,8 +846,8 @@ int card_download(struct net_device *dev, const u8 *pFileStart, UINT FileLength)
break; break;
case STATE_DONE_DWNLD: case STATE_DONE_DWNLD:
if (((UINT) (pUcFile) - (UINT) pFileStart) >= if (((unsigned long) (pUcFile) - (unsigned long) pFileStart) >=
(UINT) FileLength) { (unsigned long) FileLength) {
uiState = STATE_DONE_FILE; uiState = STATE_DONE_FILE;
break; break;
} }
...@@ -901,11 +901,11 @@ int card_download(struct net_device *dev, const u8 *pFileStart, UINT FileLength) ...@@ -901,11 +901,11 @@ int card_download(struct net_device *dev, const u8 *pFileStart, UINT FileLength)
&info->prov_list); &info->prov_list);
// Move to next entry if available // Move to next entry if available
pUcFile = pUcFile =
(UCHAR *) ((UINT) pUcFile + (UCHAR *) ((unsigned long) pUcFile +
(UINT) ((usHdrLength + 1) & 0xFFFFFFFE) + sizeof(PSEUDO_HDR)); (unsigned long) ((usHdrLength + 1) & 0xFFFFFFFE) + sizeof(PSEUDO_HDR));
if ((UINT) (pUcFile) - if ((unsigned long) (pUcFile) -
(UINT) (pFileStart) >= (unsigned long) (pFileStart) >=
(UINT) FileLength) { (unsigned long) FileLength) {
uiState = uiState =
STATE_DONE_FILE; STATE_DONE_FILE;
} }
......
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