1364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/******************************************************************************
2364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger *
3364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
4364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger *
5364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * This program is free software; you can redistribute it and/or modify it
6364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * under the terms of version 2 of the GNU General Public License as
7364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * published by the Free Software Foundation.
8364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger *
9364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * This program is distributed in the hope that it will be useful, but WITHOUT
10364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * more details.
13364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger *
14364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger *
15364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger ******************************************************************************/
16364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#ifndef __HALPWRSEQCMD_H__
17364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define __HALPWRSEQCMD_H__
18364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
19364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#include <drv_types.h>
20364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
21364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*---------------------------------------------*/
22364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*---------------------------------------------*/
23364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define PWR_CMD_READ			0x00
24364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger     /*  offset: the read register offset */
25364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger     /*  msk: the mask of the read value */
26364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger     /*  value: N/A, left by 0 */
27364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger     /*  note: dirver shall implement this function by read & msk */
28364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
29364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define PWR_CMD_WRITE			0x01
30364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger     /*  offset: the read register offset */
31364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger     /*  msk: the mask of the write bits */
32364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger     /*  value: write value */
33364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger     /*  note: driver shall implement this cmd by read & msk after write */
34364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
35364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define PWR_CMD_POLLING			0x02
36364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger     /*  offset: the read register offset */
37364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger     /*  msk: the mask of the polled value */
38364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger     /*  value: the value to be polled, masked by the msd field. */
39364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger     /*  note: driver shall implement this cmd by */
40364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger     /*  do{ */
41364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger     /*  if( (Read(offset) & msk) == (value & msk) ) */
42364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger     /*  break; */
43364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger     /*  } while(not timeout); */
44364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
45364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define PWR_CMD_DELAY			0x03
46364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger     /*  offset: the value to delay */
47364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger     /*  msk: N/A */
48364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger     /*  value: the unit of delay, 0: us, 1: ms */
49364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
50364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define PWR_CMD_END				0x04
51364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger     /*  offset: N/A */
52364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger     /*  msk: N/A */
53364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger     /*  value: N/A */
54364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
55364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*---------------------------------------------*/
56364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/* 3 The value of base: 4 bits */
57364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*---------------------------------------------*/
58364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger   /*  define the base address of each block */
59364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define PWR_BASEADDR_MAC		0x00
60364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define PWR_BASEADDR_USB		0x01
61364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define PWR_BASEADDR_PCIE		0x02
62364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define PWR_BASEADDR_SDIO		0x03
63364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
64364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*---------------------------------------------*/
65364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/* 3 The value of interface_msk: 4 bits */
66364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*---------------------------------------------*/
67364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	PWR_INTF_SDIO_MSK		BIT(0)
68364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	PWR_INTF_USB_MSK		BIT(1)
69364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	PWR_INTF_PCI_MSK		BIT(2)
70364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	PWR_INTF_ALL_MSK		(BIT(0)|BIT(1)|BIT(2)|BIT(3))
71364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
72364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*---------------------------------------------*/
73364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/* 3 The value of fab_msk: 4 bits */
74364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*---------------------------------------------*/
75364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	PWR_FAB_TSMC_MSK		BIT(0)
76364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	PWR_FAB_UMC_MSK			BIT(1)
77364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	PWR_FAB_ALL_MSK			(BIT(0)|BIT(1)|BIT(2)|BIT(3))
78364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
79364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*---------------------------------------------*/
80364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/* 3 The value of cut_msk: 8 bits */
81364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*---------------------------------------------*/
82364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	PWR_CUT_TESTCHIP_MSK	BIT(0)
83364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	PWR_CUT_A_MSK			BIT(1)
84364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	PWR_CUT_B_MSK			BIT(2)
85364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	PWR_CUT_C_MSK			BIT(3)
86364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	PWR_CUT_D_MSK			BIT(4)
87364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	PWR_CUT_E_MSK			BIT(5)
88364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	PWR_CUT_F_MSK			BIT(6)
89364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	PWR_CUT_G_MSK			BIT(7)
90364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	PWR_CUT_ALL_MSK			0xFF
91364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
92364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
93364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerenum pwrseq_delay_unit {
94364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	PWRSEQ_DELAY_US,
95364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	PWRSEQ_DELAY_MS,
96364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger};
97364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
98364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstruct wlan_pwr_cfg {
99364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u16 offset;
100364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8 cut_msk;
101364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8 fab_msk:4;
102364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8 interface_msk:4;
103364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8 base:4;
104364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8 cmd:4;
105364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8 msk;
106364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8 value;
107364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger};
108364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
109364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
110364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define GET_PWR_CFG_OFFSET(__PWR_CMD)		__PWR_CMD.offset
111364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define GET_PWR_CFG_CUT_MASK(__PWR_CMD)		__PWR_CMD.cut_msk
112364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define GET_PWR_CFG_FAB_MASK(__PWR_CMD)		__PWR_CMD.fab_msk
113364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define GET_PWR_CFG_INTF_MASK(__PWR_CMD)	__PWR_CMD.interface_msk
114364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define GET_PWR_CFG_BASE(__PWR_CMD)			__PWR_CMD.base
115364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define GET_PWR_CFG_CMD(__PWR_CMD)			__PWR_CMD.cmd
116364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define GET_PWR_CFG_MASK(__PWR_CMD)			__PWR_CMD.msk
117364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define GET_PWR_CFG_VALUE(__PWR_CMD)		__PWR_CMD.value
118364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
119364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
120364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*  */
121364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*	Prototype of protected function. */
122364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*  */
123364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingeru8 HalPwrSeqCmdParsing23a(
124364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	struct rtw_adapter		*padapter,
125364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8				CutVersion,
126364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8				FabVersion,
127364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8				InterfaceType,
128364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	struct wlan_pwr_cfg	PwrCfgCmd[]);
129364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
130364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#endif
131