xref: /OK3568_Linux_fs/kernel/arch/mips/include/asm/rtlx.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * This file is subject to the terms and conditions of the GNU General Public
3*4882a593Smuzhiyun  * License.  See the file "COPYING" in the main directory of this archive
4*4882a593Smuzhiyun  * for more details.
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  * Copyright (C) 2004, 2005 MIPS Technologies, Inc.  All rights reserved.
7*4882a593Smuzhiyun  * Copyright (C) 2013 Imagination Technologies Ltd.
8*4882a593Smuzhiyun  */
9*4882a593Smuzhiyun #ifndef __ASM_RTLX_H_
10*4882a593Smuzhiyun #define __ASM_RTLX_H_
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #include <irq.h>
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun #define RTLX_MODULE_NAME "rtlx"
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun #define LX_NODE_BASE 10
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #define MIPS_CPU_RTLX_IRQ 0
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #define RTLX_VERSION 2
21*4882a593Smuzhiyun #define RTLX_xID 0x12345600
22*4882a593Smuzhiyun #define RTLX_ID (RTLX_xID | RTLX_VERSION)
23*4882a593Smuzhiyun #define RTLX_BUFFER_SIZE 2048
24*4882a593Smuzhiyun #define RTLX_CHANNELS 8
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun #define RTLX_CHANNEL_STDIO	0
27*4882a593Smuzhiyun #define RTLX_CHANNEL_DBG	1
28*4882a593Smuzhiyun #define RTLX_CHANNEL_SYSIO	2
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun void rtlx_starting(int vpe);
31*4882a593Smuzhiyun void rtlx_stopping(int vpe);
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun int rtlx_open(int index, int can_sleep);
34*4882a593Smuzhiyun int rtlx_release(int index);
35*4882a593Smuzhiyun ssize_t rtlx_read(int index, void __user *buff, size_t count);
36*4882a593Smuzhiyun ssize_t rtlx_write(int index, const void __user *buffer, size_t count);
37*4882a593Smuzhiyun unsigned int rtlx_read_poll(int index, int can_sleep);
38*4882a593Smuzhiyun unsigned int rtlx_write_poll(int index);
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun int __init rtlx_module_init(void);
41*4882a593Smuzhiyun void __exit rtlx_module_exit(void);
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun void _interrupt_sp(void);
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun extern struct vpe_notifications rtlx_notify;
46*4882a593Smuzhiyun extern const struct file_operations rtlx_fops;
47*4882a593Smuzhiyun extern void (*aprp_hook)(void);
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun enum rtlx_state {
50*4882a593Smuzhiyun 	RTLX_STATE_UNUSED = 0,
51*4882a593Smuzhiyun 	RTLX_STATE_INITIALISED,
52*4882a593Smuzhiyun 	RTLX_STATE_REMOTE_READY,
53*4882a593Smuzhiyun 	RTLX_STATE_OPENED
54*4882a593Smuzhiyun };
55*4882a593Smuzhiyun 
56*4882a593Smuzhiyun extern struct chan_waitqueues {
57*4882a593Smuzhiyun 	wait_queue_head_t rt_queue;
58*4882a593Smuzhiyun 	wait_queue_head_t lx_queue;
59*4882a593Smuzhiyun 	atomic_t in_open;
60*4882a593Smuzhiyun 	struct mutex mutex;
61*4882a593Smuzhiyun } channel_wqs[RTLX_CHANNELS];
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun /* each channel supports read and write.
64*4882a593Smuzhiyun    linux (vpe0) reads lx_buffer and writes rt_buffer
65*4882a593Smuzhiyun    SP (vpe1) reads rt_buffer and writes lx_buffer
66*4882a593Smuzhiyun */
67*4882a593Smuzhiyun struct rtlx_channel {
68*4882a593Smuzhiyun 	enum rtlx_state rt_state;
69*4882a593Smuzhiyun 	enum rtlx_state lx_state;
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun 	int buffer_size;
72*4882a593Smuzhiyun 
73*4882a593Smuzhiyun 	/* read and write indexes per buffer */
74*4882a593Smuzhiyun 	int rt_write, rt_read;
75*4882a593Smuzhiyun 	char *rt_buffer;
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun 	int lx_write, lx_read;
78*4882a593Smuzhiyun 	char *lx_buffer;
79*4882a593Smuzhiyun };
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun extern struct rtlx_info {
82*4882a593Smuzhiyun 	unsigned long id;
83*4882a593Smuzhiyun 	enum rtlx_state state;
84*4882a593Smuzhiyun 	int ap_int_pending;	/* Status of 0 or 1 for CONFIG_MIPS_CMP only */
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun 	struct rtlx_channel channel[RTLX_CHANNELS];
87*4882a593Smuzhiyun } *rtlx;
88*4882a593Smuzhiyun #endif /* __ASM_RTLX_H_ */
89