diff options
| author | Samuel Ortiz <sameo@linux.intel.com> | 2013-05-27 09:29:11 -0400 |
|---|---|---|
| committer | Samuel Ortiz <sameo@linux.intel.com> | 2013-06-14 07:44:18 -0400 |
| commit | 322bce957e9b0e30ef7147dae0414ad8f3f558c8 (patch) | |
| tree | 83791eb96720eb16127f7820202935268a09db36 | |
| parent | 31c44464acb8152db5745da700be58ac95ba0a83 (diff) | |
NFC: pn533: Copy NFCID2 through ATR_REQ
When using NFC-F we should copy the NFCID2 buffer that we got from
SENSF_RES through the ATR_REQ NFCID3 buffer. Not doing so violates
NFC Forum digital requirement #189.
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
| -rw-r--r-- | drivers/nfc/pn533.c | 14 | ||||
| -rw-r--r-- | include/net/nfc/nfc.h | 2 | ||||
| -rw-r--r-- | include/uapi/linux/nfc.h | 2 |
3 files changed, 17 insertions, 1 deletions
diff --git a/drivers/nfc/pn533.c b/drivers/nfc/pn533.c index 6bd4f598b3e1..e196bdfcfc30 100644 --- a/drivers/nfc/pn533.c +++ b/drivers/nfc/pn533.c | |||
| @@ -1235,7 +1235,7 @@ static int pn533_target_found_type_a(struct nfc_target *nfc_tgt, u8 *tgt_data, | |||
| 1235 | struct pn533_target_felica { | 1235 | struct pn533_target_felica { |
| 1236 | u8 pol_res; | 1236 | u8 pol_res; |
| 1237 | u8 opcode; | 1237 | u8 opcode; |
| 1238 | u8 nfcid2[8]; | 1238 | u8 nfcid2[NFC_NFCID2_MAXSIZE]; |
| 1239 | u8 pad[8]; | 1239 | u8 pad[8]; |
| 1240 | /* optional */ | 1240 | /* optional */ |
| 1241 | u8 syst_code[]; | 1241 | u8 syst_code[]; |
| @@ -1275,6 +1275,9 @@ static int pn533_target_found_felica(struct nfc_target *nfc_tgt, u8 *tgt_data, | |||
| 1275 | memcpy(nfc_tgt->sensf_res, &tgt_felica->opcode, 9); | 1275 | memcpy(nfc_tgt->sensf_res, &tgt_felica->opcode, 9); |
| 1276 | nfc_tgt->sensf_res_len = 9; | 1276 | nfc_tgt->sensf_res_len = 9; |
| 1277 | 1277 | ||
| 1278 | memcpy(nfc_tgt->nfcid2, tgt_felica->nfcid2, NFC_NFCID2_MAXSIZE); | ||
| 1279 | nfc_tgt->nfcid2_len = NFC_NFCID2_MAXSIZE; | ||
| 1280 | |||
| 1278 | return 0; | 1281 | return 0; |
| 1279 | } | 1282 | } |
| 1280 | 1283 | ||
| @@ -2084,6 +2087,9 @@ static int pn533_dep_link_up(struct nfc_dev *nfc_dev, struct nfc_target *target, | |||
| 2084 | if (comm_mode == NFC_COMM_PASSIVE) | 2087 | if (comm_mode == NFC_COMM_PASSIVE) |
| 2085 | skb_len += PASSIVE_DATA_LEN; | 2088 | skb_len += PASSIVE_DATA_LEN; |
| 2086 | 2089 | ||
| 2090 | if (target && target->nfcid2_len) | ||
| 2091 | skb_len += NFC_NFCID3_MAXSIZE; | ||
| 2092 | |||
| 2087 | skb = pn533_alloc_skb(dev, skb_len); | 2093 | skb = pn533_alloc_skb(dev, skb_len); |
| 2088 | if (!skb) | 2094 | if (!skb) |
| 2089 | return -ENOMEM; | 2095 | return -ENOMEM; |
| @@ -2100,6 +2106,12 @@ static int pn533_dep_link_up(struct nfc_dev *nfc_dev, struct nfc_target *target, | |||
| 2100 | *next |= 1; | 2106 | *next |= 1; |
| 2101 | } | 2107 | } |
| 2102 | 2108 | ||
| 2109 | if (target && target->nfcid2_len) { | ||
| 2110 | memcpy(skb_put(skb, NFC_NFCID3_MAXSIZE), target->nfcid2, | ||
| 2111 | target->nfcid2_len); | ||
| 2112 | *next |= 2; | ||
| 2113 | } | ||
| 2114 | |||
| 2103 | if (gb != NULL && gb_len > 0) { | 2115 | if (gb != NULL && gb_len > 0) { |
| 2104 | memcpy(skb_put(skb, gb_len), gb, gb_len); | 2116 | memcpy(skb_put(skb, gb_len), gb, gb_len); |
| 2105 | *next |= 4; /* We have some Gi */ | 2117 | *next |= 4; /* We have some Gi */ |
diff --git a/include/net/nfc/nfc.h b/include/net/nfc/nfc.h index 3563dbdcaaf2..8fc1784a264d 100644 --- a/include/net/nfc/nfc.h +++ b/include/net/nfc/nfc.h | |||
| @@ -84,6 +84,8 @@ struct nfc_target { | |||
| 84 | u8 sel_res; | 84 | u8 sel_res; |
| 85 | u8 nfcid1_len; | 85 | u8 nfcid1_len; |
| 86 | u8 nfcid1[NFC_NFCID1_MAXSIZE]; | 86 | u8 nfcid1[NFC_NFCID1_MAXSIZE]; |
| 87 | u8 nfcid2_len; | ||
| 88 | u8 nfcid2[NFC_NFCID2_MAXSIZE]; | ||
| 87 | u8 sensb_res_len; | 89 | u8 sensb_res_len; |
| 88 | u8 sensb_res[NFC_SENSB_RES_MAXSIZE]; | 90 | u8 sensb_res[NFC_SENSB_RES_MAXSIZE]; |
| 89 | u8 sensf_res_len; | 91 | u8 sensf_res_len; |
diff --git a/include/uapi/linux/nfc.h b/include/uapi/linux/nfc.h index b6cbd164f146..fb304fb774cc 100644 --- a/include/uapi/linux/nfc.h +++ b/include/uapi/linux/nfc.h | |||
| @@ -164,6 +164,8 @@ enum nfc_sdp_attr { | |||
| 164 | 164 | ||
| 165 | #define NFC_DEVICE_NAME_MAXSIZE 8 | 165 | #define NFC_DEVICE_NAME_MAXSIZE 8 |
| 166 | #define NFC_NFCID1_MAXSIZE 10 | 166 | #define NFC_NFCID1_MAXSIZE 10 |
| 167 | #define NFC_NFCID2_MAXSIZE 8 | ||
| 168 | #define NFC_NFCID3_MAXSIZE 10 | ||
| 167 | #define NFC_SENSB_RES_MAXSIZE 12 | 169 | #define NFC_SENSB_RES_MAXSIZE 12 |
| 168 | #define NFC_SENSF_RES_MAXSIZE 18 | 170 | #define NFC_SENSF_RES_MAXSIZE 18 |
| 169 | #define NFC_GB_MAXSIZE 48 | 171 | #define NFC_GB_MAXSIZE 48 |
