brintos

brintos / linux-shallow public Read only

0
0
Text · 2.9 KiB · 64d34ef Raw
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