/****************************************************************************** * * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA * * Modifications for inclusion into the Linux staging tree are * Copyright(c) 2010 Larry Finger. All rights reserved. * * Contact information: * WLAN FAE <wlanfae@realtek.com> * Larry Finger <Larry.Finger@lwfinger.net> * ******************************************************************************/ #ifndef __RTL8712_HAL_H__ #define __RTL8712_HAL_H__ enum _HW_VERSION { RTL8712_FPGA, RTL8712_1stCUT, /*A Cut (RTL8712_ASIC)*/ RTL8712_2ndCUT, /*B Cut*/ RTL8712_3rdCUT, /*C Cut*/ }; enum _LOOPBACK_TYPE { RTL8712_AIR_TRX = 0, RTL8712_MAC_LBK, RTL8712_BB_LBK, RTL8712_MAC_FW_LBK = 4, RTL8712_BB_FW_LBK = 8, }; enum RTL871X_HCI_TYPE { RTL8712_SDIO, RTL8712_USB, }; enum RTL8712_RF_CONFIG { RTL8712_RF_1T1R, RTL8712_RF_1T2R, RTL8712_RF_2T2R }; enum _RTL8712_HCI_TYPE_ { RTL8712_HCI_TYPE_PCIE = 0x01, RTL8712_HCI_TYPE_AP_PCIE = 0x81, RTL8712_HCI_TYPE_USB = 0x02, RTL8712_HCI_TYPE_92USB = 0x02, RTL8712_HCI_TYPE_AP_USB = 0x82, RTL8712_HCI_TYPE_72USB = 0x12, RTL8712_HCI_TYPE_SDIO = 0x04, RTL8712_HCI_TYPE_72SDIO = 0x14 }; struct fw_priv { /*8-bytes alignment required*/ /*--- long word 0 ----*/ unsigned char signature_0; /*0x12: CE product, 0x92: IT product*/ unsigned char signature_1; /*0x87: CE product, 0x81: IT product*/ unsigned char hci_sel; /*0x81: PCI-AP, 01:PCIe, 02: 92S-U, 0x82: USB-AP, * 0x12: 72S-U, 03:SDIO*/ unsigned char chip_version; /*the same value as register value*/ unsigned char customer_ID_0; /*customer ID low byte*/ unsigned char customer_ID_1; /*customer ID high byte*/ unsigned char rf_config; /*0x11: 1T1R, 0x12: 1T2R, 0x92: 1T2R turbo, * 0x22: 2T2R*/ unsigned char usb_ep_num; /* 4: 4EP, 6: 6EP, 11: 11EP*/ /*--- long word 1 ----*/ unsigned char regulatory_class_0; /*regulatory class bit map 0*/ unsigned char regulatory_class_1; /*regulatory class bit map 1*/ unsigned char regulatory_class_2; /*regulatory class bit map 2*/ unsigned char regulatory_class_3; /*regulatory class bit map 3*/ unsigned char rfintfs; /* 0:SWSI, 1:HWSI, 2:HWPI*/ unsigned char def_nettype; unsigned char turboMode; unsigned char lowPowerMode;/* 0: normal mode, 1: low power mode*/ /*--- long word 2 ----*/ unsigned char lbk_mode; /*0x00: normal, 0x03: MACLBK, 0x01: PHYLBK*/ unsigned char mp_mode; /* 1: for MP use, 0: for normal driver */ unsigned char vcsType; /* 0:off 1:on 2:auto */ unsigned char vcsMode; /* 1:RTS/CTS 2:CTS to self */ unsigned char rsvd022; unsigned char rsvd023; unsigned char rsvd024; unsigned char rsvd025; /*--- long word 3 ----*/ unsigned char qos_en; /*1: QoS enable*/ unsigned char bw_40MHz_en; /*1: 40MHz BW enable*/ unsigned char AMSDU2AMPDU_en; /*1: 4181 convert AMSDU to AMPDU, * 0: disable*/ unsigned char AMPDU_en; /*1: 11n AMPDU enable*/ unsigned char rate_control_offload; /*1: FW offloads,0: driver handles*/ unsigned char aggregation_offload; /*1: FW offloads,0: driver handles*/ unsigned char rsvd030; unsigned char rsvd031; /*--- long word 4 ----*/ unsigned char beacon_offload; /* 1. FW offloads, 0: driver handles*/ unsigned char MLME_offload; /* 2. FW offloads, 0: driver handles*/ unsigned char hwpc_offload; /* 3. FW offloads, 0: driver handles*/ unsigned char tcp_checksum_offload; /*4. FW offloads,0: driver handles*/ unsigned char tcp_offload; /* 5. FW offloads, 0: driver handles*/ unsigned char ps_control_offload; /* 6. FW offloads, 0: driver handles*/ unsigned char WWLAN_offload; /* 7. FW offloads, 0: driver handles*/ unsigned char rsvd040; /*--- long word 5 ----*/ unsigned char tcp_tx_frame_len_L; /*tcp tx packet length low byte*/ unsigned char tcp_tx_frame_len_H; /*tcp tx packet length high byte*/ unsigned char tcp_rx_frame_len_L; /*tcp rx packet length low byte*/ unsigned char tcp_rx_frame_len_H; /*tcp rx packet length high byte*/ unsigned char rsvd050; unsigned char rsvd051; unsigned char rsvd052; unsigned char rsvd053; }; struct fw_hdr {/*8-byte alignment required*/ unsigned short signature; unsigned short version; /*0x8000 ~ 0x8FFF for FPGA version, *0x0000 ~ 0x7FFF for ASIC version,*/ unsigned int dmem_size; /*define the size of boot loader*/ unsigned int img_IMEM_size; /*define the size of FW in IMEM*/ unsigned int img_SRAM_size; /*define the size of FW in SRAM*/ unsigned int fw_priv_sz; /*define the size of DMEM variable*/ unsigned short efuse_addr; unsigned short h2ccnd_resp_addr; unsigned int SVNRevision; unsigned int release_time; /*Mon:Day:Hr:Min*/ struct fw_priv fwpriv; }; struct hal_priv { /*Endpoint handles*/ struct net_device *pipehdls_r8712[10]; u8 (*hal_bus_init)(struct _adapter *adapter); }; uint rtl8712_hal_init(struct _adapter *padapter); int rtl871x_load_fw(struct _adapter *padapter); #endif