1 /* 2 * Copyright (c) 2015 South Silicon Valley Microelectronics Inc. 3 * Copyright (c) 2015 iComm Corporation 4 * 5 * This program is free software: you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation, either version 3 of the License, or 8 * (at your option) any later version. 9 * This program is distributed in the hope that it will be useful, but 10 * WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 * See the GNU General Public License for more details. 13 * You should have received a copy of the GNU General Public License 14 * along with this program. If not, see <http://www.gnu.org/licenses/>. 15 */ 16 17 #ifndef SSVSDIOBRIDGE_PUB_H 18 #define SSVSDIOBRIDGE_PUB_H 19 #include <linux/etherdevice.h> 20 #include <linux/device.h> 21 #include <linux/interrupt.h> 22 #include <linux/leds.h> 23 #include <linux/completion.h> 24 #include <linux/ioctl.h> 25 #include <linux/types.h> 26 struct ssv_sdiobridge_cmd { 27 __u32 in_data_len; 28 u8* in_data; 29 #ifndef __x86_64 30 __u32 padding1; 31 #endif 32 __u32 out_data_len; 33 u8* out_data; 34 #ifndef __x86_64 35 __u32 padding2; 36 #endif 37 __u32 response; 38 }__attribute__((packed)); 39 #define FILE_DEVICE_SSVSDIO MMC_BLOCK_MAJOR 40 #define FILE_DEVICE_SSVSDIO_SEQ 0x50 41 #define FILE_DEVICE_SSVSDIO_NAME "ssvsdiobridge" 42 #if 0 43 #define IOCTL_SSVSDIO_GET_DRIVER_VERSION \ 44 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x01, struct ssv_sdiobridge_cmd) 45 #define IOCTL_SSVSDIO_GET_FUNCTION_NUMBER \ 46 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x02, struct ssv_sdiobridge_cmd) 47 #endif 48 #define IOCTL_SSVSDIO_GET_FUNCTION_FOCUS \ 49 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x03, struct ssv_sdiobridge_cmd) 50 #define IOCTL_SSVSDIO_SET_FUNCTION_FOCUS \ 51 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x04, struct ssv_sdiobridge_cmd) 52 #define IOCTL_SSVSDIO_GET_BUS_WIDTH \ 53 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x05, struct ssv_sdiobridge_cmd) 54 #define IOCTL_SSVSDIO_SET_BUS_WIDTH \ 55 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x06, struct ssv_sdiobridge_cmd) 56 #define IOCTL_SSVSDIO_GET_BUS_CLOCK \ 57 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x07, struct ssv_sdiobridge_cmd) 58 #define IOCTL_SSVSDIO_SET_BUS_CLOCK \ 59 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x08, struct ssv_sdiobridge_cmd) 60 #if 0 61 #define IOCTL_SSVSDIO_GET_BLOCK_MODE \ 62 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x09, struct ssv_sdiobridge_cmd) 63 #define IOCTL_SSVSDIO_SET_BLOCK_MODE \ 64 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x0a, struct ssv_sdiobridge_cmd) 65 #endif 66 #define IOCTL_SSVSDIO_GET_BLOCKLEN \ 67 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x0b, struct ssv_sdiobridge_cmd) 68 #define IOCTL_SSVSDIO_SET_BLOCKLEN \ 69 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x0c, struct ssv_sdiobridge_cmd) 70 #if 0 71 #define IOCTL_SSVSDIO_GET_FN0_BLOCKLEN \ 72 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x0d, struct ssv_sdiobridge_cmd) 73 #define IOCTL_SSVSDIO_SET_FN0_BLOCKLEN \ 74 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x0e, struct ssv_sdiobridge_cmd) 75 #define IOCTL_SSVSDIO_GET_BUS_INTERFACE_CONTROL \ 76 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x0f, struct ssv_sdiobridge_cmd) 77 #define IOCTL_SSVSDIO_SET_BUS_INTERFACE_CONTROL \ 78 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x10, struct ssv_sdiobridge_cmd) 79 #define IOCTL_SSVSDIO_GET_INT_ENABLE \ 80 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x11, struct ssv_sdiobridge_cmd) 81 #define IOCTL_SSVSDIO_SET_INT_ENABLE \ 82 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x12, struct ssv_sdiobridge_cmd) 83 #define IOCTL_SSVSDIO_GET_AUTO_ACK_INT \ 84 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x13, struct ssv_sdiobridge_cmd) 85 #define IOCTL_SSVSDIO_SET_AUTO_ACK_INT \ 86 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x14, struct ssv_sdiobridge_cmd) 87 #define IOCTL_SSVSDIO_ACK_INT \ 88 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x15, struct ssv_sdiobridge_cmd) 89 #endif 90 #define IOCTL_SSVSDIO_READ_BYTE \ 91 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x16, struct ssv_sdiobridge_cmd) 92 #define IOCTL_SSVSDIO_WRITE_BYTE \ 93 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x17, struct ssv_sdiobridge_cmd) 94 #define IOCTL_SSVSDIO_GET_MULTI_BYTE_IO_PORT \ 95 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x18, struct ssv_sdiobridge_cmd) 96 #define IOCTL_SSVSDIO_SET_MULTI_BYTE_IO_PORT \ 97 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x19, struct ssv_sdiobridge_cmd) 98 #define IOCTL_SSVSDIO_READ_MULTI_BYTE \ 99 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x1a, struct ssv_sdiobridge_cmd) 100 #define IOCTL_SSVSDIO_WRITE_MULTI_BYTE \ 101 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x1b, struct ssv_sdiobridge_cmd) 102 #define IOCTL_SSVSDIO_GET_MULTI_BYTE_REG_IO_PORT \ 103 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x1c, struct ssv_sdiobridge_cmd) 104 #define IOCTL_SSVSDIO_SET_MULTI_BYTE_REG_IO_PORT \ 105 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x1d, struct ssv_sdiobridge_cmd) 106 #define IOCTL_SSVSDIO_READ_REG \ 107 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x1e, struct ssv_sdiobridge_cmd) 108 #define IOCTL_SSVSDIO_WRITE_REG \ 109 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x1f, struct ssv_sdiobridge_cmd) 110 #define IOCTL_SSVSDIO_READ_DATA \ 111 _IOWR( FILE_DEVICE_SSVSDIO, FILE_DEVICE_SSVSDIO_SEQ+0x20, struct ssv_sdiobridge_cmd) 112 #endif 113