+/*
+ * Copyright (c) 2013 Qualcomm Atheros, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted (subject to the limitations in the
+ * disclaimer below) provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the
+ * distribution.
+ *
+ * * Neither the name of Qualcomm Atheros nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
+ * GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
+ * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
#include "usb_defs.h"
#include "usb_type.h"
#include "usb_pre.h"
static void turn_off_merlin()
{
volatile uint32_t default_data[9];
- volatile uint32_t read_data = 0;
uint32_t i=0;
if(1)
*/
void zfTurnOffPower_patch(void)
{
- uint32_t i=0;
A_PRINTF("+++ goto suspend ......\n");
// setting the go suspend here, power down right away...
static void _fw_reset_dma_fifo()
{
- int i;
-
HAL_BYTE_REG_WRITE(0x100ae, (HAL_BYTE_REG_READ(0x100ae)|0x10));
HAL_BYTE_REG_WRITE(0x100ae, (HAL_BYTE_REG_READ(0x100af)|0x10));
A_PRINTF("_fw_reset_dma_fifo\n");
uint16_t ConfigDescriptorPatch[30];
- uint16_t UsbDeviceDescriptorPatch[18];
- #define VENDOR_ID_OFFSET 8
- #define PRODUCT_ID_OFFSET 10
+uint16_t UsbDeviceDescriptorPatch[9];
+#define BCD_DEVICE_OFFSET 6
+#define BCD_DEVICE_FW_SIGNATURE 0xffff
+#define VENDOR_ID_OFFSET 4
+#define PRODUCT_ID_OFFSET 5
#define EP3_TRANSFER_TYPE_OFFSET 17
#define EP3_INT_INTERVAL 19
BOOLEAN bGet_descriptor_patch(void)
{
- /* Patch for custom id from flash */
- if (bEepromExist == FALSE && mDEV_REQ_VALUE_HIGH() == 1)
+ if (mDEV_REQ_VALUE_HIGH() == 1)
{
uint8_t *p = (uint8_t *)u8UsbDeviceDescriptor;
uint32_t u32Tmp=0;
/* Copy Usb Device Descriptor */
- memcpy(UsbDeviceDescriptorPatch, p, sizeof(UsbDeviceDescriptorPatch));
-
- A_SFLASH_READ_4B(u32Tmp, FLASH_SIZE - EE_DATA_RESERVED_LEN + FLASH_USB_VENDOR_ID_OFFSET*2);
- UsbDeviceDescriptorPatch[VENDOR_ID_OFFSET] = mSWAP_BYTE(mLOW_WORD0(u32Tmp));
- UsbDeviceDescriptorPatch[PRODUCT_ID_OFFSET] = mSWAP_BYTE(mHIGH_WORD0(u32Tmp));
+ ath_hal_memcpy(UsbDeviceDescriptorPatch, p, sizeof(UsbDeviceDescriptorPatch));
+
+ UsbDeviceDescriptorPatch[BCD_DEVICE_OFFSET] =
+ BCD_DEVICE_FW_SIGNATURE;
+
+ /* Patch for custom id from flash */
+ if (bEepromExist == FALSE) {
+ A_SFLASH_READ_4B(u32Tmp, FLASH_SIZE -
+ EE_DATA_RESERVED_LEN + FLASH_USB_VENDOR_ID_OFFSET*2);
+ UsbDeviceDescriptorPatch[VENDOR_ID_OFFSET] =
+ mSWAP_BYTE(mLOW_WORD0(u32Tmp));
+ UsbDeviceDescriptorPatch[PRODUCT_ID_OFFSET] =
+ mSWAP_BYTE(mHIGH_WORD0(u32Tmp));
+ }
pu8DescriptorEX = UsbDeviceDescriptorPatch;
u16TxRxCounter = mTABLE_LEN(u8UsbDeviceDescriptor[0]);
uint8_t *p = (uint8_t *)u8ConfigDescriptorEX;
/* Copy ConfigDescriptor */
- memcpy(ConfigDescriptorPatch, p, sizeof(ConfigDescriptorPatch));
-
- p = (uint8_t *)ConfigDescriptorPatch;
+ ath_hal_memcpy(ConfigDescriptorPatch, p, sizeof(ConfigDescriptorPatch));
- /* Patch the transfer type of EP3 and EP4 */
- ConfigDescriptorPatch[EP3_TRANSFER_TYPE_OFFSET] = 0x0283;
- ConfigDescriptorPatch[EP3_INT_INTERVAL] = 0x0700;
- ConfigDescriptorPatch[EP4_TRANSFER_TYPE_OFFSET] = 0x4002;
- ConfigDescriptorPatch[EP4_INT_INTERVAL] = 0x00;
+ /* place holder for EPx patches */
switch (mDEV_REQ_VALUE_LOW())
{