diff options
author | Matias Bjørling <m@bjorling.me> | 2015-11-19 12:50:09 +0100 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2015-11-19 15:15:54 -0700 |
commit | 5b40db99099ddebe31e9b1b759894cf09c0c6679 (patch) | |
tree | 9d01fffe8423ffdfe9225bbab694473fb2fa662c /drivers/block | |
parent | 6bb9535bc3f59194a0ae17b17ca71aecd0f7e3a2 (diff) | |
download | op-kernel-dev-5b40db99099ddebe31e9b1b759894cf09c0c6679.zip op-kernel-dev-5b40db99099ddebe31e9b1b759894cf09c0c6679.tar.gz |
null_blk: use device addressing mode
The linear addressing mode was removed in 7386af2. Make null_blk instead
expose the ppa format geometry and support the generic addressing mode.
Signed-off-by: Matias Bjørling <m@bjorling.me>
Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'drivers/block')
-rw-r--r-- | drivers/block/null_blk.c | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/drivers/block/null_blk.c b/drivers/block/null_blk.c index 3e9c4f9..d51c24a 100644 --- a/drivers/block/null_blk.c +++ b/drivers/block/null_blk.c @@ -486,6 +486,7 @@ static int null_lnvm_submit_io(struct request_queue *q, struct nvm_rq *rqd) static int null_lnvm_id(struct request_queue *q, struct nvm_id *id) { sector_t size = gb * 1024 * 1024 * 1024ULL; + sector_t blksize; struct nvm_id_group *grp; id->ver_id = 0x1; @@ -493,17 +494,34 @@ static int null_lnvm_id(struct request_queue *q, struct nvm_id *id) id->cgrps = 1; id->cap = 0x3; id->dom = 0x1; - id->ppat = NVM_ADDRMODE_LINEAR; + + id->ppaf.blk_offset = 0; + id->ppaf.blk_len = 16; + id->ppaf.pg_offset = 16; + id->ppaf.pg_len = 16; + id->ppaf.sect_offset = 32; + id->ppaf.sect_len = 8; + id->ppaf.pln_offset = 40; + id->ppaf.pln_len = 8; + id->ppaf.lun_offset = 48; + id->ppaf.lun_len = 8; + id->ppaf.ch_offset = 56; + id->ppaf.ch_len = 8; do_div(size, bs); /* convert size to pages */ + do_div(size, 256); /* concert size to pgs pr blk */ grp = &id->groups[0]; grp->mtype = 0; - grp->fmtype = 1; + grp->fmtype = 0; grp->num_ch = 1; - grp->num_lun = 1; - grp->num_pln = 1; - grp->num_blk = size / 256; grp->num_pg = 256; + blksize = size; + do_div(size, (1 << 16)); + grp->num_lun = size + 1; + do_div(blksize, grp->num_lun); + grp->num_blk = blksize; + grp->num_pln = 1; + grp->fpg_sz = bs; grp->csecs = bs; grp->trdt = 25000; |