vuart.h (2968B)
1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * PS3 virtual uart 4 * 5 * Copyright (C) 2006 Sony Computer Entertainment Inc. 6 * Copyright 2006 Sony Corp. 7 */ 8 9#if !defined(_PS3_VUART_H) 10#define _PS3_VUART_H 11 12#include <asm/ps3.h> 13 14struct ps3_vuart_stats { 15 unsigned long bytes_written; 16 unsigned long bytes_read; 17 unsigned long tx_interrupts; 18 unsigned long rx_interrupts; 19 unsigned long disconnect_interrupts; 20}; 21 22struct ps3_vuart_work { 23 struct work_struct work; 24 unsigned long trigger; 25 struct ps3_system_bus_device *dev; /* to convert work to device */ 26}; 27 28/** 29 * struct ps3_vuart_port_driver - a driver for a device on a vuart port 30 */ 31 32struct ps3_vuart_port_driver { 33 struct ps3_system_bus_driver core; 34 int (*probe)(struct ps3_system_bus_device *); 35 int (*remove)(struct ps3_system_bus_device *); 36 void (*shutdown)(struct ps3_system_bus_device *); 37 void (*work)(struct ps3_system_bus_device *); 38 /* int (*tx_event)(struct ps3_system_bus_device *dev); */ 39 /* int (*rx_event)(struct ps3_system_bus_device *dev); */ 40 /* int (*disconnect_event)(struct ps3_system_bus_device *dev); */ 41 /* int (*suspend)(struct ps3_system_bus_device *, pm_message_t); */ 42 /* int (*resume)(struct ps3_system_bus_device *); */ 43}; 44 45int ps3_vuart_port_driver_register(struct ps3_vuart_port_driver *drv); 46void ps3_vuart_port_driver_unregister(struct ps3_vuart_port_driver *drv); 47 48static inline struct ps3_vuart_port_driver * 49 ps3_system_bus_dev_to_vuart_drv(struct ps3_system_bus_device *_dev) 50{ 51 struct ps3_system_bus_driver *sbd = 52 ps3_system_bus_dev_to_system_bus_drv(_dev); 53 BUG_ON(!sbd); 54 return container_of(sbd, struct ps3_vuart_port_driver, core); 55} 56static inline struct ps3_system_bus_device *ps3_vuart_work_to_system_bus_dev( 57 struct work_struct *_work) 58{ 59 struct ps3_vuart_work *vw = container_of(_work, struct ps3_vuart_work, 60 work); 61 return vw->dev; 62} 63 64int ps3_vuart_write(struct ps3_system_bus_device *dev, const void *buf, 65 unsigned int bytes); 66int ps3_vuart_read(struct ps3_system_bus_device *dev, void *buf, 67 unsigned int bytes); 68int ps3_vuart_read_async(struct ps3_system_bus_device *dev, unsigned int bytes); 69void ps3_vuart_cancel_async(struct ps3_system_bus_device *dev); 70void ps3_vuart_clear_rx_bytes(struct ps3_system_bus_device *dev, 71 unsigned int bytes); 72 73struct vuart_triggers { 74 unsigned long rx; 75 unsigned long tx; 76}; 77 78int ps3_vuart_get_triggers(struct ps3_system_bus_device *dev, 79 struct vuart_triggers *trig); 80int ps3_vuart_set_triggers(struct ps3_system_bus_device *dev, unsigned int tx, 81 unsigned int rx); 82int ps3_vuart_enable_interrupt_tx(struct ps3_system_bus_device *dev); 83int ps3_vuart_disable_interrupt_tx(struct ps3_system_bus_device *dev); 84int ps3_vuart_enable_interrupt_rx(struct ps3_system_bus_device *dev); 85int ps3_vuart_disable_interrupt_rx(struct ps3_system_bus_device *dev); 86int ps3_vuart_enable_interrupt_disconnect(struct ps3_system_bus_device *dev); 87int ps3_vuart_disable_interrupt_disconnect(struct ps3_system_bus_device *dev); 88 89#endif