lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:   Fri, 4 May 2018 14:14:41 +0200
From:   loïc tourlonias <loic.tourlonias@...il.com>
To:     Muni Sekhar <munisekharrms@...il.com>
Cc:     Greg KH <greg@...ah.com>, linux-kernel@...r.kernel.org,
        linux-serial <linux-serial@...r.kernel.org>,
        kernelnewbies <kernelnewbies@...nelnewbies.org>
Subject: Re: serial: start_tx & buffer handling

 Hi

 On Fri, May 4, 2018 at 6:31 AM, Muni Sekhar <munisekharrms@...il.com> wrote:
>>
>> On Fri, May 4, 2018 at 12:04 AM, Greg KH <greg@...ah.com> wrote:
>> > On Thu, May 03, 2018 at 08:08:48PM +0530, Muni Sekhar wrote:
>> >> Hi All,
>> >>
>> >> I’m trying to understand how user mode buffer is written to low level
>> >> serial hardware registers.
>> >>
>> >> For this I read the kernel code and I came to know that from user mode
>> >> write() API lands into kernel’s tty_write() ("drivers/tty/tty_io.c")
>> >> and then it calls a uart_write() ("drivers/tty/serial/serial_core.c").
>> >>
>> >> In uart_write(), the buffer is copied to circ_buf and then it calls
>> >> low level serial hardware driver’s start_tx() (struct uart_ops
>> >> .start_tx). But here I could not find how the buffer kept in circ_buf
>> >> is copied to serial port’s TX_FIFO registers?
>> >>
>> >> Can someone take a moment to explain me on this?
>> >
>> > It all depends on which specific UART driver you are looking at, they
>> > all do it a bit different depending on the hardware.
>> >
>> > Which one are you looking at?  Look at what the start_tx callback does
>> > for that specific driver, that should give you a hint as to how data
>> > starts flowing.  Usually an interrupt is enabled that is used to flush
>> > the buffer out to the hardware.
>> >
>>
>> I’m looking for any existing sample code which does DMA transfers of
>> UART transmitted data. I looked at the bcm63xx_uart.c, it looks it
>> does not handle DMA transfers. Even copying the Tx buffer (from
>> circ_buf) to UART_FIFO_REG happening in ISR.


 You can have a look at atmel_serial kernel module (built for ARM).
 https://elixir.bootlin.com/linux/latest/source/drivers/tty/serial/atmel_serial.c

 The dma buffer is linked to uart circular buffer in prepare_tx() function
 called from uart_startup(). It's released in release_tx() function called
 from uart_shutdown(). DMA buffer is managed in schedule_tx() function called
 from a tasklet triggered by the ISR.

 HTH

>>
>>
>> > thanks,
>> >
>> > greg k-h
>>
>>
>>
>> --
>> Thanks,
>> Sekhar
>>
>> _______________________________________________
>> Kernelnewbies mailing list
>> Kernelnewbies@...nelnewbies.org
>> https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ