1384740dcSRalf Baechle /* 2*5792bf64SSteven J. Hill * This file is subject to the terms and conditions of the GNU General Public 3*5792bf64SSteven J. Hill * License. See the file "COPYING" in the main directory of this archive 4*5792bf64SSteven J. Hill * for more details. 5*5792bf64SSteven J. Hill * 6384740dcSRalf Baechle * Copyright (C) 2004, 2005 MIPS Technologies, Inc. All rights reserved. 72c973ef0SDeng-Cheng Zhu * Copyright (C) 2013 Imagination Technologies Ltd. 8384740dcSRalf Baechle */ 9384740dcSRalf Baechle #ifndef __ASM_RTLX_H_ 10384740dcSRalf Baechle #define __ASM_RTLX_H_ 11384740dcSRalf Baechle 12384740dcSRalf Baechle #include <irq.h> 13384740dcSRalf Baechle 142c973ef0SDeng-Cheng Zhu #define RTLX_MODULE_NAME "rtlx" 152c973ef0SDeng-Cheng Zhu 16384740dcSRalf Baechle #define LX_NODE_BASE 10 17384740dcSRalf Baechle 18384740dcSRalf Baechle #define MIPS_CPU_RTLX_IRQ 0 19384740dcSRalf Baechle 20384740dcSRalf Baechle #define RTLX_VERSION 2 21384740dcSRalf Baechle #define RTLX_xID 0x12345600 22384740dcSRalf Baechle #define RTLX_ID (RTLX_xID | RTLX_VERSION) 232c973ef0SDeng-Cheng Zhu #define RTLX_BUFFER_SIZE 2048 24384740dcSRalf Baechle #define RTLX_CHANNELS 8 25384740dcSRalf Baechle 26384740dcSRalf Baechle #define RTLX_CHANNEL_STDIO 0 27384740dcSRalf Baechle #define RTLX_CHANNEL_DBG 1 28384740dcSRalf Baechle #define RTLX_CHANNEL_SYSIO 2 29384740dcSRalf Baechle 302c973ef0SDeng-Cheng Zhu void rtlx_starting(int vpe); 312c973ef0SDeng-Cheng Zhu void rtlx_stopping(int vpe); 322c973ef0SDeng-Cheng Zhu 332c973ef0SDeng-Cheng Zhu int rtlx_open(int index, int can_sleep); 342c973ef0SDeng-Cheng Zhu int rtlx_release(int index); 352c973ef0SDeng-Cheng Zhu ssize_t rtlx_read(int index, void __user *buff, size_t count); 362c973ef0SDeng-Cheng Zhu ssize_t rtlx_write(int index, const void __user *buffer, size_t count); 372c973ef0SDeng-Cheng Zhu unsigned int rtlx_read_poll(int index, int can_sleep); 382c973ef0SDeng-Cheng Zhu unsigned int rtlx_write_poll(int index); 392c973ef0SDeng-Cheng Zhu 402c973ef0SDeng-Cheng Zhu int __init rtlx_module_init(void); 412c973ef0SDeng-Cheng Zhu void __exit rtlx_module_exit(void); 422c973ef0SDeng-Cheng Zhu 432c973ef0SDeng-Cheng Zhu void _interrupt_sp(void); 442c973ef0SDeng-Cheng Zhu 452c973ef0SDeng-Cheng Zhu extern struct vpe_notifications rtlx_notify; 462c973ef0SDeng-Cheng Zhu extern const struct file_operations rtlx_fops; 472c973ef0SDeng-Cheng Zhu extern void (*aprp_hook)(void); 48384740dcSRalf Baechle 49384740dcSRalf Baechle enum rtlx_state { 50384740dcSRalf Baechle RTLX_STATE_UNUSED = 0, 51384740dcSRalf Baechle RTLX_STATE_INITIALISED, 52384740dcSRalf Baechle RTLX_STATE_REMOTE_READY, 53384740dcSRalf Baechle RTLX_STATE_OPENED 54384740dcSRalf Baechle }; 55384740dcSRalf Baechle 562c973ef0SDeng-Cheng Zhu extern struct chan_waitqueues { 572c973ef0SDeng-Cheng Zhu wait_queue_head_t rt_queue; 582c973ef0SDeng-Cheng Zhu wait_queue_head_t lx_queue; 592c973ef0SDeng-Cheng Zhu atomic_t in_open; 602c973ef0SDeng-Cheng Zhu struct mutex mutex; 612c973ef0SDeng-Cheng Zhu } channel_wqs[RTLX_CHANNELS]; 62384740dcSRalf Baechle 63384740dcSRalf Baechle /* each channel supports read and write. 64384740dcSRalf Baechle linux (vpe0) reads lx_buffer and writes rt_buffer 65384740dcSRalf Baechle SP (vpe1) reads rt_buffer and writes lx_buffer 66384740dcSRalf Baechle */ 67384740dcSRalf Baechle struct rtlx_channel { 68384740dcSRalf Baechle enum rtlx_state rt_state; 69384740dcSRalf Baechle enum rtlx_state lx_state; 70384740dcSRalf Baechle 71384740dcSRalf Baechle int buffer_size; 72384740dcSRalf Baechle 73384740dcSRalf Baechle /* read and write indexes per buffer */ 74384740dcSRalf Baechle int rt_write, rt_read; 75384740dcSRalf Baechle char *rt_buffer; 76384740dcSRalf Baechle 77384740dcSRalf Baechle int lx_write, lx_read; 78384740dcSRalf Baechle char *lx_buffer; 79384740dcSRalf Baechle }; 80384740dcSRalf Baechle 812c973ef0SDeng-Cheng Zhu extern struct rtlx_info { 82384740dcSRalf Baechle unsigned long id; 83384740dcSRalf Baechle enum rtlx_state state; 84384740dcSRalf Baechle 85384740dcSRalf Baechle struct rtlx_channel channel[RTLX_CHANNELS]; 862c973ef0SDeng-Cheng Zhu } *rtlx; 87384740dcSRalf Baechle #endif /* __ASM_RTLX_H_ */ 88