From: Michael Trimarchi <trimarchi@gandalf.sssup.it>
To: linux-sh@vger.kernel.org
Subject: Re: [RFC patch] sci_tx_empty for scif serial device
Date: Wed, 22 Apr 2009 11:33:53 +0000 [thread overview]
Message-ID: <49EF00A1.9080004@gandalf.sssup.it> (raw)
In-Reply-To: <20090421120846.GA26186@gandalf.sssup.it>
Hi,
Michael Trimarchi wrote:
> Hi,
>
> Paul Mundt wrote:
>> On Tue, Apr 21, 2009 at 02:08:47PM +0200, Michael Trimarchi wrote:
>>
>>> Add the sci_tx_empty function for scif serial device.
>>>
>>> Signed-off-by: Michael Trimarchi <trimarchi@gandalf.sssup.it>
>>> ---
>>> diff --git a/drivers/serial/sh-sci.c b/drivers/serial/sh-sci.c
>>> index dbf5357..6cea2c4 100644
>>> --- a/drivers/serial/sh-sci.c
>>> +++ b/drivers/serial/sh-sci.c
>>> @@ -794,6 +794,20 @@ static void sci_free_irq(struct sci_port *port)
>>>
>>> static unsigned int sci_tx_empty(struct uart_port *port)
>>> {
>>> + int txroom = SCIF_TXROOM_MAX;
>>> +
>>> +#if defined(CONFIG_CPU_SUBTYPE_SH7763)
>>> + if (!(port->mapbase = 0xffe00000) &&
>>> + !(port->mapbase = 0xffe08000)) {
>>> + txroom = SCIF2_TXROOM_MAX)
>>> + }
>>> +#endif
>>>
>>
>> Uhm.. your version of gcc must be orders of magnitude more magical than
>> mine, as I see no way for this to compile :-)
>>
> Of course is wrong here, I don't try the SH7763 configuration. Sorry...
>>
>>> + if (port->type = PORT_SCIF) {
>>> + if (scif_txroom(port) = txroom)
>>> + return TIOCSER_TEMT;
>>> + return 0;
>>> + }
>>> +
>>>
>> This looks ok anyways, is there some reason this can't be applied to
>> SH7763, too?
>>
>>
> Apart the compilation issue, the sh7763 has the SCIF2 port has a
> txroom different.
>
> I would like to know if it is correct that the fifosize of serial
> device may equal to the
> tx buffer size. In this case I can change the txroom and tx_empty
> using this info from
> the port strucy for scif device. For the sci device I don't think that
> it is useful to read the tx status register to check if it's empty or
> full, maybe no.
>
> Michael
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-sh" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
Somenthing like this. It is just an example.
diff --git a/drivers/serial/sh-sci.c b/drivers/serial/sh-sci.c
index dbf5357..50563af 100644
--- a/drivers/serial/sh-sci.c
+++ b/drivers/serial/sh-sci.c
@@ -283,13 +283,9 @@ static inline void sci_init_pins(struct uart_port
*port, unsigned int cflag)
}
#endif
-#if defined(CONFIG_CPU_SUBTYPE_SH7760) || \
- defined(CONFIG_CPU_SUBTYPE_SH7780) || \
- defined(CONFIG_CPU_SUBTYPE_SH7785) || \
- defined(CONFIG_CPU_SUBTYPE_SH7786)
static inline int scif_txroom(struct uart_port *port)
{
- return SCIF_TXROOM_MAX - (sci_in(port, SCTFDR) & 0xff);
+ return port->fifosize - (sci_in(port, SCTFDR) & 0xff);
}
static inline int scif_rxroom(struct uart_port *port)
@@ -297,18 +293,6 @@ static inline int scif_rxroom(struct uart_port *port)
return sci_in(port, SCRFDR) & 0xff;
}
#elif defined(CONFIG_CPU_SUBTYPE_SH7763)
-static inline int scif_txroom(struct uart_port *port)
-{
- if ((port->mapbase = 0xffe00000) ||
- (port->mapbase = 0xffe08000)) {
- /* SCIF0/1*/
- return SCIF_TXROOM_MAX - (sci_in(port, SCTFDR) & 0xff);
- } else {
- /* SCIF2 */
- return SCIF2_TXROOM_MAX - (sci_in(port, SCFDR) >> 8);
- }
-}
-
static inline int scif_rxroom(struct uart_port *port)
{
if ((port->mapbase = 0xffe00000) ||
@@ -321,10 +305,6 @@ static inline int scif_rxroom(struct uart_port *port)
}
}
#else
-static inline int scif_txroom(struct uart_port *port)
-{
- return SCIF_TXROOM_MAX - (sci_in(port, SCFDR) >> 8);
-}
static inline int scif_rxroom(struct uart_port *port)
{
@@ -794,6 +774,12 @@ static void sci_free_irq(struct sci_port *port)
static unsigned int sci_tx_empty(struct uart_port *port)
{
+ if (port->type = PORT_SCIF) {
+ if (scif_txroom(port) = port->fifosize)
+ return TIOCSER_TEMT;
+ return 0;
+ }
+
/* Can't detect */
return TIOCSER_TEMT;
}
@@ -1255,6 +1241,7 @@ static int __devinit sci_probe(struct
platform_device *dev)
sciport->port.irq = p->irqs[SCIx_TXI_IRQ];
sciport->port.flags = p->flags;
sciport->port.dev = &dev->dev;
+ sciport->port.fifosize = p->fifosize;
sciport->type = sciport->port.type = p->type;
prev parent reply other threads:[~2009-04-22 11:33 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-04-21 12:08 [RFC patch] sci_tx_empty for scif serial device Michael Trimarchi
2009-04-22 0:34 ` Paul Mundt
2009-04-22 6:14 ` Michael Trimarchi
2009-04-22 11:33 ` Michael Trimarchi [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=49EF00A1.9080004@gandalf.sssup.it \
--to=trimarchi@gandalf.sssup.it \
--cc=linux-sh@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox