156b2bdd1SGireesh Nagabhushana /*
256b2bdd1SGireesh Nagabhushana  * This file and its contents are supplied under the terms of the
356b2bdd1SGireesh Nagabhushana  * Common Development and Distribution License ("CDDL"), version 1.0.
456b2bdd1SGireesh Nagabhushana  * You may only use this file in accordance with the terms of version
556b2bdd1SGireesh Nagabhushana  * 1.0 of the CDDL.
656b2bdd1SGireesh Nagabhushana  *
756b2bdd1SGireesh Nagabhushana  * A full copy of the text of the CDDL should have accompanied this
856b2bdd1SGireesh Nagabhushana  * source. A copy of the CDDL is also available via the Internet at
956b2bdd1SGireesh Nagabhushana  * http://www.illumos.org/license/CDDL.
1056b2bdd1SGireesh Nagabhushana  */
1156b2bdd1SGireesh Nagabhushana 
1256b2bdd1SGireesh Nagabhushana /*
1356b2bdd1SGireesh Nagabhushana  * This file is part of the Chelsio T4 support code.
1456b2bdd1SGireesh Nagabhushana  *
1556b2bdd1SGireesh Nagabhushana  * Copyright (C) 2011-2013 Chelsio Communications.  All rights reserved.
1656b2bdd1SGireesh Nagabhushana  *
1756b2bdd1SGireesh Nagabhushana  * This program is distributed in the hope that it will be useful, but WITHOUT
1856b2bdd1SGireesh Nagabhushana  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1956b2bdd1SGireesh Nagabhushana  * FITNESS FOR A PARTICULAR PURPOSE.  See the LICENSE file included in this
2056b2bdd1SGireesh Nagabhushana  * release for licensing terms and conditions.
2156b2bdd1SGireesh Nagabhushana  */
2256b2bdd1SGireesh Nagabhushana 
2356b2bdd1SGireesh Nagabhushana #include <sys/ddi.h>
2456b2bdd1SGireesh Nagabhushana #include <sys/sunddi.h>
2556b2bdd1SGireesh Nagabhushana #include <sys/queue.h>
2656b2bdd1SGireesh Nagabhushana 
2756b2bdd1SGireesh Nagabhushana #include "t4nex.h"
2856b2bdd1SGireesh Nagabhushana #include "common/common.h"
2956b2bdd1SGireesh Nagabhushana #include "common/t4_regs.h"
30*7e6ad469SVishal Kulkarni #include "cudbg.h"
3156b2bdd1SGireesh Nagabhushana 
3256b2bdd1SGireesh Nagabhushana /* helpers */
3356b2bdd1SGireesh Nagabhushana static int pci_rw(struct adapter *sc, void *data, int flags, int write);
3456b2bdd1SGireesh Nagabhushana static int reg_rw(struct adapter *sc, void *data, int flags, int write);
3556b2bdd1SGireesh Nagabhushana static void reg_block_dump(struct adapter *sc, uint8_t *buf, unsigned int start,
3656b2bdd1SGireesh Nagabhushana     unsigned int end);
3756b2bdd1SGireesh Nagabhushana static int regdump(struct adapter *sc, void *data, int flags);
3856b2bdd1SGireesh Nagabhushana static int get_sge_context(struct adapter *sc, void *data, int flags);
3956b2bdd1SGireesh Nagabhushana static int get_devlog(struct adapter *sc, void *data, int flags);
40de483253SVishal Kulkarni static int validate_mem_range(struct adapter *, uint32_t, int);
4156b2bdd1SGireesh Nagabhushana static int read_card_mem(struct adapter *sc, void *data, int flags);
4256b2bdd1SGireesh Nagabhushana static int read_tid_tab(struct adapter *sc, void *data, int flags);
4356b2bdd1SGireesh Nagabhushana static int read_mbox(struct adapter *sc, void *data, int flags);
4456b2bdd1SGireesh Nagabhushana static int read_cim_la(struct adapter *sc, void *data, int flags);
4556b2bdd1SGireesh Nagabhushana static int read_cim_qcfg(struct adapter *sc, void *data, int flags);
4656b2bdd1SGireesh Nagabhushana static int read_cim_ibq(struct adapter *sc, void *data, int flags);
4756b2bdd1SGireesh Nagabhushana static int read_edc(struct adapter *sc, void *data, int flags);
485a9113e7SVishal Kulkarni static int flash_fw(struct adapter *, void *, int);
49*7e6ad469SVishal Kulkarni static int get_cudbg(struct adapter *, void *, int);
5056b2bdd1SGireesh Nagabhushana 
5156b2bdd1SGireesh Nagabhushana int
5256b2bdd1SGireesh Nagabhushana t4_ioctl(struct adapter *sc, int cmd, void *data, int mode)
5356b2bdd1SGireesh Nagabhushana {
5456b2bdd1SGireesh Nagabhushana 	int rc = ENOTSUP;
5556b2bdd1SGireesh Nagabhushana 
5656b2bdd1SGireesh Nagabhushana 	switch (cmd) {
5756b2bdd1SGireesh Nagabhushana 	case T4_IOCTL_PCIGET32:
5856b2bdd1SGireesh Nagabhushana 	case T4_IOCTL_PCIPUT32:
5956b2bdd1SGireesh Nagabhushana 		rc = pci_rw(sc, data, mode, cmd == T4_IOCTL_PCIPUT32);
6056b2bdd1SGireesh Nagabhushana 		break;
6156b2bdd1SGireesh Nagabhushana 	case T4_IOCTL_GET32:
6256b2bdd1SGireesh Nagabhushana 	case T4_IOCTL_PUT32:
6356b2bdd1SGireesh Nagabhushana 		rc = reg_rw(sc, data, mode, cmd == T4_IOCTL_PUT32);
6456b2bdd1SGireesh Nagabhushana 		break;
6556b2bdd1SGireesh Nagabhushana 	case T4_IOCTL_REGDUMP:
6656b2bdd1SGireesh Nagabhushana 		rc = regdump(sc, data, mode);
6756b2bdd1SGireesh Nagabhushana 		break;
6856b2bdd1SGireesh Nagabhushana 	case T4_IOCTL_SGE_CONTEXT:
6956b2bdd1SGireesh Nagabhushana 		rc = get_sge_context(sc, data, mode);
7056b2bdd1SGireesh Nagabhushana 		break;
7156b2bdd1SGireesh Nagabhushana 	case T4_IOCTL_DEVLOG:
7256b2bdd1SGireesh Nagabhushana 		rc = get_devlog(sc, data, mode);
7356b2bdd1SGireesh Nagabhushana 		break;
7456b2bdd1SGireesh Nagabhushana 	case T4_IOCTL_GET_MEM:
7556b2bdd1SGireesh Nagabhushana 		rc = read_card_mem(sc, data, mode);
7656b2bdd1SGireesh Nagabhushana 		break;
7756b2bdd1SGireesh Nagabhushana 	case T4_IOCTL_GET_TID_TAB:
7856b2bdd1SGireesh Nagabhushana 		rc = read_tid_tab(sc, data, mode);
7956b2bdd1SGireesh Nagabhushana 		break;
8056b2bdd1SGireesh Nagabhushana 	case T4_IOCTL_GET_MBOX:
8156b2bdd1SGireesh Nagabhushana 		rc = read_mbox(sc, data, mode);
8256b2bdd1SGireesh Nagabhushana 		break;
8356b2bdd1SGireesh Nagabhushana 	case T4_IOCTL_GET_CIM_LA:
8456b2bdd1SGireesh Nagabhushana 		rc = read_cim_la(sc, data, mode);
8556b2bdd1SGireesh Nagabhushana 		break;
8656b2bdd1SGireesh Nagabhushana 	case T4_IOCTL_GET_CIM_QCFG:
8756b2bdd1SGireesh Nagabhushana 		rc = read_cim_qcfg(sc, data, mode);
8856b2bdd1SGireesh Nagabhushana 		break;
8956b2bdd1SGireesh Nagabhushana 	case T4_IOCTL_GET_CIM_IBQ:
9056b2bdd1SGireesh Nagabhushana 		rc = read_cim_ibq(sc, data, mode);
9156b2bdd1SGireesh Nagabhushana 		break;
9256b2bdd1SGireesh Nagabhushana 	case T4_IOCTL_GET_EDC:
9356b2bdd1SGireesh Nagabhushana 		rc = read_edc(sc, data, mode);
9456b2bdd1SGireesh Nagabhushana 		break;
955a9113e7SVishal Kulkarni 	case T4_IOCTL_LOAD_FW:
965a9113e7SVishal Kulkarni 		rc = flash_fw(sc, data, mode);
975a9113e7SVishal Kulkarni 		break;
98*7e6ad469SVishal Kulkarni 	case T4_IOCTL_GET_CUDBG:
99*7e6ad469SVishal Kulkarni 		rc = get_cudbg(sc, data, mode);
100*7e6ad469SVishal Kulkarni 		break;
10156b2bdd1SGireesh Nagabhushana 	default:
10256b2bdd1SGireesh Nagabhushana 		return (EINVAL);
10356b2bdd1SGireesh Nagabhushana 	}
10456b2bdd1SGireesh Nagabhushana 
10556b2bdd1SGireesh Nagabhushana 	return (rc);
10656b2bdd1SGireesh Nagabhushana }
10756b2bdd1SGireesh Nagabhushana 
10856b2bdd1SGireesh Nagabhushana static int
10956b2bdd1SGireesh Nagabhushana pci_rw(struct adapter *sc, void *data, int flags, int write)
11056b2bdd1SGireesh Nagabhushana {
11156b2bdd1SGireesh Nagabhushana 	struct t4_reg32_cmd r;
11256b2bdd1SGireesh Nagabhushana 
11356b2bdd1SGireesh Nagabhushana 	if (ddi_copyin(data, &r, sizeof (r), flags) < 0)
11456b2bdd1SGireesh Nagabhushana 		return (EFAULT);
11556b2bdd1SGireesh Nagabhushana 
11656b2bdd1SGireesh Nagabhushana 	/* address must be 32 bit aligned */
11756b2bdd1SGireesh Nagabhushana 	r.reg &= ~0x3;
11856b2bdd1SGireesh Nagabhushana 
11956b2bdd1SGireesh Nagabhushana 	if (write != 0)
12056b2bdd1SGireesh Nagabhushana 		t4_os_pci_write_cfg4(sc, r.reg, r.value);
12156b2bdd1SGireesh Nagabhushana 	else {
12256b2bdd1SGireesh Nagabhushana 		t4_os_pci_read_cfg4(sc, r.reg, &r.value);
12356b2bdd1SGireesh Nagabhushana 		if (ddi_copyout(&r, data, sizeof (r), flags) < 0)
12456b2bdd1SGireesh Nagabhushana 			return (EFAULT);
12556b2bdd1SGireesh Nagabhushana 	}
12656b2bdd1SGireesh Nagabhushana 
12756b2bdd1SGireesh Nagabhushana 	return (0);
12856b2bdd1SGireesh Nagabhushana }
12956b2bdd1SGireesh Nagabhushana 
13056b2bdd1SGireesh Nagabhushana static int
13156b2bdd1SGireesh Nagabhushana reg_rw(struct adapter *sc, void *data, int flags, int write)
13256b2bdd1SGireesh Nagabhushana {
13356b2bdd1SGireesh Nagabhushana 	struct t4_reg32_cmd r;
13456b2bdd1SGireesh Nagabhushana 
13556b2bdd1SGireesh Nagabhushana 	if (ddi_copyin(data, &r, sizeof (r), flags) < 0)
13656b2bdd1SGireesh Nagabhushana 		return (EFAULT);
13756b2bdd1SGireesh Nagabhushana 
13856b2bdd1SGireesh Nagabhushana 	/* Register address must be 32 bit aligned */
13956b2bdd1SGireesh Nagabhushana 	r.reg &= ~0x3;
14056b2bdd1SGireesh Nagabhushana 
14156b2bdd1SGireesh Nagabhushana 	if (write != 0)
14256b2bdd1SGireesh Nagabhushana 		t4_write_reg(sc, r.reg, r.value);
14356b2bdd1SGireesh Nagabhushana 	else {
14456b2bdd1SGireesh Nagabhushana 		r.value = t4_read_reg(sc, r.reg);
14556b2bdd1SGireesh Nagabhushana 		if (ddi_copyout(&r, data, sizeof (r), flags) < 0)
14656b2bdd1SGireesh Nagabhushana 			return (EFAULT);
14756b2bdd1SGireesh Nagabhushana 	}
14856b2bdd1SGireesh Nagabhushana 
14956b2bdd1SGireesh Nagabhushana 	return (0);
15056b2bdd1SGireesh Nagabhushana }
15156b2bdd1SGireesh Nagabhushana 
15256b2bdd1SGireesh Nagabhushana static void
15356b2bdd1SGireesh Nagabhushana reg_block_dump(struct adapter *sc, uint8_t *buf, unsigned int start,
15456b2bdd1SGireesh Nagabhushana     unsigned int end)
15556b2bdd1SGireesh Nagabhushana {
15656b2bdd1SGireesh Nagabhushana 	/* LINTED: E_BAD_PTR_CAST_ALIGN */
15756b2bdd1SGireesh Nagabhushana 	uint32_t *p = (uint32_t *)(buf + start);
15856b2bdd1SGireesh Nagabhushana 
15956b2bdd1SGireesh Nagabhushana 	for (/* */; start <= end; start += sizeof (uint32_t))
16056b2bdd1SGireesh Nagabhushana 		*p++ = t4_read_reg(sc, start);
16156b2bdd1SGireesh Nagabhushana }
16256b2bdd1SGireesh Nagabhushana 
163de483253SVishal Kulkarni /*
164de483253SVishal Kulkarni  * Return a version number to identify the type of adapter.  The scheme is:
165de483253SVishal Kulkarni  * - bits 0..9: chip version
166de483253SVishal Kulkarni  * - bits 10..15: chip revision
167de483253SVishal Kulkarni  * - bits 16..23: register dump version
168de483253SVishal Kulkarni  */
169de483253SVishal Kulkarni static inline
170de483253SVishal Kulkarni unsigned int mk_adap_vers(const struct adapter *sc)
171de483253SVishal Kulkarni {
172de483253SVishal Kulkarni 	return CHELSIO_CHIP_VERSION(sc->params.chip) |
173de483253SVishal Kulkarni 		(CHELSIO_CHIP_RELEASE(sc->params.chip) << 10) | (1 << 16);
174de483253SVishal Kulkarni }
175de483253SVishal Kulkarni 
17656b2bdd1SGireesh Nagabhushana static int
17756b2bdd1SGireesh Nagabhushana regdump(struct adapter *sc, void *data, int flags)
17856b2bdd1SGireesh Nagabhushana {
17956b2bdd1SGireesh Nagabhushana 	struct t4_regdump r;
18056b2bdd1SGireesh Nagabhushana 	uint8_t *buf;
181de483253SVishal Kulkarni 	static const unsigned int *reg_ranges;
182de483253SVishal Kulkarni 	int rc = 0, arr_size = 0, buf_size = 0, i;
183de483253SVishal Kulkarni 	static const unsigned int t4_reg_ranges[] = {
18456b2bdd1SGireesh Nagabhushana 		0x1008, 0x1108,
18556b2bdd1SGireesh Nagabhushana 		0x1180, 0x11b4,
18656b2bdd1SGireesh Nagabhushana 		0x11fc, 0x123c,
18756b2bdd1SGireesh Nagabhushana 		0x1300, 0x173c,
18856b2bdd1SGireesh Nagabhushana 		0x1800, 0x18fc,
18956b2bdd1SGireesh Nagabhushana 		0x3000, 0x30d8,
19056b2bdd1SGireesh Nagabhushana 		0x30e0, 0x5924,
19156b2bdd1SGireesh Nagabhushana 		0x5960, 0x59d4,
19256b2bdd1SGireesh Nagabhushana 		0x5a00, 0x5af8,
19356b2bdd1SGireesh Nagabhushana 		0x6000, 0x6098,
19456b2bdd1SGireesh Nagabhushana 		0x6100, 0x6150,
19556b2bdd1SGireesh Nagabhushana 		0x6200, 0x6208,
19656b2bdd1SGireesh Nagabhushana 		0x6240, 0x6248,
19756b2bdd1SGireesh Nagabhushana 		0x6280, 0x6338,
19856b2bdd1SGireesh Nagabhushana 		0x6370, 0x638c,
19956b2bdd1SGireesh Nagabhushana 		0x6400, 0x643c,
20056b2bdd1SGireesh Nagabhushana 		0x6500, 0x6524,
20156b2bdd1SGireesh Nagabhushana 		0x6a00, 0x6a38,
20256b2bdd1SGireesh Nagabhushana 		0x6a60, 0x6a78,
20356b2bdd1SGireesh Nagabhushana 		0x6b00, 0x6b84,
20456b2bdd1SGireesh Nagabhushana 		0x6bf0, 0x6c84,
20556b2bdd1SGireesh Nagabhushana 		0x6cf0, 0x6d84,
20656b2bdd1SGireesh Nagabhushana 		0x6df0, 0x6e84,
20756b2bdd1SGireesh Nagabhushana 		0x6ef0, 0x6f84,
20856b2bdd1SGireesh Nagabhushana 		0x6ff0, 0x7084,
20956b2bdd1SGireesh Nagabhushana 		0x70f0, 0x7184,
21056b2bdd1SGireesh Nagabhushana 		0x71f0, 0x7284,
21156b2bdd1SGireesh Nagabhushana 		0x72f0, 0x7384,
21256b2bdd1SGireesh Nagabhushana 		0x73f0, 0x7450,
21356b2bdd1SGireesh Nagabhushana 		0x7500, 0x7530,
21456b2bdd1SGireesh Nagabhushana 		0x7600, 0x761c,
21556b2bdd1SGireesh Nagabhushana 		0x7680, 0x76cc,
21656b2bdd1SGireesh Nagabhushana 		0x7700, 0x7798,
21756b2bdd1SGireesh Nagabhushana 		0x77c0, 0x77fc,
21856b2bdd1SGireesh Nagabhushana 		0x7900, 0x79fc,
21956b2bdd1SGireesh Nagabhushana 		0x7b00, 0x7c38,
22056b2bdd1SGireesh Nagabhushana 		0x7d00, 0x7efc,
22156b2bdd1SGireesh Nagabhushana 		0x8dc0, 0x8e1c,
22256b2bdd1SGireesh Nagabhushana 		0x8e30, 0x8e78,
22356b2bdd1SGireesh Nagabhushana 		0x8ea0, 0x8f6c,
22456b2bdd1SGireesh Nagabhushana 		0x8fc0, 0x9074,
22556b2bdd1SGireesh Nagabhushana 		0x90fc, 0x90fc,
22656b2bdd1SGireesh Nagabhushana 		0x9400, 0x9458,
22756b2bdd1SGireesh Nagabhushana 		0x9600, 0x96bc,
22856b2bdd1SGireesh Nagabhushana 		0x9800, 0x9808,
22956b2bdd1SGireesh Nagabhushana 		0x9820, 0x983c,
23056b2bdd1SGireesh Nagabhushana 		0x9850, 0x9864,
23156b2bdd1SGireesh Nagabhushana 		0x9c00, 0x9c6c,
23256b2bdd1SGireesh Nagabhushana 		0x9c80, 0x9cec,
23356b2bdd1SGireesh Nagabhushana 		0x9d00, 0x9d6c,
23456b2bdd1SGireesh Nagabhushana 		0x9d80, 0x9dec,
23556b2bdd1SGireesh Nagabhushana 		0x9e00, 0x9e6c,
23656b2bdd1SGireesh Nagabhushana 		0x9e80, 0x9eec,
23756b2bdd1SGireesh Nagabhushana 		0x9f00, 0x9f6c,
23856b2bdd1SGireesh Nagabhushana 		0x9f80, 0x9fec,
23956b2bdd1SGireesh Nagabhushana 		0xd004, 0xd03c,
24056b2bdd1SGireesh Nagabhushana 		0xdfc0, 0xdfe0,
24156b2bdd1SGireesh Nagabhushana 		0xe000, 0xea7c,
24256b2bdd1SGireesh Nagabhushana 		0xf000, 0x11190,
24356b2bdd1SGireesh Nagabhushana 		0x19040, 0x19124,
24456b2bdd1SGireesh Nagabhushana 		0x19150, 0x191b0,
24556b2bdd1SGireesh Nagabhushana 		0x191d0, 0x191e8,
24656b2bdd1SGireesh Nagabhushana 		0x19238, 0x1924c,
24756b2bdd1SGireesh Nagabhushana 		0x193f8, 0x19474,
24856b2bdd1SGireesh Nagabhushana 		0x19490, 0x194f8,
24956b2bdd1SGireesh Nagabhushana 		0x19800, 0x19f30,
25056b2bdd1SGireesh Nagabhushana 		0x1a000, 0x1a06c,
25156b2bdd1SGireesh Nagabhushana 		0x1a0b0, 0x1a120,
25256b2bdd1SGireesh Nagabhushana 		0x1a128, 0x1a138,
25356b2bdd1SGireesh Nagabhushana 		0x1a190, 0x1a1c4,
25456b2bdd1SGireesh Nagabhushana 		0x1a1fc, 0x1a1fc,
25556b2bdd1SGireesh Nagabhushana 		0x1e040, 0x1e04c,
25656b2bdd1SGireesh Nagabhushana 		0x1e240, 0x1e28c,
25756b2bdd1SGireesh Nagabhushana 		0x1e2c0, 0x1e2c0,
25856b2bdd1SGireesh Nagabhushana 		0x1e2e0, 0x1e2e0,
25956b2bdd1SGireesh Nagabhushana 		0x1e300, 0x1e384,
26056b2bdd1SGireesh Nagabhushana 		0x1e3c0, 0x1e3c8,
26156b2bdd1SGireesh Nagabhushana 		0x1e440, 0x1e44c,
26256b2bdd1SGireesh Nagabhushana 		0x1e640, 0x1e68c,
26356b2bdd1SGireesh Nagabhushana 		0x1e6c0, 0x1e6c0,
26456b2bdd1SGireesh Nagabhushana 		0x1e6e0, 0x1e6e0,
26556b2bdd1SGireesh Nagabhushana 		0x1e700, 0x1e784,
26656b2bdd1SGireesh Nagabhushana 		0x1e7c0, 0x1e7c8,
26756b2bdd1SGireesh Nagabhushana 		0x1e840, 0x1e84c,
26856b2bdd1SGireesh Nagabhushana 		0x1ea40, 0x1ea8c,
26956b2bdd1SGireesh Nagabhushana 		0x1eac0, 0x1eac0,
27056b2bdd1SGireesh Nagabhushana 		0x1eae0, 0x1eae0,
27156b2bdd1SGireesh Nagabhushana 		0x1eb00, 0x1eb84,
27256b2bdd1SGireesh Nagabhushana 		0x1ebc0, 0x1ebc8,
27356b2bdd1SGireesh Nagabhushana 		0x1ec40, 0x1ec4c,
27456b2bdd1SGireesh Nagabhushana 		0x1ee40, 0x1ee8c,
27556b2bdd1SGireesh Nagabhushana 		0x1eec0, 0x1eec0,
27656b2bdd1SGireesh Nagabhushana 		0x1eee0, 0x1eee0,
27756b2bdd1SGireesh Nagabhushana 		0x1ef00, 0x1ef84,
27856b2bdd1SGireesh Nagabhushana 		0x1efc0, 0x1efc8,
27956b2bdd1SGireesh Nagabhushana 		0x1f040, 0x1f04c,
28056b2bdd1SGireesh Nagabhushana 		0x1f240, 0x1f28c,
28156b2bdd1SGireesh Nagabhushana 		0x1f2c0, 0x1f2c0,
28256b2bdd1SGireesh Nagabhushana 		0x1f2e0, 0x1f2e0,
28356b2bdd1SGireesh Nagabhushana 		0x1f300, 0x1f384,
28456b2bdd1SGireesh Nagabhushana 		0x1f3c0, 0x1f3c8,
28556b2bdd1SGireesh Nagabhushana 		0x1f440, 0x1f44c,
28656b2bdd1SGireesh Nagabhushana 		0x1f640, 0x1f68c,
28756b2bdd1SGireesh Nagabhushana 		0x1f6c0, 0x1f6c0,
28856b2bdd1SGireesh Nagabhushana 		0x1f6e0, 0x1f6e0,
28956b2bdd1SGireesh Nagabhushana 		0x1f700, 0x1f784,
29056b2bdd1SGireesh Nagabhushana 		0x1f7c0, 0x1f7c8,
29156b2bdd1SGireesh Nagabhushana 		0x1f840, 0x1f84c,
29256b2bdd1SGireesh Nagabhushana 		0x1fa40, 0x1fa8c,
29356b2bdd1SGireesh Nagabhushana 		0x1fac0, 0x1fac0,
29456b2bdd1SGireesh Nagabhushana 		0x1fae0, 0x1fae0,
29556b2bdd1SGireesh Nagabhushana 		0x1fb00, 0x1fb84,
29656b2bdd1SGireesh Nagabhushana 		0x1fbc0, 0x1fbc8,
29756b2bdd1SGireesh Nagabhushana 		0x1fc40, 0x1fc4c,
29856b2bdd1SGireesh Nagabhushana 		0x1fe40, 0x1fe8c,
29956b2bdd1SGireesh Nagabhushana 		0x1fec0, 0x1fec0,
30056b2bdd1SGireesh Nagabhushana 		0x1fee0, 0x1fee0,
30156b2bdd1SGireesh Nagabhushana 		0x1ff00, 0x1ff84,
30256b2bdd1SGireesh Nagabhushana 		0x1ffc0, 0x1ffc8,
30356b2bdd1SGireesh Nagabhushana 		0x20000, 0x2002c,
30456b2bdd1SGireesh Nagabhushana 		0x20100, 0x2013c,
30556b2bdd1SGireesh Nagabhushana 		0x20190, 0x201c8,
30656b2bdd1SGireesh Nagabhushana 		0x20200, 0x20318,
30756b2bdd1SGireesh Nagabhushana 		0x20400, 0x20528,
30856b2bdd1SGireesh Nagabhushana 		0x20540, 0x20614,
30956b2bdd1SGireesh Nagabhushana 		0x21000, 0x21040,
31056b2bdd1SGireesh Nagabhushana 		0x2104c, 0x21060,
31156b2bdd1SGireesh Nagabhushana 		0x210c0, 0x210ec,
31256b2bdd1SGireesh Nagabhushana 		0x21200, 0x21268,
31356b2bdd1SGireesh Nagabhushana 		0x21270, 0x21284,
31456b2bdd1SGireesh Nagabhushana 		0x212fc, 0x21388,
31556b2bdd1SGireesh Nagabhushana 		0x21400, 0x21404,
31656b2bdd1SGireesh Nagabhushana 		0x21500, 0x21518,
31756b2bdd1SGireesh Nagabhushana 		0x2152c, 0x2153c,
31856b2bdd1SGireesh Nagabhushana 		0x21550, 0x21554,
31956b2bdd1SGireesh Nagabhushana 		0x21600, 0x21600,
32056b2bdd1SGireesh Nagabhushana 		0x21608, 0x21628,
32156b2bdd1SGireesh Nagabhushana 		0x21630, 0x2163c,
32256b2bdd1SGireesh Nagabhushana 		0x21700, 0x2171c,
32356b2bdd1SGireesh Nagabhushana 		0x21780, 0x2178c,
32456b2bdd1SGireesh Nagabhushana 		0x21800, 0x21c38,
32556b2bdd1SGireesh Nagabhushana 		0x21c80, 0x21d7c,
32656b2bdd1SGireesh Nagabhushana 		0x21e00, 0x21e04,
32756b2bdd1SGireesh Nagabhushana 		0x22000, 0x2202c,
32856b2bdd1SGireesh Nagabhushana 		0x22100, 0x2213c,
32956b2bdd1SGireesh Nagabhushana 		0x22190, 0x221c8,
33056b2bdd1SGireesh Nagabhushana 		0x22200, 0x22318,
33156b2bdd1SGireesh Nagabhushana 		0x22400, 0x22528,
33256b2bdd1SGireesh Nagabhushana 		0x22540, 0x22614,
33356b2bdd1SGireesh Nagabhushana 		0x23000, 0x23040,
33456b2bdd1SGireesh Nagabhushana 		0x2304c, 0x23060,
33556b2bdd1SGireesh Nagabhushana 		0x230c0, 0x230ec,
33656b2bdd1SGireesh Nagabhushana 		0x23200, 0x23268,
33756b2bdd1SGireesh Nagabhushana 		0x23270, 0x23284,
33856b2bdd1SGireesh Nagabhushana 		0x232fc, 0x23388,
33956b2bdd1SGireesh Nagabhushana 		0x23400, 0x23404,
34056b2bdd1SGireesh Nagabhushana 		0x23500, 0x23518,
34156b2bdd1SGireesh Nagabhushana 		0x2352c, 0x2353c,
34256b2bdd1SGireesh Nagabhushana 		0x23550, 0x23554,
34356b2bdd1SGireesh Nagabhushana 		0x23600, 0x23600,
34456b2bdd1SGireesh Nagabhushana 		0x23608, 0x23628,
34556b2bdd1SGireesh Nagabhushana 		0x23630, 0x2363c,
34656b2bdd1SGireesh Nagabhushana 		0x23700, 0x2371c,
34756b2bdd1SGireesh Nagabhushana 		0x23780, 0x2378c,
34856b2bdd1SGireesh Nagabhushana 		0x23800, 0x23c38,
34956b2bdd1SGireesh Nagabhushana 		0x23c80, 0x23d7c,
35056b2bdd1SGireesh Nagabhushana 		0x23e00, 0x23e04,
35156b2bdd1SGireesh Nagabhushana 		0x24000, 0x2402c,
35256b2bdd1SGireesh Nagabhushana 		0x24100, 0x2413c,
35356b2bdd1SGireesh Nagabhushana 		0x24190, 0x241c8,
35456b2bdd1SGireesh Nagabhushana 		0x24200, 0x24318,
35556b2bdd1SGireesh Nagabhushana 		0x24400, 0x24528,
35656b2bdd1SGireesh Nagabhushana 		0x24540, 0x24614,
35756b2bdd1SGireesh Nagabhushana 		0x25000, 0x25040,
35856b2bdd1SGireesh Nagabhushana 		0x2504c, 0x25060,
35956b2bdd1SGireesh Nagabhushana 		0x250c0, 0x250ec,
36056b2bdd1SGireesh Nagabhushana 		0x25200, 0x25268,
36156b2bdd1SGireesh Nagabhushana 		0x25270, 0x25284,
36256b2bdd1SGireesh Nagabhushana 		0x252fc, 0x25388,
36356b2bdd1SGireesh Nagabhushana 		0x25400, 0x25404,
36456b2bdd1SGireesh Nagabhushana 		0x25500, 0x25518,
36556b2bdd1SGireesh Nagabhushana 		0x2552c, 0x2553c,
36656b2bdd1SGireesh Nagabhushana 		0x25550, 0x25554,
36756b2bdd1SGireesh Nagabhushana 		0x25600, 0x25600,
36856b2bdd1SGireesh Nagabhushana 		0x25608, 0x25628,
36956b2bdd1SGireesh Nagabhushana 		0x25630, 0x2563c,
37056b2bdd1SGireesh Nagabhushana 		0x25700, 0x2571c,
37156b2bdd1SGireesh Nagabhushana 		0x25780, 0x2578c,
37256b2bdd1SGireesh Nagabhushana 		0x25800, 0x25c38,
37356b2bdd1SGireesh Nagabhushana 		0x25c80, 0x25d7c,
37456b2bdd1SGireesh Nagabhushana 		0x25e00, 0x25e04,
37556b2bdd1SGireesh Nagabhushana 		0x26000, 0x2602c,
37656b2bdd1SGireesh Nagabhushana 		0x26100, 0x2613c,
37756b2bdd1SGireesh Nagabhushana 		0x26190, 0x261c8,
37856b2bdd1SGireesh Nagabhushana 		0x26200, 0x26318,
37956b2bdd1SGireesh Nagabhushana 		0x26400, 0x26528,
38056b2bdd1SGireesh Nagabhushana 		0x26540, 0x26614,
38156b2bdd1SGireesh Nagabhushana 		0x27000, 0x27040,
38256b2bdd1SGireesh Nagabhushana 		0x2704c, 0x27060,
38356b2bdd1SGireesh Nagabhushana 		0x270c0, 0x270ec,
38456b2bdd1SGireesh Nagabhushana 		0x27200, 0x27268,
38556b2bdd1SGireesh Nagabhushana 		0x27270, 0x27284,
38656b2bdd1SGireesh Nagabhushana 		0x272fc, 0x27388,
38756b2bdd1SGireesh Nagabhushana 		0x27400, 0x27404,
38856b2bdd1SGireesh Nagabhushana 		0x27500, 0x27518,
38956b2bdd1SGireesh Nagabhushana 		0x2752c, 0x2753c,
39056b2bdd1SGireesh Nagabhushana 		0x27550, 0x27554,
39156b2bdd1SGireesh Nagabhushana 		0x27600, 0x27600,
39256b2bdd1SGireesh Nagabhushana 		0x27608, 0x27628,
39356b2bdd1SGireesh Nagabhushana 		0x27630, 0x2763c,
39456b2bdd1SGireesh Nagabhushana 		0x27700, 0x2771c,
39556b2bdd1SGireesh Nagabhushana 		0x27780, 0x2778c,
39656b2bdd1SGireesh Nagabhushana 		0x27800, 0x27c38,
39756b2bdd1SGireesh Nagabhushana 		0x27c80, 0x27d7c,
39856b2bdd1SGireesh Nagabhushana 		0x27e00, 0x27e04
39956b2bdd1SGireesh Nagabhushana 	};
40056b2bdd1SGireesh Nagabhushana 
401de483253SVishal Kulkarni 	static const unsigned int t5_reg_ranges[] = {
402de483253SVishal Kulkarni 		0x1008, 0x10c0,
403de483253SVishal Kulkarni 		0x10cc, 0x10f8,
404de483253SVishal Kulkarni 		0x1100, 0x1100,
405de483253SVishal Kulkarni 		0x110c, 0x1148,
406de483253SVishal Kulkarni 		0x1180, 0x1184,
407de483253SVishal Kulkarni 		0x1190, 0x1194,
408de483253SVishal Kulkarni 		0x11a0, 0x11a4,
409de483253SVishal Kulkarni 		0x11b0, 0x11b4,
410de483253SVishal Kulkarni 		0x11fc, 0x123c,
411de483253SVishal Kulkarni 		0x1280, 0x173c,
412de483253SVishal Kulkarni 		0x1800, 0x18fc,
413de483253SVishal Kulkarni 		0x3000, 0x3028,
414de483253SVishal Kulkarni 		0x3060, 0x30b0,
415de483253SVishal Kulkarni 		0x30b8, 0x30d8,
416de483253SVishal Kulkarni 		0x30e0, 0x30fc,
417de483253SVishal Kulkarni 		0x3140, 0x357c,
418de483253SVishal Kulkarni 		0x35a8, 0x35cc,
419de483253SVishal Kulkarni 		0x35ec, 0x35ec,
420de483253SVishal Kulkarni 		0x3600, 0x5624,
421de483253SVishal Kulkarni 		0x56cc, 0x56ec,
422de483253SVishal Kulkarni 		0x56f4, 0x5720,
423de483253SVishal Kulkarni 		0x5728, 0x575c,
424de483253SVishal Kulkarni 		0x580c, 0x5814,
425de483253SVishal Kulkarni 		0x5890, 0x589c,
426de483253SVishal Kulkarni 		0x58a4, 0x58ac,
427de483253SVishal Kulkarni 		0x58b8, 0x58bc,
428de483253SVishal Kulkarni 		0x5940, 0x59c8,
429de483253SVishal Kulkarni 		0x59d0, 0x59dc,
430de483253SVishal Kulkarni 		0x59fc, 0x5a18,
431de483253SVishal Kulkarni 		0x5a60, 0x5a70,
432de483253SVishal Kulkarni 		0x5a80, 0x5a9c,
433de483253SVishal Kulkarni 		0x5b94, 0x5bfc,
434de483253SVishal Kulkarni 		0x6000, 0x6020,
435de483253SVishal Kulkarni 		0x6028, 0x6040,
436de483253SVishal Kulkarni 		0x6058, 0x609c,
437de483253SVishal Kulkarni 		0x60a8, 0x614c,
438de483253SVishal Kulkarni 		0x7700, 0x7798,
439de483253SVishal Kulkarni 		0x77c0, 0x78fc,
440de483253SVishal Kulkarni 		0x7b00, 0x7b58,
441de483253SVishal Kulkarni 		0x7b60, 0x7b84,
442de483253SVishal Kulkarni 		0x7b8c, 0x7c54,
443de483253SVishal Kulkarni 		0x7d00, 0x7d38,
444de483253SVishal Kulkarni 		0x7d40, 0x7d80,
445de483253SVishal Kulkarni 		0x7d8c, 0x7ddc,
446de483253SVishal Kulkarni 		0x7de4, 0x7e04,
447de483253SVishal Kulkarni 		0x7e10, 0x7e1c,
448de483253SVishal Kulkarni 		0x7e24, 0x7e38,
449de483253SVishal Kulkarni 		0x7e40, 0x7e44,
450de483253SVishal Kulkarni 		0x7e4c, 0x7e78,
451de483253SVishal Kulkarni 		0x7e80, 0x7edc,
452de483253SVishal Kulkarni 		0x7ee8, 0x7efc,
453de483253SVishal Kulkarni 		0x8dc0, 0x8de0,
454de483253SVishal Kulkarni 		0x8df8, 0x8e04,
455de483253SVishal Kulkarni 		0x8e10, 0x8e84,
456de483253SVishal Kulkarni 		0x8ea0, 0x8f84,
457de483253SVishal Kulkarni 		0x8fc0, 0x9058,
458de483253SVishal Kulkarni 		0x9060, 0x9060,
459de483253SVishal Kulkarni 		0x9068, 0x90f8,
460de483253SVishal Kulkarni 		0x9400, 0x9408,
461de483253SVishal Kulkarni 		0x9410, 0x9470,
462de483253SVishal Kulkarni 		0x9600, 0x9600,
463de483253SVishal Kulkarni 		0x9608, 0x9638,
464de483253SVishal Kulkarni 		0x9640, 0x96f4,
465de483253SVishal Kulkarni 		0x9800, 0x9808,
466de483253SVishal Kulkarni 		0x9820, 0x983c,
467de483253SVishal Kulkarni 		0x9850, 0x9864,
468de483253SVishal Kulkarni 		0x9c00, 0x9c6c,
469de483253SVishal Kulkarni 		0x9c80, 0x9cec,
470de483253SVishal Kulkarni 		0x9d00, 0x9d6c,
471de483253SVishal Kulkarni 		0x9d80, 0x9dec,
472de483253SVishal Kulkarni 		0x9e00, 0x9e6c,
473de483253SVishal Kulkarni 		0x9e80, 0x9eec,
474de483253SVishal Kulkarni 		0x9f00, 0x9f6c,
475de483253SVishal Kulkarni 		0x9f80, 0xa020,
476de483253SVishal Kulkarni 		0xd004, 0xd004,
477de483253SVishal Kulkarni 		0xd010, 0xd03c,
478de483253SVishal Kulkarni 		0xdfc0, 0xdfe0,
479de483253SVishal Kulkarni 		0xe000, 0x1106c,
480de483253SVishal Kulkarni 		0x11074, 0x11088,
481de483253SVishal Kulkarni 		0x1109c, 0x1117c,
482de483253SVishal Kulkarni 		0x11190, 0x11204,
483de483253SVishal Kulkarni 		0x19040, 0x1906c,
484de483253SVishal Kulkarni 		0x19078, 0x19080,
485de483253SVishal Kulkarni 		0x1908c, 0x190e8,
486de483253SVishal Kulkarni 		0x190f0, 0x190f8,
487de483253SVishal Kulkarni 		0x19100, 0x19110,
488de483253SVishal Kulkarni 		0x19120, 0x19124,
489de483253SVishal Kulkarni 		0x19150, 0x19194,
490de483253SVishal Kulkarni 		0x1919c, 0x191b0,
491de483253SVishal Kulkarni 		0x191d0, 0x191e8,
492de483253SVishal Kulkarni 		0x19238, 0x19290,
493de483253SVishal Kulkarni 		0x193f8, 0x19428,
494de483253SVishal Kulkarni 		0x19430, 0x19444,
495de483253SVishal Kulkarni 		0x1944c, 0x1946c,
496de483253SVishal Kulkarni 		0x19474, 0x19474,
497de483253SVishal Kulkarni 		0x19490, 0x194cc,
498de483253SVishal Kulkarni 		0x194f0, 0x194f8,
499de483253SVishal Kulkarni 		0x19c00, 0x19c08,
500de483253SVishal Kulkarni 		0x19c10, 0x19c60,
501de483253SVishal Kulkarni 		0x19c94, 0x19ce4,
502de483253SVishal Kulkarni 		0x19cf0, 0x19d40,
503de483253SVishal Kulkarni 		0x19d50, 0x19d94,
504de483253SVishal Kulkarni 		0x19da0, 0x19de8,
505de483253SVishal Kulkarni 		0x19df0, 0x19e10,
506de483253SVishal Kulkarni 		0x19e50, 0x19e90,
507de483253SVishal Kulkarni 		0x19ea0, 0x19f24,
508de483253SVishal Kulkarni 		0x19f34, 0x19f34,
509de483253SVishal Kulkarni 		0x19f40, 0x19f50,
510de483253SVishal Kulkarni 		0x19f90, 0x19fb4,
511de483253SVishal Kulkarni 		0x19fc4, 0x19fe4,
512de483253SVishal Kulkarni 		0x1a000, 0x1a004,
513de483253SVishal Kulkarni 		0x1a010, 0x1a06c,
514de483253SVishal Kulkarni 		0x1a0b0, 0x1a0e4,
515de483253SVishal Kulkarni 		0x1a0ec, 0x1a0f8,
516de483253SVishal Kulkarni 		0x1a100, 0x1a108,
517de483253SVishal Kulkarni 		0x1a114, 0x1a120,
518de483253SVishal Kulkarni 		0x1a128, 0x1a130,
519de483253SVishal Kulkarni 		0x1a138, 0x1a138,
520de483253SVishal Kulkarni 		0x1a190, 0x1a1c4,
521de483253SVishal Kulkarni 		0x1a1fc, 0x1a1fc,
522de483253SVishal Kulkarni 		0x1e008, 0x1e00c,
523de483253SVishal Kulkarni 		0x1e040, 0x1e044,
524de483253SVishal Kulkarni 		0x1e04c, 0x1e04c,
525de483253SVishal Kulkarni 		0x1e284, 0x1e290,
526de483253SVishal Kulkarni 		0x1e2c0, 0x1e2c0,
527de483253SVishal Kulkarni 		0x1e2e0, 0x1e2e0,
528de483253SVishal Kulkarni 		0x1e300, 0x1e384,
529de483253SVishal Kulkarni 		0x1e3c0, 0x1e3c8,
530de483253SVishal Kulkarni 		0x1e408, 0x1e40c,
531de483253SVishal Kulkarni 		0x1e440, 0x1e444,
532de483253SVishal Kulkarni 		0x1e44c, 0x1e44c,
533de483253SVishal Kulkarni 		0x1e684, 0x1e690,
534de483253SVishal Kulkarni 		0x1e6c0, 0x1e6c0,
535de483253SVishal Kulkarni 		0x1e6e0, 0x1e6e0,
536de483253SVishal Kulkarni 		0x1e700, 0x1e784,
537de483253SVishal Kulkarni 		0x1e7c0, 0x1e7c8,
538de483253SVishal Kulkarni 		0x1e808, 0x1e80c,
539de483253SVishal Kulkarni 		0x1e840, 0x1e844,
540de483253SVishal Kulkarni 		0x1e84c, 0x1e84c,
541de483253SVishal Kulkarni 		0x1ea84, 0x1ea90,
542de483253SVishal Kulkarni 		0x1eac0, 0x1eac0,
543de483253SVishal Kulkarni 		0x1eae0, 0x1eae0,
544de483253SVishal Kulkarni 		0x1eb00, 0x1eb84,
545de483253SVishal Kulkarni 		0x1ebc0, 0x1ebc8,
546de483253SVishal Kulkarni 		0x1ec08, 0x1ec0c,
547de483253SVishal Kulkarni 		0x1ec40, 0x1ec44,
548de483253SVishal Kulkarni 		0x1ec4c, 0x1ec4c,
549de483253SVishal Kulkarni 		0x1ee84, 0x1ee90,
550de483253SVishal Kulkarni 		0x1eec0, 0x1eec0,
551de483253SVishal Kulkarni 		0x1eee0, 0x1eee0,
552de483253SVishal Kulkarni 		0x1ef00, 0x1ef84,
553de483253SVishal Kulkarni 		0x1efc0, 0x1efc8,
554de483253SVishal Kulkarni 		0x1f008, 0x1f00c,
555de483253SVishal Kulkarni 		0x1f040, 0x1f044,
556de483253SVishal Kulkarni 		0x1f04c, 0x1f04c,
557de483253SVishal Kulkarni 		0x1f284, 0x1f290,
558de483253SVishal Kulkarni 		0x1f2c0, 0x1f2c0,
559de483253SVishal Kulkarni 		0x1f2e0, 0x1f2e0,
560de483253SVishal Kulkarni 		0x1f300, 0x1f384,
561de483253SVishal Kulkarni 		0x1f3c0, 0x1f3c8,
562de483253SVishal Kulkarni 		0x1f408, 0x1f40c,
563de483253SVishal Kulkarni 		0x1f440, 0x1f444,
564de483253SVishal Kulkarni 		0x1f44c, 0x1f44c,
565de483253SVishal Kulkarni 		0x1f684, 0x1f690,
566de483253SVishal Kulkarni 		0x1f6c0, 0x1f6c0,
567de483253SVishal Kulkarni 		0x1f6e0, 0x1f6e0,
568de483253SVishal Kulkarni 		0x1f700, 0x1f784,
569de483253SVishal Kulkarni 		0x1f7c0, 0x1f7c8,
570de483253SVishal Kulkarni 		0x1f808, 0x1f80c,
571de483253SVishal Kulkarni 		0x1f840, 0x1f844,
572de483253SVishal Kulkarni 		0x1f84c, 0x1f84c,
573de483253SVishal Kulkarni 		0x1fa84, 0x1fa90,
574de483253SVishal Kulkarni 		0x1fac0, 0x1fac0,
575de483253SVishal Kulkarni 		0x1fae0, 0x1fae0,
576de483253SVishal Kulkarni 		0x1fb00, 0x1fb84,
577de483253SVishal Kulkarni 		0x1fbc0, 0x1fbc8,
578de483253SVishal Kulkarni 		0x1fc08, 0x1fc0c,
579de483253SVishal Kulkarni 		0x1fc40, 0x1fc44,
580de483253SVishal Kulkarni 		0x1fc4c, 0x1fc4c,
581de483253SVishal Kulkarni 		0x1fe84, 0x1fe90,
582de483253SVishal Kulkarni 		0x1fec0, 0x1fec0,
583de483253SVishal Kulkarni 		0x1fee0, 0x1fee0,
584de483253SVishal Kulkarni 		0x1ff00, 0x1ff84,
585de483253SVishal Kulkarni 		0x1ffc0, 0x1ffc8,
586de483253SVishal Kulkarni 		0x30000, 0x30030,
587de483253SVishal Kulkarni 		0x30038, 0x30038,
588de483253SVishal Kulkarni 		0x30040, 0x30040,
589de483253SVishal Kulkarni 		0x30100, 0x30144,
590de483253SVishal Kulkarni 		0x30190, 0x301a0,
591de483253SVishal Kulkarni 		0x301a8, 0x301b8,
592de483253SVishal Kulkarni 		0x301c4, 0x301c8,
593de483253SVishal Kulkarni 		0x301d0, 0x301d0,
594de483253SVishal Kulkarni 		0x30200, 0x30318,
595de483253SVishal Kulkarni 		0x30400, 0x304b4,
596de483253SVishal Kulkarni 		0x304c0, 0x3052c,
597de483253SVishal Kulkarni 		0x30540, 0x3061c,
598de483253SVishal Kulkarni 		0x30800, 0x30828,
599de483253SVishal Kulkarni 		0x30834, 0x30834,
600de483253SVishal Kulkarni 		0x308c0, 0x30908,
601de483253SVishal Kulkarni 		0x30910, 0x309ac,
602de483253SVishal Kulkarni 		0x30a00, 0x30a14,
603de483253SVishal Kulkarni 		0x30a1c, 0x30a2c,
604de483253SVishal Kulkarni 		0x30a44, 0x30a50,
605de483253SVishal Kulkarni 		0x30a74, 0x30a74,
606de483253SVishal Kulkarni 		0x30a7c, 0x30afc,
607de483253SVishal Kulkarni 		0x30b08, 0x30c24,
608de483253SVishal Kulkarni 		0x30d00, 0x30d00,
609de483253SVishal Kulkarni 		0x30d08, 0x30d14,
610de483253SVishal Kulkarni 		0x30d1c, 0x30d20,
611de483253SVishal Kulkarni 		0x30d3c, 0x30d3c,
612de483253SVishal Kulkarni 		0x30d48, 0x30d50,
613de483253SVishal Kulkarni 		0x31200, 0x3120c,
614de483253SVishal Kulkarni 		0x31220, 0x31220,
615de483253SVishal Kulkarni 		0x31240, 0x31240,
616de483253SVishal Kulkarni 		0x31600, 0x3160c,
617de483253SVishal Kulkarni 		0x31a00, 0x31a1c,
618de483253SVishal Kulkarni 		0x31e00, 0x31e20,
619de483253SVishal Kulkarni 		0x31e38, 0x31e3c,
620de483253SVishal Kulkarni 		0x31e80, 0x31e80,
621de483253SVishal Kulkarni 		0x31e88, 0x31ea8,
622de483253SVishal Kulkarni 		0x31eb0, 0x31eb4,
623de483253SVishal Kulkarni 		0x31ec8, 0x31ed4,
624de483253SVishal Kulkarni 		0x31fb8, 0x32004,
625de483253SVishal Kulkarni 		0x32200, 0x32200,
626de483253SVishal Kulkarni 		0x32208, 0x32240,
627de483253SVishal Kulkarni 		0x32248, 0x32280,
628de483253SVishal Kulkarni 		0x32288, 0x322c0,
629de483253SVishal Kulkarni 		0x322c8, 0x322fc,
630de483253SVishal Kulkarni 		0x32600, 0x32630,
631de483253SVishal Kulkarni 		0x32a00, 0x32abc,
632de483253SVishal Kulkarni 		0x32b00, 0x32b10,
633de483253SVishal Kulkarni 		0x32b20, 0x32b30,
634de483253SVishal Kulkarni 		0x32b40, 0x32b50,
635de483253SVishal Kulkarni 		0x32b60, 0x32b70,
636de483253SVishal Kulkarni 		0x33000, 0x33028,
637de483253SVishal Kulkarni 		0x33030, 0x33048,
638de483253SVishal Kulkarni 		0x33060, 0x33068,
639de483253SVishal Kulkarni 		0x33070, 0x3309c,
640de483253SVishal Kulkarni 		0x330f0, 0x33128,
641de483253SVishal Kulkarni 		0x33130, 0x33148,
642de483253SVishal Kulkarni 		0x33160, 0x33168,
643de483253SVishal Kulkarni 		0x33170, 0x3319c,
644de483253SVishal Kulkarni 		0x331f0, 0x33238,
645de483253SVishal Kulkarni 		0x33240, 0x33240,
646de483253SVishal Kulkarni 		0x33248, 0x33250,
647de483253SVishal Kulkarni 		0x3325c, 0x33264,
648de483253SVishal Kulkarni 		0x33270, 0x332b8,
649de483253SVishal Kulkarni 		0x332c0, 0x332e4,
650de483253SVishal Kulkarni 		0x332f8, 0x33338,
651de483253SVishal Kulkarni 		0x33340, 0x33340,
652de483253SVishal Kulkarni 		0x33348, 0x33350,
653de483253SVishal Kulkarni 		0x3335c, 0x33364,
654de483253SVishal Kulkarni 		0x33370, 0x333b8,
655de483253SVishal Kulkarni 		0x333c0, 0x333e4,
656de483253SVishal Kulkarni 		0x333f8, 0x33428,
657de483253SVishal Kulkarni 		0x33430, 0x33448,
658de483253SVishal Kulkarni 		0x33460, 0x33468,
659de483253SVishal Kulkarni 		0x33470, 0x3349c,
660de483253SVishal Kulkarni 		0x334f0, 0x33528,
661de483253SVishal Kulkarni 		0x33530, 0x33548,
662de483253SVishal Kulkarni 		0x33560, 0x33568,
663de483253SVishal Kulkarni 		0x33570, 0x3359c,
664de483253SVishal Kulkarni 		0x335f0, 0x33638,
665de483253SVishal Kulkarni 		0x33640, 0x33640,
666de483253SVishal Kulkarni 		0x33648, 0x33650,
667de483253SVishal Kulkarni 		0x3365c, 0x33664,
668de483253SVishal Kulkarni 		0x33670, 0x336b8,
669de483253SVishal Kulkarni 		0x336c0, 0x336e4,
670de483253SVishal Kulkarni 		0x336f8, 0x33738,
671de483253SVishal Kulkarni 		0x33740, 0x33740,
672de483253SVishal Kulkarni 		0x33748, 0x33750,
673de483253SVishal Kulkarni 		0x3375c, 0x33764,
674de483253SVishal Kulkarni 		0x33770, 0x337b8,
675de483253SVishal Kulkarni 		0x337c0, 0x337e4,
676de483253SVishal Kulkarni 		0x337f8, 0x337fc,
677de483253SVishal Kulkarni 		0x33814, 0x33814,
678de483253SVishal Kulkarni 		0x3382c, 0x3382c,
679de483253SVishal Kulkarni 		0x33880, 0x3388c,
680de483253SVishal Kulkarni 		0x338e8, 0x338ec,
681de483253SVishal Kulkarni 		0x33900, 0x33928,
682de483253SVishal Kulkarni 		0x33930, 0x33948,
683de483253SVishal Kulkarni 		0x33960, 0x33968,
684de483253SVishal Kulkarni 		0x33970, 0x3399c,
685de483253SVishal Kulkarni 		0x339f0, 0x33a38,
686de483253SVishal Kulkarni 		0x33a40, 0x33a40,
687de483253SVishal Kulkarni 		0x33a48, 0x33a50,
688de483253SVishal Kulkarni 		0x33a5c, 0x33a64,
689de483253SVishal Kulkarni 		0x33a70, 0x33ab8,
690de483253SVishal Kulkarni 		0x33ac0, 0x33ae4,
691de483253SVishal Kulkarni 		0x33af8, 0x33b10,
692de483253SVishal Kulkarni 		0x33b28, 0x33b28,
693de483253SVishal Kulkarni 		0x33b3c, 0x33b50,
694de483253SVishal Kulkarni 		0x33bf0, 0x33c10,
695de483253SVishal Kulkarni 		0x33c28, 0x33c28,
696de483253SVishal Kulkarni 		0x33c3c, 0x33c50,
697de483253SVishal Kulkarni 		0x33cf0, 0x33cfc,
698de483253SVishal Kulkarni 		0x34000, 0x34030,
699de483253SVishal Kulkarni 		0x34038, 0x34038,
700de483253SVishal Kulkarni 		0x34040, 0x34040,
701de483253SVishal Kulkarni 		0x34100, 0x34144,
702de483253SVishal Kulkarni 		0x34190, 0x341a0,
703de483253SVishal Kulkarni 		0x341a8, 0x341b8,
704de483253SVishal Kulkarni 		0x341c4, 0x341c8,
705de483253SVishal Kulkarni 		0x341d0, 0x341d0,
706de483253SVishal Kulkarni 		0x34200, 0x34318,
707de483253SVishal Kulkarni 		0x34400, 0x344b4,
708de483253SVishal Kulkarni 		0x344c0, 0x3452c,
709de483253SVishal Kulkarni 		0x34540, 0x3461c,
710de483253SVishal Kulkarni 		0x34800, 0x34828,
711de483253SVishal Kulkarni 		0x34834, 0x34834,
712de483253SVishal Kulkarni 		0x348c0, 0x34908,
713de483253SVishal Kulkarni 		0x34910, 0x349ac,
714de483253SVishal Kulkarni 		0x34a00, 0x34a14,
715de483253SVishal Kulkarni 		0x34a1c, 0x34a2c,
716de483253SVishal Kulkarni 		0x34a44, 0x34a50,
717de483253SVishal Kulkarni 		0x34a74, 0x34a74,
718de483253SVishal Kulkarni 		0x34a7c, 0x34afc,
719de483253SVishal Kulkarni 		0x34b08, 0x34c24,
720de483253SVishal Kulkarni 		0x34d00, 0x34d00,
721de483253SVishal Kulkarni 		0x34d08, 0x34d14,
722de483253SVishal Kulkarni 		0x34d1c, 0x34d20,
723de483253SVishal Kulkarni 		0x34d3c, 0x34d3c,
724de483253SVishal Kulkarni 		0x34d48, 0x34d50,
725de483253SVishal Kulkarni 		0x35200, 0x3520c,
726de483253SVishal Kulkarni 		0x35220, 0x35220,
727de483253SVishal Kulkarni 		0x35240, 0x35240,
728de483253SVishal Kulkarni 		0x35600, 0x3560c,
729de483253SVishal Kulkarni 		0x35a00, 0x35a1c,
730de483253SVishal Kulkarni 		0x35e00, 0x35e20,
731de483253SVishal Kulkarni 		0x35e38, 0x35e3c,
732de483253SVishal Kulkarni 		0x35e80, 0x35e80,
733de483253SVishal Kulkarni 		0x35e88, 0x35ea8,
734de483253SVishal Kulkarni 		0x35eb0, 0x35eb4,
735de483253SVishal Kulkarni 		0x35ec8, 0x35ed4,
736de483253SVishal Kulkarni 		0x35fb8, 0x36004,
737de483253SVishal Kulkarni 		0x36200, 0x36200,
738de483253SVishal Kulkarni 		0x36208, 0x36240,
739de483253SVishal Kulkarni 		0x36248, 0x36280,
740de483253SVishal Kulkarni 		0x36288, 0x362c0,
741de483253SVishal Kulkarni 		0x362c8, 0x362fc,
742de483253SVishal Kulkarni 		0x36600, 0x36630,
743de483253SVishal Kulkarni 		0x36a00, 0x36abc,
744de483253SVishal Kulkarni 		0x36b00, 0x36b10,
745de483253SVishal Kulkarni 		0x36b20, 0x36b30,
746de483253SVishal Kulkarni 		0x36b40, 0x36b50,
747de483253SVishal Kulkarni 		0x36b60, 0x36b70,
748de483253SVishal Kulkarni 		0x37000, 0x37028,
749de483253SVishal Kulkarni 		0x37030, 0x37048,
750de483253SVishal Kulkarni 		0x37060, 0x37068,
751de483253SVishal Kulkarni 		0x37070, 0x3709c,
752de483253SVishal Kulkarni 		0x370f0, 0x37128,
753de483253SVishal Kulkarni 		0x37130, 0x37148,
754de483253SVishal Kulkarni 		0x37160, 0x37168,
755de483253SVishal Kulkarni 		0x37170, 0x3719c,
756de483253SVishal Kulkarni 		0x371f0, 0x37238,
757de483253SVishal Kulkarni 		0x37240, 0x37240,
758de483253SVishal Kulkarni 		0x37248, 0x37250,
759de483253SVishal Kulkarni 		0x3725c, 0x37264,
760de483253SVishal Kulkarni 		0x37270, 0x372b8,
761de483253SVishal Kulkarni 		0x372c0, 0x372e4,
762de483253SVishal Kulkarni 		0x372f8, 0x37338,
763de483253SVishal Kulkarni 		0x37340, 0x37340,
764de483253SVishal Kulkarni 		0x37348, 0x37350,
765de483253SVishal Kulkarni 		0x3735c, 0x37364,
766de483253SVishal Kulkarni 		0x37370, 0x373b8,
767de483253SVishal Kulkarni 		0x373c0, 0x373e4,
768de483253SVishal Kulkarni 		0x373f8, 0x37428,
769de483253SVishal Kulkarni 		0x37430, 0x37448,
770de483253SVishal Kulkarni 		0x37460, 0x37468,
771de483253SVishal Kulkarni 		0x37470, 0x3749c,
772de483253SVishal Kulkarni 		0x374f0, 0x37528,
773de483253SVishal Kulkarni 		0x37530, 0x37548,
774de483253SVishal Kulkarni 		0x37560, 0x37568,
775de483253SVishal Kulkarni 		0x37570, 0x3759c,
776de483253SVishal Kulkarni 		0x375f0, 0x37638,
777de483253SVishal Kulkarni 		0x37640, 0x37640,
778de483253SVishal Kulkarni 		0x37648, 0x37650,
779de483253SVishal Kulkarni 		0x3765c, 0x37664,
780de483253SVishal Kulkarni 		0x37670, 0x376b8,
781de483253SVishal Kulkarni 		0x376c0, 0x376e4,
782de483253SVishal Kulkarni 		0x376f8, 0x37738,
783de483253SVishal Kulkarni 		0x37740, 0x37740,
784de483253SVishal Kulkarni 		0x37748, 0x37750,
785de483253SVishal Kulkarni 		0x3775c, 0x37764,
786de483253SVishal Kulkarni 		0x37770, 0x377b8,
787de483253SVishal Kulkarni 		0x377c0, 0x377e4,
788de483253SVishal Kulkarni 		0x377f8, 0x377fc,
789de483253SVishal Kulkarni 		0x37814, 0x37814,
790de483253SVishal Kulkarni 		0x3782c, 0x3782c,
791de483253SVishal Kulkarni 		0x37880, 0x3788c,
792de483253SVishal Kulkarni 		0x378e8, 0x378ec,
793de483253SVishal Kulkarni 		0x37900, 0x37928,
794de483253SVishal Kulkarni 		0x37930, 0x37948,
795de483253SVishal Kulkarni 		0x37960, 0x37968,
796de483253SVishal Kulkarni 		0x37970, 0x3799c,
797de483253SVishal Kulkarni 		0x379f0, 0x37a38,
798de483253SVishal Kulkarni 		0x37a40, 0x37a40,
799de483253SVishal Kulkarni 		0x37a48, 0x37a50,
800de483253SVishal Kulkarni 		0x37a5c, 0x37a64,
801de483253SVishal Kulkarni 		0x37a70, 0x37ab8,
802de483253SVishal Kulkarni 		0x37ac0, 0x37ae4,
803de483253SVishal Kulkarni 		0x37af8, 0x37b10,
804de483253SVishal Kulkarni 		0x37b28, 0x37b28,
805de483253SVishal Kulkarni 		0x37b3c, 0x37b50,
806de483253SVishal Kulkarni 		0x37bf0, 0x37c10,
807de483253SVishal Kulkarni 		0x37c28, 0x37c28,
808de483253SVishal Kulkarni 		0x37c3c, 0x37c50,
809de483253SVishal Kulkarni 		0x37cf0, 0x37cfc,
810de483253SVishal Kulkarni 		0x38000, 0x38030,
811de483253SVishal Kulkarni 		0x38038, 0x38038,
812de483253SVishal Kulkarni 		0x38040, 0x38040,
813de483253SVishal Kulkarni 		0x38100, 0x38144,
814de483253SVishal Kulkarni 		0x38190, 0x381a0,
815de483253SVishal Kulkarni 		0x381a8, 0x381b8,
816de483253SVishal Kulkarni 		0x381c4, 0x381c8,
817de483253SVishal Kulkarni 		0x381d0, 0x381d0,
818de483253SVishal Kulkarni 		0x38200, 0x38318,
819de483253SVishal Kulkarni 		0x38400, 0x384b4,
820de483253SVishal Kulkarni 		0x384c0, 0x3852c,
821de483253SVishal Kulkarni 		0x38540, 0x3861c,
822de483253SVishal Kulkarni 		0x38800, 0x38828,
823de483253SVishal Kulkarni 		0x38834, 0x38834,
824de483253SVishal Kulkarni 		0x388c0, 0x38908,
825de483253SVishal Kulkarni 		0x38910, 0x389ac,
826de483253SVishal Kulkarni 		0x38a00, 0x38a14,
827de483253SVishal Kulkarni 		0x38a1c, 0x38a2c,
828de483253SVishal Kulkarni 		0x38a44, 0x38a50,
829de483253SVishal Kulkarni 		0x38a74, 0x38a74,
830de483253SVishal Kulkarni 		0x38a7c, 0x38afc,
831de483253SVishal Kulkarni 		0x38b08, 0x38c24,
832de483253SVishal Kulkarni 		0x38d00, 0x38d00,
833de483253SVishal Kulkarni 		0x38d08, 0x38d14,
834de483253SVishal Kulkarni 		0x38d1c, 0x38d20,
835de483253SVishal Kulkarni 		0x38d3c, 0x38d3c,
836de483253SVishal Kulkarni 		0x38d48, 0x38d50,
837de483253SVishal Kulkarni 		0x39200, 0x3920c,
838de483253SVishal Kulkarni 		0x39220, 0x39220,
839de483253SVishal Kulkarni 		0x39240, 0x39240,
840de483253SVishal Kulkarni 		0x39600, 0x3960c,
841de483253SVishal Kulkarni 		0x39a00, 0x39a1c,
842de483253SVishal Kulkarni 		0x39e00, 0x39e20,
843de483253SVishal Kulkarni 		0x39e38, 0x39e3c,
844de483253SVishal Kulkarni 		0x39e80, 0x39e80,
845de483253SVishal Kulkarni 		0x39e88, 0x39ea8,
846de483253SVishal Kulkarni 		0x39eb0, 0x39eb4,
847de483253SVishal Kulkarni 		0x39ec8, 0x39ed4,
848de483253SVishal Kulkarni 		0x39fb8, 0x3a004,
849de483253SVishal Kulkarni 		0x3a200, 0x3a200,
850de483253SVishal Kulkarni 		0x3a208, 0x3a240,
851de483253SVishal Kulkarni 		0x3a248, 0x3a280,
852de483253SVishal Kulkarni 		0x3a288, 0x3a2c0,
853de483253SVishal Kulkarni 		0x3a2c8, 0x3a2fc,
854de483253SVishal Kulkarni 		0x3a600, 0x3a630,
855de483253SVishal Kulkarni 		0x3aa00, 0x3aabc,
856de483253SVishal Kulkarni 		0x3ab00, 0x3ab10,
857de483253SVishal Kulkarni 		0x3ab20, 0x3ab30,
858de483253SVishal Kulkarni 		0x3ab40, 0x3ab50,
859de483253SVishal Kulkarni 		0x3ab60, 0x3ab70,
860de483253SVishal Kulkarni 		0x3b000, 0x3b028,
861de483253SVishal Kulkarni 		0x3b030, 0x3b048,
862de483253SVishal Kulkarni 		0x3b060, 0x3b068,
863de483253SVishal Kulkarni 		0x3b070, 0x3b09c,
864de483253SVishal Kulkarni 		0x3b0f0, 0x3b128,
865de483253SVishal Kulkarni 		0x3b130, 0x3b148,
866de483253SVishal Kulkarni 		0x3b160, 0x3b168,
867de483253SVishal Kulkarni 		0x3b170, 0x3b19c,
868de483253SVishal Kulkarni 		0x3b1f0, 0x3b238,
869de483253SVishal Kulkarni 		0x3b240, 0x3b240,
870de483253SVishal Kulkarni 		0x3b248, 0x3b250,
871de483253SVishal Kulkarni 		0x3b25c, 0x3b264,
872de483253SVishal Kulkarni 		0x3b270, 0x3b2b8,
873de483253SVishal Kulkarni 		0x3b2c0, 0x3b2e4,
874de483253SVishal Kulkarni 		0x3b2f8, 0x3b338,
875de483253SVishal Kulkarni 		0x3b340, 0x3b340,
876de483253SVishal Kulkarni 		0x3b348, 0x3b350,
877de483253SVishal Kulkarni 		0x3b35c, 0x3b364,
878de483253SVishal Kulkarni 		0x3b370, 0x3b3b8,
879de483253SVishal Kulkarni 		0x3b3c0, 0x3b3e4,
880de483253SVishal Kulkarni 		0x3b3f8, 0x3b428,
881de483253SVishal Kulkarni 		0x3b430, 0x3b448,
882de483253SVishal Kulkarni 		0x3b460, 0x3b468,
883de483253SVishal Kulkarni 		0x3b470, 0x3b49c,
884de483253SVishal Kulkarni 		0x3b4f0, 0x3b528,
885de483253SVishal Kulkarni 		0x3b530, 0x3b548,
886de483253SVishal Kulkarni 		0x3b560, 0x3b568,
887de483253SVishal Kulkarni 		0x3b570, 0x3b59c,
888de483253SVishal Kulkarni 		0x3b5f0, 0x3b638,
889de483253SVishal Kulkarni 		0x3b640, 0x3b640,
890de483253SVishal Kulkarni 		0x3b648, 0x3b650,
891de483253SVishal Kulkarni 		0x3b65c, 0x3b664,
892de483253SVishal Kulkarni 		0x3b670, 0x3b6b8,
893de483253SVishal Kulkarni 		0x3b6c0, 0x3b6e4,
894de483253SVishal Kulkarni 		0x3b6f8, 0x3b738,
895de483253SVishal Kulkarni 		0x3b740, 0x3b740,
896de483253SVishal Kulkarni 		0x3b748, 0x3b750,
897de483253SVishal Kulkarni 		0x3b75c, 0x3b764,
898de483253SVishal Kulkarni 		0x3b770, 0x3b7b8,
899de483253SVishal Kulkarni 		0x3b7c0, 0x3b7e4,
900de483253SVishal Kulkarni 		0x3b7f8, 0x3b7fc,
901de483253SVishal Kulkarni 		0x3b814, 0x3b814,
902de483253SVishal Kulkarni 		0x3b82c, 0x3b82c,
903de483253SVishal Kulkarni 		0x3b880, 0x3b88c,
904de483253SVishal Kulkarni 		0x3b8e8, 0x3b8ec,
905de483253SVishal Kulkarni 		0x3b900, 0x3b928,
906de483253SVishal Kulkarni 		0x3b930, 0x3b948,
907de483253SVishal Kulkarni 		0x3b960, 0x3b968,
908de483253SVishal Kulkarni 		0x3b970, 0x3b99c,
909de483253SVishal Kulkarni 		0x3b9f0, 0x3ba38,
910de483253SVishal Kulkarni 		0x3ba40, 0x3ba40,
911de483253SVishal Kulkarni 		0x3ba48, 0x3ba50,
912de483253SVishal Kulkarni 		0x3ba5c, 0x3ba64,
913de483253SVishal Kulkarni 		0x3ba70, 0x3bab8,
914de483253SVishal Kulkarni 		0x3bac0, 0x3bae4,
915de483253SVishal Kulkarni 		0x3baf8, 0x3bb10,
916de483253SVishal Kulkarni 		0x3bb28, 0x3bb28,
917de483253SVishal Kulkarni 		0x3bb3c, 0x3bb50,
918de483253SVishal Kulkarni 		0x3bbf0, 0x3bc10,
919de483253SVishal Kulkarni 		0x3bc28, 0x3bc28,
920de483253SVishal Kulkarni 		0x3bc3c, 0x3bc50,
921de483253SVishal Kulkarni 		0x3bcf0, 0x3bcfc,
922de483253SVishal Kulkarni 		0x3c000, 0x3c030,
923de483253SVishal Kulkarni 		0x3c038, 0x3c038,
924de483253SVishal Kulkarni 		0x3c040, 0x3c040,
925de483253SVishal Kulkarni 		0x3c100, 0x3c144,
926de483253SVishal Kulkarni 		0x3c190, 0x3c1a0,
927de483253SVishal Kulkarni 		0x3c1a8, 0x3c1b8,
928de483253SVishal Kulkarni 		0x3c1c4, 0x3c1c8,
929de483253SVishal Kulkarni 		0x3c1d0, 0x3c1d0,
930de483253SVishal Kulkarni 		0x3c200, 0x3c318,
931de483253SVishal Kulkarni 		0x3c400, 0x3c4b4,
932de483253SVishal Kulkarni 		0x3c4c0, 0x3c52c,
933de483253SVishal Kulkarni 		0x3c540, 0x3c61c,
934de483253SVishal Kulkarni 		0x3c800, 0x3c828,
935de483253SVishal Kulkarni 		0x3c834, 0x3c834,
936de483253SVishal Kulkarni 		0x3c8c0, 0x3c908,
937de483253SVishal Kulkarni 		0x3c910, 0x3c9ac,
938de483253SVishal Kulkarni 		0x3ca00, 0x3ca14,
939de483253SVishal Kulkarni 		0x3ca1c, 0x3ca2c,
940de483253SVishal Kulkarni 		0x3ca44, 0x3ca50,
941de483253SVishal Kulkarni 		0x3ca74, 0x3ca74,
942de483253SVishal Kulkarni 		0x3ca7c, 0x3cafc,
943de483253SVishal Kulkarni 		0x3cb08, 0x3cc24,
944de483253SVishal Kulkarni 		0x3cd00, 0x3cd00,
945de483253SVishal Kulkarni 		0x3cd08, 0x3cd14,
946de483253SVishal Kulkarni 		0x3cd1c, 0x3cd20,
947de483253SVishal Kulkarni 		0x3cd3c, 0x3cd3c,
948de483253SVishal Kulkarni 		0x3cd48, 0x3cd50,
949de483253SVishal Kulkarni 		0x3d200, 0x3d20c,
950de483253SVishal Kulkarni 		0x3d220, 0x3d220,
951de483253SVishal Kulkarni 		0x3d240, 0x3d240,
952de483253SVishal Kulkarni 		0x3d600, 0x3d60c,
953de483253SVishal Kulkarni 		0x3da00, 0x3da1c,
954de483253SVishal Kulkarni 		0x3de00, 0x3de20,
955de483253SVishal Kulkarni 		0x3de38, 0x3de3c,
956de483253SVishal Kulkarni 		0x3de80, 0x3de80,
957de483253SVishal Kulkarni 		0x3de88, 0x3dea8,
958de483253SVishal Kulkarni 		0x3deb0, 0x3deb4,
959de483253SVishal Kulkarni 		0x3dec8, 0x3ded4,
960de483253SVishal Kulkarni 		0x3dfb8, 0x3e004,
961de483253SVishal Kulkarni 		0x3e200, 0x3e200,
962de483253SVishal Kulkarni 		0x3e208, 0x3e240,
963de483253SVishal Kulkarni 		0x3e248, 0x3e280,
964de483253SVishal Kulkarni 		0x3e288, 0x3e2c0,
965de483253SVishal Kulkarni 		0x3e2c8, 0x3e2fc,
966de483253SVishal Kulkarni 		0x3e600, 0x3e630,
967de483253SVishal Kulkarni 		0x3ea00, 0x3eabc,
968de483253SVishal Kulkarni 		0x3eb00, 0x3eb10,
969de483253SVishal Kulkarni 		0x3eb20, 0x3eb30,
970de483253SVishal Kulkarni 		0x3eb40, 0x3eb50,
971de483253SVishal Kulkarni 		0x3eb60, 0x3eb70,
972de483253SVishal Kulkarni 		0x3f000, 0x3f028,
973de483253SVishal Kulkarni 		0x3f030, 0x3f048,
974de483253SVishal Kulkarni 		0x3f060, 0x3f068,
975de483253SVishal Kulkarni 		0x3f070, 0x3f09c,
976de483253SVishal Kulkarni 		0x3f0f0, 0x3f128,
977de483253SVishal Kulkarni 		0x3f130, 0x3f148,
978de483253SVishal Kulkarni 		0x3f160, 0x3f168,
979de483253SVishal Kulkarni 		0x3f170, 0x3f19c,
980de483253SVishal Kulkarni 		0x3f1f0, 0x3f238,
981de483253SVishal Kulkarni 		0x3f240, 0x3f240,
982de483253SVishal Kulkarni 		0x3f248, 0x3f250,
983de483253SVishal Kulkarni 		0x3f25c, 0x3f264,
984de483253SVishal Kulkarni 		0x3f270, 0x3f2b8,
985de483253SVishal Kulkarni 		0x3f2c0, 0x3f2e4,
986de483253SVishal Kulkarni 		0x3f2f8, 0x3f338,
987de483253SVishal Kulkarni 		0x3f340, 0x3f340,
988de483253SVishal Kulkarni 		0x3f348, 0x3f350,
989de483253SVishal Kulkarni 		0x3f35c, 0x3f364,
990de483253SVishal Kulkarni 		0x3f370, 0x3f3b8,
991de483253SVishal Kulkarni 		0x3f3c0, 0x3f3e4,
992de483253SVishal Kulkarni 		0x3f3f8, 0x3f428,
993de483253SVishal Kulkarni 		0x3f430, 0x3f448,
994de483253SVishal Kulkarni 		0x3f460, 0x3f468,
995de483253SVishal Kulkarni 		0x3f470, 0x3f49c,
996de483253SVishal Kulkarni 		0x3f4f0, 0x3f528,
997de483253SVishal Kulkarni 		0x3f530, 0x3f548,
998de483253SVishal Kulkarni 		0x3f560, 0x3f568,
999de483253SVishal Kulkarni 		0x3f570, 0x3f59c,
1000de483253SVishal Kulkarni 		0x3f5f0, 0x3f638,
1001de483253SVishal Kulkarni 		0x3f640, 0x3f640,
1002de483253SVishal Kulkarni 		0x3f648, 0x3f650,
1003de483253SVishal Kulkarni 		0x3f65c, 0x3f664,
1004de483253SVishal Kulkarni 		0x3f670, 0x3f6b8,
1005de483253SVishal Kulkarni 		0x3f6c0, 0x3f6e4,
1006de483253SVishal Kulkarni 		0x3f6f8, 0x3f738,
1007de483253SVishal Kulkarni 		0x3f740, 0x3f740,
1008de483253SVishal Kulkarni 		0x3f748, 0x3f750,
1009de483253SVishal Kulkarni 		0x3f75c, 0x3f764,
1010de483253SVishal Kulkarni 		0x3f770, 0x3f7b8,
1011de483253SVishal Kulkarni 		0x3f7c0, 0x3f7e4,
1012de483253SVishal Kulkarni 		0x3f7f8, 0x3f7fc,
1013de483253SVishal Kulkarni 		0x3f814, 0x3f814,
1014de483253SVishal Kulkarni 		0x3f82c, 0x3f82c,
1015de483253SVishal Kulkarni 		0x3f880, 0x3f88c,
1016de483253SVishal Kulkarni 		0x3f8e8, 0x3f8ec,
1017de483253SVishal Kulkarni 		0x3f900, 0x3f928,
1018de483253SVishal Kulkarni 		0x3f930, 0x3f948,
1019de483253SVishal Kulkarni 		0x3f960, 0x3f968,
1020de483253SVishal Kulkarni 		0x3f970, 0x3f99c,
1021de483253SVishal Kulkarni 		0x3f9f0, 0x3fa38,
1022de483253SVishal Kulkarni 		0x3fa40, 0x3fa40,
1023de483253SVishal Kulkarni 		0x3fa48, 0x3fa50,
1024de483253SVishal Kulkarni 		0x3fa5c, 0x3fa64,
1025de483253SVishal Kulkarni 		0x3fa70, 0x3fab8,
1026de483253SVishal Kulkarni 		0x3fac0, 0x3fae4,
1027de483253SVishal Kulkarni 		0x3faf8, 0x3fb10,
1028de483253SVishal Kulkarni 		0x3fb28, 0x3fb28,
1029de483253SVishal Kulkarni 		0x3fb3c, 0x3fb50,
1030de483253SVishal Kulkarni 		0x3fbf0, 0x3fc10,
1031de483253SVishal Kulkarni 		0x3fc28, 0x3fc28,
1032de483253SVishal Kulkarni 		0x3fc3c, 0x3fc50,
1033de483253SVishal Kulkarni 		0x3fcf0, 0x3fcfc,
1034de483253SVishal Kulkarni 		0x40000, 0x4000c,
1035de483253SVishal Kulkarni 		0x40040, 0x40050,
1036de483253SVishal Kulkarni 		0x40060, 0x40068,
1037de483253SVishal Kulkarni 		0x4007c, 0x4008c,
1038de483253SVishal Kulkarni 		0x40094, 0x400b0,
1039de483253SVishal Kulkarni 		0x400c0, 0x40144,
1040de483253SVishal Kulkarni 		0x40180, 0x4018c,
1041de483253SVishal Kulkarni 		0x40200, 0x40254,
1042de483253SVishal Kulkarni 		0x40260, 0x40264,
1043de483253SVishal Kulkarni 		0x40270, 0x40288,
1044de483253SVishal Kulkarni 		0x40290, 0x40298,
1045de483253SVishal Kulkarni 		0x402ac, 0x402c8,
1046de483253SVishal Kulkarni 		0x402d0, 0x402e0,
1047de483253SVishal Kulkarni 		0x402f0, 0x402f0,
1048de483253SVishal Kulkarni 		0x40300, 0x4033c,
1049de483253SVishal Kulkarni 		0x403f8, 0x403fc,
1050de483253SVishal Kulkarni 		0x41304, 0x413c4,
1051de483253SVishal Kulkarni 		0x41400, 0x4140c,
1052de483253SVishal Kulkarni 		0x41414, 0x4141c,
1053de483253SVishal Kulkarni 		0x41480, 0x414d0,
1054de483253SVishal Kulkarni 		0x44000, 0x44054,
1055de483253SVishal Kulkarni 		0x4405c, 0x44078,
1056de483253SVishal Kulkarni 		0x440c0, 0x44174,
1057de483253SVishal Kulkarni 		0x44180, 0x441ac,
1058de483253SVishal Kulkarni 		0x441b4, 0x441b8,
1059de483253SVishal Kulkarni 		0x441c0, 0x44254,
1060de483253SVishal Kulkarni 		0x4425c, 0x44278,
1061de483253SVishal Kulkarni 		0x442c0, 0x44374,
1062de483253SVishal Kulkarni 		0x44380, 0x443ac,
1063de483253SVishal Kulkarni 		0x443b4, 0x443b8,
1064de483253SVishal Kulkarni 		0x443c0, 0x44454,
1065de483253SVishal Kulkarni 		0x4445c, 0x44478,
1066de483253SVishal Kulkarni 		0x444c0, 0x44574,
1067de483253SVishal Kulkarni 		0x44580, 0x445ac,
1068de483253SVishal Kulkarni 		0x445b4, 0x445b8,
1069de483253SVishal Kulkarni 		0x445c0, 0x44654,
1070de483253SVishal Kulkarni 		0x4465c, 0x44678,
1071de483253SVishal Kulkarni 		0x446c0, 0x44774,
1072de483253SVishal Kulkarni 		0x44780, 0x447ac,
1073de483253SVishal Kulkarni 		0x447b4, 0x447b8,
1074de483253SVishal Kulkarni 		0x447c0, 0x44854,
1075de483253SVishal Kulkarni 		0x4485c, 0x44878,
1076de483253SVishal Kulkarni 		0x448c0, 0x44974,
1077de483253SVishal Kulkarni 		0x44980, 0x449ac,
1078de483253SVishal Kulkarni 		0x449b4, 0x449b8,
1079de483253SVishal Kulkarni 		0x449c0, 0x449fc,
1080de483253SVishal Kulkarni 		0x45000, 0x45004,
1081de483253SVishal Kulkarni 		0x45010, 0x45030,
1082de483253SVishal Kulkarni 		0x45040, 0x45060,
1083de483253SVishal Kulkarni 		0x45068, 0x45068,
1084de483253SVishal Kulkarni 		0x45080, 0x45084,
1085de483253SVishal Kulkarni 		0x450a0, 0x450b0,
1086de483253SVishal Kulkarni 		0x45200, 0x45204,
1087de483253SVishal Kulkarni 		0x45210, 0x45230,
1088de483253SVishal Kulkarni 		0x45240, 0x45260,
1089de483253SVishal Kulkarni 		0x45268, 0x45268,
1090de483253SVishal Kulkarni 		0x45280, 0x45284,
1091de483253SVishal Kulkarni 		0x452a0, 0x452b0,
1092de483253SVishal Kulkarni 		0x460c0, 0x460e4,
1093de483253SVishal Kulkarni 		0x47000, 0x4703c,
1094de483253SVishal Kulkarni 		0x47044, 0x4708c,
1095de483253SVishal Kulkarni 		0x47200, 0x47250,
1096de483253SVishal Kulkarni 		0x47400, 0x47408,
1097de483253SVishal Kulkarni 		0x47414, 0x47420,
1098de483253SVishal Kulkarni 		0x47600, 0x47618,
1099de483253SVishal Kulkarni 		0x47800, 0x47814,
1100de483253SVishal Kulkarni 		0x48000, 0x4800c,
1101de483253SVishal Kulkarni 		0x48040, 0x48050,
1102de483253SVishal Kulkarni 		0x48060, 0x48068,
1103de483253SVishal Kulkarni 		0x4807c, 0x4808c,
1104de483253SVishal Kulkarni 		0x48094, 0x480b0,
1105de483253SVishal Kulkarni 		0x480c0, 0x48144,
1106de483253SVishal Kulkarni 		0x48180, 0x4818c,
1107de483253SVishal Kulkarni 		0x48200, 0x48254,
1108de483253SVishal Kulkarni 		0x48260, 0x48264,
1109de483253SVishal Kulkarni 		0x48270, 0x48288,
1110de483253SVishal Kulkarni 		0x48290, 0x48298,
1111de483253SVishal Kulkarni 		0x482ac, 0x482c8,
1112de483253SVishal Kulkarni 		0x482d0, 0x482e0,
1113de483253SVishal Kulkarni 		0x482f0, 0x482f0,
1114de483253SVishal Kulkarni 		0x48300, 0x4833c,
1115de483253SVishal Kulkarni 		0x483f8, 0x483fc,
1116de483253SVishal Kulkarni 		0x49304, 0x493c4,
1117de483253SVishal Kulkarni 		0x49400, 0x4940c,
1118de483253SVishal Kulkarni 		0x49414, 0x4941c,
1119de483253SVishal Kulkarni 		0x49480, 0x494d0,
1120de483253SVishal Kulkarni 		0x4c000, 0x4c054,
1121de483253SVishal Kulkarni 		0x4c05c, 0x4c078,
1122de483253SVishal Kulkarni 		0x4c0c0, 0x4c174,
1123de483253SVishal Kulkarni 		0x4c180, 0x4c1ac,
1124de483253SVishal Kulkarni 		0x4c1b4, 0x4c1b8,
1125de483253SVishal Kulkarni 		0x4c1c0, 0x4c254,
1126de483253SVishal Kulkarni 		0x4c25c, 0x4c278,
1127de483253SVishal Kulkarni 		0x4c2c0, 0x4c374,
1128de483253SVishal Kulkarni 		0x4c380, 0x4c3ac,
1129de483253SVishal Kulkarni 		0x4c3b4, 0x4c3b8,
1130de483253SVishal Kulkarni 		0x4c3c0, 0x4c454,
1131de483253SVishal Kulkarni 		0x4c45c, 0x4c478,
1132de483253SVishal Kulkarni 		0x4c4c0, 0x4c574,
1133de483253SVishal Kulkarni 		0x4c580, 0x4c5ac,
1134de483253SVishal Kulkarni 		0x4c5b4, 0x4c5b8,
1135de483253SVishal Kulkarni 		0x4c5c0, 0x4c654,
1136de483253SVishal Kulkarni 		0x4c65c, 0x4c678,
1137de483253SVishal Kulkarni 		0x4c6c0, 0x4c774,
1138de483253SVishal Kulkarni 		0x4c780, 0x4c7ac,
1139de483253SVishal Kulkarni 		0x4c7b4, 0x4c7b8,
1140de483253SVishal Kulkarni 		0x4c7c0, 0x4c854,
1141de483253SVishal Kulkarni 		0x4c85c, 0x4c878,
1142de483253SVishal Kulkarni 		0x4c8c0, 0x4c974,
1143de483253SVishal Kulkarni 		0x4c980, 0x4c9ac,
1144de483253SVishal Kulkarni 		0x4c9b4, 0x4c9b8,
1145de483253SVishal Kulkarni 		0x4c9c0, 0x4c9fc,
1146de483253SVishal Kulkarni 		0x4d000, 0x4d004,
1147de483253SVishal Kulkarni 		0x4d010, 0x4d030,
1148de483253SVishal Kulkarni 		0x4d040, 0x4d060,
1149de483253SVishal Kulkarni 		0x4d068, 0x4d068,
1150de483253SVishal Kulkarni 		0x4d080, 0x4d084,
1151de483253SVishal Kulkarni 		0x4d0a0, 0x4d0b0,
1152de483253SVishal Kulkarni 		0x4d200, 0x4d204,
1153de483253SVishal Kulkarni 		0x4d210, 0x4d230,
1154de483253SVishal Kulkarni 		0x4d240, 0x4d260,
1155de483253SVishal Kulkarni 		0x4d268, 0x4d268,
1156de483253SVishal Kulkarni 		0x4d280, 0x4d284,
1157de483253SVishal Kulkarni 		0x4d2a0, 0x4d2b0,
1158de483253SVishal Kulkarni 		0x4e0c0, 0x4e0e4,
1159de483253SVishal Kulkarni 		0x4f000, 0x4f03c,
1160de483253SVishal Kulkarni 		0x4f044, 0x4f08c,
1161de483253SVishal Kulkarni 		0x4f200, 0x4f250,
1162de483253SVishal Kulkarni 		0x4f400, 0x4f408,
1163de483253SVishal Kulkarni 		0x4f414, 0x4f420,
1164de483253SVishal Kulkarni 		0x4f600, 0x4f618,
1165de483253SVishal Kulkarni 		0x4f800, 0x4f814,
1166de483253SVishal Kulkarni 		0x50000, 0x50084,
1167de483253SVishal Kulkarni 		0x50090, 0x500cc,
1168de483253SVishal Kulkarni 		0x50400, 0x50400,
1169de483253SVishal Kulkarni 		0x50800, 0x50884,
1170de483253SVishal Kulkarni 		0x50890, 0x508cc,
1171de483253SVishal Kulkarni 		0x50c00, 0x50c00,
1172de483253SVishal Kulkarni 		0x51000, 0x5101c,
1173de483253SVishal Kulkarni 		0x51300, 0x51308,
1174de483253SVishal Kulkarni 	};
1175de483253SVishal Kulkarni 
117656b2bdd1SGireesh Nagabhushana 	if (ddi_copyin(data, &r, sizeof (r), flags) < 0)
117756b2bdd1SGireesh Nagabhushana 		return (EFAULT);
117856b2bdd1SGireesh Nagabhushana 
117956b2bdd1SGireesh Nagabhushana 	if (r.len > T4_REGDUMP_SIZE)
118056b2bdd1SGireesh Nagabhushana 		r.len = T4_REGDUMP_SIZE;
118156b2bdd1SGireesh Nagabhushana 	else if (r.len < T4_REGDUMP_SIZE)
118256b2bdd1SGireesh Nagabhushana 		return (E2BIG);
118356b2bdd1SGireesh Nagabhushana 
1184de483253SVishal Kulkarni 	r.version = mk_adap_vers(sc);
118556b2bdd1SGireesh Nagabhushana 
1186de483253SVishal Kulkarni 	if (is_t4(sc->params.chip)) {
1187de483253SVishal Kulkarni 		reg_ranges = &t4_reg_ranges[0];
1188de483253SVishal Kulkarni 		arr_size = ARRAY_SIZE(t4_reg_ranges);
1189de483253SVishal Kulkarni 		buf_size = T4_REGDUMP_SIZE;
1190de483253SVishal Kulkarni 	} else {
1191de483253SVishal Kulkarni 		reg_ranges = &t5_reg_ranges[0];
1192de483253SVishal Kulkarni 		arr_size = ARRAY_SIZE(t5_reg_ranges);
1193de483253SVishal Kulkarni 		buf_size = T5_REGDUMP_SIZE;
1194de483253SVishal Kulkarni 	}
1195de483253SVishal Kulkarni 
1196de483253SVishal Kulkarni 	buf = kmem_zalloc(buf_size, KM_SLEEP);
1197de483253SVishal Kulkarni 	if (buf == NULL)
1198de483253SVishal Kulkarni 		return (ENOMEM);
1199de483253SVishal Kulkarni 
1200de483253SVishal Kulkarni 	for (i = 0; i < arr_size; i += 2)
120156b2bdd1SGireesh Nagabhushana 		reg_block_dump(sc, buf, reg_ranges[i], reg_ranges[i + 1]);
120256b2bdd1SGireesh Nagabhushana 
120356b2bdd1SGireesh Nagabhushana 	if (ddi_copyout(buf, r.data, r.len, flags) < 0)
120456b2bdd1SGireesh Nagabhushana 		rc = EFAULT;
120556b2bdd1SGireesh Nagabhushana 
120656b2bdd1SGireesh Nagabhushana 	if (rc == 0 && ddi_copyout(&r, data, sizeof (r), flags) < 0)
120756b2bdd1SGireesh Nagabhushana 		rc = EFAULT;
120856b2bdd1SGireesh Nagabhushana 
1209de483253SVishal Kulkarni 	kmem_free(buf, buf_size);
121056b2bdd1SGireesh Nagabhushana 	return (rc);
121156b2bdd1SGireesh Nagabhushana }
121256b2bdd1SGireesh Nagabhushana 
121356b2bdd1SGireesh Nagabhushana static int
121456b2bdd1SGireesh Nagabhushana get_sge_context(struct adapter *sc, void *data, int flags)
121556b2bdd1SGireesh Nagabhushana {
121656b2bdd1SGireesh Nagabhushana 	struct t4_sge_context sgec;
121756b2bdd1SGireesh Nagabhushana 	uint32_t buff[SGE_CTXT_SIZE / 4];
121856b2bdd1SGireesh Nagabhushana 	int rc = 0;
121956b2bdd1SGireesh Nagabhushana 
122056b2bdd1SGireesh Nagabhushana 	if (ddi_copyin(data, &sgec, sizeof (sgec), flags) < 0) {
122156b2bdd1SGireesh Nagabhushana 		rc = EFAULT;
122256b2bdd1SGireesh Nagabhushana 		goto _exit;
122356b2bdd1SGireesh Nagabhushana 	}
122456b2bdd1SGireesh Nagabhushana 
122556b2bdd1SGireesh Nagabhushana 	if (sgec.len < SGE_CTXT_SIZE || sgec.addr > M_CTXTQID) {
122656b2bdd1SGireesh Nagabhushana 		rc = EINVAL;
122756b2bdd1SGireesh Nagabhushana 		goto _exit;
122856b2bdd1SGireesh Nagabhushana 	}
122956b2bdd1SGireesh Nagabhushana 
123056b2bdd1SGireesh Nagabhushana 	if ((sgec.mem_id != T4_CTXT_EGRESS) && (sgec.mem_id != T4_CTXT_FLM) &&
123156b2bdd1SGireesh Nagabhushana 	    (sgec.mem_id != T4_CTXT_INGRESS)) {
123256b2bdd1SGireesh Nagabhushana 		rc = EINVAL;
123356b2bdd1SGireesh Nagabhushana 		goto _exit;
123456b2bdd1SGireesh Nagabhushana 	}
123556b2bdd1SGireesh Nagabhushana 
123656b2bdd1SGireesh Nagabhushana 	rc = (sc->flags & FW_OK) ?
123756b2bdd1SGireesh Nagabhushana 	    -t4_sge_ctxt_rd(sc, sc->mbox, sgec.addr, sgec.mem_id, buff) :
123856b2bdd1SGireesh Nagabhushana 	    -t4_sge_ctxt_rd_bd(sc, sgec.addr, sgec.mem_id, buff);
123956b2bdd1SGireesh Nagabhushana 	if (rc != 0)
124056b2bdd1SGireesh Nagabhushana 		goto _exit;
124156b2bdd1SGireesh Nagabhushana 
12423dde7c95SVishal Kulkarni 	sgec.version = 4 | (sc->params.chip << 10);
124356b2bdd1SGireesh Nagabhushana 
124456b2bdd1SGireesh Nagabhushana 	/* copyout data and then t4_sge_context */
124556b2bdd1SGireesh Nagabhushana 	rc = ddi_copyout(buff, sgec.data, sgec.len, flags);
124656b2bdd1SGireesh Nagabhushana 	if (rc == 0)
124756b2bdd1SGireesh Nagabhushana 		rc = ddi_copyout(&sgec, data, sizeof (sgec), flags);
124856b2bdd1SGireesh Nagabhushana 	/* if ddi_copyout fails, return EFAULT - for either of the two */
124956b2bdd1SGireesh Nagabhushana 	if (rc != 0)
125056b2bdd1SGireesh Nagabhushana 		rc = EFAULT;
125156b2bdd1SGireesh Nagabhushana 
125256b2bdd1SGireesh Nagabhushana _exit:
125356b2bdd1SGireesh Nagabhushana 	return (rc);
125456b2bdd1SGireesh Nagabhushana }
125556b2bdd1SGireesh Nagabhushana 
125656b2bdd1SGireesh Nagabhushana static int
125756b2bdd1SGireesh Nagabhushana read_tid_tab(struct adapter *sc, void *data, int flags)
125856b2bdd1SGireesh Nagabhushana {
125956b2bdd1SGireesh Nagabhushana 	struct t4_tid_info t4tid;
126056b2bdd1SGireesh Nagabhushana 	uint32_t *buf, *b;
126156b2bdd1SGireesh Nagabhushana 	struct tid_info *t = &sc->tids;
126256b2bdd1SGireesh Nagabhushana 	int rc = 0;
126356b2bdd1SGireesh Nagabhushana 
126456b2bdd1SGireesh Nagabhushana 	if (ddi_copyin(data, &t4tid, sizeof (t4tid), flags) < 0) {
126556b2bdd1SGireesh Nagabhushana 		rc = EFAULT;
126656b2bdd1SGireesh Nagabhushana 		goto _exit;
126756b2bdd1SGireesh Nagabhushana 	}
126856b2bdd1SGireesh Nagabhushana 
126956b2bdd1SGireesh Nagabhushana 	buf = b = kmem_zalloc(t4tid.len, KM_NOSLEEP);
127056b2bdd1SGireesh Nagabhushana 	if (buf == NULL) {
127156b2bdd1SGireesh Nagabhushana 		rc = ENOMEM;
127256b2bdd1SGireesh Nagabhushana 		goto _exit;
127356b2bdd1SGireesh Nagabhushana 	}
127456b2bdd1SGireesh Nagabhushana 
127556b2bdd1SGireesh Nagabhushana 	*b++ = t->tids_in_use;
127656b2bdd1SGireesh Nagabhushana 	*b++ = t->atids_in_use;
127756b2bdd1SGireesh Nagabhushana 	*b = t->stids_in_use;
127856b2bdd1SGireesh Nagabhushana 
127956b2bdd1SGireesh Nagabhushana 	if (ddi_copyout(buf, t4tid.data, t4tid.len, flags) < 0)
128056b2bdd1SGireesh Nagabhushana 		rc = EFAULT;
128156b2bdd1SGireesh Nagabhushana 
128256b2bdd1SGireesh Nagabhushana 	kmem_free(buf, t4tid.len);
128356b2bdd1SGireesh Nagabhushana 
128456b2bdd1SGireesh Nagabhushana _exit:
128556b2bdd1SGireesh Nagabhushana 	return (rc);
128656b2bdd1SGireesh Nagabhushana }
128756b2bdd1SGireesh Nagabhushana 
1288de483253SVishal Kulkarni /*
1289de483253SVishal Kulkarni  * Verify that the memory range specified by the addr/len pair is valid and lies
1290de483253SVishal Kulkarni  * entirely within a single region (EDCx or MCx).
1291de483253SVishal Kulkarni  */
1292de483253SVishal Kulkarni static int
1293de483253SVishal Kulkarni validate_mem_range(struct adapter *sc, uint32_t addr, int len)
1294de483253SVishal Kulkarni {
1295de483253SVishal Kulkarni 	uint32_t em, addr_len, maddr, mlen;
1296de483253SVishal Kulkarni 
1297de483253SVishal Kulkarni 	/* Memory can only be accessed in naturally aligned 4 byte units */
1298de483253SVishal Kulkarni 	if (addr & 3 || len & 3 || len == 0)
1299de483253SVishal Kulkarni 		return (EINVAL);
1300de483253SVishal Kulkarni 
1301de483253SVishal Kulkarni 	/* Enabled memories */
1302de483253SVishal Kulkarni 	em = t4_read_reg(sc, A_MA_TARGET_MEM_ENABLE);
1303de483253SVishal Kulkarni 	if (em & F_EDRAM0_ENABLE) {
1304de483253SVishal Kulkarni 		addr_len = t4_read_reg(sc, A_MA_EDRAM0_BAR);
1305de483253SVishal Kulkarni 		maddr = G_EDRAM0_BASE(addr_len) << 20;
1306de483253SVishal Kulkarni 		mlen = G_EDRAM0_SIZE(addr_len) << 20;
1307de483253SVishal Kulkarni 		if (mlen > 0 && addr >= maddr && addr < maddr + mlen &&
1308de483253SVishal Kulkarni 				addr + len <= maddr + mlen)
1309de483253SVishal Kulkarni 			return (0);
1310de483253SVishal Kulkarni 	}
1311de483253SVishal Kulkarni 	if (em & F_EDRAM1_ENABLE) {
1312de483253SVishal Kulkarni 		addr_len = t4_read_reg(sc, A_MA_EDRAM1_BAR);
1313de483253SVishal Kulkarni 		maddr = G_EDRAM1_BASE(addr_len) << 20;
1314de483253SVishal Kulkarni 		mlen = G_EDRAM1_SIZE(addr_len) << 20;
1315de483253SVishal Kulkarni 		if (mlen > 0 && addr >= maddr && addr < maddr + mlen &&
1316de483253SVishal Kulkarni 				addr + len <= maddr + mlen)
1317de483253SVishal Kulkarni 			return (0);
1318de483253SVishal Kulkarni 	}
1319de483253SVishal Kulkarni 	if (em & F_EXT_MEM_ENABLE) {
1320de483253SVishal Kulkarni 		addr_len = t4_read_reg(sc, A_MA_EXT_MEMORY_BAR);
1321de483253SVishal Kulkarni 		maddr = G_EXT_MEM_BASE(addr_len) << 20;
1322de483253SVishal Kulkarni 		mlen = G_EXT_MEM_SIZE(addr_len) << 20;
1323de483253SVishal Kulkarni 		if (mlen > 0 && addr >= maddr && addr < maddr + mlen &&
1324de483253SVishal Kulkarni 				addr + len <= maddr + mlen)
1325de483253SVishal Kulkarni 			return (0);
1326de483253SVishal Kulkarni 	}
1327de483253SVishal Kulkarni 	if (!is_t4(sc->params.chip) && em & F_EXT_MEM1_ENABLE) {
1328de483253SVishal Kulkarni 		addr_len = t4_read_reg(sc, A_MA_EXT_MEMORY1_BAR);
1329de483253SVishal Kulkarni 		maddr = G_EXT_MEM1_BASE(addr_len) << 20;
1330de483253SVishal Kulkarni 		mlen = G_EXT_MEM1_SIZE(addr_len) << 20;
1331de483253SVishal Kulkarni 		if (mlen > 0 && addr >= maddr && addr < maddr + mlen &&
1332de483253SVishal Kulkarni 				addr + len <= maddr + mlen)
1333de483253SVishal Kulkarni 			return (0);
1334de483253SVishal Kulkarni 	}
1335de483253SVishal Kulkarni 
1336de483253SVishal Kulkarni 	return (EFAULT);
1337de483253SVishal Kulkarni }
1338de483253SVishal Kulkarni 
133956b2bdd1SGireesh Nagabhushana static int
134056b2bdd1SGireesh Nagabhushana read_card_mem(struct adapter *sc, void *data, int flags)
134156b2bdd1SGireesh Nagabhushana {
134256b2bdd1SGireesh Nagabhushana 	struct t4_mem_range mr;
1343de483253SVishal Kulkarni 	uint32_t addr, off, remaining, i, n;
134456b2bdd1SGireesh Nagabhushana 	uint32_t *buf, *b;
134556b2bdd1SGireesh Nagabhushana 	int rc = 0;
1346de483253SVishal Kulkarni 	uint32_t mw_base, mw_aperture;
1347de483253SVishal Kulkarni 	uint8_t *dst;
134856b2bdd1SGireesh Nagabhushana 
134956b2bdd1SGireesh Nagabhushana 	if (ddi_copyin(data, &mr, sizeof (mr), flags) < 0) {
135056b2bdd1SGireesh Nagabhushana 		rc = EFAULT;
135156b2bdd1SGireesh Nagabhushana 		goto _exit;
135256b2bdd1SGireesh Nagabhushana 	}
135356b2bdd1SGireesh Nagabhushana 
1354de483253SVishal Kulkarni 	rc = validate_mem_range(sc, mr.addr, mr.len);
1355de483253SVishal Kulkarni 	if (rc != 0)
1356de483253SVishal Kulkarni 		return (rc);
135756b2bdd1SGireesh Nagabhushana 
1358de483253SVishal Kulkarni 	memwin_info(sc, 2, &mw_base, &mw_aperture);
1359de483253SVishal Kulkarni 	buf = b = kmem_zalloc(min(mr.len, mw_aperture), KM_NOSLEEP);
136056b2bdd1SGireesh Nagabhushana 	if (buf == NULL) {
136156b2bdd1SGireesh Nagabhushana 		rc = ENOMEM;
136256b2bdd1SGireesh Nagabhushana 		goto _exit;
136356b2bdd1SGireesh Nagabhushana 	}
136456b2bdd1SGireesh Nagabhushana 
1365de483253SVishal Kulkarni 	addr = mr.addr;
136656b2bdd1SGireesh Nagabhushana 	remaining = mr.len;
1367de483253SVishal Kulkarni 	dst = (void *)mr.data;
136856b2bdd1SGireesh Nagabhushana 
136956b2bdd1SGireesh Nagabhushana 	while (remaining) {
1370de483253SVishal Kulkarni 		off = position_memwin(sc, 2, addr);
137156b2bdd1SGireesh Nagabhushana 
137256b2bdd1SGireesh Nagabhushana 		/* number of bytes that we'll copy in the inner loop */
1373de483253SVishal Kulkarni 		n = min(remaining, mw_aperture - off);
137456b2bdd1SGireesh Nagabhushana 
1375de483253SVishal Kulkarni 		for (i = 0; i < n; i += 4)
1376de483253SVishal Kulkarni 			*b++ = t4_read_reg(sc, mw_base + off + i);
1377de483253SVishal Kulkarni 		rc = ddi_copyout(buf, dst, n, flags);
1378de483253SVishal Kulkarni 		if (rc != 0) {
1379de483253SVishal Kulkarni 			rc = EFAULT;
1380de483253SVishal Kulkarni 			break;
1381de483253SVishal Kulkarni 		}
1382de483253SVishal Kulkarni 
1383de483253SVishal Kulkarni 		b = buf;
1384de483253SVishal Kulkarni 		dst += n;
1385de483253SVishal Kulkarni 		remaining -= n;
1386de483253SVishal Kulkarni 		addr += n;
138756b2bdd1SGireesh Nagabhushana 	}
138856b2bdd1SGireesh Nagabhushana 
1389de483253SVishal Kulkarni 	kmem_free(buf, min(mr.len, mw_aperture));
139056b2bdd1SGireesh Nagabhushana _exit:
139156b2bdd1SGireesh Nagabhushana 	return (rc);
139256b2bdd1SGireesh Nagabhushana }
139356b2bdd1SGireesh Nagabhushana 
139456b2bdd1SGireesh Nagabhushana static int
139556b2bdd1SGireesh Nagabhushana get_devlog(struct adapter *sc, void *data, int flags)
139656b2bdd1SGireesh Nagabhushana {
139756b2bdd1SGireesh Nagabhushana 	struct devlog_params *dparams = &sc->params.devlog;
139856b2bdd1SGireesh Nagabhushana 	struct fw_devlog_e *buf;
139956b2bdd1SGireesh Nagabhushana 	struct t4_devlog dl;
140056b2bdd1SGireesh Nagabhushana 	int rc = 0;
140156b2bdd1SGireesh Nagabhushana 
140256b2bdd1SGireesh Nagabhushana 	if (ddi_copyin(data, &dl, sizeof (dl), flags) < 0) {
140356b2bdd1SGireesh Nagabhushana 		rc = EFAULT;
140456b2bdd1SGireesh Nagabhushana 		goto done;
140556b2bdd1SGireesh Nagabhushana 	}
140656b2bdd1SGireesh Nagabhushana 
140756b2bdd1SGireesh Nagabhushana 	if (dparams->start == 0) {
1408de483253SVishal Kulkarni 		dparams->memtype = 0;
1409de483253SVishal Kulkarni 		dparams->start = 0x84000;
1410de483253SVishal Kulkarni 		dparams->size = 32768;
141156b2bdd1SGireesh Nagabhushana 	}
141256b2bdd1SGireesh Nagabhushana 
141356b2bdd1SGireesh Nagabhushana 	if (dl.len < dparams->size) {
141456b2bdd1SGireesh Nagabhushana 		dl.len = dparams->size;
141556b2bdd1SGireesh Nagabhushana 		rc = ddi_copyout(&dl, data, sizeof (dl), flags);
141656b2bdd1SGireesh Nagabhushana 		/*
141756b2bdd1SGireesh Nagabhushana 		 * rc = 0 indicates copyout was successful, then return ENOBUFS
141856b2bdd1SGireesh Nagabhushana 		 * to indicate that the buffer size was not enough. Return of
141956b2bdd1SGireesh Nagabhushana 		 * EFAULT indicates that the copyout was not successful.
142056b2bdd1SGireesh Nagabhushana 		 */
142156b2bdd1SGireesh Nagabhushana 		rc = (rc == 0) ? ENOBUFS : EFAULT;
142256b2bdd1SGireesh Nagabhushana 		goto done;
142356b2bdd1SGireesh Nagabhushana 	}
142456b2bdd1SGireesh Nagabhushana 
142556b2bdd1SGireesh Nagabhushana 	buf = kmem_zalloc(dparams->size, KM_NOSLEEP);
142656b2bdd1SGireesh Nagabhushana 	if (buf == NULL) {
142756b2bdd1SGireesh Nagabhushana 		rc = ENOMEM;
142856b2bdd1SGireesh Nagabhushana 		goto done;
142956b2bdd1SGireesh Nagabhushana 	}
143056b2bdd1SGireesh Nagabhushana 
14313dde7c95SVishal Kulkarni 	rc = -t4_memory_rw(sc, sc->params.drv_memwin, dparams->memtype,
14323dde7c95SVishal Kulkarni 			   dparams->start, dparams->size, (void *)buf,
14333dde7c95SVishal Kulkarni 			   T4_MEMORY_READ);
143456b2bdd1SGireesh Nagabhushana 	if (rc != 0)
143556b2bdd1SGireesh Nagabhushana 		goto done1;
143656b2bdd1SGireesh Nagabhushana 
143756b2bdd1SGireesh Nagabhushana 	/* Copyout device log buffer and then carrier buffer */
14385a9113e7SVishal Kulkarni 	if (ddi_copyout(buf, (void *)((uintptr_t)data + sizeof(dl)), dl.len,
14395a9113e7SVishal Kulkarni 	    flags) < 0)
144056b2bdd1SGireesh Nagabhushana 		rc = EFAULT;
14415a9113e7SVishal Kulkarni 
14425a9113e7SVishal Kulkarni 	if (ddi_copyout(&dl, data, sizeof(dl), flags) < 0)
144356b2bdd1SGireesh Nagabhushana 		rc = EFAULT;
144456b2bdd1SGireesh Nagabhushana 
144556b2bdd1SGireesh Nagabhushana done1:
144656b2bdd1SGireesh Nagabhushana 	kmem_free(buf, dparams->size);
144756b2bdd1SGireesh Nagabhushana 
144856b2bdd1SGireesh Nagabhushana done:
144956b2bdd1SGireesh Nagabhushana 	return (rc);
145056b2bdd1SGireesh Nagabhushana }
145156b2bdd1SGireesh Nagabhushana 
145256b2bdd1SGireesh Nagabhushana static int
145356b2bdd1SGireesh Nagabhushana read_cim_qcfg(struct adapter *sc, void *data, int flags)
145456b2bdd1SGireesh Nagabhushana {
145556b2bdd1SGireesh Nagabhushana 	struct t4_cim_qcfg t4cimqcfg;
145656b2bdd1SGireesh Nagabhushana 	int rc = 0;
1457de483253SVishal Kulkarni 	unsigned int ibq_rdaddr, obq_rdaddr, nq;
145856b2bdd1SGireesh Nagabhushana 
145956b2bdd1SGireesh Nagabhushana 	if (ddi_copyin(data, &t4cimqcfg, sizeof (t4cimqcfg), flags) < 0) {
146056b2bdd1SGireesh Nagabhushana 		rc = EFAULT;
146156b2bdd1SGireesh Nagabhushana 		goto _exit;
146256b2bdd1SGireesh Nagabhushana 	}
146356b2bdd1SGireesh Nagabhushana 
1464de483253SVishal Kulkarni         if (is_t4(sc->params.chip)) {
1465de483253SVishal Kulkarni 		t4cimqcfg.num_obq = CIM_NUM_OBQ;
1466de483253SVishal Kulkarni                 ibq_rdaddr = A_UP_IBQ_0_RDADDR;
1467de483253SVishal Kulkarni                 obq_rdaddr = A_UP_OBQ_0_REALADDR;
1468de483253SVishal Kulkarni         } else {
1469de483253SVishal Kulkarni                 t4cimqcfg.num_obq = CIM_NUM_OBQ_T5;
1470de483253SVishal Kulkarni                 ibq_rdaddr = A_UP_IBQ_0_SHADOW_RDADDR;
1471de483253SVishal Kulkarni                 obq_rdaddr = A_UP_OBQ_0_SHADOW_REALADDR;
1472de483253SVishal Kulkarni         }
1473de483253SVishal Kulkarni 	nq = CIM_NUM_IBQ + t4cimqcfg.num_obq;
1474de483253SVishal Kulkarni 
1475de483253SVishal Kulkarni 	rc = -t4_cim_read(sc, ibq_rdaddr, 4 * nq, t4cimqcfg.stat);
1476de483253SVishal Kulkarni 	if (rc == 0)
1477de483253SVishal Kulkarni 		rc = -t4_cim_read(sc, obq_rdaddr, 2 * t4cimqcfg.num_obq,
1478de483253SVishal Kulkarni 		    t4cimqcfg.obq_wr);
147956b2bdd1SGireesh Nagabhushana 	if (rc != 0)
148056b2bdd1SGireesh Nagabhushana 		return (rc);
148156b2bdd1SGireesh Nagabhushana 
148256b2bdd1SGireesh Nagabhushana 	t4_read_cimq_cfg(sc, t4cimqcfg.base, t4cimqcfg.size, t4cimqcfg.thres);
148356b2bdd1SGireesh Nagabhushana 
148456b2bdd1SGireesh Nagabhushana 	if (ddi_copyout(&t4cimqcfg, data, sizeof (t4cimqcfg), flags) < 0)
148556b2bdd1SGireesh Nagabhushana 		rc = EFAULT;
148656b2bdd1SGireesh Nagabhushana 
148756b2bdd1SGireesh Nagabhushana _exit:
148856b2bdd1SGireesh Nagabhushana 	return (rc);
148956b2bdd1SGireesh Nagabhushana }
149056b2bdd1SGireesh Nagabhushana 
149156b2bdd1SGireesh Nagabhushana static int
149256b2bdd1SGireesh Nagabhushana read_edc(struct adapter *sc, void *data, int flags)
149356b2bdd1SGireesh Nagabhushana {
149456b2bdd1SGireesh Nagabhushana 	struct t4_edc t4edc;
149556b2bdd1SGireesh Nagabhushana 	int rc = 0;
149656b2bdd1SGireesh Nagabhushana 	u32 count, pos = 0;
149756b2bdd1SGireesh Nagabhushana 	u32 memoffset;
149856b2bdd1SGireesh Nagabhushana 	__be32 *edc = NULL;
149956b2bdd1SGireesh Nagabhushana 
150056b2bdd1SGireesh Nagabhushana 	if (ddi_copyin(data, &t4edc, sizeof (t4edc), flags) < 0) {
150156b2bdd1SGireesh Nagabhushana 		rc = EFAULT;
150256b2bdd1SGireesh Nagabhushana 		goto _exit;
150356b2bdd1SGireesh Nagabhushana 	}
150456b2bdd1SGireesh Nagabhushana 
150556b2bdd1SGireesh Nagabhushana 	if (t4edc.mem > 2)
150656b2bdd1SGireesh Nagabhushana 		goto _exit;
150756b2bdd1SGireesh Nagabhushana 
150856b2bdd1SGireesh Nagabhushana 	edc = kmem_zalloc(t4edc.len, KM_NOSLEEP);
150956b2bdd1SGireesh Nagabhushana 	if (edc == NULL) {
151056b2bdd1SGireesh Nagabhushana 		rc = ENOMEM;
151156b2bdd1SGireesh Nagabhushana 		goto _exit;
151256b2bdd1SGireesh Nagabhushana 	}
151356b2bdd1SGireesh Nagabhushana 	/*
151456b2bdd1SGireesh Nagabhushana 	 * Offset into the region of memory which is being accessed
151556b2bdd1SGireesh Nagabhushana 	 * MEM_EDC0 = 0
151656b2bdd1SGireesh Nagabhushana 	 * MEM_EDC1 = 1
151756b2bdd1SGireesh Nagabhushana 	 * MEM_MC   = 2
151856b2bdd1SGireesh Nagabhushana 	 */
151956b2bdd1SGireesh Nagabhushana 	memoffset = (t4edc.mem * (5 * 1024 * 1024));
152056b2bdd1SGireesh Nagabhushana 	count = t4edc.len;
152156b2bdd1SGireesh Nagabhushana 	pos = t4edc.pos;
152256b2bdd1SGireesh Nagabhushana 
152356b2bdd1SGireesh Nagabhushana 	while (count) {
152456b2bdd1SGireesh Nagabhushana 		u32 len;
152556b2bdd1SGireesh Nagabhushana 
15263dde7c95SVishal Kulkarni 		rc = t4_memory_rw(sc, sc->params.drv_memwin, memoffset, pos,
15273dde7c95SVishal Kulkarni 				  count, edc, T4_MEMORY_READ);
152856b2bdd1SGireesh Nagabhushana 		if (rc != 0) {
152956b2bdd1SGireesh Nagabhushana 			kmem_free(edc, t4edc.len);
153056b2bdd1SGireesh Nagabhushana 			goto _exit;
153156b2bdd1SGireesh Nagabhushana 		}
153256b2bdd1SGireesh Nagabhushana 
153356b2bdd1SGireesh Nagabhushana 		len = MEMWIN0_APERTURE;
153456b2bdd1SGireesh Nagabhushana 		pos += len;
153556b2bdd1SGireesh Nagabhushana 		count -= len;
153656b2bdd1SGireesh Nagabhushana 	}
153756b2bdd1SGireesh Nagabhushana 
153856b2bdd1SGireesh Nagabhushana 	if (ddi_copyout(edc, t4edc.data, t4edc.len, flags) < 0)
153956b2bdd1SGireesh Nagabhushana 		rc = EFAULT;
154056b2bdd1SGireesh Nagabhushana 
154156b2bdd1SGireesh Nagabhushana 	kmem_free(edc, t4edc.len);
154256b2bdd1SGireesh Nagabhushana _exit:
154356b2bdd1SGireesh Nagabhushana 	return (rc);
154456b2bdd1SGireesh Nagabhushana }
154556b2bdd1SGireesh Nagabhushana 
154656b2bdd1SGireesh Nagabhushana static int
154756b2bdd1SGireesh Nagabhushana read_cim_ibq(struct adapter *sc, void *data, int flags)
154856b2bdd1SGireesh Nagabhushana {
154956b2bdd1SGireesh Nagabhushana 	struct t4_ibq t4ibq;
155056b2bdd1SGireesh Nagabhushana 	int rc = 0;
155156b2bdd1SGireesh Nagabhushana 	__be64 *buf;
155256b2bdd1SGireesh Nagabhushana 
155356b2bdd1SGireesh Nagabhushana 	if (ddi_copyin(data, &t4ibq, sizeof (t4ibq), flags) < 0) {
155456b2bdd1SGireesh Nagabhushana 		rc = EFAULT;
155556b2bdd1SGireesh Nagabhushana 		goto _exit;
155656b2bdd1SGireesh Nagabhushana 	}
155756b2bdd1SGireesh Nagabhushana 
155856b2bdd1SGireesh Nagabhushana 	buf = kmem_zalloc(t4ibq.len, KM_NOSLEEP);
155956b2bdd1SGireesh Nagabhushana 	if (buf == NULL) {
156056b2bdd1SGireesh Nagabhushana 		rc = ENOMEM;
156156b2bdd1SGireesh Nagabhushana 		goto _exit;
156256b2bdd1SGireesh Nagabhushana 	}
156356b2bdd1SGireesh Nagabhushana 
156456b2bdd1SGireesh Nagabhushana 	rc = t4_read_cim_ibq(sc, 3, (u32 *)buf, CIM_IBQ_SIZE * 4);
156556b2bdd1SGireesh Nagabhushana 	if (rc < 0) {
156656b2bdd1SGireesh Nagabhushana 		kmem_free(buf, t4ibq.len);
156756b2bdd1SGireesh Nagabhushana 		return (rc);
156856b2bdd1SGireesh Nagabhushana 	} else
156956b2bdd1SGireesh Nagabhushana 		rc = 0;
157056b2bdd1SGireesh Nagabhushana 
157156b2bdd1SGireesh Nagabhushana 	if (ddi_copyout(buf, t4ibq.data, t4ibq.len, flags) < 0)
157256b2bdd1SGireesh Nagabhushana 		rc = EFAULT;
157356b2bdd1SGireesh Nagabhushana 
157456b2bdd1SGireesh Nagabhushana 	kmem_free(buf, t4ibq.len);
157556b2bdd1SGireesh Nagabhushana 
157656b2bdd1SGireesh Nagabhushana _exit:
157756b2bdd1SGireesh Nagabhushana 	return (rc);
157856b2bdd1SGireesh Nagabhushana }
157956b2bdd1SGireesh Nagabhushana 
158056b2bdd1SGireesh Nagabhushana static int
158156b2bdd1SGireesh Nagabhushana read_cim_la(struct adapter *sc, void *data, int flags)
158256b2bdd1SGireesh Nagabhushana {
158356b2bdd1SGireesh Nagabhushana 	struct t4_cim_la t4cimla;
158456b2bdd1SGireesh Nagabhushana 	int rc = 0;
158556b2bdd1SGireesh Nagabhushana 	unsigned int cfg;
158656b2bdd1SGireesh Nagabhushana 	__be64 *buf;
158756b2bdd1SGireesh Nagabhushana 
158856b2bdd1SGireesh Nagabhushana 	rc = t4_cim_read(sc, A_UP_UP_DBG_LA_CFG, 1, &cfg);
158956b2bdd1SGireesh Nagabhushana 	if (rc != 0)
159056b2bdd1SGireesh Nagabhushana 		return (rc);
159156b2bdd1SGireesh Nagabhushana 
159256b2bdd1SGireesh Nagabhushana 	if (ddi_copyin(data, &t4cimla, sizeof (t4cimla), flags) < 0) {
159356b2bdd1SGireesh Nagabhushana 		rc = EFAULT;
159456b2bdd1SGireesh Nagabhushana 		goto _exit;
159556b2bdd1SGireesh Nagabhushana 	}
159656b2bdd1SGireesh Nagabhushana 
159756b2bdd1SGireesh Nagabhushana 	buf = kmem_zalloc(t4cimla.len, KM_NOSLEEP);
159856b2bdd1SGireesh Nagabhushana 	if (buf == NULL) {
159956b2bdd1SGireesh Nagabhushana 		rc = ENOMEM;
160056b2bdd1SGireesh Nagabhushana 		goto _exit;
160156b2bdd1SGireesh Nagabhushana 	}
160256b2bdd1SGireesh Nagabhushana 
160356b2bdd1SGireesh Nagabhushana 	rc = t4_cim_read_la(sc, (u32 *)buf, NULL);
160456b2bdd1SGireesh Nagabhushana 	if (rc != 0) {
160556b2bdd1SGireesh Nagabhushana 		kmem_free(buf, t4cimla.len);
160656b2bdd1SGireesh Nagabhushana 		return (rc);
160756b2bdd1SGireesh Nagabhushana 	}
160856b2bdd1SGireesh Nagabhushana 
160956b2bdd1SGireesh Nagabhushana 	if (ddi_copyout(buf, t4cimla.data, t4cimla.len, flags) < 0)
161056b2bdd1SGireesh Nagabhushana 		rc = EFAULT;
161156b2bdd1SGireesh Nagabhushana 
161256b2bdd1SGireesh Nagabhushana 	kmem_free(buf, t4cimla.len);
161356b2bdd1SGireesh Nagabhushana 
161456b2bdd1SGireesh Nagabhushana _exit:
161556b2bdd1SGireesh Nagabhushana 	return (rc);
161656b2bdd1SGireesh Nagabhushana }
161756b2bdd1SGireesh Nagabhushana 
161856b2bdd1SGireesh Nagabhushana static int
161956b2bdd1SGireesh Nagabhushana read_mbox(struct adapter *sc, void *data, int flags)
162056b2bdd1SGireesh Nagabhushana {
162156b2bdd1SGireesh Nagabhushana 	struct t4_mbox t4mbox;
162256b2bdd1SGireesh Nagabhushana 	int rc = 0, i;
162356b2bdd1SGireesh Nagabhushana 	__be64 *p, *buf;
162456b2bdd1SGireesh Nagabhushana 
162556b2bdd1SGireesh Nagabhushana 	u32 data_reg = PF_REG(4, A_CIM_PF_MAILBOX_DATA);
162656b2bdd1SGireesh Nagabhushana 
162756b2bdd1SGireesh Nagabhushana 	if (ddi_copyin(data, &t4mbox, sizeof (t4mbox), flags) < 0) {
162856b2bdd1SGireesh Nagabhushana 		rc = EFAULT;
162956b2bdd1SGireesh Nagabhushana 		goto _exit;
163056b2bdd1SGireesh Nagabhushana 	}
163156b2bdd1SGireesh Nagabhushana 
163256b2bdd1SGireesh Nagabhushana 	buf = p = kmem_zalloc(t4mbox.len, KM_NOSLEEP);
163356b2bdd1SGireesh Nagabhushana 	if (buf == NULL) {
163456b2bdd1SGireesh Nagabhushana 		rc = ENOMEM;
163556b2bdd1SGireesh Nagabhushana 		goto _exit;
163656b2bdd1SGireesh Nagabhushana 	}
163756b2bdd1SGireesh Nagabhushana 
163856b2bdd1SGireesh Nagabhushana 	for (i = 0; i < t4mbox.len; i += 8, p++)
163956b2bdd1SGireesh Nagabhushana 		*p =  t4_read_reg64(sc, data_reg + i);
164056b2bdd1SGireesh Nagabhushana 
164156b2bdd1SGireesh Nagabhushana 	if (ddi_copyout(buf, t4mbox.data, t4mbox.len, flags) < 0)
164256b2bdd1SGireesh Nagabhushana 		rc = EFAULT;
164356b2bdd1SGireesh Nagabhushana 
164456b2bdd1SGireesh Nagabhushana 	kmem_free(buf, t4mbox.len);
164556b2bdd1SGireesh Nagabhushana 
164656b2bdd1SGireesh Nagabhushana _exit:
164756b2bdd1SGireesh Nagabhushana 	return (rc);
164856b2bdd1SGireesh Nagabhushana }
16495a9113e7SVishal Kulkarni 
16505a9113e7SVishal Kulkarni static int
16515a9113e7SVishal Kulkarni flash_fw(struct adapter *sc, void *data, int flags)
16525a9113e7SVishal Kulkarni {
16535a9113e7SVishal Kulkarni 	unsigned int mbox = M_PCIE_FW_MASTER + 1;
16545a9113e7SVishal Kulkarni 	struct t4_ldfw fw;
16555a9113e7SVishal Kulkarni 	u8 *ptr = NULL;
16565a9113e7SVishal Kulkarni 	int rc = 0;
16575a9113e7SVishal Kulkarni 
16585a9113e7SVishal Kulkarni 	if (ddi_copyin(data, &fw, sizeof(struct t4_ldfw), flags) < 0)
16595a9113e7SVishal Kulkarni 		return EFAULT;
16605a9113e7SVishal Kulkarni 
16615a9113e7SVishal Kulkarni 	if (!fw.len)
16625a9113e7SVishal Kulkarni 		return EINVAL;
16635a9113e7SVishal Kulkarni 
16645a9113e7SVishal Kulkarni 	ptr = (u8 *)kmem_zalloc(fw.len, KM_NOSLEEP);
16655a9113e7SVishal Kulkarni 	if (ptr == NULL)
16665a9113e7SVishal Kulkarni 		return ENOMEM;
16675a9113e7SVishal Kulkarni 
16685a9113e7SVishal Kulkarni 	if (ddi_copyin((void *)((uintptr_t)data + sizeof(fw)), ptr, fw.len,
16695a9113e7SVishal Kulkarni 	    flags) < 0) {
16705a9113e7SVishal Kulkarni 		kmem_free(ptr, fw.len);
16715a9113e7SVishal Kulkarni 		return EFAULT;
16725a9113e7SVishal Kulkarni 	}
16735a9113e7SVishal Kulkarni 
16745a9113e7SVishal Kulkarni 	if (sc->flags & FULL_INIT_DONE)
16755a9113e7SVishal Kulkarni 		mbox = sc->mbox;
16765a9113e7SVishal Kulkarni 
16775a9113e7SVishal Kulkarni 	rc = -t4_fw_upgrade(sc, mbox, ptr, fw.len, true);
16785a9113e7SVishal Kulkarni 
16795a9113e7SVishal Kulkarni 	kmem_free(ptr, fw.len);
16805a9113e7SVishal Kulkarni 
16815a9113e7SVishal Kulkarni 	return (rc);
16825a9113e7SVishal Kulkarni }
1683*7e6ad469SVishal Kulkarni 
1684*7e6ad469SVishal Kulkarni static int
1685*7e6ad469SVishal Kulkarni get_cudbg(struct adapter *sc, void *data, int flags)
1686*7e6ad469SVishal Kulkarni {
1687*7e6ad469SVishal Kulkarni 	struct t4_cudbg_dump dump;
1688*7e6ad469SVishal Kulkarni 	struct cudbg_init *cudbg;
1689*7e6ad469SVishal Kulkarni 	void *handle, *buf;
1690*7e6ad469SVishal Kulkarni 	int size;
1691*7e6ad469SVishal Kulkarni 	int rc = 0;
1692*7e6ad469SVishal Kulkarni 
1693*7e6ad469SVishal Kulkarni 	if (ddi_copyin(data, &dump, sizeof(struct t4_cudbg_dump), flags) < 0)
1694*7e6ad469SVishal Kulkarni 		return EFAULT;
1695*7e6ad469SVishal Kulkarni 
1696*7e6ad469SVishal Kulkarni 	size = dump.len;
1697*7e6ad469SVishal Kulkarni 	buf = (u8 *)kmem_zalloc(dump.len, KM_NOSLEEP);
1698*7e6ad469SVishal Kulkarni 	if (buf == NULL)
1699*7e6ad469SVishal Kulkarni 		return ENOMEM;
1700*7e6ad469SVishal Kulkarni 
1701*7e6ad469SVishal Kulkarni 	handle = cudbg_alloc_handle();
1702*7e6ad469SVishal Kulkarni 	if (handle == NULL) {
1703*7e6ad469SVishal Kulkarni 		rc = ENOMEM;
1704*7e6ad469SVishal Kulkarni 		goto free;
1705*7e6ad469SVishal Kulkarni 	}
1706*7e6ad469SVishal Kulkarni 
1707*7e6ad469SVishal Kulkarni 	cudbg = cudbg_get_init(handle);
1708*7e6ad469SVishal Kulkarni 	cudbg->adap = sc;
1709*7e6ad469SVishal Kulkarni 	cudbg->print = (cudbg_print_cb)cxgb_printf;
1710*7e6ad469SVishal Kulkarni 
1711*7e6ad469SVishal Kulkarni 	memcpy(cudbg->dbg_bitmap, dump.bitmap, sizeof(cudbg->dbg_bitmap));
1712*7e6ad469SVishal Kulkarni 
1713*7e6ad469SVishal Kulkarni 	rc = cudbg_collect(handle, buf, &dump.len);
1714*7e6ad469SVishal Kulkarni 	if (rc != 0) {
1715*7e6ad469SVishal Kulkarni 		cxgb_printf(sc->dip, CE_WARN, "cudbg collect failed\n");
1716*7e6ad469SVishal Kulkarni 		goto exit;
1717*7e6ad469SVishal Kulkarni 	}
1718*7e6ad469SVishal Kulkarni 
1719*7e6ad469SVishal Kulkarni 	if(ddi_copyout(buf, (void *)((uintptr_t)data + sizeof(dump)),
1720*7e6ad469SVishal Kulkarni 	   dump.len, flags) < 0){
1721*7e6ad469SVishal Kulkarni 		rc = EFAULT;
1722*7e6ad469SVishal Kulkarni 	}
1723*7e6ad469SVishal Kulkarni 
1724*7e6ad469SVishal Kulkarni 	if (ddi_copyout(&dump, data, sizeof(dump), flags) < 0){
1725*7e6ad469SVishal Kulkarni 		rc = EFAULT;
1726*7e6ad469SVishal Kulkarni 	}
1727*7e6ad469SVishal Kulkarni exit:
1728*7e6ad469SVishal Kulkarni 	cudbg_free_handle(handle);
1729*7e6ad469SVishal Kulkarni free:
1730*7e6ad469SVishal Kulkarni 	kmem_free(buf, size);
1731*7e6ad469SVishal Kulkarni 
1732*7e6ad469SVishal Kulkarni 	return rc;
1733*7e6ad469SVishal Kulkarni }
1734