Crossbow - transition to Mercurial; Syncing files missed by wx2hg

   1 /*
   2  * CDDL HEADER START
   3  *
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  *
  21  * Copyright (c) 2002-2006 Neterion, Inc.
  22  */
  23 
  24 #include "xgehal-driver.h"
  25 #include "xgehal-device.h"
  26 
  27 static xge_hal_driver_t g_driver;
  28 xge_hal_driver_t *g_xge_hal_driver = NULL;
  29 char *g_xge_hal_log = NULL;
  30 
  31 #ifdef XGE_OS_MEMORY_CHECK
  32 xge_os_malloc_t g_malloc_arr[XGE_OS_MALLOC_CNT_MAX];
  33 int g_malloc_cnt = 0;
  34 #endif
  35 
  36 /*
  37  * Runtime tracing support
  38  */
  39 static unsigned int g_module_mask_default = 0;
  40 unsigned int *g_module_mask = &g_module_mask_default;
  41 static int g_level_default = 0;
  42 int *g_level = &g_level_default;
  43 
  44 #ifdef XGE_TRACE_INTO_CIRCULAR_ARR
  45 static xge_os_tracebuf_t g_tracebuf;
  46 char *dmesg, *dmesg_start;
  47 
  48 /**
  49  * xge_hal_driver_tracebuf_dump - Dump the trace buffer.
  50  *
  51  * Dump the trace buffer contents.
  52  */
  53 void
  54 xge_hal_driver_tracebuf_dump(void)
  55 {
  56         int i;
  57         int off;
  58 
  59         if (g_xge_os_tracebuf == NULL) {
  60                 return;
  61         }
  62 
  63         xge_os_printf("################ Trace dump Begin ###############");
  64         if (g_xge_os_tracebuf->wrapped_once) {
  65                 for (i = 0; i < g_xge_os_tracebuf->size -
  66                                 g_xge_os_tracebuf->offset; i += off) {
  67                         if (*(dmesg_start + i))
  68                                 xge_os_printf(dmesg_start + i);
  69                         off = xge_os_strlen(dmesg_start + i) + 1;
  70                 }
  71         }
  72         for (i = 0; i < g_xge_os_tracebuf->offset; i += off) {
  73                 if (*(dmesg + i))
  74                         xge_os_printf(dmesg + i);
  75                 off = xge_os_strlen(dmesg + i) + 1;
  76         }
  77         xge_os_printf("################ Trace dump End ###############");
  78 }











































  79 #endif
  80 xge_os_tracebuf_t *g_xge_os_tracebuf = NULL;
  81 
  82 #ifdef XGE_HAL_DEBUG_BAR0_OFFSET
  83 void
  84 xge_hal_driver_bar0_offset_check(void)
  85 {
  86         xge_assert(xge_offsetof(xge_hal_pci_bar0_t, adapter_status) ==
  87                    0x108);
  88         xge_assert(xge_offsetof(xge_hal_pci_bar0_t, tx_traffic_int) ==
  89                    0x08E0);
  90         xge_assert(xge_offsetof(xge_hal_pci_bar0_t, dtx_control) ==
  91                    0x09E8);
  92         xge_assert(xge_offsetof(xge_hal_pci_bar0_t, tx_fifo_partition_0) ==
  93                    0x1108);
  94         xge_assert(xge_offsetof(xge_hal_pci_bar0_t, pcc_enable) ==
  95                    0x1170);
  96         xge_assert(xge_offsetof(xge_hal_pci_bar0_t, prc_rxd0_n[0]) ==
  97                    0x1930);
  98         xge_assert(xge_offsetof(xge_hal_pci_bar0_t, rti_command_mem) ==
  99                    0x19B8);
 100         xge_assert(xge_offsetof(xge_hal_pci_bar0_t, mac_cfg) ==
 101                    0x2100);
 102         xge_assert(xge_offsetof(xge_hal_pci_bar0_t, rmac_addr_cmd_mem) ==
 103                    0x2128);
 104         xge_assert(xge_offsetof(xge_hal_pci_bar0_t, mac_link_util) ==
 105                    0x2170);
 106         xge_assert(xge_offsetof(xge_hal_pci_bar0_t, mc_pause_thresh_q0q3) ==
 107                    0x2918);
 108         xge_assert(xge_offsetof(xge_hal_pci_bar0_t, pcc_err_reg) ==
 109                    0x1040);
 110         xge_assert(xge_offsetof(xge_hal_pci_bar0_t, rxdma_int_status) ==
 111                    0x1800);
 112         xge_assert(xge_offsetof(xge_hal_pci_bar0_t, mac_tmac_err_reg) ==
 113                    0x2010);
 114         xge_assert(xge_offsetof(xge_hal_pci_bar0_t, mc_err_reg) ==
 115                    0x2810);
 116         xge_assert(xge_offsetof(xge_hal_pci_bar0_t, xgxs_int_status) ==
 117                    0x3000);
 118 }
 119 #endif
 120 
 121 /**
 122  * xge_hal_driver_initialize - Initialize HAL.
 123  * @config: HAL configuration, see xge_hal_driver_config_t{}.
 124  * @uld_callbacks: Upper-layer driver callbacks, e.g. link-up.
 125  *
 126  * HAL initialization entry point. Not to confuse with device initialization
 127  * (note that HAL "contains" zero or more Xframe devices).
 128  *
 129  * Returns: XGE_HAL_OK - success;
 130  * XGE_HAL_ERR_BAD_DRIVER_CONFIG - Driver configuration params invalid.
 131  *
 132  * See also: xge_hal_device_initialize(), xge_hal_status_e{},
 133  * xge_hal_uld_cbs_t{}.
 134  */
 135 xge_hal_status_e
 136 xge_hal_driver_initialize(xge_hal_driver_config_t *config,
 137                         xge_hal_uld_cbs_t *uld_callbacks)
 138 {
 139         xge_hal_status_e status;
 140 
 141         g_xge_hal_driver = &g_driver;
 142 
 143         xge_hal_driver_debug_module_mask_set(XGE_DEBUG_MODULE_MASK_DEF);
 144         xge_hal_driver_debug_level_set(XGE_DEBUG_LEVEL_DEF);
 145 
 146 #ifdef XGE_HAL_DEBUG_BAR0_OFFSET
 147         xge_hal_driver_bar0_offset_check();
 148 #endif
 149 
 150 #ifdef XGE_TRACE_INTO_CIRCULAR_ARR
 151         if (config->tracebuf_size == 0)
 152                 config->tracebuf_size = XGE_HAL_DEF_CIRCULAR_ARR;







 153 #endif
 154 
 155         status = __hal_driver_config_check(config);
 156         if (status != XGE_HAL_OK)
 157                 return status;
 158 
 159         xge_os_memzero(g_xge_hal_driver,  sizeof(xge_hal_driver_t));
 160 
 161         /* apply config */
 162         xge_os_memcpy(&g_xge_hal_driver->config, config,
 163                                 sizeof(xge_hal_driver_config_t));
 164 
 165         /* apply ULD callbacks */
 166         xge_os_memcpy(&g_xge_hal_driver->uld_callbacks, uld_callbacks,
 167                                         sizeof(xge_hal_uld_cbs_t));
 168 
 169         g_xge_hal_driver->is_initialized = 1;
 170 
 171 #ifdef XGE_TRACE_INTO_CIRCULAR_ARR
 172         g_tracebuf.size = config->tracebuf_size;
 173         g_tracebuf.data = (char *)xge_os_malloc(NULL, g_tracebuf.size);
 174         if (g_tracebuf.data == NULL) {
 175                 xge_os_printf("cannot allocate trace buffer!");
 176                 return XGE_HAL_ERR_OUT_OF_MEMORY;
 177         }








 178         g_tracebuf.offset = 0;
 179         *g_tracebuf.msg = 0;
 180         xge_os_memzero(g_tracebuf.data, g_tracebuf.size);
 181         g_xge_os_tracebuf = &g_tracebuf;
 182         dmesg = g_tracebuf.data;
 183         *dmesg = 0;
 184 #endif
 185         return XGE_HAL_OK;
 186 }
 187 
 188 /**
 189  * xge_hal_driver_terminate - Terminate HAL.
 190  *
 191  * HAL termination entry point.
 192  *
 193  * See also: xge_hal_device_terminate().
 194  */
 195 void
 196 xge_hal_driver_terminate(void)
 197 {
 198         g_xge_hal_driver->is_initialized = 0;
 199 
 200 #ifdef XGE_TRACE_INTO_CIRCULAR_ARR
 201         if (g_tracebuf.size) {
 202                 xge_os_free(NULL, g_tracebuf.data, g_tracebuf.size);
 203         }
 204 #endif
 205 
 206         g_xge_hal_driver = NULL;
 207 
 208 #ifdef XGE_OS_MEMORY_CHECK
 209         {
 210                 int i, leaks=0;
 211                 xge_os_printf("OSPAL: max g_malloc_cnt %d", g_malloc_cnt);
 212                 for (i=0; i<g_malloc_cnt; i++) {
 213                         if (g_malloc_arr[i].ptr != NULL) {
 214                                 xge_os_printf("OSPAL: memory leak detected at "
 215                                         "%s:%d:"XGE_OS_LLXFMT":%d",
 216                                         g_malloc_arr[i].file,
 217                                         g_malloc_arr[i].line,
 218                                         (unsigned long long)(ulong_t)
 219                                                 g_malloc_arr[i].ptr,
 220                                         g_malloc_arr[i].size);
 221                                 leaks++;
 222                         }
 223                 }
 224                 if (leaks) {
 225                         xge_os_printf("OSPAL: %d memory leaks detected", leaks);
 226                 } else {
 227                         xge_os_printf("OSPAL: no memory leaks detected");
 228                 }
 229         }
 230 #endif
 231 }
--- EOF ---