1*56b2bdd1SGireesh Nagabhushana /* 2*56b2bdd1SGireesh Nagabhushana * This file and its contents are supplied under the terms of the 3*56b2bdd1SGireesh Nagabhushana * Common Development and Distribution License ("CDDL"), version 1.0. 4*56b2bdd1SGireesh Nagabhushana * You may only use this file in accordance with the terms of version 5*56b2bdd1SGireesh Nagabhushana * 1.0 of the CDDL. 6*56b2bdd1SGireesh Nagabhushana * 7*56b2bdd1SGireesh Nagabhushana * A full copy of the text of the CDDL should have accompanied this 8*56b2bdd1SGireesh Nagabhushana * source. A copy of the CDDL is also available via the Internet at 9*56b2bdd1SGireesh Nagabhushana * http://www.illumos.org/license/CDDL. 10*56b2bdd1SGireesh Nagabhushana */ 11*56b2bdd1SGireesh Nagabhushana 12*56b2bdd1SGireesh Nagabhushana /* 13*56b2bdd1SGireesh Nagabhushana * This file is part of the Chelsio T4 Ethernet driver. 14*56b2bdd1SGireesh Nagabhushana * 15*56b2bdd1SGireesh Nagabhushana * Copyright (C) 2005-2013 Chelsio Communications. All rights reserved. 16*56b2bdd1SGireesh Nagabhushana * 17*56b2bdd1SGireesh Nagabhushana * This program is distributed in the hope that it will be useful, but WITHOUT 18*56b2bdd1SGireesh Nagabhushana * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 19*56b2bdd1SGireesh Nagabhushana * FITNESS FOR A PARTICULAR PURPOSE. See the LICENSE file included in this 20*56b2bdd1SGireesh Nagabhushana * release for licensing terms and conditions. 21*56b2bdd1SGireesh Nagabhushana */ 22*56b2bdd1SGireesh Nagabhushana 23*56b2bdd1SGireesh Nagabhushana #include "common.h" 24*56b2bdd1SGireesh Nagabhushana 25*56b2bdd1SGireesh Nagabhushana int 26*56b2bdd1SGireesh Nagabhushana is_offload(const struct adapter *adap) 27*56b2bdd1SGireesh Nagabhushana { 28*56b2bdd1SGireesh Nagabhushana return (adap->params.offload); 29*56b2bdd1SGireesh Nagabhushana } 30*56b2bdd1SGireesh Nagabhushana 31*56b2bdd1SGireesh Nagabhushana unsigned int 32*56b2bdd1SGireesh Nagabhushana core_ticks_per_usec(const struct adapter *adap) 33*56b2bdd1SGireesh Nagabhushana { 34*56b2bdd1SGireesh Nagabhushana return (adap->params.vpd.cclk / 1000); 35*56b2bdd1SGireesh Nagabhushana } 36*56b2bdd1SGireesh Nagabhushana 37*56b2bdd1SGireesh Nagabhushana int 38*56b2bdd1SGireesh Nagabhushana t4_wr_mbox(struct adapter *adap, int mbox, const void *cmd, int size, void *rpl) 39*56b2bdd1SGireesh Nagabhushana { 40*56b2bdd1SGireesh Nagabhushana return (t4_wr_mbox_meat(adap, mbox, cmd, size, rpl, true)); 41*56b2bdd1SGireesh Nagabhushana } 42*56b2bdd1SGireesh Nagabhushana 43*56b2bdd1SGireesh Nagabhushana unsigned int 44*56b2bdd1SGireesh Nagabhushana us_to_core_ticks(const struct adapter *adap, unsigned int us) 45*56b2bdd1SGireesh Nagabhushana { 46*56b2bdd1SGireesh Nagabhushana return ((us * adap->params.vpd.cclk) / 1000); 47*56b2bdd1SGireesh Nagabhushana } 48*56b2bdd1SGireesh Nagabhushana 49*56b2bdd1SGireesh Nagabhushana unsigned int 50*56b2bdd1SGireesh Nagabhushana core_ticks_to_us(const struct adapter *adapter, unsigned int ticks) 51*56b2bdd1SGireesh Nagabhushana { 52*56b2bdd1SGireesh Nagabhushana /* add Core Clock / 2 to round ticks to nearest uS */ 53*56b2bdd1SGireesh Nagabhushana return ((ticks * 1000 + adapter->params.vpd.cclk/2) / 54*56b2bdd1SGireesh Nagabhushana adapter->params.vpd.cclk); 55*56b2bdd1SGireesh Nagabhushana } 56*56b2bdd1SGireesh Nagabhushana 57*56b2bdd1SGireesh Nagabhushana unsigned int 58*56b2bdd1SGireesh Nagabhushana dack_ticks_to_usec(const struct adapter *adap, unsigned int ticks) 59*56b2bdd1SGireesh Nagabhushana { 60*56b2bdd1SGireesh Nagabhushana return ((ticks << adap->params.tp.dack_re) / core_ticks_per_usec(adap)); 61*56b2bdd1SGireesh Nagabhushana } 62*56b2bdd1SGireesh Nagabhushana 63*56b2bdd1SGireesh Nagabhushana int 64*56b2bdd1SGireesh Nagabhushana is_bypass(const adapter_t *adap) 65*56b2bdd1SGireesh Nagabhushana { 66*56b2bdd1SGireesh Nagabhushana return (adap->params.bypass); 67*56b2bdd1SGireesh Nagabhushana } 68*56b2bdd1SGireesh Nagabhushana 69*56b2bdd1SGireesh Nagabhushana int 70*56b2bdd1SGireesh Nagabhushana is_bypass_device(int device) 71*56b2bdd1SGireesh Nagabhushana { 72*56b2bdd1SGireesh Nagabhushana /* TODO - this should be set based upon device capabilities */ 73*56b2bdd1SGireesh Nagabhushana switch (device) { 74*56b2bdd1SGireesh Nagabhushana #ifdef CONFIG_CHELSIO_BYPASS 75*56b2bdd1SGireesh Nagabhushana case 0x440b: 76*56b2bdd1SGireesh Nagabhushana case 0x440c: 77*56b2bdd1SGireesh Nagabhushana return (1); 78*56b2bdd1SGireesh Nagabhushana #endif 79*56b2bdd1SGireesh Nagabhushana 80*56b2bdd1SGireesh Nagabhushana default: 81*56b2bdd1SGireesh Nagabhushana return (0); 82*56b2bdd1SGireesh Nagabhushana } 83*56b2bdd1SGireesh Nagabhushana } 84*56b2bdd1SGireesh Nagabhushana 85*56b2bdd1SGireesh Nagabhushana int 86*56b2bdd1SGireesh Nagabhushana t4_wait_op_done(struct adapter *adapter, int reg, u32 mask, int polarity, 87*56b2bdd1SGireesh Nagabhushana int attempts, int delay) 88*56b2bdd1SGireesh Nagabhushana { 89*56b2bdd1SGireesh Nagabhushana return (t4_wait_op_done_val(adapter, reg, mask, polarity, attempts, 90*56b2bdd1SGireesh Nagabhushana delay, NULL)); 91*56b2bdd1SGireesh Nagabhushana } 92*56b2bdd1SGireesh Nagabhushana 93*56b2bdd1SGireesh Nagabhushana int 94*56b2bdd1SGireesh Nagabhushana t4_wr_mbox_ns(struct adapter *adap, int mbox, const void *cmd, int size, 95*56b2bdd1SGireesh Nagabhushana void *rpl) 96*56b2bdd1SGireesh Nagabhushana { 97*56b2bdd1SGireesh Nagabhushana return (t4_wr_mbox_meat(adap, mbox, cmd, size, rpl, false)); 98*56b2bdd1SGireesh Nagabhushana } 99