diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/net/bluetooth/a2mp.h | 150 | ||||
-rw-r--r-- | include/net/bluetooth/amp.h | 54 | ||||
-rw-r--r-- | include/net/bluetooth/bluetooth.h | 5 | ||||
-rw-r--r-- | include/net/bluetooth/hci.h | 49 | ||||
-rw-r--r-- | include/net/bluetooth/hci_core.h | 79 | ||||
-rw-r--r-- | include/net/bluetooth/l2cap.h | 14 | ||||
-rw-r--r-- | include/net/bluetooth/mgmt.h | 7 | ||||
-rw-r--r-- | include/net/bluetooth/rfcomm.h | 2 | ||||
-rw-r--r-- | include/net/bluetooth/sco.h | 5 | ||||
-rw-r--r-- | include/net/bluetooth/smp.h | 146 | ||||
-rw-r--r-- | include/net/cfg80211.h | 9 | ||||
-rw-r--r-- | include/net/nfc/digital.h | 227 | ||||
-rw-r--r-- | include/net/nfc/hci.h | 6 | ||||
-rw-r--r-- | include/net/nfc/nci.h | 4 | ||||
-rw-r--r-- | include/net/nfc/nci_core.h | 46 | ||||
-rw-r--r-- | include/net/nfc/nfc.h | 25 | ||||
-rw-r--r-- | include/uapi/linux/nfc.h | 4 |
17 files changed, 365 insertions, 467 deletions
diff --git a/include/net/bluetooth/a2mp.h b/include/net/bluetooth/a2mp.h deleted file mode 100644 index 487b54c1308f..000000000000 --- a/include/net/bluetooth/a2mp.h +++ /dev/null | |||
@@ -1,150 +0,0 @@ | |||
1 | /* | ||
2 | Copyright (c) 2010,2011 Code Aurora Forum. All rights reserved. | ||
3 | Copyright (c) 2011,2012 Intel Corp. | ||
4 | |||
5 | This program is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License version 2 and | ||
7 | only version 2 as published by the Free Software Foundation. | ||
8 | |||
9 | This program is distributed in the hope that it will be useful, | ||
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | GNU General Public License for more details. | ||
13 | */ | ||
14 | |||
15 | #ifndef __A2MP_H | ||
16 | #define __A2MP_H | ||
17 | |||
18 | #include <net/bluetooth/l2cap.h> | ||
19 | |||
20 | #define A2MP_FEAT_EXT 0x8000 | ||
21 | |||
22 | enum amp_mgr_state { | ||
23 | READ_LOC_AMP_INFO, | ||
24 | READ_LOC_AMP_ASSOC, | ||
25 | READ_LOC_AMP_ASSOC_FINAL, | ||
26 | WRITE_REMOTE_AMP_ASSOC, | ||
27 | }; | ||
28 | |||
29 | struct amp_mgr { | ||
30 | struct list_head list; | ||
31 | struct l2cap_conn *l2cap_conn; | ||
32 | struct l2cap_chan *a2mp_chan; | ||
33 | struct l2cap_chan *bredr_chan; | ||
34 | struct kref kref; | ||
35 | __u8 ident; | ||
36 | __u8 handle; | ||
37 | unsigned long state; | ||
38 | unsigned long flags; | ||
39 | |||
40 | struct list_head amp_ctrls; | ||
41 | struct mutex amp_ctrls_lock; | ||
42 | }; | ||
43 | |||
44 | struct a2mp_cmd { | ||
45 | __u8 code; | ||
46 | __u8 ident; | ||
47 | __le16 len; | ||
48 | __u8 data[0]; | ||
49 | } __packed; | ||
50 | |||
51 | /* A2MP command codes */ | ||
52 | #define A2MP_COMMAND_REJ 0x01 | ||
53 | struct a2mp_cmd_rej { | ||
54 | __le16 reason; | ||
55 | __u8 data[0]; | ||
56 | } __packed; | ||
57 | |||
58 | #define A2MP_DISCOVER_REQ 0x02 | ||
59 | struct a2mp_discov_req { | ||
60 | __le16 mtu; | ||
61 | __le16 ext_feat; | ||
62 | } __packed; | ||
63 | |||
64 | struct a2mp_cl { | ||
65 | __u8 id; | ||
66 | __u8 type; | ||
67 | __u8 status; | ||
68 | } __packed; | ||
69 | |||
70 | #define A2MP_DISCOVER_RSP 0x03 | ||
71 | struct a2mp_discov_rsp { | ||
72 | __le16 mtu; | ||
73 | __le16 ext_feat; | ||
74 | struct a2mp_cl cl[0]; | ||
75 | } __packed; | ||
76 | |||
77 | #define A2MP_CHANGE_NOTIFY 0x04 | ||
78 | #define A2MP_CHANGE_RSP 0x05 | ||
79 | |||
80 | #define A2MP_GETINFO_REQ 0x06 | ||
81 | struct a2mp_info_req { | ||
82 | __u8 id; | ||
83 | } __packed; | ||
84 | |||
85 | #define A2MP_GETINFO_RSP 0x07 | ||
86 | struct a2mp_info_rsp { | ||
87 | __u8 id; | ||
88 | __u8 status; | ||
89 | __le32 total_bw; | ||
90 | __le32 max_bw; | ||
91 | __le32 min_latency; | ||
92 | __le16 pal_cap; | ||
93 | __le16 assoc_size; | ||
94 | } __packed; | ||
95 | |||
96 | #define A2MP_GETAMPASSOC_REQ 0x08 | ||
97 | struct a2mp_amp_assoc_req { | ||
98 | __u8 id; | ||
99 | } __packed; | ||
100 | |||
101 | #define A2MP_GETAMPASSOC_RSP 0x09 | ||
102 | struct a2mp_amp_assoc_rsp { | ||
103 | __u8 id; | ||
104 | __u8 status; | ||
105 | __u8 amp_assoc[0]; | ||
106 | } __packed; | ||
107 | |||
108 | #define A2MP_CREATEPHYSLINK_REQ 0x0A | ||
109 | #define A2MP_DISCONNPHYSLINK_REQ 0x0C | ||
110 | struct a2mp_physlink_req { | ||
111 | __u8 local_id; | ||
112 | __u8 remote_id; | ||
113 | __u8 amp_assoc[0]; | ||
114 | } __packed; | ||
115 | |||
116 | #define A2MP_CREATEPHYSLINK_RSP 0x0B | ||
117 | #define A2MP_DISCONNPHYSLINK_RSP 0x0D | ||
118 | struct a2mp_physlink_rsp { | ||
119 | __u8 local_id; | ||
120 | __u8 remote_id; | ||
121 | __u8 status; | ||
122 | } __packed; | ||
123 | |||
124 | /* A2MP response status */ | ||
125 | #define A2MP_STATUS_SUCCESS 0x00 | ||
126 | #define A2MP_STATUS_INVALID_CTRL_ID 0x01 | ||
127 | #define A2MP_STATUS_UNABLE_START_LINK_CREATION 0x02 | ||
128 | #define A2MP_STATUS_NO_PHYSICAL_LINK_EXISTS 0x02 | ||
129 | #define A2MP_STATUS_COLLISION_OCCURED 0x03 | ||
130 | #define A2MP_STATUS_DISCONN_REQ_RECVD 0x04 | ||
131 | #define A2MP_STATUS_PHYS_LINK_EXISTS 0x05 | ||
132 | #define A2MP_STATUS_SECURITY_VIOLATION 0x06 | ||
133 | |||
134 | extern struct list_head amp_mgr_list; | ||
135 | extern struct mutex amp_mgr_list_lock; | ||
136 | |||
137 | struct amp_mgr *amp_mgr_get(struct amp_mgr *mgr); | ||
138 | int amp_mgr_put(struct amp_mgr *mgr); | ||
139 | u8 __next_ident(struct amp_mgr *mgr); | ||
140 | struct l2cap_chan *a2mp_channel_create(struct l2cap_conn *conn, | ||
141 | struct sk_buff *skb); | ||
142 | struct amp_mgr *amp_mgr_lookup_by_state(u8 state); | ||
143 | void a2mp_send(struct amp_mgr *mgr, u8 code, u8 ident, u16 len, void *data); | ||
144 | void a2mp_discover_amp(struct l2cap_chan *chan); | ||
145 | void a2mp_send_getinfo_rsp(struct hci_dev *hdev); | ||
146 | void a2mp_send_getampassoc_rsp(struct hci_dev *hdev, u8 status); | ||
147 | void a2mp_send_create_phy_link_req(struct hci_dev *hdev, u8 status); | ||
148 | void a2mp_send_create_phy_link_rsp(struct hci_dev *hdev, u8 status); | ||
149 | |||
150 | #endif /* __A2MP_H */ | ||
diff --git a/include/net/bluetooth/amp.h b/include/net/bluetooth/amp.h deleted file mode 100644 index 7ea3db77ba89..000000000000 --- a/include/net/bluetooth/amp.h +++ /dev/null | |||
@@ -1,54 +0,0 @@ | |||
1 | /* | ||
2 | Copyright (c) 2011,2012 Intel Corp. | ||
3 | |||
4 | This program is free software; you can redistribute it and/or modify | ||
5 | it under the terms of the GNU General Public License version 2 and | ||
6 | only version 2 as published by the Free Software Foundation. | ||
7 | |||
8 | This program is distributed in the hope that it will be useful, | ||
9 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
11 | GNU General Public License for more details. | ||
12 | */ | ||
13 | |||
14 | #ifndef __AMP_H | ||
15 | #define __AMP_H | ||
16 | |||
17 | struct amp_ctrl { | ||
18 | struct list_head list; | ||
19 | struct kref kref; | ||
20 | __u8 id; | ||
21 | __u16 assoc_len_so_far; | ||
22 | __u16 assoc_rem_len; | ||
23 | __u16 assoc_len; | ||
24 | __u8 *assoc; | ||
25 | }; | ||
26 | |||
27 | int amp_ctrl_put(struct amp_ctrl *ctrl); | ||
28 | void amp_ctrl_get(struct amp_ctrl *ctrl); | ||
29 | struct amp_ctrl *amp_ctrl_add(struct amp_mgr *mgr, u8 id); | ||
30 | struct amp_ctrl *amp_ctrl_lookup(struct amp_mgr *mgr, u8 id); | ||
31 | void amp_ctrl_list_flush(struct amp_mgr *mgr); | ||
32 | |||
33 | struct hci_conn *phylink_add(struct hci_dev *hdev, struct amp_mgr *mgr, | ||
34 | u8 remote_id, bool out); | ||
35 | |||
36 | int phylink_gen_key(struct hci_conn *hcon, u8 *data, u8 *len, u8 *type); | ||
37 | |||
38 | void amp_read_loc_info(struct hci_dev *hdev, struct amp_mgr *mgr); | ||
39 | void amp_read_loc_assoc_frag(struct hci_dev *hdev, u8 phy_handle); | ||
40 | void amp_read_loc_assoc(struct hci_dev *hdev, struct amp_mgr *mgr); | ||
41 | void amp_read_loc_assoc_final_data(struct hci_dev *hdev, | ||
42 | struct hci_conn *hcon); | ||
43 | void amp_create_phylink(struct hci_dev *hdev, struct amp_mgr *mgr, | ||
44 | struct hci_conn *hcon); | ||
45 | void amp_accept_phylink(struct hci_dev *hdev, struct amp_mgr *mgr, | ||
46 | struct hci_conn *hcon); | ||
47 | void amp_write_remote_assoc(struct hci_dev *hdev, u8 handle); | ||
48 | void amp_write_rem_assoc_continue(struct hci_dev *hdev, u8 handle); | ||
49 | void amp_physical_cfm(struct hci_conn *bredr_hcon, struct hci_conn *hs_hcon); | ||
50 | void amp_create_logical_link(struct l2cap_chan *chan); | ||
51 | void amp_disconnect_logical_link(struct hci_chan *hchan); | ||
52 | void amp_destroy_logical_link(struct hci_chan *hchan, u8 reason); | ||
53 | |||
54 | #endif /* __AMP_H */ | ||
diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h index d0de412bfa43..2cc9517fb0d5 100644 --- a/include/net/bluetooth/bluetooth.h +++ b/include/net/bluetooth/bluetooth.h | |||
@@ -218,11 +218,10 @@ void baswap(bdaddr_t *dst, bdaddr_t *src); | |||
218 | 218 | ||
219 | struct bt_sock { | 219 | struct bt_sock { |
220 | struct sock sk; | 220 | struct sock sk; |
221 | bdaddr_t src; | ||
222 | bdaddr_t dst; | ||
223 | struct list_head accept_q; | 221 | struct list_head accept_q; |
224 | struct sock *parent; | 222 | struct sock *parent; |
225 | unsigned long flags; | 223 | unsigned long flags; |
224 | void (*skb_msg_name)(struct sk_buff *, void *, int *); | ||
226 | }; | 225 | }; |
227 | 226 | ||
228 | enum { | 227 | enum { |
@@ -285,6 +284,8 @@ struct bt_skb_cb { | |||
285 | __u8 force_active; | 284 | __u8 force_active; |
286 | struct l2cap_ctrl control; | 285 | struct l2cap_ctrl control; |
287 | struct hci_req_ctrl req; | 286 | struct hci_req_ctrl req; |
287 | bdaddr_t bdaddr; | ||
288 | __le16 psm; | ||
288 | }; | 289 | }; |
289 | #define bt_cb(skb) ((struct bt_skb_cb *)((skb)->cb)) | 290 | #define bt_cb(skb) ((struct bt_skb_cb *)((skb)->cb)) |
290 | 291 | ||
diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h index b90eec5e9c06..b096f5f73789 100644 --- a/include/net/bluetooth/hci.h +++ b/include/net/bluetooth/hci.h | |||
@@ -64,16 +64,20 @@ | |||
64 | #define HCI_AMP 0x01 | 64 | #define HCI_AMP 0x01 |
65 | 65 | ||
66 | /* First BR/EDR Controller shall have ID = 0 */ | 66 | /* First BR/EDR Controller shall have ID = 0 */ |
67 | #define HCI_BREDR_ID 0 | 67 | #define AMP_ID_BREDR 0x00 |
68 | |||
69 | /* AMP controller types */ | ||
70 | #define AMP_TYPE_BREDR 0x00 | ||
71 | #define AMP_TYPE_80211 0x01 | ||
68 | 72 | ||
69 | /* AMP controller status */ | 73 | /* AMP controller status */ |
70 | #define AMP_CTRL_POWERED_DOWN 0x00 | 74 | #define AMP_STATUS_POWERED_DOWN 0x00 |
71 | #define AMP_CTRL_BLUETOOTH_ONLY 0x01 | 75 | #define AMP_STATUS_BLUETOOTH_ONLY 0x01 |
72 | #define AMP_CTRL_NO_CAPACITY 0x02 | 76 | #define AMP_STATUS_NO_CAPACITY 0x02 |
73 | #define AMP_CTRL_LOW_CAPACITY 0x03 | 77 | #define AMP_STATUS_LOW_CAPACITY 0x03 |
74 | #define AMP_CTRL_MEDIUM_CAPACITY 0x04 | 78 | #define AMP_STATUS_MEDIUM_CAPACITY 0x04 |
75 | #define AMP_CTRL_HIGH_CAPACITY 0x05 | 79 | #define AMP_STATUS_HIGH_CAPACITY 0x05 |
76 | #define AMP_CTRL_FULL_CAPACITY 0x06 | 80 | #define AMP_STATUS_FULL_CAPACITY 0x06 |
77 | 81 | ||
78 | /* HCI device quirks */ | 82 | /* HCI device quirks */ |
79 | enum { | 83 | enum { |
@@ -118,7 +122,7 @@ enum { | |||
118 | HCI_SSP_ENABLED, | 122 | HCI_SSP_ENABLED, |
119 | HCI_HS_ENABLED, | 123 | HCI_HS_ENABLED, |
120 | HCI_LE_ENABLED, | 124 | HCI_LE_ENABLED, |
121 | HCI_LE_PERIPHERAL, | 125 | HCI_ADVERTISING, |
122 | HCI_CONNECTABLE, | 126 | HCI_CONNECTABLE, |
123 | HCI_DISCOVERABLE, | 127 | HCI_DISCOVERABLE, |
124 | HCI_LINK_SECURITY, | 128 | HCI_LINK_SECURITY, |
@@ -811,6 +815,14 @@ struct hci_cp_host_buffer_size { | |||
811 | __le16 sco_max_pkt; | 815 | __le16 sco_max_pkt; |
812 | } __packed; | 816 | } __packed; |
813 | 817 | ||
818 | #define HCI_OP_READ_NUM_SUPPORTED_IAC 0x0c38 | ||
819 | struct hci_rp_read_num_supported_iac { | ||
820 | __u8 status; | ||
821 | __u8 num_iac; | ||
822 | } __packed; | ||
823 | |||
824 | #define HCI_OP_READ_CURRENT_IAC_LAP 0x0c39 | ||
825 | |||
814 | #define HCI_OP_WRITE_INQUIRY_MODE 0x0c45 | 826 | #define HCI_OP_WRITE_INQUIRY_MODE 0x0c45 |
815 | 827 | ||
816 | #define HCI_MAX_EIR_LENGTH 240 | 828 | #define HCI_MAX_EIR_LENGTH 240 |
@@ -847,6 +859,8 @@ struct hci_rp_read_inq_rsp_tx_power { | |||
847 | 859 | ||
848 | #define HCI_OP_SET_EVENT_MASK_PAGE_2 0x0c63 | 860 | #define HCI_OP_SET_EVENT_MASK_PAGE_2 0x0c63 |
849 | 861 | ||
862 | #define HCI_OP_READ_LOCATION_DATA 0x0c64 | ||
863 | |||
850 | #define HCI_OP_READ_FLOW_CONTROL_MODE 0x0c66 | 864 | #define HCI_OP_READ_FLOW_CONTROL_MODE 0x0c66 |
851 | struct hci_rp_read_flow_control_mode { | 865 | struct hci_rp_read_flow_control_mode { |
852 | __u8 status; | 866 | __u8 status; |
@@ -1042,6 +1056,23 @@ struct hci_rp_le_read_local_features { | |||
1042 | 1056 | ||
1043 | #define HCI_OP_LE_SET_RANDOM_ADDR 0x2005 | 1057 | #define HCI_OP_LE_SET_RANDOM_ADDR 0x2005 |
1044 | 1058 | ||
1059 | #define LE_ADV_IND 0x00 | ||
1060 | #define LE_ADV_DIRECT_IND 0x01 | ||
1061 | #define LE_ADV_SCAN_IND 0x02 | ||
1062 | #define LE_ADV_NONCONN_IND 0x03 | ||
1063 | |||
1064 | #define HCI_OP_LE_SET_ADV_PARAM 0x2006 | ||
1065 | struct hci_cp_le_set_adv_param { | ||
1066 | __le16 min_interval; | ||
1067 | __le16 max_interval; | ||
1068 | __u8 type; | ||
1069 | __u8 own_address_type; | ||
1070 | __u8 direct_addr_type; | ||
1071 | bdaddr_t direct_addr; | ||
1072 | __u8 channel_map; | ||
1073 | __u8 filter_policy; | ||
1074 | } __packed; | ||
1075 | |||
1045 | #define HCI_OP_LE_READ_ADV_TX_POWER 0x2007 | 1076 | #define HCI_OP_LE_READ_ADV_TX_POWER 0x2007 |
1046 | struct hci_rp_le_read_adv_tx_power { | 1077 | struct hci_rp_le_read_adv_tx_power { |
1047 | __u8 status; | 1078 | __u8 status; |
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index e3ea48d6c992..2dc467939be7 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h | |||
@@ -159,11 +159,14 @@ struct hci_dev { | |||
159 | __u16 manufacturer; | 159 | __u16 manufacturer; |
160 | __u16 lmp_subver; | 160 | __u16 lmp_subver; |
161 | __u16 voice_setting; | 161 | __u16 voice_setting; |
162 | __u8 num_iac; | ||
162 | __u8 io_capability; | 163 | __u8 io_capability; |
163 | __s8 inq_tx_power; | 164 | __s8 inq_tx_power; |
164 | __u16 page_scan_interval; | 165 | __u16 page_scan_interval; |
165 | __u16 page_scan_window; | 166 | __u16 page_scan_window; |
166 | __u8 page_scan_type; | 167 | __u8 page_scan_type; |
168 | __u16 le_scan_interval; | ||
169 | __u16 le_scan_window; | ||
167 | 170 | ||
168 | __u16 devid_source; | 171 | __u16 devid_source; |
169 | __u16 devid_vendor; | 172 | __u16 devid_vendor; |
@@ -285,9 +288,8 @@ struct hci_dev { | |||
285 | int (*close)(struct hci_dev *hdev); | 288 | int (*close)(struct hci_dev *hdev); |
286 | int (*flush)(struct hci_dev *hdev); | 289 | int (*flush)(struct hci_dev *hdev); |
287 | int (*setup)(struct hci_dev *hdev); | 290 | int (*setup)(struct hci_dev *hdev); |
288 | int (*send)(struct sk_buff *skb); | 291 | int (*send)(struct hci_dev *hdev, struct sk_buff *skb); |
289 | void (*notify)(struct hci_dev *hdev, unsigned int evt); | 292 | void (*notify)(struct hci_dev *hdev, unsigned int evt); |
290 | int (*ioctl)(struct hci_dev *hdev, unsigned int cmd, unsigned long arg); | ||
291 | }; | 293 | }; |
292 | 294 | ||
293 | #define HCI_PHY_HANDLE(handle) (handle & 0xff) | 295 | #define HCI_PHY_HANDLE(handle) (handle & 0xff) |
@@ -299,6 +301,8 @@ struct hci_conn { | |||
299 | 301 | ||
300 | bdaddr_t dst; | 302 | bdaddr_t dst; |
301 | __u8 dst_type; | 303 | __u8 dst_type; |
304 | bdaddr_t src; | ||
305 | __u8 src_type; | ||
302 | __u16 handle; | 306 | __u16 handle; |
303 | __u16 state; | 307 | __u16 state; |
304 | __u8 mode; | 308 | __u8 mode; |
@@ -703,19 +707,6 @@ static inline void hci_set_drvdata(struct hci_dev *hdev, void *data) | |||
703 | dev_set_drvdata(&hdev->dev, data); | 707 | dev_set_drvdata(&hdev->dev, data); |
704 | } | 708 | } |
705 | 709 | ||
706 | /* hci_dev_list shall be locked */ | ||
707 | static inline uint8_t __hci_num_ctrl(void) | ||
708 | { | ||
709 | uint8_t count = 0; | ||
710 | struct list_head *p; | ||
711 | |||
712 | list_for_each(p, &hci_dev_list) { | ||
713 | count++; | ||
714 | } | ||
715 | |||
716 | return count; | ||
717 | } | ||
718 | |||
719 | struct hci_dev *hci_dev_get(int index); | 710 | struct hci_dev *hci_dev_get(int index); |
720 | struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src); | 711 | struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src); |
721 | 712 | ||
@@ -768,7 +759,7 @@ int hci_remove_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr); | |||
768 | 759 | ||
769 | void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb); | 760 | void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb); |
770 | 761 | ||
771 | int hci_recv_frame(struct sk_buff *skb); | 762 | int hci_recv_frame(struct hci_dev *hdev, struct sk_buff *skb); |
772 | int hci_recv_fragment(struct hci_dev *hdev, int type, void *data, int count); | 763 | int hci_recv_fragment(struct hci_dev *hdev, int type, void *data, int count); |
773 | int hci_recv_stream_fragment(struct hci_dev *hdev, void *data, int count); | 764 | int hci_recv_stream_fragment(struct hci_dev *hdev, void *data, int count); |
774 | 765 | ||
@@ -807,22 +798,6 @@ void hci_conn_del_sysfs(struct hci_conn *conn); | |||
807 | #define lmp_host_le_capable(dev) (!!((dev)->features[1][0] & LMP_HOST_LE)) | 798 | #define lmp_host_le_capable(dev) (!!((dev)->features[1][0] & LMP_HOST_LE)) |
808 | #define lmp_host_le_br_capable(dev) (!!((dev)->features[1][0] & LMP_HOST_LE_BREDR)) | 799 | #define lmp_host_le_br_capable(dev) (!!((dev)->features[1][0] & LMP_HOST_LE_BREDR)) |
809 | 800 | ||
810 | /* returns true if at least one AMP active */ | ||
811 | static inline bool hci_amp_capable(void) | ||
812 | { | ||
813 | struct hci_dev *hdev; | ||
814 | bool ret = false; | ||
815 | |||
816 | read_lock(&hci_dev_list_lock); | ||
817 | list_for_each_entry(hdev, &hci_dev_list, list) | ||
818 | if (hdev->amp_type == HCI_AMP && | ||
819 | test_bit(HCI_UP, &hdev->flags)) | ||
820 | ret = true; | ||
821 | read_unlock(&hci_dev_list_lock); | ||
822 | |||
823 | return ret; | ||
824 | } | ||
825 | |||
826 | /* ----- HCI protocols ----- */ | 801 | /* ----- HCI protocols ----- */ |
827 | #define HCI_PROTO_DEFER 0x01 | 802 | #define HCI_PROTO_DEFER 0x01 |
828 | 803 | ||
@@ -1120,24 +1095,24 @@ void hci_sock_dev_event(struct hci_dev *hdev, int event); | |||
1120 | #define DISCOV_BREDR_INQUIRY_LEN 0x08 | 1095 | #define DISCOV_BREDR_INQUIRY_LEN 0x08 |
1121 | 1096 | ||
1122 | int mgmt_control(struct sock *sk, struct msghdr *msg, size_t len); | 1097 | int mgmt_control(struct sock *sk, struct msghdr *msg, size_t len); |
1123 | int mgmt_index_added(struct hci_dev *hdev); | 1098 | void mgmt_index_added(struct hci_dev *hdev); |
1124 | int mgmt_index_removed(struct hci_dev *hdev); | 1099 | void mgmt_index_removed(struct hci_dev *hdev); |
1125 | int mgmt_set_powered_failed(struct hci_dev *hdev, int err); | 1100 | void mgmt_set_powered_failed(struct hci_dev *hdev, int err); |
1126 | int mgmt_powered(struct hci_dev *hdev, u8 powered); | 1101 | int mgmt_powered(struct hci_dev *hdev, u8 powered); |
1127 | int mgmt_discoverable(struct hci_dev *hdev, u8 discoverable); | 1102 | int mgmt_discoverable(struct hci_dev *hdev, u8 discoverable); |
1128 | int mgmt_connectable(struct hci_dev *hdev, u8 connectable); | 1103 | int mgmt_connectable(struct hci_dev *hdev, u8 connectable); |
1129 | int mgmt_write_scan_failed(struct hci_dev *hdev, u8 scan, u8 status); | 1104 | int mgmt_write_scan_failed(struct hci_dev *hdev, u8 scan, u8 status); |
1130 | int mgmt_new_link_key(struct hci_dev *hdev, struct link_key *key, | 1105 | int mgmt_new_link_key(struct hci_dev *hdev, struct link_key *key, |
1131 | bool persistent); | 1106 | bool persistent); |
1132 | int mgmt_device_connected(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type, | 1107 | void mgmt_device_connected(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type, |
1133 | u8 addr_type, u32 flags, u8 *name, u8 name_len, | 1108 | u8 addr_type, u32 flags, u8 *name, u8 name_len, |
1134 | u8 *dev_class); | 1109 | u8 *dev_class); |
1135 | int mgmt_device_disconnected(struct hci_dev *hdev, bdaddr_t *bdaddr, | 1110 | void mgmt_device_disconnected(struct hci_dev *hdev, bdaddr_t *bdaddr, |
1136 | u8 link_type, u8 addr_type, u8 reason); | 1111 | u8 link_type, u8 addr_type, u8 reason); |
1137 | int mgmt_disconnect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, | 1112 | void mgmt_disconnect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, |
1138 | u8 link_type, u8 addr_type, u8 status); | 1113 | u8 link_type, u8 addr_type, u8 status); |
1139 | int mgmt_connect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type, | 1114 | void mgmt_connect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type, |
1140 | u8 addr_type, u8 status); | 1115 | u8 addr_type, u8 status); |
1141 | int mgmt_pin_code_request(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 secure); | 1116 | int mgmt_pin_code_request(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 secure); |
1142 | int mgmt_pin_code_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr, | 1117 | int mgmt_pin_code_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr, |
1143 | u8 status); | 1118 | u8 status); |
@@ -1168,16 +1143,16 @@ int mgmt_set_class_of_dev_complete(struct hci_dev *hdev, u8 *dev_class, | |||
1168 | int mgmt_set_local_name_complete(struct hci_dev *hdev, u8 *name, u8 status); | 1143 | int mgmt_set_local_name_complete(struct hci_dev *hdev, u8 *name, u8 status); |
1169 | int mgmt_read_local_oob_data_reply_complete(struct hci_dev *hdev, u8 *hash, | 1144 | int mgmt_read_local_oob_data_reply_complete(struct hci_dev *hdev, u8 *hash, |
1170 | u8 *randomizer, u8 status); | 1145 | u8 *randomizer, u8 status); |
1171 | int mgmt_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type, | 1146 | void mgmt_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type, |
1172 | u8 addr_type, u8 *dev_class, s8 rssi, u8 cfm_name, | 1147 | u8 addr_type, u8 *dev_class, s8 rssi, u8 cfm_name, |
1173 | u8 ssp, u8 *eir, u16 eir_len); | 1148 | u8 ssp, u8 *eir, u16 eir_len); |
1174 | int mgmt_remote_name(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type, | 1149 | void mgmt_remote_name(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type, |
1175 | u8 addr_type, s8 rssi, u8 *name, u8 name_len); | 1150 | u8 addr_type, s8 rssi, u8 *name, u8 name_len); |
1176 | int mgmt_discovering(struct hci_dev *hdev, u8 discovering); | 1151 | void mgmt_discovering(struct hci_dev *hdev, u8 discovering); |
1177 | int mgmt_device_blocked(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type); | 1152 | int mgmt_device_blocked(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type); |
1178 | int mgmt_device_unblocked(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type); | 1153 | int mgmt_device_unblocked(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type); |
1179 | bool mgmt_valid_hdev(struct hci_dev *hdev); | ||
1180 | int mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, u8 persistent); | 1154 | int mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, u8 persistent); |
1155 | void mgmt_reenable_advertising(struct hci_dev *hdev); | ||
1181 | 1156 | ||
1182 | /* HCI info for socket */ | 1157 | /* HCI info for socket */ |
1183 | #define hci_pi(sk) ((struct hci_pinfo *) sk) | 1158 | #define hci_pi(sk) ((struct hci_pinfo *) sk) |
@@ -1214,8 +1189,6 @@ void hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max, | |||
1214 | void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __u8 rand[8], | 1189 | void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __u8 rand[8], |
1215 | __u8 ltk[16]); | 1190 | __u8 ltk[16]); |
1216 | 1191 | ||
1217 | u8 bdaddr_to_le(u8 bdaddr_type); | ||
1218 | |||
1219 | #define SCO_AIRMODE_MASK 0x0003 | 1192 | #define SCO_AIRMODE_MASK 0x0003 |
1220 | #define SCO_AIRMODE_CVSD 0x0000 | 1193 | #define SCO_AIRMODE_CVSD 0x0000 |
1221 | #define SCO_AIRMODE_TRANSP 0x0003 | 1194 | #define SCO_AIRMODE_TRANSP 0x0003 |
diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h index f141b5f6e4f1..07757a2af942 100644 --- a/include/net/bluetooth/l2cap.h +++ b/include/net/bluetooth/l2cap.h | |||
@@ -131,6 +131,7 @@ struct l2cap_conninfo { | |||
131 | 131 | ||
132 | /* L2CAP fixed channels */ | 132 | /* L2CAP fixed channels */ |
133 | #define L2CAP_FC_L2CAP 0x02 | 133 | #define L2CAP_FC_L2CAP 0x02 |
134 | #define L2CAP_FC_CONNLESS 0x04 | ||
134 | #define L2CAP_FC_A2MP 0x08 | 135 | #define L2CAP_FC_A2MP 0x08 |
135 | 136 | ||
136 | /* L2CAP Control Field bit masks */ | 137 | /* L2CAP Control Field bit masks */ |
@@ -237,6 +238,7 @@ struct l2cap_conn_rsp { | |||
237 | /* protocol/service multiplexer (PSM) */ | 238 | /* protocol/service multiplexer (PSM) */ |
238 | #define L2CAP_PSM_SDP 0x0001 | 239 | #define L2CAP_PSM_SDP 0x0001 |
239 | #define L2CAP_PSM_RFCOMM 0x0003 | 240 | #define L2CAP_PSM_RFCOMM 0x0003 |
241 | #define L2CAP_PSM_3DSP 0x0021 | ||
240 | 242 | ||
241 | /* channel indentifier */ | 243 | /* channel indentifier */ |
242 | #define L2CAP_CID_SIGNALING 0x0001 | 244 | #define L2CAP_CID_SIGNALING 0x0001 |
@@ -442,7 +444,12 @@ struct l2cap_chan { | |||
442 | 444 | ||
443 | __u8 state; | 445 | __u8 state; |
444 | 446 | ||
447 | bdaddr_t dst; | ||
448 | __u8 dst_type; | ||
449 | bdaddr_t src; | ||
450 | __u8 src_type; | ||
445 | __le16 psm; | 451 | __le16 psm; |
452 | __le16 sport; | ||
446 | __u16 dcid; | 453 | __u16 dcid; |
447 | __u16 scid; | 454 | __u16 scid; |
448 | 455 | ||
@@ -453,8 +460,6 @@ struct l2cap_chan { | |||
453 | __u8 chan_type; | 460 | __u8 chan_type; |
454 | __u8 chan_policy; | 461 | __u8 chan_policy; |
455 | 462 | ||
456 | __le16 sport; | ||
457 | |||
458 | __u8 sec_level; | 463 | __u8 sec_level; |
459 | 464 | ||
460 | __u8 ident; | 465 | __u8 ident; |
@@ -549,6 +554,7 @@ struct l2cap_ops { | |||
549 | int state); | 554 | int state); |
550 | void (*ready) (struct l2cap_chan *chan); | 555 | void (*ready) (struct l2cap_chan *chan); |
551 | void (*defer) (struct l2cap_chan *chan); | 556 | void (*defer) (struct l2cap_chan *chan); |
557 | void (*resume) (struct l2cap_chan *chan); | ||
552 | struct sk_buff *(*alloc_skb) (struct l2cap_chan *chan, | 558 | struct sk_buff *(*alloc_skb) (struct l2cap_chan *chan, |
553 | unsigned long len, int nb); | 559 | unsigned long len, int nb); |
554 | }; | 560 | }; |
@@ -557,9 +563,6 @@ struct l2cap_conn { | |||
557 | struct hci_conn *hcon; | 563 | struct hci_conn *hcon; |
558 | struct hci_chan *hchan; | 564 | struct hci_chan *hchan; |
559 | 565 | ||
560 | bdaddr_t *dst; | ||
561 | bdaddr_t *src; | ||
562 | |||
563 | unsigned int mtu; | 566 | unsigned int mtu; |
564 | 567 | ||
565 | __u32 feat_mask; | 568 | __u32 feat_mask; |
@@ -650,6 +653,7 @@ enum { | |||
650 | FLAG_FLUSHABLE, | 653 | FLAG_FLUSHABLE, |
651 | FLAG_EXT_CTRL, | 654 | FLAG_EXT_CTRL, |
652 | FLAG_EFS_ENABLE, | 655 | FLAG_EFS_ENABLE, |
656 | FLAG_DEFER_SETUP, | ||
653 | }; | 657 | }; |
654 | 658 | ||
655 | enum { | 659 | enum { |
diff --git a/include/net/bluetooth/mgmt.h b/include/net/bluetooth/mgmt.h index 2ad433bb9a2e..518c5c84e39a 100644 --- a/include/net/bluetooth/mgmt.h +++ b/include/net/bluetooth/mgmt.h | |||
@@ -362,6 +362,13 @@ struct mgmt_cp_set_static_address { | |||
362 | } __packed; | 362 | } __packed; |
363 | #define MGMT_SET_STATIC_ADDRESS_SIZE 6 | 363 | #define MGMT_SET_STATIC_ADDRESS_SIZE 6 |
364 | 364 | ||
365 | #define MGMT_OP_SET_SCAN_PARAMS 0x002C | ||
366 | struct mgmt_cp_set_scan_params { | ||
367 | __le16 interval; | ||
368 | __le16 window; | ||
369 | } __packed; | ||
370 | #define MGMT_SET_SCAN_PARAMS_SIZE 4 | ||
371 | |||
365 | #define MGMT_EV_CMD_COMPLETE 0x0001 | 372 | #define MGMT_EV_CMD_COMPLETE 0x0001 |
366 | struct mgmt_ev_cmd_complete { | 373 | struct mgmt_ev_cmd_complete { |
367 | __le16 opcode; | 374 | __le16 opcode; |
diff --git a/include/net/bluetooth/rfcomm.h b/include/net/bluetooth/rfcomm.h index b7f43e76a5c5..486213a1aed8 100644 --- a/include/net/bluetooth/rfcomm.h +++ b/include/net/bluetooth/rfcomm.h | |||
@@ -300,6 +300,8 @@ struct rfcomm_conninfo { | |||
300 | 300 | ||
301 | struct rfcomm_pinfo { | 301 | struct rfcomm_pinfo { |
302 | struct bt_sock bt; | 302 | struct bt_sock bt; |
303 | bdaddr_t src; | ||
304 | bdaddr_t dst; | ||
303 | struct rfcomm_dlc *dlc; | 305 | struct rfcomm_dlc *dlc; |
304 | u8 channel; | 306 | u8 channel; |
305 | u8 sec_level; | 307 | u8 sec_level; |
diff --git a/include/net/bluetooth/sco.h b/include/net/bluetooth/sco.h index e252a31ee6b6..2019d1a0996a 100644 --- a/include/net/bluetooth/sco.h +++ b/include/net/bluetooth/sco.h | |||
@@ -55,9 +55,6 @@ struct sco_conninfo { | |||
55 | struct sco_conn { | 55 | struct sco_conn { |
56 | struct hci_conn *hcon; | 56 | struct hci_conn *hcon; |
57 | 57 | ||
58 | bdaddr_t *dst; | ||
59 | bdaddr_t *src; | ||
60 | |||
61 | spinlock_t lock; | 58 | spinlock_t lock; |
62 | struct sock *sk; | 59 | struct sock *sk; |
63 | 60 | ||
@@ -72,6 +69,8 @@ struct sco_conn { | |||
72 | 69 | ||
73 | struct sco_pinfo { | 70 | struct sco_pinfo { |
74 | struct bt_sock bt; | 71 | struct bt_sock bt; |
72 | bdaddr_t src; | ||
73 | bdaddr_t dst; | ||
75 | __u32 flags; | 74 | __u32 flags; |
76 | __u16 setting; | 75 | __u16 setting; |
77 | struct sco_conn *conn; | 76 | struct sco_conn *conn; |
diff --git a/include/net/bluetooth/smp.h b/include/net/bluetooth/smp.h deleted file mode 100644 index f8ba07f3e5fa..000000000000 --- a/include/net/bluetooth/smp.h +++ /dev/null | |||
@@ -1,146 +0,0 @@ | |||
1 | /* | ||
2 | BlueZ - Bluetooth protocol stack for Linux | ||
3 | Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). | ||
4 | |||
5 | This program is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License version 2 as | ||
7 | published by the Free Software Foundation; | ||
8 | |||
9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||
10 | OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
11 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. | ||
12 | IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY | ||
13 | CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES | ||
14 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
15 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
16 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
17 | |||
18 | ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, | ||
19 | COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS | ||
20 | SOFTWARE IS DISCLAIMED. | ||
21 | */ | ||
22 | |||
23 | #ifndef __SMP_H | ||
24 | #define __SMP_H | ||
25 | |||
26 | struct smp_command_hdr { | ||
27 | __u8 code; | ||
28 | } __packed; | ||
29 | |||
30 | #define SMP_CMD_PAIRING_REQ 0x01 | ||
31 | #define SMP_CMD_PAIRING_RSP 0x02 | ||
32 | struct smp_cmd_pairing { | ||
33 | __u8 io_capability; | ||
34 | __u8 oob_flag; | ||
35 | __u8 auth_req; | ||
36 | __u8 max_key_size; | ||
37 | __u8 init_key_dist; | ||
38 | __u8 resp_key_dist; | ||
39 | } __packed; | ||
40 | |||
41 | #define SMP_IO_DISPLAY_ONLY 0x00 | ||
42 | #define SMP_IO_DISPLAY_YESNO 0x01 | ||
43 | #define SMP_IO_KEYBOARD_ONLY 0x02 | ||
44 | #define SMP_IO_NO_INPUT_OUTPUT 0x03 | ||
45 | #define SMP_IO_KEYBOARD_DISPLAY 0x04 | ||
46 | |||
47 | #define SMP_OOB_NOT_PRESENT 0x00 | ||
48 | #define SMP_OOB_PRESENT 0x01 | ||
49 | |||
50 | #define SMP_DIST_ENC_KEY 0x01 | ||
51 | #define SMP_DIST_ID_KEY 0x02 | ||
52 | #define SMP_DIST_SIGN 0x04 | ||
53 | |||
54 | #define SMP_AUTH_NONE 0x00 | ||
55 | #define SMP_AUTH_BONDING 0x01 | ||
56 | #define SMP_AUTH_MITM 0x04 | ||
57 | |||
58 | #define SMP_CMD_PAIRING_CONFIRM 0x03 | ||
59 | struct smp_cmd_pairing_confirm { | ||
60 | __u8 confirm_val[16]; | ||
61 | } __packed; | ||
62 | |||
63 | #define SMP_CMD_PAIRING_RANDOM 0x04 | ||
64 | struct smp_cmd_pairing_random { | ||
65 | __u8 rand_val[16]; | ||
66 | } __packed; | ||
67 | |||
68 | #define SMP_CMD_PAIRING_FAIL 0x05 | ||
69 | struct smp_cmd_pairing_fail { | ||
70 | __u8 reason; | ||
71 | } __packed; | ||
72 | |||
73 | #define SMP_CMD_ENCRYPT_INFO 0x06 | ||
74 | struct smp_cmd_encrypt_info { | ||
75 | __u8 ltk[16]; | ||
76 | } __packed; | ||
77 | |||
78 | #define SMP_CMD_MASTER_IDENT 0x07 | ||
79 | struct smp_cmd_master_ident { | ||
80 | __le16 ediv; | ||
81 | __u8 rand[8]; | ||
82 | } __packed; | ||
83 | |||
84 | #define SMP_CMD_IDENT_INFO 0x08 | ||
85 | struct smp_cmd_ident_info { | ||
86 | __u8 irk[16]; | ||
87 | } __packed; | ||
88 | |||
89 | #define SMP_CMD_IDENT_ADDR_INFO 0x09 | ||
90 | struct smp_cmd_ident_addr_info { | ||
91 | __u8 addr_type; | ||
92 | bdaddr_t bdaddr; | ||
93 | } __packed; | ||
94 | |||
95 | #define SMP_CMD_SIGN_INFO 0x0a | ||
96 | struct smp_cmd_sign_info { | ||
97 | __u8 csrk[16]; | ||
98 | } __packed; | ||
99 | |||
100 | #define SMP_CMD_SECURITY_REQ 0x0b | ||
101 | struct smp_cmd_security_req { | ||
102 | __u8 auth_req; | ||
103 | } __packed; | ||
104 | |||
105 | #define SMP_PASSKEY_ENTRY_FAILED 0x01 | ||
106 | #define SMP_OOB_NOT_AVAIL 0x02 | ||
107 | #define SMP_AUTH_REQUIREMENTS 0x03 | ||
108 | #define SMP_CONFIRM_FAILED 0x04 | ||
109 | #define SMP_PAIRING_NOTSUPP 0x05 | ||
110 | #define SMP_ENC_KEY_SIZE 0x06 | ||
111 | #define SMP_CMD_NOTSUPP 0x07 | ||
112 | #define SMP_UNSPECIFIED 0x08 | ||
113 | #define SMP_REPEATED_ATTEMPTS 0x09 | ||
114 | |||
115 | #define SMP_MIN_ENC_KEY_SIZE 7 | ||
116 | #define SMP_MAX_ENC_KEY_SIZE 16 | ||
117 | |||
118 | #define SMP_FLAG_TK_VALID 1 | ||
119 | #define SMP_FLAG_CFM_PENDING 2 | ||
120 | #define SMP_FLAG_MITM_AUTH 3 | ||
121 | |||
122 | struct smp_chan { | ||
123 | struct l2cap_conn *conn; | ||
124 | u8 preq[7]; /* SMP Pairing Request */ | ||
125 | u8 prsp[7]; /* SMP Pairing Response */ | ||
126 | u8 prnd[16]; /* SMP Pairing Random (local) */ | ||
127 | u8 rrnd[16]; /* SMP Pairing Random (remote) */ | ||
128 | u8 pcnf[16]; /* SMP Pairing Confirm */ | ||
129 | u8 tk[16]; /* SMP Temporary Key */ | ||
130 | u8 enc_key_size; | ||
131 | unsigned long smp_flags; | ||
132 | struct crypto_blkcipher *tfm; | ||
133 | struct work_struct confirm; | ||
134 | struct work_struct random; | ||
135 | |||
136 | }; | ||
137 | |||
138 | /* SMP Commands */ | ||
139 | int smp_conn_security(struct hci_conn *hcon, __u8 sec_level); | ||
140 | int smp_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb); | ||
141 | int smp_distribute_keys(struct l2cap_conn *conn, __u8 force); | ||
142 | int smp_user_confirm_reply(struct hci_conn *conn, u16 mgmt_op, __le32 passkey); | ||
143 | |||
144 | void smp_chan_destroy(struct l2cap_conn *conn); | ||
145 | |||
146 | #endif /* __SMP_H */ | ||
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index 45f6bf591104..419202ce3f95 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h | |||
@@ -3483,6 +3483,15 @@ void wiphy_apply_custom_regulatory(struct wiphy *wiphy, | |||
3483 | const struct ieee80211_reg_rule *freq_reg_info(struct wiphy *wiphy, | 3483 | const struct ieee80211_reg_rule *freq_reg_info(struct wiphy *wiphy, |
3484 | u32 center_freq); | 3484 | u32 center_freq); |
3485 | 3485 | ||
3486 | /** | ||
3487 | * reg_initiator_name - map regulatory request initiator enum to name | ||
3488 | * @initiator: the regulatory request initiator | ||
3489 | * | ||
3490 | * You can use this to map the regulatory request initiator enum to a | ||
3491 | * proper string representation. | ||
3492 | */ | ||
3493 | const char *reg_initiator_name(enum nl80211_reg_initiator initiator); | ||
3494 | |||
3486 | /* | 3495 | /* |
3487 | * callbacks for asynchronous cfg80211 methods, notification | 3496 | * callbacks for asynchronous cfg80211 methods, notification |
3488 | * functions and BSS handling helpers | 3497 | * functions and BSS handling helpers |
diff --git a/include/net/nfc/digital.h b/include/net/nfc/digital.h new file mode 100644 index 000000000000..36acecd5f06c --- /dev/null +++ b/include/net/nfc/digital.h | |||
@@ -0,0 +1,227 @@ | |||
1 | /* | ||
2 | * NFC Digital Protocol stack | ||
3 | * Copyright (c) 2013, Intel Corporation. | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify it | ||
6 | * under the terms and conditions of the GNU General Public License, | ||
7 | * version 2, as published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
12 | * more details. | ||
13 | * | ||
14 | */ | ||
15 | |||
16 | #ifndef __NFC_DIGITAL_H | ||
17 | #define __NFC_DIGITAL_H | ||
18 | |||
19 | #include <linux/skbuff.h> | ||
20 | #include <net/nfc/nfc.h> | ||
21 | |||
22 | /** | ||
23 | * Configuration types for in_configure_hw and tg_configure_hw. | ||
24 | */ | ||
25 | enum { | ||
26 | NFC_DIGITAL_CONFIG_RF_TECH = 0, | ||
27 | NFC_DIGITAL_CONFIG_FRAMING, | ||
28 | }; | ||
29 | |||
30 | /** | ||
31 | * RF technology values passed as param argument to in_configure_hw and | ||
32 | * tg_configure_hw for NFC_DIGITAL_CONFIG_RF_TECH configuration type. | ||
33 | */ | ||
34 | enum { | ||
35 | NFC_DIGITAL_RF_TECH_106A = 0, | ||
36 | NFC_DIGITAL_RF_TECH_212F, | ||
37 | NFC_DIGITAL_RF_TECH_424F, | ||
38 | |||
39 | NFC_DIGITAL_RF_TECH_LAST, | ||
40 | }; | ||
41 | |||
42 | /** | ||
43 | * Framing configuration passed as param argument to in_configure_hw and | ||
44 | * tg_configure_hw for NFC_DIGITAL_CONFIG_FRAMING configuration type. | ||
45 | */ | ||
46 | enum { | ||
47 | NFC_DIGITAL_FRAMING_NFCA_SHORT = 0, | ||
48 | NFC_DIGITAL_FRAMING_NFCA_STANDARD, | ||
49 | NFC_DIGITAL_FRAMING_NFCA_STANDARD_WITH_CRC_A, | ||
50 | |||
51 | NFC_DIGITAL_FRAMING_NFCA_T1T, | ||
52 | NFC_DIGITAL_FRAMING_NFCA_T2T, | ||
53 | NFC_DIGITAL_FRAMING_NFCA_NFC_DEP, | ||
54 | |||
55 | NFC_DIGITAL_FRAMING_NFCF, | ||
56 | NFC_DIGITAL_FRAMING_NFCF_T3T, | ||
57 | NFC_DIGITAL_FRAMING_NFCF_NFC_DEP, | ||
58 | NFC_DIGITAL_FRAMING_NFC_DEP_ACTIVATED, | ||
59 | |||
60 | NFC_DIGITAL_FRAMING_LAST, | ||
61 | }; | ||
62 | |||
63 | #define DIGITAL_MDAA_NFCID1_SIZE 3 | ||
64 | |||
65 | struct digital_tg_mdaa_params { | ||
66 | u16 sens_res; | ||
67 | u8 nfcid1[DIGITAL_MDAA_NFCID1_SIZE]; | ||
68 | u8 sel_res; | ||
69 | |||
70 | u8 nfcid2[NFC_NFCID2_MAXSIZE]; | ||
71 | u16 sc; | ||
72 | }; | ||
73 | |||
74 | struct nfc_digital_dev; | ||
75 | |||
76 | /** | ||
77 | * nfc_digital_cmd_complete_t - Definition of command result callback | ||
78 | * | ||
79 | * @ddev: nfc_digital_device ref | ||
80 | * @arg: user data | ||
81 | * @resp: response data | ||
82 | * | ||
83 | * resp pointer can be an error code and will be checked with IS_ERR() macro. | ||
84 | * The callback is responsible for freeing resp sk_buff. | ||
85 | */ | ||
86 | typedef void (*nfc_digital_cmd_complete_t)(struct nfc_digital_dev *ddev, | ||
87 | void *arg, struct sk_buff *resp); | ||
88 | |||
89 | /** | ||
90 | * Device side NFC Digital operations | ||
91 | * | ||
92 | * Initiator mode: | ||
93 | * @in_configure_hw: Hardware configuration for RF technology and communication | ||
94 | * framing in initiator mode. This is a synchronous function. | ||
95 | * @in_send_cmd: Initiator mode data exchange using RF technology and framing | ||
96 | * previously set with in_configure_hw. The peer response is returned | ||
97 | * through callback cb. If an io error occurs or the peer didn't reply | ||
98 | * within the specified timeout (ms), the error code is passed back through | ||
99 | * the resp pointer. This is an asynchronous function. | ||
100 | * | ||
101 | * Target mode: Only NFC-DEP protocol is supported in target mode. | ||
102 | * @tg_configure_hw: Hardware configuration for RF technology and communication | ||
103 | * framing in target mode. This is a synchronous function. | ||
104 | * @tg_send_cmd: Target mode data exchange using RF technology and framing | ||
105 | * previously set with tg_configure_hw. The peer next command is returned | ||
106 | * through callback cb. If an io error occurs or the peer didn't reply | ||
107 | * within the specified timeout (ms), the error code is passed back through | ||
108 | * the resp pointer. This is an asynchronous function. | ||
109 | * @tg_listen: Put the device in listen mode waiting for data from the peer | ||
110 | * device. This is an asynchronous function. | ||
111 | * @tg_listen_mdaa: If supported, put the device in automatic listen mode with | ||
112 | * mode detection and automatic anti-collision. In this mode, the device | ||
113 | * automatically detects the RF technology and executes the anti-collision | ||
114 | * detection using the command responses specified in mdaa_params. The | ||
115 | * mdaa_params structure contains SENS_RES, NFCID1, and SEL_RES for 106A RF | ||
116 | * tech. NFCID2 and system code (sc) for 212F and 424F. The driver returns | ||
117 | * the NFC-DEP ATR_REQ command through cb. The digital stack deducts the RF | ||
118 | * tech by analyzing the SoD of the frame containing the ATR_REQ command. | ||
119 | * This is an asynchronous function. | ||
120 | * | ||
121 | * @switch_rf: Turns device radio on or off. The stack does not call explicitly | ||
122 | * switch_rf to turn the radio on. A call to in|tg_configure_hw must turn | ||
123 | * the device radio on. | ||
124 | * @abort_cmd: Discard the last sent command. | ||
125 | */ | ||
126 | struct nfc_digital_ops { | ||
127 | int (*in_configure_hw)(struct nfc_digital_dev *ddev, int type, | ||
128 | int param); | ||
129 | int (*in_send_cmd)(struct nfc_digital_dev *ddev, struct sk_buff *skb, | ||
130 | u16 timeout, nfc_digital_cmd_complete_t cb, | ||
131 | void *arg); | ||
132 | |||
133 | int (*tg_configure_hw)(struct nfc_digital_dev *ddev, int type, | ||
134 | int param); | ||
135 | int (*tg_send_cmd)(struct nfc_digital_dev *ddev, struct sk_buff *skb, | ||
136 | u16 timeout, nfc_digital_cmd_complete_t cb, | ||
137 | void *arg); | ||
138 | int (*tg_listen)(struct nfc_digital_dev *ddev, u16 timeout, | ||
139 | nfc_digital_cmd_complete_t cb, void *arg); | ||
140 | int (*tg_listen_mdaa)(struct nfc_digital_dev *ddev, | ||
141 | struct digital_tg_mdaa_params *mdaa_params, | ||
142 | u16 timeout, nfc_digital_cmd_complete_t cb, | ||
143 | void *arg); | ||
144 | |||
145 | int (*switch_rf)(struct nfc_digital_dev *ddev, bool on); | ||
146 | void (*abort_cmd)(struct nfc_digital_dev *ddev); | ||
147 | }; | ||
148 | |||
149 | #define NFC_DIGITAL_POLL_MODE_COUNT_MAX 6 /* 106A, 212F, and 424F in & tg */ | ||
150 | |||
151 | typedef int (*digital_poll_t)(struct nfc_digital_dev *ddev, u8 rf_tech); | ||
152 | |||
153 | struct digital_poll_tech { | ||
154 | u8 rf_tech; | ||
155 | digital_poll_t poll_func; | ||
156 | }; | ||
157 | |||
158 | /** | ||
159 | * Driver capabilities - bit mask made of the following values | ||
160 | * | ||
161 | * @NFC_DIGITAL_DRV_CAPS_IN_CRC: The driver handles CRC calculation in initiator | ||
162 | * mode. | ||
163 | * @NFC_DIGITAL_DRV_CAPS_TG_CRC: The driver handles CRC calculation in target | ||
164 | * mode. | ||
165 | */ | ||
166 | #define NFC_DIGITAL_DRV_CAPS_IN_CRC 0x0001 | ||
167 | #define NFC_DIGITAL_DRV_CAPS_TG_CRC 0x0002 | ||
168 | |||
169 | struct nfc_digital_dev { | ||
170 | struct nfc_dev *nfc_dev; | ||
171 | struct nfc_digital_ops *ops; | ||
172 | |||
173 | u32 protocols; | ||
174 | |||
175 | int tx_headroom; | ||
176 | int tx_tailroom; | ||
177 | |||
178 | u32 driver_capabilities; | ||
179 | void *driver_data; | ||
180 | |||
181 | struct digital_poll_tech poll_techs[NFC_DIGITAL_POLL_MODE_COUNT_MAX]; | ||
182 | u8 poll_tech_count; | ||
183 | u8 poll_tech_index; | ||
184 | struct mutex poll_lock; | ||
185 | |||
186 | struct work_struct cmd_work; | ||
187 | struct work_struct cmd_complete_work; | ||
188 | struct list_head cmd_queue; | ||
189 | struct mutex cmd_lock; | ||
190 | |||
191 | struct work_struct poll_work; | ||
192 | |||
193 | u8 curr_protocol; | ||
194 | u8 curr_rf_tech; | ||
195 | u8 curr_nfc_dep_pni; | ||
196 | |||
197 | int (*skb_check_crc)(struct sk_buff *skb); | ||
198 | void (*skb_add_crc)(struct sk_buff *skb); | ||
199 | }; | ||
200 | |||
201 | struct nfc_digital_dev *nfc_digital_allocate_device(struct nfc_digital_ops *ops, | ||
202 | __u32 supported_protocols, | ||
203 | __u32 driver_capabilities, | ||
204 | int tx_headroom, | ||
205 | int tx_tailroom); | ||
206 | void nfc_digital_free_device(struct nfc_digital_dev *ndev); | ||
207 | int nfc_digital_register_device(struct nfc_digital_dev *ndev); | ||
208 | void nfc_digital_unregister_device(struct nfc_digital_dev *ndev); | ||
209 | |||
210 | static inline void nfc_digital_set_parent_dev(struct nfc_digital_dev *ndev, | ||
211 | struct device *dev) | ||
212 | { | ||
213 | nfc_set_parent_dev(ndev->nfc_dev, dev); | ||
214 | } | ||
215 | |||
216 | static inline void nfc_digital_set_drvdata(struct nfc_digital_dev *dev, | ||
217 | void *data) | ||
218 | { | ||
219 | dev->driver_data = data; | ||
220 | } | ||
221 | |||
222 | static inline void *nfc_digital_get_drvdata(struct nfc_digital_dev *dev) | ||
223 | { | ||
224 | return dev->driver_data; | ||
225 | } | ||
226 | |||
227 | #endif /* __NFC_DIGITAL_H */ | ||
diff --git a/include/net/nfc/hci.h b/include/net/nfc/hci.h index b64b7bce4b94..2eca2960ca9c 100644 --- a/include/net/nfc/hci.h +++ b/include/net/nfc/hci.h | |||
@@ -24,12 +24,6 @@ | |||
24 | 24 | ||
25 | #include <net/nfc/nfc.h> | 25 | #include <net/nfc/nfc.h> |
26 | 26 | ||
27 | struct nfc_phy_ops { | ||
28 | int (*write)(void *dev_id, struct sk_buff *skb); | ||
29 | int (*enable)(void *dev_id); | ||
30 | void (*disable)(void *dev_id); | ||
31 | }; | ||
32 | |||
33 | struct nfc_hci_dev; | 27 | struct nfc_hci_dev; |
34 | 28 | ||
35 | struct nfc_hci_ops { | 29 | struct nfc_hci_ops { |
diff --git a/include/net/nfc/nci.h b/include/net/nfc/nci.h index 88785e5c6b2c..e5aa5acafea0 100644 --- a/include/net/nfc/nci.h +++ b/include/net/nfc/nci.h | |||
@@ -166,6 +166,10 @@ | |||
166 | #define NCI_GID_NFCEE_MGMT 0x2 | 166 | #define NCI_GID_NFCEE_MGMT 0x2 |
167 | #define NCI_GID_PROPRIETARY 0xf | 167 | #define NCI_GID_PROPRIETARY 0xf |
168 | 168 | ||
169 | /* ----- NCI over SPI head/crc(tail) room needed for outgoing frames ----- */ | ||
170 | #define NCI_SPI_HDR_LEN 4 | ||
171 | #define NCI_SPI_CRC_LEN 2 | ||
172 | |||
169 | /* ---- NCI Packet structures ---- */ | 173 | /* ---- NCI Packet structures ---- */ |
170 | #define NCI_CTRL_HDR_SIZE 3 | 174 | #define NCI_CTRL_HDR_SIZE 3 |
171 | #define NCI_DATA_HDR_SIZE 3 | 175 | #define NCI_DATA_HDR_SIZE 3 |
diff --git a/include/net/nfc/nci_core.h b/include/net/nfc/nci_core.h index 99fc1f3a392a..6126f1f992b4 100644 --- a/include/net/nfc/nci_core.h +++ b/include/net/nfc/nci_core.h | |||
@@ -207,19 +207,9 @@ int nci_to_errno(__u8 code); | |||
207 | #define NCI_SPI_CRC_ENABLED 0x01 | 207 | #define NCI_SPI_CRC_ENABLED 0x01 |
208 | 208 | ||
209 | /* ----- NCI SPI structures ----- */ | 209 | /* ----- NCI SPI structures ----- */ |
210 | struct nci_spi_dev; | 210 | struct nci_spi { |
211 | 211 | struct nci_dev *ndev; | |
212 | struct nci_spi_ops { | ||
213 | int (*open)(struct nci_spi_dev *ndev); | ||
214 | int (*close)(struct nci_spi_dev *ndev); | ||
215 | void (*assert_int)(struct nci_spi_dev *ndev); | ||
216 | void (*deassert_int)(struct nci_spi_dev *ndev); | ||
217 | }; | ||
218 | |||
219 | struct nci_spi_dev { | ||
220 | struct nci_dev *nci_dev; | ||
221 | struct spi_device *spi; | 212 | struct spi_device *spi; |
222 | struct nci_spi_ops *ops; | ||
223 | 213 | ||
224 | unsigned int xfer_udelay; /* microseconds delay between | 214 | unsigned int xfer_udelay; /* microseconds delay between |
225 | transactions */ | 215 | transactions */ |
@@ -227,31 +217,15 @@ struct nci_spi_dev { | |||
227 | 217 | ||
228 | struct completion req_completion; | 218 | struct completion req_completion; |
229 | u8 req_result; | 219 | u8 req_result; |
230 | |||
231 | void *driver_data; | ||
232 | }; | 220 | }; |
233 | 221 | ||
234 | /* ----- NCI SPI Devices ----- */ | 222 | /* ----- NCI SPI ----- */ |
235 | struct nci_spi_dev *nci_spi_allocate_device(struct spi_device *spi, | 223 | struct nci_spi *nci_spi_allocate_spi(struct spi_device *spi, |
236 | struct nci_spi_ops *ops, | 224 | u8 acknowledge_mode, unsigned int delay, |
237 | u32 supported_protocols, | 225 | struct nci_dev *ndev); |
238 | u32 supported_se, | 226 | int nci_spi_send(struct nci_spi *nspi, |
239 | u8 acknowledge_mode, | 227 | struct completion *write_handshake_completion, |
240 | unsigned int delay); | 228 | struct sk_buff *skb); |
241 | void nci_spi_free_device(struct nci_spi_dev *ndev); | 229 | struct sk_buff *nci_spi_read(struct nci_spi *nspi); |
242 | int nci_spi_register_device(struct nci_spi_dev *ndev); | ||
243 | void nci_spi_unregister_device(struct nci_spi_dev *ndev); | ||
244 | int nci_spi_recv_frame(struct nci_spi_dev *ndev); | ||
245 | |||
246 | static inline void nci_spi_set_drvdata(struct nci_spi_dev *ndev, | ||
247 | void *data) | ||
248 | { | ||
249 | ndev->driver_data = data; | ||
250 | } | ||
251 | |||
252 | static inline void *nci_spi_get_drvdata(struct nci_spi_dev *ndev) | ||
253 | { | ||
254 | return ndev->driver_data; | ||
255 | } | ||
256 | 230 | ||
257 | #endif /* __NCI_CORE_H */ | 231 | #endif /* __NCI_CORE_H */ |
diff --git a/include/net/nfc/nfc.h b/include/net/nfc/nfc.h index f68ee68e4e3e..82fc4e43fc6e 100644 --- a/include/net/nfc/nfc.h +++ b/include/net/nfc/nfc.h | |||
@@ -28,9 +28,14 @@ | |||
28 | #include <linux/device.h> | 28 | #include <linux/device.h> |
29 | #include <linux/skbuff.h> | 29 | #include <linux/skbuff.h> |
30 | 30 | ||
31 | #define nfc_dev_info(dev, fmt, arg...) dev_info((dev), "NFC: " fmt "\n", ## arg) | 31 | #define nfc_info(dev, fmt, ...) dev_info((dev), "NFC: " fmt, ##__VA_ARGS__) |
32 | #define nfc_dev_err(dev, fmt, arg...) dev_err((dev), "NFC: " fmt "\n", ## arg) | 32 | #define nfc_err(dev, fmt, ...) dev_err((dev), "NFC: " fmt, ##__VA_ARGS__) |
33 | #define nfc_dev_dbg(dev, fmt, arg...) dev_dbg((dev), fmt "\n", ## arg) | 33 | |
34 | struct nfc_phy_ops { | ||
35 | int (*write)(void *dev_id, struct sk_buff *skb); | ||
36 | int (*enable)(void *dev_id); | ||
37 | void (*disable)(void *dev_id); | ||
38 | }; | ||
34 | 39 | ||
35 | struct nfc_dev; | 40 | struct nfc_dev; |
36 | 41 | ||
@@ -48,6 +53,8 @@ struct nfc_dev; | |||
48 | typedef void (*data_exchange_cb_t)(void *context, struct sk_buff *skb, | 53 | typedef void (*data_exchange_cb_t)(void *context, struct sk_buff *skb, |
49 | int err); | 54 | int err); |
50 | 55 | ||
56 | typedef void (*se_io_cb_t)(void *context, u8 *apdu, size_t apdu_len, int err); | ||
57 | |||
51 | struct nfc_target; | 58 | struct nfc_target; |
52 | 59 | ||
53 | struct nfc_ops { | 60 | struct nfc_ops { |
@@ -74,12 +81,23 @@ struct nfc_ops { | |||
74 | int (*discover_se)(struct nfc_dev *dev); | 81 | int (*discover_se)(struct nfc_dev *dev); |
75 | int (*enable_se)(struct nfc_dev *dev, u32 se_idx); | 82 | int (*enable_se)(struct nfc_dev *dev, u32 se_idx); |
76 | int (*disable_se)(struct nfc_dev *dev, u32 se_idx); | 83 | int (*disable_se)(struct nfc_dev *dev, u32 se_idx); |
84 | int (*se_io) (struct nfc_dev *dev, u32 se_idx, | ||
85 | u8 *apdu, size_t apdu_length, | ||
86 | se_io_cb_t cb, void *cb_context); | ||
77 | }; | 87 | }; |
78 | 88 | ||
79 | #define NFC_TARGET_IDX_ANY -1 | 89 | #define NFC_TARGET_IDX_ANY -1 |
80 | #define NFC_MAX_GT_LEN 48 | 90 | #define NFC_MAX_GT_LEN 48 |
81 | #define NFC_ATR_RES_GT_OFFSET 15 | 91 | #define NFC_ATR_RES_GT_OFFSET 15 |
82 | 92 | ||
93 | /** | ||
94 | * struct nfc_target - NFC target descriptiom | ||
95 | * | ||
96 | * @sens_res: 2 bytes describing the target SENS_RES response, if the target | ||
97 | * is a type A one. The %sens_res most significant byte must be byte 2 | ||
98 | * as described by the NFC Forum digital specification (i.e. the platform | ||
99 | * configuration one) while %sens_res least significant byte is byte 1. | ||
100 | */ | ||
83 | struct nfc_target { | 101 | struct nfc_target { |
84 | u32 idx; | 102 | u32 idx; |
85 | u32 supported_protocols; | 103 | u32 supported_protocols; |
@@ -243,5 +261,6 @@ void nfc_driver_failure(struct nfc_dev *dev, int err); | |||
243 | 261 | ||
244 | int nfc_add_se(struct nfc_dev *dev, u32 se_idx, u16 type); | 262 | int nfc_add_se(struct nfc_dev *dev, u32 se_idx, u16 type); |
245 | int nfc_remove_se(struct nfc_dev *dev, u32 se_idx); | 263 | int nfc_remove_se(struct nfc_dev *dev, u32 se_idx); |
264 | struct nfc_se *nfc_find_se(struct nfc_dev *dev, u32 se_idx); | ||
246 | 265 | ||
247 | #endif /* __NET_NFC_H */ | 266 | #endif /* __NET_NFC_H */ |
diff --git a/include/uapi/linux/nfc.h b/include/uapi/linux/nfc.h index 29bed72a4ac4..6ad6cc03ccd3 100644 --- a/include/uapi/linux/nfc.h +++ b/include/uapi/linux/nfc.h | |||
@@ -85,6 +85,7 @@ | |||
85 | * a specific SE notifies us about the end of a transaction. The parameter | 85 | * a specific SE notifies us about the end of a transaction. The parameter |
86 | * for this event is the application ID (AID). | 86 | * for this event is the application ID (AID). |
87 | * @NFC_CMD_GET_SE: Dump all discovered secure elements from an NFC controller. | 87 | * @NFC_CMD_GET_SE: Dump all discovered secure elements from an NFC controller. |
88 | * @NFC_CMD_SE_IO: Send/Receive APDUs to/from the selected secure element. | ||
88 | */ | 89 | */ |
89 | enum nfc_commands { | 90 | enum nfc_commands { |
90 | NFC_CMD_UNSPEC, | 91 | NFC_CMD_UNSPEC, |
@@ -114,6 +115,7 @@ enum nfc_commands { | |||
114 | NFC_EVENT_SE_CONNECTIVITY, | 115 | NFC_EVENT_SE_CONNECTIVITY, |
115 | NFC_EVENT_SE_TRANSACTION, | 116 | NFC_EVENT_SE_TRANSACTION, |
116 | NFC_CMD_GET_SE, | 117 | NFC_CMD_GET_SE, |
118 | NFC_CMD_SE_IO, | ||
117 | /* private: internal use only */ | 119 | /* private: internal use only */ |
118 | __NFC_CMD_AFTER_LAST | 120 | __NFC_CMD_AFTER_LAST |
119 | }; | 121 | }; |
@@ -147,6 +149,7 @@ enum nfc_commands { | |||
147 | * @NFC_ATTR_SE_INDEX: Secure element index | 149 | * @NFC_ATTR_SE_INDEX: Secure element index |
148 | * @NFC_ATTR_SE_TYPE: Secure element type (UICC or EMBEDDED) | 150 | * @NFC_ATTR_SE_TYPE: Secure element type (UICC or EMBEDDED) |
149 | * @NFC_ATTR_FIRMWARE_DOWNLOAD_STATUS: Firmware download operation status | 151 | * @NFC_ATTR_FIRMWARE_DOWNLOAD_STATUS: Firmware download operation status |
152 | * @NFC_ATTR_APDU: Secure element APDU | ||
150 | */ | 153 | */ |
151 | enum nfc_attrs { | 154 | enum nfc_attrs { |
152 | NFC_ATTR_UNSPEC, | 155 | NFC_ATTR_UNSPEC, |
@@ -174,6 +177,7 @@ enum nfc_attrs { | |||
174 | NFC_ATTR_SE_TYPE, | 177 | NFC_ATTR_SE_TYPE, |
175 | NFC_ATTR_SE_AID, | 178 | NFC_ATTR_SE_AID, |
176 | NFC_ATTR_FIRMWARE_DOWNLOAD_STATUS, | 179 | NFC_ATTR_FIRMWARE_DOWNLOAD_STATUS, |
180 | NFC_ATTR_SE_APDU, | ||
177 | /* private: internal use only */ | 181 | /* private: internal use only */ |
178 | __NFC_ATTR_AFTER_LAST | 182 | __NFC_ATTR_AFTER_LAST |
179 | }; | 183 | }; |