bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * CDDL HEADER START
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * The contents of this file are subject to the terms of the
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Common Development and Distribution License (the "License").
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * You may not use this file except in compliance with the License.
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * or http://www.opensolaris.org/os/licensing.
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * See the License for the specific language governing permissions
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * and limitations under the License.
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * When distributing Covered Code, include this CDDL HEADER in each
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * If applicable, add the following below this CDDL HEADER, with the
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * fields enclosed by brackets "[]" replaced with your own identifying
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * information: Portions Copyright [yyyy] [name of copyright owner]
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * CDDL HEADER END
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan * Copyright 2010 QLogic Corporation. All rights reserved.
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * GLDv3 functions prototypes
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic int ql_m_getstat(void *, uint_t, uint64_t *);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic int ql_m_start(void *);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic void ql_m_stop(void *);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic int ql_m_setpromiscuous(void *, boolean_t);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic int ql_m_multicst(void *, boolean_t, const uint8_t *);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic int ql_m_unicst(void *, const uint8_t *);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic mblk_t *ql_m_tx(void *, mblk_t *);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic void ql_m_ioctl(void *, queue_t *, mblk_t *);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic boolean_t ql_m_getcapab(void *, mac_capab_t, void *);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic int ql_m_setprop(void *, const char *, mac_prop_id_t, uint_t,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan const void *);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerstatic int ql_m_getprop(void *, const char *, mac_prop_id_t, uint_t, void *);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerstatic void ql_m_propinfo(void *, const char *, mac_prop_id_t,
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer#define QL_M_CALLBACK_FLAGS (MC_IOCTL | MC_GETCAPAB | MC_SETPROP | \
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic mac_callbacks_t ql_m_callbacks = {
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer "_adv_pause_mode",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * This function starts the driver
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * reset chip, re-initialize everything but do not
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * re-allocate memory
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (qlge->mac_flags == QL_MAC_SUSPENDED) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Write default ethernet address to chip register Mac
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Address slot 0 and Enable Primary Mac Function.
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)qlge->unicst_addr[0].addr.ether_addr_octet, 0);
4aa4baabcbf85382c40c826cabf97d046ba28c89Sukumar Swaminathan (void) ql_get_firmware_version(qlge, NULL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * This function stops the driver
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (qlge->mac_flags == QL_MAC_SUSPENDED) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Add or remove a multicast address
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_m_multicst(void *arg, boolean_t add, const uint8_t *ep)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (qlge->mac_flags == QL_MAC_SUSPENDED) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan QL_DUMP(DBG_GLD, "add to multicast list:\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ret = ql_add_to_multicast_list(qlge, (uint8_t *)ep);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan QL_DUMP(DBG_GLD, "remove from multicast list:\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ret = ql_remove_from_multicast_list(qlge, (uint8_t *)ep);
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan ddi_fm_service_impact(qlge->dip, DDI_SERVICE_DEGRADED);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Enable or disable promiscuous mode
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_m_setpromiscuous(void* arg, boolean_t on)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (qlge->mac_flags == QL_MAC_SUSPENDED) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* enable reception of all packets on the medium, */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan QL_PRINT(DBG_GLD, ("%s(%d) enable promiscuous mode\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan QL_PRINT(DBG_GLD, ("%s(%d) disable promiscuous mode\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_m_getstat(void *arg, uint_t stat, uint64_t *valp)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (qlge->mac_flags == QL_MAC_SUSPENDED) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* these stats are maintained in software */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (CFG_IST(qlge, CFG_CHIP_8100) != 0) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (i = 0; i < qlge->tx_ring_count; i++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cur_stats->multixmt += tx_ring->multixmt;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (i = 0; i < qlge->tx_ring_count; i++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cur_stats->brdcstxmt += tx_ring->brdcstxmt;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (i = 0; i < qlge->tx_ring_count; i++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (i = 0; i < qlge->tx_ring_count; i++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cur_stats->opackets += tx_ring->opackets;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (i = 0; i < qlge->tx_ring_count; i++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (i = 0; i < qlge->tx_ring_count; i++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (i = 0; i < qlge->rx_ring_count; i++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (i = 0; i < qlge->rx_ring_count; i++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cur_stats->rpackets += rx_ring->rx_packets;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (i = 0; i < qlge->rx_ring_count; i++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (i = 0; i < qlge->rx_ring_count; i++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (ql_sem_spinlock(qlge, qlge->xgmac_sem_mask) !=
4aa4baabcbf85382c40c826cabf97d046ba28c89Sukumar Swaminathan (void) ql_read_xgmac_reg(qlge, REG_XGMAC_MAC_RX_JABBER_PKTS,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_sem_unlock(qlge, qlge->xgmac_sem_mask);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan QL_PRINT(DBG_STATS, ("%s(%d) MAC_STAT_JABBER_ERRORS "
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan "status %d\n", __func__, qlge->instance, val));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* statics saved in hw */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (ql_sem_spinlock(qlge, qlge->xgmac_sem_mask) !=
4aa4baabcbf85382c40c826cabf97d046ba28c89Sukumar Swaminathan (void) ql_read_xgmac_reg(qlge, REG_XGMAC_MAC_ALIGN_ERR,
4aa4baabcbf85382c40c826cabf97d046ba28c89Sukumar Swaminathan (void) ql_read_xgmac_reg(qlge, REG_XGMAC_MAC_FCS_ERR, &val32);
4aa4baabcbf85382c40c826cabf97d046ba28c89Sukumar Swaminathan (void) ql_read_xgmac_reg(qlge, REG_XGMAC_MAC_RX_JABBER_PKTS,
4aa4baabcbf85382c40c826cabf97d046ba28c89Sukumar Swaminathan (void) ql_read_xgmac_reg(qlge, REG_XGMAC_MAC_RX_SYM_ERR,
4aa4baabcbf85382c40c826cabf97d046ba28c89Sukumar Swaminathan (void) ql_read_xgmac_reg(qlge, REG_XGMAC_MAC_RX_INT_ERR,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_sem_unlock(qlge, qlge->xgmac_sem_mask);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Set the physical network address
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_unicst_set(qlge_t *qlge, const uint8_t *macaddr, int slot)
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan ret = ql_sem_spinlock(qlge, SEM_MAC_ADDR_MASK);
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan ret = ql_set_mac_addr_reg(qlge, (uint8_t *)macaddr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint16_t)(qlge->func_number * MAX_CQ + slot));
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan ddi_fm_service_impact(qlge->dip, DDI_SERVICE_DEGRADED);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Set default MAC address
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Each function has a total of 128 mac address, function0: 0~127,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * function1 128~254 etc or func_number *128 + n (0~127), but
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * we only support one MAC address, so its address is
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * func_number*128+0
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_m_unicst(void *arg, const uint8_t *mac)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ASSERT(qlge->mac_flags != QL_MAC_DETACH);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (qlge->mac_flags == QL_MAC_SUSPENDED) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bcopy(mac, qlge->unicst_addr[0].addr.ether_addr_octet, ETHERADDRL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* Set Mac Address to slot 0 and Enable Primary Mac Function */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * ql_m_tx is used only for sending data packets into ethernet wire.
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan if ((qlge->port_link_state == LS_DOWN) ||
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan cmn_err(CE_WARN, "!%s(%d): exit due to link down",
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan * Calculate which tx ring to send this packet
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan selected_ring = ql_tx_hashing(qlge, bp);
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan tx_ring = &qlge->tx_ring[selected_ring];
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (tx_ring->mac_flags != QL_MAC_STARTED) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* we must try to send all */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * if number of available slots is less than a threshold,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (tx_ring->tx_free_count <= TX_STOP_THRESHOLD) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * If we return the buffer back we are expected to
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * call mac_tx_ring_update() when
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * resources are available
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * After all msg blocks are mapped or copied to tx buffer,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * trigger the hardware to send the msg!
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_write_doorbell_reg(tx_ring->qlge, tx_ring->prod_idx_db_reg,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_m_ioctl(void *arg, queue_t *wq, mblk_t *mp)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Validate the command before bothering with the mutex...
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iocp = (struct iocblk *)(void *)mp->b_rptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (qlge->mac_flags == QL_MAC_SUSPENDED) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan QL_PRINT(DBG_GLD, ("unknown ioctl cmd \n"));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* FALLTHRU */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Check for specific net_config privilege
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan err = secpolicy_net_config(iocp->ioc_cr, B_FALSE);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Implement ioctl
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan status = ql_loop_ioctl(qlge, wq, mp, iocp);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Decide how to reply
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Error, reply with a NAK and EINVAL or the specified error
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan miocnak(wq, mp, 0, iocp->ioc_error == 0 ?
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * OK, reply already sent
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * OK, reply with an ACK
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * OK, send prepared reply as ACK or NAK
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan mp->b_datap->db_type = (uint8_t)(iocp->ioc_error == 0 ?
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanqlge_set_priv_prop(qlge_t *qlge, const char *pr_name, uint_t pr_valsize,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (strcmp(pr_name, "_adv_pause_mode") == 0) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (void) ddi_strtol(pr_val, (char **)NULL, 0, &result);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan } else if (qlge->pause != (uint32_t)result) {
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan if (ql_set_pause_mode(qlge) == DDI_FAILURE)
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan } else if (strcmp(pr_name, "_fm_enable") == 0) {
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan (void) ddi_strtol(pr_val, (char **)NULL, 0, &result);
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan } else if (qlge->fm_enable != (boolean_t)result) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * callback functions for set/get of properties
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_m_setprop(void *barg, const char *pr_name, mac_prop_id_t pr_num,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (qlge->mac_flags == QL_MAC_SUSPENDED) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bcopy(pr_val, &new_mtu, sizeof (new_mtu));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan QL_PRINT(DBG_GLD, ("%s(%d) new mtu %d \n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if ((new_mtu != ETHERMTU) && (new_mtu != JUMBO_MTU)) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * do not change on the fly, allow only before
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * driver is started or stopped
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if ((qlge->mac_flags == QL_MAC_STARTED) ||
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cmn_err(CE_WARN, "%s(%d) new mtu %d ignored, "
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->instance, new_mtu, qlge->mac_flags);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan err = mac_maxsdu_update(qlge->mh, qlge->mtu);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan QL_PRINT(DBG_GLD, ("%s(%d) new mtu %d set success\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan err = qlge_set_priv_prop(qlge, pr_name, pr_valsize,
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerqlge_get_priv_prop(qlge_t *qlge, const char *pr_name, uint_t pr_valsize,
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer if (strcmp(pr_name, "_adv_pause_mode") == 0) {
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan } else if (strcmp(pr_name, "_fm_enable") == 0) {
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer (void) snprintf(pr_val, pr_valsize, "%d", value);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_m_getprop(void *barg, const char *pr_name, mac_prop_id_t pr_num,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (qlge->mac_flags == QL_MAC_SUSPENDED) {
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer ASSERT(pr_valsize >= sizeof (link_duplex_t));
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer err = qlge_get_priv_prop(qlge, pr_name, pr_valsize, pr_val);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerql_m_propinfo(void *barg, const char *pr_name, mac_prop_id_t pr_num,
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer mac_prop_info_set_perm(prh, MAC_PROP_PERM_READ);
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan else if (strcmp(pr_name, "_fm_enable") == 0)
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer (void) snprintf(val_str, sizeof (val_str), "%d", default_val);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_m_getcapab(void *arg, mac_capab_t cap, void *cap_data)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if ((qlge->cfg_flags & CFG_CKSUM_FULL_IPv4) != 0) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if ((qlge->cfg_flags & CFG_CKSUM_FULL_IPv6) != 0) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if ((qlge->cfg_flags & CFG_CKSUM_HEADER_IPv4) != 0) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if ((qlge->cfg_flags & CFG_CKSUM_PARTIAL) != 0) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan mac_capab_lso_t *cap_lso = (mac_capab_lso_t *)cap_data;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (qlge->cfg_flags & CFG_SUPPORT_SCATTER_GATHER)) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cap_lso->lso_flags = LSO_TX_BASIC_TCP_IPV4;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan page_size = ddi_ptob(qlge->dip, (ulong_t)1);
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan lso_max = page_size * (QL_MAX_TX_DMA_HANDLES-1);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_gld3_init(qlge_t *qlge, mac_register_t *macp)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan macp->m_type_ident = MAC_PLUGIN_IDENT_ETHER;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* This is the mac address from flash to be used by the port */