Deleted Added
sdiff udiff text old ( 238371 ) new ( 242681 )
full compact
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 238371 2012-07-11 18:16:54Z sbruno $");
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 uint64_t sectors;
97 uint32_t secsize;
98 char *state;
99
100 sc = device_get_softc(dev);
101 ld_info = device_get_ivars(dev);
102
103 sc->ld_dev = dev;
104 sc->ld_id = ld_info->ld_config.properties.ld.v.target_id;
105 sc->ld_unit = device_get_unit(dev);
106 sc->ld_info = ld_info;
107 sc->ld_controller = device_get_softc(device_get_parent(dev));
108 sc->ld_flags = 0;
109
110 sectors = ld_info->size;
111 secsize = MFI_SECTOR_LEN;
112 mtx_lock(&sc->ld_controller->mfi_io_lock);
113 TAILQ_INSERT_TAIL(&sc->ld_controller->mfi_ld_tqh, sc, ld_link);
114 mtx_unlock(&sc->ld_controller->mfi_io_lock);
115
116 switch (ld_info->ld_config.params.state) {
117 case MFI_LD_STATE_OFFLINE:
118 state = "offline";
119 break;
120 case MFI_LD_STATE_PARTIALLY_DEGRADED:
121 state = "partially degraded";

--- 4 unchanged lines hidden (view full) ---

126 case MFI_LD_STATE_OPTIMAL:
127 state = "optimal";
128 break;
129 default:
130 state = "unknown";
131 break;
132 }
133
134 if ( strlen(ld_info->ld_config.properties.name) == 0 ) {
135 device_printf(dev,
136 "%juMB (%ju sectors) RAID volume (no label) is %s\n",
137 sectors / (1024 * 1024 / secsize), sectors, state);
138 } else {
139 device_printf(dev,
140 "%juMB (%ju sectors) RAID volume '%s' is %s\n",
141 sectors / (1024 * 1024 / secsize), sectors,
142 ld_info->ld_config.properties.name, state);
143 }
144
145 sc->ld_disk = disk_alloc();
146 sc->ld_disk->d_drv1 = sc;
147 sc->ld_disk->d_maxsize = min(sc->ld_controller->mfi_max_io * secsize,
148 (sc->ld_controller->mfi_max_sge - 1) * PAGE_SIZE);
149 sc->ld_disk->d_name = "mfid";
150 sc->ld_disk->d_open = mfi_disk_open;
151 sc->ld_disk->d_close = mfi_disk_close;

--- 181 unchanged lines hidden ---