[问题] API怎看T_T

楼主: kingofsdtw (不能閒下來!!)   2014-06-16 10:36:43
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
C
程式码(Code):(请善用置底文网页, 记得排版)
补充说明(Supplement):
求救一下小公司顶天没人可以问...@Q@
要取得 PciVidDid 但是不知道API看不是很懂程式为何这样写
老人用的Function:
Status = PciIo->Pci.Read(PciIo, EfiPciIoWidthUint32, 0, 1, &ROMVidDid);
必须要知道 5个参数要输入啥
PciIo->Pci.Read(PciIo, EfiPciIoWidthUint32, 0, 1, &ROMVidDid);
==>追踪到
IN EFI_PCI_IO_PROTOCOL *PciIo
(1. IN 是啥呢...C语言好像没这东西..这是啥呢?)
==>追踪到
typedef struct _EFI_PCI_IO_PROTOCOL {
EFI_PCI_IO_PROTOCOL_CONFIG_ACCESS Pci;
} EFI_PCI_IO_PROTOCOL;
==>追踪到
typedef struct {
EFI_PCI_IO_PROTOCOL_CONFIG Read;
EFI_PCI_IO_PROTOCOL_CONFIG Write;
} EFI_PCI_IO_PROTOCOL_CONFIG_ACCESS;
==>追踪到
typedef
EFI_STATUS
(EFIAPI *EFI_PCI_IO_PROTOCOL_CONFIG) (
IN struct _EFI_PCI_IO_PROTOCOL *This,
IN EFI_PCI_IO_PROTOCOL_WIDTH Width,
IN UINT32 Offset,
IN UINTN Count,
IN OUT VOID *Buffer
);
得知: *This,Width,Offset.*Buffer
未知: Count功能
2. typedef structA (structB *ptr)(.....); 这啥怪兽? 傻眼...@_@
3. IN OUT VOID *Buffer 这是啥鬼T_T? 哭哭...
延伸:想知道EFIAPI是啥
==>追踪到
typedef unsigned int EFI_STATUS;
EFIAPI (4000多个...看不下去GG!!)
作者: Killercat (杀人猫™)   2014-06-16 11:31:00
IN OUT应该都是null macro 拿来作注解用的告诉你这个参数是传入值还是传出值都顶天了 也会trace code了 要学会追macro阿....也有少数几个例外是拿来当meta data的 不过这边看起来应该就只是单纯的指示跟注解用途而已
作者: james732 (好人超)   2014-06-16 12:45:00
做BIOS的XD
作者: donkeychen (Bad_To_The_Bone)   2014-06-16 18:50:00
GOOGLE EFI UEFI 这应该是intel给的code吧
作者: EdisonX (卡卡兽)   2014-06-16 21:49:00
google, function pointer, 这写法我觉得还蛮漂亮的啊~
作者: RealJack   2014-06-16 23:13:00
http://ppt.cc/jVtz以上讨论EFIAPI的定义,研究一下吧
作者: azureblaze (AzureBlaze)   2014-06-16 23:20:00
EFIAPI是calling convention不是type所以你的type2不存在calling convention是函数的特殊属性决定呼叫函数时底层组语的产生方式http://en.wikipedia.org/wiki/X86_calling_convention
作者: Bencrie   2014-06-17 01:13:00
算 ABI 吧
作者: ariesd (台中长颈鹿)   2014-06-17 17:25:00
这是BIOS C code最基础的了,不会的话,那你有得忙了...
作者: donkeychen (Bad_To_The_Bone)   2014-06-18 09:44:00
如果你是要写BIOS 那你去找个CODE里面一定有用这个的范例 如法炮制就可以了(吧) 如果你是要trace EFI的架构那就很花时间了 还得先懂 PEI DXE .....如果你是不懂PciVidDid 那可能得去看PCI的spec了我觉得来这版问应该是要TRACE 但是听你叙述像是做BIOS可能只需要改Offset跟Count而已

Links booklink

Contact Us: admin [ a t ] ucptt.com