hw_ar3k.h revision 99bfc35243bc810e59ef0c0f39bd79eb59030ab2
199bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park/* 299bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park * Copyright 2012 The Android Open Source Project 399bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park * Copyright (c) 2013, The Linux Foundation. All rights reserved. 499bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park * Not a Contribution. 599bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park * 699bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park * Licensed under the Apache License, Version 2.0 (the "License"); 799bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park * you may not use this file except in compliance with the License. 899bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park * You may obtain a copy of the License at 999bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park * 1099bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park * http://www.apache.org/licenses/LICENSE-2.0 1199bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park * 1299bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park * Unless required by applicable law or agreed to in writing, software 1399bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park * distributed under the License is distributed on an "AS IS" BASIS, 1499bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1599bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park * See the License for the specific language governing permissions and 1699bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park * limitations under the License. 1799bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park */ 1899bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#ifndef HW_AR3K_H 1999bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define HW_AR3K_H 2099bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park 2199bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park/****************************************************************************** 2299bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park** Constants & Macros 2399bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park******************************************************************************/ 2499bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define MAX_CNT_RETRY 100 2599bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park 2699bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define HCI_MAX_CMD_SIZE 260 2799bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define HCI_MAX_EVENT_SIZE 260 2899bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define HCI_CHG_BAUD_CMD_OCF 0x0C 2999bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define HCI_VENDOR_CMD_OGF 0x3F 3099bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define WRITE_BDADDR_CMD_LEN 14 3199bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define WRITE_BAUD_CMD_LEN 6 3299bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define MAX_CMD_LEN WRITE_BDADDR_CMD_LEN 3399bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define GET_VERSION_OCF 0x1E 3499bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park/* Byte order conversions */ 3599bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#if __BYTE_ORDER == __LITTLE_ENDIAN 3699bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define htobs(d) (d) 3799bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define htobl(d) (d) 3899bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define btohs(d) (d) 3999bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define btohl(d) (d) 4099bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#elif __BYTE_ORDER == __BIG_ENDIAN 4199bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define htobs(d) bswap_16(d) 4299bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define htobl(d) bswap_32(d) 4399bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define btohs(d) bswap_16(d) 4499bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define btohl(d) bswap_32(d) 4599bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#else 4699bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#error "Unknown byte order" 4799bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#endif 4899bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park 4999bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define FW_PATH "/system/etc/firmware/ar3k/" 5099bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park 5199bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define STREAM_TO_UINT16(u16, p) \ 5299bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park {u16 = ((uint16_t)(*(p)) + (((uint16_t)(*((p) + 1))) << 8)); (p) += 2;} 5399bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define UINT16_TO_STREAM(p, u16) \ 5499bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park {*(p)++ = (uint8_t)(u16); *(p)++ = (uint8_t)((u16) >> 8);} 5599bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define UINT32_TO_STREAM(p, u32) \ 5699bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park {*(p)++ = (uint8_t)(u32); *(p)++ = (uint8_t)((u32) >> 8);\ 5799bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park *(p)++ = (uint8_t)((u32) >> 16); *(p)++ = (uint8_t)((u32) >> 24);} 5899bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park 5999bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define MAX_TAGS 50 6099bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define PS_HDR_LEN 4 6199bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define HCI_VENDOR_CMD_OGF 0x3F 6299bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define HCI_PS_CMD_OCF 0x0B 6399bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park 6499bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define VERIFY_CRC 9 6599bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define PS_REGION 1 6699bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define PATCH_REGION 2 6799bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define BDADDR_FILE "ar3kbdaddr.pst" 6899bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park 6999bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park 7099bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define MAX_PATCH_CMD 244 7199bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Parkstruct patch_entry { 7299bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park int16_t len; 7399bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park uint8_t data[MAX_PATCH_CMD]; 7499bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park}; 7599bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define HCI_UART_RAW_DEVICE 0 7699bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define HCI_COMMAND_HDR_SIZE 3 7799bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define PS_WRITE 1 7899bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define PS_RESET 2 7999bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define WRITE_PATCH 8 8099bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define ENABLE_PATCH 11 8199bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park 8299bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define HCI_PS_CMD_HDR_LEN 7 8399bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define HCI_CMD_MAX_LEN 258 8499bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define PS_RESET_PARAM_LEN 6 8599bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define PS_RESET_CMD_LEN (HCI_PS_CMD_HDR_LEN + PS_RESET_PARAM_LEN) 8699bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park 8799bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define PS_ID_MASK 0xFF 8899bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park 8999bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park 9099bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define LOCAL_NAME_BUFFER_LEN 32 9199bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define DEV_REGISTER 0x4FFC 9299bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define GET_DEV_TYPE_OCF 0x05 9399bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park 9499bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define HCIDEVUP _IOW('H', 201, int) 9599bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define OGF_VENDOR_CMD 0x3f 9699bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define EVT_CMD_COMPLETE_SIZE 3 9799bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define EVT_CMD_STATUS 0x0F 9899bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define EVT_CMD_STATUS_SIZE 4 9999bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define HCI_COMMAND_HDR_SIZE 3 10099bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define HCI_EVENT_HDR_SIZE 2 10199bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define HCI_EV_SUCCESS 0x00 10299bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park/* HCI Socket options */ 10399bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define HCI_DATA_DIR 1 10499bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define HCI_FILTER 2 10599bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define HCI_TIME_STAMP 3 10699bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park 10799bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park/* HCI CMSG flags */ 10899bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define HCI_CMSG_DIR 0x0001 10999bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define HCI_CMSG_TSTAMP 0x0002 11099bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park 11199bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#ifndef VENDOR_LPM_PROC_NODE 11299bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define VENDOR_LPM_PROC_NODE "/sys/module/hci_uart/parameters/ath_lpm" 11399bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#endif 11499bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park 11599bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park/* proc fs node for notifying write request */ 11699bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#ifndef VENDOR_BTWRITE_PROC_NODE 11799bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#define VENDOR_BTWRITE_PROC_NODE "/sys/module/hci_uart/parameters/ath_btwrite" 11899bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#endif 11999bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park 12099bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park/****************************************************************************** 12199bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park** Local type definitions 12299bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park******************************************************************************/ 12399bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Parktypedef struct { 12499bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park uint8_t b[6]; 12599bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park} __attribute__((packed)) bdaddr_t; 12699bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park 12799bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Parkstruct sockaddr_hci { 12899bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park sa_family_t hci_family; 12999bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park unsigned short hci_dev; 13099bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park unsigned short hci_channel; 13199bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park}; 13299bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park 13399bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Parkstruct tag_info { 13499bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park unsigned section; 13599bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park unsigned line_count; 13699bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park unsigned char_cnt; 13799bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park unsigned byte_count; 13899bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park}; 13999bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park 14099bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Parkstruct ps_cfg_entry { 14199bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park uint32_t id; 14299bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park uint32_t len; 14399bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park uint8_t *data; 14499bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park}; 14599bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park 14699bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Parkstruct ps_entry_type { 14799bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park unsigned char type; 14899bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park unsigned char array; 14999bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park}; 15099bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park 15199bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Parkstruct uart_t { 15299bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park char *type; 15399bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park int m_id; 15499bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park int p_id; 15599bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park int proto; 15699bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park int init_speed; 15799bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park int speed; 15899bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park int flags; 15999bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park int pm; 16099bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park char *bdaddr; 16199bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park int (*init) (int fd, struct uart_t *u, struct termios *ti); 16299bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park int (*post) (int fd, struct uart_t *u, struct termios *ti); 16399bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park}; 16499bfc35243bc810e59ef0c0f39bd79eb59030ab2Ecco Park#endif /* HW_AR3K_H */ 165