|
|
(55 intermediate revisions by 2 users not shown) |
Line 1: |
Line 1: |
| == Ideas for generic handling of devices == | | == Sections deserving their own page == |
| | * [[User_talk:MrNuke/Block_Device_API | IDEAPAGE: Generic handling of storage devices]] |
| | * [[User_talk:MrNuke/CBFS_Ideas | IDEAPAGE: CBFS partitioning support]] |
|
| |
|
| === Proposal 1: Unified API === | | == Testing ARM coreboot under qemu-system-arm == |
| Chan is an IO channel.
| |
|
| |
|
| This struct is used in Inferno and has been for a long time; so it works.
| | Launch qemu with '''-serial stdio''' and pass kernel the '''console=tty''' option. (UNTESTED). |
| It's also in the opcodes somewhat like what we did for EMMC on ARM.
| |
|
| |
|
| struct Dev
| | Run qemu-arm: |
| {
| | '''$ qemu-system-arm -M vexpress-a9 -m 1024M -serial stdio -kernel build/coreboot.rom''' |
| 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) ?
| |
| * How do we connect the dots, such that most of the details can be handled transparently ?
| |
| * How simple or complex do we want the API to be such that it can work in any stage (including bootblock, assuming some SRAM and a stack are available) ?
| |
| * Can we integrate this into '''libpayload''' such that the same sources can be used for both coreboot and libpayload ?
| |
| ** think "Device specfic storage drivers -> [*] Allwinner A10 MMC driver" in '''libpayload''' config
| |