1  /*
2   * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved.
3   *
4   * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5   *
6   *
7   * Permission to use, copy, modify, and/or distribute this software for
8   * any purpose with or without fee is hereby granted, provided that the
9   * above copyright notice and this permission notice appear in all
10   * copies.
11   *
12   * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13   * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14   * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15   * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16   * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17   * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18   * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19   * PERFORMANCE OF THIS SOFTWARE.
20   */
21  
22  /*
23   * This file was originally distributed by Qualcomm Atheros, Inc.
24   * under proprietary terms before Copyright ownership was assigned
25   * to the Linux Foundation.
26   */
27  
28  /*
29   * This file contains extensions of the WMI protocol specified in the
30   * Wireless Module Interface (WMI).  It includes definitions of all
31   * extended commands and events.  Extensions include useful commands
32   * that are not directly related to wireless activities.  They may
33   * be hardware-specific, and they might not be supported on all
34   * implementations.
35   *
36   * Extended WMIX commands are encapsulated in a WMI message with
37   * cmd=WMI_EXTENSION_CMD.
38   */
39  
40  #ifndef _WMIX_H_
41  #define _WMIX_H_
42  
43  #ifdef __cplusplus
44  extern "C" {
45  #endif
46  
47  /*
48   * Extended WMI commands are those that are needed during wireless
49   * operation, but which are not really wireless commands.  This allows,
50   * for instance, platform-specific commands.  Extended WMI commands are
51   * embedded in a WMI command message with WMI_COMMAND_ID=WMI_EXTENSION_CMDID.
52   * Extended WMI events are similarly embedded in a WMI event message with
53   * WMI_EVENT_ID=WMI_EXTENSION_EVENTID.
54   */
55  typedef struct {
56      A_UINT32    commandId;
57  } POSTPACK WMIX_CMD_HDR;
58  
59  typedef enum {
60      WMIX_DSETOPEN_REPLY_CMDID           = 0x2001,
61      WMIX_DSETDATA_REPLY_CMDID,
62      WMIX_HB_CHALLENGE_RESP_CMDID,
63      WMIX_DBGLOG_CFG_MODULE_CMDID,
64      WMIX_PROF_CFG_CMDID,                 /* 0x200a */
65      WMIX_PROF_ADDR_SET_CMDID,
66      WMIX_PROF_START_CMDID,
67      WMIX_PROF_STOP_CMDID,
68      WMIX_PROF_COUNT_GET_CMDID,
69  } WMIX_COMMAND_ID;
70  
71  typedef enum {
72      WMIX_DSETOPENREQ_EVENTID            = 0x3001,
73      WMIX_DSETCLOSE_EVENTID,
74      WMIX_DSETDATAREQ_EVENTID,
75      WMIX_HB_CHALLENGE_RESP_EVENTID,
76      WMIX_DBGLOG_EVENTID,
77      WMIX_PROF_COUNT_EVENTID,
78      WMIX_PKTLOG_EVENTID,
79  } WMIX_EVENT_ID;
80  
81  /*
82   * =============DataSet support=================
83   */
84  
85  /*
86   * WMIX_DSETOPENREQ_EVENTID
87   * DataSet Open Request Event
88   */
89  typedef struct {
90      A_UINT32 dset_id;
91      A_UINT32 targ_dset_handle;  /* echo'ed, not used by Host, */
92      A_UINT32 targ_reply_fn;     /* echo'ed, not used by Host, */
93      A_UINT32 targ_reply_arg;    /* echo'ed, not used by Host, */
94  } POSTPACK WMIX_DSETOPENREQ_EVENT;
95  
96  /*
97   * WMIX_DSETCLOSE_EVENTID
98   * DataSet Close Event
99   */
100  typedef struct {
101      A_UINT32 access_cookie;
102  } POSTPACK WMIX_DSETCLOSE_EVENT;
103  
104  /*
105   * WMIX_DSETDATAREQ_EVENTID
106   * DataSet Data Request Event
107   */
108  typedef struct {
109      A_UINT32 access_cookie;
110      A_UINT32 offset;
111      A_UINT32 length;
112      A_UINT32 targ_buf;         /* echo'ed, not used by Host, */
113      A_UINT32 targ_reply_fn;    /* echo'ed, not used by Host, */
114      A_UINT32 targ_reply_arg;   /* echo'ed, not used by Host, */
115  } WMIX_DSETDATAREQ_EVENT;
116  
117  typedef struct {
118      A_UINT32              status;
119      A_UINT32              targ_dset_handle;
120      A_UINT32              targ_reply_fn;
121      A_UINT32              targ_reply_arg;
122      A_UINT32              access_cookie;
123      A_UINT32              size;
124      A_UINT32              version;
125  }  WMIX_DSETOPEN_REPLY_CMD;
126  
127  typedef struct {
128      A_UINT32              status;
129      A_UINT32              targ_buf;
130      A_UINT32              targ_reply_fn;
131      A_UINT32              targ_reply_arg;
132      A_UINT32              length;
133      A_UINT8               buf[1];
134  }  WMIX_DSETDATA_REPLY_CMD;
135  
136  
137  /*
138   * =============Error Detection support=================
139   */
140  
141  /*
142   * WMIX_HB_CHALLENGE_RESP_CMDID
143   * Heartbeat Challenge Response command
144   */
145  typedef struct {
146      A_UINT32              cookie;
147      A_UINT32              source;
148  }  WMIX_HB_CHALLENGE_RESP_CMD;
149  
150  /*
151   * WMIX_HB_CHALLENGE_RESP_EVENTID
152   * Heartbeat Challenge Response Event
153   */
154  #define WMIX_HB_CHALLENGE_RESP_EVENT WMIX_HB_CHALLENGE_RESP_CMD
155  
156  /*
157   * =============Target Profiling support=================
158   */
159  
160  typedef struct {
161      A_UINT32 period; /* Time (in 30.5us ticks) between samples */
162      A_UINT32 nbins;
163  }  WMIX_PROF_CFG_CMD;
164  
165  typedef struct {
166      A_UINT32 addr;
167  }  WMIX_PROF_ADDR_SET_CMD;
168  
169  /*
170   * Target responds to Hosts's earlier WMIX_PROF_COUNT_GET_CMDID request
171   * using a WMIX_PROF_COUNT_EVENT with
172   *   addr set to the next address
173   *   count set to the corresponding count
174   */
175  typedef struct {
176      A_UINT32              addr;
177      A_UINT32              count;
178  }  WMIX_PROF_COUNT_EVENT;
179  
180  
181  #ifdef __cplusplus
182  }
183  #endif
184  
185  #endif /* _WMIX_H_ */
186