Lines Matching +full:rx +full:- +full:level +full:- +full:trig

1 // SPDX-License-Identifier: GPL-2.0-only
27 * vuart - An inter-partition data link service.
31 * The vuart provides a bi-directional byte stream data link between logical
63 * struct ps3_vuart_port_priv - private vuart device data.
86 BUG_ON(!dev->driver_priv); in to_port_priv()
87 return (struct ps3_vuart_port_priv *)dev->driver_priv; in to_port_priv()
91 * struct ports_bmp - bitmap indicating ports needing service.
106 pr_debug("%s:%d: ports_bmp: %016llxh\n", func, line, bmp->status); in _dump_ports_bmp()
143 struct vuart_triggers *trig) in ps3_vuart_get_triggers() argument
150 result = lv1_get_virtual_uart_param(dev->port_number, in ps3_vuart_get_triggers()
152 trig->tx = tx; in ps3_vuart_get_triggers()
155 dev_dbg(&dev->core, "%s:%d: tx_trigger failed: %s\n", in ps3_vuart_get_triggers()
160 result = lv1_get_virtual_uart_param(dev->port_number, in ps3_vuart_get_triggers()
164 dev_dbg(&dev->core, "%s:%d: tx_buf_size failed: %s\n", in ps3_vuart_get_triggers()
169 result = lv1_get_virtual_uart_param(dev->port_number, in ps3_vuart_get_triggers()
173 dev_dbg(&dev->core, "%s:%d: rx_trigger failed: %s\n", in ps3_vuart_get_triggers()
178 trig->rx = size - val; in ps3_vuart_get_triggers()
180 dev_dbg(&dev->core, "%s:%d: tx %lxh, rx %lxh\n", __func__, __LINE__, in ps3_vuart_get_triggers()
181 trig->tx, trig->rx); in ps3_vuart_get_triggers()
187 unsigned int rx) in ps3_vuart_set_triggers() argument
192 result = lv1_set_virtual_uart_param(dev->port_number, in ps3_vuart_set_triggers()
196 dev_dbg(&dev->core, "%s:%d: tx_trigger failed: %s\n", in ps3_vuart_set_triggers()
201 result = lv1_get_virtual_uart_param(dev->port_number, in ps3_vuart_set_triggers()
205 dev_dbg(&dev->core, "%s:%d: tx_buf_size failed: %s\n", in ps3_vuart_set_triggers()
210 result = lv1_set_virtual_uart_param(dev->port_number, in ps3_vuart_set_triggers()
211 PARAM_RX_TRIGGER, size - rx); in ps3_vuart_set_triggers()
214 dev_dbg(&dev->core, "%s:%d: rx_trigger failed: %s\n", in ps3_vuart_set_triggers()
219 dev_dbg(&dev->core, "%s:%d: tx %xh, rx %xh\n", __func__, __LINE__, in ps3_vuart_set_triggers()
220 tx, rx); in ps3_vuart_set_triggers()
230 result = lv1_get_virtual_uart_param(dev->port_number, in ps3_vuart_get_rx_bytes_waiting()
234 dev_dbg(&dev->core, "%s:%d: rx_bytes failed: %s\n", in ps3_vuart_get_rx_bytes_waiting()
237 dev_dbg(&dev->core, "%s:%d: %llxh\n", __func__, __LINE__, in ps3_vuart_get_rx_bytes_waiting()
243 * ps3_vuart_set_interrupt_mask - Enable/disable the port interrupt sources.
254 dev_dbg(&dev->core, "%s:%d: %lxh\n", __func__, __LINE__, mask); in ps3_vuart_set_interrupt_mask()
256 priv->interrupt_mask = mask; in ps3_vuart_set_interrupt_mask()
258 result = lv1_set_virtual_uart_param(dev->port_number, in ps3_vuart_set_interrupt_mask()
259 PARAM_INTERRUPT_MASK, priv->interrupt_mask); in ps3_vuart_set_interrupt_mask()
262 dev_dbg(&dev->core, "%s:%d: interrupt_mask failed: %s\n", in ps3_vuart_set_interrupt_mask()
275 result = lv1_get_virtual_uart_param(dev->port_number, in ps3_vuart_get_interrupt_status()
279 dev_dbg(&dev->core, "%s:%d: interrupt_status failed: %s\n", in ps3_vuart_get_interrupt_status()
282 *status = tmp & priv->interrupt_mask; in ps3_vuart_get_interrupt_status()
284 dev_dbg(&dev->core, "%s:%d: m %llxh, s %llxh, m&s %lxh\n", in ps3_vuart_get_interrupt_status()
285 __func__, __LINE__, priv->interrupt_mask, tmp, *status); in ps3_vuart_get_interrupt_status()
294 return (priv->interrupt_mask & INTERRUPT_MASK_TX) ? 0 in ps3_vuart_enable_interrupt_tx()
295 : ps3_vuart_set_interrupt_mask(dev, priv->interrupt_mask in ps3_vuart_enable_interrupt_tx()
303 return (priv->interrupt_mask & INTERRUPT_MASK_RX) ? 0 in ps3_vuart_enable_interrupt_rx()
304 : ps3_vuart_set_interrupt_mask(dev, priv->interrupt_mask in ps3_vuart_enable_interrupt_rx()
312 return (priv->interrupt_mask & INTERRUPT_MASK_DISCONNECT) ? 0 in ps3_vuart_enable_interrupt_disconnect()
313 : ps3_vuart_set_interrupt_mask(dev, priv->interrupt_mask in ps3_vuart_enable_interrupt_disconnect()
321 return (priv->interrupt_mask & INTERRUPT_MASK_TX) in ps3_vuart_disable_interrupt_tx()
322 ? ps3_vuart_set_interrupt_mask(dev, priv->interrupt_mask in ps3_vuart_disable_interrupt_tx()
330 return (priv->interrupt_mask & INTERRUPT_MASK_RX) in ps3_vuart_disable_interrupt_rx()
331 ? ps3_vuart_set_interrupt_mask(dev, priv->interrupt_mask in ps3_vuart_disable_interrupt_rx()
339 return (priv->interrupt_mask & INTERRUPT_MASK_DISCONNECT) in ps3_vuart_disable_interrupt_disconnect()
340 ? ps3_vuart_set_interrupt_mask(dev, priv->interrupt_mask in ps3_vuart_disable_interrupt_disconnect()
345 * ps3_vuart_raw_write - Low level write helper.
357 result = lv1_write_virtual_uart(dev->port_number, in ps3_vuart_raw_write()
361 dev_warn(&dev->core, "%s:%d: lv1_write_virtual_uart failed: " in ps3_vuart_raw_write()
366 priv->stats.bytes_written += *bytes_written; in ps3_vuart_raw_write()
368 dev_dbg(&dev->core, "%s:%d: wrote %llxh/%xh=>%lxh\n", __func__, __LINE__, in ps3_vuart_raw_write()
369 *bytes_written, bytes, priv->stats.bytes_written); in ps3_vuart_raw_write()
375 * ps3_vuart_raw_read - Low level read helper.
387 dev_dbg(&dev->core, "%s:%d: %xh\n", __func__, __LINE__, bytes); in ps3_vuart_raw_read()
389 result = lv1_read_virtual_uart(dev->port_number, in ps3_vuart_raw_read()
393 dev_dbg(&dev->core, "%s:%d: lv1_read_virtual_uart failed: %s\n", in ps3_vuart_raw_read()
398 priv->stats.bytes_read += *bytes_read; in ps3_vuart_raw_read()
400 dev_dbg(&dev->core, "%s:%d: read %llxh/%xh=>%lxh\n", __func__, __LINE__, in ps3_vuart_raw_read()
401 *bytes_read, bytes, priv->stats.bytes_read); in ps3_vuart_raw_read()
407 * ps3_vuart_clear_rx_bytes - Discard bytes received.
411 * Used to clear pending rx interrupt source. Will not block.
428 dev_dbg(&dev->core, "%s:%d: %u\n", __func__, __LINE__, bytes); in ps3_vuart_clear_rx_bytes()
448 priv->stats.bytes_read -= bytes_waiting; in ps3_vuart_clear_rx_bytes()
453 * struct list_buffer - An element for a port device fifo buffer list.
465 * ps3_vuart_write - the entry point for writing data to a port
483 dev_dbg(&dev->core, "%s:%d: %u(%xh) bytes\n", __func__, __LINE__, in ps3_vuart_write()
486 spin_lock_irqsave(&priv->tx_list.lock, flags); in ps3_vuart_write()
488 if (list_empty(&priv->tx_list.head)) { in ps3_vuart_write()
493 spin_unlock_irqrestore(&priv->tx_list.lock, flags); in ps3_vuart_write()
496 dev_dbg(&dev->core, in ps3_vuart_write()
503 dev_dbg(&dev->core, "%s:%d: wrote %xh bytes\n", in ps3_vuart_write()
508 bytes -= bytes_written; in ps3_vuart_write()
511 spin_unlock_irqrestore(&priv->tx_list.lock, flags); in ps3_vuart_write()
516 return -ENOMEM; in ps3_vuart_write()
518 memcpy(lb->data, buf, bytes); in ps3_vuart_write()
519 lb->head = lb->data; in ps3_vuart_write()
520 lb->tail = lb->data + bytes; in ps3_vuart_write()
521 lb->dbg_number = ++dbg_number; in ps3_vuart_write()
523 spin_lock_irqsave(&priv->tx_list.lock, flags); in ps3_vuart_write()
524 list_add_tail(&lb->link, &priv->tx_list.head); in ps3_vuart_write()
526 spin_unlock_irqrestore(&priv->tx_list.lock, flags); in ps3_vuart_write()
528 dev_dbg(&dev->core, "%s:%d: queued buf_%lu, %xh bytes\n", in ps3_vuart_write()
529 __func__, __LINE__, lb->dbg_number, bytes); in ps3_vuart_write()
536 * ps3_vuart_queue_rx_bytes - Queue waiting bytes into the buffer list.
540 * Must be called with priv->rx_list.lock held.
558 return -EIO; in ps3_vuart_queue_rx_bytes()
570 return -ENOMEM; in ps3_vuart_queue_rx_bytes()
572 ps3_vuart_raw_read(dev, lb->data, bytes, &bytes); in ps3_vuart_queue_rx_bytes()
574 lb->head = lb->data; in ps3_vuart_queue_rx_bytes()
575 lb->tail = lb->data + bytes; in ps3_vuart_queue_rx_bytes()
576 lb->dbg_number = ++dbg_number; in ps3_vuart_queue_rx_bytes()
578 list_add_tail(&lb->link, &priv->rx_list.head); in ps3_vuart_queue_rx_bytes()
579 priv->rx_list.bytes_held += bytes; in ps3_vuart_queue_rx_bytes()
581 dev_dbg(&dev->core, "%s:%d: buf_%lu: queued %llxh bytes\n", in ps3_vuart_queue_rx_bytes()
582 __func__, __LINE__, lb->dbg_number, bytes); in ps3_vuart_queue_rx_bytes()
590 * ps3_vuart_read - The entry point for reading data from a port.
595 * be statified by bytes held in the list buffers -EAGAIN is returned.
607 dev_dbg(&dev->core, "%s:%d: %u(%xh) bytes\n", __func__, __LINE__, in ps3_vuart_read()
610 spin_lock_irqsave(&priv->rx_list.lock, flags); in ps3_vuart_read()
612 /* Queue rx bytes here for polled reads. */ in ps3_vuart_read()
614 while (priv->rx_list.bytes_held < bytes) { in ps3_vuart_read()
619 dev_dbg(&dev->core, "%s:%d: starved for %lxh bytes\n", in ps3_vuart_read()
621 bytes - priv->rx_list.bytes_held); in ps3_vuart_read()
622 spin_unlock_irqrestore(&priv->rx_list.lock, flags); in ps3_vuart_read()
623 return -EAGAIN; in ps3_vuart_read()
627 list_for_each_entry_safe(lb, n, &priv->rx_list.head, link) { in ps3_vuart_read()
628 bytes_read = min((unsigned int)(lb->tail - lb->head), bytes); in ps3_vuart_read()
630 memcpy(buf, lb->head, bytes_read); in ps3_vuart_read()
632 bytes -= bytes_read; in ps3_vuart_read()
633 priv->rx_list.bytes_held -= bytes_read; in ps3_vuart_read()
635 if (bytes_read < lb->tail - lb->head) { in ps3_vuart_read()
636 lb->head += bytes_read; in ps3_vuart_read()
637 dev_dbg(&dev->core, "%s:%d: buf_%lu: dequeued %lxh " in ps3_vuart_read()
638 "bytes\n", __func__, __LINE__, lb->dbg_number, in ps3_vuart_read()
640 spin_unlock_irqrestore(&priv->rx_list.lock, flags); in ps3_vuart_read()
644 dev_dbg(&dev->core, "%s:%d: buf_%lu: free, dequeued %lxh " in ps3_vuart_read()
645 "bytes\n", __func__, __LINE__, lb->dbg_number, in ps3_vuart_read()
648 list_del(&lb->link); in ps3_vuart_read()
652 spin_unlock_irqrestore(&priv->rx_list.lock, flags); in ps3_vuart_read()
658 * ps3_vuart_work - Asynchronous read handler.
669 drv->work(dev); in ps3_vuart_work()
677 if (priv->rx_list.work.trigger) { in ps3_vuart_read_async()
678 dev_dbg(&dev->core, "%s:%d: warning, multiple calls\n", in ps3_vuart_read_async()
680 return -EAGAIN; in ps3_vuart_read_async()
685 spin_lock_irqsave(&priv->rx_list.lock, flags); in ps3_vuart_read_async()
686 if (priv->rx_list.bytes_held >= bytes) { in ps3_vuart_read_async()
687 dev_dbg(&dev->core, "%s:%d: schedule_work %xh bytes\n", in ps3_vuart_read_async()
689 schedule_work(&priv->rx_list.work.work); in ps3_vuart_read_async()
690 spin_unlock_irqrestore(&priv->rx_list.lock, flags); in ps3_vuart_read_async()
694 priv->rx_list.work.trigger = bytes; in ps3_vuart_read_async()
695 spin_unlock_irqrestore(&priv->rx_list.lock, flags); in ps3_vuart_read_async()
697 dev_dbg(&dev->core, "%s:%d: waiting for %u(%xh) bytes\n", __func__, in ps3_vuart_read_async()
706 to_port_priv(dev)->rx_list.work.trigger = 0; in ps3_vuart_cancel_async()
711 * ps3_vuart_handle_interrupt_tx - third stage transmit interrupt handler
726 dev_dbg(&dev->core, "%s:%d\n", __func__, __LINE__); in ps3_vuart_handle_interrupt_tx()
728 spin_lock_irqsave(&priv->tx_list.lock, flags); in ps3_vuart_handle_interrupt_tx()
730 list_for_each_entry_safe(lb, n, &priv->tx_list.head, link) { in ps3_vuart_handle_interrupt_tx()
734 result = ps3_vuart_raw_write(dev, lb->head, lb->tail - lb->head, in ps3_vuart_handle_interrupt_tx()
738 dev_dbg(&dev->core, in ps3_vuart_handle_interrupt_tx()
746 if (bytes_written < lb->tail - lb->head) { in ps3_vuart_handle_interrupt_tx()
747 lb->head += bytes_written; in ps3_vuart_handle_interrupt_tx()
748 dev_dbg(&dev->core, in ps3_vuart_handle_interrupt_tx()
750 __func__, __LINE__, lb->dbg_number, in ps3_vuart_handle_interrupt_tx()
755 dev_dbg(&dev->core, "%s:%d free buf_%lu\n", __func__, __LINE__, in ps3_vuart_handle_interrupt_tx()
756 lb->dbg_number); in ps3_vuart_handle_interrupt_tx()
758 list_del(&lb->link); in ps3_vuart_handle_interrupt_tx()
764 spin_unlock_irqrestore(&priv->tx_list.lock, flags); in ps3_vuart_handle_interrupt_tx()
765 dev_dbg(&dev->core, "%s:%d wrote %lxh bytes total\n", in ps3_vuart_handle_interrupt_tx()
771 * ps3_vuart_handle_interrupt_rx - third stage receive interrupt handler
785 dev_dbg(&dev->core, "%s:%d\n", __func__, __LINE__); in ps3_vuart_handle_interrupt_rx()
787 spin_lock_irqsave(&priv->rx_list.lock, flags); in ps3_vuart_handle_interrupt_rx()
791 spin_unlock_irqrestore(&priv->rx_list.lock, flags); in ps3_vuart_handle_interrupt_rx()
795 if (priv->rx_list.work.trigger && priv->rx_list.bytes_held in ps3_vuart_handle_interrupt_rx()
796 >= priv->rx_list.work.trigger) { in ps3_vuart_handle_interrupt_rx()
797 dev_dbg(&dev->core, "%s:%d: schedule_work %lxh bytes\n", in ps3_vuart_handle_interrupt_rx()
798 __func__, __LINE__, priv->rx_list.work.trigger); in ps3_vuart_handle_interrupt_rx()
799 priv->rx_list.work.trigger = 0; in ps3_vuart_handle_interrupt_rx()
800 schedule_work(&priv->rx_list.work.work); in ps3_vuart_handle_interrupt_rx()
803 spin_unlock_irqrestore(&priv->rx_list.lock, flags); in ps3_vuart_handle_interrupt_rx()
810 dev_dbg(&dev->core, "%s:%d\n", __func__, __LINE__); in ps3_vuart_handle_interrupt_disconnect()
812 return -1; in ps3_vuart_handle_interrupt_disconnect()
816 * ps3_vuart_handle_port_interrupt - second stage interrupt handler
834 dev_dbg(&dev->core, "%s:%d: status: %lxh\n", __func__, __LINE__, in ps3_vuart_handle_port_interrupt()
838 priv->stats.disconnect_interrupts++; in ps3_vuart_handle_port_interrupt()
845 priv->stats.tx_interrupts++; in ps3_vuart_handle_port_interrupt()
852 priv->stats.rx_interrupts++; in ps3_vuart_handle_port_interrupt()
870 * ps3_vuart_irq_handler - first stage interrupt handler
886 dump_ports_bmp(bus_priv->bmp); in ps3_vuart_irq_handler()
888 port = (BITS_PER_LONG - 1) - __ilog2(bus_priv->bmp->status); in ps3_vuart_irq_handler()
894 BUG_ON(!bus_priv->devices[port]); in ps3_vuart_irq_handler()
896 ps3_vuart_handle_port_interrupt(bus_priv->devices[port]); in ps3_vuart_irq_handler()
906 pr_debug(" -> %s:%d\n", __func__, __LINE__); in ps3_vuart_bus_interrupt_get()
920 result = -ENOMEM; in ps3_vuart_bus_interrupt_get()
930 result = -EPERM; in ps3_vuart_bus_interrupt_get()
943 pr_debug(" <- %s:%d: ok\n", __func__, __LINE__); in ps3_vuart_bus_interrupt_get()
953 vuart_bus_priv.use_count--; in ps3_vuart_bus_interrupt_get()
954 pr_debug(" <- %s:%d: failed\n", __func__, __LINE__); in ps3_vuart_bus_interrupt_get()
960 pr_debug(" -> %s:%d\n", __func__, __LINE__); in ps3_vuart_bus_interrupt_put()
962 vuart_bus_priv.use_count--; in ps3_vuart_bus_interrupt_put()
977 pr_debug(" <- %s:%d\n", __func__, __LINE__); in ps3_vuart_bus_interrupt_put()
987 dev_dbg(&dev->core, "%s:%d\n", __func__, __LINE__); in ps3_vuart_probe()
992 dev_dbg(&dev->core, "%s:%d: (%s)\n", __func__, __LINE__, in ps3_vuart_probe()
993 drv->core.core.name); in ps3_vuart_probe()
995 if (dev->port_number >= PORT_COUNT) { in ps3_vuart_probe()
997 return -EINVAL; in ps3_vuart_probe()
1007 if (vuart_bus_priv.devices[dev->port_number]) { in ps3_vuart_probe()
1008 dev_dbg(&dev->core, "%s:%d: port busy (%d)\n", __func__, in ps3_vuart_probe()
1009 __LINE__, dev->port_number); in ps3_vuart_probe()
1010 result = -EBUSY; in ps3_vuart_probe()
1014 vuart_bus_priv.devices[dev->port_number] = dev; in ps3_vuart_probe()
1016 /* Setup dev->driver_priv. */ in ps3_vuart_probe()
1018 dev->driver_priv = kzalloc(sizeof(struct ps3_vuart_port_priv), in ps3_vuart_probe()
1021 if (!dev->driver_priv) { in ps3_vuart_probe()
1022 result = -ENOMEM; in ps3_vuart_probe()
1028 INIT_LIST_HEAD(&priv->tx_list.head); in ps3_vuart_probe()
1029 spin_lock_init(&priv->tx_list.lock); in ps3_vuart_probe()
1031 INIT_LIST_HEAD(&priv->rx_list.head); in ps3_vuart_probe()
1032 spin_lock_init(&priv->rx_list.lock); in ps3_vuart_probe()
1034 INIT_WORK(&priv->rx_list.work.work, ps3_vuart_work); in ps3_vuart_probe()
1035 priv->rx_list.work.trigger = 0; in ps3_vuart_probe()
1036 priv->rx_list.work.dev = dev; in ps3_vuart_probe()
1046 if (drv->probe) in ps3_vuart_probe()
1047 result = drv->probe(dev); in ps3_vuart_probe()
1050 dev_info(&dev->core, "%s:%d: no probe method\n", __func__, in ps3_vuart_probe()
1055 dev_dbg(&dev->core, "%s:%d: drv->probe failed\n", in ps3_vuart_probe()
1066 kfree(dev->driver_priv); in ps3_vuart_probe()
1067 dev->driver_priv = NULL; in ps3_vuart_probe()
1069 vuart_bus_priv.devices[dev->port_number] = NULL; in ps3_vuart_probe()
1074 dev_dbg(&dev->core, "%s:%d: failed\n", __func__, __LINE__); in ps3_vuart_probe()
1079 * ps3_vuart_cleanup - common cleanup helper.
1089 dev_dbg(&dev->core, "%s:%d\n", __func__, __LINE__); in ps3_vuart_cleanup()
1098 * ps3_vuart_remove - Completely clean the device instance.
1114 dev_dbg(&dev->core, " -> %s:%d: match_id %d\n", __func__, __LINE__, in ps3_vuart_remove()
1115 dev->match_id); in ps3_vuart_remove()
1117 if (!dev->core.driver) { in ps3_vuart_remove()
1118 dev_dbg(&dev->core, "%s:%d: no driver bound\n", __func__, in ps3_vuart_remove()
1128 if (drv->remove) { in ps3_vuart_remove()
1129 drv->remove(dev); in ps3_vuart_remove()
1131 dev_dbg(&dev->core, "%s:%d: no remove method\n", __func__, in ps3_vuart_remove()
1138 vuart_bus_priv.devices[dev->port_number] = NULL; in ps3_vuart_remove()
1142 dev_dbg(&dev->core, " <- %s:%d\n", __func__, __LINE__); in ps3_vuart_remove()
1147 * ps3_vuart_shutdown - Cleans interrupts and HV resources.
1152 * by sys-manager to be able to complete the device power operation
1164 dev_dbg(&dev->core, " -> %s:%d: match_id %d\n", __func__, __LINE__, in ps3_vuart_shutdown()
1165 dev->match_id); in ps3_vuart_shutdown()
1167 if (!dev->core.driver) { in ps3_vuart_shutdown()
1168 dev_dbg(&dev->core, "%s:%d: no driver bound\n", __func__, in ps3_vuart_shutdown()
1178 if (drv->shutdown) in ps3_vuart_shutdown()
1179 drv->shutdown(dev); in ps3_vuart_shutdown()
1180 else if (drv->remove) { in ps3_vuart_shutdown()
1181 dev_dbg(&dev->core, "%s:%d: no shutdown, calling remove\n", in ps3_vuart_shutdown()
1183 drv->remove(dev); in ps3_vuart_shutdown()
1185 dev_dbg(&dev->core, "%s:%d: no shutdown method\n", __func__, in ps3_vuart_shutdown()
1192 dev_dbg(&dev->core, " <- %s:%d\n", __func__, __LINE__); in ps3_vuart_shutdown()
1202 return -ENODEV; in ps3_vuart_bus_init()
1218 * ps3_vuart_port_driver_register - Add a vuart port device driver.
1225 pr_debug("%s:%d: (%s)\n", __func__, __LINE__, drv->core.core.name); in ps3_vuart_port_driver_register()
1227 BUG_ON(!drv->core.match_id); in ps3_vuart_port_driver_register()
1228 BUG_ON(!drv->core.core.name); in ps3_vuart_port_driver_register()
1230 drv->core.probe = ps3_vuart_probe; in ps3_vuart_port_driver_register()
1231 drv->core.remove = ps3_vuart_remove; in ps3_vuart_port_driver_register()
1232 drv->core.shutdown = ps3_vuart_shutdown; in ps3_vuart_port_driver_register()
1234 result = ps3_system_bus_driver_register(&drv->core); in ps3_vuart_port_driver_register()
1240 * ps3_vuart_port_driver_unregister - Remove a vuart port device driver.
1245 pr_debug("%s:%d: (%s)\n", __func__, __LINE__, drv->core.core.name); in ps3_vuart_port_driver_unregister()
1246 ps3_system_bus_driver_unregister(&drv->core); in ps3_vuart_port_driver_unregister()