| The U-Boot Driver Model Project |
| =============================== |
| PCMCIA analysis |
| =============== |
| Viktor Krivak <viktor.krivak@gmail.com> |
| 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 |
| -------------------------------- |
| |
| 1) 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. |
| |
| 2) marubun_pcmcia.c |
| ------------------- |
| Meets standard API behaviour. Simple conversion. |
| |
| 3) mpc8xx_pcmcia.c |
| ------------------ |
| Meets standard API behaviour. Simple conversion. |
| |
| 4) rpx_pcmcia.c |
| --------------- |
| Implements only internal API used in other drivers. Non of methods |
| implemented here are used outside driver model. |
| |
| 5) ti_pci1410a.c |
| ---------------- |
| Has different API but methods in this file are never called. Probably |
| dead code. |
| |
| 6)tqm8xx_pcmcia.c |
| ----------------- |
| Implements only internal API used in other drivers. Non of methods |
| implemented here are used outside driver model. |