[問題] API怎看T_T

看板C_and_CPP作者 (不能閒下來!!)時間11年前 (2014/06/16 10:36), 11年前編輯推噓6(6017)
留言23則, 8人參與, 最新討論串1/1
開發平台(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!!) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 222.251.9.95 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1402886208.A.302.html ※ 編輯: kingofsdtw (222.251.9.95), 06/16/2014 10:52:26

06/16 11:31, , 1F
IN OUT應該都是null macro 拿來作註解用的
06/16 11:31, 1F

06/16 11:31, , 2F
告訴你這個參數是傳入值還是傳出值
06/16 11:31, 2F

06/16 11:31, , 3F
都頂天了 也會trace code了 要學會追macro阿....
06/16 11:31, 3F

06/16 11:32, , 4F
也有少數幾個例外是拿來當meta data的 不過這邊看起來
06/16 11:32, 4F

06/16 11:32, , 5F
應該就只是單純的指示跟註解用途而已
06/16 11:32, 5F

06/16 12:45, , 6F
做BIOS的XD
06/16 12:45, 6F

06/16 18:50, , 7F
GOOGLE EFI UEFI 這應該是intel給的code吧
06/16 18:50, 7F

06/16 21:49, , 8F
google, function pointer, 這寫法我覺得還蠻漂亮的啊~
06/16 21:49, 8F
http://en.wikipedia.org/wiki/Typedef 只找到typedef type_A (*func)(); // ex:typedef int (*func)(void); 找不到typedef type_A (type2 *func)(); ※ 編輯: kingofsdtw (222.251.21.82), 06/16/2014 22:44:00

06/16 23:13, , 9F
06/16 23:13, 9F

06/16 23:14, , 10F
以上討論EFIAPI的定義,研究一下吧
06/16 23:14, 10F

06/16 23:20, , 11F
EFIAPI是calling convention不是type
06/16 23:20, 11F

06/16 23:20, , 12F
所以你的type2不存在
06/16 23:20, 12F

06/16 23:21, , 13F
calling convention是函數的特殊屬性
06/16 23:21, 13F

06/16 23:22, , 14F
決定呼叫函數時底層組語的產生方式
06/16 23:22, 14F

06/17 01:13, , 16F
算 ABI 吧
06/17 01:13, 16F

06/17 17:25, , 17F
這是BIOS C code最基礎的了,不會的話,那你有得忙了...
06/17 17:25, 17F

06/18 09:44, , 18F
如果你是要寫BIOS 那你去找個CODE裡面一定有用這個的範
06/18 09:44, 18F

06/18 09:45, , 19F
例 如法炮製就可以了(吧) 如果你是要trace EFI的架構
06/18 09:45, 19F

06/18 09:46, , 20F
那就很花時間了 還得先懂 PEI DXE .....
06/18 09:46, 20F

06/18 09:47, , 21F
如果你是不懂PciVidDid 那可能得去看PCI的spec了
06/18 09:47, 21F

06/18 09:50, , 22F
我覺得來這版問應該是要TRACE 但是聽你敘述像是做BIOS
06/18 09:50, 22F

06/18 09:52, , 23F
可能只需要改Offset跟Count而已
06/18 09:52, 23F
的確我在研究整個流程.API從無到有怎寫 而不是單純改改... ※ 編輯: kingofsdtw (59.126.81.119), 06/18/2014 14:17:46
文章代碼(AID): #1JdbX0C2 (C_and_CPP)