User talk:MrNuke: Difference between revisions
(Created page with "== Ideas for generic handling of storage/MMC devices == struct some_interface { void no_idea; }") |
No edit summary |
||
Line 1: | Line 1: | ||
== Ideas for generic handling of | == Ideas for generic handling of devices == | ||
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 */ | |||
}; |
Revision as of 21:44, 9 January 2014
Ideas for generic handling of devices
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 */
};