rndis.h 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. /*
  2. * RNDIS Definitions for Remote NDIS
  3. *
  4. * Authors: Benedikt Spranger, Pengutronix
  5. * Robert Schwebel, Pengutronix
  6. *
  7. * This program is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU General Public License
  9. * version 2, as published by the Free Software Foundation.
  10. *
  11. * This software was originally developed in conformance with
  12. * Microsoft's Remote NDIS Specification License Agreement.
  13. */
  14. #ifndef _LINUX_RNDIS_H
  15. #define _LINUX_RNDIS_H
  16. #include <linux/rndis.h>
  17. #include "ndis.h"
  18. #define RNDIS_MAXIMUM_FRAME_SIZE 1518
  19. #define RNDIS_MAX_TOTAL_SIZE 1558
  20. typedef struct rndis_init_msg_type
  21. {
  22. __le32 MessageType;
  23. __le32 MessageLength;
  24. __le32 RequestID;
  25. __le32 MajorVersion;
  26. __le32 MinorVersion;
  27. __le32 MaxTransferSize;
  28. } rndis_init_msg_type;
  29. typedef struct rndis_init_cmplt_type
  30. {
  31. __le32 MessageType;
  32. __le32 MessageLength;
  33. __le32 RequestID;
  34. __le32 Status;
  35. __le32 MajorVersion;
  36. __le32 MinorVersion;
  37. __le32 DeviceFlags;
  38. __le32 Medium;
  39. __le32 MaxPacketsPerTransfer;
  40. __le32 MaxTransferSize;
  41. __le32 PacketAlignmentFactor;
  42. __le32 AFListOffset;
  43. __le32 AFListSize;
  44. } rndis_init_cmplt_type;
  45. typedef struct rndis_halt_msg_type
  46. {
  47. __le32 MessageType;
  48. __le32 MessageLength;
  49. __le32 RequestID;
  50. } rndis_halt_msg_type;
  51. typedef struct rndis_query_msg_type
  52. {
  53. __le32 MessageType;
  54. __le32 MessageLength;
  55. __le32 RequestID;
  56. __le32 OID;
  57. __le32 InformationBufferLength;
  58. __le32 InformationBufferOffset;
  59. __le32 DeviceVcHandle;
  60. } rndis_query_msg_type;
  61. typedef struct rndis_query_cmplt_type
  62. {
  63. __le32 MessageType;
  64. __le32 MessageLength;
  65. __le32 RequestID;
  66. __le32 Status;
  67. __le32 InformationBufferLength;
  68. __le32 InformationBufferOffset;
  69. } rndis_query_cmplt_type;
  70. typedef struct rndis_set_msg_type
  71. {
  72. __le32 MessageType;
  73. __le32 MessageLength;
  74. __le32 RequestID;
  75. __le32 OID;
  76. __le32 InformationBufferLength;
  77. __le32 InformationBufferOffset;
  78. __le32 DeviceVcHandle;
  79. } rndis_set_msg_type;
  80. typedef struct rndis_set_cmplt_type
  81. {
  82. __le32 MessageType;
  83. __le32 MessageLength;
  84. __le32 RequestID;
  85. __le32 Status;
  86. } rndis_set_cmplt_type;
  87. typedef struct rndis_reset_msg_type
  88. {
  89. __le32 MessageType;
  90. __le32 MessageLength;
  91. __le32 Reserved;
  92. } rndis_reset_msg_type;
  93. typedef struct rndis_reset_cmplt_type
  94. {
  95. __le32 MessageType;
  96. __le32 MessageLength;
  97. __le32 Status;
  98. __le32 AddressingReset;
  99. } rndis_reset_cmplt_type;
  100. typedef struct rndis_indicate_status_msg_type
  101. {
  102. __le32 MessageType;
  103. __le32 MessageLength;
  104. __le32 Status;
  105. __le32 StatusBufferLength;
  106. __le32 StatusBufferOffset;
  107. } rndis_indicate_status_msg_type;
  108. typedef struct rndis_keepalive_msg_type
  109. {
  110. __le32 MessageType;
  111. __le32 MessageLength;
  112. __le32 RequestID;
  113. } rndis_keepalive_msg_type;
  114. typedef struct rndis_keepalive_cmplt_type
  115. {
  116. __le32 MessageType;
  117. __le32 MessageLength;
  118. __le32 RequestID;
  119. __le32 Status;
  120. } rndis_keepalive_cmplt_type;
  121. struct rndis_packet_msg_type
  122. {
  123. __le32 MessageType;
  124. __le32 MessageLength;
  125. __le32 DataOffset;
  126. __le32 DataLength;
  127. __le32 OOBDataOffset;
  128. __le32 OOBDataLength;
  129. __le32 NumOOBDataElements;
  130. __le32 PerPacketInfoOffset;
  131. __le32 PerPacketInfoLength;
  132. __le32 VcHandle;
  133. __le32 Reserved;
  134. } __attribute__ ((packed));
  135. struct rndis_config_parameter
  136. {
  137. __le32 ParameterNameOffset;
  138. __le32 ParameterNameLength;
  139. __le32 ParameterType;
  140. __le32 ParameterValueOffset;
  141. __le32 ParameterValueLength;
  142. };
  143. /* implementation specific */
  144. enum rndis_state
  145. {
  146. RNDIS_UNINITIALIZED,
  147. RNDIS_INITIALIZED,
  148. RNDIS_DATA_INITIALIZED,
  149. };
  150. typedef struct rndis_resp_t
  151. {
  152. struct list_head list;
  153. u8 *buf;
  154. u32 length;
  155. int send;
  156. } rndis_resp_t;
  157. typedef struct rndis_params
  158. {
  159. u8 confignr;
  160. u8 used;
  161. u16 saved_filter;
  162. enum rndis_state state;
  163. u32 medium;
  164. u32 speed;
  165. u32 media_state;
  166. const u8 *host_mac;
  167. u16 *filter;
  168. struct net_device *dev;
  169. u32 vendorID;
  170. const char *vendorDescr;
  171. void (*resp_avail)(void *v);
  172. void *v;
  173. struct list_head resp_queue;
  174. } rndis_params;
  175. /* RNDIS Message parser and other useless functions */
  176. int rndis_msg_parser (u8 configNr, u8 *buf);
  177. int rndis_register(void (*resp_avail)(void *v), void *v);
  178. void rndis_deregister (int configNr);
  179. int rndis_set_param_dev (u8 configNr, struct net_device *dev,
  180. u16 *cdc_filter);
  181. int rndis_set_param_vendor (u8 configNr, u32 vendorID,
  182. const char *vendorDescr);
  183. int rndis_set_param_medium (u8 configNr, u32 medium, u32 speed);
  184. void rndis_add_hdr (struct sk_buff *skb);
  185. int rndis_rm_hdr(struct gether *port, struct sk_buff *skb,
  186. struct sk_buff_head *list);
  187. u8 *rndis_get_next_response (int configNr, u32 *length);
  188. void rndis_free_response (int configNr, u8 *buf);
  189. void rndis_uninit (int configNr);
  190. int rndis_signal_connect (int configNr);
  191. int rndis_signal_disconnect (int configNr);
  192. int rndis_state (int configNr);
  193. extern void rndis_set_host_mac (int configNr, const u8 *addr);
  194. int rndis_init(void);
  195. void rndis_exit (void);
  196. #endif /* _LINUX_RNDIS_H */