diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2007-10-20 07:33:56 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-10-22 05:59:40 -0400 |
commit | a9de9248064bfc8eb0a183a6a951a4e7b5ca10a4 (patch) | |
tree | 4934b99543a9ae0f0282a7f366a8b765c6fb1a08 /net/bluetooth/hci_core.c | |
parent | 55b70a0300b873c0ec7ea6e33752af56f41250ce (diff) |
[Bluetooth] Switch from OGF+OCF to using only opcodes
The Bluetooth HCI commands are divided into logical OGF groups for
easier identification of their purposes. While this still makes sense
for the written specification, its makes the code only more complex
and harder to read. So instead of using separate OGF and OCF values
to identify the commands, use a common 16-bit opcode that combines
both values. As a side effect this also reduces the complexity of
OGF and OCF calculations during command header parsing.
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to 'net/bluetooth/hci_core.c')
-rw-r--r-- | net/bluetooth/hci_core.c | 48 |
1 files changed, 27 insertions, 21 deletions
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index 18e3afc964df..2894382dd26d 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c | |||
@@ -176,7 +176,7 @@ static void hci_reset_req(struct hci_dev *hdev, unsigned long opt) | |||
176 | BT_DBG("%s %ld", hdev->name, opt); | 176 | BT_DBG("%s %ld", hdev->name, opt); |
177 | 177 | ||
178 | /* Reset device */ | 178 | /* Reset device */ |
179 | hci_send_cmd(hdev, OGF_HOST_CTL, OCF_RESET, 0, NULL); | 179 | hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL); |
180 | } | 180 | } |
181 | 181 | ||
182 | static void hci_init_req(struct hci_dev *hdev, unsigned long opt) | 182 | static void hci_init_req(struct hci_dev *hdev, unsigned long opt) |
@@ -202,16 +202,16 @@ static void hci_init_req(struct hci_dev *hdev, unsigned long opt) | |||
202 | 202 | ||
203 | /* Reset */ | 203 | /* Reset */ |
204 | if (test_bit(HCI_QUIRK_RESET_ON_INIT, &hdev->quirks)) | 204 | if (test_bit(HCI_QUIRK_RESET_ON_INIT, &hdev->quirks)) |
205 | hci_send_cmd(hdev, OGF_HOST_CTL, OCF_RESET, 0, NULL); | 205 | hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL); |
206 | 206 | ||
207 | /* Read Local Supported Features */ | 207 | /* Read Local Supported Features */ |
208 | hci_send_cmd(hdev, OGF_INFO_PARAM, OCF_READ_LOCAL_FEATURES, 0, NULL); | 208 | hci_send_cmd(hdev, HCI_OP_READ_LOCAL_FEATURES, 0, NULL); |
209 | 209 | ||
210 | /* Read Local Version */ | 210 | /* Read Local Version */ |
211 | hci_send_cmd(hdev, OGF_INFO_PARAM, OCF_READ_LOCAL_VERSION, 0, NULL); | 211 | hci_send_cmd(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL); |
212 | 212 | ||
213 | /* Read Buffer Size (ACL mtu, max pkt, etc.) */ | 213 | /* Read Buffer Size (ACL mtu, max pkt, etc.) */ |
214 | hci_send_cmd(hdev, OGF_INFO_PARAM, OCF_READ_BUFFER_SIZE, 0, NULL); | 214 | hci_send_cmd(hdev, HCI_OP_READ_BUFFER_SIZE, 0, NULL); |
215 | 215 | ||
216 | #if 0 | 216 | #if 0 |
217 | /* Host buffer size */ | 217 | /* Host buffer size */ |
@@ -221,29 +221,35 @@ static void hci_init_req(struct hci_dev *hdev, unsigned long opt) | |||
221 | cp.sco_mtu = HCI_MAX_SCO_SIZE; | 221 | cp.sco_mtu = HCI_MAX_SCO_SIZE; |
222 | cp.acl_max_pkt = cpu_to_le16(0xffff); | 222 | cp.acl_max_pkt = cpu_to_le16(0xffff); |
223 | cp.sco_max_pkt = cpu_to_le16(0xffff); | 223 | cp.sco_max_pkt = cpu_to_le16(0xffff); |
224 | hci_send_cmd(hdev, OGF_HOST_CTL, OCF_HOST_BUFFER_SIZE, sizeof(cp), &cp); | 224 | hci_send_cmd(hdev, HCI_OP_HOST_BUFFER_SIZE, sizeof(cp), &cp); |
225 | } | 225 | } |
226 | #endif | 226 | #endif |
227 | 227 | ||
228 | /* Read BD Address */ | 228 | /* Read BD Address */ |
229 | hci_send_cmd(hdev, OGF_INFO_PARAM, OCF_READ_BD_ADDR, 0, NULL); | 229 | hci_send_cmd(hdev, HCI_OP_READ_BD_ADDR, 0, NULL); |
230 | |||
231 | /* Read Class of Device */ | ||
232 | hci_send_cmd(hdev, HCI_OP_READ_CLASS_OF_DEV, 0, NULL); | ||
233 | |||
234 | /* Read Local Name */ | ||
235 | hci_send_cmd(hdev, HCI_OP_READ_LOCAL_NAME, 0, NULL); | ||
230 | 236 | ||
231 | /* Read Voice Setting */ | 237 | /* Read Voice Setting */ |
232 | hci_send_cmd(hdev, OGF_HOST_CTL, OCF_READ_VOICE_SETTING, 0, NULL); | 238 | hci_send_cmd(hdev, HCI_OP_READ_VOICE_SETTING, 0, NULL); |
233 | 239 | ||
234 | /* Optional initialization */ | 240 | /* Optional initialization */ |
235 | 241 | ||
236 | /* Clear Event Filters */ | 242 | /* Clear Event Filters */ |
237 | flt_type = HCI_FLT_CLEAR_ALL; | 243 | flt_type = HCI_FLT_CLEAR_ALL; |
238 | hci_send_cmd(hdev, OGF_HOST_CTL, OCF_SET_EVENT_FLT, 1, &flt_type); | 244 | hci_send_cmd(hdev, HCI_OP_SET_EVENT_FLT, 1, &flt_type); |
239 | 245 | ||
240 | /* Page timeout ~20 secs */ | 246 | /* Page timeout ~20 secs */ |
241 | param = cpu_to_le16(0x8000); | 247 | param = cpu_to_le16(0x8000); |
242 | hci_send_cmd(hdev, OGF_HOST_CTL, OCF_WRITE_PG_TIMEOUT, 2, ¶m); | 248 | hci_send_cmd(hdev, HCI_OP_WRITE_PG_TIMEOUT, 2, ¶m); |
243 | 249 | ||
244 | /* Connection accept timeout ~20 secs */ | 250 | /* Connection accept timeout ~20 secs */ |
245 | param = cpu_to_le16(0x7d00); | 251 | param = cpu_to_le16(0x7d00); |
246 | hci_send_cmd(hdev, OGF_HOST_CTL, OCF_WRITE_CA_TIMEOUT, 2, ¶m); | 252 | hci_send_cmd(hdev, HCI_OP_WRITE_CA_TIMEOUT, 2, ¶m); |
247 | } | 253 | } |
248 | 254 | ||
249 | static void hci_scan_req(struct hci_dev *hdev, unsigned long opt) | 255 | static void hci_scan_req(struct hci_dev *hdev, unsigned long opt) |
@@ -253,7 +259,7 @@ static void hci_scan_req(struct hci_dev *hdev, unsigned long opt) | |||
253 | BT_DBG("%s %x", hdev->name, scan); | 259 | BT_DBG("%s %x", hdev->name, scan); |
254 | 260 | ||
255 | /* Inquiry and Page scans */ | 261 | /* Inquiry and Page scans */ |
256 | hci_send_cmd(hdev, OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE, 1, &scan); | 262 | hci_send_cmd(hdev, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan); |
257 | } | 263 | } |
258 | 264 | ||
259 | static void hci_auth_req(struct hci_dev *hdev, unsigned long opt) | 265 | static void hci_auth_req(struct hci_dev *hdev, unsigned long opt) |
@@ -263,7 +269,7 @@ static void hci_auth_req(struct hci_dev *hdev, unsigned long opt) | |||
263 | BT_DBG("%s %x", hdev->name, auth); | 269 | BT_DBG("%s %x", hdev->name, auth); |
264 | 270 | ||
265 | /* Authentication */ | 271 | /* Authentication */ |
266 | hci_send_cmd(hdev, OGF_HOST_CTL, OCF_WRITE_AUTH_ENABLE, 1, &auth); | 272 | hci_send_cmd(hdev, HCI_OP_WRITE_AUTH_ENABLE, 1, &auth); |
267 | } | 273 | } |
268 | 274 | ||
269 | static void hci_encrypt_req(struct hci_dev *hdev, unsigned long opt) | 275 | static void hci_encrypt_req(struct hci_dev *hdev, unsigned long opt) |
@@ -273,7 +279,7 @@ static void hci_encrypt_req(struct hci_dev *hdev, unsigned long opt) | |||
273 | BT_DBG("%s %x", hdev->name, encrypt); | 279 | BT_DBG("%s %x", hdev->name, encrypt); |
274 | 280 | ||
275 | /* Authentication */ | 281 | /* Authentication */ |
276 | hci_send_cmd(hdev, OGF_HOST_CTL, OCF_WRITE_ENCRYPT_MODE, 1, &encrypt); | 282 | hci_send_cmd(hdev, HCI_OP_WRITE_ENCRYPT_MODE, 1, &encrypt); |
277 | } | 283 | } |
278 | 284 | ||
279 | /* Get HCI device by index. | 285 | /* Get HCI device by index. |
@@ -384,7 +390,7 @@ static void hci_inq_req(struct hci_dev *hdev, unsigned long opt) | |||
384 | memcpy(&cp.lap, &ir->lap, 3); | 390 | memcpy(&cp.lap, &ir->lap, 3); |
385 | cp.length = ir->length; | 391 | cp.length = ir->length; |
386 | cp.num_rsp = ir->num_rsp; | 392 | cp.num_rsp = ir->num_rsp; |
387 | hci_send_cmd(hdev, OGF_LINK_CTL, OCF_INQUIRY, sizeof(cp), &cp); | 393 | hci_send_cmd(hdev, HCI_OP_INQUIRY, sizeof(cp), &cp); |
388 | } | 394 | } |
389 | 395 | ||
390 | int hci_inquiry(void __user *arg) | 396 | int hci_inquiry(void __user *arg) |
@@ -1111,13 +1117,13 @@ static int hci_send_frame(struct sk_buff *skb) | |||
1111 | } | 1117 | } |
1112 | 1118 | ||
1113 | /* Send HCI command */ | 1119 | /* Send HCI command */ |
1114 | int hci_send_cmd(struct hci_dev *hdev, __u16 ogf, __u16 ocf, __u32 plen, void *param) | 1120 | int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen, void *param) |
1115 | { | 1121 | { |
1116 | int len = HCI_COMMAND_HDR_SIZE + plen; | 1122 | int len = HCI_COMMAND_HDR_SIZE + plen; |
1117 | struct hci_command_hdr *hdr; | 1123 | struct hci_command_hdr *hdr; |
1118 | struct sk_buff *skb; | 1124 | struct sk_buff *skb; |
1119 | 1125 | ||
1120 | BT_DBG("%s ogf 0x%x ocf 0x%x plen %d", hdev->name, ogf, ocf, plen); | 1126 | BT_DBG("%s opcode 0x%x plen %d", hdev->name, opcode, plen); |
1121 | 1127 | ||
1122 | skb = bt_skb_alloc(len, GFP_ATOMIC); | 1128 | skb = bt_skb_alloc(len, GFP_ATOMIC); |
1123 | if (!skb) { | 1129 | if (!skb) { |
@@ -1126,7 +1132,7 @@ int hci_send_cmd(struct hci_dev *hdev, __u16 ogf, __u16 ocf, __u32 plen, void *p | |||
1126 | } | 1132 | } |
1127 | 1133 | ||
1128 | hdr = (struct hci_command_hdr *) skb_put(skb, HCI_COMMAND_HDR_SIZE); | 1134 | hdr = (struct hci_command_hdr *) skb_put(skb, HCI_COMMAND_HDR_SIZE); |
1129 | hdr->opcode = cpu_to_le16(hci_opcode_pack(ogf, ocf)); | 1135 | hdr->opcode = cpu_to_le16(opcode); |
1130 | hdr->plen = plen; | 1136 | hdr->plen = plen; |
1131 | 1137 | ||
1132 | if (plen) | 1138 | if (plen) |
@@ -1143,7 +1149,7 @@ int hci_send_cmd(struct hci_dev *hdev, __u16 ogf, __u16 ocf, __u32 plen, void *p | |||
1143 | } | 1149 | } |
1144 | 1150 | ||
1145 | /* Get data from the previously sent command */ | 1151 | /* Get data from the previously sent command */ |
1146 | void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 ogf, __u16 ocf) | 1152 | void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 opcode) |
1147 | { | 1153 | { |
1148 | struct hci_command_hdr *hdr; | 1154 | struct hci_command_hdr *hdr; |
1149 | 1155 | ||
@@ -1152,10 +1158,10 @@ void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 ogf, __u16 ocf) | |||
1152 | 1158 | ||
1153 | hdr = (void *) hdev->sent_cmd->data; | 1159 | hdr = (void *) hdev->sent_cmd->data; |
1154 | 1160 | ||
1155 | if (hdr->opcode != cpu_to_le16(hci_opcode_pack(ogf, ocf))) | 1161 | if (hdr->opcode != cpu_to_le16(opcode)) |
1156 | return NULL; | 1162 | return NULL; |
1157 | 1163 | ||
1158 | BT_DBG("%s ogf 0x%x ocf 0x%x", hdev->name, ogf, ocf); | 1164 | BT_DBG("%s opcode 0x%x", hdev->name, opcode); |
1159 | 1165 | ||
1160 | return hdev->sent_cmd->data + HCI_COMMAND_HDR_SIZE; | 1166 | return hdev->sent_cmd->data + HCI_COMMAND_HDR_SIZE; |
1161 | } | 1167 | } |