| 28 | |
| 29 | === 1) '''void dev_ioc_init'''( xptr_t xp_dev ) === |
| 30 | |
| 31 | This function makes two initialisations: |
| 32 | * it initialises the IOC specific fields of the device descriptor. |
| 33 | * it initialises the implementation specific IOC hardware device and associated data structures if required. |
| 34 | It can be executed in another cluster than the cluster containing the IOC device descriptor or the IOC hardware device itself. |
| 35 | The <xp_dev> argument is an extended pointer on the IOC device descriptor. |
| 36 | |
| 37 | === 2) '''void dev_ioc_read'''( char * buffer , uint32_t lba , uint32_t count) === |
| 38 | |
| 39 | This blocking function try to tranfer one or several contiguous blocks of data from the block device to a memory buffer. The calling thread is registered in the device pending request queue, and descheduled, waiting on transfer completion. It is re-activared by the IRQ signaling completion. It must be called in the client cluster. |
| 40 | The <buffer> argument is... |
| 41 | The <lba> argument is the first block index in block device. |
| 42 | The <count> argument is the number of blocks to move. |
| 43 | |
| 44 | === 3) '''void dev_ioc_write'''( char * buffer , uint32_t lba , uint32_t count) === |
| 45 | |
| 46 | This blocking function try to tranfer one or several contiguous blocks of data from a memory buffer to the block device. The calling thread is actually registered in the device pending request queue, and descheduled, waiting on transfer completion. It is re-activared by the IRQ signaling completion. It must be called in the client cluster. |
| 47 | The <buffer> argument is... |
| 48 | The <lba> argument is the first block index in block device. |
| 49 | The <count> argument is the number of blocks to move. |