cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

a2mp.h (3262B)


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