xref: /OK3568_Linux_fs/kernel/net/nfc/nci/lib.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0-only
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  *  The NFC Controller Interface is the communication protocol between an
4*4882a593Smuzhiyun  *  NFC Controller (NFCC) and a Device Host (DH).
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  *  Copyright (C) 2011 Texas Instruments, Inc.
7*4882a593Smuzhiyun  *
8*4882a593Smuzhiyun  *  Written by Ilan Elias <ilane@ti.com>
9*4882a593Smuzhiyun  *
10*4882a593Smuzhiyun  *  Acknowledgements:
11*4882a593Smuzhiyun  *  This file is based on lib.c, which was written
12*4882a593Smuzhiyun  *  by Maxim Krasnyansky.
13*4882a593Smuzhiyun  */
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun #include <linux/module.h>
16*4882a593Smuzhiyun #include <linux/kernel.h>
17*4882a593Smuzhiyun #include <linux/types.h>
18*4882a593Smuzhiyun #include <linux/errno.h>
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #include <net/nfc/nci.h>
21*4882a593Smuzhiyun #include <net/nfc/nci_core.h>
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun /* NCI status codes to Unix errno mapping */
nci_to_errno(__u8 code)24*4882a593Smuzhiyun int nci_to_errno(__u8 code)
25*4882a593Smuzhiyun {
26*4882a593Smuzhiyun 	switch (code) {
27*4882a593Smuzhiyun 	case NCI_STATUS_OK:
28*4882a593Smuzhiyun 		return 0;
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun 	case NCI_STATUS_REJECTED:
31*4882a593Smuzhiyun 		return -EBUSY;
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun 	case NCI_STATUS_RF_FRAME_CORRUPTED:
34*4882a593Smuzhiyun 		return -EBADMSG;
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun 	case NCI_STATUS_NOT_INITIALIZED:
37*4882a593Smuzhiyun 		return -EHOSTDOWN;
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun 	case NCI_STATUS_SYNTAX_ERROR:
40*4882a593Smuzhiyun 	case NCI_STATUS_SEMANTIC_ERROR:
41*4882a593Smuzhiyun 	case NCI_STATUS_INVALID_PARAM:
42*4882a593Smuzhiyun 	case NCI_STATUS_RF_PROTOCOL_ERROR:
43*4882a593Smuzhiyun 	case NCI_STATUS_NFCEE_PROTOCOL_ERROR:
44*4882a593Smuzhiyun 		return -EPROTO;
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun 	case NCI_STATUS_UNKNOWN_GID:
47*4882a593Smuzhiyun 	case NCI_STATUS_UNKNOWN_OID:
48*4882a593Smuzhiyun 		return -EBADRQC;
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun 	case NCI_STATUS_MESSAGE_SIZE_EXCEEDED:
51*4882a593Smuzhiyun 		return -EMSGSIZE;
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun 	case NCI_STATUS_DISCOVERY_ALREADY_STARTED:
54*4882a593Smuzhiyun 		return -EALREADY;
55*4882a593Smuzhiyun 
56*4882a593Smuzhiyun 	case NCI_STATUS_DISCOVERY_TARGET_ACTIVATION_FAILED:
57*4882a593Smuzhiyun 	case NCI_STATUS_NFCEE_INTERFACE_ACTIVATION_FAILED:
58*4882a593Smuzhiyun 		return -ECONNREFUSED;
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun 	case NCI_STATUS_RF_TRANSMISSION_ERROR:
61*4882a593Smuzhiyun 	case NCI_STATUS_NFCEE_TRANSMISSION_ERROR:
62*4882a593Smuzhiyun 		return -ECOMM;
63*4882a593Smuzhiyun 
64*4882a593Smuzhiyun 	case NCI_STATUS_RF_TIMEOUT_ERROR:
65*4882a593Smuzhiyun 	case NCI_STATUS_NFCEE_TIMEOUT_ERROR:
66*4882a593Smuzhiyun 		return -ETIMEDOUT;
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun 	case NCI_STATUS_FAILED:
69*4882a593Smuzhiyun 	default:
70*4882a593Smuzhiyun 		return -ENOSYS;
71*4882a593Smuzhiyun 	}
72*4882a593Smuzhiyun }
73*4882a593Smuzhiyun EXPORT_SYMBOL(nci_to_errno);
74