Difference between revisions of "User talk:MrNuke"

From coreboot
Jump to: navigation, search
m
(Ideas for generic handling of devices)
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) ?