90 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * PS3 virtual uart4 *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_H11 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 port30 */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#endif90