diff options
| author | Alexander Motin <mav@FreeBSD.org> | 2009-12-25 17:34:43 +0000 |
|---|---|---|
| committer | Alexander Motin <mav@FreeBSD.org> | 2009-12-25 17:34:43 +0000 |
| commit | c078c1963328d5a940fe213e1e6cf12860cd8aa2 (patch) | |
| tree | 7730e9036ea83d3215fa4bc9f50399c2b347de5d /sys/dev/twe | |
| parent | 05c10507e983781e5b0b2c85eec0362929fe6941 (diff) | |
Notes
Diffstat (limited to 'sys/dev/twe')
| -rw-r--r-- | sys/dev/twe/twe.c | 5 | ||||
| -rw-r--r-- | sys/dev/twe/twe_freebsd.c | 7 | ||||
| -rw-r--r-- | sys/dev/twe/twevar.h | 1 |
3 files changed, 11 insertions, 2 deletions
diff --git a/sys/dev/twe/twe.c b/sys/dev/twe/twe.c index 90dfa2e505e41..6994cb4106d19 100644 --- a/sys/dev/twe/twe.c +++ b/sys/dev/twe/twe.c @@ -201,7 +201,7 @@ twe_add_unit(struct twe_softc *sc, int unit) int table, error = 0; u_int16_t dsize; TWE_Param *drives = NULL, *param = NULL; - TWE_Unit_Descriptor *ud; + TWE_Array_Descriptor *ud; if (unit < 0 || unit > TWE_MAX_UNITS) return (EINVAL); @@ -244,8 +244,9 @@ twe_add_unit(struct twe_softc *sc, int unit) error = EIO; goto out; } - ud = (TWE_Unit_Descriptor *)param->data; + ud = (TWE_Array_Descriptor *)param->data; dr->td_type = ud->configuration; + dr->td_stripe = ud->stripe_size; /* build synthetic geometry as per controller internal rules */ if (dr->td_size > 0x200000) { diff --git a/sys/dev/twe/twe_freebsd.c b/sys/dev/twe/twe_freebsd.c index 9ad65c94d9e2c..0328599c12933 100644 --- a/sys/dev/twe/twe_freebsd.c +++ b/sys/dev/twe/twe_freebsd.c @@ -818,6 +818,13 @@ twed_attach(device_t dev) sc->twed_disk->d_maxsize = (TWE_MAX_SGL_LENGTH - 1) * PAGE_SIZE; sc->twed_disk->d_sectorsize = TWE_BLOCK_SIZE; sc->twed_disk->d_mediasize = TWE_BLOCK_SIZE * (off_t)sc->twed_drive->td_size; + if (sc->twed_drive->td_type == TWE_UD_CONFIG_RAID0 || + sc->twed_drive->td_type == TWE_UD_CONFIG_RAID5 || + sc->twed_drive->td_type == TWE_UD_CONFIG_RAID10) { + sc->twed_disk->d_stripesize = + TWE_BLOCK_SIZE << sc->twed_drive->td_stripe; + sc->twed_disk->d_stripeoffset = 0; + } sc->twed_disk->d_fwsectors = sc->twed_drive->td_sectors; sc->twed_disk->d_fwheads = sc->twed_drive->td_heads; sc->twed_disk->d_unit = sc->twed_drive->td_sys_unit; diff --git a/sys/dev/twe/twevar.h b/sys/dev/twe/twevar.h index 2711ccc949323..4990ca80666d0 100644 --- a/sys/dev/twe/twevar.h +++ b/sys/dev/twe/twevar.h @@ -59,6 +59,7 @@ struct twe_drive /* unit state and type */ u_int8_t td_state; u_int8_t td_type; + u_int8_t td_stripe; /* handle for attached driver */ device_t td_disk; |
