static int __register_serial(struct serial_struct *req, int line)
{
	struct uart_port port;

	port.iobase   = req->port;
	port.membase  = req->iomem_base;
	port.irq      = req->irq;
	port.uartclk  = req->baud_base * 16;
	port.fifosize = req->xmit_fifo_size;
	port.regshift = req->iomem_reg_shift;
	port.iotype   = req->io_type;
	port.flags    = req->flags | UPF_BOOT_AUTOCONF;
	port.mapbase  = req->iomap_base;
	port.line     = line;

	if (HIGH_BITS_OFFSET)
		port.iobase |= (long) req->port_high << HIGH_BITS_OFFSET;

	/*
	 * If a clock rate wasn't specified by the low level
	 * driver, then default to the standard clock rate.
	 */
	if (port.uartclk == 0)
		port.uartclk = BASE_BAUD * 16;

	return uart_register_port(&serial8250_reg, &port);
}
int uart00_add_device(struct pldhs_dev_info* dev_info, void* dev_ps_data)
{
	struct uart00_ps_data* dev_ps=dev_ps_data;
	struct uart_port * port;
	int i,result;

	i=0;
	while(dev_port_map[i].port)
		i++;

	if(i==UART_NR){
		printk(KERN_WARNING "uart00: Maximum number of ports reached\n");
		return 0;
	}

	port=&uart00_ports[i];

	printk("clk=%d fifo=%d\n",dev_ps->clk,dev_ps->fifosize);
	port->membase=0;
	port->mapbase=dev_info->base_addr;
	port->iotype=SERIAL_IO_MEM;
	port->irq=dev_info->irq;
	port->uartclk=dev_ps->clk;
	port->fifosize=dev_ps->fifosize;
	port->ops=&uart00_pops;
	port->line=i;
	port->flags=ASYNC_BOOT_AUTOCONF;

	result=uart_register_port(&uart00_reg, port);
	if(result<0){
		printk("uart_register_port returned %d\n",result);
		return result;
	}
	dev_port_map[i].port=port;
	printk("uart00: added device at %lx as ttyUA%d\n",dev_port_map[i].port->mapbase,i);
	return 0;

}