1982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* 2982edd19a092114c479134cb16e0af54730edf1fPrashant Malani * Copyright 2012 The Android Open Source Project 3982edd19a092114c479134cb16e0af54730edf1fPrashant Malani * Copyright (c) 2013, The Linux Foundation. All rights reserved. 4982edd19a092114c479134cb16e0af54730edf1fPrashant Malani * Not a Contribution. 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#ifndef HW_AR3K_H 19982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HW_AR3K_H 20982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 21982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/****************************************************************************** 22982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Constants & Macros 23982edd19a092114c479134cb16e0af54730edf1fPrashant Malani******************************************************************************/ 24982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define MAX_CNT_RETRY 100 25982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 26982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_MAX_CMD_SIZE 260 27982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_MAX_EVENT_SIZE 260 28982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_CHG_BAUD_CMD_OCF 0x0C 29982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_VENDOR_CMD_OGF 0x3F 30982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define WRITE_BDADDR_CMD_LEN 14 31982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define WRITE_BAUD_CMD_LEN 6 32982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define MAX_CMD_LEN WRITE_BDADDR_CMD_LEN 33982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define GET_VERSION_OCF 0x1E 34982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* Byte order conversions */ 35982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#if __BYTE_ORDER == __LITTLE_ENDIAN 36982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define htobs(d) (d) 37982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define htobl(d) (d) 38982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define btohs(d) (d) 39982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define btohl(d) (d) 40982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#elif __BYTE_ORDER == __BIG_ENDIAN 41982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define htobs(d) bswap_16(d) 42982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define htobl(d) bswap_32(d) 43982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define btohs(d) bswap_16(d) 44982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define btohl(d) bswap_32(d) 45982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#else 46982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#error "Unknown byte order" 47982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#endif 48982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 49982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define FW_PATH "/system/etc/firmware/ar3k/" 50982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 51982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define STREAM_TO_UINT16(u16, p) \ 52982edd19a092114c479134cb16e0af54730edf1fPrashant Malani {u16 = ((uint16_t)(*(p)) + (((uint16_t)(*((p) + 1))) << 8)); (p) += 2;} 53982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define UINT16_TO_STREAM(p, u16) \ 54982edd19a092114c479134cb16e0af54730edf1fPrashant Malani {*(p)++ = (uint8_t)(u16); *(p)++ = (uint8_t)((u16) >> 8);} 55982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define UINT32_TO_STREAM(p, u32) \ 56982edd19a092114c479134cb16e0af54730edf1fPrashant Malani {*(p)++ = (uint8_t)(u32); *(p)++ = (uint8_t)((u32) >> 8);\ 57982edd19a092114c479134cb16e0af54730edf1fPrashant Malani *(p)++ = (uint8_t)((u32) >> 16); *(p)++ = (uint8_t)((u32) >> 24);} 58982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 59982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define MAX_TAGS 50 60982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define PS_HDR_LEN 4 61982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_VENDOR_CMD_OGF 0x3F 62982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_PS_CMD_OCF 0x0B 63982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 64982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define VERIFY_CRC 9 65982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define PS_REGION 1 66982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define PATCH_REGION 2 67982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define BDADDR_FILE "ar3kbdaddr.pst" 68982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 69982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 70982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define MAX_PATCH_CMD 244 71982edd19a092114c479134cb16e0af54730edf1fPrashant Malanistruct patch_entry { 72982edd19a092114c479134cb16e0af54730edf1fPrashant Malani int16_t len; 73982edd19a092114c479134cb16e0af54730edf1fPrashant Malani uint8_t data[MAX_PATCH_CMD]; 74982edd19a092114c479134cb16e0af54730edf1fPrashant Malani}; 75982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_UART_RAW_DEVICE 0 76982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_COMMAND_HDR_SIZE 3 77982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define PS_WRITE 1 78982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define PS_RESET 2 79982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define WRITE_PATCH 8 80982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define ENABLE_PATCH 11 81982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 82982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_PS_CMD_HDR_LEN 7 83982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_CMD_MAX_LEN 258 84982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define PS_RESET_PARAM_LEN 6 85982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define PS_RESET_CMD_LEN (HCI_PS_CMD_HDR_LEN + PS_RESET_PARAM_LEN) 86982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 87982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define PS_ID_MASK 0xFF 88982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 89982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 90982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define LOCAL_NAME_BUFFER_LEN 32 91982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define DEV_REGISTER 0x4FFC 92982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define GET_DEV_TYPE_OCF 0x05 93982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 94982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCIDEVUP _IOW('H', 201, int) 95982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define OGF_VENDOR_CMD 0x3f 96982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define EVT_CMD_COMPLETE_SIZE 3 97982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define EVT_CMD_STATUS 0x0F 98982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define EVT_CMD_STATUS_SIZE 4 99982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_COMMAND_HDR_SIZE 3 100982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_EVENT_HDR_SIZE 2 101982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_EV_SUCCESS 0x00 102982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* HCI Socket options */ 103982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_DATA_DIR 1 104982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_FILTER 2 105982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_TIME_STAMP 3 106982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 107982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* HCI CMSG flags */ 108982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_CMSG_DIR 0x0001 109982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_CMSG_TSTAMP 0x0002 110982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 111982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#ifndef VENDOR_LPM_PROC_NODE 112982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define VENDOR_LPM_PROC_NODE "/sys/module/hci_uart/parameters/ath_lpm" 113982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#endif 114982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 115982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* proc fs node for notifying write request */ 116982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#ifndef VENDOR_BTWRITE_PROC_NODE 117982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define VENDOR_BTWRITE_PROC_NODE "/sys/module/hci_uart/parameters/ath_btwrite" 118982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#endif 119982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 120982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/****************************************************************************** 121982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Local type definitions 122982edd19a092114c479134cb16e0af54730edf1fPrashant Malani******************************************************************************/ 123982edd19a092114c479134cb16e0af54730edf1fPrashant Malanitypedef struct { 124982edd19a092114c479134cb16e0af54730edf1fPrashant Malani uint8_t b[6]; 125982edd19a092114c479134cb16e0af54730edf1fPrashant Malani} __attribute__((packed)) bdaddr_t; 126982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 127982edd19a092114c479134cb16e0af54730edf1fPrashant Malanistruct sockaddr_hci { 128982edd19a092114c479134cb16e0af54730edf1fPrashant Malani sa_family_t hci_family; 129982edd19a092114c479134cb16e0af54730edf1fPrashant Malani unsigned short hci_dev; 130982edd19a092114c479134cb16e0af54730edf1fPrashant Malani unsigned short hci_channel; 131982edd19a092114c479134cb16e0af54730edf1fPrashant Malani}; 132982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 133982edd19a092114c479134cb16e0af54730edf1fPrashant Malanistruct tag_info { 134982edd19a092114c479134cb16e0af54730edf1fPrashant Malani unsigned section; 135982edd19a092114c479134cb16e0af54730edf1fPrashant Malani unsigned line_count; 136982edd19a092114c479134cb16e0af54730edf1fPrashant Malani unsigned char_cnt; 137982edd19a092114c479134cb16e0af54730edf1fPrashant Malani unsigned byte_count; 138982edd19a092114c479134cb16e0af54730edf1fPrashant Malani}; 139982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 140982edd19a092114c479134cb16e0af54730edf1fPrashant Malanistruct ps_cfg_entry { 141982edd19a092114c479134cb16e0af54730edf1fPrashant Malani uint32_t id; 142982edd19a092114c479134cb16e0af54730edf1fPrashant Malani uint32_t len; 143982edd19a092114c479134cb16e0af54730edf1fPrashant Malani uint8_t *data; 144982edd19a092114c479134cb16e0af54730edf1fPrashant Malani}; 145982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 146982edd19a092114c479134cb16e0af54730edf1fPrashant Malanistruct ps_entry_type { 147982edd19a092114c479134cb16e0af54730edf1fPrashant Malani unsigned char type; 148982edd19a092114c479134cb16e0af54730edf1fPrashant Malani unsigned char array; 149982edd19a092114c479134cb16e0af54730edf1fPrashant Malani}; 150982edd19a092114c479134cb16e0af54730edf1fPrashant Malani 151982edd19a092114c479134cb16e0af54730edf1fPrashant Malanistruct uart_t { 152982edd19a092114c479134cb16e0af54730edf1fPrashant Malani char *type; 153982edd19a092114c479134cb16e0af54730edf1fPrashant Malani int m_id; 154982edd19a092114c479134cb16e0af54730edf1fPrashant Malani int p_id; 155982edd19a092114c479134cb16e0af54730edf1fPrashant Malani int proto; 156982edd19a092114c479134cb16e0af54730edf1fPrashant Malani int init_speed; 157982edd19a092114c479134cb16e0af54730edf1fPrashant Malani int speed; 158982edd19a092114c479134cb16e0af54730edf1fPrashant Malani int flags; 159982edd19a092114c479134cb16e0af54730edf1fPrashant Malani int pm; 160982edd19a092114c479134cb16e0af54730edf1fPrashant Malani char *bdaddr; 161982edd19a092114c479134cb16e0af54730edf1fPrashant Malani int (*init) (int fd, struct uart_t *u, struct termios *ti); 162982edd19a092114c479134cb16e0af54730edf1fPrashant Malani int (*post) (int fd, struct uart_t *u, struct termios *ti); 163982edd19a092114c479134cb16e0af54730edf1fPrashant Malani}; 164982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#endif /* HW_AR3K_H */ 165