| // Fake IDE disk; stores blocks in memory. | |
| // Useful for running kernel without scratch disk. | |
| extern uchar _binary_fs_img_start[], _binary_fs_img_size[]; | |
| static int disksize; | |
| static uchar *memdisk; | |
| void | |
| ideinit(void) | |
| { | |
| memdisk = _binary_fs_img_start; | |
| disksize = (uint)_binary_fs_img_size/BSIZE; | |
| } | |
| // Interrupt handler. | |
| void | |
| ideintr(void) | |
| { | |
| // no-op | |
| } | |
| // Sync buf with disk. | |
| // If B_DIRTY is set, write buf to disk, clear B_DIRTY, set B_VALID. | |
| // Else if B_VALID is not set, read buf from disk, set B_VALID. | |
| void | |
| iderw(struct buf *b) | |
| { | |
| uchar *p; | |
| if(!holdingsleep(&b->lock)) | |
| panic("iderw: buf not locked"); | |
| if((b->flags & (B_VALID|B_DIRTY)) == B_VALID) | |
| panic("iderw: nothing to do"); | |
| if(b->dev != 1) | |
| panic("iderw: request not for disk 1"); | |
| if(b->blockno >= disksize) | |
| panic("iderw: block out of range"); | |
| p = memdisk + b->blockno*BSIZE; | |
| if(b->flags & B_DIRTY){ | |
| b->flags &= ~B_DIRTY; | |
| memmove(p, b->data, BSIZE); | |
| } else | |
| memmove(b->data, p, BSIZE); | |
| b->flags |= B_VALID; | |
| } | |
Xet Storage Details
- Size:
- 1.23 kB
- Xet hash:
- d3cd9f552cda39d773a9e809f445d1c527697a47bc5fba45486754c32986f2a0
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.