1/* 2 * User Mode Init manager - For shared transport 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation; either version 2 of the License, or 7 * (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program;if not, write to the Free Software 16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 17 */ 18 19#ifndef UIM_H 20#define UIM_H 21 22/* Paramaters to set the baud rate*/ 23#define FLOW_CTL 0x0001 24#define BOTHER 0x00001000 25#define ARM_NCCS 19 26 27#define TCGETS2 _IOR('T',0x2A, struct termios2) 28#define TCSETS2 _IOW('T',0x2B, struct termios2) 29 30/*HCI Command and Event information*/ 31#define HCI_HDR_OPCODE 0xff36 32#define WRITE_BD_ADDR_OPCODE 0xFC06 33#define RESP_PREFIX 0x04 34#define MAX_TRY 10 35 36/* HCI Packet types */ 37#define HCI_COMMAND_PKT 0x01 38#define HCI_EVENT_PKT 0x04 39 40/* HCI command macros*/ 41#define HCI_EVENT_HDR_SIZE 2 42#define HCI_COMMAND_HDR_SIZE 3 43#define UIM_WRITE_BD_ADDR_CP_SIZE 6 44 45 46/* HCI event macros*/ 47#define EVT_CMD_COMPLETE_SIZE 3 48#define EVT_CMD_STATUS_SIZE 4 49#define EVT_CMD_COMPLETE 0x0E 50#define EVT_CMD_STATUS 0x0F 51 52 53#define VERBOSE 54#ifdef ANDROID 55#define LOG_TAG "uim-sysfs" 56#define UIM_ERR(fmt, arg...) ALOGE("uim:"fmt"\n" , ##arg) 57#if defined(UIM_DEBUG) /* limited debug messages */ 58#define UIM_START_FUNC() ALOGE("uim: Inside %s", __FUNCTION__) 59#define UIM_DBG(fmt, arg...) ALOGE("uim:"fmt"\n" , ## arg) 60#define UIM_VER(fmt, arg...) 61#elif defined(VERBOSE) /* very verbose */ 62#define UIM_START_FUNC() ALOGE("uim: Inside %s", __FUNCTION__) 63#define UIM_DBG(fmt, arg...) ALOGE("uim:"fmt"\n" , ## arg) 64#define UIM_VER(fmt, arg...) ALOGE("uim:"fmt"\n" , ## arg) 65#else /* error msgs only */ 66#define UIM_START_FUNC() 67#define UIM_DBG(fmt, arg...) 68#define UIM_VER(fmt, arg...) 69#endif 70#endif /* ANDROID */ 71 72/*Termios2 structure for setting the Custom baud rate*/ 73struct termios2 { 74 tcflag_t c_iflag; /* input mode flags */ 75 tcflag_t c_oflag; /* output mode flags */ 76 tcflag_t c_cflag; /* control mode flags */ 77 tcflag_t c_lflag; /* local mode flags */ 78 cc_t c_line; /* line discipline */ 79 cc_t c_cc[ARM_NCCS]; /* control characters */ 80 speed_t c_ispeed; /* input speed */ 81 speed_t c_ospeed; /* output speed */ 82}; 83 84/* HCI command header*/ 85typedef struct { 86 uint16_t opcode; /* OCF & OGF */ 87 uint8_t plen; 88} __attribute__ ((packed)) hci_command_hdr; 89 90/* HCI event header*/ 91typedef struct { 92 uint8_t evt; 93 uint8_t plen; 94} __attribute__ ((packed)) hci_event_hdr; 95 96/* HCI command complete event*/ 97typedef struct { 98 uint8_t ncmd; 99 uint16_t opcode; 100} __attribute__ ((packed)) evt_cmd_complete; 101 102/* HCI event status*/ 103typedef struct { 104 uint8_t status; 105 uint8_t ncmd; 106 uint16_t opcode; 107} __attribute__ ((packed)) evt_cmd_status; 108 109/* HCI Event structure to set the cusrom baud rate*/ 110typedef struct { 111 uint8_t uart_prefix; 112 hci_event_hdr hci_hdr; 113 evt_cmd_complete cmd_complete; 114 uint8_t status; 115 uint8_t data[16]; 116} __attribute__ ((packed)) command_complete_t; 117 118/* HCI Command structure to set the cusrom baud rate*/ 119typedef struct { 120 uint8_t uart_prefix; 121 hci_command_hdr hci_hdr; 122 uint32_t speed; 123} __attribute__ ((packed)) uim_speed_change_cmd; 124 125/* BD address structure to set the uim BD address*/ 126typedef struct { 127 unsigned char b[6]; 128} __attribute__((packed)) bdaddr_t; 129 130/* HCI Command structure to set the uim BD address*/ 131typedef struct { 132 uint8_t uart_prefix; 133 hci_command_hdr hci_hdr; 134 bdaddr_t addr; 135} __attribute__ ((packed)) uim_bdaddr_change_cmd; 136 137#define INSTALL_SYSFS_ENTRY "/sys/devices/platform/kim/install" 138#define DEV_NAME_SYSFS "/sys/devices/platform/kim/dev_name" 139#define BAUD_RATE_SYSFS "/sys/devices/platform/kim/baud_rate" 140#define FLOW_CTRL_SYSFS "/sys/devices/platform/kim/flow_cntrl" 141 142/* Functions to insert and remove the kernel modules from the system*/ 143extern int init_module(void *, unsigned int, const char *); 144extern int delete_module(const char *, unsigned int); 145extern int load_file(const char *, unsigned int *); 146 147#endif /* UIM_H */ 148