Lines Matching full:device
40 /* PPC405 serial device */
43 /* inherit from device */
56 /* serial character device */
64 struct rt_ppc405_serial* device; in rt_serial_open() local
65 device = (struct rt_ppc405_serial*) dev; in rt_serial_open()
67 RT_ASSERT(device != RT_NULL); in rt_serial_open()
71 out_8((rt_uint8_t*)device->hw_base + UART_IER, 0x01); in rt_serial_open()
73 out_8((rt_uint8_t*)device->hw_base + UART_FCR, 1); in rt_serial_open()
76 rt_hw_interrupt_unmask(device->irqno); in rt_serial_open()
84 struct rt_ppc405_serial* device; in rt_serial_close() local
85 device = (struct rt_ppc405_serial*) dev; in rt_serial_close()
87 RT_ASSERT(device != RT_NULL); in rt_serial_close()
91 rt_hw_interrupt_mask(device->irqno); in rt_serial_close()
105 struct rt_ppc405_serial* device; in rt_serial_read() local
107 device = (struct rt_ppc405_serial*) dev; in rt_serial_read()
108 RT_ASSERT(device != RT_NULL); in rt_serial_read()
122 if (device->read_index != device->save_index) in rt_serial_read()
124 *ptr = device->rx_buffer[device->read_index]; in rt_serial_read()
126 device->read_index ++; in rt_serial_read()
127 if (device->read_index >= RT_UART_RX_BUFFER_SIZE) in rt_serial_read()
128 device->read_index = 0; in rt_serial_read()
162 struct rt_ppc405_serial* device; in rt_serial_write() local
164 device = (struct rt_ppc405_serial*) dev; in rt_serial_write()
165 RT_ASSERT(device != RT_NULL); in rt_serial_write()
188 while ((in_8((rt_uint8_t*)device->hw_base + UART_LSR) & 0x20) != 0x20); in rt_serial_write()
189 out_8((rt_uint8_t*)device->hw_base + UART_THR, '\r'); in rt_serial_write()
192 while ((in_8((rt_uint8_t*)device->hw_base + UART_LSR) & 0x20) != 0x20); in rt_serial_write()
193 out_8((rt_uint8_t*)device->hw_base + UART_THR, *ptr); in rt_serial_write()
203 while ((in_8((rt_uint8_t*)device->hw_base + UART_LSR) & 0x20) != 0x20); in rt_serial_write()
204 out_8((rt_uint8_t*)device->hw_base + UART_THR, *ptr); in rt_serial_write()
214 void rt_serial_set_baudrate(struct rt_ppc405_serial* device) in rt_serial_set_baudrate() argument
219 out_8((rt_uint8_t *)device->hw_base + UART_DLL, bdiv); /* set baudrate divisor */ in rt_serial_set_baudrate()
220 out_8((rt_uint8_t *)device->hw_base + UART_DLM, bdiv >> 8); /* set baudrate divisor */ in rt_serial_set_baudrate()
226 struct rt_ppc405_serial *device; in rt_serial_isr() local
228 device = (struct rt_ppc405_serial*) param; in rt_serial_isr()
229 status = in_8((rt_uint8_t *)device->hw_base + UART_LSR); in rt_serial_isr()
241 device->rx_buffer[device->save_index] = (0xff & (int) in_8((rt_uint8_t *)device->hw_base)); in rt_serial_isr()
242 device->save_index ++; in rt_serial_isr()
243 if (device->save_index >= RT_UART_RX_BUFFER_SIZE) in rt_serial_isr()
244 device->save_index = 0; in rt_serial_isr()
247 if (device->save_index == device->read_index) in rt_serial_isr()
249 device->read_index ++; in rt_serial_isr()
250 if (device->read_index >= RT_UART_RX_BUFFER_SIZE) in rt_serial_isr()
251 device->read_index = 0; in rt_serial_isr()
263 out_8((rt_uint8_t *)device->hw_base + UART_LSR, in rt_serial_isr()
270 status = in_8((rt_uint8_t *)device->hw_base + UART_LSR); in rt_serial_isr()
274 if(device->parent.rx_indicate != RT_NULL) in rt_serial_isr()
276 device->parent.rx_indicate(&device->parent, 1); in rt_serial_isr()
284 struct rt_ppc405_serial* device; in rt_hw_serial_init() local
286 device = (struct rt_ppc405_serial*) &ppc405_serial; in rt_hw_serial_init()
287 device->parent.type = RT_Device_Class_Char; in rt_hw_serial_init()
289 device->hw_base = UART0_BASE; in rt_hw_serial_init()
290 device->baudrate = 115200; in rt_hw_serial_init()
291 device->irqno = VECNUM_U0; in rt_hw_serial_init()
292 rt_hw_interrupt_install(device->irqno, rt_serial_isr, device, "serial"); /* install isr */ in rt_hw_serial_init()
294 rt_memset(device->rx_buffer, 0, sizeof(device->rx_buffer)); in rt_hw_serial_init()
295 device->read_index = device->save_index = 0; in rt_hw_serial_init()
297 out_8((rt_uint8_t *)device->hw_base + UART_LCR, 0x80); /* set DLAB bit */ in rt_hw_serial_init()
299 rt_serial_set_baudrate(device); in rt_hw_serial_init()
300 out_8((rt_uint8_t *)device->hw_base + UART_LCR, 0x03); /* clear DLAB; set 8 bits, no parity */ in rt_hw_serial_init()
301 out_8((rt_uint8_t *)device->hw_base + UART_FCR, 0x00); /* disable FIFO */ in rt_hw_serial_init()
302 out_8((rt_uint8_t *)device->hw_base + UART_MCR, 0x00); /* no modem control DTR RTS */ in rt_hw_serial_init()
303 val = in_8((rt_uint8_t *)device->hw_base + UART_LSR); /* clear line status */ in rt_hw_serial_init()
304 val = in_8((rt_uint8_t *)device->hw_base + UART_RBR); /* read receive buffer */ in rt_hw_serial_init()
305 out_8((rt_uint8_t *)device->hw_base + UART_SCR, 0x00); /* set scratchpad */ in rt_hw_serial_init()
306 out_8((rt_uint8_t *)device->hw_base + UART_IER, 0x00); /* set interrupt enable reg */ in rt_hw_serial_init()
308 device->parent.type = RT_Device_Class_Char; in rt_hw_serial_init()
309 device->parent.init = rt_serial_init; in rt_hw_serial_init()
310 device->parent.open = rt_serial_open; in rt_hw_serial_init()
311 device->parent.close = rt_serial_close; in rt_hw_serial_init()
312 device->parent.read = rt_serial_read; in rt_hw_serial_init()
313 device->parent.write = rt_serial_write; in rt_hw_serial_init()
314 device->parent.control = rt_serial_control; in rt_hw_serial_init()
315 device->parent.user_data = RT_NULL; in rt_hw_serial_init()
317 rt_device_register(&device->parent, in rt_hw_serial_init()