1/*- 2 * Copyright (c) 2006 IronPort Systems 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 11 unchanged lines hidden (view full) --- 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> |
28__FBSDID("$FreeBSD: head/sys/dev/mfi/mfi_disk.c 242681 2012-11-06 23:25:06Z ambrisko $"); |
29 30#include "opt_mfi.h" 31 32#include <sys/param.h> 33#include <sys/systm.h> 34#include <sys/kernel.h> 35#include <sys/selinfo.h> 36#include <sys/module.h> --- 51 unchanged lines hidden (view full) --- 88 return (0); 89} 90 91static int 92mfi_disk_attach(device_t dev) 93{ 94 struct mfi_disk *sc; 95 struct mfi_ld_info *ld_info; |
96 struct mfi_disk_pending *ld_pend; |
97 uint64_t sectors; 98 uint32_t secsize; 99 char *state; 100 101 sc = device_get_softc(dev); 102 ld_info = device_get_ivars(dev); 103 104 sc->ld_dev = dev; 105 sc->ld_id = ld_info->ld_config.properties.ld.v.target_id; 106 sc->ld_unit = device_get_unit(dev); 107 sc->ld_info = ld_info; 108 sc->ld_controller = device_get_softc(device_get_parent(dev)); 109 sc->ld_flags = 0; 110 111 sectors = ld_info->size; 112 secsize = MFI_SECTOR_LEN; 113 mtx_lock(&sc->ld_controller->mfi_io_lock); 114 TAILQ_INSERT_TAIL(&sc->ld_controller->mfi_ld_tqh, sc, ld_link); |
115 TAILQ_FOREACH(ld_pend, &sc->ld_controller->mfi_ld_pend_tqh, 116 ld_link) { 117 TAILQ_REMOVE(&sc->ld_controller->mfi_ld_pend_tqh, 118 ld_pend, ld_link); 119 free(ld_pend, M_MFIBUF); 120 break; 121 } |
122 mtx_unlock(&sc->ld_controller->mfi_io_lock); 123 124 switch (ld_info->ld_config.params.state) { 125 case MFI_LD_STATE_OFFLINE: 126 state = "offline"; 127 break; 128 case MFI_LD_STATE_PARTIALLY_DEGRADED: 129 state = "partially degraded"; --- 4 unchanged lines hidden (view full) --- 134 case MFI_LD_STATE_OPTIMAL: 135 state = "optimal"; 136 break; 137 default: 138 state = "unknown"; 139 break; 140 } 141 |
142 if ( strlen(ld_info->ld_config.properties.name) == 0 ) { 143 device_printf(dev, 144 "%juMB (%ju sectors) RAID volume (no label) is %s\n", 145 sectors / (1024 * 1024 / secsize), sectors, state); 146 } else { 147 device_printf(dev, 148 "%juMB (%ju sectors) RAID volume '%s' is %s\n", 149 sectors / (1024 * 1024 / secsize), sectors, 150 ld_info->ld_config.properties.name, state); 151 } |
152 153 sc->ld_disk = disk_alloc(); 154 sc->ld_disk->d_drv1 = sc; 155 sc->ld_disk->d_maxsize = min(sc->ld_controller->mfi_max_io * secsize, 156 (sc->ld_controller->mfi_max_sge - 1) * PAGE_SIZE); 157 sc->ld_disk->d_name = "mfid"; 158 sc->ld_disk->d_open = mfi_disk_open; 159 sc->ld_disk->d_close = mfi_disk_close; --- 181 unchanged lines hidden --- |