1//------------------------------------------------------------------------------ 2// <copyright file="wmix.h" company="Atheros"> 3// Copyright (c) 2004-2010 Atheros Corporation. All rights reserved. 4// 5// 6// Permission to use, copy, modify, and/or distribute this software for any 7// purpose with or without fee is hereby granted, provided that the above 8// copyright notice and this permission notice appear in all copies. 9// 10// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17// 18// 19//------------------------------------------------------------------------------ 20//============================================================================== 21// Author(s): ="Atheros" 22//============================================================================== 23 24/* 25 * This file contains extensions of the WMI protocol specified in the 26 * Wireless Module Interface (WMI). It includes definitions of all 27 * extended commands and events. Extensions include useful commands 28 * that are not directly related to wireless activities. They may 29 * be hardware-specific, and they might not be supported on all 30 * implementations. 31 * 32 * Extended WMIX commands are encapsulated in a WMI message with 33 * cmd=WMI_EXTENSION_CMD. 34 */ 35 36#ifndef _WMIX_H_ 37#define _WMIX_H_ 38 39#ifdef __cplusplus 40extern "C" { 41#endif 42 43#ifndef ATH_TARGET 44#include "athstartpack.h" 45#endif 46 47#include "dbglog.h" 48 49/* 50 * Extended WMI commands are those that are needed during wireless 51 * operation, but which are not really wireless commands. This allows, 52 * for instance, platform-specific commands. Extended WMI commands are 53 * embedded in a WMI command message with WMI_COMMAND_ID=WMI_EXTENSION_CMDID. 54 * Extended WMI events are similarly embedded in a WMI event message with 55 * WMI_EVENT_ID=WMI_EXTENSION_EVENTID. 56 */ 57typedef PREPACK struct { 58 A_UINT32 commandId; 59} POSTPACK WMIX_CMD_HDR; 60 61typedef enum { 62 WMIX_DSETOPEN_REPLY_CMDID = 0x2001, 63 WMIX_DSETDATA_REPLY_CMDID, 64 WMIX_GPIO_OUTPUT_SET_CMDID, 65 WMIX_GPIO_INPUT_GET_CMDID, 66 WMIX_GPIO_REGISTER_SET_CMDID, 67 WMIX_GPIO_REGISTER_GET_CMDID, 68 WMIX_GPIO_INTR_ACK_CMDID, 69 WMIX_HB_CHALLENGE_RESP_CMDID, 70 WMIX_DBGLOG_CFG_MODULE_CMDID, 71 WMIX_PROF_CFG_CMDID, /* 0x200a */ 72 WMIX_PROF_ADDR_SET_CMDID, 73 WMIX_PROF_START_CMDID, 74 WMIX_PROF_STOP_CMDID, 75 WMIX_PROF_COUNT_GET_CMDID, 76} WMIX_COMMAND_ID; 77 78typedef enum { 79 WMIX_DSETOPENREQ_EVENTID = 0x3001, 80 WMIX_DSETCLOSE_EVENTID, 81 WMIX_DSETDATAREQ_EVENTID, 82 WMIX_GPIO_INTR_EVENTID, 83 WMIX_GPIO_DATA_EVENTID, 84 WMIX_GPIO_ACK_EVENTID, 85 WMIX_HB_CHALLENGE_RESP_EVENTID, 86 WMIX_DBGLOG_EVENTID, 87 WMIX_PROF_COUNT_EVENTID, 88} WMIX_EVENT_ID; 89 90/* 91 * =============DataSet support================= 92 */ 93 94/* 95 * WMIX_DSETOPENREQ_EVENTID 96 * DataSet Open Request Event 97 */ 98typedef PREPACK struct { 99 A_UINT32 dset_id; 100 A_UINT32 targ_dset_handle; /* echo'ed, not used by Host, */ 101 A_UINT32 targ_reply_fn; /* echo'ed, not used by Host, */ 102 A_UINT32 targ_reply_arg; /* echo'ed, not used by Host, */ 103} POSTPACK WMIX_DSETOPENREQ_EVENT; 104 105/* 106 * WMIX_DSETCLOSE_EVENTID 107 * DataSet Close Event 108 */ 109typedef PREPACK struct { 110 A_UINT32 access_cookie; 111} POSTPACK WMIX_DSETCLOSE_EVENT; 112 113/* 114 * WMIX_DSETDATAREQ_EVENTID 115 * DataSet Data Request Event 116 */ 117typedef PREPACK struct { 118 A_UINT32 access_cookie; 119 A_UINT32 offset; 120 A_UINT32 length; 121 A_UINT32 targ_buf; /* echo'ed, not used by Host, */ 122 A_UINT32 targ_reply_fn; /* echo'ed, not used by Host, */ 123 A_UINT32 targ_reply_arg; /* echo'ed, not used by Host, */ 124} POSTPACK WMIX_DSETDATAREQ_EVENT; 125 126typedef PREPACK struct { 127 A_UINT32 status; 128 A_UINT32 targ_dset_handle; 129 A_UINT32 targ_reply_fn; 130 A_UINT32 targ_reply_arg; 131 A_UINT32 access_cookie; 132 A_UINT32 size; 133 A_UINT32 version; 134} POSTPACK WMIX_DSETOPEN_REPLY_CMD; 135 136typedef PREPACK struct { 137 A_UINT32 status; 138 A_UINT32 targ_buf; 139 A_UINT32 targ_reply_fn; 140 A_UINT32 targ_reply_arg; 141 A_UINT32 length; 142 A_UINT8 buf[1]; 143} POSTPACK WMIX_DSETDATA_REPLY_CMD; 144 145 146/* 147 * =============GPIO support================= 148 * All masks are 18-bit masks with bit N operating on GPIO pin N. 149 */ 150 151#include "gpio.h" 152 153/* 154 * Set GPIO pin output state. 155 * In order for output to be driven, a pin must be enabled for output. 156 * This can be done during initialization through the GPIO Configuration 157 * DataSet, or during operation with the enable_mask. 158 * 159 * If a request is made to simultaneously set/clear or set/disable or 160 * clear/disable or disable/enable, results are undefined. 161 */ 162typedef PREPACK struct { 163 A_UINT32 set_mask; /* pins to set */ 164 A_UINT32 clear_mask; /* pins to clear */ 165 A_UINT32 enable_mask; /* pins to enable for output */ 166 A_UINT32 disable_mask; /* pins to disable/tristate */ 167} POSTPACK WMIX_GPIO_OUTPUT_SET_CMD; 168 169/* 170 * Set a GPIO register. For debug/exceptional cases. 171 * Values for gpioreg_id are GPIO_REGISTER_IDs, defined in a 172 * platform-dependent header. 173 */ 174typedef PREPACK struct { 175 A_UINT32 gpioreg_id; /* GPIO register ID */ 176 A_UINT32 value; /* value to write */ 177} POSTPACK WMIX_GPIO_REGISTER_SET_CMD; 178 179/* Get a GPIO register. For debug/exceptional cases. */ 180typedef PREPACK struct { 181 A_UINT32 gpioreg_id; /* GPIO register to read */ 182} POSTPACK WMIX_GPIO_REGISTER_GET_CMD; 183 184/* 185 * Host acknowledges and re-arms GPIO interrupts. A single 186 * message should be used to acknowledge all interrupts that 187 * were delivered in an earlier WMIX_GPIO_INTR_EVENT message. 188 */ 189typedef PREPACK struct { 190 A_UINT32 ack_mask; /* interrupts to acknowledge */ 191} POSTPACK WMIX_GPIO_INTR_ACK_CMD; 192 193/* 194 * Target informs Host of GPIO interrupts that have ocurred since the 195 * last WMIX_GIPO_INTR_ACK_CMD was received. Additional information -- 196 * the current GPIO input values is provided -- in order to support 197 * use of a GPIO interrupt as a Data Valid signal for other GPIO pins. 198 */ 199typedef PREPACK struct { 200 A_UINT32 intr_mask; /* pending GPIO interrupts */ 201 A_UINT32 input_values; /* recent GPIO input values */ 202} POSTPACK WMIX_GPIO_INTR_EVENT; 203 204/* 205 * Target responds to Host's earlier WMIX_GPIO_INPUT_GET_CMDID request 206 * using a GPIO_DATA_EVENT with 207 * value set to the mask of GPIO pin inputs and 208 * reg_id set to GPIO_ID_NONE 209 * 210 * 211 * Target responds to Hosts's earlier WMIX_GPIO_REGISTER_GET_CMDID request 212 * using a GPIO_DATA_EVENT with 213 * value set to the value of the requested register and 214 * reg_id identifying the register (reflects the original request) 215 * NB: reg_id supports the future possibility of unsolicited 216 * WMIX_GPIO_DATA_EVENTs (for polling GPIO input), and it may 217 * simplify Host GPIO support. 218 */ 219typedef PREPACK struct { 220 A_UINT32 value; 221 A_UINT32 reg_id; 222} POSTPACK WMIX_GPIO_DATA_EVENT; 223 224/* 225 * =============Error Detection support================= 226 */ 227 228/* 229 * WMIX_HB_CHALLENGE_RESP_CMDID 230 * Heartbeat Challenge Response command 231 */ 232typedef PREPACK struct { 233 A_UINT32 cookie; 234 A_UINT32 source; 235} POSTPACK WMIX_HB_CHALLENGE_RESP_CMD; 236 237/* 238 * WMIX_HB_CHALLENGE_RESP_EVENTID 239 * Heartbeat Challenge Response Event 240 */ 241#define WMIX_HB_CHALLENGE_RESP_EVENT WMIX_HB_CHALLENGE_RESP_CMD 242 243typedef PREPACK struct { 244 struct dbglog_config_s config; 245} POSTPACK WMIX_DBGLOG_CFG_MODULE_CMD; 246 247/* 248 * =============Target Profiling support================= 249 */ 250 251typedef PREPACK struct { 252 A_UINT32 period; /* Time (in 30.5us ticks) between samples */ 253 A_UINT32 nbins; 254} POSTPACK WMIX_PROF_CFG_CMD; 255 256typedef PREPACK struct { 257 A_UINT32 addr; 258} POSTPACK WMIX_PROF_ADDR_SET_CMD; 259 260/* 261 * Target responds to Hosts's earlier WMIX_PROF_COUNT_GET_CMDID request 262 * using a WMIX_PROF_COUNT_EVENT with 263 * addr set to the next address 264 * count set to the corresponding count 265 */ 266typedef PREPACK struct { 267 A_UINT32 addr; 268 A_UINT32 count; 269} POSTPACK WMIX_PROF_COUNT_EVENT; 270 271#ifndef ATH_TARGET 272#include "athendpack.h" 273#endif 274 275#ifdef __cplusplus 276} 277#endif 278 279#endif /* _WMIX_H_ */ 280