334 lines
9 KiB
C
334 lines
9 KiB
C
|
/* Copyright (c) 2012, The Linux Foundation. All rights reserved.
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or modify
|
||
|
* it under the terms of the GNU General Public License version 2 and
|
||
|
* only version 2 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.
|
||
|
*/
|
||
|
|
||
|
#include "smd_private.h"
|
||
|
|
||
|
void set_state(volatile void __iomem *half_channel, unsigned data)
|
||
|
{
|
||
|
((struct smd_half_channel __force *)(half_channel))->state = data;
|
||
|
}
|
||
|
|
||
|
unsigned get_state(volatile void __iomem *half_channel)
|
||
|
{
|
||
|
return ((struct smd_half_channel __force *)(half_channel))->state;
|
||
|
}
|
||
|
|
||
|
void set_fDSR(volatile void __iomem *half_channel, unsigned char data)
|
||
|
{
|
||
|
((struct smd_half_channel __force *)(half_channel))->fDSR = data;
|
||
|
}
|
||
|
|
||
|
unsigned get_fDSR(volatile void __iomem *half_channel)
|
||
|
{
|
||
|
return ((struct smd_half_channel __force *)(half_channel))->fDSR;
|
||
|
}
|
||
|
|
||
|
void set_fCTS(volatile void __iomem *half_channel, unsigned char data)
|
||
|
{
|
||
|
((struct smd_half_channel __force *)(half_channel))->fCTS = data;
|
||
|
}
|
||
|
|
||
|
unsigned get_fCTS(volatile void __iomem *half_channel)
|
||
|
{
|
||
|
return ((struct smd_half_channel __force *)(half_channel))->fCTS;
|
||
|
}
|
||
|
|
||
|
void set_fCD(volatile void __iomem *half_channel, unsigned char data)
|
||
|
{
|
||
|
((struct smd_half_channel __force *)(half_channel))->fCD = data;
|
||
|
}
|
||
|
|
||
|
unsigned get_fCD(volatile void __iomem *half_channel)
|
||
|
{
|
||
|
return ((struct smd_half_channel __force *)(half_channel))->fCD;
|
||
|
}
|
||
|
|
||
|
void set_fRI(volatile void __iomem *half_channel, unsigned char data)
|
||
|
{
|
||
|
((struct smd_half_channel __force *)(half_channel))->fRI = data;
|
||
|
}
|
||
|
|
||
|
unsigned get_fRI(volatile void __iomem *half_channel)
|
||
|
{
|
||
|
return ((struct smd_half_channel __force *)(half_channel))->fRI;
|
||
|
}
|
||
|
|
||
|
void set_fHEAD(volatile void __iomem *half_channel, unsigned char data)
|
||
|
{
|
||
|
((struct smd_half_channel __force *)(half_channel))->fHEAD = data;
|
||
|
}
|
||
|
|
||
|
unsigned get_fHEAD(volatile void __iomem *half_channel)
|
||
|
{
|
||
|
return ((struct smd_half_channel __force *)(half_channel))->fHEAD;
|
||
|
}
|
||
|
|
||
|
void set_fTAIL(volatile void __iomem *half_channel, unsigned char data)
|
||
|
{
|
||
|
((struct smd_half_channel __force *)(half_channel))->fTAIL = data;
|
||
|
}
|
||
|
|
||
|
unsigned get_fTAIL(volatile void __iomem *half_channel)
|
||
|
{
|
||
|
return ((struct smd_half_channel __force *)(half_channel))->fTAIL;
|
||
|
}
|
||
|
|
||
|
void set_fSTATE(volatile void __iomem *half_channel, unsigned char data)
|
||
|
{
|
||
|
((struct smd_half_channel __force *)(half_channel))->fSTATE = data;
|
||
|
}
|
||
|
|
||
|
unsigned get_fSTATE(volatile void __iomem *half_channel)
|
||
|
{
|
||
|
return ((struct smd_half_channel __force *)(half_channel))->fSTATE;
|
||
|
}
|
||
|
|
||
|
void set_fBLOCKREADINTR(volatile void __iomem *half_channel, unsigned char data)
|
||
|
{
|
||
|
((struct smd_half_channel __force *)
|
||
|
(half_channel))->fBLOCKREADINTR = data;
|
||
|
}
|
||
|
|
||
|
unsigned get_fBLOCKREADINTR(volatile void __iomem *half_channel)
|
||
|
{
|
||
|
return ((struct smd_half_channel __force *)
|
||
|
(half_channel))->fBLOCKREADINTR;
|
||
|
}
|
||
|
|
||
|
void set_tail(volatile void __iomem *half_channel, unsigned data)
|
||
|
{
|
||
|
((struct smd_half_channel __force *)(half_channel))->tail = data;
|
||
|
}
|
||
|
|
||
|
unsigned get_tail(volatile void __iomem *half_channel)
|
||
|
{
|
||
|
return ((struct smd_half_channel __force *)(half_channel))->tail;
|
||
|
}
|
||
|
|
||
|
void set_head(volatile void __iomem *half_channel, unsigned data)
|
||
|
{
|
||
|
((struct smd_half_channel __force *)(half_channel))->head = data;
|
||
|
}
|
||
|
|
||
|
unsigned get_head(volatile void __iomem *half_channel)
|
||
|
{
|
||
|
return ((struct smd_half_channel __force *)(half_channel))->head;
|
||
|
}
|
||
|
|
||
|
void set_state_word_access(volatile void __iomem *half_channel, unsigned data)
|
||
|
{
|
||
|
((struct smd_half_channel_word_access __force *)
|
||
|
(half_channel))->state = data;
|
||
|
}
|
||
|
|
||
|
unsigned get_state_word_access(volatile void __iomem *half_channel)
|
||
|
{
|
||
|
return ((struct smd_half_channel_word_access __force *)
|
||
|
(half_channel))->state;
|
||
|
}
|
||
|
|
||
|
void set_fDSR_word_access(volatile void __iomem *half_channel,
|
||
|
unsigned char data)
|
||
|
{
|
||
|
((struct smd_half_channel_word_access __force *)
|
||
|
(half_channel))->fDSR = data;
|
||
|
}
|
||
|
|
||
|
unsigned get_fDSR_word_access(volatile void __iomem *half_channel)
|
||
|
{
|
||
|
return ((struct smd_half_channel_word_access __force *)
|
||
|
(half_channel))->fDSR;
|
||
|
}
|
||
|
|
||
|
void set_fCTS_word_access(volatile void __iomem *half_channel,
|
||
|
unsigned char data)
|
||
|
{
|
||
|
((struct smd_half_channel_word_access __force *)
|
||
|
(half_channel))->fCTS = data;
|
||
|
}
|
||
|
|
||
|
unsigned get_fCTS_word_access(volatile void __iomem *half_channel)
|
||
|
{
|
||
|
return ((struct smd_half_channel_word_access __force *)
|
||
|
(half_channel))->fCTS;
|
||
|
}
|
||
|
|
||
|
void set_fCD_word_access(volatile void __iomem *half_channel,
|
||
|
unsigned char data)
|
||
|
{
|
||
|
((struct smd_half_channel_word_access __force *)
|
||
|
(half_channel))->fCD = data;
|
||
|
}
|
||
|
|
||
|
unsigned get_fCD_word_access(volatile void __iomem *half_channel)
|
||
|
{
|
||
|
return ((struct smd_half_channel_word_access __force *)
|
||
|
(half_channel))->fCD;
|
||
|
}
|
||
|
|
||
|
void set_fRI_word_access(volatile void __iomem *half_channel,
|
||
|
unsigned char data)
|
||
|
{
|
||
|
((struct smd_half_channel_word_access __force *)
|
||
|
(half_channel))->fRI = data;
|
||
|
}
|
||
|
|
||
|
unsigned get_fRI_word_access(volatile void __iomem *half_channel)
|
||
|
{
|
||
|
return ((struct smd_half_channel_word_access __force *)
|
||
|
(half_channel))->fRI;
|
||
|
}
|
||
|
|
||
|
void set_fHEAD_word_access(volatile void __iomem *half_channel,
|
||
|
unsigned char data)
|
||
|
{
|
||
|
((struct smd_half_channel_word_access __force *)
|
||
|
(half_channel))->fHEAD = data;
|
||
|
}
|
||
|
|
||
|
unsigned get_fHEAD_word_access(volatile void __iomem *half_channel)
|
||
|
{
|
||
|
return ((struct smd_half_channel_word_access __force *)
|
||
|
(half_channel))->fHEAD;
|
||
|
}
|
||
|
|
||
|
void set_fTAIL_word_access(volatile void __iomem *half_channel,
|
||
|
unsigned char data)
|
||
|
{
|
||
|
((struct smd_half_channel_word_access __force *)
|
||
|
(half_channel))->fTAIL = data;
|
||
|
}
|
||
|
|
||
|
unsigned get_fTAIL_word_access(volatile void __iomem *half_channel)
|
||
|
{
|
||
|
return ((struct smd_half_channel_word_access __force *)
|
||
|
(half_channel))->fTAIL;
|
||
|
}
|
||
|
|
||
|
void set_fSTATE_word_access(volatile void __iomem *half_channel,
|
||
|
unsigned char data)
|
||
|
{
|
||
|
((struct smd_half_channel_word_access __force *)
|
||
|
(half_channel))->fSTATE = data;
|
||
|
}
|
||
|
|
||
|
unsigned get_fSTATE_word_access(volatile void __iomem *half_channel)
|
||
|
{
|
||
|
return ((struct smd_half_channel_word_access __force *)
|
||
|
(half_channel))->fSTATE;
|
||
|
}
|
||
|
|
||
|
void set_fBLOCKREADINTR_word_access(volatile void __iomem *half_channel,
|
||
|
unsigned char data)
|
||
|
{
|
||
|
((struct smd_half_channel_word_access __force *)
|
||
|
(half_channel))->fBLOCKREADINTR = data;
|
||
|
}
|
||
|
|
||
|
unsigned get_fBLOCKREADINTR_word_access(volatile void __iomem *half_channel)
|
||
|
{
|
||
|
return ((struct smd_half_channel_word_access __force *)
|
||
|
(half_channel))->fBLOCKREADINTR;
|
||
|
}
|
||
|
|
||
|
void set_tail_word_access(volatile void __iomem *half_channel, unsigned data)
|
||
|
{
|
||
|
((struct smd_half_channel_word_access __force *)
|
||
|
(half_channel))->tail = data;
|
||
|
}
|
||
|
|
||
|
unsigned get_tail_word_access(volatile void __iomem *half_channel)
|
||
|
{
|
||
|
return ((struct smd_half_channel_word_access __force *)
|
||
|
(half_channel))->tail;
|
||
|
}
|
||
|
|
||
|
void set_head_word_access(volatile void __iomem *half_channel, unsigned data)
|
||
|
{
|
||
|
((struct smd_half_channel_word_access __force *)
|
||
|
(half_channel))->head = data;
|
||
|
}
|
||
|
|
||
|
unsigned get_head_word_access(volatile void __iomem *half_channel)
|
||
|
{
|
||
|
return ((struct smd_half_channel_word_access __force *)
|
||
|
(half_channel))->head;
|
||
|
}
|
||
|
|
||
|
int is_word_access_ch(unsigned ch_type)
|
||
|
{
|
||
|
if (ch_type == SMD_APPS_RPM || ch_type == SMD_MODEM_RPM ||
|
||
|
ch_type == SMD_QDSP_RPM || ch_type == SMD_WCNSS_RPM ||
|
||
|
ch_type == SMD_TZ_RPM)
|
||
|
return 1;
|
||
|
else
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
struct smd_half_channel_access *get_half_ch_funcs(unsigned ch_type)
|
||
|
{
|
||
|
static struct smd_half_channel_access byte_access = {
|
||
|
.set_state = set_state,
|
||
|
.get_state = get_state,
|
||
|
.set_fDSR = set_fDSR,
|
||
|
.get_fDSR = get_fDSR,
|
||
|
.set_fCTS = set_fCTS,
|
||
|
.get_fCTS = get_fCTS,
|
||
|
.set_fCD = set_fCD,
|
||
|
.get_fCD = get_fCD,
|
||
|
.set_fRI = set_fRI,
|
||
|
.get_fRI = get_fRI,
|
||
|
.set_fHEAD = set_fHEAD,
|
||
|
.get_fHEAD = get_fHEAD,
|
||
|
.set_fTAIL = set_fTAIL,
|
||
|
.get_fTAIL = get_fTAIL,
|
||
|
.set_fSTATE = set_fSTATE,
|
||
|
.get_fSTATE = get_fSTATE,
|
||
|
.set_fBLOCKREADINTR = set_fBLOCKREADINTR,
|
||
|
.get_fBLOCKREADINTR = get_fBLOCKREADINTR,
|
||
|
.set_tail = set_tail,
|
||
|
.get_tail = get_tail,
|
||
|
.set_head = set_head,
|
||
|
.get_head = get_head,
|
||
|
};
|
||
|
static struct smd_half_channel_access word_access = {
|
||
|
.set_state = set_state_word_access,
|
||
|
.get_state = get_state_word_access,
|
||
|
.set_fDSR = set_fDSR_word_access,
|
||
|
.get_fDSR = get_fDSR_word_access,
|
||
|
.set_fCTS = set_fCTS_word_access,
|
||
|
.get_fCTS = get_fCTS_word_access,
|
||
|
.set_fCD = set_fCD_word_access,
|
||
|
.get_fCD = get_fCD_word_access,
|
||
|
.set_fRI = set_fRI_word_access,
|
||
|
.get_fRI = get_fRI_word_access,
|
||
|
.set_fHEAD = set_fHEAD_word_access,
|
||
|
.get_fHEAD = get_fHEAD_word_access,
|
||
|
.set_fTAIL = set_fTAIL_word_access,
|
||
|
.get_fTAIL = get_fTAIL_word_access,
|
||
|
.set_fSTATE = set_fSTATE_word_access,
|
||
|
.get_fSTATE = get_fSTATE_word_access,
|
||
|
.set_fBLOCKREADINTR = set_fBLOCKREADINTR_word_access,
|
||
|
.get_fBLOCKREADINTR = get_fBLOCKREADINTR_word_access,
|
||
|
.set_tail = set_tail_word_access,
|
||
|
.get_tail = get_tail_word_access,
|
||
|
.set_head = set_head_word_access,
|
||
|
.get_head = get_head_word_access,
|
||
|
};
|
||
|
|
||
|
if (is_word_access_ch(ch_type))
|
||
|
return &word_access;
|
||
|
else
|
||
|
return &byte_access;
|
||
|
}
|
||
|
|