10e54f6090db9eed25a745e5abf45b3c12ce724d1Ali Bahar/****************************************************************************** 20e54f6090db9eed25a745e5abf45b3c12ce724d1Ali Bahar * 30e54f6090db9eed25a745e5abf45b3c12ce724d1Ali Bahar * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. 40e54f6090db9eed25a745e5abf45b3c12ce724d1Ali Bahar * 50e54f6090db9eed25a745e5abf45b3c12ce724d1Ali Bahar * This program is free software; you can redistribute it and/or modify it 60e54f6090db9eed25a745e5abf45b3c12ce724d1Ali Bahar * under the terms of version 2 of the GNU General Public License as 70e54f6090db9eed25a745e5abf45b3c12ce724d1Ali Bahar * published by the Free Software Foundation. 80e54f6090db9eed25a745e5abf45b3c12ce724d1Ali Bahar * 90e54f6090db9eed25a745e5abf45b3c12ce724d1Ali Bahar * This program is distributed in the hope that it will be useful, but WITHOUT 100e54f6090db9eed25a745e5abf45b3c12ce724d1Ali Bahar * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 110e54f6090db9eed25a745e5abf45b3c12ce724d1Ali Bahar * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 120e54f6090db9eed25a745e5abf45b3c12ce724d1Ali Bahar * more details. 130e54f6090db9eed25a745e5abf45b3c12ce724d1Ali Bahar * 140e54f6090db9eed25a745e5abf45b3c12ce724d1Ali Bahar * You should have received a copy of the GNU General Public License along with 150e54f6090db9eed25a745e5abf45b3c12ce724d1Ali Bahar * this program; if not, write to the Free Software Foundation, Inc., 160e54f6090db9eed25a745e5abf45b3c12ce724d1Ali Bahar * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA 170e54f6090db9eed25a745e5abf45b3c12ce724d1Ali Bahar * 18b4f6209d733b6570947507a18f76def6e16393cbAli Bahar * Modifications for inclusion into the Linux staging tree are 19b4f6209d733b6570947507a18f76def6e16393cbAli Bahar * Copyright(c) 2010 Larry Finger. All rights reserved. 20b4f6209d733b6570947507a18f76def6e16393cbAli Bahar * 21b4f6209d733b6570947507a18f76def6e16393cbAli Bahar * Contact information: 22b4f6209d733b6570947507a18f76def6e16393cbAli Bahar * WLAN FAE <wlanfae@realtek.com> 23b4f6209d733b6570947507a18f76def6e16393cbAli Bahar * Larry Finger <Larry.Finger@lwfinger.net> 240e54f6090db9eed25a745e5abf45b3c12ce724d1Ali Bahar * 250e54f6090db9eed25a745e5abf45b3c12ce724d1Ali Bahar ******************************************************************************/ 262865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#ifndef __RTL8712_HAL_H__ 272865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define __RTL8712_HAL_H__ 282865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 292865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerenum _HW_VERSION { 302865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger RTL8712_FPGA, 312865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger RTL8712_1stCUT, /*A Cut (RTL8712_ASIC)*/ 322865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger RTL8712_2ndCUT, /*B Cut*/ 332865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger RTL8712_3rdCUT, /*C Cut*/ 342865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger}; 352865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 362865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerenum _LOOPBACK_TYPE { 372865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger RTL8712_AIR_TRX = 0, 382865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger RTL8712_MAC_LBK, 392865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger RTL8712_BB_LBK, 402865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger RTL8712_MAC_FW_LBK = 4, 412865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger RTL8712_BB_FW_LBK = 8, 422865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger}; 432865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 442865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerenum RTL871X_HCI_TYPE { 452865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger RTL8712_SDIO, 462865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger RTL8712_USB, 472865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger}; 482865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 490593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellidenum RTL8712_RF_CONFIG { 502865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger RTL8712_RF_1T1R, 512865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger RTL8712_RF_1T2R, 522865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger RTL8712_RF_2T2R 532865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger}; 542865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 550593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellidenum _RTL8712_HCI_TYPE_ { 562865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger RTL8712_HCI_TYPE_PCIE = 0x01, 572865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger RTL8712_HCI_TYPE_AP_PCIE = 0x81, 582865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger RTL8712_HCI_TYPE_USB = 0x02, 592865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger RTL8712_HCI_TYPE_92USB = 0x02, 602865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger RTL8712_HCI_TYPE_AP_USB = 0x82, 612865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger RTL8712_HCI_TYPE_72USB = 0x12, 622865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger RTL8712_HCI_TYPE_SDIO = 0x04, 632865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger RTL8712_HCI_TYPE_72SDIO = 0x14 642865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger}; 652865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 662865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerstruct fw_priv { /*8-bytes alignment required*/ 672865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger /*--- long word 0 ----*/ 680593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char signature_0; /*0x12: CE product, 0x92: IT product*/ 690593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char signature_1; /*0x87: CE product, 0x81: IT product*/ 700593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char hci_sel; /*0x81: PCI-AP, 01:PCIe, 02: 92S-U, 0x82: USB-AP, 712865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * 0x12: 72S-U, 03:SDIO*/ 720593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char chip_version; /*the same value as register value*/ 730593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char customer_ID_0; /*customer ID low byte*/ 740593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char customer_ID_1; /*customer ID high byte*/ 750593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char rf_config; /*0x11: 1T1R, 0x12: 1T2R, 0x92: 1T2R turbo, 762865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * 0x22: 2T2R*/ 770593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char usb_ep_num; /* 4: 4EP, 6: 6EP, 11: 11EP*/ 782865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger /*--- long word 1 ----*/ 790593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char regulatory_class_0; /*regulatory class bit map 0*/ 800593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char regulatory_class_1; /*regulatory class bit map 1*/ 810593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char regulatory_class_2; /*regulatory class bit map 2*/ 820593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char regulatory_class_3; /*regulatory class bit map 3*/ 830593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char rfintfs; /* 0:SWSI, 1:HWSI, 2:HWPI*/ 840593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char def_nettype; 850593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char turboMode; 86be10ac2b961e348919ce09d2b88471116d865087Justin P. Mattock unsigned char lowPowerMode;/* 0: normal mode, 1: low power mode*/ 872865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger /*--- long word 2 ----*/ 880593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char lbk_mode; /*0x00: normal, 0x03: MACLBK, 0x01: PHYLBK*/ 890593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char mp_mode; /* 1: for MP use, 0: for normal driver */ 900593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char vcsType; /* 0:off 1:on 2:auto */ 910593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char vcsMode; /* 1:RTS/CTS 2:CTS to self */ 920593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char rsvd022; 930593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char rsvd023; 940593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char rsvd024; 950593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char rsvd025; 962865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger /*--- long word 3 ----*/ 970593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char qos_en; /*1: QoS enable*/ 980593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char bw_40MHz_en; /*1: 40MHz BW enable*/ 990593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char AMSDU2AMPDU_en; /*1: 4181 convert AMSDU to AMPDU, 1002865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * 0: disable*/ 1010593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char AMPDU_en; /*1: 11n AMPDU enable*/ 1020593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char rate_control_offload; /*1: FW offloads,0: driver handles*/ 1030593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char aggregation_offload; /*1: FW offloads,0: driver handles*/ 1040593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char rsvd030; 1050593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char rsvd031; 1062865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger /*--- long word 4 ----*/ 1070593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char beacon_offload; /* 1. FW offloads, 0: driver handles*/ 1080593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char MLME_offload; /* 2. FW offloads, 0: driver handles*/ 1090593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char hwpc_offload; /* 3. FW offloads, 0: driver handles*/ 1100593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char tcp_checksum_offload; /*4. FW offloads,0: driver handles*/ 1110593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char tcp_offload; /* 5. FW offloads, 0: driver handles*/ 1120593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char ps_control_offload; /* 6. FW offloads, 0: driver handles*/ 1130593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char WWLAN_offload; /* 7. FW offloads, 0: driver handles*/ 1140593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char rsvd040; 1152865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger /*--- long word 5 ----*/ 1160593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char tcp_tx_frame_len_L; /*tcp tx packet length low byte*/ 1170593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char tcp_tx_frame_len_H; /*tcp tx packet length high byte*/ 1180593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char tcp_rx_frame_len_L; /*tcp rx packet length low byte*/ 1190593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char tcp_rx_frame_len_H; /*tcp rx packet length high byte*/ 1200593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char rsvd050; 1210593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char rsvd051; 1220593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char rsvd052; 1230593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid unsigned char rsvd053; 1242865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger}; 1252865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 126be10ac2b961e348919ce09d2b88471116d865087Justin P. Mattockstruct fw_hdr {/*8-byte alignment required*/ 1272865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger unsigned short signature; 1282865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger unsigned short version; /*0x8000 ~ 0x8FFF for FPGA version, 1292865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger *0x0000 ~ 0x7FFF for ASIC version,*/ 1302865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger unsigned int dmem_size; /*define the size of boot loader*/ 1312865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger unsigned int img_IMEM_size; /*define the size of FW in IMEM*/ 1322865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger unsigned int img_SRAM_size; /*define the size of FW in SRAM*/ 1332865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger unsigned int fw_priv_sz; /*define the size of DMEM variable*/ 1342865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger unsigned short efuse_addr; 1352865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger unsigned short h2ccnd_resp_addr; 1362865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger unsigned int SVNRevision; 1372865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger unsigned int release_time; /*Mon:Day:Hr:Min*/ 1382865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct fw_priv fwpriv; 1392865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger}; 1402865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 141baaa7901984d7fb0e1c0ae18bf43d7d57fa73a13Michael Fiedlerstruct hal_priv { 1422865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger /*Endpoint handles*/ 1432865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct net_device *pipehdls_r8712[10]; 1442865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 (*hal_bus_init)(struct _adapter *adapter); 1452865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger}; 1462865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 1472865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingeruint rtl8712_hal_init(struct _adapter *padapter); 1488c213fa59199f9673d66970d6940fa093186642fLarry Fingerint rtl871x_load_fw(struct _adapter *padapter); 1492865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 1502865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#endif 151