public inbox for linux-sh@vger.kernel.org
 help / color / mirror / Atom feed
* [RFC patch] sci_tx_empty for scif serial device
@ 2009-04-21 12:08 Michael Trimarchi
  2009-04-22  0:34 ` Paul Mundt
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Michael Trimarchi @ 2009-04-21 12:08 UTC (permalink / raw)
  To: linux-sh

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
+	if (port->type = PORT_SCIF) {
+		if (scif_txroom(port) = txroom)
+			return TIOCSER_TEMT;
+		return 0;
+	}
+
 	/* Can't detect */
 	return TIOCSER_TEMT;
 }

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [RFC patch] sci_tx_empty for scif serial device
  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
  2 siblings, 0 replies; 4+ messages in thread
From: Paul Mundt @ 2009-04-22  0:34 UTC (permalink / raw)
  To: linux-sh

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 :-)

> +	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?

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [RFC patch] sci_tx_empty for scif serial device
  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
  2 siblings, 0 replies; 4+ messages in thread
From: Michael Trimarchi @ 2009-04-22  6:14 UTC (permalink / raw)
  To: linux-sh

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


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [RFC patch] sci_tx_empty for scif serial device
  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
  2 siblings, 0 replies; 4+ messages in thread
From: Michael Trimarchi @ 2009-04-22 11:33 UTC (permalink / raw)
  To: linux-sh

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;
 

^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2009-04-22 11:33 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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 is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox