Blame view

net/bluetooth/a2mp.h 3.19 KB
97fb5e8d9   Thomas Gleixner   treewide: Replace...
1
  /* SPDX-License-Identifier: GPL-2.0-only */
9740e49d1   Andrei Emeltchenko   Bluetooth: A2MP: ...
2
3
4
  /*
     Copyright (c) 2010,2011 Code Aurora Forum.  All rights reserved.
     Copyright (c) 2011,2012 Intel Corp.
9740e49d1   Andrei Emeltchenko   Bluetooth: A2MP: ...
5
6
7
8
  */
  
  #ifndef __A2MP_H
  #define __A2MP_H
97e8e89d2   Andrei Emeltchenko   Bluetooth: A2MP: ...
9
  #include <net/bluetooth/l2cap.h>
f97268fcc   Andrei Emeltchenko   Bluetooth: A2MP: ...
10
11
  enum amp_mgr_state {
  	READ_LOC_AMP_INFO,
903e45411   Andrei Emeltchenko   Bluetooth: AMP: U...
12
  	READ_LOC_AMP_ASSOC,
9495b2ee7   Andrei Emeltchenko   Bluetooth: AMP: P...
13
  	READ_LOC_AMP_ASSOC_FINAL,
8e05e3ba8   Andrei Emeltchenko   Bluetooth: AMP: S...
14
  	WRITE_REMOTE_AMP_ASSOC,
f97268fcc   Andrei Emeltchenko   Bluetooth: A2MP: ...
15
  };
9740e49d1   Andrei Emeltchenko   Bluetooth: A2MP: ...
16
  struct amp_mgr {
f97268fcc   Andrei Emeltchenko   Bluetooth: A2MP: ...
17
  	struct list_head	list;
9740e49d1   Andrei Emeltchenko   Bluetooth: A2MP: ...
18
19
  	struct l2cap_conn	*l2cap_conn;
  	struct l2cap_chan	*a2mp_chan;
93c3e8f5c   Andrei Emeltchenko   Bluetooth: Choose...
20
  	struct l2cap_chan	*bredr_chan;
9740e49d1   Andrei Emeltchenko   Bluetooth: A2MP: ...
21
22
23
  	struct kref		kref;
  	__u8			ident;
  	__u8			handle;
cb6801c64   Andrei Emeltchenko   Bluetooth: AMP: U...
24
  	unsigned long		state;
9740e49d1   Andrei Emeltchenko   Bluetooth: A2MP: ...
25
  	unsigned long		flags;
52c0d6e56   Andrei Emeltchenko   Bluetooth: AMP: R...
26
27
28
  
  	struct list_head	amp_ctrls;
  	struct mutex		amp_ctrls_lock;
9740e49d1   Andrei Emeltchenko   Bluetooth: A2MP: ...
29
  };
f6d3c6e78   Andrei Emeltchenko   Bluetooth: A2MP: ...
30
31
32
33
  struct a2mp_cmd {
  	__u8	code;
  	__u8	ident;
  	__le16	len;
a7e454542   Gustavo A. R. Silva   Bluetooth: Replac...
34
  	__u8	data[];
f6d3c6e78   Andrei Emeltchenko   Bluetooth: A2MP: ...
35
  } __packed;
b9058fb67   Andrei Emeltchenko   Bluetooth: A2MP: ...
36
37
38
39
  /* A2MP command codes */
  #define A2MP_COMMAND_REJ         0x01
  struct a2mp_cmd_rej {
  	__le16	reason;
a7e454542   Gustavo A. R. Silva   Bluetooth: Replac...
40
  	__u8	data[];
b9058fb67   Andrei Emeltchenko   Bluetooth: A2MP: ...
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
  } __packed;
  
  #define A2MP_DISCOVER_REQ        0x02
  struct a2mp_discov_req {
  	__le16	mtu;
  	__le16	ext_feat;
  } __packed;
  
  struct a2mp_cl {
  	__u8	id;
  	__u8	type;
  	__u8	status;
  } __packed;
  
  #define A2MP_DISCOVER_RSP        0x03
  struct a2mp_discov_rsp {
  	__le16     mtu;
  	__le16     ext_feat;
a7e454542   Gustavo A. R. Silva   Bluetooth: Replac...
59
  	struct a2mp_cl cl[];
b9058fb67   Andrei Emeltchenko   Bluetooth: A2MP: ...
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
  } __packed;
  
  #define A2MP_CHANGE_NOTIFY       0x04
  #define A2MP_CHANGE_RSP          0x05
  
  #define A2MP_GETINFO_REQ         0x06
  struct a2mp_info_req {
  	__u8       id;
  } __packed;
  
  #define A2MP_GETINFO_RSP         0x07
  struct a2mp_info_rsp {
  	__u8	id;
  	__u8	status;
  	__le32	total_bw;
  	__le32	max_bw;
  	__le32	min_latency;
  	__le16	pal_cap;
  	__le16	assoc_size;
  } __packed;
  
  #define A2MP_GETAMPASSOC_REQ     0x08
  struct a2mp_amp_assoc_req {
  	__u8	id;
  } __packed;
  
  #define A2MP_GETAMPASSOC_RSP     0x09
  struct a2mp_amp_assoc_rsp {
  	__u8	id;
  	__u8	status;
a7e454542   Gustavo A. R. Silva   Bluetooth: Replac...
90
  	__u8	amp_assoc[];
b9058fb67   Andrei Emeltchenko   Bluetooth: A2MP: ...
91
92
93
94
95
96
97
  } __packed;
  
  #define A2MP_CREATEPHYSLINK_REQ  0x0A
  #define A2MP_DISCONNPHYSLINK_REQ 0x0C
  struct a2mp_physlink_req {
  	__u8	local_id;
  	__u8	remote_id;
a7e454542   Gustavo A. R. Silva   Bluetooth: Replac...
98
  	__u8	amp_assoc[];
b9058fb67   Andrei Emeltchenko   Bluetooth: A2MP: ...
99
100
101
102
103
104
105
106
107
  } __packed;
  
  #define A2MP_CREATEPHYSLINK_RSP  0x0B
  #define A2MP_DISCONNPHYSLINK_RSP 0x0D
  struct a2mp_physlink_rsp {
  	__u8	local_id;
  	__u8	remote_id;
  	__u8	status;
  } __packed;
e7af522e0   Andrei Emeltchenko   Bluetooth: A2MP: ...
108
109
110
111
112
113
114
115
116
  /* A2MP response status */
  #define A2MP_STATUS_SUCCESS			0x00
  #define A2MP_STATUS_INVALID_CTRL_ID		0x01
  #define A2MP_STATUS_UNABLE_START_LINK_CREATION	0x02
  #define A2MP_STATUS_NO_PHYSICAL_LINK_EXISTS	0x02
  #define A2MP_STATUS_COLLISION_OCCURED		0x03
  #define A2MP_STATUS_DISCONN_REQ_RECVD		0x04
  #define A2MP_STATUS_PHYS_LINK_EXISTS		0x05
  #define A2MP_STATUS_SECURITY_VIOLATION		0x06
f706adfea   Andrei Emeltchenko   Bluetooth: AMP: G...
117
  struct amp_mgr *amp_mgr_get(struct amp_mgr *mgr);
244bc3775   Arron Wang   Bluetooth: Add BT...
118
119
  
  #if IS_ENABLED(CONFIG_BT_HS)
9740e49d1   Andrei Emeltchenko   Bluetooth: A2MP: ...
120
  int amp_mgr_put(struct amp_mgr *mgr);
97e8e89d2   Andrei Emeltchenko   Bluetooth: A2MP: ...
121
122
  struct l2cap_chan *a2mp_channel_create(struct l2cap_conn *conn,
  				       struct sk_buff *skb);
93c3e8f5c   Andrei Emeltchenko   Bluetooth: Choose...
123
  void a2mp_discover_amp(struct l2cap_chan *chan);
244bc3775   Arron Wang   Bluetooth: Add BT...
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
  #else
  static inline int amp_mgr_put(struct amp_mgr *mgr)
  {
  	return 0;
  }
  
  static inline struct l2cap_chan *a2mp_channel_create(struct l2cap_conn *conn,
  						     struct sk_buff *skb)
  {
  	return NULL;
  }
  
  static inline void a2mp_discover_amp(struct l2cap_chan *chan)
  {
  }
  #endif
8e2a0d92c   Andrei Emeltchenko   Bluetooth: AMP: U...
140
  void a2mp_send_getinfo_rsp(struct hci_dev *hdev);
903e45411   Andrei Emeltchenko   Bluetooth: AMP: U...
141
  void a2mp_send_getampassoc_rsp(struct hci_dev *hdev, u8 status);
9495b2ee7   Andrei Emeltchenko   Bluetooth: AMP: P...
142
  void a2mp_send_create_phy_link_req(struct hci_dev *hdev, u8 status);
8e05e3ba8   Andrei Emeltchenko   Bluetooth: AMP: S...
143
  void a2mp_send_create_phy_link_rsp(struct hci_dev *hdev, u8 status);
9740e49d1   Andrei Emeltchenko   Bluetooth: A2MP: ...
144
145
  
  #endif /* __A2MP_H */