1982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* 2982edd19a092114c479134cb16e0af54730edf1fPrashant Malani * Copyright (c) 2013, The Linux Foundation. All rights reserved. 3982edd19a092114c479134cb16e0af54730edf1fPrashant Malani * Not a Contribution. 4982edd19a092114c479134cb16e0af54730edf1fPrashant Malani * Copyright (C) 2009-2012 Broadcom Corporation 5982edd19a092114c479134cb16e0af54730edf1fPrashant Malani * 6982edd19a092114c479134cb16e0af54730edf1fPrashant Malani * Licensed under the Apache License, Version 2.0 (the "License"); 7982edd19a092114c479134cb16e0af54730edf1fPrashant Malani * you may not use this file except in compliance with the License. 8982edd19a092114c479134cb16e0af54730edf1fPrashant Malani * You may obtain a copy of the License at 9982edd19a092114c479134cb16e0af54730edf1fPrashant Malani * 10982edd19a092114c479134cb16e0af54730edf1fPrashant Malani * http://www.apache.org/licenses/LICENSE-2.0 11982edd19a092114c479134cb16e0af54730edf1fPrashant Malani * 12982edd19a092114c479134cb16e0af54730edf1fPrashant Malani * Unless required by applicable law or agreed to in writing, software 13982edd19a092114c479134cb16e0af54730edf1fPrashant Malani * distributed under the License is distributed on an "AS IS" BASIS, 14982edd19a092114c479134cb16e0af54730edf1fPrashant Malani * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15982edd19a092114c479134cb16e0af54730edf1fPrashant Malani * See the License for the specific language governing permissions and 16982edd19a092114c479134cb16e0af54730edf1fPrashant Malani * limitations under the License. 17982edd19a092114c479134cb16e0af54730edf1fPrashant Malani */ 18982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 19982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#ifndef HCI_UART_H 20982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_UART_H 21982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 22982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* Variables to identify the platform */ 23982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/*BT HS UART TTY DEVICE */ 24982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define BT_HS_UART_DEVICE "/dev/ttyHS0" 25982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 26982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/**** baud rates ****/ 27982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_300 0 28982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_600 1 29982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_1200 2 30982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_2400 3 31982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_9600 4 32982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_19200 5 33982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_57600 6 34982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_115200 7 35982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_230400 8 36982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_460800 9 37982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_921600 10 38982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_1M 11 39982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_1_5M 12 40982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_2M 13 41982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_3M 14 42982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_4M 15 43982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_AUTO 16 44982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 45982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/**** Data Format ****/ 46982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* Stop Bits */ 47982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_STOPBITS_1 1 48982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_STOPBITS_1_5 (1<<1) 49982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_STOPBITS_2 (1<<2) 50982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 51982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* Parity Bits */ 52982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_PARITY_NONE (1<<3) 53982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_PARITY_EVEN (1<<4) 54982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_PARITY_ODD (1<<5) 55982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 56982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* Data Bits */ 57982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_DATABITS_5 (1<<6) 58982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_DATABITS_6 (1<<7) 59982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_DATABITS_7 (1<<8) 60982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_DATABITS_8 (1<<9) 61982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 62982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* HCI Packet types */ 63982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_COMMAND_PKT 0x01 64982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_ACLDATA_PKT 0x02 65982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_SCODATA_PKT 0x03 66982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_EVENT_PKT 0x04 67982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_VENDOR_PKT 0xff 68982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 69982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* HCI Command/Event Opcode */ 70982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_RESET 0x0C03 71982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define EVT_CMD_COMPLETE 0x0E 72982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 73982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* Command opcode pack/unpack */ 74982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define cmd_opcode_pack(ogf, ocf) (uint16_t)((ocf & 0x03ff)|(ogf << 10)) 75982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 76982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#if (BT_WAKE_VIA_USERIAL_IOCTL==TRUE) 77982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* These are the ioctl values used for bt_wake ioctl via UART driver. you may 78982edd19a092114c479134cb16e0af54730edf1fPrashant Malani * need to redefine them on you platform! 79982edd19a092114c479134cb16e0af54730edf1fPrashant Malani * Logically they need to be unique and not colide with existing uart ioctl's. 80982edd19a092114c479134cb16e0af54730edf1fPrashant Malani */ 81982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#ifndef USERIAL_IOCTL_BT_WAKE_ASSERT 82982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_IOCTL_BT_WAKE_ASSERT 0x8003 83982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#endif 84982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#ifndef USERIAL_IOCTL_BT_WAKE_DEASSERT 85982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_IOCTL_BT_WAKE_DEASSERT 0x8004 86982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#endif 87982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#ifndef USERIAL_IOCTL_BT_WAKE_GET_ST 88982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_IOCTL_BT_WAKE_GET_ST 0x8005 89982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#endif 90982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#endif // (BT_WAKE_VIA_USERIAL_IOCTL==TRUE) 91982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 92982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* UART CLOCK IOCTLS*/ 93982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_OP_CLK_ON 0x5441 94982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_OP_CLK_OFF 0x5442 95982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_OP_CLK_STATE 0x5443 96982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/****************************************************************************** 97982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Type definitions 98982edd19a092114c479134cb16e0af54730edf1fPrashant Malani******************************************************************************/ 99982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 100982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* Structure used to configure serial port during open */ 101982edd19a092114c479134cb16e0af54730edf1fPrashant Malanitypedef struct 102982edd19a092114c479134cb16e0af54730edf1fPrashant Malani{ 103982edd19a092114c479134cb16e0af54730edf1fPrashant Malani uint16_t fmt; /* Data format */ 104982edd19a092114c479134cb16e0af54730edf1fPrashant Malani uint8_t baud; /* Baud rate */ 105982edd19a092114c479134cb16e0af54730edf1fPrashant Malani} tUSERIAL_CFG; 106982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 107982edd19a092114c479134cb16e0af54730edf1fPrashant Malanitypedef enum { 108982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#if (BT_WAKE_VIA_USERIAL_IOCTL==TRUE) 109982edd19a092114c479134cb16e0af54730edf1fPrashant Malani USERIAL_OP_ASSERT_BT_WAKE, 110982edd19a092114c479134cb16e0af54730edf1fPrashant Malani USERIAL_OP_DEASSERT_BT_WAKE, 111982edd19a092114c479134cb16e0af54730edf1fPrashant Malani USERIAL_OP_GET_BT_WAKE_STATE, 112982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#endif 113982edd19a092114c479134cb16e0af54730edf1fPrashant Malani USERIAL_OP_FLOW_ON, 114982edd19a092114c479134cb16e0af54730edf1fPrashant Malani USERIAL_OP_FLOW_OFF, 115982edd19a092114c479134cb16e0af54730edf1fPrashant Malani USERIAL_OP_NOP, 116982edd19a092114c479134cb16e0af54730edf1fPrashant Malani} userial_vendor_ioctl_op_t; 117982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 118982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* UPIO signals */ 119982edd19a092114c479134cb16e0af54730edf1fPrashant Malanienum { 120982edd19a092114c479134cb16e0af54730edf1fPrashant Malani UPIO_BT_WAKE = 0, 121982edd19a092114c479134cb16e0af54730edf1fPrashant Malani UPIO_HOST_WAKE, 122982edd19a092114c479134cb16e0af54730edf1fPrashant Malani UPIO_LPM_MODE, 123982edd19a092114c479134cb16e0af54730edf1fPrashant Malani UPIO_MAX_COUNT 124982edd19a092114c479134cb16e0af54730edf1fPrashant Malani}; 125982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 126982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* UPIO assertion/deassertion */ 127982edd19a092114c479134cb16e0af54730edf1fPrashant Malanienum { 128982edd19a092114c479134cb16e0af54730edf1fPrashant Malani UPIO_UNKNOWN = 0, 129982edd19a092114c479134cb16e0af54730edf1fPrashant Malani UPIO_DEASSERT, 130982edd19a092114c479134cb16e0af54730edf1fPrashant Malani UPIO_ASSERT 131982edd19a092114c479134cb16e0af54730edf1fPrashant Malani}; 132982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 133982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define VND_PORT_NAME_MAXLEN 256 134982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 135982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* vendor serial control block */ 136982edd19a092114c479134cb16e0af54730edf1fPrashant Malanitypedef struct 137982edd19a092114c479134cb16e0af54730edf1fPrashant Malani{ 138982edd19a092114c479134cb16e0af54730edf1fPrashant Malani int fd; /* fd to Bluetooth device */ 139982edd19a092114c479134cb16e0af54730edf1fPrashant Malani struct termios termios; /* serial terminal of BT port */ 140982edd19a092114c479134cb16e0af54730edf1fPrashant Malani char port_name[VND_PORT_NAME_MAXLEN]; 141982edd19a092114c479134cb16e0af54730edf1fPrashant Malani} vnd_userial_cb_t; 142982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 143982edd19a092114c479134cb16e0af54730edf1fPrashant Malanitypedef struct { 144982edd19a092114c479134cb16e0af54730edf1fPrashant Malani uint8_t ncmd; 145982edd19a092114c479134cb16e0af54730edf1fPrashant Malani uint16_t opcode; 146982edd19a092114c479134cb16e0af54730edf1fPrashant Malani} __attribute__ ((packed)) evt_cmd_complete; 147982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 148982edd19a092114c479134cb16e0af54730edf1fPrashant Malanitypedef struct { 149982edd19a092114c479134cb16e0af54730edf1fPrashant Malani uint8_t status; 150982edd19a092114c479134cb16e0af54730edf1fPrashant Malani uint8_t ncmd; 151982edd19a092114c479134cb16e0af54730edf1fPrashant Malani uint16_t opcode; 152982edd19a092114c479134cb16e0af54730edf1fPrashant Malani} __attribute__ ((packed)) evt_cmd_status; 153982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 154982edd19a092114c479134cb16e0af54730edf1fPrashant Malanitypedef struct { 155982edd19a092114c479134cb16e0af54730edf1fPrashant Malani uint16_t opcode; 156982edd19a092114c479134cb16e0af54730edf1fPrashant Malani uint8_t plen; 157982edd19a092114c479134cb16e0af54730edf1fPrashant Malani} __attribute__ ((packed)) hci_command_hdr; 158982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 159982edd19a092114c479134cb16e0af54730edf1fPrashant Malanitypedef struct { 160982edd19a092114c479134cb16e0af54730edf1fPrashant Malani uint8_t evt; 161982edd19a092114c479134cb16e0af54730edf1fPrashant Malani uint8_t plen; 162982edd19a092114c479134cb16e0af54730edf1fPrashant Malani} __attribute__ ((packed)) hci_event_hdr; 163982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 164982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/****************************************************************************** 165982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Extern 166982edd19a092114c479134cb16e0af54730edf1fPrashant Malani******************************************************************************/ 167982edd19a092114c479134cb16e0af54730edf1fPrashant Malaniextern vnd_userial_cb_t vnd_userial; 168982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 169982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 170982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/******************************************************************************* 171982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** 172982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Function userial_vendor_init 173982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** 174982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Description Initialize userial vendor-specific control block 175982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** 176982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Returns None 177982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** 178982edd19a092114c479134cb16e0af54730edf1fPrashant Malani*******************************************************************************/ 179982edd19a092114c479134cb16e0af54730edf1fPrashant Malanivoid userial_vendor_init(void); 180982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 181982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/******************************************************************************* 182982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** 183982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Function userial_vendor_open 184982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** 185982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Description Open the serial port with the given configuration 186982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** 187982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Returns device fd 188982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** 189982edd19a092114c479134cb16e0af54730edf1fPrashant Malani*******************************************************************************/ 190982edd19a092114c479134cb16e0af54730edf1fPrashant Malaniint userial_vendor_open(tUSERIAL_CFG *p_cfg); 191982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 192982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/******************************************************************************* 193982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** 194982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Function userial_vendor_close 195982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** 196982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Description Conduct vendor-specific close work 197982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** 198982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Returns None 199982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** 200982edd19a092114c479134cb16e0af54730edf1fPrashant Malani*******************************************************************************/ 201982edd19a092114c479134cb16e0af54730edf1fPrashant Malanivoid userial_vendor_close(void); 202982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 203982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/******************************************************************************* 204982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** 205982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Function userial_vendor_set_baud 206982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** 207982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Description Set new baud rate 208982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** 209982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Returns None 210982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** 211982edd19a092114c479134cb16e0af54730edf1fPrashant Malani*******************************************************************************/ 212982edd19a092114c479134cb16e0af54730edf1fPrashant Malanivoid userial_vendor_set_baud(uint8_t userial_baud); 213982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 214982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/******************************************************************************* 215982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** 216982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Function userial_vendor_ioctl 217982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** 218982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Description ioctl inteface 219982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** 220982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Returns int error 221982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** 222982edd19a092114c479134cb16e0af54730edf1fPrashant Malani*******************************************************************************/ 223982edd19a092114c479134cb16e0af54730edf1fPrashant Malaniint userial_vendor_ioctl(userial_vendor_ioctl_op_t op, int *p_data); 224982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 225982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/******************************************************************************* 226982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** 227982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Function read_hci_event 228982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** 229982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Description Read HCI event during vendor initialization 230982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** 231982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Returns int: size to read 232982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** 233982edd19a092114c479134cb16e0af54730edf1fPrashant Malani*******************************************************************************/ 234982edd19a092114c479134cb16e0af54730edf1fPrashant Malaniint read_hci_event(int fd, unsigned char* buf, int size); 235982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 236982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#endif /* HCI_UART_H */ 237