Commit 2a734e17 authored by Shreeya Patel's avatar Shreeya Patel Committed by Greg Kroah-Hartman

Staging: rtl8723bs: Change names to conform to the kernel code

Change names of some variables and functions to conform
to the kernel coding style. The changes include some removal
of CamelCase warnings and renaming the variable and field names
that encode their type (eg the pointers seem to start with p).
Signed-off-by: default avatarShreeya Patel <shreeya.patel23498@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 1f43fb6d
...@@ -28,35 +28,35 @@ ...@@ -28,35 +28,35 @@
/* Creadted by Roger, 2011.01.31. */ /* Creadted by Roger, 2011.01.31. */
/* */ /* */
static void HalSdioGetCmdAddr8723BSdio( static void HalSdioGetCmdAddr8723BSdio(
struct adapter *padapter, struct adapter *adapter,
u8 DeviceID, u8 device_id,
u32 Addr, u32 addr,
u32 *pCmdAddr u32 *cmdaddr
) )
{ {
switch (DeviceID) { switch (device_id) {
case SDIO_LOCAL_DEVICE_ID: case SDIO_LOCAL_DEVICE_ID:
*pCmdAddr = ((SDIO_LOCAL_DEVICE_ID << 13) | (Addr & SDIO_LOCAL_MSK)); *cmdaddr = ((SDIO_LOCAL_DEVICE_ID << 13) | (addr & SDIO_LOCAL_MSK));
break; break;
case WLAN_IOREG_DEVICE_ID: case WLAN_IOREG_DEVICE_ID:
*pCmdAddr = ((WLAN_IOREG_DEVICE_ID << 13) | (Addr & WLAN_IOREG_MSK)); *cmdaddr = ((WLAN_IOREG_DEVICE_ID << 13) | (addr & WLAN_IOREG_MSK));
break; break;
case WLAN_TX_HIQ_DEVICE_ID: case WLAN_TX_HIQ_DEVICE_ID:
*pCmdAddr = ((WLAN_TX_HIQ_DEVICE_ID << 13) | (Addr & WLAN_FIFO_MSK)); *cmdaddr = ((WLAN_TX_HIQ_DEVICE_ID << 13) | (addr & WLAN_FIFO_MSK));
break; break;
case WLAN_TX_MIQ_DEVICE_ID: case WLAN_TX_MIQ_DEVICE_ID:
*pCmdAddr = ((WLAN_TX_MIQ_DEVICE_ID << 13) | (Addr & WLAN_FIFO_MSK)); *cmdaddr = ((WLAN_TX_MIQ_DEVICE_ID << 13) | (addr & WLAN_FIFO_MSK));
break; break;
case WLAN_TX_LOQ_DEVICE_ID: case WLAN_TX_LOQ_DEVICE_ID:
*pCmdAddr = ((WLAN_TX_LOQ_DEVICE_ID << 13) | (Addr & WLAN_FIFO_MSK)); *cmdaddr = ((WLAN_TX_LOQ_DEVICE_ID << 13) | (addr & WLAN_FIFO_MSK));
break; break;
case WLAN_RX0FF_DEVICE_ID: case WLAN_RX0FF_DEVICE_ID:
*pCmdAddr = ((WLAN_RX0FF_DEVICE_ID << 13) | (Addr & WLAN_RX0FF_MSK)); *cmdaddr = ((WLAN_RX0FF_DEVICE_ID << 13) | (addr & WLAN_RX0FF_MSK));
break; break;
default: default:
...@@ -66,64 +66,64 @@ static void HalSdioGetCmdAddr8723BSdio( ...@@ -66,64 +66,64 @@ static void HalSdioGetCmdAddr8723BSdio(
static u8 get_deviceid(u32 addr) static u8 get_deviceid(u32 addr)
{ {
u8 devideId; u8 devide_id;
u16 pseudoId; u16 pseudo_id;
pseudoId = (u16)(addr >> 16); pseudo_id = (u16)(addr >> 16);
switch (pseudoId) { switch (pseudo_id) {
case 0x1025: case 0x1025:
devideId = SDIO_LOCAL_DEVICE_ID; devide_id = SDIO_LOCAL_DEVICE_ID;
break; break;
case 0x1026: case 0x1026:
devideId = WLAN_IOREG_DEVICE_ID; devide_id = WLAN_IOREG_DEVICE_ID;
break; break;
/* case 0x1027: */ /* case 0x1027: */
/* devideId = SDIO_FIRMWARE_FIFO; */ /* devide_id = SDIO_FIRMWARE_FIFO; */
/* break; */ /* break; */
case 0x1031: case 0x1031:
devideId = WLAN_TX_HIQ_DEVICE_ID; devide_id = WLAN_TX_HIQ_DEVICE_ID;
break; break;
case 0x1032: case 0x1032:
devideId = WLAN_TX_MIQ_DEVICE_ID; devide_id = WLAN_TX_MIQ_DEVICE_ID;
break; break;
case 0x1033: case 0x1033:
devideId = WLAN_TX_LOQ_DEVICE_ID; devide_id = WLAN_TX_LOQ_DEVICE_ID;
break; break;
case 0x1034: case 0x1034:
devideId = WLAN_RX0FF_DEVICE_ID; devide_id = WLAN_RX0FF_DEVICE_ID;
break; break;
default: default:
/* devideId = (u8)((addr >> 13) & 0xF); */ /* devide_id = (u8)((addr >> 13) & 0xF); */
devideId = WLAN_IOREG_DEVICE_ID; devide_id = WLAN_IOREG_DEVICE_ID;
break; break;
} }
return devideId; return devide_id;
} }
/* /*
* Ref: * Ref:
*HalSdioGetCmdAddr8723BSdio() *HalSdioGetCmdAddr8723BSdio()
*/ */
static u32 _cvrt2ftaddr(const u32 addr, u8 *pdeviceId, u16 *poffset) static u32 _cvrt2ftaddr(const u32 addr, u8 *pdevice_id, u16 *poffset)
{ {
u8 deviceId; u8 device_id;
u16 offset; u16 offset;
u32 ftaddr; u32 ftaddr;
deviceId = get_deviceid(addr); device_id = get_deviceid(addr);
offset = 0; offset = 0;
switch (deviceId) { switch (device_id) {
case SDIO_LOCAL_DEVICE_ID: case SDIO_LOCAL_DEVICE_ID:
offset = addr & SDIO_LOCAL_MSK; offset = addr & SDIO_LOCAL_MSK;
break; break;
...@@ -140,44 +140,44 @@ static u32 _cvrt2ftaddr(const u32 addr, u8 *pdeviceId, u16 *poffset) ...@@ -140,44 +140,44 @@ static u32 _cvrt2ftaddr(const u32 addr, u8 *pdeviceId, u16 *poffset)
case WLAN_IOREG_DEVICE_ID: case WLAN_IOREG_DEVICE_ID:
default: default:
deviceId = WLAN_IOREG_DEVICE_ID; device_id = WLAN_IOREG_DEVICE_ID;
offset = addr & WLAN_IOREG_MSK; offset = addr & WLAN_IOREG_MSK;
break; break;
} }
ftaddr = (deviceId << 13) | offset; ftaddr = (device_id << 13) | offset;
if (pdeviceId) if (pdevice_id)
*pdeviceId = deviceId; *pdevice_id = device_id;
if (poffset) if (poffset)
*poffset = offset; *poffset = offset;
return ftaddr; return ftaddr;
} }
static u8 sdio_read8(struct intf_hdl *pintfhdl, u32 addr) static u8 sdio_read8(struct intf_hdl *intfhdl, u32 addr)
{ {
u32 ftaddr; u32 ftaddr;
ftaddr = _cvrt2ftaddr(addr, NULL, NULL); ftaddr = _cvrt2ftaddr(addr, NULL, NULL);
return sd_read8(pintfhdl, ftaddr, NULL); return sd_read8(intfhdl, ftaddr, NULL);
} }
static u16 sdio_read16(struct intf_hdl *pintfhdl, u32 addr) static u16 sdio_read16(struct intf_hdl *intfhdl, u32 addr)
{ {
u32 ftaddr; u32 ftaddr;
__le16 le_tmp; __le16 le_tmp;
ftaddr = _cvrt2ftaddr(addr, NULL, NULL); ftaddr = _cvrt2ftaddr(addr, NULL, NULL);
sd_cmd52_read(pintfhdl, ftaddr, 2, (u8 *)&le_tmp); sd_cmd52_read(intfhdl, ftaddr, 2, (u8 *)&le_tmp);
return le16_to_cpu(le_tmp); return le16_to_cpu(le_tmp);
} }
static u32 sdio_read32(struct intf_hdl *pintfhdl, u32 addr) static u32 sdio_read32(struct intf_hdl *intfhdl, u32 addr)
{ {
struct adapter *padapter; struct adapter *adapter;
u8 bMacPwrCtrlOn; u8 mac_pwr_ctrl_on;
u8 deviceId; u8 device_id;
u16 offset; u16 offset;
u32 ftaddr; u32 ftaddr;
u8 shift; u8 shift;
...@@ -185,16 +185,16 @@ static u32 sdio_read32(struct intf_hdl *pintfhdl, u32 addr) ...@@ -185,16 +185,16 @@ static u32 sdio_read32(struct intf_hdl *pintfhdl, u32 addr)
s32 err; s32 err;
__le32 le_tmp; __le32 le_tmp;
padapter = pintfhdl->padapter; adapter = intfhdl->padapter;
ftaddr = _cvrt2ftaddr(addr, &deviceId, &offset); ftaddr = _cvrt2ftaddr(addr, &device_id, &offset);
rtw_hal_get_hwreg(padapter, HW_VAR_APFM_ON_MAC, &bMacPwrCtrlOn); rtw_hal_get_hwreg(adapter, HW_VAR_APFM_ON_MAC, &mac_pwr_ctrl_on);
if ( if (
((deviceId == WLAN_IOREG_DEVICE_ID) && (offset < 0x100)) || ((device_id == WLAN_IOREG_DEVICE_ID) && (offset < 0x100)) ||
(!bMacPwrCtrlOn) || (!mac_pwr_ctrl_on) ||
(adapter_to_pwrctl(padapter)->bFwCurrentInPSMode) (adapter_to_pwrctl(adapter)->bFwCurrentInPSMode)
) { ) {
err = sd_cmd52_read(pintfhdl, ftaddr, 4, (u8 *)&le_tmp); err = sd_cmd52_read(intfhdl, ftaddr, 4, (u8 *)&le_tmp);
#ifdef SDIO_DEBUG_IO #ifdef SDIO_DEBUG_IO
if (!err) { if (!err) {
#endif #endif
...@@ -210,184 +210,184 @@ static u32 sdio_read32(struct intf_hdl *pintfhdl, u32 addr) ...@@ -210,184 +210,184 @@ static u32 sdio_read32(struct intf_hdl *pintfhdl, u32 addr)
/* 4 bytes alignment */ /* 4 bytes alignment */
shift = ftaddr & 0x3; shift = ftaddr & 0x3;
if (shift == 0) { if (shift == 0) {
val = sd_read32(pintfhdl, ftaddr, NULL); val = sd_read32(intfhdl, ftaddr, NULL);
} else { } else {
u8 *ptmpbuf; u8 *tmpbuf;
ptmpbuf = rtw_malloc(8); tmpbuf = rtw_malloc(8);
if (NULL == ptmpbuf) { if (NULL == tmpbuf) {
DBG_8192C(KERN_ERR "%s: Allocate memory FAIL!(size =8) addr = 0x%x\n", __func__, addr); DBG_8192C(KERN_ERR "%s: Allocate memory FAIL!(size =8) addr = 0x%x\n", __func__, addr);
return SDIO_ERR_VAL32; return SDIO_ERR_VAL32;
} }
ftaddr &= ~(u16)0x3; ftaddr &= ~(u16)0x3;
sd_read(pintfhdl, ftaddr, 8, ptmpbuf); sd_read(intfhdl, ftaddr, 8, tmpbuf);
memcpy(&le_tmp, ptmpbuf+shift, 4); memcpy(&le_tmp, tmpbuf+shift, 4);
val = le32_to_cpu(le_tmp); val = le32_to_cpu(le_tmp);
kfree(ptmpbuf); kfree(tmpbuf);
} }
return val; return val;
} }
static s32 sdio_readN(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pbuf) static s32 sdio_readN(struct intf_hdl *intfhdl, u32 addr, u32 cnt, u8 *buf)
{ {
struct adapter *padapter; struct adapter *adapter;
u8 bMacPwrCtrlOn; u8 mac_pwr_ctrl_on;
u8 deviceId; u8 device_id;
u16 offset; u16 offset;
u32 ftaddr; u32 ftaddr;
u8 shift; u8 shift;
s32 err; s32 err;
padapter = pintfhdl->padapter; adapter = intfhdl->padapter;
err = 0; err = 0;
ftaddr = _cvrt2ftaddr(addr, &deviceId, &offset); ftaddr = _cvrt2ftaddr(addr, &device_id, &offset);
rtw_hal_get_hwreg(padapter, HW_VAR_APFM_ON_MAC, &bMacPwrCtrlOn); rtw_hal_get_hwreg(adapter, HW_VAR_APFM_ON_MAC, &mac_pwr_ctrl_on);
if ( if (
((deviceId == WLAN_IOREG_DEVICE_ID) && (offset < 0x100)) || ((device_id == WLAN_IOREG_DEVICE_ID) && (offset < 0x100)) ||
(!bMacPwrCtrlOn) || (!mac_pwr_ctrl_on) ||
(adapter_to_pwrctl(padapter)->bFwCurrentInPSMode) (adapter_to_pwrctl(adapter)->bFwCurrentInPSMode)
) )
return sd_cmd52_read(pintfhdl, ftaddr, cnt, pbuf); return sd_cmd52_read(intfhdl, ftaddr, cnt, buf);
/* 4 bytes alignment */ /* 4 bytes alignment */
shift = ftaddr & 0x3; shift = ftaddr & 0x3;
if (shift == 0) { if (shift == 0) {
err = sd_read(pintfhdl, ftaddr, cnt, pbuf); err = sd_read(intfhdl, ftaddr, cnt, buf);
} else { } else {
u8 *ptmpbuf; u8 *tmpbuf;
u32 n; u32 n;
ftaddr &= ~(u16)0x3; ftaddr &= ~(u16)0x3;
n = cnt + shift; n = cnt + shift;
ptmpbuf = rtw_malloc(n); tmpbuf = rtw_malloc(n);
if (NULL == ptmpbuf) if (NULL == tmpbuf)
return -1; return -1;
err = sd_read(pintfhdl, ftaddr, n, ptmpbuf); err = sd_read(intfhdl, ftaddr, n, tmpbuf);
if (!err) if (!err)
memcpy(pbuf, ptmpbuf+shift, cnt); memcpy(buf, tmpbuf+shift, cnt);
kfree(ptmpbuf); kfree(tmpbuf);
} }
return err; return err;
} }
static s32 sdio_write8(struct intf_hdl *pintfhdl, u32 addr, u8 val) static s32 sdio_write8(struct intf_hdl *intfhdl, u32 addr, u8 val)
{ {
u32 ftaddr; u32 ftaddr;
s32 err; s32 err;
ftaddr = _cvrt2ftaddr(addr, NULL, NULL); ftaddr = _cvrt2ftaddr(addr, NULL, NULL);
sd_write8(pintfhdl, ftaddr, val, &err); sd_write8(intfhdl, ftaddr, val, &err);
return err; return err;
} }
static s32 sdio_write16(struct intf_hdl *pintfhdl, u32 addr, u16 val) static s32 sdio_write16(struct intf_hdl *intfhdl, u32 addr, u16 val)
{ {
u32 ftaddr; u32 ftaddr;
__le16 le_tmp; __le16 le_tmp;
ftaddr = _cvrt2ftaddr(addr, NULL, NULL); ftaddr = _cvrt2ftaddr(addr, NULL, NULL);
le_tmp = cpu_to_le16(val); le_tmp = cpu_to_le16(val);
return sd_cmd52_write(pintfhdl, ftaddr, 2, (u8 *)&le_tmp); return sd_cmd52_write(intfhdl, ftaddr, 2, (u8 *)&le_tmp);
} }
static s32 sdio_write32(struct intf_hdl *pintfhdl, u32 addr, u32 val) static s32 sdio_write32(struct intf_hdl *intfhdl, u32 addr, u32 val)
{ {
struct adapter *padapter; struct adapter *adapter;
u8 bMacPwrCtrlOn; u8 mac_pwr_ctrl_on;
u8 deviceId; u8 device_id;
u16 offset; u16 offset;
u32 ftaddr; u32 ftaddr;
u8 shift; u8 shift;
s32 err; s32 err;
__le32 le_tmp; __le32 le_tmp;
padapter = pintfhdl->padapter; adapter = intfhdl->padapter;
err = 0; err = 0;
ftaddr = _cvrt2ftaddr(addr, &deviceId, &offset); ftaddr = _cvrt2ftaddr(addr, &device_id, &offset);
rtw_hal_get_hwreg(padapter, HW_VAR_APFM_ON_MAC, &bMacPwrCtrlOn); rtw_hal_get_hwreg(adapter, HW_VAR_APFM_ON_MAC, &mac_pwr_ctrl_on);
if ( if (
((deviceId == WLAN_IOREG_DEVICE_ID) && (offset < 0x100)) || ((device_id == WLAN_IOREG_DEVICE_ID) && (offset < 0x100)) ||
(!bMacPwrCtrlOn) || (!mac_pwr_ctrl_on) ||
(adapter_to_pwrctl(padapter)->bFwCurrentInPSMode) (adapter_to_pwrctl(adapter)->bFwCurrentInPSMode)
) { ) {
le_tmp = cpu_to_le32(val); le_tmp = cpu_to_le32(val);
return sd_cmd52_write(pintfhdl, ftaddr, 4, (u8 *)&le_tmp); return sd_cmd52_write(intfhdl, ftaddr, 4, (u8 *)&le_tmp);
} }
/* 4 bytes alignment */ /* 4 bytes alignment */
shift = ftaddr & 0x3; shift = ftaddr & 0x3;
if (shift == 0) { if (shift == 0) {
sd_write32(pintfhdl, ftaddr, val, &err); sd_write32(intfhdl, ftaddr, val, &err);
} else { } else {
le_tmp = cpu_to_le32(val); le_tmp = cpu_to_le32(val);
err = sd_cmd52_write(pintfhdl, ftaddr, 4, (u8 *)&le_tmp); err = sd_cmd52_write(intfhdl, ftaddr, 4, (u8 *)&le_tmp);
} }
return err; return err;
} }
static s32 sdio_writeN(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pbuf) static s32 sdio_writeN(struct intf_hdl *intfhdl, u32 addr, u32 cnt, u8 *buf)
{ {
struct adapter *padapter; struct adapter *adapter;
u8 bMacPwrCtrlOn; u8 mac_pwr_ctrl_on;
u8 deviceId; u8 device_id;
u16 offset; u16 offset;
u32 ftaddr; u32 ftaddr;
u8 shift; u8 shift;
s32 err; s32 err;
padapter = pintfhdl->padapter; adapter = intfhdl->padapter;
err = 0; err = 0;
ftaddr = _cvrt2ftaddr(addr, &deviceId, &offset); ftaddr = _cvrt2ftaddr(addr, &device_id, &offset);
rtw_hal_get_hwreg(padapter, HW_VAR_APFM_ON_MAC, &bMacPwrCtrlOn); rtw_hal_get_hwreg(adapter, HW_VAR_APFM_ON_MAC, &mac_pwr_ctrl_on);
if ( if (
((deviceId == WLAN_IOREG_DEVICE_ID) && (offset < 0x100)) || ((device_id == WLAN_IOREG_DEVICE_ID) && (offset < 0x100)) ||
(!bMacPwrCtrlOn) || (!mac_pwr_ctrl_on) ||
(adapter_to_pwrctl(padapter)->bFwCurrentInPSMode) (adapter_to_pwrctl(adapter)->bFwCurrentInPSMode)
) )
return sd_cmd52_write(pintfhdl, ftaddr, cnt, pbuf); return sd_cmd52_write(intfhdl, ftaddr, cnt, buf);
shift = ftaddr & 0x3; shift = ftaddr & 0x3;
if (shift == 0) { if (shift == 0) {
err = sd_write(pintfhdl, ftaddr, cnt, pbuf); err = sd_write(intfhdl, ftaddr, cnt, buf);
} else { } else {
u8 *ptmpbuf; u8 *tmpbuf;
u32 n; u32 n;
ftaddr &= ~(u16)0x3; ftaddr &= ~(u16)0x3;
n = cnt + shift; n = cnt + shift;
ptmpbuf = rtw_malloc(n); tmpbuf = rtw_malloc(n);
if (NULL == ptmpbuf) if (NULL == tmpbuf)
return -1; return -1;
err = sd_read(pintfhdl, ftaddr, 4, ptmpbuf); err = sd_read(intfhdl, ftaddr, 4, tmpbuf);
if (err) { if (err) {
kfree(ptmpbuf); kfree(tmpbuf);
return err; return err;
} }
memcpy(ptmpbuf+shift, pbuf, cnt); memcpy(tmpbuf+shift, buf, cnt);
err = sd_write(pintfhdl, ftaddr, n, ptmpbuf); err = sd_write(intfhdl, ftaddr, n, tmpbuf);
kfree(ptmpbuf); kfree(tmpbuf);
} }
return err; return err;
} }
static u8 sdio_f0_read8(struct intf_hdl *pintfhdl, u32 addr) static u8 sdio_f0_read8(struct intf_hdl *intfhdl, u32 addr)
{ {
return sd_f0_read8(pintfhdl, addr, NULL); return sd_f0_read8(intfhdl, addr, NULL);
} }
static void sdio_read_mem( static void sdio_read_mem(
struct intf_hdl *pintfhdl, struct intf_hdl *intfhdl,
u32 addr, u32 addr,
u32 cnt, u32 cnt,
u8 *rmem u8 *rmem
...@@ -395,18 +395,18 @@ static void sdio_read_mem( ...@@ -395,18 +395,18 @@ static void sdio_read_mem(
{ {
s32 err; s32 err;
err = sdio_readN(pintfhdl, addr, cnt, rmem); err = sdio_readN(intfhdl, addr, cnt, rmem);
/* TODO: Report error is err not zero */ /* TODO: Report error is err not zero */
} }
static void sdio_write_mem( static void sdio_write_mem(
struct intf_hdl *pintfhdl, struct intf_hdl *intfhdl,
u32 addr, u32 addr,
u32 cnt, u32 cnt,
u8 *wmem u8 *wmem
) )
{ {
sdio_writeN(pintfhdl, addr, cnt, wmem); sdio_writeN(intfhdl, addr, cnt, wmem);
} }
/* /*
...@@ -416,7 +416,7 @@ static void sdio_write_mem( ...@@ -416,7 +416,7 @@ static void sdio_write_mem(
*and make sure data transfer will be done in one command. *and make sure data transfer will be done in one command.
* *
* Parameters: * Parameters:
*pintfhdl a pointer of intf_hdl *intfhdl a pointer of intf_hdl
*addr port ID *addr port ID
*cnt size to read *cnt size to read
*rmem address to put data *rmem address to put data
...@@ -426,15 +426,15 @@ static void sdio_write_mem( ...@@ -426,15 +426,15 @@ static void sdio_write_mem(
*_FAIL(0) Fail *_FAIL(0) Fail
*/ */
static u32 sdio_read_port( static u32 sdio_read_port(
struct intf_hdl *pintfhdl, struct intf_hdl *intfhdl,
u32 addr, u32 addr,
u32 cnt, u32 cnt,
u8 *mem u8 *mem
) )
{ {
struct adapter *padapter; struct adapter *adapter;
PSDIO_DATA psdio; PSDIO_DATA psdio;
struct hal_com_data *phal; struct hal_com_data *hal;
u32 oldcnt; u32 oldcnt;
#ifdef SDIO_DYNAMIC_ALLOC_MEM #ifdef SDIO_DYNAMIC_ALLOC_MEM
u8 *oldmem; u8 *oldmem;
...@@ -442,11 +442,11 @@ static u32 sdio_read_port( ...@@ -442,11 +442,11 @@ static u32 sdio_read_port(
s32 err; s32 err;
padapter = pintfhdl->padapter; adapter = intfhdl->padapter;
psdio = &adapter_to_dvobj(padapter)->intf_data; psdio = &adapter_to_dvobj(adapter)->intf_data;
phal = GET_HAL_DATA(padapter); hal = GET_HAL_DATA(adapter);
HalSdioGetCmdAddr8723BSdio(padapter, addr, phal->SdioRxFIFOCnt++, &addr); HalSdioGetCmdAddr8723BSdio(adapter, addr, hal->SdioRxFIFOCnt++, &addr);
oldcnt = cnt; oldcnt = cnt;
if (cnt > psdio->block_transfer_len) if (cnt > psdio->block_transfer_len)
...@@ -468,7 +468,7 @@ static u32 sdio_read_port( ...@@ -468,7 +468,7 @@ static u32 sdio_read_port(
#endif #endif
} }
err = _sd_read(pintfhdl, addr, cnt, mem); err = _sd_read(intfhdl, addr, cnt, mem);
#ifdef SDIO_DYNAMIC_ALLOC_MEM #ifdef SDIO_DYNAMIC_ALLOC_MEM
if ((oldcnt != cnt) && (oldmem)) { if ((oldcnt != cnt) && (oldmem)) {
...@@ -489,7 +489,7 @@ static u32 sdio_read_port( ...@@ -489,7 +489,7 @@ static u32 sdio_read_port(
*and make sure data could be written in one command. *and make sure data could be written in one command.
* *
* Parameters: * Parameters:
*pintfhdl a pointer of intf_hdl *intfhdl a pointer of intf_hdl
*addr port ID *addr port ID
*cnt size to write *cnt size to write
*wmem data pointer to write *wmem data pointer to write
...@@ -499,33 +499,33 @@ static u32 sdio_read_port( ...@@ -499,33 +499,33 @@ static u32 sdio_read_port(
*_FAIL(0) Fail *_FAIL(0) Fail
*/ */
static u32 sdio_write_port( static u32 sdio_write_port(
struct intf_hdl *pintfhdl, struct intf_hdl *intfhdl,
u32 addr, u32 addr,
u32 cnt, u32 cnt,
u8 *mem u8 *mem
) )
{ {
struct adapter *padapter; struct adapter *adapter;
PSDIO_DATA psdio; PSDIO_DATA psdio;
s32 err; s32 err;
struct xmit_buf *xmitbuf = (struct xmit_buf *)mem; struct xmit_buf *xmitbuf = (struct xmit_buf *)mem;
padapter = pintfhdl->padapter; adapter = intfhdl->padapter;
psdio = &adapter_to_dvobj(padapter)->intf_data; psdio = &adapter_to_dvobj(adapter)->intf_data;
if (!padapter->hw_init_completed) { if (!adapter->hw_init_completed) {
DBG_871X("%s [addr = 0x%x cnt =%d] padapter->hw_init_completed == false\n", __func__, addr, cnt); DBG_871X("%s [addr = 0x%x cnt =%d] adapter->hw_init_completed == false\n", __func__, addr, cnt);
return _FAIL; return _FAIL;
} }
cnt = _RND4(cnt); cnt = _RND4(cnt);
HalSdioGetCmdAddr8723BSdio(padapter, addr, cnt >> 2, &addr); HalSdioGetCmdAddr8723BSdio(adapter, addr, cnt >> 2, &addr);
if (cnt > psdio->block_transfer_len) if (cnt > psdio->block_transfer_len)
cnt = _RND(cnt, psdio->block_transfer_len); cnt = _RND(cnt, psdio->block_transfer_len);
/* cnt = sdio_align_size(cnt); */ /* cnt = sdio_align_size(cnt); */
err = sd_write(pintfhdl, addr, cnt, xmitbuf->pdata); err = sd_write(intfhdl, addr, cnt, xmitbuf->pdata);
rtw_sctx_done_err( rtw_sctx_done_err(
&xmitbuf->sctx, &xmitbuf->sctx,
...@@ -537,59 +537,59 @@ static u32 sdio_write_port( ...@@ -537,59 +537,59 @@ static u32 sdio_write_port(
return _SUCCESS; return _SUCCESS;
} }
void sdio_set_intf_ops(struct adapter *padapter, struct _io_ops *pops) void sdio_set_intf_ops(struct adapter *adapter, struct _io_ops *ops)
{ {
pops->_read8 = &sdio_read8; ops->_read8 = &sdio_read8;
pops->_read16 = &sdio_read16; ops->_read16 = &sdio_read16;
pops->_read32 = &sdio_read32; ops->_read32 = &sdio_read32;
pops->_read_mem = &sdio_read_mem; ops->_read_mem = &sdio_read_mem;
pops->_read_port = &sdio_read_port; ops->_read_port = &sdio_read_port;
pops->_write8 = &sdio_write8; ops->_write8 = &sdio_write8;
pops->_write16 = &sdio_write16; ops->_write16 = &sdio_write16;
pops->_write32 = &sdio_write32; ops->_write32 = &sdio_write32;
pops->_writeN = &sdio_writeN; ops->_writeN = &sdio_writeN;
pops->_write_mem = &sdio_write_mem; ops->_write_mem = &sdio_write_mem;
pops->_write_port = &sdio_write_port; ops->_write_port = &sdio_write_port;
pops->_sd_f0_read8 = sdio_f0_read8; ops->_sd_f0_read8 = sdio_f0_read8;
} }
/* /*
* Todo: align address to 4 bytes. * Todo: align address to 4 bytes.
*/ */
static s32 _sdio_local_read( static s32 _sdio_local_read(
struct adapter *padapter, struct adapter *adapter,
u32 addr, u32 addr,
u32 cnt, u32 cnt,
u8 *pbuf u8 *buf
) )
{ {
struct intf_hdl *pintfhdl; struct intf_hdl *intfhdl;
u8 bMacPwrCtrlOn; u8 mac_pwr_ctrl_on;
s32 err; s32 err;
u8 *ptmpbuf; u8 *tmpbuf;
u32 n; u32 n;
pintfhdl = &padapter->iopriv.intf; intfhdl = &adapter->iopriv.intf;
HalSdioGetCmdAddr8723BSdio(padapter, SDIO_LOCAL_DEVICE_ID, addr, &addr); HalSdioGetCmdAddr8723BSdio(adapter, SDIO_LOCAL_DEVICE_ID, addr, &addr);
rtw_hal_get_hwreg(padapter, HW_VAR_APFM_ON_MAC, &bMacPwrCtrlOn); rtw_hal_get_hwreg(adapter, HW_VAR_APFM_ON_MAC, &mac_pwr_ctrl_on);
if (!bMacPwrCtrlOn) if (!mac_pwr_ctrl_on)
return _sd_cmd52_read(pintfhdl, addr, cnt, pbuf); return _sd_cmd52_read(intfhdl, addr, cnt, buf);
n = RND4(cnt); n = RND4(cnt);
ptmpbuf = rtw_malloc(n); tmpbuf = rtw_malloc(n);
if (!ptmpbuf) if (!tmpbuf)
return (-1); return (-1);
err = _sd_read(pintfhdl, addr, n, ptmpbuf); err = _sd_read(intfhdl, addr, n, tmpbuf);
if (!err) if (!err)
memcpy(pbuf, ptmpbuf, cnt); memcpy(buf, tmpbuf, cnt);
kfree(ptmpbuf); kfree(tmpbuf);
return err; return err;
} }
...@@ -598,39 +598,39 @@ static s32 _sdio_local_read( ...@@ -598,39 +598,39 @@ static s32 _sdio_local_read(
* Todo: align address to 4 bytes. * Todo: align address to 4 bytes.
*/ */
s32 sdio_local_read( s32 sdio_local_read(
struct adapter *padapter, struct adapter *adapter,
u32 addr, u32 addr,
u32 cnt, u32 cnt,
u8 *pbuf u8 *buf
) )
{ {
struct intf_hdl *pintfhdl; struct intf_hdl *intfhdl;
u8 bMacPwrCtrlOn; u8 mac_pwr_ctrl_on;
s32 err; s32 err;
u8 *ptmpbuf; u8 *tmpbuf;
u32 n; u32 n;
pintfhdl = &padapter->iopriv.intf; intfhdl = &adapter->iopriv.intf;
HalSdioGetCmdAddr8723BSdio(padapter, SDIO_LOCAL_DEVICE_ID, addr, &addr); HalSdioGetCmdAddr8723BSdio(adapter, SDIO_LOCAL_DEVICE_ID, addr, &addr);
rtw_hal_get_hwreg(padapter, HW_VAR_APFM_ON_MAC, &bMacPwrCtrlOn); rtw_hal_get_hwreg(adapter, HW_VAR_APFM_ON_MAC, &mac_pwr_ctrl_on);
if ( if (
(!bMacPwrCtrlOn) || (!mac_pwr_ctrl_on) ||
(adapter_to_pwrctl(padapter)->bFwCurrentInPSMode) (adapter_to_pwrctl(adapter)->bFwCurrentInPSMode)
) )
return sd_cmd52_read(pintfhdl, addr, cnt, pbuf); return sd_cmd52_read(intfhdl, addr, cnt, buf);
n = RND4(cnt); n = RND4(cnt);
ptmpbuf = rtw_malloc(n); tmpbuf = rtw_malloc(n);
if (!ptmpbuf) if (!tmpbuf)
return (-1); return (-1);
err = sd_read(pintfhdl, addr, n, ptmpbuf); err = sd_read(intfhdl, addr, n, tmpbuf);
if (!err) if (!err)
memcpy(pbuf, ptmpbuf, cnt); memcpy(buf, tmpbuf, cnt);
kfree(ptmpbuf); kfree(tmpbuf);
return err; return err;
} }
...@@ -639,16 +639,16 @@ s32 sdio_local_read( ...@@ -639,16 +639,16 @@ s32 sdio_local_read(
* Todo: align address to 4 bytes. * Todo: align address to 4 bytes.
*/ */
s32 sdio_local_write( s32 sdio_local_write(
struct adapter *padapter, struct adapter *adapter,
u32 addr, u32 addr,
u32 cnt, u32 cnt,
u8 *pbuf u8 *buf
) )
{ {
struct intf_hdl *pintfhdl; struct intf_hdl *intfhdl;
u8 bMacPwrCtrlOn; u8 mac_pwr_ctrl_on;
s32 err; s32 err;
u8 *ptmpbuf; u8 *tmpbuf;
if (addr & 0x3) if (addr & 0x3)
DBG_8192C("%s, address must be 4 bytes alignment\n", __func__); DBG_8192C("%s, address must be 4 bytes alignment\n", __func__);
...@@ -656,90 +656,90 @@ s32 sdio_local_write( ...@@ -656,90 +656,90 @@ s32 sdio_local_write(
if (cnt & 0x3) if (cnt & 0x3)
DBG_8192C("%s, size must be the multiple of 4\n", __func__); DBG_8192C("%s, size must be the multiple of 4\n", __func__);
pintfhdl = &padapter->iopriv.intf; intfhdl = &adapter->iopriv.intf;
HalSdioGetCmdAddr8723BSdio(padapter, SDIO_LOCAL_DEVICE_ID, addr, &addr); HalSdioGetCmdAddr8723BSdio(adapter, SDIO_LOCAL_DEVICE_ID, addr, &addr);
rtw_hal_get_hwreg(padapter, HW_VAR_APFM_ON_MAC, &bMacPwrCtrlOn); rtw_hal_get_hwreg(adapter, HW_VAR_APFM_ON_MAC, &mac_pwr_ctrl_on);
if ( if (
(!bMacPwrCtrlOn) || (!mac_pwr_ctrl_on) ||
(adapter_to_pwrctl(padapter)->bFwCurrentInPSMode) (adapter_to_pwrctl(adapter)->bFwCurrentInPSMode)
) )
return sd_cmd52_write(pintfhdl, addr, cnt, pbuf); return sd_cmd52_write(intfhdl, addr, cnt, buf);
ptmpbuf = rtw_malloc(cnt); tmpbuf = rtw_malloc(cnt);
if (!ptmpbuf) if (!tmpbuf)
return (-1); return (-1);
memcpy(ptmpbuf, pbuf, cnt); memcpy(tmpbuf, buf, cnt);
err = sd_write(pintfhdl, addr, cnt, ptmpbuf); err = sd_write(intfhdl, addr, cnt, tmpbuf);
kfree(ptmpbuf); kfree(tmpbuf);
return err; return err;
} }
u8 SdioLocalCmd52Read1Byte(struct adapter *padapter, u32 addr) u8 SdioLocalCmd52Read1Byte(struct adapter *adapter, u32 addr)
{ {
u8 val = 0; u8 val = 0;
struct intf_hdl *pintfhdl = &padapter->iopriv.intf; struct intf_hdl *intfhdl = &adapter->iopriv.intf;
HalSdioGetCmdAddr8723BSdio(padapter, SDIO_LOCAL_DEVICE_ID, addr, &addr); HalSdioGetCmdAddr8723BSdio(adapter, SDIO_LOCAL_DEVICE_ID, addr, &addr);
sd_cmd52_read(pintfhdl, addr, 1, &val); sd_cmd52_read(intfhdl, addr, 1, &val);
return val; return val;
} }
static u16 SdioLocalCmd52Read2Byte(struct adapter *padapter, u32 addr) static u16 SdioLocalCmd52Read2Byte(struct adapter *adapter, u32 addr)
{ {
__le16 val = 0; __le16 val = 0;
struct intf_hdl *pintfhdl = &padapter->iopriv.intf; struct intf_hdl *intfhdl = &adapter->iopriv.intf;
HalSdioGetCmdAddr8723BSdio(padapter, SDIO_LOCAL_DEVICE_ID, addr, &addr); HalSdioGetCmdAddr8723BSdio(adapter, SDIO_LOCAL_DEVICE_ID, addr, &addr);
sd_cmd52_read(pintfhdl, addr, 2, (u8 *)&val); sd_cmd52_read(intfhdl, addr, 2, (u8 *)&val);
return le16_to_cpu(val); return le16_to_cpu(val);
} }
static u32 SdioLocalCmd53Read4Byte(struct adapter *padapter, u32 addr) static u32 SdioLocalCmd53Read4Byte(struct adapter *adapter, u32 addr)
{ {
u8 bMacPwrCtrlOn; u8 mac_pwr_ctrl_on;
u32 val = 0; u32 val = 0;
struct intf_hdl *pintfhdl = &padapter->iopriv.intf; struct intf_hdl *intfhdl = &adapter->iopriv.intf;
__le32 le_tmp; __le32 le_tmp;
HalSdioGetCmdAddr8723BSdio(padapter, SDIO_LOCAL_DEVICE_ID, addr, &addr); HalSdioGetCmdAddr8723BSdio(adapter, SDIO_LOCAL_DEVICE_ID, addr, &addr);
rtw_hal_get_hwreg(padapter, HW_VAR_APFM_ON_MAC, &bMacPwrCtrlOn); rtw_hal_get_hwreg(adapter, HW_VAR_APFM_ON_MAC, &mac_pwr_ctrl_on);
if (!bMacPwrCtrlOn || adapter_to_pwrctl(padapter)->bFwCurrentInPSMode) { if (!mac_pwr_ctrl_on || adapter_to_pwrctl(adapter)->bFwCurrentInPSMode) {
sd_cmd52_read(pintfhdl, addr, 4, (u8 *)&le_tmp); sd_cmd52_read(intfhdl, addr, 4, (u8 *)&le_tmp);
val = le32_to_cpu(le_tmp); val = le32_to_cpu(le_tmp);
} else { } else {
val = sd_read32(pintfhdl, addr, NULL); val = sd_read32(intfhdl, addr, NULL);
} }
return val; return val;
} }
void SdioLocalCmd52Write1Byte(struct adapter *padapter, u32 addr, u8 v) void SdioLocalCmd52Write1Byte(struct adapter *adapter, u32 addr, u8 v)
{ {
struct intf_hdl *pintfhdl = &padapter->iopriv.intf; struct intf_hdl *intfhdl = &adapter->iopriv.intf;
HalSdioGetCmdAddr8723BSdio(padapter, SDIO_LOCAL_DEVICE_ID, addr, &addr); HalSdioGetCmdAddr8723BSdio(adapter, SDIO_LOCAL_DEVICE_ID, addr, &addr);
sd_cmd52_write(pintfhdl, addr, 1, &v); sd_cmd52_write(intfhdl, addr, 1, &v);
} }
static void SdioLocalCmd52Write4Byte(struct adapter *padapter, u32 addr, u32 v) static void SdioLocalCmd52Write4Byte(struct adapter *adapter, u32 addr, u32 v)
{ {
struct intf_hdl *pintfhdl = &padapter->iopriv.intf; struct intf_hdl *intfhdl = &adapter->iopriv.intf;
__le32 le_tmp; __le32 le_tmp;
HalSdioGetCmdAddr8723BSdio(padapter, SDIO_LOCAL_DEVICE_ID, addr, &addr); HalSdioGetCmdAddr8723BSdio(adapter, SDIO_LOCAL_DEVICE_ID, addr, &addr);
le_tmp = cpu_to_le32(v); le_tmp = cpu_to_le32(v);
sd_cmd52_write(pintfhdl, addr, 4, (u8 *)&le_tmp); sd_cmd52_write(intfhdl, addr, 4, (u8 *)&le_tmp);
} }
static s32 ReadInterrupt8723BSdio(struct adapter *padapter, u32 *phisr) static s32 ReadInterrupt8723BSdio(struct adapter *adapter, u32 *phisr)
{ {
u32 hisr, himr; u32 hisr, himr;
u8 val8, hisr_len; u8 val8, hisr_len;
...@@ -748,7 +748,7 @@ static s32 ReadInterrupt8723BSdio(struct adapter *padapter, u32 *phisr) ...@@ -748,7 +748,7 @@ static s32 ReadInterrupt8723BSdio(struct adapter *padapter, u32 *phisr)
if (phisr == NULL) if (phisr == NULL)
return false; return false;
himr = GET_HAL_DATA(padapter)->sdio_himr; himr = GET_HAL_DATA(adapter)->sdio_himr;
/* decide how many bytes need to be read */ /* decide how many bytes need to be read */
hisr_len = 0; hisr_len = 0;
...@@ -760,7 +760,7 @@ static s32 ReadInterrupt8723BSdio(struct adapter *padapter, u32 *phisr) ...@@ -760,7 +760,7 @@ static s32 ReadInterrupt8723BSdio(struct adapter *padapter, u32 *phisr)
hisr = 0; hisr = 0;
while (hisr_len != 0) { while (hisr_len != 0) {
hisr_len--; hisr_len--;
val8 = SdioLocalCmd52Read1Byte(padapter, SDIO_REG_HISR+hisr_len); val8 = SdioLocalCmd52Read1Byte(adapter, SDIO_REG_HISR+hisr_len);
hisr |= (val8 << (8*hisr_len)); hisr |= (val8 << (8*hisr_len));
} }
...@@ -778,13 +778,13 @@ static s32 ReadInterrupt8723BSdio(struct adapter *padapter, u32 *phisr) ...@@ -778,13 +778,13 @@ static s32 ReadInterrupt8723BSdio(struct adapter *padapter, u32 *phisr)
/* */ /* */
/* Created by Roger, 2011.02.11. */ /* Created by Roger, 2011.02.11. */
/* */ /* */
void InitInterrupt8723BSdio(struct adapter *padapter) void InitInterrupt8723BSdio(struct adapter *adapter)
{ {
struct hal_com_data *pHalData; struct hal_com_data *haldata;
pHalData = GET_HAL_DATA(padapter); haldata = GET_HAL_DATA(adapter);
pHalData->sdio_himr = (u32)( \ haldata->sdio_himr = (u32)( \
SDIO_HIMR_RX_REQUEST_MSK | SDIO_HIMR_RX_REQUEST_MSK |
SDIO_HIMR_AVAL_MSK | SDIO_HIMR_AVAL_MSK |
/* SDIO_HIMR_TXERR_MSK | */ /* SDIO_HIMR_TXERR_MSK | */
...@@ -812,14 +812,14 @@ void InitInterrupt8723BSdio(struct adapter *padapter) ...@@ -812,14 +812,14 @@ void InitInterrupt8723BSdio(struct adapter *padapter)
/* */ /* */
/* Created by Roger, 2011.08.03. */ /* Created by Roger, 2011.08.03. */
/* */ /* */
void InitSysInterrupt8723BSdio(struct adapter *padapter) void InitSysInterrupt8723BSdio(struct adapter *adapter)
{ {
struct hal_com_data *pHalData; struct hal_com_data *haldata;
pHalData = GET_HAL_DATA(padapter); haldata = GET_HAL_DATA(adapter);
pHalData->SysIntrMask = ( \ haldata->SysIntrMask = ( \
/* HSIMR_GPIO12_0_INT_EN | */ /* HSIMR_GPIO12_0_INT_EN | */
/* HSIMR_SPS_OCP_INT_EN | */ /* HSIMR_SPS_OCP_INT_EN | */
/* HSIMR_RON_INT_EN | */ /* HSIMR_RON_INT_EN | */
...@@ -838,19 +838,19 @@ void InitSysInterrupt8723BSdio(struct adapter *padapter) ...@@ -838,19 +838,19 @@ void InitSysInterrupt8723BSdio(struct adapter *padapter)
/* */ /* */
/* Created by Roger, 2011.02.11. */ /* Created by Roger, 2011.02.11. */
/* */ /* */
void ClearInterrupt8723BSdio(struct adapter *padapter) void clearinterrupt8723bsdio(struct adapter *adapter)
{ {
struct hal_com_data *pHalData; struct hal_com_data *haldata;
u8 *clear; u8 *clear;
if (padapter->bSurpriseRemoved) if (adapter->bSurpriseRemoved)
return; return;
pHalData = GET_HAL_DATA(padapter); haldata = GET_HAL_DATA(adapter);
clear = rtw_zmalloc(4); clear = rtw_zmalloc(4);
/* Clear corresponding HISR Content if needed */ /* Clear corresponding HISR Content if needed */
*(__le32 *)clear = cpu_to_le32(pHalData->sdio_hisr & MASK_SDIO_HISR_CLEAR); *(__le32 *)clear = cpu_to_le32(haldata->sdio_hisr & MASK_SDIO_HISR_CLEAR);
if (*(__le32 *)clear) { if (*(__le32 *)clear) {
/* Perform write one clear operation */ /* Perform write one clear operation */
sdio_local_write(padapter, SDIO_REG_HISR, 4, clear); sdio_local_write(padapter, SDIO_REG_HISR, 4, clear);
...@@ -870,16 +870,16 @@ void ClearInterrupt8723BSdio(struct adapter *padapter) ...@@ -870,16 +870,16 @@ void ClearInterrupt8723BSdio(struct adapter *padapter)
/* */ /* */
/* Created by Roger, 2011.02.11. */ /* Created by Roger, 2011.02.11. */
/* */ /* */
void EnableInterrupt8723BSdio(struct adapter *padapter) void EnableInterrupt8723BSdio(struct adapter *adapter)
{ {
struct hal_com_data *pHalData; struct hal_com_data *haldata;
__le32 himr; __le32 himr;
u32 tmp; u32 tmp;
pHalData = GET_HAL_DATA(padapter); haldata = GET_HAL_DATA(adapter);
himr = cpu_to_le32(pHalData->sdio_himr); himr = cpu_to_le32(haldata->sdio_himr);
sdio_local_write(padapter, SDIO_REG_HIMR, 4, (u8 *)&himr); sdio_local_write(adapter, SDIO_REG_HIMR, 4, (u8 *)&himr);
RT_TRACE( RT_TRACE(
_module_hci_ops_c_, _module_hci_ops_c_,
...@@ -887,13 +887,13 @@ void EnableInterrupt8723BSdio(struct adapter *padapter) ...@@ -887,13 +887,13 @@ void EnableInterrupt8723BSdio(struct adapter *padapter)
( (
"%s: enable SDIO HIMR = 0x%08X\n", "%s: enable SDIO HIMR = 0x%08X\n",
__func__, __func__,
pHalData->sdio_himr haldata->sdio_himr
) )
); );
/* Update current system IMR settings */ /* Update current system IMR settings */
tmp = rtw_read32(padapter, REG_HSIMR); tmp = rtw_read32(adapter, REG_HSIMR);
rtw_write32(padapter, REG_HSIMR, tmp | pHalData->SysIntrMask); rtw_write32(adapter, REG_HSIMR, tmp | haldata->SysIntrMask);
RT_TRACE( RT_TRACE(
_module_hci_ops_c_, _module_hci_ops_c_,
...@@ -901,7 +901,7 @@ void EnableInterrupt8723BSdio(struct adapter *padapter) ...@@ -901,7 +901,7 @@ void EnableInterrupt8723BSdio(struct adapter *padapter)
( (
"%s: enable HSIMR = 0x%08X\n", "%s: enable HSIMR = 0x%08X\n",
__func__, __func__,
pHalData->SysIntrMask haldata->SysIntrMask
) )
); );
...@@ -910,7 +910,7 @@ void EnableInterrupt8723BSdio(struct adapter *padapter) ...@@ -910,7 +910,7 @@ void EnableInterrupt8723BSdio(struct adapter *padapter)
/* So we need to clear all C2H events that FW has notified, otherwise FW won't schedule any commands anymore. */ /* So we need to clear all C2H events that FW has notified, otherwise FW won't schedule any commands anymore. */
/* 2011.10.19. */ /* 2011.10.19. */
/* */ /* */
rtw_write8(padapter, REG_C2HEVT_CLEAR, C2H_EVT_HOST_CLOSE); rtw_write8(adapter, REG_C2HEVT_CLEAR, C2H_EVT_HOST_CLOSE);
} }
/* */ /* */
...@@ -922,12 +922,12 @@ void EnableInterrupt8723BSdio(struct adapter *padapter) ...@@ -922,12 +922,12 @@ void EnableInterrupt8723BSdio(struct adapter *padapter)
/* */ /* */
/* Created by Roger, 2011.02.11. */ /* Created by Roger, 2011.02.11. */
/* */ /* */
void DisableInterrupt8723BSdio(struct adapter *padapter) void DisableInterrupt8723BSdio(struct adapter *adapter)
{ {
__le32 himr; __le32 himr;
himr = cpu_to_le32(SDIO_HIMR_DISABLED); himr = cpu_to_le32(SDIO_HIMR_DISABLED);
sdio_local_write(padapter, SDIO_REG_HIMR, 4, (u8 *)&himr); sdio_local_write(adapter, SDIO_REG_HIMR, 4, (u8 *)&himr);
} }
/* */ /* */
...@@ -939,27 +939,27 @@ void DisableInterrupt8723BSdio(struct adapter *padapter) ...@@ -939,27 +939,27 @@ void DisableInterrupt8723BSdio(struct adapter *padapter)
/* */ /* */
/* Created by Isaac, 2013.09.10. */ /* Created by Isaac, 2013.09.10. */
/* */ /* */
u8 CheckIPSStatus(struct adapter *padapter) u8 CheckIPSStatus(struct adapter *adapter)
{ {
DBG_871X( DBG_871X(
"%s(): Read 0x100 = 0x%02x 0x86 = 0x%02x\n", "%s(): Read 0x100 = 0x%02x 0x86 = 0x%02x\n",
__func__, __func__,
rtw_read8(padapter, 0x100), rtw_read8(adapter, 0x100),
rtw_read8(padapter, 0x86) rtw_read8(adapter, 0x86)
); );
if (rtw_read8(padapter, 0x100) == 0xEA) if (rtw_read8(adapter, 0x100) == 0xEA)
return true; return true;
else else
return false; return false;
} }
static struct recv_buf *sd_recv_rxfifo(struct adapter *padapter, u32 size) static struct recv_buf *sd_recv_rxfifo(struct adapter *adapter, u32 size)
{ {
u32 readsize, ret; u32 readsize, ret;
u8 *preadbuf; u8 *readbuf;
struct recv_priv *precvpriv; struct recv_priv *recv_priv;
struct recv_buf *precvbuf; struct recv_buf *recvbuf;
/* Patch for some SDIO Host 4 bytes issue */ /* Patch for some SDIO Host 4 bytes issue */
...@@ -967,37 +967,37 @@ static struct recv_buf *sd_recv_rxfifo(struct adapter *padapter, u32 size) ...@@ -967,37 +967,37 @@ static struct recv_buf *sd_recv_rxfifo(struct adapter *padapter, u32 size)
readsize = RND4(size); readsize = RND4(size);
/* 3 1. alloc recvbuf */ /* 3 1. alloc recvbuf */
precvpriv = &padapter->recvpriv; recv_priv = &adapter->recvpriv;
precvbuf = rtw_dequeue_recvbuf(&precvpriv->free_recv_buf_queue); recvbuf = rtw_dequeue_recvbuf(&recv_priv->free_recv_buf_queue);
if (precvbuf == NULL) { if (recvbuf == NULL) {
DBG_871X_LEVEL(_drv_err_, "%s: alloc recvbuf FAIL!\n", __func__); DBG_871X_LEVEL(_drv_err_, "%s: alloc recvbuf FAIL!\n", __func__);
return NULL; return NULL;
} }
/* 3 2. alloc skb */ /* 3 2. alloc skb */
if (precvbuf->pskb == NULL) { if (recvbuf->pskb == NULL) {
SIZE_PTR tmpaddr = 0; SIZE_PTR tmpaddr = 0;
SIZE_PTR alignment = 0; SIZE_PTR alignment = 0;
precvbuf->pskb = rtw_skb_alloc(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ); recvbuf->pskb = rtw_skb_alloc(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
if (precvbuf->pskb) { if (recvbuf->pskb) {
precvbuf->pskb->dev = padapter->pnetdev; recvbuf->pskb->dev = adapter->pnetdev;
tmpaddr = (SIZE_PTR)precvbuf->pskb->data; tmpaddr = (SIZE_PTR)recvbuf->pskb->data;
alignment = tmpaddr & (RECVBUFF_ALIGN_SZ-1); alignment = tmpaddr & (RECVBUFF_ALIGN_SZ-1);
skb_reserve(precvbuf->pskb, (RECVBUFF_ALIGN_SZ - alignment)); skb_reserve(recvbuf->pskb, (RECVBUFF_ALIGN_SZ - alignment));
} }
if (precvbuf->pskb == NULL) { if (recvbuf->pskb == NULL) {
DBG_871X("%s: alloc_skb fail! read =%d\n", __func__, readsize); DBG_871X("%s: alloc_skb fail! read =%d\n", __func__, readsize);
return NULL; return NULL;
} }
} }
/* 3 3. read data from rxfifo */ /* 3 3. read data from rxfifo */
preadbuf = precvbuf->pskb->data; readbuf = recvbuf->pskb->data;
ret = sdio_read_port(&padapter->iopriv.intf, WLAN_RX0FF_DEVICE_ID, readsize, preadbuf); ret = sdio_read_port(&adapter->iopriv.intf, WLAN_RX0FF_DEVICE_ID, readsize, readbuf);
if (ret == _FAIL) { if (ret == _FAIL) {
RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("%s: read port FAIL!\n", __func__)); RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("%s: read port FAIL!\n", __func__));
return NULL; return NULL;
...@@ -1005,72 +1005,72 @@ static struct recv_buf *sd_recv_rxfifo(struct adapter *padapter, u32 size) ...@@ -1005,72 +1005,72 @@ static struct recv_buf *sd_recv_rxfifo(struct adapter *padapter, u32 size)
/* 3 4. init recvbuf */ /* 3 4. init recvbuf */
precvbuf->len = size; recvbuf->len = size;
precvbuf->phead = precvbuf->pskb->head; recvbuf->phead = recvbuf->pskb->head;
precvbuf->pdata = precvbuf->pskb->data; recvbuf->pdata = recvbuf->pskb->data;
skb_set_tail_pointer(precvbuf->pskb, size); skb_set_tail_pointer(recvbuf->pskb, size);
precvbuf->ptail = skb_tail_pointer(precvbuf->pskb); recvbuf->ptail = skb_tail_pointer(recvbuf->pskb);
precvbuf->pend = skb_end_pointer(precvbuf->pskb); recvbuf->pend = skb_end_pointer(recvbuf->pskb);
return precvbuf; return recvbuf;
} }
static void sd_rxhandler(struct adapter *padapter, struct recv_buf *precvbuf) static void sd_rxhandler(struct adapter *adapter, struct recv_buf *recvbuf)
{ {
struct recv_priv *precvpriv; struct recv_priv *recv_priv;
struct __queue *ppending_queue; struct __queue *pending_queue;
precvpriv = &padapter->recvpriv; recv_priv = &adapter->recvpriv;
ppending_queue = &precvpriv->recv_buf_pending_queue; pending_queue = &recv_priv->recv_buf_pending_queue;
/* 3 1. enqueue recvbuf */ /* 3 1. enqueue recvbuf */
rtw_enqueue_recvbuf(precvbuf, ppending_queue); rtw_enqueue_recvbuf(recvbuf, pending_queue);
/* 3 2. schedule tasklet */ /* 3 2. schedule tasklet */
tasklet_schedule(&precvpriv->recv_tasklet); tasklet_schedule(&recv_priv->recv_tasklet);
} }
void sd_int_dpc(struct adapter *padapter) void sd_int_dpc(struct adapter *adapter)
{ {
struct hal_com_data *phal; struct hal_com_data *hal;
struct dvobj_priv *dvobj; struct dvobj_priv *dvobj;
struct intf_hdl *pintfhdl = &padapter->iopriv.intf; struct intf_hdl *intfhdl = &adapter->iopriv.intf;
struct pwrctrl_priv *pwrctl; struct pwrctrl_priv *pwrctl;
phal = GET_HAL_DATA(padapter); hal = GET_HAL_DATA(adapter);
dvobj = adapter_to_dvobj(padapter); dvobj = adapter_to_dvobj(adapter);
pwrctl = dvobj_to_pwrctl(dvobj); pwrctl = dvobj_to_pwrctl(dvobj);
if (phal->sdio_hisr & SDIO_HISR_AVAL) { if (hal->sdio_hisr & SDIO_HISR_AVAL) {
u8 freepage[4]; u8 freepage[4];
_sdio_local_read(padapter, SDIO_REG_FREE_TXPG, 4, freepage); _sdio_local_read(adapter, SDIO_REG_FREE_TXPG, 4, freepage);
up(&(padapter->xmitpriv.xmit_sema)); up(&(adapter->xmitpriv.xmit_sema));
} }
if (phal->sdio_hisr & SDIO_HISR_CPWM1) { if (hal->sdio_hisr & SDIO_HISR_CPWM1) {
struct reportpwrstate_parm report; struct reportpwrstate_parm report;
u8 bcancelled; u8 bcancelled;
_cancel_timer(&(pwrctl->pwr_rpwm_timer), &bcancelled); _cancel_timer(&(pwrctl->pwr_rpwm_timer), &bcancelled);
report.state = SdioLocalCmd52Read1Byte(padapter, SDIO_REG_HCPWM1_8723B); report.state = SdioLocalCmd52Read1Byte(adapter, SDIO_REG_HCPWM1_8723B);
/* cpwm_int_hdl(padapter, &report); */ /* cpwm_int_hdl(adapter, &report); */
_set_workitem(&(pwrctl->cpwm_event)); _set_workitem(&(pwrctl->cpwm_event));
} }
if (phal->sdio_hisr & SDIO_HISR_TXERR) { if (hal->sdio_hisr & SDIO_HISR_TXERR) {
u8 *status; u8 *status;
u32 addr; u32 addr;
status = rtw_malloc(4); status = rtw_malloc(4);
if (status) { if (status) {
addr = REG_TXDMA_STATUS; addr = REG_TXDMA_STATUS;
HalSdioGetCmdAddr8723BSdio(padapter, WLAN_IOREG_DEVICE_ID, addr, &addr); HalSdioGetCmdAddr8723BSdio(adapter, WLAN_IOREG_DEVICE_ID, addr, &addr);
_sd_read(pintfhdl, addr, 4, status); _sd_read(intfhdl, addr, 4, status);
_sd_write(pintfhdl, addr, 4, status); _sd_write(intfhdl, addr, 4, status);
DBG_8192C("%s: SDIO_HISR_TXERR (0x%08x)\n", __func__, le32_to_cpu(*(u32 *)status)); DBG_8192C("%s: SDIO_HISR_TXERR (0x%08x)\n", __func__, le32_to_cpu(*(u32 *)status));
kfree(status); kfree(status);
} else { } else {
...@@ -1078,71 +1078,71 @@ void sd_int_dpc(struct adapter *padapter) ...@@ -1078,71 +1078,71 @@ void sd_int_dpc(struct adapter *padapter)
} }
} }
if (phal->sdio_hisr & SDIO_HISR_TXBCNOK) { if (hal->sdio_hisr & SDIO_HISR_TXBCNOK) {
DBG_8192C("%s: SDIO_HISR_TXBCNOK\n", __func__); DBG_8192C("%s: SDIO_HISR_TXBCNOK\n", __func__);
} }
if (phal->sdio_hisr & SDIO_HISR_TXBCNERR) { if (hal->sdio_hisr & SDIO_HISR_TXBCNERR) {
DBG_8192C("%s: SDIO_HISR_TXBCNERR\n", __func__); DBG_8192C("%s: SDIO_HISR_TXBCNERR\n", __func__);
} }
#ifndef CONFIG_C2H_PACKET_EN #ifndef CONFIG_C2H_PACKET_EN
if (phal->sdio_hisr & SDIO_HISR_C2HCMD) { if (hal->sdio_hisr & SDIO_HISR_C2HCMD) {
struct c2h_evt_hdr_88xx *c2h_evt; struct c2h_evt_hdr_88xx *c2h_evt;
DBG_8192C("%s: C2H Command\n", __func__); DBG_8192C("%s: C2H Command\n", __func__);
c2h_evt = rtw_zmalloc(16); c2h_evt = rtw_zmalloc(16);
if (c2h_evt != NULL) { if (c2h_evt != NULL) {
if (rtw_hal_c2h_evt_read(padapter, (u8 *)c2h_evt) == _SUCCESS) { if (rtw_hal_c2h_evt_read(adapter, (u8 *)c2h_evt) == _SUCCESS) {
if (c2h_id_filter_ccx_8723b((u8 *)c2h_evt)) { if (c2h_id_filter_ccx_8723b((u8 *)c2h_evt)) {
/* Handle CCX report here */ /* Handle CCX report here */
rtw_hal_c2h_handler(padapter, (u8 *)c2h_evt); rtw_hal_c2h_handler(adapter, (u8 *)c2h_evt);
kfree((u8 *)c2h_evt); kfree((u8 *)c2h_evt);
} else { } else {
rtw_c2h_wk_cmd(padapter, (u8 *)c2h_evt); rtw_c2h_wk_cmd(adapter, (u8 *)c2h_evt);
} }
} }
} else { } else {
/* Error handling for malloc fail */ /* Error handling for malloc fail */
if (rtw_cbuf_push(padapter->evtpriv.c2h_queue, NULL) != _SUCCESS) if (rtw_cbuf_push(adapter->evtpriv.c2h_queue, NULL) != _SUCCESS)
DBG_871X("%s rtw_cbuf_push fail\n", __func__); DBG_871X("%s rtw_cbuf_push fail\n", __func__);
_set_workitem(&padapter->evtpriv.c2h_wk); _set_workitem(&adapter->evtpriv.c2h_wk);
} }
} }
#endif #endif
if (phal->sdio_hisr & SDIO_HISR_RXFOVW) { if (hal->sdio_hisr & SDIO_HISR_RXFOVW) {
DBG_8192C("%s: Rx Overflow\n", __func__); DBG_8192C("%s: Rx Overflow\n", __func__);
} }
if (phal->sdio_hisr & SDIO_HISR_RXERR) { if (hal->sdio_hisr & SDIO_HISR_RXERR) {
DBG_8192C("%s: Rx Error\n", __func__); DBG_8192C("%s: Rx Error\n", __func__);
} }
if (phal->sdio_hisr & SDIO_HISR_RX_REQUEST) { if (hal->sdio_hisr & SDIO_HISR_RX_REQUEST) {
struct recv_buf *precvbuf; struct recv_buf *recvbuf;
int alloc_fail_time = 0; int alloc_fail_time = 0;
u32 hisr; u32 hisr;
/* DBG_8192C("%s: RX Request, size =%d\n", __func__, phal->SdioRxFIFOSize); */ /* DBG_8192C("%s: RX Request, size =%d\n", __func__, hal->SdioRxFIFOSize); */
phal->sdio_hisr ^= SDIO_HISR_RX_REQUEST; hal->sdio_hisr ^= SDIO_HISR_RX_REQUEST;
do { do {
phal->SdioRxFIFOSize = SdioLocalCmd52Read2Byte(padapter, SDIO_REG_RX0_REQ_LEN); hal->SdioRxFIFOSize = SdioLocalCmd52Read2Byte(adapter, SDIO_REG_RX0_REQ_LEN);
if (phal->SdioRxFIFOSize != 0) { if (hal->SdioRxFIFOSize != 0) {
precvbuf = sd_recv_rxfifo(padapter, phal->SdioRxFIFOSize); recvbuf = sd_recv_rxfifo(adapter, hal->SdioRxFIFOSize);
if (precvbuf) if (recvbuf)
sd_rxhandler(padapter, precvbuf); sd_rxhandler(adapter, recvbuf);
else { else {
alloc_fail_time++; alloc_fail_time++;
DBG_871X("precvbuf is Null for %d times because alloc memory failed\n", alloc_fail_time); DBG_871X("recvbuf is Null for %d times because alloc memory failed\n", alloc_fail_time);
if (alloc_fail_time >= 10) if (alloc_fail_time >= 10)
break; break;
} }
phal->SdioRxFIFOSize = 0; hal->SdioRxFIFOSize = 0;
} else } else
break; break;
hisr = 0; hisr = 0;
ReadInterrupt8723BSdio(padapter, &hisr); ReadInterrupt8723BSdio(adapter, &hisr);
hisr &= SDIO_HISR_RX_REQUEST; hisr &= SDIO_HISR_RX_REQUEST;
if (!hisr) if (!hisr)
break; break;
...@@ -1154,37 +1154,37 @@ void sd_int_dpc(struct adapter *padapter) ...@@ -1154,37 +1154,37 @@ void sd_int_dpc(struct adapter *padapter)
} }
} }
void sd_int_hdl(struct adapter *padapter) void sd_int_hdl(struct adapter *adapter)
{ {
struct hal_com_data *phal; struct hal_com_data *hal;
if ( if (
(padapter->bDriverStopped) || (padapter->bSurpriseRemoved) (adapter->bDriverStopped) || (adapter->bSurpriseRemoved)
) )
return; return;
phal = GET_HAL_DATA(padapter); hal = GET_HAL_DATA(adapter);
phal->sdio_hisr = 0; hal->sdio_hisr = 0;
ReadInterrupt8723BSdio(padapter, &phal->sdio_hisr); ReadInterrupt8723BSdio(adapter, &hal->sdio_hisr);
if (phal->sdio_hisr & phal->sdio_himr) { if (hal->sdio_hisr & hal->sdio_himr) {
u32 v32; u32 v32;
phal->sdio_hisr &= phal->sdio_himr; hal->sdio_hisr &= hal->sdio_himr;
/* clear HISR */ /* clear HISR */
v32 = phal->sdio_hisr & MASK_SDIO_HISR_CLEAR; v32 = hal->sdio_hisr & MASK_SDIO_HISR_CLEAR;
if (v32) { if (v32) {
SdioLocalCmd52Write4Byte(padapter, SDIO_REG_HISR, v32); SdioLocalCmd52Write4Byte(adapter, SDIO_REG_HISR, v32);
} }
sd_int_dpc(padapter); sd_int_dpc(adapter);
} else { } else {
RT_TRACE(_module_hci_ops_c_, _drv_err_, RT_TRACE(_module_hci_ops_c_, _drv_err_,
("%s: HISR(0x%08x) and HIMR(0x%08x) not match!\n", ("%s: HISR(0x%08x) and HIMR(0x%08x) not match!\n",
__func__, phal->sdio_hisr, phal->sdio_himr)); __func__, hal->sdio_hisr, hal->sdio_himr));
} }
} }
...@@ -1198,27 +1198,27 @@ void sd_int_hdl(struct adapter *padapter) ...@@ -1198,27 +1198,27 @@ void sd_int_hdl(struct adapter *padapter)
/* */ /* */
/* Created by Roger, 2011.01.28. */ /* Created by Roger, 2011.01.28. */
/* */ /* */
u8 HalQueryTxBufferStatus8723BSdio(struct adapter *padapter) u8 HalQueryTxBufferStatus8723BSdio(struct adapter *adapter)
{ {
struct hal_com_data *phal; struct hal_com_data *hal;
u32 NumOfFreePage; u32 numof_free_page;
/* _irqL irql; */ /* _irql irql; */
phal = GET_HAL_DATA(padapter); hal = GET_HAL_DATA(adapter);
NumOfFreePage = SdioLocalCmd53Read4Byte(padapter, SDIO_REG_FREE_TXPG); numof_free_page = SdioLocalCmd53Read4Byte(adapter, SDIO_REG_FREE_TXPG);
/* spin_lock_bh(&phal->SdioTxFIFOFreePageLock); */ /* spin_lock_bh(&phal->SdioTxFIFOFreePageLock); */
memcpy(phal->SdioTxFIFOFreePage, &NumOfFreePage, 4); memcpy(hal->SdioTxFIFOFreePage, &numof_free_page, 4);
RT_TRACE(_module_hci_ops_c_, _drv_notice_, RT_TRACE(_module_hci_ops_c_, _drv_notice_,
("%s: Free page for HIQ(%#x), MIDQ(%#x), LOWQ(%#x), PUBQ(%#x)\n", ("%s: Free page for HIQ(%#x), MIDQ(%#x), LOWQ(%#x), PUBQ(%#x)\n",
__func__, __func__,
phal->SdioTxFIFOFreePage[HI_QUEUE_IDX], hal->SdioTxFIFOFreePage[HI_QUEUE_IDX],
phal->SdioTxFIFOFreePage[MID_QUEUE_IDX], hal->SdioTxFIFOFreePage[MID_QUEUE_IDX],
phal->SdioTxFIFOFreePage[LOW_QUEUE_IDX], hal->SdioTxFIFOFreePage[LOW_QUEUE_IDX],
phal->SdioTxFIFOFreePage[PUBLIC_QUEUE_IDX])); hal->SdioTxFIFOFreePage[PUBLIC_QUEUE_IDX]));
/* spin_unlock_bh(&phal->SdioTxFIFOFreePageLock); */ /* spin_unlock_bh(&hal->SdioTxFIFOFreePageLock); */
return true; return true;
} }
...@@ -1227,19 +1227,19 @@ u8 HalQueryTxBufferStatus8723BSdio(struct adapter *padapter) ...@@ -1227,19 +1227,19 @@ u8 HalQueryTxBufferStatus8723BSdio(struct adapter *padapter)
/* Description: */ /* Description: */
/* Query SDIO Local register to get the current number of TX OQT Free Space. */ /* Query SDIO Local register to get the current number of TX OQT Free Space. */
/* */ /* */
u8 HalQueryTxOQTBufferStatus8723BSdio(struct adapter *padapter) u8 HalQueryTxOQTBufferStatus8723BSdio(struct adapter *adapter)
{ {
struct hal_com_data *pHalData = GET_HAL_DATA(padapter); struct hal_com_data *haldata = GET_HAL_DATA(adapter);
pHalData->SdioTxOQTFreeSpace = SdioLocalCmd52Read1Byte(padapter, SDIO_REG_OQT_FREE_PG); haldata->SdioTxOQTFreeSpace = SdioLocalCmd52Read1Byte(adapter, SDIO_REG_OQT_FREE_PG);
return true; return true;
} }
#if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN) #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
u8 RecvOnePkt(struct adapter *padapter, u32 size) u8 RecvOnePkt(struct adapter *adapter, u32 size)
{ {
struct recv_buf *precvbuf; struct recv_buf *recvbuf;
struct dvobj_priv *psddev; struct dvobj_priv *sddev;
PSDIO_DATA psdio_data; PSDIO_DATA psdio_data;
struct sdio_func *func; struct sdio_func *func;
...@@ -1247,22 +1247,22 @@ u8 RecvOnePkt(struct adapter *padapter, u32 size) ...@@ -1247,22 +1247,22 @@ u8 RecvOnePkt(struct adapter *padapter, u32 size)
DBG_871X("+%s: size: %d+\n", __func__, size); DBG_871X("+%s: size: %d+\n", __func__, size);
if (padapter == NULL) { if (adapter == NULL) {
DBG_871X(KERN_ERR "%s: padapter is NULL!\n", __func__); DBG_871X(KERN_ERR "%s: adapter is NULL!\n", __func__);
return false; return false;
} }
psddev = adapter_to_dvobj(padapter); sddev = adapter_to_dvobj(adapter);
psdio_data = &psddev->intf_data; psdio_data = &sddev->intf_data;
func = psdio_data->func; func = psdio_data->func;
if (size) { if (size) {
sdio_claim_host(func); sdio_claim_host(func);
precvbuf = sd_recv_rxfifo(padapter, size); recvbuf = sd_recv_rxfifo(adapter, size);
if (precvbuf) { if (recvbuf) {
/* printk("Completed Recv One Pkt.\n"); */ /* printk("Completed Recv One Pkt.\n"); */
sd_rxhandler(padapter, precvbuf); sd_rxhandler(adapter, recvbuf);
res = true; res = true;
} else { } else {
res = false; res = false;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment