Lines Matching +full:conf +full:- +full:pd
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
8 * Copyright 1994-2009 The FreeBSD Project.
50 #include <sys/conf.h>
106 sc->pd_dev = dev; in mfi_syspd_attach()
107 sc->pd_id = pd_info->ref.v.device_id; in mfi_syspd_attach()
108 sc->pd_unit = device_get_unit(dev); in mfi_syspd_attach()
109 sc->pd_info = pd_info; in mfi_syspd_attach()
110 sc->pd_controller = device_get_softc(device_get_parent(dev)); in mfi_syspd_attach()
111 sc->pd_flags = 0; in mfi_syspd_attach()
113 sectors = pd_info->raw_size; in mfi_syspd_attach()
115 mtx_lock(&sc->pd_controller->mfi_io_lock); in mfi_syspd_attach()
116 TAILQ_INSERT_TAIL(&sc->pd_controller->mfi_syspd_tqh, sc, pd_link); in mfi_syspd_attach()
117 TAILQ_FOREACH(syspd_pend, &sc->pd_controller->mfi_syspd_pend_tqh, in mfi_syspd_attach()
119 TAILQ_REMOVE(&sc->pd_controller->mfi_syspd_pend_tqh, in mfi_syspd_attach()
124 mtx_unlock(&sc->pd_controller->mfi_io_lock); in mfi_syspd_attach()
126 sectors / (1024 * 1024 / secsize), sectors, sc->pd_id); in mfi_syspd_attach()
127 sc->pd_disk = disk_alloc(); in mfi_syspd_attach()
128 sc->pd_disk->d_drv1 = sc; in mfi_syspd_attach()
129 sc->pd_disk->d_maxsize = min(sc->pd_controller->mfi_max_io * secsize, in mfi_syspd_attach()
130 (sc->pd_controller->mfi_max_sge - 1) * PAGE_SIZE); in mfi_syspd_attach()
131 sc->pd_disk->d_name = "mfisyspd"; in mfi_syspd_attach()
132 sc->pd_disk->d_open = mfi_syspd_open; in mfi_syspd_attach()
133 sc->pd_disk->d_close = mfi_syspd_close; in mfi_syspd_attach()
134 sc->pd_disk->d_strategy = mfi_syspd_strategy; in mfi_syspd_attach()
135 sc->pd_disk->d_dump = mfi_syspd_dump; in mfi_syspd_attach()
136 sc->pd_disk->d_unit = sc->pd_unit; in mfi_syspd_attach()
137 sc->pd_disk->d_sectorsize = secsize; in mfi_syspd_attach()
138 sc->pd_disk->d_mediasize = sectors * secsize; in mfi_syspd_attach()
139 if (sc->pd_disk->d_mediasize >= (1 * 1024 * 1024)) { in mfi_syspd_attach()
140 sc->pd_disk->d_fwheads = 255; in mfi_syspd_attach()
141 sc->pd_disk->d_fwsectors = 63; in mfi_syspd_attach()
143 sc->pd_disk->d_fwheads = 64; in mfi_syspd_attach()
144 sc->pd_disk->d_fwsectors = 32; in mfi_syspd_attach()
146 sc->pd_disk->d_flags = DISKFLAG_UNMAPPED_BIO; in mfi_syspd_attach()
147 disk_create(sc->pd_disk, DISK_VERSION); in mfi_syspd_attach()
161 mtx_lock(&sc->pd_controller->mfi_io_lock); in mfi_syspd_detach()
162 if (((sc->pd_disk->d_flags & DISKFLAG_OPEN) || in mfi_syspd_detach()
163 (sc->pd_flags & MFI_DISK_FLAGS_OPEN)) && in mfi_syspd_detach()
164 (sc->pd_controller->mfi_keep_deleted_volumes || in mfi_syspd_detach()
165 sc->pd_controller->mfi_detaching)) { in mfi_syspd_detach()
166 mtx_unlock(&sc->pd_controller->mfi_io_lock); in mfi_syspd_detach()
170 mtx_unlock(&sc->pd_controller->mfi_io_lock); in mfi_syspd_detach()
172 disk_destroy(sc->pd_disk); in mfi_syspd_detach()
173 mtx_lock(&sc->pd_controller->mfi_io_lock); in mfi_syspd_detach()
174 TAILQ_REMOVE(&sc->pd_controller->mfi_syspd_tqh, sc, pd_link); in mfi_syspd_detach()
175 mtx_unlock(&sc->pd_controller->mfi_io_lock); in mfi_syspd_detach()
176 free(sc->pd_info, M_MFIBUF); in mfi_syspd_detach()
186 sc = dp->d_drv1; in mfi_syspd_open()
187 mtx_lock(&sc->pd_controller->mfi_io_lock); in mfi_syspd_open()
188 if (sc->pd_flags & MFI_DISK_FLAGS_DISABLED) in mfi_syspd_open()
191 sc->pd_flags |= MFI_DISK_FLAGS_OPEN; in mfi_syspd_open()
194 mtx_unlock(&sc->pd_controller->mfi_io_lock); in mfi_syspd_open()
203 sc = dp->d_drv1; in mfi_syspd_close()
204 mtx_lock(&sc->pd_controller->mfi_io_lock); in mfi_syspd_close()
205 sc->pd_flags &= ~MFI_DISK_FLAGS_OPEN; in mfi_syspd_close()
206 mtx_unlock(&sc->pd_controller->mfi_io_lock); in mfi_syspd_close()
215 device_printf(sc->pd_dev, "syspd disable \n"); in mfi_syspd_disable()
216 mtx_assert(&sc->pd_controller->mfi_io_lock, MA_OWNED); in mfi_syspd_disable()
217 if (sc->pd_flags & MFI_DISK_FLAGS_OPEN) { in mfi_syspd_disable()
218 if (sc->pd_controller->mfi_delete_busy_volumes) in mfi_syspd_disable()
220 device_printf(sc->pd_dev, in mfi_syspd_disable()
224 sc->pd_flags |= MFI_DISK_FLAGS_DISABLED; in mfi_syspd_disable()
232 device_printf(sc->pd_dev, "syspd enable \n"); in mfi_syspd_enable()
233 mtx_assert(&sc->pd_controller->mfi_io_lock, MA_OWNED); in mfi_syspd_enable()
234 sc->pd_flags &= ~MFI_DISK_FLAGS_DISABLED; in mfi_syspd_enable()
243 sc = bio->bio_disk->d_drv1; in mfi_syspd_strategy()
246 bio->bio_error = EINVAL; in mfi_syspd_strategy()
247 bio->bio_flags |= BIO_ERROR; in mfi_syspd_strategy()
248 bio->bio_resid = bio->bio_bcount; in mfi_syspd_strategy()
253 controller = sc->pd_controller; in mfi_syspd_strategy()
254 bio->bio_driver1 = (void *)(uintptr_t)sc->pd_id; in mfi_syspd_strategy()
255 /* Mark it as system PD IO */ in mfi_syspd_strategy()
256 bio->bio_driver2 = (void *)MFI_SYS_PD_IO; in mfi_syspd_strategy()
257 mtx_lock(&controller->mfi_io_lock); in mfi_syspd_strategy()
260 mtx_unlock(&controller->mfi_io_lock); in mfi_syspd_strategy()
273 sc = dp->d_drv1; in mfi_syspd_dump()
274 parent_sc = sc->pd_controller; in mfi_syspd_dump()
278 sc->pd_id, offset / MFI_SECTOR_LEN, virt, len)) != 0) in mfi_syspd_dump()
281 /* mfi_sync_cache(parent_sc, sc->ld_id); */ in mfi_syspd_dump()