Changeset 2eb89ad in rtems for cpukit/libblock
- Timestamp:
- 08/02/08 06:23:45 (16 years ago)
- Branches:
- 4.10, 4.11, 4.9, 5, master
- Children:
- f031251c
- Parents:
- 799ef3b
- Location:
- cpukit/libblock
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
cpukit/libblock/include/rtems/blkdev.h
r799ef3b r2eb89ad 88 88 /* If status != RTEMS_SUCCESSFUL, this field contains error code */ 89 89 int error; 90 /* Start block number */ 91 rtems_blkdev_bnum start; 92 /* Number of blocks to be exchanged */ 93 uint32_t count; 94 /* Number of buffers provided */ 90 /* Number of blocks for this request. */ 95 91 uint32_t bufnum; 96 92 … … 101 97 rtems_blkdev_sg_buffer bufs[0]; 102 98 } rtems_blkdev_request; 99 100 /* The start block in a request. Only valid if the driver has returned the 101 * RTEMS_BLKDEV_CAPABILITIES of RTEMS_BLKDEV_CAP_MULTISECTOR_CONT */ 102 #define RTEMS_BLKDEV_START_BLOCK(_r) (_r->bufs[0].block) 103 103 104 104 /* Block device IOCTL request codes */ -
cpukit/libblock/src/bdbuf.c
r799ef3b r2eb89ad 1508 1508 * already with a user when this call is made the call is blocked until the 1509 1509 * buffer is returned. The highest priority waiter will obtain the buffer 1510 * first. 1510 * first. 1511 * 1512 * @note Read ahead always reads buffers in sequence. All multi-block reads 1513 * read consecutive blocks. 1511 1514 * 1512 1515 * @param device Device number (constructed of major and minor device number) … … 1556 1559 } 1557 1560 1558 req->count = 0;1559 1561 req->bufnum = 0; 1560 1562 … … 1575 1577 rtems_bdbuf_lock_pool (pool); 1576 1578 1577 while (req-> count< read_ahead_count)1579 while (req->bufnum < read_ahead_count) 1578 1580 { 1579 1581 /* … … 1586 1588 */ 1587 1589 bd = rtems_bdbuf_get_buffer (dd->phys_dev, pool, 1588 block + req-> count,1589 req-> count== 0 ? FALSE : TRUE);1590 block + req->bufnum, 1591 req->bufnum == 0 ? FALSE : TRUE); 1590 1592 1591 1593 /* … … 1614 1616 * node that can be used. 1615 1617 */ 1616 req->bufs[req->count].user = bd; 1617 req->bufs[req->count].block = bd->block; 1618 req->bufs[req->count].length = dd->block_size; 1619 req->bufs[req->count].buffer = bd->buffer; 1620 req->count++; 1618 req->bufs[req->bufnum].user = bd; 1619 req->bufs[req->bufnum].block = bd->block; 1620 req->bufs[req->bufnum].length = dd->block_size; 1621 req->bufs[req->bufnum].buffer = bd->buffer; 1621 1622 req->bufnum++; 1622 1623 } … … 1626 1627 * the block in the cache so return it. 1627 1628 */ 1628 if (req-> count)1629 if (req->bufnum) 1629 1630 { 1630 1631 /* … … 1650 1651 req->status = RTEMS_RESOURCE_IN_USE; 1651 1652 req->error = 0; 1652 req->start = dd->start;1653 1653 1654 1654 result = dd->ioctl (dd->phys_dev->dev, RTEMS_BLKIO_REQUEST, req); … … 1677 1677 rtems_bdbuf_lock_pool (pool); 1678 1678 1679 for (b = 1; b < req-> count; b++)1679 for (b = 1; b < req->bufnum; b++) 1680 1680 { 1681 1681 bd = req->bufs[b].user; … … 2049 2049 { 2050 2050 rtems_chain_node* next_node = node->next; 2051 rtems_chain_node* tnode = rtems_chain_tail (transfer); 2052 2053 /* 2054 * The blocks on the transfer list are sorted in block order. This 2055 * means multi-block transfers for drivers that require consecutive 2056 * blocks perform better with sorted blocks and for real disks it may 2057 * help lower head movement. 2058 */ 2059 2060 bd->state = RTEMS_BDBUF_STATE_TRANSFER; 2061 2051 2062 rtems_chain_extract (node); 2052 rtems_chain_append (transfer, node); 2063 2064 tnode = tnode->previous; 2065 2066 while (node && !rtems_chain_is_head (transfer, tnode)) 2067 { 2068 rtems_bdbuf_buffer* tbd = (rtems_bdbuf_buffer*) tnode; 2069 2070 if (bd->block > tbd->block) 2071 { 2072 rtems_chain_insert (tnode, node); 2073 node = NULL; 2074 } 2075 else 2076 tnode = tnode->previous; 2077 } 2078 2079 if (node) 2080 rtems_chain_prepend (transfer, node); 2081 2053 2082 node = next_node; 2054 bd->state = RTEMS_BDBUF_STATE_TRANSFER;2055 2083 } 2056 2084 else … … 2162 2190 2163 2191 write_req->status = RTEMS_RESOURCE_IN_USE; 2164 write_req->start = dd->start;2165 2192 write_req->error = 0; 2166 write_req->count = 0;2167 2193 write_req->bufnum = 0; 2168 2194 … … 2182 2208 2183 2209 if ((dd->capabilities & RTEMS_BLKDEV_CAP_MULTISECTOR_CONT) && 2184 write_req-> count&&2210 write_req->bufnum && 2185 2211 (bd->block != (last_block + 1))) 2186 2212 { … … 2190 2216 else 2191 2217 { 2192 write_req->bufs[write_req->count].user = bd; 2193 write_req->bufs[write_req->count].block = bd->block; 2194 write_req->bufs[write_req->count].length = dd->block_size; 2195 write_req->bufs[write_req->count].buffer = bd->buffer; 2196 write_req->count++; 2218 write_req->bufs[write_req->bufnum].user = bd; 2219 write_req->bufs[write_req->bufnum].block = bd->block; 2220 write_req->bufs[write_req->bufnum].length = dd->block_size; 2221 write_req->bufs[write_req->bufnum].buffer = bd->buffer; 2197 2222 write_req->bufnum++; 2198 2223 last_block = bd->block; … … 2205 2230 2206 2231 if (rtems_chain_is_empty (&transfer) || 2207 (write_req-> count>= rtems_bdbuf_configuration.max_write_blocks))2232 (write_req->bufnum >= rtems_bdbuf_configuration.max_write_blocks)) 2208 2233 write = TRUE; 2209 2234 … … 2224 2249 rtems_bdbuf_lock_pool (pool); 2225 2250 2226 for (b = 0; b < write_req-> count; b++)2251 for (b = 0; b < write_req->bufnum; b++) 2227 2252 { 2228 2253 bd = write_req->bufs[b].user; … … 2253 2278 rtems_bdbuf_lock_pool (pool); 2254 2279 2255 for (b = 0; b < write_req-> count; b++)2280 for (b = 0; b < write_req->bufnum; b++) 2256 2281 { 2257 2282 bd = write_req->bufs[b].user; … … 2275 2300 write_req->status = RTEMS_RESOURCE_IN_USE; 2276 2301 write_req->error = 0; 2277 write_req->count = 0;2278 2302 write_req->bufnum = 0; 2279 2303 } -
cpukit/libblock/src/blkdev.c
r799ef3b r2eb89ad 233 233 { 234 234 rtems_blkdev_request *req = args->buffer; 235 req->start += dd->start;236 235 args->ioctl_return = dd->ioctl(dd->phys_dev->dev, args->command, 237 236 req); -
cpukit/libblock/src/nvdisk.c
r799ef3b r2eb89ad 589 589 #endif 590 590 591 remains = req-> count* nvd->block_size;591 remains = req->bufnum * nvd->block_size; 592 592 593 593 for (b = 0; b < req->bufnum; b++, sg++) -
cpukit/libblock/src/ramdisk.c
r799ef3b r2eb89ad 100 100 #endif 101 101 102 remains = rd->block_size * req-> count;102 remains = rd->block_size * req->bufnum; 103 103 sg = req->bufs; 104 104 for (i = 0; (remains > 0) && (i < req->bufnum); i++, sg++) … … 138 138 rtems_ramdisk_printf (rd, "ramdisk write: start=%d, blocks=%d remains=%d", 139 139 req->bufs[0].block, req->bufnum, 140 rd->block_size * req-> count);141 #endif 142 remains = rd->block_size * req-> count;140 rd->block_size * req->bufnum); 141 #endif 142 remains = rd->block_size * req->bufnum; 143 143 sg = req->bufs; 144 144 for (i = 0; (remains > 0) && (i < req->bufnum); i++, sg++)
Note: See TracChangeset
for help on using the changeset viewer.