mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
Preparation for usb-bt-dongle conditional build
To allow disable usb-bt-dongle device using CONFIG_BLUETOOTH option, some of functions in vl.c file has to be made accessible in dev-bluetooth.c. This is pure code moving. Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
c60174e847
commit
644e1a8a34
4 changed files with 74 additions and 69 deletions
23
hw/bt/core.c
23
hw/bt/core.c
|
@ -119,3 +119,26 @@ void bt_device_done(struct bt_device_s *dev)
|
|||
|
||||
*p = dev->next;
|
||||
}
|
||||
|
||||
static struct bt_vlan_s {
|
||||
struct bt_scatternet_s net;
|
||||
int id;
|
||||
struct bt_vlan_s *next;
|
||||
} *first_bt_vlan;
|
||||
|
||||
/* find or alloc a new bluetooth "VLAN" */
|
||||
struct bt_scatternet_s *qemu_find_bt_vlan(int id)
|
||||
{
|
||||
struct bt_vlan_s **pvlan, *vlan;
|
||||
for (vlan = first_bt_vlan; vlan != NULL; vlan = vlan->next) {
|
||||
if (vlan->id == id)
|
||||
return &vlan->net;
|
||||
}
|
||||
vlan = g_malloc0(sizeof(struct bt_vlan_s));
|
||||
vlan->id = id;
|
||||
pvlan = &first_bt_vlan;
|
||||
while (*pvlan != NULL)
|
||||
pvlan = &(*pvlan)->next;
|
||||
*pvlan = vlan;
|
||||
return &vlan->net;
|
||||
}
|
||||
|
|
48
hw/bt/hci.c
48
hw/bt/hci.c
|
@ -429,6 +429,24 @@ static const uint8_t bt_event_reserved_mask[8] = {
|
|||
0xff, 0x9f, 0xfb, 0xff, 0x07, 0x18, 0x00, 0x00,
|
||||
};
|
||||
|
||||
|
||||
static void null_hci_send(struct HCIInfo *hci, const uint8_t *data, int len)
|
||||
{
|
||||
}
|
||||
|
||||
static int null_hci_addr_set(struct HCIInfo *hci, const uint8_t *bd_addr)
|
||||
{
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
struct HCIInfo null_hci = {
|
||||
.cmd_send = null_hci_send,
|
||||
.sco_send = null_hci_send,
|
||||
.acl_send = null_hci_send,
|
||||
.bdaddr_set = null_hci_addr_set,
|
||||
};
|
||||
|
||||
|
||||
static inline uint8_t *bt_hci_event_start(struct bt_hci_s *hci,
|
||||
int evt, int len)
|
||||
{
|
||||
|
@ -2176,6 +2194,36 @@ struct HCIInfo *bt_new_hci(struct bt_scatternet_s *net)
|
|||
return &s->info;
|
||||
}
|
||||
|
||||
struct HCIInfo *hci_init(const char *str)
|
||||
{
|
||||
char *endp;
|
||||
struct bt_scatternet_s *vlan = 0;
|
||||
|
||||
if (!strcmp(str, "null"))
|
||||
/* null */
|
||||
return &null_hci;
|
||||
else if (!strncmp(str, "host", 4) && (str[4] == '\0' || str[4] == ':'))
|
||||
/* host[:hciN] */
|
||||
return bt_host_hci(str[4] ? str + 5 : "hci0");
|
||||
else if (!strncmp(str, "hci", 3)) {
|
||||
/* hci[,vlan=n] */
|
||||
if (str[3]) {
|
||||
if (!strncmp(str + 3, ",vlan=", 6)) {
|
||||
vlan = qemu_find_bt_vlan(strtol(str + 9, &endp, 0));
|
||||
if (*endp)
|
||||
vlan = 0;
|
||||
}
|
||||
} else
|
||||
vlan = qemu_find_bt_vlan(0);
|
||||
if (vlan)
|
||||
return bt_new_hci(vlan);
|
||||
}
|
||||
|
||||
fprintf(stderr, "qemu: Unknown bluetooth HCI `%s'.\n", str);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void bt_hci_done(struct HCIInfo *info)
|
||||
{
|
||||
struct bt_hci_s *hci = hci_from_info(info);
|
||||
|
|
|
@ -108,12 +108,15 @@ struct bt_device_s {
|
|||
uint16_t clkoff; /* Note: Always little-endian */
|
||||
};
|
||||
|
||||
extern struct HCIInfo null_hci;
|
||||
/* bt.c */
|
||||
void bt_device_init(struct bt_device_s *dev, struct bt_scatternet_s *net);
|
||||
void bt_device_done(struct bt_device_s *dev);
|
||||
struct bt_scatternet_s *qemu_find_bt_vlan(int id);
|
||||
|
||||
/* bt-hci.c */
|
||||
struct HCIInfo *bt_new_hci(struct bt_scatternet_s *net);
|
||||
struct HCIInfo *hci_init(const char *str);
|
||||
|
||||
/* bt-vhci.c */
|
||||
void bt_vhci_init(struct HCIInfo *info);
|
||||
|
|
69
vl.c
69
vl.c
|
@ -843,45 +843,6 @@ static int nb_hcis;
|
|||
static int cur_hci;
|
||||
static struct HCIInfo *hci_table[MAX_NICS];
|
||||
|
||||
static struct bt_vlan_s {
|
||||
struct bt_scatternet_s net;
|
||||
int id;
|
||||
struct bt_vlan_s *next;
|
||||
} *first_bt_vlan;
|
||||
|
||||
/* find or alloc a new bluetooth "VLAN" */
|
||||
static struct bt_scatternet_s *qemu_find_bt_vlan(int id)
|
||||
{
|
||||
struct bt_vlan_s **pvlan, *vlan;
|
||||
for (vlan = first_bt_vlan; vlan != NULL; vlan = vlan->next) {
|
||||
if (vlan->id == id)
|
||||
return &vlan->net;
|
||||
}
|
||||
vlan = g_malloc0(sizeof(struct bt_vlan_s));
|
||||
vlan->id = id;
|
||||
pvlan = &first_bt_vlan;
|
||||
while (*pvlan != NULL)
|
||||
pvlan = &(*pvlan)->next;
|
||||
*pvlan = vlan;
|
||||
return &vlan->net;
|
||||
}
|
||||
|
||||
static void null_hci_send(struct HCIInfo *hci, const uint8_t *data, int len)
|
||||
{
|
||||
}
|
||||
|
||||
static int null_hci_addr_set(struct HCIInfo *hci, const uint8_t *bd_addr)
|
||||
{
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
static struct HCIInfo null_hci = {
|
||||
.cmd_send = null_hci_send,
|
||||
.sco_send = null_hci_send,
|
||||
.acl_send = null_hci_send,
|
||||
.bdaddr_set = null_hci_addr_set,
|
||||
};
|
||||
|
||||
struct HCIInfo *qemu_next_hci(void)
|
||||
{
|
||||
if (cur_hci == nb_hcis)
|
||||
|
@ -890,36 +851,6 @@ struct HCIInfo *qemu_next_hci(void)
|
|||
return hci_table[cur_hci++];
|
||||
}
|
||||
|
||||
static struct HCIInfo *hci_init(const char *str)
|
||||
{
|
||||
char *endp;
|
||||
struct bt_scatternet_s *vlan = 0;
|
||||
|
||||
if (!strcmp(str, "null"))
|
||||
/* null */
|
||||
return &null_hci;
|
||||
else if (!strncmp(str, "host", 4) && (str[4] == '\0' || str[4] == ':'))
|
||||
/* host[:hciN] */
|
||||
return bt_host_hci(str[4] ? str + 5 : "hci0");
|
||||
else if (!strncmp(str, "hci", 3)) {
|
||||
/* hci[,vlan=n] */
|
||||
if (str[3]) {
|
||||
if (!strncmp(str + 3, ",vlan=", 6)) {
|
||||
vlan = qemu_find_bt_vlan(strtol(str + 9, &endp, 0));
|
||||
if (*endp)
|
||||
vlan = 0;
|
||||
}
|
||||
} else
|
||||
vlan = qemu_find_bt_vlan(0);
|
||||
if (vlan)
|
||||
return bt_new_hci(vlan);
|
||||
}
|
||||
|
||||
fprintf(stderr, "qemu: Unknown bluetooth HCI `%s'.\n", str);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bt_hci_parse(const char *str)
|
||||
{
|
||||
struct HCIInfo *hci;
|
||||
|
|
Loading…
Reference in a new issue