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