/*
 * Copyright (c) 2013 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.
 */

#ifndef _APB_ATHR_WLAN_MAP_H_
#define _APB_ATHR_WLAN_MAP_H_

#define RTC_SOC_BASE_ADDRESS                     0x00004000
#define RTC_WMAC_BASE_ADDRESS                    0x00005000
#define MAC_COEX_BASE_ADDRESS                    0x00006000
#define BT_COEX_BASE_ADDRESS                     0x00007000
#define SOC_PCIE_BASE_ADDRESS                    0x00008000
#define SOC_CORE_BASE_ADDRESS                    0x00009000
#define WLAN_UART_BASE_ADDRESS                   0x0000c000
#define WLAN_SI_BASE_ADDRESS                     0x00010000
#define WLAN_GPIO_BASE_ADDRESS                   0x00014000
#define WLAN_ANALOG_INTF_BASE_ADDRESS            0x0001c000
#define WLAN_MAC_BASE_ADDRESS                    0x00020000
#define EFUSE_BASE_ADDRESS                       0x00030000
#define FPGA_REG_BASE_ADDRESS                    0x00039000
#define WLAN_UART2_BASE_ADDRESS                  0x00054c00
#define CE_WRAPPER_BASE_ADDRESS                  0x00057000
#define CE0_BASE_ADDRESS                         0x00057400
#define CE1_BASE_ADDRESS                         0x00057800
#define CE2_BASE_ADDRESS                         0x00057c00
#define CE3_BASE_ADDRESS                         0x00058000
#define CE4_BASE_ADDRESS                         0x00058400
#define CE5_BASE_ADDRESS                         0x00058800
#define CE6_BASE_ADDRESS                         0x00058c00
#define CE7_BASE_ADDRESS                         0x00059000
#define DBI_BASE_ADDRESS                         0x00060000
#define WLAN_MBOX_BASE_ADDRESS                   0x00068000
#define WLAN_DBG_UART_BASE_ADDRESS               0x00069000
#define USB_DMA_BASE_ADDRESS                     0x0006a000

#endif /* _APB_ATHR_WLAN_MAP_REG_H_ */
