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