Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  *  PS3 virtual uart
0004  *
0005  *  Copyright (C) 2006 Sony Computer Entertainment Inc.
0006  *  Copyright 2006 Sony Corp.
0007  */
0008 
0009 #if !defined(_PS3_VUART_H)
0010 #define _PS3_VUART_H
0011 
0012 #include <asm/ps3.h>
0013 
0014 struct ps3_vuart_stats {
0015     unsigned long bytes_written;
0016     unsigned long bytes_read;
0017     unsigned long tx_interrupts;
0018     unsigned long rx_interrupts;
0019     unsigned long disconnect_interrupts;
0020 };
0021 
0022 struct ps3_vuart_work {
0023     struct work_struct work;
0024     unsigned long trigger;
0025     struct ps3_system_bus_device *dev; /* to convert work to device */
0026 };
0027 
0028 /**
0029  * struct ps3_vuart_port_driver - a driver for a device on a vuart port
0030  */
0031 
0032 struct ps3_vuart_port_driver {
0033     struct ps3_system_bus_driver core;
0034     int (*probe)(struct ps3_system_bus_device *);
0035     int (*remove)(struct ps3_system_bus_device *);
0036     void (*shutdown)(struct ps3_system_bus_device *);
0037     void (*work)(struct ps3_system_bus_device *);
0038     /* int (*tx_event)(struct ps3_system_bus_device *dev); */
0039     /* int (*rx_event)(struct ps3_system_bus_device *dev); */
0040     /* int (*disconnect_event)(struct ps3_system_bus_device *dev); */
0041     /* int (*suspend)(struct ps3_system_bus_device *, pm_message_t); */
0042     /* int (*resume)(struct ps3_system_bus_device *); */
0043 };
0044 
0045 int ps3_vuart_port_driver_register(struct ps3_vuart_port_driver *drv);
0046 void ps3_vuart_port_driver_unregister(struct ps3_vuart_port_driver *drv);
0047 
0048 static inline struct ps3_vuart_port_driver *
0049     ps3_system_bus_dev_to_vuart_drv(struct ps3_system_bus_device *_dev)
0050 {
0051     struct ps3_system_bus_driver *sbd =
0052         ps3_system_bus_dev_to_system_bus_drv(_dev);
0053     BUG_ON(!sbd);
0054     return container_of(sbd, struct ps3_vuart_port_driver, core);
0055 }
0056 static inline struct ps3_system_bus_device *ps3_vuart_work_to_system_bus_dev(
0057     struct work_struct *_work)
0058 {
0059     struct ps3_vuart_work *vw = container_of(_work, struct ps3_vuart_work,
0060         work);
0061     return vw->dev;
0062 }
0063 
0064 int ps3_vuart_write(struct ps3_system_bus_device *dev, const void *buf,
0065     unsigned int bytes);
0066 int ps3_vuart_read(struct ps3_system_bus_device *dev, void *buf,
0067     unsigned int bytes);
0068 int ps3_vuart_read_async(struct ps3_system_bus_device *dev, unsigned int bytes);
0069 void ps3_vuart_cancel_async(struct ps3_system_bus_device *dev);
0070 void ps3_vuart_clear_rx_bytes(struct ps3_system_bus_device *dev,
0071     unsigned int bytes);
0072 
0073 struct vuart_triggers {
0074     unsigned long rx;
0075     unsigned long tx;
0076 };
0077 
0078 int ps3_vuart_get_triggers(struct ps3_system_bus_device *dev,
0079     struct vuart_triggers *trig);
0080 int ps3_vuart_set_triggers(struct ps3_system_bus_device *dev, unsigned int tx,
0081     unsigned int rx);
0082 int ps3_vuart_enable_interrupt_tx(struct ps3_system_bus_device *dev);
0083 int ps3_vuart_disable_interrupt_tx(struct ps3_system_bus_device *dev);
0084 int ps3_vuart_enable_interrupt_rx(struct ps3_system_bus_device *dev);
0085 int ps3_vuart_disable_interrupt_rx(struct ps3_system_bus_device *dev);
0086 int ps3_vuart_enable_interrupt_disconnect(struct ps3_system_bus_device *dev);
0087 int ps3_vuart_disable_interrupt_disconnect(struct ps3_system_bus_device *dev);
0088 
0089 #endif