Blame view

kernel/linux-imx6_3.14.28/drivers/ps3/vuart.h 2.84 KB
6b13f685e   김민수   BSP 최초 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
  /*
   *  PS3 virtual uart
   *
   *  Copyright (C) 2006 Sony Computer Entertainment Inc.
   *  Copyright 2006 Sony Corp.
   *
   *  This program is free software; you can redistribute it and/or modify
   *  it under the terms of the GNU General Public License as published by
   *  the Free Software Foundation; version 2 of the License.
   *
   *  This program is distributed in the hope that it will be useful,
   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   *  GNU General Public License for more details.
   *
   *  You should have received a copy of the GNU General Public License
   *  along with this program; if not, write to the Free Software
   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   */
  
  #if !defined(_PS3_VUART_H)
  #define _PS3_VUART_H
  
  #include <asm/ps3.h>
  
  struct ps3_vuart_stats {
  	unsigned long bytes_written;
  	unsigned long bytes_read;
  	unsigned long tx_interrupts;
  	unsigned long rx_interrupts;
  	unsigned long disconnect_interrupts;
  };
  
  struct ps3_vuart_work {
  	struct work_struct work;
  	unsigned long trigger;
  	struct ps3_system_bus_device *dev; /* to convert work to device */
  };
  
  /**
   * struct ps3_vuart_port_driver - a driver for a device on a vuart port
   */
  
  struct ps3_vuart_port_driver {
  	struct ps3_system_bus_driver core;
  	int (*probe)(struct ps3_system_bus_device *);
  	int (*remove)(struct ps3_system_bus_device *);
  	void (*shutdown)(struct ps3_system_bus_device *);
  	void (*work)(struct ps3_system_bus_device *);
  	/* int (*tx_event)(struct ps3_system_bus_device *dev); */
  	/* int (*rx_event)(struct ps3_system_bus_device *dev); */
  	/* int (*disconnect_event)(struct ps3_system_bus_device *dev); */
  	/* int (*suspend)(struct ps3_system_bus_device *, pm_message_t); */
  	/* int (*resume)(struct ps3_system_bus_device *); */
  };
  
  int ps3_vuart_port_driver_register(struct ps3_vuart_port_driver *drv);
  void ps3_vuart_port_driver_unregister(struct ps3_vuart_port_driver *drv);
  
  static inline struct ps3_vuart_port_driver *
  	ps3_system_bus_dev_to_vuart_drv(struct ps3_system_bus_device *_dev)
  {
  	struct ps3_system_bus_driver *sbd =
  		ps3_system_bus_dev_to_system_bus_drv(_dev);
  	BUG_ON(!sbd);
  	return container_of(sbd, struct ps3_vuart_port_driver, core);
  }
  static inline struct ps3_system_bus_device *ps3_vuart_work_to_system_bus_dev(
  	struct work_struct *_work)
  {
  	struct ps3_vuart_work *vw = container_of(_work, struct ps3_vuart_work,
  		work);
  	return vw->dev;
  }
  
  int ps3_vuart_write(struct ps3_system_bus_device *dev, const void *buf,
  	unsigned int bytes);
  int ps3_vuart_read(struct ps3_system_bus_device *dev, void *buf,
  	unsigned int bytes);
  int ps3_vuart_read_async(struct ps3_system_bus_device *dev, unsigned int bytes);
  void ps3_vuart_cancel_async(struct ps3_system_bus_device *dev);
  void ps3_vuart_clear_rx_bytes(struct ps3_system_bus_device *dev,
  	unsigned int bytes);
  
  #endif