1 /* 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 * 6 * Copyright (C) 2004, 2005 MIPS Technologies, Inc. All rights reserved. 7 * Copyright (C) 2013 Imagination Technologies Ltd. 8 */ 9 #ifndef __ASM_RTLX_H_ 10 #define __ASM_RTLX_H_ 11 12 #include <irq.h> 13 14 #define RTLX_MODULE_NAME "rtlx" 15 16 #define LX_NODE_BASE 10 17 18 #define MIPS_CPU_RTLX_IRQ 0 19 20 #define RTLX_VERSION 2 21 #define RTLX_xID 0x12345600 22 #define RTLX_ID (RTLX_xID | RTLX_VERSION) 23 #define RTLX_BUFFER_SIZE 2048 24 #define RTLX_CHANNELS 8 25 26 #define RTLX_CHANNEL_STDIO 0 27 #define RTLX_CHANNEL_DBG 1 28 #define RTLX_CHANNEL_SYSIO 2 29 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); 48 49 enum rtlx_state { 50 RTLX_STATE_UNUSED = 0, 51 RTLX_STATE_INITIALISED, 52 RTLX_STATE_REMOTE_READY, 53 RTLX_STATE_OPENED 54 }; 55 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]; 62 63 /* each channel supports read and write. 64 linux (vpe0) reads lx_buffer and writes rt_buffer 65 SP (vpe1) reads rt_buffer and writes lx_buffer 66 */ 67 struct rtlx_channel { 68 enum rtlx_state rt_state; 69 enum rtlx_state lx_state; 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; 79 }; 80 81 extern struct rtlx_info { 82 unsigned long id; 83 enum rtlx_state state; 84 85 struct rtlx_channel channel[RTLX_CHANNELS]; 86 } *rtlx; 87 #endif /* __ASM_RTLX_H_ */ 88