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