void bdepends_on (void *parent, void *child) { buf_s *pbuf; buf_s *cbuf; pbuf = addr2buf(parent); cbuf = addr2buf(child); queen_ant( &pbuf->b_ant, &cbuf->b_ant); }
void bclear_dependency (void *data) { buf_s *buf; buf = addr2buf(data); clear_queen( &buf->b_ant); }
void *bcontext (void *data) { buf_s *buf; buf = addr2buf(data); return buf->b_tree; }
u64 bblkno (void *data) { buf_s *buf; buf = addr2buf(data); return buf->b_blkno; }
ant_s *bant (void *data) { buf_s *buf; buf = addr2buf(data); return &buf->b_ant; }
void bdirty (void *data) { buf_s *buf; buf = addr2buf(data); aver(buf->b_ant.a_state != ANT_FLUSHING); buf->b_ant.a_state = ANT_DIRTY; }
void bchange_blkno (void *data, u64 blkno) { buf_s *buf; buf = addr2buf(data); printf("change %llx -> %llx\n", buf->b_blkno, blkno); rmv(buf); buf->b_blkno = blkno; add(buf); }
void bput (void *data) { buf_s *buf; buf = addr2buf(data); aver(buf->b_use > 0); if (!Lazy) { bflush(buf); } aver(buf->b_use > 0); --buf->b_use; }
size_t Mtd25::bus_read(uint8_t *rxbuf, size_t len, uint32_t offset) { msg_t status; osalDbgAssert((offset + len) <= capacity(), "Transaction out of device bounds"); osalDbgCheck(this->writebuf_size >= cfg.addr_len + 1); this->acquire(); /* fill preamble */ if (4 == cfg.addr_len) writebuf[0] = S25_CMD_4READ; else writebuf[0] = S25_CMD_READ; addr2buf(&writebuf[1], offset, cfg.addr_len); status = spi_read(rxbuf, len, writebuf, 1+cfg.addr_len); this->release(); if (MSG_OK == status) return len; else return 0; }