1/*
2 * NDIS Error codes
3 *
4 * Copyright (C) 2015, Broadcom Corporation
5 * All Rights Reserved.
6 *
7 * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom Corporation;
8 * the contents of this file may not be disclosed to third parties, copied
9 * or duplicated in any form, in whole or in part, without the prior
10 * written permission of Broadcom Corporation.
11 *
12 * $Id: ndiserrmap.c 419467 2013-08-21 09:19:48Z $
13 */
14#ifndef NDIS
15#include <bcm_ndis.h>
16#endif
17#include <typedefs.h>
18#include <osl.h>
19#include <epivers.h>
20#include <bcmutils.h>
21
22#include <ndiserrmap.h>
23
24
25static NDIS_STATUS ndisbcmerrormap[] =
26{	NDIS_STATUS_SUCCESS, 			/* 0 */
27	NDIS_STATUS_FAILURE,			/* BCME_ERROR */
28	NDIS_STATUS_INVALID_DATA,		/* BCME_BADARG */
29	NDIS_STATUS_INVALID_DATA,		/* BCME_BADOPTION */
30	NDIS_STATUS_INVALID_DATA,		/* BCME_NOTUP */
31	NDIS_STATUS_INVALID_DATA,		/* BCME_NOTDOWN */
32	NDIS_STATUS_INVALID_DATA,		/* BCME_NOTAP */
33	NDIS_STATUS_INVALID_DATA,		/* BCME_NOTSTA */
34	NDIS_STATUS_INVALID_DATA,		/* BCME_BADKEYIDX */
35	NDIS_STATUS_INVALID_DATA,		/* BCME_RADIOOFF */
36	NDIS_STATUS_INVALID_DATA,		/* BCME_NOTBANDLOCKED */
37	NDIS_STATUS_INVALID_DATA, 		/* BCME_NOCLK */
38	NDIS_STATUS_INVALID_DATA, 		/* BCME_BADRATESET */
39	NDIS_STATUS_INVALID_DATA, 		/* BCME_BADBAND */
40	NDIS_STATUS_INVALID_LENGTH,		/* BCME_BUFTOOSHORT */
41	NDIS_STATUS_INVALID_LENGTH,		/* BCME_BUFTOOLONG */
42	NDIS_STATUS_INVALID_DATA, 		/* BCME_BUSY */
43	NDIS_STATUS_INVALID_DATA, 		/* BCME_NOTASSOCIATED */
44	NDIS_STATUS_INVALID_LENGTH, 		/* BCME_BADSSIDLEN */
45	NDIS_STATUS_INVALID_DATA, 		/* BCME_OUTOFRANGECHAN */
46	NDIS_STATUS_INVALID_DATA, 		/* BCME_BADCHAN */
47	NDIS_STATUS_INVALID_DATA, 		/* BCME_BADADDR */
48	NDIS_STATUS_RESOURCES, 			/* BCME_NORESOURCE */
49	NDIS_STATUS_NOT_SUPPORTED,		/* BCME_UNSUPPORTED */
50	NDIS_STATUS_INVALID_LENGTH,		/* BCME_BADLENGTH */
51	NDIS_STATUS_ADAPTER_NOT_READY,		/* BCME_NOTREADY */
52	NDIS_STATUS_FAILURE,			/* BCME_NOTPERMITTED */
53	NDIS_STATUS_RESOURCES, 			/* BCME_NOMEM */
54	NDIS_STATUS_INVALID_DATA,		/* BCME_ASSOCIATED */
55	NDIS_STATUS_INVALID_DATA,		/* BCME_RANGE */
56	NDIS_STATUS_INVALID_DATA,		/* BCME_NOTFOUND */
57	NDIS_STATUS_INVALID_DATA,		/* BCME_WME_NOT_ENABLED */
58	NDIS_STATUS_INVALID_DATA,		/* BCME_TSPEC_NOTFOUND */
59	NDIS_STATUS_INVALID_DATA,		/* BCME_ACM_NOTSUPPORTED */
60	NDIS_STATUS_INVALID_DATA,		/* BCME_NOT_WME_ASSOCIATION */
61	NDIS_STATUS_FAILURE,			/* BCME_SDIO_ERROR */
62	NDIS_STATUS_FAILURE,			/* BCME_DONGLE_DOWN */
63	NDIS_STATUS_FAILURE,			/* BCME_VERSION */
64	NDIS_STATUS_FAILURE,			/* BCME_TXFAIL */
65	NDIS_STATUS_FAILURE,			/* BCME_RXFAIL */
66	NDIS_STATUS_ADAPTER_REMOVED,		/* BCME_NODEVICE */
67	NDIS_STATUS_FAILURE,			/* BCME_NMODE_DISABLED */
68	NDIS_STATUS_INVALID_DATA,		/* BCME_NONRESIDENT */
69	NDIS_STATUS_FAILURE,			/* BCME_SCANREJECT */
70	NDIS_STATUS_FAILURE,			/* unused */
71	NDIS_STATUS_FAILURE,			/* unused */
72	NDIS_STATUS_FAILURE,			/* unused */
73	NDIS_STATUS_NOT_SUPPORTED,		/* BCME_DISABLED */
74
75/* When an new error code is added to bcmutils.h, add os
76 * spcecific error translation here as well
77 */
78/* check if BCME_LAST changed since the last time this function was updated */
79#if BCME_LAST != -47
80#error "You need to add a OS error translation in the ndisbcmerrormap \
81	for new error code defined in bcmutils.h"
82#endif /* BCME_LAST != -47 */
83	};
84
85int
86ndisstatus2bcmerror(NDIS_STATUS status)
87{
88	int i, array_size = ARRAYSIZE(ndisbcmerrormap);
89
90	ASSERT(ABS(BCME_LAST) == (array_size - 1));
91
92	for (i = 0; i < array_size; i++)
93		if (ndisbcmerrormap[i] == status)
94			return -i;
95
96	if (status == NDIS_STATUS_INVALID_OID)
97		return BCME_UNSUPPORTED;
98
99	return BCME_ERROR;
100}
101
102NDIS_STATUS
103bcmerror2ndisstatus(int bcmerror)
104{
105	if (bcmerror > 0)
106		bcmerror = 0;
107	else if (bcmerror < BCME_LAST)
108		bcmerror = BCME_ERROR;
109
110	/* Array bounds covered by ASSERT in osl_attach */
111	return ndisbcmerrormap[-bcmerror];
112}
113