Mercurial > illumos > illumos-gate
diff usr/src/uts/common/io/cxgbe/common/common.c @ 14029:11aad50aea32
3701 Chelsio Terminator 4 NIC driver for illumos
Reviewed by: Robert Mustacchi <rm@joyent.com>
Approved by: Dan McDonald <danmcd@nexenta.com>
author | Gireesh Nagabhushana <gireesh@chelsio.com> |
---|---|
date | Thu, 23 May 2013 09:51:05 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/usr/src/uts/common/io/cxgbe/common/common.c Thu May 23 09:51:05 2013 -0400 @@ -0,0 +1,98 @@ +/* + * This file and its contents are supplied under the terms of the + * Common Development and Distribution License ("CDDL"), version 1.0. + * You may only use this file in accordance with the terms of version + * 1.0 of the CDDL. + * + * A full copy of the text of the CDDL should have accompanied this + * source. A copy of the CDDL is also available via the Internet at + * http://www.illumos.org/license/CDDL. + */ + +/* + * This file is part of the Chelsio T4 Ethernet driver. + * + * Copyright (C) 2005-2013 Chelsio Communications. All rights reserved. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the LICENSE file included in this + * release for licensing terms and conditions. + */ + +#include "common.h" + +int +is_offload(const struct adapter *adap) +{ + return (adap->params.offload); +} + +unsigned int +core_ticks_per_usec(const struct adapter *adap) +{ + return (adap->params.vpd.cclk / 1000); +} + +int +t4_wr_mbox(struct adapter *adap, int mbox, const void *cmd, int size, void *rpl) +{ + return (t4_wr_mbox_meat(adap, mbox, cmd, size, rpl, true)); +} + +unsigned int +us_to_core_ticks(const struct adapter *adap, unsigned int us) +{ + return ((us * adap->params.vpd.cclk) / 1000); +} + +unsigned int +core_ticks_to_us(const struct adapter *adapter, unsigned int ticks) +{ + /* add Core Clock / 2 to round ticks to nearest uS */ + return ((ticks * 1000 + adapter->params.vpd.cclk/2) / + adapter->params.vpd.cclk); +} + +unsigned int +dack_ticks_to_usec(const struct adapter *adap, unsigned int ticks) +{ + return ((ticks << adap->params.tp.dack_re) / core_ticks_per_usec(adap)); +} + +int +is_bypass(const adapter_t *adap) +{ + return (adap->params.bypass); +} + +int +is_bypass_device(int device) +{ + /* TODO - this should be set based upon device capabilities */ + switch (device) { +#ifdef CONFIG_CHELSIO_BYPASS + case 0x440b: + case 0x440c: + return (1); +#endif + + default: + return (0); + } +} + +int +t4_wait_op_done(struct adapter *adapter, int reg, u32 mask, int polarity, + int attempts, int delay) +{ + return (t4_wait_op_done_val(adapter, reg, mask, polarity, attempts, + delay, NULL)); +} + +int +t4_wr_mbox_ns(struct adapter *adap, int mbox, const void *cmd, int size, + void *rpl) +{ + return (t4_wr_mbox_meat(adap, mbox, cmd, size, rpl, false)); +}