You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

302 lines
9.3 KiB

2 years ago
  1. /*===========================================================================
  2. M P Q M I. H
  3. DESCRIPTION:
  4. This module contains forward references to the QMI module.
  5. INITIALIZATION AND SEQUENCING REQUIREMENTS:
  6. Copyright (C) 2011 by Qualcomm Technologies, Incorporated. All Rights Reserved.
  7. ===========================================================================*/
  8. /*===========================================================================
  9. EDIT HISTORY FOR FILE
  10. $Header: //depot/QMI/win/qcdrivers/ndis/MPQMI.h#3 $
  11. when who what, where, why
  12. -------- --- ----------------------------------------------------------
  13. 11/20/04 hg Initial version.
  14. ===========================================================================*/
  15. #ifndef USBQMI_H
  16. #define USBQMI_H
  17. typedef char CHAR;
  18. typedef unsigned char UCHAR;
  19. typedef short SHORT;
  20. typedef unsigned short USHORT;
  21. typedef int INT;
  22. typedef unsigned int UINT;
  23. typedef long LONG;
  24. typedef unsigned int ULONG;
  25. typedef unsigned long long ULONG64;
  26. typedef char *PCHAR;
  27. typedef unsigned char *PUCHAR;
  28. typedef int *PINT;
  29. typedef int BOOL;
  30. #define TRUE (1 == 1)
  31. #define FALSE (1 != 1)
  32. #define QMICTL_SUPPORTED_MAJOR_VERSION 1
  33. #define QMICTL_SUPPORTED_MINOR_VERSION 0
  34. #pragma pack(push, 1)
  35. // ========= USB Control Message ==========
  36. #define USB_CTL_MSG_TYPE_QMI 0x01
  37. // USB Control Message
  38. typedef struct _QCUSB_CTL_MSG_HDR
  39. {
  40. UCHAR IFType;
  41. } __attribute__ ((packed)) QCUSB_CTL_MSG_HDR, *PQCUSB_CTL_MSG_HDR;
  42. #define QCUSB_CTL_MSG_HDR_SIZE sizeof(QCUSB_CTL_MSG_HDR)
  43. typedef struct _QCUSB_CTL_MSG
  44. {
  45. UCHAR IFType;
  46. UCHAR Message;
  47. } __attribute__ ((packed)) QCUSB_CTL_MSG, *PQCUSB_CTL_MSG;
  48. #define QCTLV_TYPE_REQUIRED_PARAMETER 0x01
  49. #define QCTLV_TYPE_RESULT_CODE 0x02
  50. // ================= QMI ==================
  51. // Define QMI Type
  52. typedef enum _QMI_SERVICE_TYPE
  53. {
  54. QMUX_TYPE_CTL = 0x00,
  55. QMUX_TYPE_WDS = 0x01,
  56. QMUX_TYPE_DMS = 0x02,
  57. QMUX_TYPE_NAS = 0x03,
  58. QMUX_TYPE_QOS = 0x04,
  59. QMUX_TYPE_WMS = 0x05,
  60. QMUX_TYPE_PDS = 0x06,
  61. QMUX_TYPE_UIM = 0x0B,
  62. QMUX_TYPE_WDS_IPV6 = 0x11,
  63. QMUX_TYPE_WDS_ADMIN = 0x1A,
  64. QMUX_TYPE_MAX = 0xFF,
  65. QMUX_TYPE_ALL = 0xFF
  66. } QMI_SERVICE_TYPE;
  67. typedef enum _QMI_RESULT_CODE_TYPE
  68. {
  69. QMI_RESULT_SUCCESS = 0x0000,
  70. QMI_RESULT_FAILURE = 0x0001
  71. } QMI_RESULT_CODE_TYPE;
  72. typedef enum _QMI_ERROR_CODE_TYPE
  73. {
  74. QMI_ERR_NONE = 0x0000
  75. ,QMI_ERR_MALFORMED_MSG = 0x0001
  76. ,QMI_ERR_NO_MEMORY = 0x0002
  77. ,QMI_ERR_INTERNAL = 0x0003
  78. ,QMI_ERR_ABORTED = 0x0004
  79. ,QMI_ERR_CLIENT_IDS_EXHAUSTED = 0x0005
  80. ,QMI_ERR_UNABORTABLE_TRANSACTION = 0x0006
  81. ,QMI_ERR_INVALID_CLIENT_ID = 0x0007
  82. ,QMI_ERR_NO_THRESHOLDS = 0x0008
  83. ,QMI_ERR_INVALID_HANDLE = 0x0009
  84. ,QMI_ERR_INVALID_PROFILE = 0x000A
  85. ,QMI_ERR_INVALID_PINID = 0x000B
  86. ,QMI_ERR_INCORRECT_PIN = 0x000C
  87. ,QMI_ERR_NO_NETWORK_FOUND = 0x000D
  88. ,QMI_ERR_CALL_FAILED = 0x000E
  89. ,QMI_ERR_OUT_OF_CALL = 0x000F
  90. ,QMI_ERR_NOT_PROVISIONED = 0x0010
  91. ,QMI_ERR_MISSING_ARG = 0x0011
  92. ,QMI_ERR_ARG_TOO_LONG = 0x0013
  93. ,QMI_ERR_INVALID_TX_ID = 0x0016
  94. ,QMI_ERR_DEVICE_IN_USE = 0x0017
  95. ,QMI_ERR_OP_NETWORK_UNSUPPORTED = 0x0018
  96. ,QMI_ERR_OP_DEVICE_UNSUPPORTED = 0x0019
  97. ,QMI_ERR_NO_EFFECT = 0x001A
  98. ,QMI_ERR_NO_FREE_PROFILE = 0x001B
  99. ,QMI_ERR_INVALID_PDP_TYPE = 0x001C
  100. ,QMI_ERR_INVALID_TECH_PREF = 0x001D
  101. ,QMI_ERR_INVALID_PROFILE_TYPE = 0x001E
  102. ,QMI_ERR_INVALID_SERVICE_TYPE = 0x001F
  103. ,QMI_ERR_INVALID_REGISTER_ACTION = 0x0020
  104. ,QMI_ERR_INVALID_PS_ATTACH_ACTION = 0x0021
  105. ,QMI_ERR_AUTHENTICATION_FAILED = 0x0022
  106. ,QMI_ERR_PIN_BLOCKED = 0x0023
  107. ,QMI_ERR_PIN_PERM_BLOCKED = 0x0024
  108. ,QMI_ERR_SIM_NOT_INITIALIZED = 0x0025
  109. ,QMI_ERR_MAX_QOS_REQUESTS_IN_USE = 0x0026
  110. ,QMI_ERR_INCORRECT_FLOW_FILTER = 0x0027
  111. ,QMI_ERR_NETWORK_QOS_UNAWARE = 0x0028
  112. ,QMI_ERR_INVALID_QOS_ID = 0x0029
  113. ,QMI_ERR_INVALID_ID = 0x0029
  114. ,QMI_ERR_REQUESTED_NUM_UNSUPPORTED = 0x002A
  115. ,QMI_ERR_INTERFACE_NOT_FOUND = 0x002B
  116. ,QMI_ERR_FLOW_SUSPENDED = 0x002C
  117. ,QMI_ERR_INVALID_DATA_FORMAT = 0x002D
  118. ,QMI_ERR_GENERAL = 0x002E
  119. ,QMI_ERR_UNKNOWN = 0x002F
  120. ,QMI_ERR_INVALID_ARG = 0x0030
  121. ,QMI_ERR_INVALID_INDEX = 0x0031
  122. ,QMI_ERR_NO_ENTRY = 0x0032
  123. ,QMI_ERR_DEVICE_STORAGE_FULL = 0x0033
  124. ,QMI_ERR_DEVICE_NOT_READY = 0x0034
  125. ,QMI_ERR_NETWORK_NOT_READY = 0x0035
  126. ,QMI_ERR_CAUSE_CODE = 0x0036
  127. ,QMI_ERR_MESSAGE_NOT_SENT = 0x0037
  128. ,QMI_ERR_MESSAGE_DELIVERY_FAILURE = 0x0038
  129. ,QMI_ERR_INVALID_MESSAGE_ID = 0x0039
  130. ,QMI_ERR_ENCODING = 0x003A
  131. ,QMI_ERR_AUTHENTICATION_LOCK = 0x003B
  132. ,QMI_ERR_INVALID_TRANSITION = 0x003C
  133. ,QMI_ERR_NOT_A_MCAST_IFACE = 0x003D
  134. ,QMI_ERR_MAX_MCAST_REQUESTS_IN_USE = 0x003E
  135. ,QMI_ERR_INVALID_MCAST_HANDLE = 0x003F
  136. ,QMI_ERR_INVALID_IP_FAMILY_PREF = 0x0040
  137. ,QMI_ERR_SESSION_INACTIVE = 0x0041
  138. ,QMI_ERR_SESSION_INVALID = 0x0042
  139. ,QMI_ERR_SESSION_OWNERSHIP = 0x0043
  140. ,QMI_ERR_INSUFFICIENT_RESOURCES = 0x0044
  141. ,QMI_ERR_DISABLED = 0x0045
  142. ,QMI_ERR_INVALID_OPERATION = 0x0046
  143. ,QMI_ERR_INVALID_QMI_CMD = 0x0047
  144. ,QMI_ERR_TPDU_TYPE = 0x0048
  145. ,QMI_ERR_SMSC_ADDR = 0x0049
  146. ,QMI_ERR_INFO_UNAVAILABLE = 0x004A
  147. ,QMI_ERR_SEGMENT_TOO_LONG = 0x004B
  148. ,QMI_ERR_SEGMENT_ORDER = 0x004C
  149. ,QMI_ERR_BUNDLING_NOT_SUPPORTED = 0x004D
  150. ,QMI_ERR_OP_PARTIAL_FAILURE = 0x004E
  151. ,QMI_ERR_POLICY_MISMATCH = 0x004F
  152. ,QMI_ERR_SIM_FILE_NOT_FOUND = 0x0050
  153. ,QMI_ERR_EXTENDED_INTERNAL = 0x0051
  154. ,QMI_ERR_ACCESS_DENIED = 0x0052
  155. ,QMI_ERR_HARDWARE_RESTRICTED = 0x0053
  156. ,QMI_ERR_ACK_NOT_SENT = 0x0054
  157. ,QMI_ERR_INJECT_TIMEOUT = 0x0055
  158. ,QMI_ERR_INCOMPATIBLE_STATE = 0x005A
  159. ,QMI_ERR_FDN_RESTRICT = 0x005B
  160. ,QMI_ERR_SUPS_FAILURE_CAUSE = 0x005C
  161. ,QMI_ERR_NO_RADIO = 0x005D
  162. ,QMI_ERR_NOT_SUPPORTED = 0x005E
  163. ,QMI_ERR_NO_SUBSCRIPTION = 0x005F
  164. ,QMI_ERR_CARD_CALL_CONTROL_FAILED = 0x0060
  165. ,QMI_ERR_NETWORK_ABORTED = 0x0061
  166. ,QMI_ERR_MSG_BLOCKED = 0x0062
  167. ,QMI_ERR_INVALID_SESSION_TYPE = 0x0064
  168. ,QMI_ERR_INVALID_PB_TYPE = 0x0065
  169. ,QMI_ERR_NO_SIM = 0x0066
  170. ,QMI_ERR_PB_NOT_READY = 0x0067
  171. ,QMI_ERR_PIN_RESTRICTION = 0x0068
  172. ,QMI_ERR_PIN2_RESTRICTION = 0x0069
  173. ,QMI_ERR_PUK_RESTRICTION = 0x006A
  174. ,QMI_ERR_PUK2_RESTRICTION = 0x006B
  175. ,QMI_ERR_PB_ACCESS_RESTRICTED = 0x006C
  176. ,QMI_ERR_PB_DELETE_IN_PROG = 0x006D
  177. ,QMI_ERR_PB_TEXT_TOO_LONG = 0x006E
  178. ,QMI_ERR_PB_NUMBER_TOO_LONG = 0x006F
  179. ,QMI_ERR_PB_HIDDEN_KEY_RESTRICTION = 0x0070
  180. } QMI_ERROR_CODE_TYPE;
  181. #define QCQMI_CTL_FLAG_SERVICE 0x80
  182. #define QCQMI_CTL_FLAG_CTL_POINT 0x00
  183. typedef struct _QCQMI_HDR
  184. {
  185. UCHAR IFType;
  186. USHORT Length;
  187. UCHAR CtlFlags; // reserved
  188. UCHAR QMIType;
  189. UCHAR ClientId;
  190. } __attribute__ ((packed)) QCQMI_HDR, *PQCQMI_HDR;
  191. #define QCQMI_HDR_SIZE (sizeof(QCQMI_HDR)-1)
  192. typedef struct _QCQMI
  193. {
  194. UCHAR IFType;
  195. USHORT Length;
  196. UCHAR CtlFlags; // reserved
  197. UCHAR QMIType;
  198. UCHAR ClientId;
  199. UCHAR SDU;
  200. } __attribute__ ((packed)) QCQMI, *PQCQMI;
  201. typedef struct _QMI_SERVICE_VERSION
  202. {
  203. USHORT Major;
  204. USHORT Minor;
  205. USHORT AddendumMajor;
  206. USHORT AddendumMinor;
  207. } __attribute__ ((packed)) QMI_SERVICE_VERSION, *PQMI_SERVICE_VERSION;
  208. // ================= QMUX ==================
  209. #define QMUX_MSG_OVERHEAD_BYTES 4 // Type(USHORT) Length(USHORT) -- header
  210. #define QMUX_BROADCAST_CID 0xFF
  211. typedef struct _QCQMUX_HDR
  212. {
  213. UCHAR CtlFlags; // 0: single QMUX Msg; 1:
  214. USHORT TransactionId;
  215. } __attribute__ ((packed)) QCQMUX_HDR, *PQCQMUX_HDR;
  216. typedef struct _QCQMUX
  217. {
  218. UCHAR CtlFlags; // 0: single QMUX Msg; 1:
  219. USHORT TransactionId;
  220. UCHAR Message; // Type(2), Length(2), Value
  221. } __attribute__ ((packed)) QCQMUX, *PQCQMUX;
  222. #define QCQMUX_HDR_SIZE sizeof(QCQMUX_HDR)
  223. typedef struct _QCQMUX_MSG_HDR
  224. {
  225. USHORT Type;
  226. USHORT Length;
  227. } __attribute__ ((packed)) QCQMUX_MSG_HDR, *PQCQMUX_MSG_HDR;
  228. #define QCQMUX_MSG_HDR_SIZE sizeof(QCQMUX_MSG_HDR)
  229. typedef struct _QCQMUX_MSG_HDR_RESP
  230. {
  231. USHORT Type;
  232. USHORT Length;
  233. UCHAR TLVType; // 0x02 - result code
  234. USHORT TLVLength; // 4
  235. USHORT QMUXResult; // QMI_RESULT_SUCCESS
  236. // QMI_RESULT_FAILURE
  237. USHORT QMUXError; // QMI_ERR_INVALID_ARG
  238. // QMI_ERR_NO_MEMORY
  239. // QMI_ERR_INTERNAL
  240. // QMI_ERR_FAULT
  241. } __attribute__ ((packed)) QCQMUX_MSG_HDR_RESP, *PQCQMUX_MSG_HDR_RESP;
  242. typedef struct _QCQMUX_TLV
  243. {
  244. UCHAR Type;
  245. USHORT Length;
  246. UCHAR Value;
  247. } __attribute__ ((packed)) QCQMUX_TLV, *PQCQMUX_TLV;
  248. typedef struct _QMI_TLV_HDR
  249. {
  250. UCHAR TLVType;
  251. USHORT TLVLength;
  252. } __attribute__ ((packed)) QMI_TLV_HDR, *PQMI_TLV_HDR;
  253. // QMUX Message Definitions -- QMI SDU
  254. #define QMUX_CTL_FLAG_SINGLE_MSG 0x00
  255. #define QMUX_CTL_FLAG_COMPOUND_MSG 0x01
  256. #define QMUX_CTL_FLAG_TYPE_CMD 0x00
  257. #define QMUX_CTL_FLAG_TYPE_RSP 0x02
  258. #define QMUX_CTL_FLAG_TYPE_IND 0x04
  259. #define QMUX_CTL_FLAG_MASK_COMPOUND 0x01
  260. #define QMUX_CTL_FLAG_MASK_TYPE 0x06 // 00-cmd, 01-rsp, 10-ind
  261. #pragma pack(pop)
  262. #endif // USBQMI_H