Пример #1
0
/* Generate internal stack event */
void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data)
{
	struct hci_event_hdr *hdr;
	struct hci_ev_stack_internal *ev;
	struct sk_buff *skb;

	skb = bt_skb_alloc(HCI_EVENT_HDR_SIZE + sizeof(*ev) + dlen, GFP_ATOMIC);
	if (!skb)
		return;

	hdr = (void *) skb_put(skb, HCI_EVENT_HDR_SIZE);
	hdr->evt  = HCI_EV_STACK_INTERNAL;
	hdr->plen = sizeof(*ev) + dlen;

	ev  = (void *) skb_put(skb, sizeof(*ev) + dlen);
	ev->type = type;
	memcpy(ev->data, data, dlen);

	bt_cb(skb)->incoming = 1;
	__net_timestamp(skb);

	bt_cb(skb)->pkt_type = HCI_EVENT_PKT;
	skb->dev = (void *) hdev;
	hci_send_to_sock(hdev, skb);
	kfree_skb(skb);
}
Пример #2
0
/* General internal stack event */
void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data)
{
	hci_event_hdr *eh;
	evt_stack_internal *si;
	struct sk_buff *skb;
	int size;
	void *ptr;

	size = HCI_EVENT_HDR_SIZE + EVT_STACK_INTERNAL_SIZE + dlen;
	skb  = bluez_skb_alloc(size, GFP_ATOMIC);
	if (!skb)
		return;

	ptr = skb_put(skb, size);

	eh = ptr;
       	eh->evt  = EVT_STACK_INTERNAL;
	eh->plen = EVT_STACK_INTERNAL_SIZE + dlen;
	ptr += HCI_EVENT_HDR_SIZE;

	si = ptr;
	si->type = type;
	memcpy(si->data, data, dlen);
	
	skb->pkt_type = HCI_EVENT_PKT;
	skb->dev = (void *) hdev;
	hci_send_to_sock(hdev, skb);
	kfree_skb(skb);
}