xref: /openbmc/linux/net/nfc/nci/lib.c (revision 75bf465f0bc33e9b776a46d6a1b9b990f5fb7c37)
1*caab277bSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
26a2968aaSIlan Elias /*
36a2968aaSIlan Elias  *  The NFC Controller Interface is the communication protocol between an
46a2968aaSIlan Elias  *  NFC Controller (NFCC) and a Device Host (DH).
56a2968aaSIlan Elias  *
66a2968aaSIlan Elias  *  Copyright (C) 2011 Texas Instruments, Inc.
76a2968aaSIlan Elias  *
86a2968aaSIlan Elias  *  Written by Ilan Elias <ilane@ti.com>
96a2968aaSIlan Elias  *
106a2968aaSIlan Elias  *  Acknowledgements:
116a2968aaSIlan Elias  *  This file is based on lib.c, which was written
126a2968aaSIlan Elias  *  by Maxim Krasnyansky.
136a2968aaSIlan Elias  */
146a2968aaSIlan Elias 
156a2968aaSIlan Elias #include <linux/module.h>
166a2968aaSIlan Elias #include <linux/kernel.h>
176a2968aaSIlan Elias #include <linux/types.h>
186a2968aaSIlan Elias #include <linux/errno.h>
196a2968aaSIlan Elias 
206a2968aaSIlan Elias #include <net/nfc/nci.h>
21502b4240SH Hartley Sweeten #include <net/nfc/nci_core.h>
226a2968aaSIlan Elias 
236a2968aaSIlan Elias /* NCI status codes to Unix errno mapping */
nci_to_errno(__u8 code)246a2968aaSIlan Elias int nci_to_errno(__u8 code)
256a2968aaSIlan Elias {
266a2968aaSIlan Elias 	switch (code) {
276a2968aaSIlan Elias 	case NCI_STATUS_OK:
286a2968aaSIlan Elias 		return 0;
296a2968aaSIlan Elias 
306a2968aaSIlan Elias 	case NCI_STATUS_REJECTED:
316a2968aaSIlan Elias 		return -EBUSY;
326a2968aaSIlan Elias 
33e8c0dacdSIlan Elias 	case NCI_STATUS_RF_FRAME_CORRUPTED:
346a2968aaSIlan Elias 		return -EBADMSG;
356a2968aaSIlan Elias 
366a2968aaSIlan Elias 	case NCI_STATUS_NOT_INITIALIZED:
376a2968aaSIlan Elias 		return -EHOSTDOWN;
386a2968aaSIlan Elias 
396a2968aaSIlan Elias 	case NCI_STATUS_SYNTAX_ERROR:
406a2968aaSIlan Elias 	case NCI_STATUS_SEMANTIC_ERROR:
416a2968aaSIlan Elias 	case NCI_STATUS_INVALID_PARAM:
426a2968aaSIlan Elias 	case NCI_STATUS_RF_PROTOCOL_ERROR:
436a2968aaSIlan Elias 	case NCI_STATUS_NFCEE_PROTOCOL_ERROR:
446a2968aaSIlan Elias 		return -EPROTO;
456a2968aaSIlan Elias 
466a2968aaSIlan Elias 	case NCI_STATUS_UNKNOWN_GID:
476a2968aaSIlan Elias 	case NCI_STATUS_UNKNOWN_OID:
486a2968aaSIlan Elias 		return -EBADRQC;
496a2968aaSIlan Elias 
506a2968aaSIlan Elias 	case NCI_STATUS_MESSAGE_SIZE_EXCEEDED:
516a2968aaSIlan Elias 		return -EMSGSIZE;
526a2968aaSIlan Elias 
536a2968aaSIlan Elias 	case NCI_STATUS_DISCOVERY_ALREADY_STARTED:
546a2968aaSIlan Elias 		return -EALREADY;
556a2968aaSIlan Elias 
566a2968aaSIlan Elias 	case NCI_STATUS_DISCOVERY_TARGET_ACTIVATION_FAILED:
576a2968aaSIlan Elias 	case NCI_STATUS_NFCEE_INTERFACE_ACTIVATION_FAILED:
586a2968aaSIlan Elias 		return -ECONNREFUSED;
596a2968aaSIlan Elias 
606a2968aaSIlan Elias 	case NCI_STATUS_RF_TRANSMISSION_ERROR:
616a2968aaSIlan Elias 	case NCI_STATUS_NFCEE_TRANSMISSION_ERROR:
626a2968aaSIlan Elias 		return -ECOMM;
636a2968aaSIlan Elias 
646a2968aaSIlan Elias 	case NCI_STATUS_RF_TIMEOUT_ERROR:
656a2968aaSIlan Elias 	case NCI_STATUS_NFCEE_TIMEOUT_ERROR:
666a2968aaSIlan Elias 		return -ETIMEDOUT;
676a2968aaSIlan Elias 
686a2968aaSIlan Elias 	case NCI_STATUS_FAILED:
696a2968aaSIlan Elias 	default:
706a2968aaSIlan Elias 		return -ENOSYS;
716a2968aaSIlan Elias 	}
726a2968aaSIlan Elias }
736a2968aaSIlan Elias EXPORT_SYMBOL(nci_to_errno);
74