Difference between revisions of "User talk:MrNuke"

From coreboot
Jump to: navigation, search
(Created page with "== Ideas for generic handling of storage/MMC devices == struct some_interface { void no_idea; }")
 
Line 1: Line 1:
== Ideas for generic handling of storage/MMC devices ==
+
== Ideas for generic handling of devices ==
  
struct some_interface {
+
Chan is an IO channel.
void no_idea;
+
 
}
+
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 */

};