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