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