User talk:MrNuke: Difference between revisions
Jump to navigation
Jump to search
mNo edit summary |
|||
Line 1: | Line 1: | ||
== Ideas for generic handling of devices == | == Ideas for generic handling of devices == | ||
=== Proposal 1: Unified API === | |||
Chan is an IO channel. | Chan is an IO channel. | ||
This struct is used in Inferno and has been for a long time; so it works. | This struct is used in Inferno and has been for a long time; so it works. | ||
It's also in the opcodes somewhat like what we did for EMMC on ARM. | It's also in the opcodes somewhat like what we did for EMMC on ARM. | ||
struct Dev | struct Dev | ||
Line 22: | Line 22: | ||
void (*power)(int); /* power mgt: power(1) ? on, power (0) ? off */ | void (*power)(int); /* power mgt: power(1) ? on, power (0) ? off */ | ||
}; | }; | ||
==== Questions ==== | |||
* Do we want to expose or hide the block nature of some devces (i.e. force reading multiples of blocksize, or allow reading any number of bytes, with no alignment requirement) ? |
Revision as of 01:24, 11 January 2014
Ideas for generic handling of devices
Proposal 1: Unified API
Chan is an IO channel.
This struct is used in Inferno and has been for a long time; so it works. It's also in the opcodes somewhat like what we did for EMMC on ARM.
struct Dev { char* name; void (*reset)(void); void (*init)(void); void (*shutdown)(void); Chan* (*attach)(char*); /* tell the device you want to use it */ Walkqid* (*walk)(Chan*, Chan*, char**, int); /* walk to a name in the device's managed name space; return a handle */ int (*stat)(Chan*, uchar*, int); // status info Chan* (*open)(Chan*, int); /* get access to a resource in the device name space */ void (*close)(Chan*); /* tell it you are done with whatever it is. */ long (*read)(Chan*, void*, long, vlong); long (*write)(Chan*, void*, long, vlong); void (*power)(int); /* power mgt: power(1) ? on, power (0) ? off */ };
Questions
- Do we want to expose or hide the block nature of some devces (i.e. force reading multiples of blocksize, or allow reading any number of bytes, with no alignment requirement) ?