Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 315291
b: refs/heads/master
c: a10d595
h: refs/heads/master
i:
  315289: 986e134
  315287: 2251b1f
v: v3
  • Loading branch information
Eric Lapuyade authored and John W. Linville committed Jul 9, 2012
1 parent c56a1fa commit 5862cce
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 38 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: eae202aa2083eb6f7fdb686e2c42d7db4ef63632
refs/heads/master: a10d595b1074d04446f77161eea165e5809e163c
31 changes: 18 additions & 13 deletions trunk/drivers/nfc/pn544_hci.c
Original file line number Diff line number Diff line change
Expand Up @@ -108,16 +108,22 @@ enum pn544_state {

#define PN544_NFC_WI_MGMT_GATE 0xA1

static u8 pn544_custom_gates[] = {
PN544_SYS_MGMT_GATE,
PN544_SWP_MGMT_GATE,
PN544_POLLING_LOOP_MGMT_GATE,
PN544_NFC_WI_MGMT_GATE,
PN544_RF_READER_F_GATE,
PN544_RF_READER_JEWEL_GATE,
PN544_RF_READER_ISO15693_GATE,
PN544_RF_READER_NFCIP1_INITIATOR_GATE,
PN544_RF_READER_NFCIP1_TARGET_GATE
static struct nfc_hci_gate pn544_gates[] = {
{NFC_HCI_ADMIN_GATE, NFC_HCI_INVALID_PIPE},
{NFC_HCI_LOOPBACK_GATE, NFC_HCI_INVALID_PIPE},
{NFC_HCI_ID_MGMT_GATE, NFC_HCI_INVALID_PIPE},
{NFC_HCI_LINK_MGMT_GATE, NFC_HCI_INVALID_PIPE},
{NFC_HCI_RF_READER_B_GATE, NFC_HCI_INVALID_PIPE},
{NFC_HCI_RF_READER_A_GATE, NFC_HCI_INVALID_PIPE},
{PN544_SYS_MGMT_GATE, NFC_HCI_INVALID_PIPE},
{PN544_SWP_MGMT_GATE, NFC_HCI_INVALID_PIPE},
{PN544_POLLING_LOOP_MGMT_GATE, NFC_HCI_INVALID_PIPE},
{PN544_NFC_WI_MGMT_GATE, NFC_HCI_INVALID_PIPE},
{PN544_RF_READER_F_GATE, NFC_HCI_INVALID_PIPE},
{PN544_RF_READER_JEWEL_GATE, NFC_HCI_INVALID_PIPE},
{PN544_RF_READER_ISO15693_GATE, NFC_HCI_INVALID_PIPE},
{PN544_RF_READER_NFCIP1_INITIATOR_GATE, NFC_HCI_INVALID_PIPE},
{PN544_RF_READER_NFCIP1_TARGET_GATE, NFC_HCI_INVALID_PIPE}
};

/* Largest headroom needed for outgoing custom commands */
Expand Down Expand Up @@ -849,10 +855,9 @@ static int __devinit pn544_hci_probe(struct i2c_client *client,
goto err_rti;
}

init_data.gate_count = ARRAY_SIZE(pn544_custom_gates);
init_data.gate_count = ARRAY_SIZE(pn544_gates);

memcpy(init_data.gates, pn544_custom_gates,
ARRAY_SIZE(pn544_custom_gates));
memcpy(init_data.gates, pn544_gates, sizeof(pn544_gates));

/*
* TODO: Session id must include the driver name + some bus addr
Expand Down
17 changes: 14 additions & 3 deletions trunk/include/net/nfc/hci.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,20 @@ struct nfc_hci_ops {
struct nfc_target *target);
};

#define NFC_HCI_MAX_CUSTOM_GATES 15
/* Pipes */
#define NFC_HCI_INVALID_PIPE 0x80
#define NFC_HCI_LINK_MGMT_PIPE 0x00
#define NFC_HCI_ADMIN_PIPE 0x01

struct nfc_hci_gate {
u8 gate;
u8 pipe;
};

#define NFC_HCI_MAX_CUSTOM_GATES 50
struct nfc_hci_init_data {
u8 gate_count;
u8 gates[NFC_HCI_MAX_CUSTOM_GATES];
struct nfc_hci_gate gates[NFC_HCI_MAX_CUSTOM_GATES];
char session_id[9];
};

Expand Down Expand Up @@ -182,7 +192,8 @@ void nfc_hci_event_received(struct nfc_hci_dev *hdev, u8 pipe, u8 event,
void nfc_hci_recv_frame(struct nfc_hci_dev *hdev, struct sk_buff *skb);

/* connecting to gates and sending hci instructions */
int nfc_hci_connect_gate(struct nfc_hci_dev *hdev, u8 dest_host, u8 dest_gate);
int nfc_hci_connect_gate(struct nfc_hci_dev *hdev, u8 dest_host, u8 dest_gate,
u8 pipe);
int nfc_hci_disconnect_gate(struct nfc_hci_dev *hdev, u8 gate);
int nfc_hci_disconnect_all_gates(struct nfc_hci_dev *hdev);
int nfc_hci_get_param(struct nfc_hci_dev *hdev, u8 gate, u8 idx,
Expand Down
8 changes: 6 additions & 2 deletions trunk/net/nfc/hci/command.c
Original file line number Diff line number Diff line change
Expand Up @@ -299,9 +299,9 @@ int nfc_hci_disconnect_all_gates(struct nfc_hci_dev *hdev)
}
EXPORT_SYMBOL(nfc_hci_disconnect_all_gates);

int nfc_hci_connect_gate(struct nfc_hci_dev *hdev, u8 dest_host, u8 dest_gate)
int nfc_hci_connect_gate(struct nfc_hci_dev *hdev, u8 dest_host, u8 dest_gate,
u8 pipe)
{
u8 pipe = NFC_HCI_INVALID_PIPE;
bool pipe_created = false;
int r;

Expand All @@ -310,6 +310,9 @@ int nfc_hci_connect_gate(struct nfc_hci_dev *hdev, u8 dest_host, u8 dest_gate)
if (hdev->gate2pipe[dest_gate] != NFC_HCI_INVALID_PIPE)
return -EADDRINUSE;

if (pipe != NFC_HCI_INVALID_PIPE)
goto pipe_is_open;

switch (dest_gate) {
case NFC_HCI_LINK_MGMT_GATE:
pipe = NFC_HCI_LINK_MGMT_PIPE;
Expand All @@ -335,6 +338,7 @@ int nfc_hci_connect_gate(struct nfc_hci_dev *hdev, u8 dest_host, u8 dest_gate)
return r;
}

pipe_is_open:
hdev->gate2pipe[dest_gate] = pipe;

return 0;
Expand Down
23 changes: 9 additions & 14 deletions trunk/net/nfc/hci/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -315,15 +315,15 @@ static void nfc_hci_cmd_timeout(unsigned long data)
}

static int hci_dev_connect_gates(struct nfc_hci_dev *hdev, u8 gate_count,
u8 gates[])
struct nfc_hci_gate *gates)
{
int r;
u8 *p = gates;
while (gate_count--) {
r = nfc_hci_connect_gate(hdev, NFC_HCI_HOST_CONTROLLER_ID, *p);
r = nfc_hci_connect_gate(hdev, NFC_HCI_HOST_CONTROLLER_ID,
gates->gate, gates->pipe);
if (r < 0)
return r;
p++;
gates++;
}

return 0;
Expand All @@ -333,14 +333,13 @@ static int hci_dev_session_init(struct nfc_hci_dev *hdev)
{
struct sk_buff *skb = NULL;
int r;
u8 hci_gates[] = { /* NFC_HCI_ADMIN_GATE MUST be first */
NFC_HCI_ADMIN_GATE, NFC_HCI_LOOPBACK_GATE,
NFC_HCI_ID_MGMT_GATE, NFC_HCI_LINK_MGMT_GATE,
NFC_HCI_RF_READER_B_GATE, NFC_HCI_RF_READER_A_GATE
};

if (hdev->init_data.gates[0].gate != NFC_HCI_ADMIN_GATE)
return -EPROTO;

r = nfc_hci_connect_gate(hdev, NFC_HCI_HOST_CONTROLLER_ID,
NFC_HCI_ADMIN_GATE);
hdev->init_data.gates[0].gate,
hdev->init_data.gates[0].pipe);
if (r < 0)
goto exit;

Expand Down Expand Up @@ -368,10 +367,6 @@ static int hci_dev_session_init(struct nfc_hci_dev *hdev)
if (r < 0)
goto exit;

r = hci_dev_connect_gates(hdev, sizeof(hci_gates), hci_gates);
if (r < 0)
goto disconnect_all;

r = hci_dev_connect_gates(hdev, hdev->init_data.gate_count,
hdev->init_data.gates);
if (r < 0)
Expand Down
5 changes: 0 additions & 5 deletions trunk/net/nfc/hci/hci.h
Original file line number Diff line number Diff line change
Expand Up @@ -132,9 +132,4 @@ void nfc_hci_hcp_message_rx(struct nfc_hci_dev *hdev, u8 pipe, u8 type,
#define NFC_HCI_ANY_E_REG_ACCESS_DENIED 0x0a
#define NFC_HCI_ANY_E_PIPE_ACCESS_DENIED 0x0b

/* Pipes */
#define NFC_HCI_INVALID_PIPE 0x80
#define NFC_HCI_LINK_MGMT_PIPE 0x00
#define NFC_HCI_ADMIN_PIPE 0x01

#endif /* __LOCAL_HCI_H */

0 comments on commit 5862cce

Please sign in to comment.