1/*
2 *  The NFC Controller Interface is the communication protocol between an
3 *  NFC Controller (NFCC) and a Device Host (DH).
4 *
5 *  Copyright (C) 2011 Texas Instruments, Inc.
6 *
7 *  Written by Ilan Elias <ilane@ti.com>
8 *
9 *  Acknowledgements:
10 *  This file is based on lib.c, which was written
11 *  by Maxim Krasnyansky.
12 *
13 *  This program is free software; you can redistribute it and/or modify
14 *  it under the terms of the GNU General Public License version 2
15 *  as published by the Free Software Foundation
16 *
17 *  This program is distributed in the hope that it will be useful,
18 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
19 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20 *  GNU General Public License for more details.
21 *
22 *  You should have received a copy of the GNU General Public License
23 *  along with this program; if not, see <http://www.gnu.org/licenses/>.
24 *
25 */
26
27#include <linux/module.h>
28#include <linux/kernel.h>
29#include <linux/types.h>
30#include <linux/errno.h>
31
32#include <net/nfc/nci.h>
33#include <net/nfc/nci_core.h>
34
35/* NCI status codes to Unix errno mapping */
36int nci_to_errno(__u8 code)
37{
38	switch (code) {
39	case NCI_STATUS_OK:
40		return 0;
41
42	case NCI_STATUS_REJECTED:
43		return -EBUSY;
44
45	case NCI_STATUS_RF_FRAME_CORRUPTED:
46		return -EBADMSG;
47
48	case NCI_STATUS_NOT_INITIALIZED:
49		return -EHOSTDOWN;
50
51	case NCI_STATUS_SYNTAX_ERROR:
52	case NCI_STATUS_SEMANTIC_ERROR:
53	case NCI_STATUS_INVALID_PARAM:
54	case NCI_STATUS_RF_PROTOCOL_ERROR:
55	case NCI_STATUS_NFCEE_PROTOCOL_ERROR:
56		return -EPROTO;
57
58	case NCI_STATUS_UNKNOWN_GID:
59	case NCI_STATUS_UNKNOWN_OID:
60		return -EBADRQC;
61
62	case NCI_STATUS_MESSAGE_SIZE_EXCEEDED:
63		return -EMSGSIZE;
64
65	case NCI_STATUS_DISCOVERY_ALREADY_STARTED:
66		return -EALREADY;
67
68	case NCI_STATUS_DISCOVERY_TARGET_ACTIVATION_FAILED:
69	case NCI_STATUS_NFCEE_INTERFACE_ACTIVATION_FAILED:
70		return -ECONNREFUSED;
71
72	case NCI_STATUS_RF_TRANSMISSION_ERROR:
73	case NCI_STATUS_NFCEE_TRANSMISSION_ERROR:
74		return -ECOMM;
75
76	case NCI_STATUS_RF_TIMEOUT_ERROR:
77	case NCI_STATUS_NFCEE_TIMEOUT_ERROR:
78		return -ETIMEDOUT;
79
80	case NCI_STATUS_FAILED:
81	default:
82		return -ENOSYS;
83	}
84}
85EXPORT_SYMBOL(nci_to_errno);
86