static int fd_transfer(bool is_read, uint8_t rawflag)
{
blkno_t block;
- int block_xfer;
- uint16_t dptr;
- int dlen;
int ct = 0;
- int map;
+ int map = 0;
is_read;
- /* FIXME: raw is broken unless nicely aligned */
if(rawflag) {
- dlen = udata.u_count;
- dptr = (uint16_t)udata.u_base;
- if (((uint16_t)dptr|dlen) & BLKMASK) {
- udata.u_error = EIO;
- return -1;
- }
- block = udata.u_offset >> 9;
- block_xfer = dlen >> 9;
+ if (d_blkoff(9))
+ return -EIO;
map = 1;
- } else { /* rawflag == 0 */
- dlen = 512;
- dptr = (uint16_t)udata.u_buf->bf_data;
- block = udata.u_buf->bf_blk;
- block_xfer = 1;
- map = 0;
}
-
- while (ct < block_xfer) {
+ block = udata.u_block;
+ while (ct < udata.u_nblock) {
/* FIXME: Do stuff */
block++;
ct++;
}
- return ct;
+ return ct << BLKSHIFT;
}
int fd_open(uint8_t minor, uint16_t flag)
static int hd_transfer(bool is_read, uint8_t rawflag)
{
blkno_t block;
- int block_xfer;
- uint16_t dptr;
int dlen;
int ct = 0;
- int map;
+ int map = 0;
is_read;
/* FIXME: raw is broken unless nicely aligned */
- if(rawflag) {
- dlen = udata.u_count;
- dptr = (uint16_t)udata.u_base;
- if (((uint16_t)dptr | dlen) & BLKMASK) {
- udata.u_error = EIO;
+ if (rawflag) {
+ if (d_blkoff(9))
return -1;
- }
- block = udata.u_offset >> 9;
- block_xfer = dlen >> 9;
map = 1;
- } else { /* rawflag == 0 */
- dlen = 512;
- dptr = (uint16_t)udata.u_buf->bf_data;
- block = udata.u_buf->bf_blk;
- block_xfer = 1;
- map = 0;
}
-
- while (ct < block_xfer) {
+
+ block = udata.u_block;
+ while (ct < udata.u_nblock) {
/* FIXME: Do stuff */
block++;
ct++;
}
- return ct;
+ return ct << BLKSHIFT;
}
int hd_open(uint8_t minor, uint16_t flag)