mirror of
https://git.proxmox.com/git/qemu
synced 2025-08-15 21:13:50 +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
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;
|
*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,
|
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,
|
static inline uint8_t *bt_hci_event_start(struct bt_hci_s *hci,
|
||||||
int evt, int len)
|
int evt, int len)
|
||||||
{
|
{
|
||||||
@ -2176,6 +2194,36 @@ struct HCIInfo *bt_new_hci(struct bt_scatternet_s *net)
|
|||||||
return &s->info;
|
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)
|
static void bt_hci_done(struct HCIInfo *info)
|
||||||
{
|
{
|
||||||
struct bt_hci_s *hci = hci_from_info(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 */
|
uint16_t clkoff; /* Note: Always little-endian */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extern struct HCIInfo null_hci;
|
||||||
/* bt.c */
|
/* bt.c */
|
||||||
void bt_device_init(struct bt_device_s *dev, struct bt_scatternet_s *net);
|
void bt_device_init(struct bt_device_s *dev, struct bt_scatternet_s *net);
|
||||||
void bt_device_done(struct bt_device_s *dev);
|
void bt_device_done(struct bt_device_s *dev);
|
||||||
|
struct bt_scatternet_s *qemu_find_bt_vlan(int id);
|
||||||
|
|
||||||
/* bt-hci.c */
|
/* bt-hci.c */
|
||||||
struct HCIInfo *bt_new_hci(struct bt_scatternet_s *net);
|
struct HCIInfo *bt_new_hci(struct bt_scatternet_s *net);
|
||||||
|
struct HCIInfo *hci_init(const char *str);
|
||||||
|
|
||||||
/* bt-vhci.c */
|
/* bt-vhci.c */
|
||||||
void bt_vhci_init(struct HCIInfo *info);
|
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 int cur_hci;
|
||||||
static struct HCIInfo *hci_table[MAX_NICS];
|
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)
|
struct HCIInfo *qemu_next_hci(void)
|
||||||
{
|
{
|
||||||
if (cur_hci == nb_hcis)
|
if (cur_hci == nb_hcis)
|
||||||
@ -890,36 +851,6 @@ struct HCIInfo *qemu_next_hci(void)
|
|||||||
return hci_table[cur_hci++];
|
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)
|
static int bt_hci_parse(const char *str)
|
||||||
{
|
{
|
||||||
struct HCIInfo *hci;
|
struct HCIInfo *hci;
|
||||||
|
Loading…
Reference in New Issue
Block a user