static int nfc_hci_delete_pipe(struct nfc_hci_dev *hdev, u8 pipe) { pr_debug("\n"); return nfc_hci_execute_cmd(hdev, NFC_HCI_ADMIN_PIPE, NFC_HCI_ADM_DELETE_PIPE, &pipe, 1, NULL); }
static u8 nfc_hci_create_pipe(struct nfc_hci_dev *hdev, u8 dest_host, u8 dest_gate, int *result) { struct sk_buff *skb; struct hci_create_pipe_params params; struct hci_create_pipe_resp *resp; u8 pipe; pr_debug("gate=%d\n", dest_gate); params.src_gate = NFC_HCI_ADMIN_GATE; params.dest_host = dest_host; params.dest_gate = dest_gate; *result = nfc_hci_execute_cmd(hdev, NFC_HCI_ADMIN_PIPE, NFC_HCI_ADM_CREATE_PIPE, (u8 *) ¶ms, sizeof(params), &skb); if (*result == 0) { resp = (struct hci_create_pipe_resp *)skb->data; pipe = resp->pipe; kfree_skb(skb); pr_debug("pipe created=%d\n", pipe); return pipe; } else return NFC_HCI_INVALID_PIPE; }
static int nfc_hci_close_pipe(struct nfc_hci_dev *hdev, u8 pipe) { pr_debug("\n"); return nfc_hci_execute_cmd(hdev, pipe, NFC_HCI_ANY_CLOSE_PIPE, NULL, 0, NULL); }
/* * Execute an hci command sent to gate. * skb will contain response data if success. skb can be NULL if you are not * interested by the response. */ int nfc_hci_send_cmd(struct nfc_hci_dev *hdev, u8 gate, u8 cmd, const u8 *param, size_t param_len, struct sk_buff **skb) { u8 pipe; pr_debug("\n"); pipe = hdev->gate2pipe[gate]; if (pipe == NFC_HCI_INVALID_PIPE) return -EADDRNOTAVAIL; return nfc_hci_execute_cmd(hdev, pipe, cmd, param, param_len, skb); }
static int nfc_hci_clear_all_pipes(struct nfc_hci_dev *hdev) { int r; u8 param[2]; /* TODO: Find out what the identity reference data is * and fill param with it. HCI spec 6.1.3.5 */ pr_debug("\n"); r = nfc_hci_execute_cmd(hdev, NFC_HCI_ADMIN_PIPE, NFC_HCI_ADM_CLEAR_ALL_PIPE, param, 2, NULL); return 0; }
static int nfc_hci_clear_all_pipes(struct nfc_hci_dev *hdev) { u8 param[2]; size_t param_len = 2; /* TODO: Find out what the identity reference data is * and fill param with it. HCI spec 6.1.3.5 */ pr_debug("\n"); if (test_bit(NFC_HCI_QUIRK_SHORT_CLEAR, &hdev->quirks)) param_len = 0; return nfc_hci_execute_cmd(hdev, NFC_HCI_ADMIN_PIPE, NFC_HCI_ADM_CLEAR_ALL_PIPE, param, param_len, NULL); }
static int nfc_hci_open_pipe(struct nfc_hci_dev *hdev, u8 pipe) { struct sk_buff *skb; int r; pr_debug("pipe=%d\n", pipe); r = nfc_hci_execute_cmd(hdev, pipe, NFC_HCI_ANY_OPEN_PIPE, NULL, 0, &skb); if (r == 0) { /* dest host other than host controller will send * number of pipes already open on this gate before * execution. The number can be found in skb->data[0] */ kfree_skb(skb); } return r; }