xref: /inferno-os/libnandfs/setget.c (revision 28942ead413418b56c5be78e8c4c400881fba72e)
1*28942eadSforsyth #include "logfsos.h"
237da2899SCharles.Forsyth #include "logfs.h"
337da2899SCharles.Forsyth #include "nandfs.h"
437da2899SCharles.Forsyth #include "local.h"
537da2899SCharles.Forsyth 
637da2899SCharles.Forsyth short
nandfsgettag(Nandfs * nandfs,long block)737da2899SCharles.Forsyth nandfsgettag(Nandfs *nandfs, long block)
837da2899SCharles.Forsyth {
937da2899SCharles.Forsyth 	if (nandfs->blockdata)
1037da2899SCharles.Forsyth 		return nandfs->blockdata[block].tag;
1137da2899SCharles.Forsyth 	return 0;
1237da2899SCharles.Forsyth }
1337da2899SCharles.Forsyth 
1437da2899SCharles.Forsyth void
nandfssettag(Nandfs * nandfs,long block,short tag)1537da2899SCharles.Forsyth nandfssettag(Nandfs *nandfs, long block, short tag)
1637da2899SCharles.Forsyth {
1737da2899SCharles.Forsyth 	if (nandfs->blockdata) {
1837da2899SCharles.Forsyth 		nandfs->blockdata[block].tag = tag;
1937da2899SCharles.Forsyth 		if (tag == LogfsTworse)
2037da2899SCharles.Forsyth 			nandfs->worseblocks = 1;
2137da2899SCharles.Forsyth 		return;
2237da2899SCharles.Forsyth 	}
2337da2899SCharles.Forsyth }
2437da2899SCharles.Forsyth 
2537da2899SCharles.Forsyth long
nandfsgetpath(Nandfs * nandfs,long block)2637da2899SCharles.Forsyth nandfsgetpath(Nandfs *nandfs, long block)
2737da2899SCharles.Forsyth {
2837da2899SCharles.Forsyth 	if (nandfs->blockdata)
2937da2899SCharles.Forsyth 		return nandfs->blockdata[block].path;
3037da2899SCharles.Forsyth 	return 0;
3137da2899SCharles.Forsyth }
3237da2899SCharles.Forsyth 
3337da2899SCharles.Forsyth void
nandfssetpath(Nandfs * nandfs,long block,ulong path)3437da2899SCharles.Forsyth nandfssetpath(Nandfs *nandfs, long block, ulong path)
3537da2899SCharles.Forsyth {
3637da2899SCharles.Forsyth 	if (nandfs->blockdata) {
3737da2899SCharles.Forsyth 		nandfs->blockdata[block].path = path;
3837da2899SCharles.Forsyth 		return;
3937da2899SCharles.Forsyth 	}
4037da2899SCharles.Forsyth }
4137da2899SCharles.Forsyth 
4237da2899SCharles.Forsyth long
nandfsgetnerase(Nandfs * nandfs,long block)4337da2899SCharles.Forsyth nandfsgetnerase(Nandfs *nandfs, long block)
4437da2899SCharles.Forsyth {
4537da2899SCharles.Forsyth 	if (nandfs->blockdata)
4637da2899SCharles.Forsyth 		return nandfs->blockdata[block].nerase;
4737da2899SCharles.Forsyth 	return 0;
4837da2899SCharles.Forsyth }
4937da2899SCharles.Forsyth 
5037da2899SCharles.Forsyth void
nandfssetnerase(Nandfs * nandfs,long block,ulong nerase)5137da2899SCharles.Forsyth nandfssetnerase(Nandfs *nandfs, long block, ulong nerase)
5237da2899SCharles.Forsyth {
5337da2899SCharles.Forsyth 	if (nandfs->blockdata) {
5437da2899SCharles.Forsyth 		nandfs->blockdata[block].nerase = nerase;
5537da2899SCharles.Forsyth 		return;
5637da2899SCharles.Forsyth 	}
5737da2899SCharles.Forsyth }
5837da2899SCharles.Forsyth 
5937da2899SCharles.Forsyth int
nandfsgetblockpartialformatstatus(Nandfs * nandfs,long block)6037da2899SCharles.Forsyth nandfsgetblockpartialformatstatus(Nandfs *nandfs, long block)
6137da2899SCharles.Forsyth {
6237da2899SCharles.Forsyth 	if (nandfs->blockdata)
6337da2899SCharles.Forsyth 		return nandfs->blockdata[block].partial;
6437da2899SCharles.Forsyth 	return 0;
6537da2899SCharles.Forsyth }
6637da2899SCharles.Forsyth 
6737da2899SCharles.Forsyth void
nandfssetblockpartialformatstatus(Nandfs * nandfs,long block,int partial)6837da2899SCharles.Forsyth nandfssetblockpartialformatstatus(Nandfs *nandfs, long block, int partial)
6937da2899SCharles.Forsyth {
7037da2899SCharles.Forsyth 	if (nandfs->blockdata) {
7137da2899SCharles.Forsyth 		nandfs->blockdata[block].partial = partial;
7237da2899SCharles.Forsyth 		return;
7337da2899SCharles.Forsyth 	}
7437da2899SCharles.Forsyth }
7537da2899SCharles.Forsyth 
7637da2899SCharles.Forsyth long
nandfsgetbaseblock(Nandfs * nandfs)7737da2899SCharles.Forsyth nandfsgetbaseblock(Nandfs *nandfs)
7837da2899SCharles.Forsyth {
7937da2899SCharles.Forsyth 	return nandfs->baseblock;
8037da2899SCharles.Forsyth }
8137da2899SCharles.Forsyth 
8237da2899SCharles.Forsyth int
nandfsgetblocksize(Nandfs * nandfs)8337da2899SCharles.Forsyth nandfsgetblocksize(Nandfs *nandfs)
8437da2899SCharles.Forsyth {
8537da2899SCharles.Forsyth 	return 1 << (nandfs->ll.l2pagesperblock + NandfsL2PageSize);
8637da2899SCharles.Forsyth }
8737da2899SCharles.Forsyth 
8837da2899SCharles.Forsyth ulong
nandfscalcrawaddress(Nandfs * nandfs,long pblock,int dataoffset)8937da2899SCharles.Forsyth nandfscalcrawaddress(Nandfs *nandfs, long pblock, int dataoffset)
9037da2899SCharles.Forsyth {
9137da2899SCharles.Forsyth 	int lpage, pageoffset;
9237da2899SCharles.Forsyth 	lpage = dataoffset / NandfsPageSize;
9337da2899SCharles.Forsyth 	pageoffset = dataoffset % NandfsPageSize;
9437da2899SCharles.Forsyth 	return nandfs->rawblocksize * pblock + lpage * NandfsFullSize + pageoffset;
9537da2899SCharles.Forsyth }
9637da2899SCharles.Forsyth 
9737da2899SCharles.Forsyth int
nandfsgetopenstatus(Nandfs * nandfs)9837da2899SCharles.Forsyth nandfsgetopenstatus(Nandfs *nandfs)
9937da2899SCharles.Forsyth {
10037da2899SCharles.Forsyth 	return nandfs->blockdata != nil;
10137da2899SCharles.Forsyth }
102