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; }