aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/twe
diff options
context:
space:
mode:
authorAlexander Motin <mav@FreeBSD.org>2009-12-25 17:34:43 +0000
committerAlexander Motin <mav@FreeBSD.org>2009-12-25 17:34:43 +0000
commitc078c1963328d5a940fe213e1e6cf12860cd8aa2 (patch)
tree7730e9036ea83d3215fa4bc9f50399c2b347de5d /sys/dev/twe
parent05c10507e983781e5b0b2c85eec0362929fe6941 (diff)
Notes
Diffstat (limited to 'sys/dev/twe')
-rw-r--r--sys/dev/twe/twe.c5
-rw-r--r--sys/dev/twe/twe_freebsd.c7
-rw-r--r--sys/dev/twe/twevar.h1
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;