summaryrefslogtreecommitdiff
path: root/lib/amp.h
blob: 8acb5ab40fc7ff9552ac557984c979adef4abad5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 *
 *	BlueZ - Bluetooth protocol stack for Linux
 *
 *	Copyright (C) 2010-2011 Code Aurora Forum.  All rights reserved.
 *	Copyright (C) 2012 Intel Corporation.
 *
 */

#ifndef __AMP_H
#define __AMP_H

#ifdef __cplusplus
extern "C" {
#endif

#define AMP_MGR_CID 0x03

/* AMP manager codes */
#define AMP_COMMAND_REJ		0x01
#define AMP_DISCOVER_REQ	0x02
#define AMP_DISCOVER_RSP	0x03
#define AMP_CHANGE_NOTIFY	0x04
#define AMP_CHANGE_RSP		0x05
#define AMP_INFO_REQ		0x06
#define AMP_INFO_RSP		0x07
#define AMP_ASSOC_REQ		0x08
#define AMP_ASSOC_RSP		0x09
#define AMP_LINK_REQ		0x0a
#define AMP_LINK_RSP		0x0b
#define AMP_DISCONN_REQ		0x0c
#define AMP_DISCONN_RSP		0x0d

typedef struct {
	uint8_t		code;
	uint8_t		ident;
	uint16_t	len;
} __attribute__ ((packed)) amp_mgr_hdr;
#define AMP_MGR_HDR_SIZE 4

/* AMP ASSOC structure */
typedef struct {
	uint8_t		type_id;
	uint16_t	len;
	uint8_t		data[0];
} __attribute__ ((packed)) amp_assoc_tlv;

typedef struct {
	uint16_t	reason;
} __attribute__ ((packed)) amp_cmd_rej_parms;

typedef struct {
	uint16_t	mtu;
	uint16_t	mask;
} __attribute__ ((packed)) amp_discover_req_parms;

typedef struct {
	uint16_t	mtu;
	uint16_t	mask;
	uint8_t		controller_list[0];
} __attribute__ ((packed)) amp_discover_rsp_parms;

typedef struct {
	uint8_t		id;
} __attribute__ ((packed)) amp_info_req_parms;

typedef struct {
	uint8_t		id;
	uint8_t		status;
	uint32_t	total_bandwidth;
	uint32_t	max_bandwidth;
	uint32_t	min_latency;
	uint16_t	pal_caps;
	uint16_t	assoc_size;
} __attribute__ ((packed)) amp_info_rsp_parms;

typedef struct {
	uint8_t		id;
	uint8_t		status;
	amp_assoc_tlv	assoc;
} __attribute__ ((packed)) amp_assoc_rsp_parms;

typedef struct {
	uint8_t		local_id;
	uint8_t		remote_id;
	amp_assoc_tlv	assoc;
} __attribute__ ((packed)) amp_link_req_parms;

typedef struct {
	uint8_t		local_id;
	uint8_t		remote_id;
	uint8_t		status;
} __attribute__ ((packed)) amp_link_rsp_parms;

typedef struct {
	uint8_t		local_id;
	uint8_t		remote_id;
} __attribute__ ((packed)) amp_disconn_req_parms;

#define A2MP_MAC_ADDR_TYPE		1
#define A2MP_PREF_CHANLIST_TYPE		2
#define A2MP_CONNECTED_CHAN		3
#define A2MP_PAL_CAP_TYPE		4
#define A2MP_PAL_VER_INFO		5

struct amp_tlv {
	uint8_t type;
	uint16_t len;
	uint8_t val[0];
} __attribute__ ((packed));

struct amp_pal_ver {
	uint8_t ver;
	uint16_t company_id;
	uint16_t sub_ver;
} __attribute__ ((packed));

struct amp_country_triplet {
	union {
		struct {
			uint8_t first_channel;
			uint8_t num_channels;
			int8_t max_power;
		} __attribute__ ((packed)) chans;
		struct {
			uint8_t reg_extension_id;
			uint8_t reg_class;
			uint8_t coverage_class;
		} __attribute__ ((packed)) ext;
	};
} __attribute__ ((packed));

struct amp_chan_list {
	uint8_t country_code[3];
	struct amp_country_triplet triplets[0];
} __attribute__ ((packed));

#define AMP_COMMAND_NOT_RECOGNIZED 0x0000

/* AMP controller status */
#define AMP_CT_POWERED_DOWN		0x00
#define AMP_CT_BLUETOOTH_ONLY		0x01
#define AMP_CT_NO_CAPACITY		0x02
#define AMP_CT_LOW_CAPACITY		0x03
#define AMP_CT_MEDIUM_CAPACITY		0x04
#define AMP_CT_HIGH_CAPACITY		0x05
#define AMP_CT_FULL_CAPACITY		0x06

/* AMP response status */
#define AMP_STATUS_SUCCESS				0x00
#define AMP_STATUS_INVALID_CTRL_ID			0x01
#define AMP_STATUS_UNABLE_START_LINK_CREATION		0x02
#define AMP_STATUS_NO_PHYSICAL_LINK_EXISTS		0x02
#define AMP_STATUS_COLLISION_OCCURED			0x03
#define AMP_STATUS_DISCONN_REQ_RECVD			0x04
#define AMP_STATUS_PHYS_LINK_EXISTS			0x05
#define AMP_STATUS_SECURITY_VIOLATION			0x06

#ifdef __cplusplus
}
#endif

#endif /* __AMP_H */