The U-Boot Driver Model Project =============================== PCMCIA analysis =============== Viktor Krivak 2012-03-17 I) Overview ----------- U-boot implements only 2 methods to interoperate with pcmcia. One to turn device on and other to turn device off. Names of these methods are usually pcmcia_on() and pcmcia_off() without any parameters. Some files in driver directory implements only internal API. These methods aren't used outside driver directory and they are not converted to new driver model. II) Approach ----------- 1) New API ---------- Current API is preserved and all internal methods are hiden. struct ops { void (*pcmcia_on)(struct instance *i); void (*pcmcia_off)(struct instance *i); } 2) Conversion ------------- In header file pcmcia.h are some other variables which are used for additional configuration. But all have to be moved to platform data or to specific driver implementation. 3) Platform data ---------------- Many boards have custom implementation of internal API. Pointers to these methods are stored in platform_data. But the most implementations for Intel 82365 and compatible PC Card controllers and Yenta-compatible PCI-to-CardBus controllers implement whole API per board. In these cases pcmcia_on() and pcmcia_off() behave only as wrappers and call specific board methods. III) Analysis of in-tree drivers -------------------------------- i82365.c -------- Driver methods have different name i82365_init() and i82365_exit but all functionality is the same. Board files board/atc/ti113x.c and board/cpc45/pd67290.c use their own implementation of these method. In this case all methods in driver behave only as wrappers. marubun_pcmcia.c ---------------- Meets standard API behaviour. Simple conversion. mpc8xx_pcmcia.c --------------- Meets standard API behaviour. Simple conversion. rpx_pcmcia.c ------------ Implements only internal API used in other drivers. Non of methods implemented here are used outside driver model. ti_pci1410a.c ------------- Has different API but methods in this file are never called. Probably dead code. tqm8xx_pcmcia.c --------------- Implements only internal API used in other drivers. Non of methods implemented here are used outside driver model.