[PATCH] cpm_uart: Fix dpram allocation and non-console uarts

From: Kumar Gala (galak_at_freescale.com)
Date: 08/09/05

  • Next message: Kumar Gala: "[PATCH] cpm_uart: needs some love to compile with GCC4.0.1"
    Date:	Mon, 8 Aug 2005 22:40:40 -0500 (CDT)
    To: Andrew Morton <akpm@osdl.org>
    
    

    (A believe Marcelo would like to see this in 2.6.13, but I'll let him
    fight over that ;)

    * Makes dpram allocations work
    * Makes non-console UART work on both 8xx and 82xx
    * Fixed whitespace in files that were touched

    Signed-off-by: Vitaly Bordug <vbordug@ru.mvista.com>
    Signed-off-by: Pantelis Antoniou <panto@intracom.gr>
    Signed-off-by: Kumar Gala <kumar.gala@freescale.com>

    ---
    commit 1de80554bcae877dce3b6d878053eb092ef65c72
    tree aba124824607fea1070e86501ddccc9decce362d
    parent ad81111fd554c9d3c14c0a50885e076af2f9ac9b
    author Kumar K. Gala <kumar.gala@freescale.com> Mon, 08 Aug 2005 22:35:39 -0500
    committer Kumar K. Gala <kumar.gala@freescale.com> Mon, 08 Aug 2005 22:35:39 -0500
     drivers/serial/cpm_uart/cpm_uart.h      |   10 ++-
     drivers/serial/cpm_uart/cpm_uart_core.c |  118 +++++++++++++++++++++----------
     drivers/serial/cpm_uart/cpm_uart_cpm1.c |   53 ++++++++------
     3 files changed, 116 insertions(+), 65 deletions(-)
    diff --git a/drivers/serial/cpm_uart/cpm_uart.h b/drivers/serial/cpm_uart/cpm_uart.h
    --- a/drivers/serial/cpm_uart/cpm_uart.h
    +++ b/drivers/serial/cpm_uart/cpm_uart.h
    @@ -40,13 +40,15 @@
     #define TX_NUM_FIFO	4
     #define TX_BUF_SIZE	32
     
    +#define SCC_WAIT_CLOSING 100
    +
     struct uart_cpm_port {
     	struct uart_port	port;
    -	u16			rx_nrfifos;	
    +	u16			rx_nrfifos;
     	u16			rx_fifosize;
    -	u16			tx_nrfifos;	
    +	u16			tx_nrfifos;
     	u16			tx_fifosize;
    -	smc_t			*smcp;	
    +	smc_t			*smcp;
     	smc_uart_t		*smcup;
     	scc_t			*sccp;
     	scc_uart_t		*sccup;
    @@ -67,6 +69,8 @@ struct uart_cpm_port {
     	int			 bits;
     	/* Keep track of 'odd' SMC2 wirings */
     	int			is_portb;
    +	/* wait on close if needed */
    +	int 			wait_closing;
     };
     
     extern int cpm_uart_port_map[UART_NR];
    diff --git a/drivers/serial/cpm_uart/cpm_uart_core.c b/drivers/serial/cpm_uart/cpm_uart_core.c
    --- a/drivers/serial/cpm_uart/cpm_uart_core.c
    +++ b/drivers/serial/cpm_uart/cpm_uart_core.c
    @@ -9,9 +9,10 @@
      *
      *  Maintainer: Kumar Gala (kumar.gala@freescale.com) (CPM2)
      *              Pantelis Antoniou (panto@intracom.gr) (CPM1)
    - * 
    + *
      *  Copyright (C) 2004 Freescale Semiconductor, Inc.
      *            (C) 2004 Intracom, S.A.
    + *            (C) 2005 MontaVista Software, Inc. by Vitaly Bordug <vbordug@ru.mvista.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -70,8 +71,22 @@ static void cpm_uart_initbd(struct uart_
     
     /**************************************************************/
     
    +static inline unsigned long cpu2cpm_addr(void *addr)
    +{
    +	if ((unsigned long)addr >= CPM_ADDR)
    +		return (unsigned long)addr;
    +	return virt_to_bus(addr);
    +}
    +
    +static inline void *cpm2cpu_addr(unsigned long addr)
    +{
    +	if (addr >= CPM_ADDR)
    +		return (void *)addr;
    +	return bus_to_virt(addr);
    +}
    +
     /*
    - * Check, if transmit buffers are processed		
    + * Check, if transmit buffers are processed
     */
     static unsigned int cpm_uart_tx_empty(struct uart_port *port)
     {
    @@ -143,15 +158,18 @@ static void cpm_uart_start_tx(struct uar
     	}
     
     	if (cpm_uart_tx_pump(port) != 0) {
    -		if (IS_SMC(pinfo))
    +		if (IS_SMC(pinfo)) {
     			smcp->smc_smcm |= SMCM_TX;
    -		else
    +			smcp->smc_smcmr |= SMCMR_TEN;
    +		} else {
     			sccp->scc_sccm |= UART_SCCM_TX;
    +			pinfo->sccp->scc_gsmrl |= SCC_GSMRL_ENT;
    +		}
     	}
     }
     
     /*
    - * Stop receiver 
    + * Stop receiver
      */
     static void cpm_uart_stop_rx(struct uart_port *port)
     {
    @@ -176,7 +194,7 @@ static void cpm_uart_enable_ms(struct ua
     }
     
     /*
    - * Generate a break. 
    + * Generate a break.
      */
     static void cpm_uart_break_ctl(struct uart_port *port, int break_state)
     {
    @@ -231,7 +249,7 @@ static void cpm_uart_int_rx(struct uart_
     		/* get number of characters, and check spce in flip-buffer */
     		i = bdp->cbd_datlen;
     
    -		/* If we have not enough room in tty flip buffer, then we try 
    +		/* If we have not enough room in tty flip buffer, then we try
     		 * later, which will be the next rx-interrupt or a timeout
     		 */
     		if ((tty->flip.count + i) >= TTY_FLIPBUF_SIZE) {
    @@ -243,7 +261,7 @@ static void cpm_uart_int_rx(struct uart_
     		}
     
     		/* get pointer */
    -		cp = (unsigned char *)bus_to_virt(bdp->cbd_bufaddr);
    +		cp = cpm2cpu_addr(bdp->cbd_bufaddr);
     
     		/* loop through the buffer */
     		while (i-- > 0) {
    @@ -265,13 +283,14 @@ static void cpm_uart_int_rx(struct uart_
     		}		/* End while (i--) */
     
     		/* This BD is ready to be used again. Clear status. get next */
    -		bdp->cbd_sc &= ~(BD_SC_BR | BD_SC_FR | BD_SC_PR | BD_SC_OV);
    +		bdp->cbd_sc &= ~(BD_SC_BR | BD_SC_FR | BD_SC_PR | BD_SC_OV | BD_SC_ID);
     		bdp->cbd_sc |= BD_SC_EMPTY;
     
     		if (bdp->cbd_sc & BD_SC_WRAP)
     			bdp = pinfo->rx_bd_base;
     		else
     			bdp++;
    +
     	} /* End for (;;) */
     
     	/* Write back buffer pointer */
    @@ -336,22 +355,22 @@ static irqreturn_t cpm_uart_int(int irq,
     
     	if (IS_SMC(pinfo)) {
     		events = smcp->smc_smce;
    +		smcp->smc_smce = events;
     		if (events & SMCM_BRKE)
     			uart_handle_break(port);
     		if (events & SMCM_RX)
     			cpm_uart_int_rx(port, regs);
     		if (events & SMCM_TX)
     			cpm_uart_int_tx(port, regs);
    -		smcp->smc_smce = events;
     	} else {
     		events = sccp->scc_scce;
    +		sccp->scc_scce = events;
     		if (events & UART_SCCM_BRKE)
     			uart_handle_break(port);
     		if (events & UART_SCCM_RX)
     			cpm_uart_int_rx(port, regs);
     		if (events & UART_SCCM_TX)
     			cpm_uart_int_tx(port, regs);
    -		sccp->scc_scce = events;
     	}
     	return (events) ? IRQ_HANDLED : IRQ_NONE;
     }
    @@ -360,6 +379,7 @@ static int cpm_uart_startup(struct uart_
     {
     	int retval;
     	struct uart_cpm_port *pinfo = (struct uart_cpm_port *)port;
    +	int line = pinfo - cpm_uart_ports;
     
     	pr_debug("CPM uart[%d]:startup\n", port->line);
     
    @@ -376,9 +396,19 @@ static int cpm_uart_startup(struct uart_
     		pinfo->sccp->scc_sccm |= UART_SCCM_RX;
     	}
     
    +	if (!(pinfo->flags & FLAG_CONSOLE))
    +		cpm_line_cr_cmd(line,CPM_CR_INIT_TRX);
     	return 0;
     }
     
    +inline void cpm_uart_wait_until_send(struct uart_cpm_port *pinfo)
    +{
    +	unsigned long target_jiffies = jiffies + pinfo->wait_closing;
    +
    +	while (!time_after(jiffies, target_jiffies))
    +   		schedule();
    +}
    +
     /*
      * Shutdown the uart
      */
    @@ -394,6 +424,12 @@ static void cpm_uart_shutdown(struct uar
     
     	/* If the port is not the console, disable Rx and Tx. */
     	if (!(pinfo->flags & FLAG_CONSOLE)) {
    +		/* Wait for all the BDs marked sent */
    +		while(!cpm_uart_tx_empty(port))
    +			schedule_timeout(2);
    +		if(pinfo->wait_closing)
    +			cpm_uart_wait_until_send(pinfo);
    +
     		/* Stop uarts */
     		if (IS_SMC(pinfo)) {
     			volatile smc_t *smcp = pinfo->smcp;
    @@ -502,7 +538,7 @@ static void cpm_uart_set_termios(struct 
     	 */
     	if ((termios->c_cflag & CREAD) == 0)
     		port->read_status_mask &= ~BD_SC_EMPTY;
    -	
    +
     	spin_lock_irqsave(&port->lock, flags);
     
     	/* Start bit has not been added (so don't, because we would just
    @@ -569,7 +605,8 @@ static int cpm_uart_tx_pump(struct uart_
     		/* Pick next descriptor and fill from buffer */
     		bdp = pinfo->tx_cur;
     
    -		p = bus_to_virt(bdp->cbd_bufaddr);
    +		p = cpm2cpu_addr(bdp->cbd_bufaddr);
    +
     		*p++ = xmit->buf[xmit->tail];
     		bdp->cbd_datlen = 1;
     		bdp->cbd_sc |= BD_SC_READY;
    @@ -595,7 +632,7 @@ static int cpm_uart_tx_pump(struct uart_
     
     	while (!(bdp->cbd_sc & BD_SC_READY) && (xmit->tail != xmit->head)) {
     		count = 0;
    -		p = bus_to_virt(bdp->cbd_bufaddr);
    +		p = cpm2cpu_addr(bdp->cbd_bufaddr);
     		while (count < pinfo->tx_fifosize) {
     			*p++ = xmit->buf[xmit->tail];
     			xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
    @@ -606,6 +643,7 @@ static int cpm_uart_tx_pump(struct uart_
     		}
     		bdp->cbd_datlen = count;
     		bdp->cbd_sc |= BD_SC_READY;
    +		__asm__("eieio");
     		/* Get next BD. */
     		if (bdp->cbd_sc & BD_SC_WRAP)
     			bdp = pinfo->tx_bd_base;
    @@ -643,12 +681,12 @@ static void cpm_uart_initbd(struct uart_
     	mem_addr = pinfo->mem_addr;
     	bdp = pinfo->rx_cur = pinfo->rx_bd_base;
     	for (i = 0; i < (pinfo->rx_nrfifos - 1); i++, bdp++) {
    -		bdp->cbd_bufaddr = virt_to_bus(mem_addr);
    +		bdp->cbd_bufaddr = cpu2cpm_addr(mem_addr);
     		bdp->cbd_sc = BD_SC_EMPTY | BD_SC_INTRPT;
     		mem_addr += pinfo->rx_fifosize;
     	}
    -	
    -	bdp->cbd_bufaddr = virt_to_bus(mem_addr);
    +
    +	bdp->cbd_bufaddr = cpu2cpm_addr(mem_addr);
     	bdp->cbd_sc = BD_SC_WRAP | BD_SC_EMPTY | BD_SC_INTRPT;
     
     	/* Set the physical address of the host memory
    @@ -658,12 +696,12 @@ static void cpm_uart_initbd(struct uart_
     	mem_addr = pinfo->mem_addr + L1_CACHE_ALIGN(pinfo->rx_nrfifos * pinfo->rx_fifosize);
     	bdp = pinfo->tx_cur = pinfo->tx_bd_base;
     	for (i = 0; i < (pinfo->tx_nrfifos - 1); i++, bdp++) {
    -		bdp->cbd_bufaddr = virt_to_bus(mem_addr);
    +		bdp->cbd_bufaddr = cpu2cpm_addr(mem_addr);
     		bdp->cbd_sc = BD_SC_INTRPT;
     		mem_addr += pinfo->tx_fifosize;
     	}
    -	
    -	bdp->cbd_bufaddr = virt_to_bus(mem_addr);
    +
    +	bdp->cbd_bufaddr = cpu2cpm_addr(mem_addr);
     	bdp->cbd_sc = BD_SC_WRAP | BD_SC_INTRPT;
     }
     
    @@ -763,6 +801,8 @@ static void cpm_uart_init_smc(struct uar
     	/* Using idle charater time requires some additional tuning.  */
     	up->smc_mrblr = pinfo->rx_fifosize;
     	up->smc_maxidl = pinfo->rx_fifosize;
    +	up->smc_brklen = 0;
    +	up->smc_brkec = 0;
     	up->smc_brkcr = 1;
     
     	cpm_line_cr_cmd(line, CPM_CR_INIT_TRX);
    @@ -796,7 +836,7 @@ static int cpm_uart_request_port(struct 
     	/*
     	 * Setup any port IO, connect any baud rate generators,
     	 * etc.  This is expected to be handled by board
    -	 * dependant code 
    +	 * dependant code
     	 */
     	if (pinfo->set_lineif)
     		pinfo->set_lineif(pinfo);
    @@ -815,6 +855,10 @@ static int cpm_uart_request_port(struct 
     		return ret;
     
     	cpm_uart_initbd(pinfo);
    +	if (IS_SMC(pinfo))
    +		cpm_uart_init_smc(pinfo);
    +	else
    +		cpm_uart_init_scc(pinfo);
     
     	return 0;
     }
    @@ -869,7 +913,7 @@ struct uart_cpm_port cpm_uart_ports[UART
     		.flags = FLAG_SMC,
     		.tx_nrfifos = TX_NUM_FIFO,
     		.tx_fifosize = TX_BUF_SIZE,
    -		.rx_nrfifos = RX_NUM_FIFO, 
    +		.rx_nrfifos = RX_NUM_FIFO,
     		.rx_fifosize = RX_BUF_SIZE,
     		.set_lineif = smc1_lineif,
     	},
    @@ -883,7 +927,7 @@ struct uart_cpm_port cpm_uart_ports[UART
     		.flags = FLAG_SMC,
     		.tx_nrfifos = TX_NUM_FIFO,
     		.tx_fifosize = TX_BUF_SIZE,
    -		.rx_nrfifos = RX_NUM_FIFO, 
    +		.rx_nrfifos = RX_NUM_FIFO,
     		.rx_fifosize = RX_BUF_SIZE,
     		.set_lineif = smc2_lineif,
     #ifdef CONFIG_SERIAL_CPM_ALT_SMC2
    @@ -899,9 +943,10 @@ struct uart_cpm_port cpm_uart_ports[UART
     		},
     		.tx_nrfifos = TX_NUM_FIFO,
     		.tx_fifosize = TX_BUF_SIZE,
    -		.rx_nrfifos = RX_NUM_FIFO, 
    +		.rx_nrfifos = RX_NUM_FIFO,
     		.rx_fifosize = RX_BUF_SIZE,
     		.set_lineif = scc1_lineif,
    +		.wait_closing = SCC_WAIT_CLOSING,
     	},
     	[UART_SCC2] = {
     		.port = {
    @@ -912,9 +957,10 @@ struct uart_cpm_port cpm_uart_ports[UART
     		},
     		.tx_nrfifos = TX_NUM_FIFO,
     		.tx_fifosize = TX_BUF_SIZE,
    -		.rx_nrfifos = RX_NUM_FIFO, 
    +		.rx_nrfifos = RX_NUM_FIFO,
     		.rx_fifosize = RX_BUF_SIZE,
     		.set_lineif = scc2_lineif,
    +		.wait_closing = SCC_WAIT_CLOSING,
     	},
     	[UART_SCC3] = {
     		.port = {
    @@ -925,9 +971,10 @@ struct uart_cpm_port cpm_uart_ports[UART
     		},
     		.tx_nrfifos = TX_NUM_FIFO,
     		.tx_fifosize = TX_BUF_SIZE,
    -		.rx_nrfifos = RX_NUM_FIFO, 
    +		.rx_nrfifos = RX_NUM_FIFO,
     		.rx_fifosize = RX_BUF_SIZE,
     		.set_lineif = scc3_lineif,
    +		.wait_closing = SCC_WAIT_CLOSING,
     	},
     	[UART_SCC4] = {
     		.port = {
    @@ -938,9 +985,10 @@ struct uart_cpm_port cpm_uart_ports[UART
     		},
     		.tx_nrfifos = TX_NUM_FIFO,
     		.tx_fifosize = TX_BUF_SIZE,
    -		.rx_nrfifos = RX_NUM_FIFO, 
    +		.rx_nrfifos = RX_NUM_FIFO,
     		.rx_fifosize = RX_BUF_SIZE,
     		.set_lineif = scc4_lineif,
    +		.wait_closing = SCC_WAIT_CLOSING,
     	},
     };
     
    @@ -983,11 +1031,8 @@ static void cpm_uart_console_write(struc
     		 * If the buffer address is in the CPM DPRAM, don't
     		 * convert it.
     		 */
    -		if ((uint) (bdp->cbd_bufaddr) > (uint) CPM_ADDR)
    -			cp = (unsigned char *) (bdp->cbd_bufaddr);
    -		else
    -			cp = bus_to_virt(bdp->cbd_bufaddr);
    -		
    +		cp = cpm2cpu_addr(bdp->cbd_bufaddr);
    +
     		*cp = *s;
     
     		bdp->cbd_datlen = 1;
    @@ -1003,10 +1048,7 @@ static void cpm_uart_console_write(struc
     			while ((bdp->cbd_sc & BD_SC_READY) != 0)
     				;
     
    -			if ((uint) (bdp->cbd_bufaddr) > (uint) CPM_ADDR)
    -				cp = (unsigned char *) (bdp->cbd_bufaddr);
    -			else
    -				cp = bus_to_virt(bdp->cbd_bufaddr);
    +			cp = cpm2cpu_addr(bdp->cbd_bufaddr);
     
     			*cp = 13;
     			bdp->cbd_datlen = 1;
    @@ -1045,7 +1087,7 @@ static int __init cpm_uart_console_setup
     	port =
     	    (struct uart_port *)&cpm_uart_ports[cpm_uart_port_map[co->index]];
     	pinfo = (struct uart_cpm_port *)port;
    -	
    +
     	pinfo->flags |= FLAG_CONSOLE;
     
     	if (options) {
    @@ -1062,7 +1104,7 @@ static int __init cpm_uart_console_setup
     	/*
     	 * Setup any port IO, connect any baud rate generators,
     	 * etc.  This is expected to be handled by board
    -	 * dependant code 
    +	 * dependant code
     	 */
     	if (pinfo->set_lineif)
     		pinfo->set_lineif(pinfo);
    diff --git a/drivers/serial/cpm_uart/cpm_uart_cpm1.c b/drivers/serial/cpm_uart/cpm_uart_cpm1.c
    --- a/drivers/serial/cpm_uart/cpm_uart_cpm1.c
    +++ b/drivers/serial/cpm_uart/cpm_uart_cpm1.c
    @@ -5,7 +5,7 @@
      *
      *  Maintainer: Kumar Gala (kumar.gala@freescale.com) (CPM2)
      *              Pantelis Antoniou (panto@intracom.gr) (CPM1)
    - * 
    + *
      *  Copyright (C) 2004 Freescale Semiconductor, Inc.
      *            (C) 2004 Intracom, S.A.
      *
    @@ -82,6 +82,17 @@ void cpm_line_cr_cmd(int line, int cmd)
     void smc1_lineif(struct uart_cpm_port *pinfo)
     {
     	volatile cpm8xx_t *cp = cpmp;
    +
    +	(void)cp;	/* fix warning */
    +#if defined (CONFIG_MPC885ADS)
    +	/* Enable SMC1 transceivers */
    +	{
    +		cp->cp_pepar |= 0x000000c0;
    +		cp->cp_pedir &= ~0x000000c0;
    +		cp->cp_peso &= ~0x00000040;
    +		cp->cp_peso |= 0x00000080;
    +	}
    +#elif defined (CONFIG_MPC86XADS)
     	unsigned int iobits = 0x000000c0;
     
     	if (!pinfo->is_portb) {
    @@ -93,41 +104,33 @@ void smc1_lineif(struct uart_cpm_port *p
     		((immap_t *)IMAP_ADDR)->im_ioport.iop_padir &= ~iobits;
     		((immap_t *)IMAP_ADDR)->im_ioport.iop_paodr &= ~iobits;
     	}
    -
    -#ifdef CONFIG_MPC885ADS
    -	/* Enable SMC1 transceivers */
    -	{
    -		volatile uint __iomem *bcsr1 = ioremap(BCSR1, 4);
    -		uint tmp;
    -
    -		tmp = in_be32(bcsr1);
    -		tmp &= ~BCSR1_RS232EN_1;
    -		out_be32(bcsr1, tmp);
    -		iounmap(bcsr1);
    -	}
     #endif
    -
     	pinfo->brg = 1;
     }
     
     void smc2_lineif(struct uart_cpm_port *pinfo)
     {
    -#ifdef CONFIG_MPC885ADS
     	volatile cpm8xx_t *cp = cpmp;
    -	volatile uint __iomem *bcsr1;
    -	uint tmp;
     
    +	(void)cp;	/* fix warning */
    +#if defined (CONFIG_MPC885ADS)
     	cp->cp_pepar |= 0x00000c00;
     	cp->cp_pedir &= ~0x00000c00;
     	cp->cp_peso &= ~0x00000400;
     	cp->cp_peso |= 0x00000800;
    +#elif defined (CONFIG_MPC86XADS)
    +	unsigned int iobits = 0x00000c00;
    +
    +	if (!pinfo->is_portb) {
    +		cp->cp_pbpar |= iobits;
    +		cp->cp_pbdir &= ~iobits;
    +		cp->cp_pbodr &= ~iobits;
    +	} else {
    +		((immap_t *)IMAP_ADDR)->im_ioport.iop_papar |= iobits;
    +		((immap_t *)IMAP_ADDR)->im_ioport.iop_padir &= ~iobits;
    +		((immap_t *)IMAP_ADDR)->im_ioport.iop_paodr &= ~iobits;
    +	}
     
    -	/* Enable SMC2 transceivers */
    -	bcsr1 = ioremap(BCSR1, 4);
    -	tmp = in_be32(bcsr1);
    -	tmp &= ~BCSR1_RS232EN_2;
    -	out_be32(bcsr1, tmp);
    -	iounmap(bcsr1);
     #endif
     
     	pinfo->brg = 2;
    @@ -158,7 +161,7 @@ void scc4_lineif(struct uart_cpm_port *p
     }
     
     /*
    - * Allocate DP-Ram and memory buffers. We need to allocate a transmit and 
    + * Allocate DP-Ram and memory buffers. We need to allocate a transmit and
      * receive buffer descriptors from dual port ram, and a character
      * buffer area from host mem. If we are allocating for the console we need
      * to do it from bootmem
    @@ -185,6 +188,8 @@ int cpm_uart_allocbuf(struct uart_cpm_po
     	memsz = L1_CACHE_ALIGN(pinfo->rx_nrfifos * pinfo->rx_fifosize) +
     	    L1_CACHE_ALIGN(pinfo->tx_nrfifos * pinfo->tx_fifosize);
     	if (is_con) {
    +		/* was hostalloc but changed cause it blows away the */
    +		/* large tlb mapping when pinning the kernel area    */
     		mem_addr = (u8 *) cpm_dpram_addr(cpm_dpalloc(memsz, 8));
     		dma_addr = 0;
     	} else
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at  http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at  http://www.tux.org/lkml/
    

  • Next message: Kumar Gala: "[PATCH] cpm_uart: needs some love to compile with GCC4.0.1"

    Relevant Pages

    • Re: Thorny Serial Comms "UART: Overrun" error Windows CE 5.0
      ... in my case I am actually looping back from one COM port ... I don't know if it is the serial driver or the UART. ... errorFlags has the OVERRUN bit set. ... > Do you know if it's the UART's FIFO buffer or the Serial Driver's ...
      (microsoft.public.windowsce.platbuilder)
    • Re: How to avoid serial port buffer overruns?
      ... port buffer overruns quite easily if I use a baudrate high enough (I start ... the way to avoid overruns on a serial port was to use ... a buffered serial port UART. ...
      (Linux-Kernel)
    • Re: interthread communication
      ... Since this is a writer thread, typically you will PostThreadMessage to it for each packet ... Note that if you have a serial port you must open it for asynchronous I/O. ... of the buffer in via a PostThreadMessage, so using a single variable cannot make sense. ...
      (microsoft.public.vc.mfc)
    • Re: Access violation with heap memory
      ... I'm getting a runtime access violation using heap memory that was ... Now, when I try to access the buffer in the main function, I ... Why are you using 'char'? ... Note that there is no need to allocate storage until you are in the FillBuf, ...
      (microsoft.public.vc.mfc)
    • Re: [PATCH 0/3]HTLB mapping for drivers (take 2)
      ... It sounds like this patch set working towards the same goal as my ... so the buffer is in normal memory. ... is responsible for populating a buffer for sending to a device. ... Allocate memory. ...
      (Linux-Kernel)