usr/src/uts/common/io/fibre-channel/fca/oce/oce_queue.c
author Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
Fri, 19 Feb 2010 18:04:10 -0800
changeset 11723 b7b5ccb8e5c5
parent 11374 b345d20da176
child 12043 16dcac5c84f7
permissions -rw-r--r--
6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW 6916252 LSO not working with S11 oce driver 6916255 Enhance the RX/TX handling in the oce driver 6916259 Code cleanup (remove redundant code) in the oce driver
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
     1
/*
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
     2
 * CDDL HEADER START
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
     3
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
     5
 * Common Development and Distribution License (the "License").
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
     6
 * You may not use this file except in compliance with the License.
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
     7
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    11
 * and limitations under the License.
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    12
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    18
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    19
 * CDDL HEADER END
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    20
 */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    21
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    22
/*
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    23
 * Copyright 2009 Emulex.  All rights reserved.
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    24
 * Use is subject to license terms.
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    25
 */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    26
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    27
/*
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    28
 * Source file containing Queue handling functions
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    29
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    30
 */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    31
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    32
#include <oce_impl.h>
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    33
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    34
int oce_destroy_q(struct oce_dev  *oce, struct oce_mbx  *mbx, size_t req_size,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    35
    enum qtype  qtype);
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    36
/* MAil box Queue functions */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    37
struct oce_mq *
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    38
oce_mq_create(struct oce_dev *dev, struct oce_eq *eq, uint32_t q_len);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    39
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    40
/* event queue handling */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    41
struct oce_eq *
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    42
oce_eq_create(struct oce_dev *dev, uint32_t q_len, uint32_t item_size,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    43
    uint32_t eq_delay);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    44
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    45
/* completion queue handling */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    46
struct oce_cq *
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    47
oce_cq_create(struct oce_dev *dev, struct oce_eq *eq, uint32_t q_len,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    48
    uint32_t item_size, boolean_t sol_event, boolean_t is_eventable,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    49
    boolean_t nodelay, uint32_t ncoalesce);
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    50
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    51
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    52
/* Tx  WQ functions */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    53
static struct oce_wq *oce_wq_init(struct oce_dev *dev,  uint32_t q_len,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    54
    int wq_type);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    55
static void oce_wq_fini(struct oce_dev *dev, struct oce_wq *wq);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    56
static int oce_wq_create(struct oce_wq *wq, struct oce_eq *eq);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    57
static void oce_wq_del(struct oce_dev *dev, struct oce_wq *wq);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    58
/* Rx Queue functions */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    59
static struct oce_rq *oce_rq_init(struct oce_dev *dev, uint32_t q_len,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    60
    uint32_t frag_size, uint32_t mtu,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    61
    boolean_t rss);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    62
static void oce_rq_fini(struct oce_dev *dev, struct oce_rq *rq);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    63
static int oce_rq_create(struct oce_rq *rq, uint32_t if_id, struct oce_eq *eq);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    64
static void oce_rq_del(struct oce_dev *dev, struct oce_rq *rq);
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    65
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    66
/*
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    67
 * function to create an event queue
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    68
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    69
 * dev - software handle to the device
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    70
 * eqcfg - pointer to a config structure containg the eq parameters
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    71
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    72
 * return pointer to EQ; NULL on failure
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    73
 */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    74
struct oce_eq *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    75
oce_eq_create(struct oce_dev *dev, uint32_t q_len, uint32_t item_size,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    76
    uint32_t eq_delay)
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    77
{
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    78
	struct oce_eq *eq;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    79
	struct oce_mbx mbx;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    80
	struct mbx_create_common_eq *fwcmd;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    81
	int ret = 0;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    82
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    83
	/* allocate an eq */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    84
	eq = kmem_zalloc(sizeof (struct oce_eq), KM_NOSLEEP);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    85
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    86
	if (eq == NULL) {
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    87
		return (NULL);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    88
	}
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    89
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    90
	bzero(&mbx, sizeof (struct oce_mbx));
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    91
	/* allocate mbx */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    92
	fwcmd = (struct mbx_create_common_eq *)&mbx.payload;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    93
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    94
	eq->ring = create_ring_buffer(dev, q_len,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    95
	    item_size, DDI_DMA_CONSISTENT);
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    96
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    97
	if (eq->ring == NULL) {
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    98
		oce_log(dev, CE_WARN, MOD_CONFIG,
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
    99
		    "EQ ring alloc failed:0x%p",
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   100
		    (void *)eq->ring);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   101
		kmem_free(eq, sizeof (struct oce_eq));
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   102
		return (NULL);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   103
	}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   104
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   105
	mbx_common_req_hdr_init(&fwcmd->hdr, 0, 0,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   106
	    MBX_SUBSYSTEM_COMMON,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   107
	    OPCODE_CREATE_COMMON_EQ, MBX_TIMEOUT_SEC,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   108
	    sizeof (struct mbx_create_common_eq));
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   109
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   110
	fwcmd->params.req.num_pages = eq->ring->dbuf->num_pages;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   111
	oce_page_list(eq->ring->dbuf, &fwcmd->params.req.pages[0],
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   112
	    eq->ring->dbuf->num_pages);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   113
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   114
	/* dw 0 */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   115
	fwcmd->params.req.eq_ctx.size = (item_size == 4) ? 0 : 1;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   116
	fwcmd->params.req.eq_ctx.valid = 1;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   117
	/* dw 1 */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   118
	fwcmd->params.req.eq_ctx.armed = 0;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   119
	fwcmd->params.req.eq_ctx.pd = 0;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   120
	fwcmd->params.req.eq_ctx.count = OCE_LOG2(q_len/256);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   121
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   122
	/* dw 2 */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   123
	fwcmd->params.req.eq_ctx.function = dev->fn;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   124
	fwcmd->params.req.eq_ctx.nodelay  = 0;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   125
	fwcmd->params.req.eq_ctx.phase = 0;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   126
	/* todo: calculate multiplier from max min and cur */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   127
	fwcmd->params.req.eq_ctx.delay_mult = eq_delay;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   128
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   129
	/* fill rest of mbx */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   130
	mbx.u0.s.embedded = 1;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   131
	mbx.payload_length = sizeof (struct mbx_create_common_eq);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   132
	DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   133
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   134
	/* now post the command */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   135
	ret = oce_mbox_post(dev, &mbx, NULL);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   136
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   137
	if (ret != 0) {
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   138
		oce_log(dev, CE_WARN, MOD_CONFIG,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   139
		    "EQ create failed: %d", ret);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   140
		destroy_ring_buffer(dev, eq->ring);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   141
		kmem_free(eq, sizeof (struct oce_eq));
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   142
		return (NULL);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   143
	}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   144
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   145
	/* interpret the response */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   146
	eq->eq_id = LE_16(fwcmd->params.rsp.eq_id);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   147
	eq->eq_cfg.q_len = q_len;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   148
	eq->eq_cfg.item_size = item_size;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   149
	eq->eq_cfg.cur_eqd = (uint8_t)eq_delay;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   150
	eq->parent = (void *)dev;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   151
	atomic_inc_32(&dev->neqs);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   152
	oce_log(dev, CE_NOTE, MOD_CONFIG,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   153
	    "EQ created, eq=0x%p eq_id=0x%x", (void *)eq, eq->eq_id);
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   154
	/* Save the eq pointer */
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   155
	return (eq);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   156
} /* oce_eq_create */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   157
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   158
/*
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   159
 * function to delete an event queue
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   160
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   161
 * dev - software handle to the device
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   162
 * eq - handle to the eq to be deleted
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   163
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   164
 * return 0=>success, failure otherwise
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   165
 */
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   166
void
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   167
oce_eq_del(struct oce_dev *dev, struct oce_eq *eq)
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   168
{
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   169
	struct oce_mbx mbx;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   170
	struct mbx_destroy_common_eq *fwcmd;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   171
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   172
	/* drain the residual events */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   173
	oce_drain_eq(eq);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   174
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   175
	/* destroy the ring */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   176
	destroy_ring_buffer(dev, eq->ring);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   177
	eq->ring = NULL;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   178
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   179
	/* send a command to delete the EQ */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   180
	fwcmd = (struct mbx_destroy_common_eq *)&mbx.payload;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   181
	fwcmd->params.req.id = eq->eq_id;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   182
	(void) oce_destroy_q(dev, &mbx,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   183
	    sizeof (struct mbx_destroy_common_eq),
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   184
	    QTYPE_EQ);
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   185
	kmem_free(eq, sizeof (struct oce_eq));
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   186
	atomic_dec_32(&dev->neqs);
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   187
}
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   188
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   189
/*
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   190
 * function to create a completion queue
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   191
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   192
 * dev - software handle to the device
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   193
 * eq - optional eq to be associated with to the cq
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   194
 * cqcfg - configuration for this queue
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   195
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   196
 * return pointer to the cq created. NULL on failure
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   197
 */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   198
struct oce_cq *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   199
oce_cq_create(struct oce_dev *dev, struct oce_eq *eq, uint32_t q_len,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   200
    uint32_t item_size, boolean_t sol_event, boolean_t is_eventable,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   201
    boolean_t nodelay, uint32_t ncoalesce)
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   202
{
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   203
	struct oce_cq *cq = NULL;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   204
	struct oce_mbx mbx;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   205
	struct mbx_create_common_cq *fwcmd;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   206
	int ret = 0;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   207
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   208
	/* create cq */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   209
	cq = kmem_zalloc(sizeof (struct oce_cq), KM_NOSLEEP);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   210
	if (cq == NULL) {
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   211
		oce_log(dev, CE_NOTE, MOD_CONFIG, "%s",
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   212
		    "CQ allocation failed");
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   213
		return (NULL);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   214
	}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   215
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   216
	/* create the ring buffer for this queue */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   217
	cq->ring = create_ring_buffer(dev, q_len,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   218
	    item_size, DDI_DMA_CONSISTENT);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   219
	if (cq->ring == NULL) {
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   220
		oce_log(dev, CE_WARN, MOD_CONFIG,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   221
		    "CQ ring alloc failed:0x%p",
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   222
		    (void *)cq->ring);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   223
		kmem_free(cq, sizeof (struct oce_cq));
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   224
		return (NULL);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   225
	}
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   226
	/* initialize mailbox */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   227
	bzero(&mbx, sizeof (struct oce_mbx));
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   228
	fwcmd = (struct mbx_create_common_cq *)&mbx.payload;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   229
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   230
	/* fill the command header */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   231
	mbx_common_req_hdr_init(&fwcmd->hdr, 0, 0,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   232
	    MBX_SUBSYSTEM_COMMON,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   233
	    OPCODE_CREATE_COMMON_CQ, MBX_TIMEOUT_SEC,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   234
	    sizeof (struct mbx_create_common_cq));
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   235
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   236
	/* fill command context */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   237
	/* dw0 */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   238
	fwcmd->params.req.cq_ctx.eventable = is_eventable;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   239
	fwcmd->params.req.cq_ctx.sol_event = sol_event;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   240
	fwcmd->params.req.cq_ctx.valid = 1;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   241
	fwcmd->params.req.cq_ctx.count = OCE_LOG2(q_len/256);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   242
	fwcmd->params.req.cq_ctx.nodelay = nodelay;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   243
	fwcmd->params.req.cq_ctx.coalesce_wm = ncoalesce;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   244
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   245
	/* dw1 */
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   246
	fwcmd->params.req.cq_ctx.armed = B_FALSE;
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   247
	fwcmd->params.req.cq_ctx.eq_id = eq->eq_id;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   248
	fwcmd->params.req.cq_ctx.pd = 0;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   249
	/* dw2 */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   250
	fwcmd->params.req.cq_ctx.function = dev->fn;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   251
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   252
	/* fill the rest of the command */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   253
	fwcmd->params.req.num_pages = cq->ring->dbuf->num_pages;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   254
	oce_page_list(cq->ring->dbuf, &fwcmd->params.req.pages[0],
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   255
	    cq->ring->dbuf->num_pages);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   256
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   257
	/* fill rest of mbx */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   258
	mbx.u0.s.embedded = 1;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   259
	mbx.payload_length = sizeof (struct mbx_create_common_cq);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   260
	DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   261
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   262
	/* now send the mail box */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   263
	ret = oce_mbox_post(dev, &mbx, NULL);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   264
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   265
	if (ret != 0) {
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   266
		oce_log(dev, CE_WARN, MOD_CONFIG,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   267
		    "CQ create failed: 0x%x", ret);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   268
		destroy_ring_buffer(dev, cq->ring);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   269
		kmem_free(cq, sizeof (struct oce_cq));
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   270
		return (NULL);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   271
	}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   272
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   273
	cq->parent = dev;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   274
	cq->eq = eq; /* eq array index */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   275
	cq->cq_cfg.q_len = q_len;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   276
	cq->cq_cfg.item_size = item_size;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   277
	cq->cq_cfg.sol_eventable = (uint8_t)sol_event;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   278
	cq->cq_cfg.nodelay = (uint8_t)nodelay;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   279
	/* interpret the response */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   280
	cq->cq_id = LE_16(fwcmd->params.rsp.cq_id);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   281
	dev->cq[cq->cq_id] = cq;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   282
	atomic_inc_32(&eq->ref_count);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   283
	return (cq);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   284
} /* oce_cq_create */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   285
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   286
/*
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   287
 * function to delete a completion queue
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   288
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   289
 * dev - software handle to the device
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   290
 * cq - handle to the CQ to delete
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   291
 *
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   292
 * return none
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   293
 */
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   294
static void
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   295
oce_cq_del(struct oce_dev *dev, struct oce_cq *cq)
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   296
{
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   297
	struct oce_mbx mbx;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   298
	struct mbx_destroy_common_cq *fwcmd;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   299
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   300
	/* destroy the ring */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   301
	destroy_ring_buffer(dev, cq->ring);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   302
	cq->ring = NULL;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   303
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   304
	bzero(&mbx, sizeof (struct oce_mbx));
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   305
	/* send a command to delete the CQ */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   306
	fwcmd = (struct mbx_destroy_common_cq *)&mbx.payload;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   307
	fwcmd->params.req.id = cq->cq_id;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   308
	(void) oce_destroy_q(dev, &mbx,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   309
	    sizeof (struct mbx_destroy_common_cq),
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   310
	    QTYPE_CQ);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   311
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   312
	/* Reset the handler */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   313
	cq->cq_handler = NULL;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   314
	dev->cq[cq->cq_id] = NULL;
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   315
	atomic_dec_32(&cq->eq->ref_count);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   316
	mutex_destroy(&cq->lock);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   317
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   318
	/* release the eq */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   319
	kmem_free(cq, sizeof (struct oce_cq));
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   320
} /* oce_cq_del */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   321
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   322
/*
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   323
 * function to create an MQ
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   324
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   325
 * dev - software handle to the device
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   326
 * eq - the EQ to associate with the MQ for event notification
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   327
 * q_len - the number of entries to create in the MQ
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   328
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   329
 * return pointer to the created MQ, failure otherwise
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   330
 */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   331
struct oce_mq *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   332
oce_mq_create(struct oce_dev *dev, struct oce_eq *eq, uint32_t q_len)
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   333
{
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   334
	struct oce_mbx mbx;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   335
	struct mbx_create_common_mq *fwcmd;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   336
	struct oce_mq *mq = NULL;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   337
	int ret = 0;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   338
	struct oce_cq  *cq;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   339
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   340
	/* Create the Completion Q */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   341
	cq = oce_cq_create(dev, eq, CQ_LEN_256,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   342
	    sizeof (struct oce_mq_cqe),
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   343
	    B_FALSE, B_TRUE, B_TRUE, 0);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   344
	if (cq == NULL) {
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   345
		return (NULL);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   346
	}
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   347
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   348
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   349
	/* allocate the mq */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   350
	mq = kmem_zalloc(sizeof (struct oce_mq), KM_NOSLEEP);
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   351
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   352
	if (mq == NULL) {
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   353
		goto mq_alloc_fail;
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   354
	}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   355
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   356
	bzero(&mbx, sizeof (struct oce_mbx));
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   357
	/* allocate mbx */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   358
	fwcmd = (struct mbx_create_common_mq *)&mbx.payload;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   359
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   360
	/* create the ring buffer for this queue */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   361
	mq->ring = create_ring_buffer(dev, q_len,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   362
	    sizeof (struct oce_mbx), DDI_DMA_CONSISTENT);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   363
	if (mq->ring == NULL) {
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   364
		oce_log(dev, CE_WARN, MOD_CONFIG,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   365
		    "MQ ring alloc failed:0x%p",
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   366
		    (void *)mq->ring);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   367
		goto mq_ring_alloc;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   368
	}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   369
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   370
	mbx_common_req_hdr_init(&fwcmd->hdr, 0, 0,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   371
	    MBX_SUBSYSTEM_COMMON,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   372
	    OPCODE_CREATE_COMMON_MQ, MBX_TIMEOUT_SEC,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   373
	    sizeof (struct mbx_create_common_mq));
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   375
	fwcmd->params.req.num_pages = mq->ring->dbuf->num_pages;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   376
	oce_page_list(mq->ring->dbuf, fwcmd->params.req.pages,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   377
	    mq->ring->dbuf->num_pages);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   378
	fwcmd->params.req.context.u0.s.cq_id = cq->cq_id;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   379
	fwcmd->params.req.context.u0.s.ring_size =
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   380
	    OCE_LOG2(q_len) + 1;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   381
	fwcmd->params.req.context.u0.s.valid = 1;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   382
	fwcmd->params.req.context.u0.s.fid = dev->fn;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   383
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   384
	/* fill rest of mbx */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   385
	mbx.u0.s.embedded = 1;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   386
	mbx.payload_length = sizeof (struct mbx_create_common_mq);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   387
	DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   388
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   389
	/* now send the mail box */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   390
	ret = oce_mbox_post(dev, &mbx, NULL);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   391
	if (ret != DDI_SUCCESS) {
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   392
		oce_log(dev, CE_WARN, MOD_CONFIG,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   393
		    "MQ create failed: 0x%x", ret);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   394
		goto mq_fail;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   395
	}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   396
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   397
	/* interpret the response */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   398
	mq->mq_id = LE_16(fwcmd->params.rsp.mq_id);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   399
	mq->cq = cq;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   400
	mq->cfg.q_len = (uint8_t)q_len;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   401
	mq->cfg.eqd = 0;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   402
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   403
	/* fill rest of the mq */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   404
	mq->parent = dev;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   405
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   406
	/* set the MQCQ handlers */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   407
	cq->cq_handler = oce_drain_mq_cq;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   408
	cq->cb_arg = (void *)mq;
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   409
	mutex_init(&mq->lock, NULL, MUTEX_DRIVER,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   410
	    DDI_INTR_PRI(dev->intr_pri));
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   411
	return (mq);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   412
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   413
mq_fail:
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   414
	destroy_ring_buffer(dev, mq->ring);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   415
mq_ring_alloc:
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   416
	kmem_free(mq, sizeof (struct oce_mq));
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   417
mq_alloc_fail:
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   418
	oce_cq_del(dev, cq);
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   419
	return (NULL);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   420
} /* oce_mq_create */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   421
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   422
/*
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   423
 * function to delete an MQ
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   424
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   425
 * dev - software handle to the device
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   426
 * mq - pointer to the MQ to delete
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   427
 *
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   428
 * return none
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   429
 */
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   430
static void
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   431
oce_mq_del(struct oce_dev *dev, struct oce_mq *mq)
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   432
{
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   433
	struct oce_mbx mbx;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   434
	struct mbx_destroy_common_mq *fwcmd;
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   435
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   436
	/* destroy the ring */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   437
	destroy_ring_buffer(dev, mq->ring);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   438
	mq->ring = NULL;
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   439
	bzero(&mbx, sizeof (struct oce_mbx));
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   440
	fwcmd = (struct mbx_destroy_common_mq *)&mbx.payload;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   441
	fwcmd->params.req.id = mq->mq_id;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   442
	(void) oce_destroy_q(dev, &mbx,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   443
	    sizeof (struct mbx_destroy_common_mq),
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   444
	    QTYPE_MQ);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   445
	oce_cq_del(dev, mq->cq);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   446
	mq->cq = NULL;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   447
	mutex_destroy(&mq->lock);
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   448
	kmem_free(mq, sizeof (struct oce_mq));
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   449
} /* oce_mq_del */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   450
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   451
/*
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   452
 * function to create a WQ for NIC Tx
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   453
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   454
 * dev - software handle to the device
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   455
 * wqcfg - configuration structure providing WQ config parameters
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   456
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   457
 * return pointer to the WQ created. NULL on failure
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   458
 */
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   459
static struct oce_wq *
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   460
oce_wq_init(struct oce_dev *dev,  uint32_t q_len, int wq_type)
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   461
{
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   462
	struct oce_wq *wq;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   463
	char str[MAX_POOL_NAME];
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   464
	int ret;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   465
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   466
	ASSERT(dev != NULL);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   467
	/* q_len must be min 256 and max 2k */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   468
	if (q_len < 256 || q_len > 2048) {
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   469
		oce_log(dev, CE_WARN, MOD_CONFIG,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   470
		    "Invalid q length. Must be "
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   471
		    "[256, 2000]: 0x%x", q_len);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   472
		return (NULL);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   473
	}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   474
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   475
	/* allocate wq */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   476
	wq = kmem_zalloc(sizeof (struct oce_wq), KM_NOSLEEP);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   477
	if (wq == NULL) {
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   478
		oce_log(dev, CE_WARN, MOD_CONFIG, "%s",
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   479
		    "WQ allocation failed");
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   480
	}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   481
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   482
	/* Set the wq config */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   483
	wq->cfg.q_len = q_len;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   484
	wq->cfg.wq_type = (uint8_t)wq_type;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   485
	wq->cfg.eqd = OCE_DEFAULT_WQ_EQD;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   486
	wq->cfg.nbufs = 2 * wq->cfg.q_len;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   487
	wq->cfg.nhdl = 2 * wq->cfg.q_len;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   488
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   489
	/* assign parent */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   490
	wq->parent = (void *)dev;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   491
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   492
	/* Create the WQ Buffer pool */
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   493
	ret  = oce_wqb_cache_create(wq, dev->tx_bcopy_limit);
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   494
	if (ret != DDI_SUCCESS) {
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   495
		oce_log(dev, CE_WARN, MOD_CONFIG, "%s",
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   496
		    "WQ Buffer Pool create failed ");
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   497
		goto wqb_fail;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   498
	}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   499
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   500
	/* Create a pool of memory handles */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   501
	ret = oce_wqm_cache_create(wq);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   502
	if (ret != DDI_SUCCESS) {
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   503
		oce_log(dev, CE_WARN, MOD_CONFIG, "%s",
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   504
		    "WQ MAP Handles Pool create failed ");
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   505
		goto wqm_fail;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   506
	}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   507
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   508
	(void) snprintf(str, MAX_POOL_NAME, "%s%d", "oce_wqed_", dev->dev_id);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   509
	wq->wqed_cache = kmem_cache_create(str, sizeof (oce_wqe_desc_t),
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   510
	    0, oce_wqe_desc_ctor,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   511
	    oce_wqe_desc_dtor, NULL, NULL, NULL, 0);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   512
	if (wq->wqed_cache == NULL) {
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   513
		oce_log(dev, CE_WARN, MOD_CONFIG, "%s",
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   514
		    "WQ Packet Desc Pool create failed ");
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   515
		goto wqed_fail;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   516
	}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   517
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   518
	/* create the ring buffer */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   519
	wq->ring = create_ring_buffer(dev, q_len,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   520
	    NIC_WQE_SIZE, DDI_DMA_CONSISTENT);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   521
	if (wq->ring == NULL) {
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   522
		oce_log(dev, CE_WARN, MOD_CONFIG, "%s",
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   523
		    "Failed to create WQ ring ");
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   524
		goto wq_ringfail;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   525
	}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   526
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   527
	/* Initialize WQ lock */
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   528
	mutex_init(&wq->tx_lock, NULL, MUTEX_DRIVER,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   529
	    DDI_INTR_PRI(dev->intr_pri));
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   530
	/* Initialize WQ lock */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   531
	mutex_init(&wq->txc_lock, NULL, MUTEX_DRIVER,
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   532
	    DDI_INTR_PRI(dev->intr_pri));
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   533
	atomic_inc_32(&dev->nwqs);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   534
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   535
	OCE_LIST_CREATE(&wq->wqe_desc_list, DDI_INTR_PRI(dev->intr_pri));
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   536
	return (wq);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   537
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   538
wqcq_fail:
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   539
	destroy_ring_buffer(dev, wq->ring);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   540
wq_ringfail:
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   541
	kmem_cache_destroy(wq->wqed_cache);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   542
wqed_fail:
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   543
	oce_wqm_cache_destroy(wq);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   544
wqm_fail:
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   545
	oce_wqb_cache_destroy(wq);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   546
wqb_fail:
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   547
	kmem_free(wq, sizeof (struct oce_wq));
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   548
	return (NULL);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   549
} /* oce_wq_create */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   550
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   551
/*
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   552
 * function to delete a WQ
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   553
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   554
 * dev - software handle to the device
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   555
 * wq - WQ to delete
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   556
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   557
 * return 0 => success, failure otherwise
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   558
 */
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   559
static void
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   560
oce_wq_fini(struct oce_dev *dev, struct oce_wq *wq)
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   561
{
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   562
	/* destroy cq */
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   563
	oce_wqb_cache_destroy(wq);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   564
	oce_wqm_cache_destroy(wq);
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   565
	kmem_cache_destroy(wq->wqed_cache);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   566
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   567
	/* Free the packet descriptor list */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   568
	OCE_LIST_DESTROY(&wq->wqe_desc_list);
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   569
	destroy_ring_buffer(dev, wq->ring);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   570
	wq->ring = NULL;
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   571
	/* Destroy the Mutex */
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   572
	mutex_destroy(&wq->tx_lock);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   573
	mutex_destroy(&wq->txc_lock);
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   574
	kmem_free(wq, sizeof (struct oce_wq));
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   575
	atomic_dec_32(&dev->nwqs);
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   576
} /* oce_wq_del */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   577
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   578
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   579
static int
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   580
oce_wq_create(struct oce_wq *wq, struct oce_eq *eq)
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   581
{
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   582
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   583
	struct oce_mbx mbx;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   584
	struct mbx_create_nic_wq *fwcmd;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   585
	struct oce_dev *dev = wq->parent;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   586
	struct oce_cq *cq;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   587
	int ret;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   588
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   589
	/* create the CQ */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   590
	cq = oce_cq_create(dev, eq, CQ_LEN_1024,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   591
	    sizeof (struct oce_nic_tx_cqe),
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   592
	    B_FALSE, B_TRUE, B_FALSE, 3);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   593
	if (cq == NULL) {
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   594
		oce_log(dev, CE_WARN, MOD_CONFIG, "%s",
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   595
		    "WCCQ create failed ");
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   596
		return (DDI_FAILURE);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   597
	}
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   598
	/* now fill the command */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   599
	bzero(&mbx, sizeof (struct oce_mbx));
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   600
	fwcmd = (struct mbx_create_nic_wq *)&mbx.payload;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   601
	mbx_common_req_hdr_init(&fwcmd->hdr, 0, 0,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   602
	    MBX_SUBSYSTEM_NIC,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   603
	    OPCODE_CREATE_NIC_WQ, MBX_TIMEOUT_SEC,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   604
	    sizeof (struct mbx_create_nic_wq));
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   605
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   606
	fwcmd->params.req.nic_wq_type = (uint8_t)wq->cfg.wq_type;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   607
	fwcmd->params.req.num_pages = wq->ring->dbuf->num_pages;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   608
	oce_log(dev, CE_NOTE, MOD_CONFIG, "NUM_PAGES = 0x%d size = %lu",
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   609
	    (uint32_t)wq->ring->dbuf->num_pages,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   610
	    wq->ring->dbuf->size);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   611
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   612
	/* workaround: fill 0x01 for ulp_mask in rsvd0 */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   613
	fwcmd->params.req.rsvd0 = 0x01;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   614
	fwcmd->params.req.wq_size = OCE_LOG2(wq->cfg.q_len) + 1;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   615
	fwcmd->params.req.valid = 1;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   616
	fwcmd->params.req.pd_id = 0;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   617
	fwcmd->params.req.pci_function_id = dev->fn;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   618
	fwcmd->params.req.cq_id = cq->cq_id;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   619
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   620
	oce_page_list(wq->ring->dbuf, fwcmd->params.req.pages,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   621
	    wq->ring->dbuf->num_pages);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   622
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   623
	/* fill rest of mbx */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   624
	mbx.u0.s.embedded = 1;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   625
	mbx.payload_length = sizeof (struct mbx_create_nic_wq);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   626
	DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   627
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   628
	/* now post the command */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   629
	ret = oce_mbox_post(dev, &mbx, NULL);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   630
	if (ret != DDI_SUCCESS) {
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   631
		oce_log(dev, CE_WARN, MOD_CONFIG,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   632
		    "WQ create failed: %d", ret);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   633
		oce_cq_del(dev, cq);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   634
		return (ret);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   635
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   636
	}
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   637
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   638
	/* interpret the response */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   639
	wq->wq_id = LE_16(fwcmd->params.rsp.wq_id);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   640
	wq->qstate = QCREATED;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   641
	wq->cq = cq;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   642
	/* set the WQCQ handlers */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   643
	wq->cq->cq_handler = oce_drain_wq_cq;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   644
	wq->cq->cb_arg = (void *)wq;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   645
	/* All are free to start with */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   646
	wq->wq_free = wq->cfg.q_len;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   647
	/* reset indicies */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   648
	wq->ring->cidx = 0;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   649
	wq->ring->pidx = 0;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   650
	return (0);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   651
}
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   652
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   653
/*
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   654
 * function to delete a WQ
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   655
 *
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   656
 * dev - software handle to the device
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   657
 * wq - WQ to delete
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   658
 *
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   659
 * return none
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   660
 */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   661
static void
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   662
oce_wq_del(struct oce_dev *dev, struct oce_wq *wq)
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   663
{
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   664
	struct oce_mbx mbx;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   665
	struct mbx_delete_nic_wq *fwcmd;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   666
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   667
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   668
	ASSERT(dev != NULL);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   669
	ASSERT(wq != NULL);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   670
	if (wq->qstate == QCREATED) {
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   671
		bzero(&mbx, sizeof (struct oce_mbx));
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   672
		/* now fill the command */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   673
		fwcmd = (struct mbx_delete_nic_wq *)&mbx.payload;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   674
		fwcmd->params.req.wq_id = wq->wq_id;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   675
		(void) oce_destroy_q(dev, &mbx,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   676
		    sizeof (struct mbx_delete_nic_wq),
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   677
		    QTYPE_WQ);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   678
		wq->qstate = QDELETED;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   679
		oce_cq_del(dev, wq->cq);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   680
		wq->cq = NULL;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   681
	}
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   682
} /* oce_wq_del */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   683
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   684
/*
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   685
 * function to allocate RQ resources
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   686
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   687
 * dev - software handle to the device
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   688
 * rqcfg - configuration structure providing RQ config parameters
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   689
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   690
 * return pointer to the RQ created. NULL on failure
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   691
 */
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   692
/* ARGSUSED */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   693
static struct oce_rq *
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   694
oce_rq_init(struct oce_dev *dev, uint32_t q_len,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   695
    uint32_t frag_size, uint32_t mtu,
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   696
    boolean_t rss)
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   697
{
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   698
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   699
	struct oce_rq *rq;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   700
	int ret;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   701
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   702
	/* validate q creation parameters */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   703
	if (!OCE_LOG2(frag_size))
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   704
		return (NULL);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   705
	if ((q_len == 0) || (q_len > 1024))
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   706
		return (NULL);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   707
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   708
	/* allocate the rq */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   709
	rq = kmem_zalloc(sizeof (struct oce_rq), KM_NOSLEEP);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   710
	if (rq == NULL) {
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   711
		oce_log(dev, CE_WARN, MOD_CONFIG, "%s",
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   712
		    "RQ allocation failed");
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   713
		return (NULL);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   714
	}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   715
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   716
	rq->cfg.q_len = q_len;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   717
	rq->cfg.frag_size = frag_size;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   718
	rq->cfg.mtu = mtu;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   719
	rq->cfg.eqd = 0;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   720
	rq->cfg.nbufs = 8 * 1024;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   721
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   722
	/* assign parent */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   723
	rq->parent = (void *)dev;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   724
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   725
	/* create the cache */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   726
	ret  =  oce_rqb_cache_create(rq, OCE_RQ_BUF_SIZE +
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   727
	    OCE_RQE_BUF_HEADROOM);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   728
	if (ret != DDI_SUCCESS) {
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   729
		goto rqb_fail;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   730
	}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   731
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   732
	/* create the ring buffer */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   733
	rq->ring = create_ring_buffer(dev, q_len,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   734
	    sizeof (struct oce_nic_rqe), DDI_DMA_CONSISTENT);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   735
	if (rq->ring == NULL) {
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   736
		oce_log(dev, CE_WARN, MOD_CONFIG, "%s",
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   737
		    "RQ ring create failed ");
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   738
		goto rq_ringfail;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   739
	}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   740
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   741
	/* allocate mbx */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   742
	rq->shadow_ring = kmem_zalloc(sizeof (struct rq_shadow_entry) *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   743
	    q_len, KM_SLEEP);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   744
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   745
	/* Initialize the RQ lock */
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   746
	mutex_init(&rq->rx_lock, NULL, MUTEX_DRIVER,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   747
	    DDI_INTR_PRI(dev->intr_pri));
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   748
	/* Initialize the recharge  lock */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   749
	mutex_init(&rq->rc_lock, NULL, MUTEX_DRIVER,
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   750
	    DDI_INTR_PRI(dev->intr_pri));
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   751
	atomic_inc_32(&dev->nrqs);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   752
	return (rq);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   753
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   754
rqcq_fail:
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   755
	kmem_free(rq->shadow_ring,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   756
	    sizeof (struct rq_shadow_entry) * q_len);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   757
	destroy_ring_buffer(dev, rq->ring);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   758
rq_ringfail:
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   759
	oce_rqb_cache_destroy(rq);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   760
rqb_fail:
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   761
	kmem_free(rq, sizeof (struct oce_rq));
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   762
	return (NULL);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   763
} /* oce_rq_create */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   764
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   765
/*
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   766
 * function to delete an RQ
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   767
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   768
 * dev - software handle to the device
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   769
 * rq - RQ to delete
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   770
 *
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   771
 * return none
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   772
 */
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   773
static void
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   774
oce_rq_fini(struct oce_dev *dev, struct oce_rq *rq)
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   775
{
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   776
	/* Destroy buffer cache */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   777
	oce_rqb_cache_destroy(rq);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   778
	destroy_ring_buffer(dev, rq->ring);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   779
	rq->ring = NULL;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   780
	kmem_free(rq->shadow_ring,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   781
	    sizeof (struct rq_shadow_entry) * rq->cfg.q_len);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   782
	rq->shadow_ring = NULL;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   783
	mutex_destroy(&rq->rx_lock);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   784
	mutex_destroy(&rq->rc_lock);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   785
	kmem_free(rq, sizeof (struct oce_rq));
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   786
	atomic_dec_32(&dev->nrqs);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   787
} /* oce_rq_del */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   788
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   789
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   790
static int
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   791
oce_rq_create(struct oce_rq *rq, uint32_t if_id, struct oce_eq *eq)
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   792
{
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   793
	struct oce_mbx mbx;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   794
	struct mbx_create_nic_rq *fwcmd;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   795
	struct oce_dev *dev = rq->parent;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   796
	struct oce_cq *cq;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   797
	int ret;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   798
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   799
	cq = oce_cq_create(dev, eq, CQ_LEN_1024, sizeof (struct oce_nic_rx_cqe),
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   800
	    B_FALSE, B_TRUE, B_FALSE, 3);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   801
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   802
	if (cq == NULL) {
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   803
		return (DDI_FAILURE);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   804
	}
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   805
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   806
	/* now fill the command */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   807
	bzero(&mbx, sizeof (struct oce_mbx));
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   808
	fwcmd = (struct mbx_create_nic_rq *)&mbx.payload;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   809
	mbx_common_req_hdr_init(&fwcmd->hdr, 0, 0,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   810
	    MBX_SUBSYSTEM_NIC,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   811
	    OPCODE_CREATE_NIC_RQ, MBX_TIMEOUT_SEC,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   812
	    sizeof (struct mbx_create_nic_rq));
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   813
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   814
	fwcmd->params.req.num_pages = rq->ring->dbuf->num_pages;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   815
	fwcmd->params.req.frag_size = OCE_LOG2(rq->cfg.frag_size);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   816
	fwcmd->params.req.cq_id = cq->cq_id;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   817
	oce_page_list(rq->ring->dbuf, fwcmd->params.req.pages,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   818
	    rq->ring->dbuf->num_pages);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   819
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   820
	fwcmd->params.req.if_id = if_id;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   821
	fwcmd->params.req.max_frame_size = (uint16_t)rq->cfg.mtu;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   822
	fwcmd->params.req.is_rss_queue = rq->cfg.is_rss_queue;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   823
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   824
	/* fill rest of mbx */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   825
	mbx.u0.s.embedded = 1;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   826
	mbx.payload_length = sizeof (struct mbx_create_nic_rq);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   827
	DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   828
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   829
	/* now post the command */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   830
	ret = oce_mbox_post(dev, &mbx, NULL);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   831
	if (ret != 0) {
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   832
		oce_log(dev, CE_WARN, MOD_CONFIG,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   833
		    "RQ create failed: %d", ret);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   834
		oce_cq_del(dev, cq);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   835
		return (ret);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   836
	}
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   837
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   838
	/* interpret the response */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   839
	rq->rq_id = LE_16(fwcmd->params.rsp.u0.s.rq_id);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   840
	/* rq->rss_cpuid = fwcmd->params.rsp.u0.bits.rss_cpuid; */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   841
	rq->cfg.if_id = if_id;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   842
	rq->qstate = QCREATED;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   843
	rq->cq = cq;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   844
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   845
	/* set the Completion Handler */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   846
	rq->cq->cq_handler = oce_drain_rq_cq;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   847
	rq->cq->cb_arg  = (void *)rq;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   848
	/* reset the indicies */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   849
	rq->ring->cidx = 0;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   850
	rq->ring->pidx = 0;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   851
	rq->buf_avail = 0;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   852
	return (0);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   853
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   854
}
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   855
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   856
/*
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   857
 * function to delete an RQ
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   858
 *
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   859
 * dev - software handle to the device
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   860
 * rq - RQ to delete
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   861
 *
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   862
 * return none
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   863
 */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   864
static void
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   865
oce_rq_del(struct oce_dev *dev, struct oce_rq *rq)
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   866
{
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   867
	struct oce_mbx mbx;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   868
	struct mbx_delete_nic_rq *fwcmd;
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   869
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   870
	ASSERT(dev != NULL);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   871
	ASSERT(rq != NULL);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   872
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   873
	bzero(&mbx, sizeof (struct oce_mbx));
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   874
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   875
	/* delete the Queue  */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   876
	if (rq->qstate == QCREATED) {
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   877
		fwcmd = (struct mbx_delete_nic_rq *)&mbx.payload;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   878
		fwcmd->params.req.rq_id = rq->rq_id;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   879
		(void) oce_destroy_q(dev, &mbx,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   880
		    sizeof (struct mbx_delete_nic_rq), QTYPE_RQ);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   881
		rq->qstate = QDELETED;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   882
		oce_clean_rq(rq);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   883
		/* Delete the associated CQ */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   884
		oce_cq_del(dev, rq->cq);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   885
		rq->cq = NULL;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   886
		/* free up the posted buffers */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   887
		oce_rq_discharge(dev->rq[0]);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
   888
	}
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   889
} /* oce_rq_del */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   890
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   891
/*
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   892
 * function to arm an EQ so that it can generate events
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   893
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   894
 * dev - software handle to the device
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   895
 * qid - id of the EQ returned by the fw at the time of creation
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   896
 * npopped - number of EQEs to arm with
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   897
 * rearm - rearm bit
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   898
 * clearint - bit to clear the interrupt condition because of which
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   899
 *	EQEs are generated
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   900
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   901
 * return none
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   902
 */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   903
void
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   904
oce_arm_eq(struct oce_dev *dev, int16_t qid, int npopped,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   905
    boolean_t rearm, boolean_t clearint)
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   906
{
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   907
	eq_db_t eq_db = {0};
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   908
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   909
	eq_db.bits.rearm = rearm;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   910
	eq_db.bits.event  = B_TRUE;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   911
	eq_db.bits.num_popped = npopped;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   912
	eq_db.bits.clrint = clearint;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   913
	eq_db.bits.qid = qid;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   914
	OCE_DB_WRITE32(dev, PD_EQ_DB, eq_db.dw0);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   915
}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   916
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   917
/*
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   918
 * function to arm a CQ with CQEs
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   919
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   920
 * dev - software handle to the device
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   921
 * qid - the id of the CQ returned by the fw at the time of creation
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   922
 * npopped - number of CQEs to arm with
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   923
 * rearm - rearm bit enable/disable
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   924
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   925
 * return none
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   926
 */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   927
void
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   928
oce_arm_cq(struct oce_dev *dev, int16_t qid, int npopped,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   929
    boolean_t rearm)
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   930
{
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   931
	cq_db_t cq_db = {0};
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   932
	cq_db.bits.rearm = rearm;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   933
	cq_db.bits.num_popped = npopped;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   934
	cq_db.bits.event = 0;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   935
	cq_db.bits.qid = qid;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   936
	OCE_DB_WRITE32(dev, PD_CQ_DB, cq_db.dw0);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   937
}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   938
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   939
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   940
/*
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   941
 * function to delete a EQ, CQ, MQ, WQ or RQ
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   942
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   943
 * dev - sofware handle to the device
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   944
 * mbx - mbox command to send to the fw to delete the queue
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   945
 *	mbx contains the queue information to delete
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   946
 * req_size - the size of the mbx payload dependent on the qtype
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   947
 * qtype - the type of queue i.e. EQ, CQ, MQ, WQ or RQ
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   948
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   949
 * return DDI_SUCCESS => success, failure otherwise
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   950
 */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   951
int
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   952
oce_destroy_q(struct oce_dev *dev, struct oce_mbx  *mbx, size_t req_size,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   953
    enum qtype qtype)
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   954
{
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   955
	struct mbx_hdr *hdr = (struct mbx_hdr *)&mbx->payload;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   956
	int opcode;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   957
	int subsys;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   958
	int ret;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   959
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   960
	switch (qtype) {
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   961
	case QTYPE_EQ: {
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   962
		opcode = OPCODE_DESTROY_COMMON_EQ;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   963
		subsys = MBX_SUBSYSTEM_COMMON;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   964
		break;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   965
	}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   966
	case QTYPE_CQ: {
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   967
		opcode = OPCODE_DESTROY_COMMON_CQ;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   968
		subsys = MBX_SUBSYSTEM_COMMON;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   969
		break;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   970
	}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   971
	case QTYPE_MQ: {
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   972
		opcode = OPCODE_DESTROY_COMMON_MQ;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   973
		subsys = MBX_SUBSYSTEM_COMMON;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   974
		break;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   975
	}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   976
	case QTYPE_WQ: {
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   977
		opcode = OPCODE_DELETE_NIC_WQ;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   978
		subsys = MBX_SUBSYSTEM_NIC;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   979
		break;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   980
	}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   981
	case QTYPE_RQ: {
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   982
		opcode = OPCODE_DELETE_NIC_RQ;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   983
		subsys = MBX_SUBSYSTEM_NIC;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   984
		break;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   985
	}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   986
	default: {
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   987
		ASSERT(0);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   988
		break;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   989
	}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   990
	}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   991
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   992
	mbx_common_req_hdr_init(hdr, 0, 0, subsys,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   993
	    opcode, MBX_TIMEOUT_SEC, req_size);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   994
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   995
	/* fill rest of mbx */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   996
	mbx->u0.s.embedded = 1;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   997
	mbx->payload_length = (uint32_t)req_size;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   998
	DW_SWAP(u32ptr(mbx), mbx->payload_length + OCE_BMBX_RHDR_SZ);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   999
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1000
	/* send command */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1001
	ret = oce_mbox_post(dev, mbx, NULL);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1002
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1003
	if (ret != 0) {
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1004
		oce_log(dev, CE_WARN, MOD_CONFIG, "%s",
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1005
		    "Failed to del q ");
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1006
	}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1007
	return (ret);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1008
}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1009
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1010
/*
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1011
 * function to set the delay parameter in the EQ for interrupt coalescing
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1012
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1013
 * dev - software handle to the device
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1014
 * eq_arr - array of EQ ids to delete
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1015
 * eq_cnt - number of elements in eq_arr
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1016
 * eq_delay - delay parameter
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1017
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1018
 * return DDI_SUCCESS => success, failure otherwise
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1019
 */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1020
int
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1021
oce_set_eq_delay(struct oce_dev *dev, uint32_t *eq_arr,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1022
    uint32_t eq_cnt, uint32_t eq_delay)
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1023
{
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1024
	struct oce_mbx mbx;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1025
	struct mbx_modify_common_eq_delay *fwcmd;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1026
	int ret;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1027
	int neq;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1028
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1029
	bzero(&mbx, sizeof (struct oce_mbx));
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1030
	fwcmd = (struct mbx_modify_common_eq_delay *)&mbx.payload;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1031
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1032
	/* fill the command */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1033
	fwcmd->params.req.num_eq = eq_cnt;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1034
	for (neq = 0; neq < eq_cnt; neq++) {
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1035
		fwcmd->params.req.delay[neq].eq_id = eq_arr[neq];
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1036
		fwcmd->params.req.delay[neq].phase = 0;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1037
		fwcmd->params.req.delay[neq].dm = eq_delay;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1038
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1039
	}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1040
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1041
	/* initialize the ioctl header */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1042
	mbx_common_req_hdr_init(&fwcmd->hdr, 0, 0,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1043
	    MBX_SUBSYSTEM_COMMON,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1044
	    OPCODE_MODIFY_COMMON_EQ_DELAY,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1045
	    MBX_TIMEOUT_SEC,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1046
	    sizeof (struct mbx_modify_common_eq_delay));
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1047
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1048
	/* fill rest of mbx */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1049
	mbx.u0.s.embedded = 1;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1050
	mbx.payload_length = sizeof (struct mbx_modify_common_eq_delay);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1051
	DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1052
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1053
	/* post the command */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1054
	ret = oce_mbox_post(dev, &mbx, NULL);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1055
	if (ret != 0) {
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1056
		oce_log(dev, CE_WARN, MOD_CONFIG,
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1057
		    "Failed to set EQ delay %d", ret);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1058
	}
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1059
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1060
	return (ret);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1061
} /* oce_set_eq_delay */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1062
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1063
/*
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1064
 * function to cleanup the eqs used during stop
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1065
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1066
 * eq - pointer to event queue structure
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1067
 *
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1068
 * return none
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1069
 */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1070
void
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1071
oce_drain_eq(struct oce_eq *eq)
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1072
{
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1073
	struct oce_eqe *eqe;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1074
	uint16_t num_eqe = 0;
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1075
	struct oce_dev *dev;
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1076
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1077
	dev = eq->parent;
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1078
	/* get the first item in eq to process */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1079
	eqe = RING_GET_CONSUMER_ITEM_VA(eq->ring, struct oce_eqe);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1080
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1081
	while (eqe->u0.dw0) {
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1082
		eqe->u0.dw0 = LE_32(eqe->u0.dw0);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1083
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1084
		/* clear valid bit */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1085
		eqe->u0.dw0 = 0;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1086
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1087
		/* process next eqe */
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1088
		RING_GET(eq->ring, 1);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1089
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1090
		eqe = RING_GET_CONSUMER_ITEM_VA(eq->ring, struct oce_eqe);
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1091
		num_eqe++;
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1092
	} /* for all EQEs */
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1093
	if (num_eqe) {
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1094
		oce_arm_eq(dev, eq->eq_id, num_eqe, B_FALSE, B_TRUE);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1095
	}
11374
b345d20da176 PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1096
} /* oce_drain_eq */
11723
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1097
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1098
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1099
int
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1100
oce_init_txrx(struct oce_dev  *dev)
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1101
{
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1102
	dev->wq[0] = oce_wq_init(dev, dev->tx_ring_size, NIC_WQ_TYPE_STANDARD);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1103
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1104
	if (dev->wq[0] == NULL) {
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1105
		goto queue_fail;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1106
	}
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1107
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1108
	dev->rq[0] = oce_rq_init(dev, dev->rx_ring_size, OCE_RQ_BUF_SIZE,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1109
	    OCE_RQ_MAX_FRAME_SZ, B_FALSE);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1110
	if (dev->rq[0] == NULL) {
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1111
		goto queue_fail;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1112
	}
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1113
	return (DDI_SUCCESS);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1114
queue_fail:
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1115
	oce_fini_txrx(dev);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1116
	return (DDI_FAILURE);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1117
}
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1118
void
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1119
oce_fini_txrx(struct oce_dev *dev)
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1120
{
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1121
	if (dev->wq[0] != NULL) {
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1122
		oce_wq_fini(dev, dev->wq[0]);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1123
		dev->wq[0] = NULL;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1124
	}
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1125
	if (dev->rq[0] != NULL) {
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1126
		oce_rq_fini(dev, dev->rq[0]);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1127
		dev->rq[0] = NULL;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1128
	}
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1129
	return;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1130
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1131
}
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1132
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1133
int
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1134
oce_create_queues(struct oce_dev *dev)
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1135
{
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1136
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1137
	int i;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1138
	struct oce_eq *eq;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1139
	struct oce_mq *mq;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1140
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1141
	for (i = 0; i < dev->num_vectors; i++) {
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1142
		eq = oce_eq_create(dev, EQ_LEN_1024, EQE_SIZE_4, 0);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1143
		if (eq == NULL) {
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1144
			goto rings_fail;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1145
		}
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1146
		dev->eq[i] = eq;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1147
	}
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1148
	if (oce_wq_create(dev->wq[0], dev->eq[0]) != 0)
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1149
		goto rings_fail;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1150
	if (oce_rq_create(dev->rq[0], dev->if_id,
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1151
	    dev->neqs > 1 ? dev->eq[1] : dev->eq[0]) != 0)
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1152
		goto rings_fail;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1153
	mq = oce_mq_create(dev, dev->eq[0], 64);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1154
	if (mq == NULL)
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1155
		goto rings_fail;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1156
	dev->mq = mq;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1157
	return (DDI_SUCCESS);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1158
rings_fail:
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1159
	oce_delete_queues(dev);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1160
	return (DDI_FAILURE);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1161
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1162
}
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1163
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1164
void
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1165
oce_delete_queues(struct oce_dev *dev)
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1166
{
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1167
	int i;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1168
	if (dev->mq != NULL) {
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1169
		oce_mq_del(dev, dev->mq);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1170
		dev->mq = NULL;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1171
	}
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1172
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1173
	for (i = 0; i < dev->nrqs; i++) {
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1174
		oce_rq_del(dev, dev->rq[i]);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1175
	}
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1176
	for (i = 0; i < dev->nwqs; i++) {
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1177
		oce_wq_del(dev, dev->wq[i]);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1178
	}
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1179
	/* create as many eqs as the number of vectors */
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1180
	for (i = 0; i < dev->num_vectors; i++) {
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1181
		oce_eq_del(dev, dev->eq[i]);
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1182
		dev->eq[i] = NULL;
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1183
	}
b7b5ccb8e5c5 6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11374
diff changeset
  1184
}