1//------------------------------------------------------------------------------ 2// 3// Copyright (c) 2004-2010 Atheros Corporation. All rights reserved. 4// 5// 6// Permission to use, copy, modify, and/or distribute this software for any 7// purpose with or without fee is hereby granted, provided that the above 8// copyright notice and this permission notice appear in all copies. 9// 10// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17// 18// 19//------------------------------------------------------------------------------ 20// 21// This file is the include file for Atheros PS and patch parser. 22// It implements APIs to parse data buffer with patch and PS information and convert it to HCI commands. 23// 24 25#ifndef __AR3KPSPARSER_H 26#define __AR3KPSPARSER_H 27 28 29 30 31#include <linux/fs.h> 32#include <linux/slab.h> 33#include "athdefs.h" 34#ifdef HCI_TRANSPORT_SDIO 35#include "a_config.h" 36#include "a_types.h" 37#include "a_osapi.h" 38#define ATH_MODULE_NAME misc 39#include "a_debug.h" 40#include "common_drv.h" 41#include "hci_transport_api.h" 42#include "ar3kconfig.h" 43#else 44#ifndef A_PRINTF 45#define A_PRINTF(args...) printk(KERN_ALERT args) 46#endif /* A_PRINTF */ 47#include "debug_linux.h" 48 49/* Helper data type declaration */ 50 51#ifndef A_UINT32 52#define A_UCHAR unsigned char 53#define A_UINT32 unsigned long 54#define A_UINT16 unsigned short 55#define A_UINT8 unsigned char 56#define A_BOOL unsigned char 57#endif /* A_UINT32 */ 58 59#define ATH_DEBUG_ERR (1 << 0) 60#define ATH_DEBUG_WARN (1 << 1) 61#define ATH_DEBUG_INFO (1 << 2) 62 63 64 65#define FALSE 0 66#define TRUE 1 67 68#ifndef A_MALLOC 69#define A_MALLOC(size) kmalloc((size),GFP_KERNEL) 70#endif /* A_MALLOC */ 71 72 73#ifndef A_FREE 74#define A_FREE(addr) kfree((addr)) 75#endif /* A_MALLOC */ 76#endif /* HCI_TRANSPORT_UART */ 77 78/* String manipulation APIs */ 79#ifndef A_STRTOUL 80#define A_STRTOUL simple_strtoul 81#endif /* A_STRTOL */ 82 83#ifndef A_STRTOL 84#define A_STRTOL simple_strtol 85#endif /* A_STRTOL */ 86 87 88/* The maximum number of bytes possible in a patch entry */ 89#define MAX_PATCH_SIZE 20000 90 91/* Maximum HCI packets that will be formed from the Patch file */ 92#define MAX_NUM_PATCH_ENTRY (MAX_PATCH_SIZE/MAX_BYTE_LENGTH) + 1 93 94 95 96 97 98 99 100typedef struct PSCmdPacket 101{ 102 A_UCHAR *Hcipacket; 103 int packetLen; 104} PSCmdPacket; 105 106/* Parses a Patch information buffer and store it in global structure */ 107A_STATUS AthDoParsePatch(A_UCHAR *, A_UINT32); 108 109/* parses a PS information buffer and stores it in a global structure */ 110A_STATUS AthDoParsePS(A_UCHAR *, A_UINT32); 111 112/* 113 * Uses the output of Both AthDoParsePS and AthDoParsePatch APIs to form HCI command array with 114 * all the PS and patch commands. 115 * The list will have the below mentioned commands in order. 116 * CRC command packet 117 * Download patch command(s) 118 * Enable patch Command 119 * PS Reset Command 120 * PS Tag Command(s) 121 * 122 */ 123int AthCreateCommandList(PSCmdPacket **, A_UINT32 *); 124 125/* Cleanup the dynamically allicated HCI command list */ 126A_STATUS AthFreeCommandList(PSCmdPacket **HciPacketList, A_UINT32 numPackets); 127#endif /* __AR3KPSPARSER_H */ 128