0001
0002
0003
0004
0005
0006
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;
0026 };
0027
0028
0029
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
0039
0040
0041
0042
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