caif_dev.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. /*
  2. * Copyright (C) ST-Ericsson AB 2010
  3. * Author: Sjur Brendeland/ sjur.brandeland@stericsson.com
  4. * License terms: GNU General Public License (GPL) version 2
  5. */
  6. #ifndef CAIF_DEV_H_
  7. #define CAIF_DEV_H_
  8. #include <net/caif/caif_layer.h>
  9. #include <net/caif/cfcnfg.h>
  10. #include <linux/caif/caif_socket.h>
  11. #include <linux/if.h>
  12. #include <linux/net.h>
  13. /**
  14. * struct caif_param - CAIF parameters.
  15. * @size: Length of data
  16. * @data: Binary Data Blob
  17. */
  18. struct caif_param {
  19. u16 size;
  20. u8 data[256];
  21. };
  22. /**
  23. * struct caif_connect_request - Request data for CAIF channel setup.
  24. * @protocol: Type of CAIF protocol to use (at, datagram etc)
  25. * @sockaddr: Socket address to connect.
  26. * @priority: Priority of the connection.
  27. * @link_selector: Link selector (high bandwidth or low latency)
  28. * @ifindex: kernel index of the interface.
  29. * @param: Connect Request parameters (CAIF_SO_REQ_PARAM).
  30. *
  31. * This struct is used when connecting a CAIF channel.
  32. * It contains all CAIF channel configuration options.
  33. */
  34. struct caif_connect_request {
  35. enum caif_protocol_type protocol;
  36. struct sockaddr_caif sockaddr;
  37. enum caif_channel_priority priority;
  38. enum caif_link_selector link_selector;
  39. int ifindex;
  40. struct caif_param param;
  41. };
  42. /**
  43. * caif_connect_client - Connect a client to CAIF Core Stack.
  44. * @config: Channel setup parameters, specifying what address
  45. * to connect on the Modem.
  46. * @client_layer: User implementation of client layer. This layer
  47. * MUST have receive and control callback functions
  48. * implemented.
  49. * @ifindex: Link layer interface index used for this connection.
  50. * @headroom: Head room needed by CAIF protocol.
  51. * @tailroom: Tail room needed by CAIF protocol.
  52. *
  53. * This function connects a CAIF channel. The Client must implement
  54. * the struct cflayer. This layer represents the Client layer and holds
  55. * receive functions and control callback functions. Control callback
  56. * function will receive information about connect/disconnect responses,
  57. * flow control etc (see enum caif_control).
  58. * E.g. CAIF Socket will call this function for each socket it connects
  59. * and have one client_layer instance for each socket.
  60. */
  61. int caif_connect_client(struct net *net,
  62. struct caif_connect_request *conn_req,
  63. struct cflayer *client_layer, int *ifindex,
  64. int *headroom, int *tailroom);
  65. /**
  66. * caif_disconnect_client - Disconnects a client from the CAIF stack.
  67. *
  68. * @client_layer: Client layer to be disconnected.
  69. */
  70. int caif_disconnect_client(struct net *net, struct cflayer *client_layer);
  71. /**
  72. * caif_client_register_refcnt - register ref-count functions provided by client.
  73. *
  74. * @adapt_layer: Client layer using CAIF Stack.
  75. * @hold: Function provided by client layer increasing ref-count
  76. * @put: Function provided by client layer decreasing ref-count
  77. *
  78. * Client of the CAIF Stack must register functions for reference counting.
  79. * These functions are called by the CAIF Stack for every upstream packet,
  80. * and must therefore be implemented efficiently.
  81. *
  82. * Client should call caif_free_client when reference count degrease to zero.
  83. */
  84. void caif_client_register_refcnt(struct cflayer *adapt_layer,
  85. void (*hold)(struct cflayer *lyr),
  86. void (*put)(struct cflayer *lyr));
  87. /**
  88. * caif_free_client - Free memory used to manage the client in the CAIF Stack.
  89. *
  90. * @client_layer: Client layer to be removed.
  91. *
  92. * This function must be called from client layer in order to free memory.
  93. * Caller must guarantee that no packets are in flight upstream when calling
  94. * this function.
  95. */
  96. void caif_free_client(struct cflayer *adap_layer);
  97. #endif /* CAIF_DEV_H_ */