Clean up hciops code

Get rid of unnecessary variables now that the most important info is
tracked in the devs table.
diff --git a/plugins/hciops.c b/plugins/hciops.c
index 57c1890..0a32a0f 100644
--- a/plugins/hciops.c
+++ b/plugins/hciops.c
@@ -263,21 +263,19 @@
 
 /* Start of HCI event callbacks */
 
-static int get_handle(int dev, bdaddr_t *sba, bdaddr_t *dba, uint16_t *handle)
+static int get_handle(int index, bdaddr_t *dba, uint16_t *handle)
 {
 	struct hci_conn_list_req *cl;
 	struct hci_conn_info *ci;
-	char addr[18];
 	int i;
 
 	cl = g_malloc0(10 * sizeof(*ci) + sizeof(*cl));
 
-	ba2str(sba, addr);
-	cl->dev_id = hci_devid(addr);
+	cl->dev_id = index;
 	cl->conn_num = 10;
 	ci = cl->conn_info;
 
-	if (ioctl(dev, HCIGETCONNLIST, (void *) cl) < 0) {
+	if (ioctl(SK(index), HCIGETCONNLIST, (void *) cl) < 0) {
 		g_free(cl);
 		return -EIO;
 	}
@@ -295,21 +293,19 @@
 	return -ENOENT;
 }
 
-static inline int get_bdaddr(int dev, bdaddr_t *sba, uint16_t handle, bdaddr_t *dba)
+static inline int get_bdaddr(int index, uint16_t handle, bdaddr_t *dba)
 {
 	struct hci_conn_list_req *cl;
 	struct hci_conn_info *ci;
-	char addr[18];
 	int i;
 
 	cl = g_malloc0(10 * sizeof(*ci) + sizeof(*cl));
 
-	ba2str(sba, addr);
-	cl->dev_id = hci_devid(addr);
+	cl->dev_id = index;
 	cl->conn_num = 10;
 	ci = cl->conn_info;
 
-	if (ioctl(dev, HCIGETCONNLIST, (void *) cl) < 0) {
+	if (ioctl(SK(index), HCIGETCONNLIST, (void *) cl) < 0) {
 		g_free(cl);
 		return -EIO;
 	}
@@ -350,7 +346,7 @@
 
 /* Link Key handling */
 
-static void link_key_request(int dev, bdaddr_t *sba, bdaddr_t *dba)
+static void link_key_request(int index, bdaddr_t *dba)
 {
 	struct btd_adapter *adapter;
 	struct btd_device *device;
@@ -360,10 +356,10 @@
 	uint8_t type;
 	int err;
 
-	ba2str(sba, sa); ba2str(dba, da);
+	ba2str(&BDADDR(index), sa); ba2str(dba, da);
 	info("link_key_request (sba=%s, dba=%s)", sa, da);
 
-	adapter = manager_find_adapter(sba);
+	adapter = manager_find_adapter(&BDADDR(index));
 	if (adapter)
 		device = adapter_find_device(adapter, da);
 	else
@@ -372,7 +368,7 @@
 	memset(&req, 0, sizeof(req));
 	bacpy(&req.bdaddr, dba);
 
-	err = ioctl(dev, HCIGETAUTHINFO, (unsigned long) &req);
+	err = ioctl(SK(index), HCIGETAUTHINFO, (unsigned long) &req);
 	if (err < 0) {
 		if (errno != EINVAL)
 			DBG("HCIGETAUTHINFO failed %s (%d)",
@@ -384,9 +380,11 @@
 
 	if (main_opts.debug_keys && device && device_get_debug_key(device, key))
 		type = 0x03;
-	else if (read_link_key(sba, dba, key, &type) < 0 || type == 0x03) {
+	else if (read_link_key(&BDADDR(index), dba, key, &type) < 0 ||
+								type == 0x03) {
 		/* Link key not found */
-		hci_send_cmd(dev, OGF_LINK_CTL, OCF_LINK_KEY_NEG_REPLY, 6, dba);
+		hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_LINK_KEY_NEG_REPLY,
+								6, dba);
 		return;
 	}
 
@@ -397,7 +395,7 @@
 	/* Don't use unauthenticated combination keys if MITM is
 	 * required */
 	if (type == 0x04 && req.type != 0xff && (req.type & 0x01))
-		hci_send_cmd(dev, OGF_LINK_CTL, OCF_LINK_KEY_NEG_REPLY,
+		hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_LINK_KEY_NEG_REPLY,
 								6, dba);
 	else {
 		link_key_reply_cp lr;
@@ -405,63 +403,57 @@
 		memcpy(lr.link_key, key, 16);
 		bacpy(&lr.bdaddr, dba);
 
-		hci_send_cmd(dev, OGF_LINK_CTL, OCF_LINK_KEY_REPLY,
+		hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_LINK_KEY_REPLY,
 						LINK_KEY_REPLY_CP_SIZE, &lr);
 	}
 }
 
-static void link_key_notify(int dev, bdaddr_t *sba, void *ptr)
+static void link_key_notify(int index, void *ptr)
 {
 	evt_link_key_notify *evt = ptr;
 	bdaddr_t *dba = &evt->bdaddr;
 	char sa[18], da[18];
-	int dev_id, err;
+	int err;
 	unsigned char old_key[16];
 	uint8_t old_key_type;
 
-	ba2str(sba, sa); ba2str(dba, da);
+	ba2str(&BDADDR(index), sa); ba2str(dba, da);
 	info("link_key_notify (sba=%s, dba=%s, type=%d)", sa, da,
 							evt->key_type);
 
-	err = read_link_key(sba, dba, old_key, &old_key_type);
+	err = read_link_key(&BDADDR(index), dba, old_key, &old_key_type);
 	if (err < 0)
 		old_key_type = 0xff;
 
-	dev_id = hci_devid(sa);
-	if (dev_id < 0)
-		err = -errno;
-	else {
-		err = btd_event_link_key_notify(sba, dba, evt->link_key,
-						evt->key_type,
-						PIN_LENGTH(dev_id),
-						old_key_type);
-		PIN_LENGTH(dev_id) = -1;
-	}
+	err = btd_event_link_key_notify(&BDADDR(index), dba, evt->link_key,
+					evt->key_type, PIN_LENGTH(index),
+					old_key_type);
+	PIN_LENGTH(index) = -1;
 
 	if (err < 0) {
 		uint16_t handle;
 
 		if (err == -ENODEV)
-			btd_event_bonding_process_complete(sba, dba,
+			btd_event_bonding_process_complete(&BDADDR(index), dba,
 							HCI_OE_LOW_RESOURCES);
 		else
-			btd_event_bonding_process_complete(sba, dba,
+			btd_event_bonding_process_complete(&BDADDR(index), dba,
 							HCI_MEMORY_FULL);
 
-		if (get_handle(dev, sba, dba, &handle) == 0) {
+		if (get_handle(index, dba, &handle) == 0) {
 			disconnect_cp cp;
 
 			memset(&cp, 0, sizeof(cp));
 			cp.handle = htobs(handle);
 			cp.reason = HCI_OE_LOW_RESOURCES;
 
-			hci_send_cmd(dev, OGF_LINK_CTL, OCF_DISCONNECT,
+			hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_DISCONNECT,
 						DISCONNECT_CP_SIZE, &cp);
 		}
 	}
 }
 
-static void return_link_keys(int dev, bdaddr_t *sba, void *ptr)
+static void return_link_keys(int index, void *ptr)
 {
 	evt_return_link_keys *evt = ptr;
 	uint8_t num = evt->num_keys;
@@ -470,7 +462,7 @@
 	bdaddr_t dba;
 	int i;
 
-	ba2str(sba, sa);
+	ba2str(&BDADDR(index), sa);
 	ptr++;
 
 	for (i = 0; i < num; i++) {
@@ -479,7 +471,7 @@
 
 		info("return_link_keys (sba=%s, dba=%s)", sa, da);
 
-		btd_event_returned_link_key(sba, &dba);
+		btd_event_returned_link_key(&BDADDR(index), &dba);
 
 		ptr += 22;
 	}
@@ -487,51 +479,55 @@
 
 /* Simple Pairing handling */
 
-static void user_confirm_request(int dev, bdaddr_t *sba, void *ptr)
+static void user_confirm_request(int index, void *ptr)
 {
 	evt_user_confirm_request *req = ptr;
 
-	if (btd_event_user_confirm(sba, &req->bdaddr,
+	if (btd_event_user_confirm(&BDADDR(index), &req->bdaddr,
 					btohl(req->passkey)) < 0)
-		hci_send_cmd(dev, OGF_LINK_CTL,
+		hci_send_cmd(SK(index), OGF_LINK_CTL,
 				OCF_USER_CONFIRM_NEG_REPLY, 6, ptr);
 }
 
-static void user_passkey_request(int dev, bdaddr_t *sba, void *ptr)
+static void user_passkey_request(int index, void *ptr)
 {
 	evt_user_passkey_request *req = ptr;
 
-	if (btd_event_user_passkey(sba, &req->bdaddr) < 0)
-		hci_send_cmd(dev, OGF_LINK_CTL,
+	if (btd_event_user_passkey(&BDADDR(index), &req->bdaddr) < 0)
+		hci_send_cmd(SK(index), OGF_LINK_CTL,
 				OCF_USER_PASSKEY_NEG_REPLY, 6, ptr);
 }
 
-static void user_passkey_notify(int dev, bdaddr_t *sba, void *ptr)
+static void user_passkey_notify(int index, void *ptr)
 {
 	evt_user_passkey_notify *req = ptr;
 
-	btd_event_user_notify(sba, &req->bdaddr, btohl(req->passkey));
+	btd_event_user_notify(&BDADDR(index), &req->bdaddr,
+						btohl(req->passkey));
 }
 
-static void remote_oob_data_request(int dev, bdaddr_t *sba, void *ptr)
+static void remote_oob_data_request(int index, void *ptr)
 {
-	hci_send_cmd(dev, OGF_LINK_CTL, OCF_REMOTE_OOB_DATA_NEG_REPLY, 6, ptr);
+	hci_send_cmd(SK(index), OGF_LINK_CTL,
+				OCF_REMOTE_OOB_DATA_NEG_REPLY, 6, ptr);
 }
 
-static void io_capa_request(int dev, bdaddr_t *sba, bdaddr_t *dba)
+static void io_capa_request(int index, void *ptr)
 {
+	bdaddr_t *dba = ptr;
 	char sa[18], da[18];
 	uint8_t cap, auth;
 
-	ba2str(sba, sa); ba2str(dba, da);
+	ba2str(&BDADDR(index), sa); ba2str(dba, da);
 	info("io_capa_request (sba=%s, dba=%s)", sa, da);
 
-	if (btd_event_get_io_cap(sba, dba, &cap, &auth) < 0) {
+	if (btd_event_get_io_cap(&BDADDR(index), dba, &cap, &auth) < 0) {
 		io_capability_neg_reply_cp cp;
 		memset(&cp, 0, sizeof(cp));
 		bacpy(&cp.bdaddr, dba);
 		cp.reason = HCI_PAIRING_NOT_ALLOWED;
-		hci_send_cmd(dev, OGF_LINK_CTL, OCF_IO_CAPABILITY_NEG_REPLY,
+		hci_send_cmd(SK(index), OGF_LINK_CTL,
+					OCF_IO_CAPABILITY_NEG_REPLY,
 					IO_CAPABILITY_NEG_REPLY_CP_SIZE, &cp);
 	} else {
 		io_capability_reply_cp cp;
@@ -540,38 +536,26 @@
 		cp.capability = cap;
 		cp.oob_data = 0x00;
 		cp.authentication = auth;
-		hci_send_cmd(dev, OGF_LINK_CTL, OCF_IO_CAPABILITY_REPLY,
+		hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_IO_CAPABILITY_REPLY,
 					IO_CAPABILITY_REPLY_CP_SIZE, &cp);
 	}
 }
 
-static void io_capa_response(int dev, bdaddr_t *sba, void *ptr)
+static void io_capa_response(int index, void *ptr)
 {
 	evt_io_capability_response *evt = ptr;
 	char sa[18], da[18];
 
-	ba2str(sba, sa); ba2str(&evt->bdaddr, da);
+	ba2str(&BDADDR(index), sa); ba2str(&evt->bdaddr, da);
 	info("io_capa_response (sba=%s, dba=%s)", sa, da);
 
-	btd_event_set_io_cap(sba, &evt->bdaddr,
+	btd_event_set_io_cap(&BDADDR(index), &evt->bdaddr,
 				evt->capability, evt->authentication);
 }
 
 /* PIN code handling */
 
-void set_pin_length(bdaddr_t *sba, int length)
-{
-	char addr[18];
-	int dev_id;
-
-	ba2str(sba, addr);
-	dev_id = hci_devid(addr);
-
-	if (dev_id >= 0)
-		PIN_LENGTH(dev_id) = length;
-}
-
-static void pin_code_request(int dev, bdaddr_t *sba, bdaddr_t *dba)
+static void pin_code_request(int index, bdaddr_t *dba)
 {
 	pin_code_reply_cp pr;
 	struct hci_conn_info_req *cr;
@@ -582,31 +566,31 @@
 	memset(&pr, 0, sizeof(pr));
 	bacpy(&pr.bdaddr, dba);
 
-	ba2str(sba, sa); ba2str(dba, da);
+	ba2str(&BDADDR(index), sa); ba2str(dba, da);
 	info("pin_code_request (sba=%s, dba=%s)", sa, da);
 
 	cr = g_malloc0(sizeof(*cr) + sizeof(*ci));
 
 	bacpy(&cr->bdaddr, dba);
 	cr->type = ACL_LINK;
-	if (ioctl(dev, HCIGETCONNINFO, (unsigned long) cr) < 0) {
+	if (ioctl(SK(index), HCIGETCONNINFO, (unsigned long) cr) < 0) {
 		error("Can't get conn info: %s (%d)", strerror(errno), errno);
 		goto reject;
 	}
 	ci = cr->conn_info;
 
 	memset(pin, 0, sizeof(pin));
-	pinlen = read_pin_code(sba, dba, pin);
+	pinlen = read_pin_code(&BDADDR(index), dba, pin);
 
 	if (pinlen > 0) {
-		set_pin_length(sba, pinlen);
+		PIN_LENGTH(index) = pinlen;
 		memcpy(pr.pin_code, pin, pinlen);
 		pr.pin_len = pinlen;
-		hci_send_cmd(dev, OGF_LINK_CTL, OCF_PIN_CODE_REPLY,
-				PIN_CODE_REPLY_CP_SIZE, &pr);
+		hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_PIN_CODE_REPLY,
+						PIN_CODE_REPLY_CP_SIZE, &pr);
 	} else {
 		/* Request PIN from passkey agent */
-		if (btd_event_request_pin(dev, sba, ci) < 0)
+		if (btd_event_request_pin(SK(index), &BDADDR(index), ci) < 0)
 			goto reject;
 	}
 
@@ -617,7 +601,7 @@
 reject:
 	g_free(cr);
 
-	hci_send_cmd(dev, OGF_LINK_CTL, OCF_PIN_CODE_NEG_REPLY, 6, dba);
+	hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_PIN_CODE_NEG_REPLY, 6, dba);
 }
 
 static void start_inquiry(bdaddr_t *local, uint8_t status, gboolean periodic)
@@ -669,16 +653,18 @@
 	adapter_set_state(adapter, state);
 }
 
-static inline void remote_features_notify(int dev, bdaddr_t *sba, void *ptr)
+static inline void remote_features_notify(int index, void *ptr)
 {
 	evt_remote_host_features_notify *evt = ptr;
 
 	if (evt->features[0] & 0x01)
-		btd_event_set_legacy_pairing(sba, &evt->bdaddr, FALSE);
+		btd_event_set_legacy_pairing(&BDADDR(index), &evt->bdaddr,
+									FALSE);
 	else
-		btd_event_set_legacy_pairing(sba, &evt->bdaddr, TRUE);
+		btd_event_set_legacy_pairing(&BDADDR(index), &evt->bdaddr,
+									TRUE);
 
-	write_features_info(sba, &evt->bdaddr, NULL, evt->features);
+	write_features_info(&BDADDR(index), &evt->bdaddr, NULL, evt->features);
 }
 
 static void write_le_host_complete(bdaddr_t *sba, uint8_t status)
@@ -736,21 +722,21 @@
 		manager_start_adapter(index);
 }
 
-static inline void cmd_status(int dev, bdaddr_t *sba, void *ptr)
+static inline void cmd_status(int index, void *ptr)
 {
 	evt_cmd_status *evt = ptr;
 	uint16_t opcode = btohs(evt->opcode);
 
 	if (opcode == cmd_opcode_pack(OGF_LINK_CTL, OCF_INQUIRY))
-		start_inquiry(sba, evt->status, FALSE);
+		start_inquiry(&BDADDR(index), evt->status, FALSE);
 }
 
-static void read_scan_complete(bdaddr_t *sba, uint8_t status, void *ptr)
+static void read_scan_complete(int index, uint8_t status, void *ptr)
 {
 	struct btd_adapter *adapter;
 	read_scan_enable_rp *rp = ptr;
 
-	adapter = manager_find_adapter(sba);
+	adapter = manager_find_adapter(&BDADDR(index));
 
 	if (!adapter) {
 		error("Unable to find matching adapter");
@@ -760,7 +746,7 @@
 	adapter_mode_changed(adapter, rp->enable);
 }
 
-static inline void cmd_complete(int index, bdaddr_t *sba, void *ptr)
+static inline void cmd_complete(int index, void *ptr)
 {
 	evt_cmd_complete *evt = ptr;
 	uint16_t opcode = btohs(evt->opcode);
@@ -769,59 +755,60 @@
 	switch (opcode) {
 	case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_EXT_FEATURES):
 		ptr += sizeof(evt_cmd_complete);
-		read_local_ext_features_complete(sba, ptr);
+		read_local_ext_features_complete(&BDADDR(index), ptr);
 		break;
 	case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_BD_ADDR):
 		ptr += sizeof(evt_cmd_complete);
 		read_bd_addr_complete(index, ptr);
 		break;
 	case cmd_opcode_pack(OGF_LINK_CTL, OCF_PERIODIC_INQUIRY):
-		start_inquiry(sba, status, TRUE);
+		start_inquiry(&BDADDR(index), status, TRUE);
 		break;
 	case cmd_opcode_pack(OGF_LINK_CTL, OCF_EXIT_PERIODIC_INQUIRY):
-		inquiry_complete(sba, status, TRUE);
+		inquiry_complete(&BDADDR(index), status, TRUE);
 		break;
 	case cmd_opcode_pack(OGF_LINK_CTL, OCF_INQUIRY_CANCEL):
-		inquiry_complete(sba, status, FALSE);
+		inquiry_complete(&BDADDR(index), status, FALSE);
 		break;
 	case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_LE_HOST_SUPPORTED):
-		write_le_host_complete(sba, status);
+		write_le_host_complete(&BDADDR(index), status);
 		break;
 	case cmd_opcode_pack(OGF_LE_CTL, OCF_LE_SET_SCAN_ENABLE):
-		btd_event_le_set_scan_enable_complete(sba, status);
+		btd_event_le_set_scan_enable_complete(&BDADDR(index), status);
 		break;
 	case cmd_opcode_pack(OGF_HOST_CTL, OCF_CHANGE_LOCAL_NAME):
-		adapter_setname_complete(sba, status);
+		adapter_setname_complete(&BDADDR(index), status);
 		break;
 	case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE):
-		btd_event_setscan_enable_complete(sba);
+		btd_event_setscan_enable_complete(&BDADDR(index));
 		break;
 	case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_SCAN_ENABLE):
 		ptr += sizeof(evt_cmd_complete);
-		read_scan_complete(sba, status, ptr);
+		read_scan_complete(index, status, ptr);
 		break;
 	case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_CLASS_OF_DEV):
-		adapter_set_class_complete(sba, status);
+		adapter_set_class_complete(&BDADDR(index), status);
 		break;
 	case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_SIMPLE_PAIRING_MODE):
-		btd_event_write_simple_pairing_mode_complete(sba);
+		btd_event_write_simple_pairing_mode_complete(&BDADDR(index));
 		break;
 	case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_SIMPLE_PAIRING_MODE):
 		ptr += sizeof(evt_cmd_complete);
-		btd_event_read_simple_pairing_mode_complete(sba, ptr);
+		btd_event_read_simple_pairing_mode_complete(&BDADDR(index),
+									ptr);
 		break;
 	case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_LOCAL_NAME):
 		ptr += sizeof(evt_cmd_complete);
-		adapter_update_local_name(sba, status, ptr);
+		adapter_update_local_name(&BDADDR(index), status, ptr);
 		break;
 	case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_INQ_RESPONSE_TX_POWER_LEVEL):
 		ptr += sizeof(evt_cmd_complete);
-		adapter_update_tx_power(sba, status, ptr);
+		adapter_update_tx_power(&BDADDR(index), status, ptr);
 		break;
 	};
 }
 
-static inline void remote_name_information(int dev, bdaddr_t *sba, void *ptr)
+static inline void remote_name_information(int index, void *ptr)
 {
 	evt_remote_name_req_complete *evt = ptr;
 	char name[MAX_NAME_LENGTH + 1];
@@ -831,10 +818,10 @@
 	if (!evt->status)
 		memcpy(name, evt->name, MAX_NAME_LENGTH);
 
-	btd_event_remote_name(sba, &evt->bdaddr, evt->status, name);
+	btd_event_remote_name(&BDADDR(index), &evt->bdaddr, evt->status, name);
 }
 
-static inline void remote_version_information(int dev, bdaddr_t *sba, void *ptr)
+static inline void remote_version_information(int index, void *ptr)
 {
 	evt_read_remote_version_complete *evt = ptr;
 	bdaddr_t dba;
@@ -842,34 +829,34 @@
 	if (evt->status)
 		return;
 
-	if (get_bdaddr(dev, sba, btohs(evt->handle), &dba) < 0)
+	if (get_bdaddr(index, btohs(evt->handle), &dba) < 0)
 		return;
 
-	write_version_info(sba, &dba, btohs(evt->manufacturer),
+	write_version_info(&BDADDR(index), &dba, btohs(evt->manufacturer),
 				evt->lmp_ver, btohs(evt->lmp_subver));
 }
 
-static inline void inquiry_result(int dev, bdaddr_t *sba, int plen, void *ptr)
+static inline void inquiry_result(int index, int plen, void *ptr)
 {
 	uint8_t num = *(uint8_t *) ptr++;
 	int i;
 
 	for (i = 0; i < num; i++) {
 		inquiry_info *info = ptr;
-		uint32_t class = info->dev_class[0]
-			| (info->dev_class[1] << 8)
-			| (info->dev_class[2] << 16);
+		uint32_t class = info->dev_class[0] |
+						(info->dev_class[1] << 8) |
+						(info->dev_class[2] << 16);
 
-		btd_event_inquiry_result(sba, &info->bdaddr, class, 0, NULL);
+		btd_event_inquiry_result(&BDADDR(index), &info->bdaddr, class,
+								0, NULL);
 
-		update_lastseen(sba, &info->bdaddr);
+		update_lastseen(&BDADDR(index), &info->bdaddr);
 
 		ptr += INQUIRY_INFO_SIZE;
 	}
 }
 
-static inline void inquiry_result_with_rssi(int dev, bdaddr_t *sba,
-							int plen, void *ptr)
+static inline void inquiry_result_with_rssi(int index, int plen, void *ptr)
 {
 	uint8_t num = *(uint8_t *) ptr++;
 	int i;
@@ -881,13 +868,13 @@
 		for (i = 0; i < num; i++) {
 			inquiry_info_with_rssi_and_pscan_mode *info = ptr;
 			uint32_t class = info->dev_class[0]
-				| (info->dev_class[1] << 8)
-				| (info->dev_class[2] << 16);
+						| (info->dev_class[1] << 8)
+						| (info->dev_class[2] << 16);
 
-			btd_event_inquiry_result(sba, &info->bdaddr,
+			btd_event_inquiry_result(&BDADDR(index), &info->bdaddr,
 						class, info->rssi, NULL);
 
-			update_lastseen(sba, &info->bdaddr);
+			update_lastseen(&BDADDR(index), &info->bdaddr);
 
 			ptr += INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE;
 		}
@@ -895,21 +882,20 @@
 		for (i = 0; i < num; i++) {
 			inquiry_info_with_rssi *info = ptr;
 			uint32_t class = info->dev_class[0]
-				| (info->dev_class[1] << 8)
-				| (info->dev_class[2] << 16);
+						| (info->dev_class[1] << 8)
+						| (info->dev_class[2] << 16);
 
-			btd_event_inquiry_result(sba, &info->bdaddr,
+			btd_event_inquiry_result(&BDADDR(index), &info->bdaddr,
 						class, info->rssi, NULL);
 
-			update_lastseen(sba, &info->bdaddr);
+			update_lastseen(&BDADDR(index), &info->bdaddr);
 
 			ptr += INQUIRY_INFO_WITH_RSSI_SIZE;
 		}
 	}
 }
 
-static inline void extended_inquiry_result(int dev, bdaddr_t *sba,
-							int plen, void *ptr)
+static inline void extended_inquiry_result(int index, int plen, void *ptr)
 {
 	uint8_t num = *(uint8_t *) ptr++;
 	int i;
@@ -917,20 +903,19 @@
 	for (i = 0; i < num; i++) {
 		extended_inquiry_info *info = ptr;
 		uint32_t class = info->dev_class[0]
-			| (info->dev_class[1] << 8)
-			| (info->dev_class[2] << 16);
+					| (info->dev_class[1] << 8)
+					| (info->dev_class[2] << 16);
 
-		btd_event_inquiry_result(sba, &info->bdaddr, class,
+		btd_event_inquiry_result(&BDADDR(index), &info->bdaddr, class,
 						info->rssi, info->data);
 
-		update_lastseen(sba, &info->bdaddr);
+		update_lastseen(&BDADDR(index), &info->bdaddr);
 
 		ptr += EXTENDED_INQUIRY_INFO_SIZE;
 	}
 }
 
-static inline void remote_features_information(int dev, bdaddr_t *sba,
-								void *ptr)
+static inline void remote_features_information(int index, void *ptr)
 {
 	evt_read_remote_features_complete *evt = ptr;
 	bdaddr_t dba;
@@ -938,20 +923,20 @@
 	if (evt->status)
 		return;
 
-	if (get_bdaddr(dev, sba, btohs(evt->handle), &dba) < 0)
+	if (get_bdaddr(index, btohs(evt->handle), &dba) < 0)
 		return;
 
-	write_features_info(sba, &dba, evt->features, NULL);
+	write_features_info(&BDADDR(index), &dba, evt->features, NULL);
 }
 
-static inline void conn_complete(int dev, int dev_id, bdaddr_t *sba, void *ptr)
+static inline void conn_complete(int index, void *ptr)
 {
 	evt_conn_complete *evt = ptr;
 	char filename[PATH_MAX];
 	char local_addr[18], peer_addr[18], *str;
 	struct btd_adapter *adapter;
 
-	adapter = manager_find_adapter(sba);
+	adapter = manager_find_adapter(&BDADDR(index));
 	if (!adapter) {
 		error("Unable to find matching adapter");
 		return;
@@ -960,16 +945,16 @@
 	if (evt->link_type != ACL_LINK)
 		return;
 
-	btd_event_conn_complete(sba, evt->status, btohs(evt->handle),
-				&evt->bdaddr);
+	btd_event_conn_complete(&BDADDR(index), evt->status,
+					btohs(evt->handle), &evt->bdaddr);
 
 	if (evt->status)
 		return;
 
-	update_lastused(sba, &evt->bdaddr);
+	update_lastused(&BDADDR(index), &evt->bdaddr);
 
 	/* check if the remote version needs be requested */
-	ba2str(sba, local_addr);
+	ba2str(&BDADDR(index), local_addr);
 	ba2str(&evt->bdaddr, peer_addr);
 
 	create_name(filename, sizeof(filename), STORAGEDIR, local_addr,
@@ -983,42 +968,43 @@
 		free(str);
 }
 
-static inline void disconn_complete(int dev, bdaddr_t *sba, void *ptr)
+static inline void disconn_complete(int index, void *ptr)
 {
 	evt_disconn_complete *evt = ptr;
 
-	btd_event_disconn_complete(sba, evt->status, btohs(evt->handle),
-					evt->reason);
+	btd_event_disconn_complete(&BDADDR(index), evt->status,
+					btohs(evt->handle), evt->reason);
 }
 
-static inline void auth_complete(int dev, bdaddr_t *sba, void *ptr)
+static inline void auth_complete(int index, void *ptr)
 {
 	evt_auth_complete *evt = ptr;
 	bdaddr_t dba;
 
-	if (get_bdaddr(dev, sba, btohs(evt->handle), &dba) < 0)
+	if (get_bdaddr(index, btohs(evt->handle), &dba) < 0)
 		return;
 
-	btd_event_bonding_process_complete(sba, &dba, evt->status);
+	btd_event_bonding_process_complete(&BDADDR(index), &dba, evt->status);
 }
 
-static inline void simple_pairing_complete(int dev, bdaddr_t *sba, void *ptr)
+static inline void simple_pairing_complete(int index, void *ptr)
 {
 	evt_simple_pairing_complete *evt = ptr;
 
-	btd_event_simple_pairing_complete(sba, &evt->bdaddr, evt->status);
+	btd_event_simple_pairing_complete(&BDADDR(index), &evt->bdaddr,
+								evt->status);
 }
 
-static inline void conn_request(int dev, bdaddr_t *sba, void *ptr)
+static inline void conn_request(int index, void *ptr)
 {
 	evt_conn_request *evt = ptr;
 	uint32_t class = evt->dev_class[0] | (evt->dev_class[1] << 8)
 				| (evt->dev_class[2] << 16);
 
-	btd_event_remote_class(sba, &evt->bdaddr, class);
+	btd_event_remote_class(&BDADDR(index), &evt->bdaddr, class);
 }
 
-static inline void le_metaevent(int dev, bdaddr_t *sba, void *ptr)
+static inline void le_metaevent(int index, void *ptr)
 {
 	evt_le_meta_event *meta = ptr;
 	le_advertising_info *info;
@@ -1035,7 +1021,8 @@
 	for (i = 0; i < num; i++) {
 		/* RSSI is last byte of the advertising report event */
 		rssi = info->data + info->length;
-		btd_event_inquiry_result(sba, &info->bdaddr, 0, *rssi, NULL);
+		btd_event_inquiry_result(&BDADDR(index), &info->bdaddr, 0,
+								*rssi, NULL);
 		info = (le_advertising_info *) (rssi + 1);
 	}
 }
@@ -1059,8 +1046,8 @@
 								gpointer data)
 {
 	unsigned char buf[HCI_MAX_EVENT_SIZE], *ptr = buf;
-	int type, dev, index = GPOINTER_TO_INT(data);
-	struct hci_dev_info dev_info, *di = &dev_info;
+	int type, index = GPOINTER_TO_INT(data);
+	struct hci_dev_info di;
 	size_t len;
 	hci_event_hdr *eh;
 	GIOError err;
@@ -1086,119 +1073,116 @@
 	eh = (hci_event_hdr *) ptr;
 	ptr += HCI_EVENT_HDR_SIZE;
 
-	memset(di, 0, sizeof(*di));
-	if (hci_devinfo(index, di) == 0)
-		bacpy(&BDADDR(index), &di->bdaddr);
-	else
-		bacpy(&di->bdaddr, &BDADDR(index));
+	memset(&di, 0, sizeof(di));
+	if (hci_devinfo(index, &di) == 0) {
+		bacpy(&BDADDR(index), &di.bdaddr);
 
-	if (ignore_device(di))
-		return TRUE;
-
-	dev = g_io_channel_unix_get_fd(chan);
+		if (ignore_device(&di))
+			return TRUE;
+	}
 
 	switch (eh->evt) {
 	case EVT_CMD_STATUS:
-		cmd_status(dev, &di->bdaddr, ptr);
+		cmd_status(index, ptr);
 		break;
 
 	case EVT_CMD_COMPLETE:
-		cmd_complete(di->dev_id, &di->bdaddr, ptr);
+		cmd_complete(index, ptr);
 		break;
 
 	case EVT_REMOTE_NAME_REQ_COMPLETE:
-		remote_name_information(dev, &di->bdaddr, ptr);
+		remote_name_information(index, ptr);
 		break;
 
 	case EVT_READ_REMOTE_VERSION_COMPLETE:
-		remote_version_information(dev, &di->bdaddr, ptr);
+		remote_version_information(index, ptr);
 		break;
 
 	case EVT_READ_REMOTE_FEATURES_COMPLETE:
-		remote_features_information(dev, &di->bdaddr, ptr);
+		remote_features_information(index, ptr);
 		break;
 
 	case EVT_REMOTE_HOST_FEATURES_NOTIFY:
-		remote_features_notify(dev, &di->bdaddr, ptr);
+		remote_features_notify(index, ptr);
 		break;
 
 	case EVT_INQUIRY_COMPLETE:
 		evt = (evt_cmd_status *) ptr;
-		inquiry_complete(&di->bdaddr, evt->status, FALSE);
+		inquiry_complete(&BDADDR(index), evt->status, FALSE);
 		break;
 
 	case EVT_INQUIRY_RESULT:
-		inquiry_result(dev, &di->bdaddr, eh->plen, ptr);
+		inquiry_result(index, eh->plen, ptr);
 		break;
 
 	case EVT_INQUIRY_RESULT_WITH_RSSI:
-		inquiry_result_with_rssi(dev, &di->bdaddr, eh->plen, ptr);
+		inquiry_result_with_rssi(index, eh->plen, ptr);
 		break;
 
 	case EVT_EXTENDED_INQUIRY_RESULT:
-		extended_inquiry_result(dev, &di->bdaddr, eh->plen, ptr);
+		extended_inquiry_result(index, eh->plen, ptr);
 		break;
 
 	case EVT_CONN_COMPLETE:
-		conn_complete(dev, di->dev_id, &di->bdaddr, ptr);
+		conn_complete(index, ptr);
 		break;
 
 	case EVT_DISCONN_COMPLETE:
-		disconn_complete(dev, &di->bdaddr, ptr);
+		disconn_complete(index, ptr);
 		break;
 
 	case EVT_AUTH_COMPLETE:
-		auth_complete(dev, &di->bdaddr, ptr);
+		auth_complete(index, ptr);
 		break;
 
 	case EVT_SIMPLE_PAIRING_COMPLETE:
-		simple_pairing_complete(dev, &di->bdaddr, ptr);
+		simple_pairing_complete(index, ptr);
 		break;
 
 	case EVT_CONN_REQUEST:
-		conn_request(dev, &di->bdaddr, ptr);
+		conn_request(index, ptr);
 		break;
 	case EVT_LE_META_EVENT:
-		le_metaevent(dev, &di->bdaddr, ptr);
+		le_metaevent(index, ptr);
 		break;
 	case EVT_PIN_CODE_REQ:
-		pin_code_request(dev, &di->bdaddr, (bdaddr_t *) ptr);
+		pin_code_request(index, (bdaddr_t *) ptr);
 		break;
 
 	case EVT_LINK_KEY_REQ:
-		link_key_request(dev, &di->bdaddr, (bdaddr_t *) ptr);
+		link_key_request(index, (bdaddr_t *) ptr);
 		break;
 
 	case EVT_LINK_KEY_NOTIFY:
-		link_key_notify(dev, &di->bdaddr, ptr);
+		link_key_notify(index, ptr);
 		break;
 
 	case EVT_RETURN_LINK_KEYS:
-		return_link_keys(dev, &di->bdaddr, ptr);
+		return_link_keys(index, ptr);
 		break;
 
 	case EVT_IO_CAPABILITY_REQUEST:
-		io_capa_request(dev, &di->bdaddr, (bdaddr_t *) ptr);
+		io_capa_request(index, ptr);
 		break;
 
 	case EVT_IO_CAPABILITY_RESPONSE:
-		io_capa_response(dev, &di->bdaddr, ptr);
+		io_capa_response(index, ptr);
 		break;
 
 	case EVT_USER_CONFIRM_REQUEST:
-		user_confirm_request(dev, &di->bdaddr, ptr);
+		user_confirm_request(index, ptr);
 		break;
 
 	case EVT_USER_PASSKEY_REQUEST:
-		user_passkey_request(dev, &di->bdaddr, ptr);
+		user_passkey_request(index, ptr);
 		break;
 
 	case EVT_USER_PASSKEY_NOTIFY:
-		user_passkey_notify(dev, &di->bdaddr, ptr);
+		user_passkey_notify(index, ptr);
 		break;
 
 	case EVT_REMOTE_OOB_DATA_REQUEST:
-		remote_oob_data_request(dev, &di->bdaddr, ptr);
+		remote_oob_data_request(index, ptr);
 		break;
 	}
 
@@ -2137,6 +2121,8 @@
 		pin_code_reply_cp pr;
 		size_t len = strlen(pin);
 
+		PIN_LENGTH(index) = len;
+
 		memset(&pr, 0, sizeof(pr));
 		bacpy(&pr.bdaddr, bdaddr);
 		memcpy(pr.pin_code, pin, len);
diff --git a/src/agent.c b/src/agent.c
index b65a550..2ddfd6e 100644
--- a/src/agent.c
+++ b/src/agent.c
@@ -411,8 +411,6 @@
 		goto done;
 	}
 
-	set_pin_length(&sba, len);
-
 	cb(agent, NULL, pin, req->user_data);
 
 done:
diff --git a/src/event.c b/src/event.c
index 60249f0..8db930b 100644
--- a/src/event.c
+++ b/src/event.c
@@ -116,7 +116,6 @@
 		goto fail;
 
 	adapter_get_address(adapter, &sba);
-	set_pin_length(&sba, strlen(pincode));
 
 	return;
 
diff --git a/src/hcid.h b/src/hcid.h
index caa1d62..48d489a 100644
--- a/src/hcid.h
+++ b/src/hcid.h
@@ -77,8 +77,6 @@
 void btd_start_exit_timer(void);
 void btd_stop_exit_timer(void);
 
-void set_pin_length(bdaddr_t *sba, int length);
-
 gboolean plugin_init(GKeyFile *config, const char *enable,
 							const char *disable);
 void plugin_cleanup(void);