| /* |
| * Copyright (c) 2014 The Linux Foundation. All rights reserved. |
| * |
| * Previously licensed under the ISC license by Qualcomm Atheros, Inc. |
| * |
| * |
| * Permission to use, copy, modify, and/or distribute this software for |
| * any purpose with or without fee is hereby granted, provided that the |
| * above copyright notice and this permission notice appear in all |
| * copies. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL |
| * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED |
| * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE |
| * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL |
| * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR |
| * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER |
| * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR |
| * PERFORMANCE OF THIS SOFTWARE. |
| */ |
| |
| /* |
| * This file was originally distributed by Qualcomm Atheros, Inc. |
| * under proprietary terms before Copyright ownership was assigned |
| * to the Linux Foundation. |
| */ |
| |
| //================================================================== |
| // |
| // File: polFile.h |
| // |
| // Description: Structures that define the firmware file format. |
| // |
| // Author: Larry Cawley |
| // |
| //// |
| // Change History: |
| // 04/09/2002 - LAC - Initial version. |
| // |
| //=================================================================== |
| #if !defined( __polFile_h__ ) |
| #define __polFile_h__ |
| |
| |
| |
| |
| // File format |
| // |
| // byte 0 1 2 3 |
| // |
| // +---------+---------+--------+-------+ <----+ |
| // | Major | Minor | | | | |
| // | Version | Version | Suffix | Build | FileVersion | |
| // +---------+---------+--------+-------+ | |
| // | Major | Minor | | | | |
| // | Version | Version | Suffix | Build | HwCapabilities | tPolFileHeader |
| // +---------+---------+--------+-------+ | |
| // | | | |
| // | FileLength | FileLength | |
| // +------------------------------------+ | |
| // | | | |
| // | Number of Directory Entries | NumDirectoryEntries | |
| // +------------------------------------+ <----+ |
| // | | | |
| // | Directory Entry 1 Type | DirEntryType | |
| // +------------------------------------+ | |
| // | | | tPolFileDirEntry 1 |
| // | Directory Entry 1 File Offset | DirEntryFileOffset | |
| // +------------------------------------+ | |
| // | | | |
| // | Directory Entry 1 Length | DirEntryLength | |
| // +------------------------------------+ <----+ |
| // | . . . | . . . |
| // +------------------------------------+ <----+ |
| // | | | |
| // | Directory Entry n Type | | |
| // +------------------------------------+ | |
| // | | | tpolFileDirEntry n |
| // | Directory Entry n File Offset | | |
| // +------------------------------------+ | |
| // | | | |
| // | Directory Entry n Length | | |
| // +------------------------------------+ <----+ |
| // | | |
| // | | |
| // | File data described by | |
| // | directory entry 1 | |
| // | | |
| // | | |
| // +------------------------------------+ |
| // | . . . | |
| // +------------------------------------+ |
| // | | |
| // | | |
| // | File data described by | |
| // | directory entry n | |
| // | | |
| // | | |
| // +---------+---------+----------------+ |
| // | | |
| // | File Checksum | |
| // +---------+---------+ |
| // |
| // |
| // |
| // |
| |
| |
| #pragma pack( push ) |
| #pragma pack( 1 ) |
| |
| typedef struct sPolFileVersion { |
| |
| unsigned char MajorVersion; |
| unsigned char MinorVersion; |
| unsigned char Suffix; |
| unsigned char Build; |
| |
| } tPolFileVersion; |
| |
| |
| typedef struct sPolFileHeader { |
| |
| tPolFileVersion FileVersion; |
| tPolFileVersion HWCapabilities; |
| unsigned int FileLength; |
| unsigned int NumDirectoryEntries; |
| |
| } tPolFileHeader; |
| |
| |
| typedef enum ePolFileDirTypes { |
| |
| ePOL_DIR_TYPE_BOOTLOADER = 0, |
| ePOL_DIR_TYPE_STA_FIRMWARE, |
| ePOL_DIR_TYPE_AP_FIRMWARE, |
| ePOL_DIR_TYPE_DIAG_FIRMWARE, |
| ePOL_DIR_TYPE_STA_CONFIG, |
| ePOL_DIR_TYPE_AP_CONFIG |
| |
| } tPolFileDirTypes; |
| |
| |
| typedef struct sPolFileDirEntry { |
| |
| unsigned int DirEntryType; |
| unsigned int DirEntryFileOffset; |
| unsigned int DirEntryLength; |
| |
| } tPolFileDirEntry; |
| |
| |
| #pragma pack( pop ) |
| |
| |
| __inline unsigned short polFileChkSum( unsigned short *FileData, unsigned long NumWords ) |
| { |
| unsigned long Sum; |
| |
| for ( Sum = 0; NumWords > 0; NumWords-- ) { |
| |
| Sum += *FileData++; |
| } |
| |
| Sum = (Sum >> 16) + (Sum & 0xffff); // add carry |
| Sum += (Sum >> 16); // maybe last unsigned short |
| |
| return( (unsigned short)( ~Sum ) ); |
| } |
| |
| |
| |
| #endif |